From fe3577f516a23612bdaba26379309cfb2b25afa9 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 22 Dec 2024 11:08:28 +0100 Subject: [PATCH] TryCreateModeArrows matched --- include/structs/sprite_oam.h | 145 +++---- src/code_805D8C8_1.c | 709 +++-------------------------------- 2 files changed, 127 insertions(+), 727 deletions(-) diff --git a/include/structs/sprite_oam.h b/include/structs/sprite_oam.h index 867c0d0a0..1cbc1209f 100644 --- a/include/structs/sprite_oam.h +++ b/include/structs/sprite_oam.h @@ -119,120 +119,129 @@ typedef struct SpriteOAM #define SpriteSetAffine1(spritePtr, _affine1) \ { \ - u32 affine1 = _affine1; \ - affine1 &= SPRITEOAM_MAX_AFFINEMODE1; \ - affine1 <<= SPRITEOAM_SHIFT_AFFINEMODE1; \ + u32 _affine1Val = _affine1; \ + _affine1Val &= SPRITEOAM_MAX_AFFINEMODE1; \ + _affine1Val <<= SPRITEOAM_SHIFT_AFFINEMODE1; \ (spritePtr)->attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE1; \ - (spritePtr)->attrib1 |= affine1; \ + (spritePtr)->attrib1 |= _affine1Val; \ } #define SpriteSetAffine2(spritePtr, _affine2) \ { \ - u32 affine2 = _affine2; \ - affine2 &= SPRITEOAM_MAX_AFFINEMODE2; \ - affine2 <<= SPRITEOAM_SHIFT_AFFINEMODE2; \ + u32 _affine2Val = _affine2; \ + _affine2Val &= SPRITEOAM_MAX_AFFINEMODE2; \ + _affine2Val <<= SPRITEOAM_SHIFT_AFFINEMODE2; \ (spritePtr)->attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE2; \ - (spritePtr)->attrib1 |= affine2; \ + (spritePtr)->attrib1 |= _affine2Val; \ } #define SpriteSetObjMode(spritePtr, _objMode) \ { \ - u32 objMode = _objMode; \ - objMode &= SPRITEOAM_MAX_OBJMODE; \ - objMode <<= SPRITEOAM_SHIFT_OBJMODE; \ + u32 _objModeVal = _objMode; \ + _objModeVal &= SPRITEOAM_MAX_OBJMODE; \ + _objModeVal <<= SPRITEOAM_SHIFT_OBJMODE; \ (spritePtr)->attrib1 &= ~SPRITEOAM_MASK_OBJMODE; \ - (spritePtr)->attrib1 |= objMode; \ + (spritePtr)->attrib1 |= _objModeVal; \ } #define SpriteSetMosaic(spritePtr, _mosaic) \ { \ - u32 mosaic = _mosaic; \ - mosaic &= SPRITEOAM_MAX_MOSAIC; \ - mosaic <<= SPRITEOAM_SHIFT_MOSAIC; \ + u32 _mosaicVal = _mosaic; \ + _mosaicVal &= SPRITEOAM_MAX_MOSAIC; \ + _mosaicVal <<= SPRITEOAM_SHIFT_MOSAIC; \ (spritePtr)->attrib1 &= ~SPRITEOAM_MASK_MOSAIC; \ - (spritePtr)->attrib1 |= mosaic; \ + (spritePtr)->attrib1 |= _mosaicVal; \ } #define SpriteSetBpp(spritePtr, _bpp) \ { \ - u32 bpp = _bpp; \ - bpp &= SPRITEOAM_MAX_BPP; \ - bpp <<= SPRITEOAM_SHIFT_BPP; \ + u32 _bppVal = _bpp; \ + _bppVal &= SPRITEOAM_MAX_BPP; \ + _bppVal <<= SPRITEOAM_SHIFT_BPP; \ (spritePtr)->attrib1 &= ~SPRITEOAM_MASK_BPP; \ - (spritePtr)->attrib1 |= bpp; \ + (spritePtr)->attrib1 |= _bppVal; \ } #define SpriteSetShape(spritePtr, _shape) \ { \ - u32 shape = _shape; \ - shape &= SPRITEOAM_MAX_SHAPE; \ - shape <<= SPRITEOAM_SHIFT_SHAPE; \ + u32 _shapeVal = _shape; \ + _shapeVal &= SPRITEOAM_MAX_SHAPE; \ + _shapeVal <<= SPRITEOAM_SHIFT_SHAPE; \ (spritePtr)->attrib1 &= ~SPRITEOAM_MASK_SHAPE; \ - (spritePtr)->attrib1 |= shape; \ + (spritePtr)->attrib1 |= _shapeVal; \ } #define SpriteSetTileNum(spritePtr, _tileNum) \ { \ - u32 tileNum = _tileNum; \ - tileNum &= SPRITEOAM_MAX_TILENUM; \ - tileNum <<= SPRITEOAM_SHIFT_TILENUM; \ + u32 _tileNumVal = _tileNum; \ + _tileNumVal &= SPRITEOAM_MAX_TILENUM; \ + _tileNumVal <<= SPRITEOAM_SHIFT_TILENUM; \ (spritePtr)->attrib3 &= ~SPRITEOAM_MASK_TILENUM; \ - (spritePtr)->attrib3 |= tileNum; \ + (spritePtr)->attrib3 |= _tileNumVal; \ } #define SpriteSetPriority(spritePtr, _priority) \ { \ - u32 priority = _priority; \ - priority &= SPRITEOAM_MAX_PRIORITY; \ - priority <<= SPRITEOAM_SHIFT_PRIORITY; \ + u32 _priorityVal = _priority; \ + _priorityVal &= SPRITEOAM_MAX_PRIORITY; \ + _priorityVal <<= SPRITEOAM_SHIFT_PRIORITY; \ (spritePtr)->attrib3 &= ~SPRITEOAM_MASK_PRIORITY; \ - (spritePtr)->attrib3 |= priority; \ + (spritePtr)->attrib3 |= _priorityVal; \ } #define SpriteSetPalNum(spritePtr, _palNum) \ { \ - u32 palNum = _palNum; \ - palNum &= SPRITEOAM_MAX_PALETTENUM; \ - palNum <<= SPRITEOAM_SHIFT_PALETTENUM; \ + u32 _palNumVal = _palNum; \ + _palNumVal &= SPRITEOAM_MAX_PALETTENUM; \ + _palNumVal <<= SPRITEOAM_SHIFT_PALETTENUM; \ (spritePtr)->attrib3 &= ~SPRITEOAM_MASK_PALETTENUM; \ - (spritePtr)->attrib3 |= palNum; \ + (spritePtr)->attrib3 |= _palNumVal; \ } #define SpriteSetMatrixNum(spritePtr, _matrixNum) \ { \ - u32 matrixNum = _matrixNum; \ - matrixNum &= SPRITEOAM_MAX_MATRIXNUM; \ - matrixNum <<= SPRITEOAM_SHIFT_MATRIXNUM; \ + u32 _matrixNumVal = _matrixNum; \ + _matrixNumVal &= SPRITEOAM_MAX_MATRIXNUM; \ + _matrixNumVal <<= SPRITEOAM_SHIFT_MATRIXNUM; \ (spritePtr)->attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM; \ - (spritePtr)->attrib2 |= matrixNum; \ + (spritePtr)->attrib2 |= _matrixNumVal; \ +} + +// Needed for TryCreateModeArrows. No difference to SpriteSetMatrixNum other than not creating one additional local variable. +#define SpriteSetMatrixNum_UseLocalVar(spritePtr, _matrixNum) \ +{ \ + _matrixNum &= SPRITEOAM_MAX_MATRIXNUM; \ + _matrixNum <<= SPRITEOAM_SHIFT_MATRIXNUM; \ + (spritePtr)->attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM; \ + (spritePtr)->attrib2 |= _matrixNum; \ } #define SpriteSetSize(spritePtr, _size) \ { \ - u32 size = _size; \ - size &= SPRITEOAM_MAX_SIZE; \ - size <<= SPRITEOAM_SHIFT_SIZE; \ + u32 _sizeVal = _size; \ + _sizeVal &= SPRITEOAM_MAX_SIZE; \ + _sizeVal <<= SPRITEOAM_SHIFT_SIZE; \ (spritePtr)->attrib2 &= ~SPRITEOAM_MASK_SIZE; \ - (spritePtr)->attrib2 |= size; \ + (spritePtr)->attrib2 |= _sizeVal; \ } #define SpriteSetX(spritePtr, _x) \ { \ - u32 xSpriteVal = _x; \ - xSpriteVal &= SPRITEOAM_MAX_X; \ - xSpriteVal <<= SPRITEOAM_SHIFT_X; \ + u32 _xSpriteVal = _x; \ + _xSpriteVal &= SPRITEOAM_MAX_X; \ + _xSpriteVal <<= SPRITEOAM_SHIFT_X; \ (spritePtr)->attrib2 &= ~SPRITEOAM_MASK_X; \ - (spritePtr)->attrib2 |= xSpriteVal; \ + (spritePtr)->attrib2 |= _xSpriteVal; \ } // Hacky way of matching functions in menu_input.c AddMenuCursorSprite_, sub_801332C sub_8013470 #define SpriteSetX_MatrixNumSize0(spritePtr, _x) \ { \ - u32 xSpriteVal = _x; \ - xSpriteVal &= SPRITEOAM_MAX_X; \ - xSpriteVal <<= SPRITEOAM_SHIFT_X; \ + u32 _xSpriteVal = _x; \ + _xSpriteVal &= SPRITEOAM_MAX_X; \ + _xSpriteVal <<= SPRITEOAM_SHIFT_X; \ (spritePtr)->attrib2 &= ~SPRITEOAM_MASK_X; \ - (spritePtr)->attrib2 = xSpriteVal; \ + (spritePtr)->attrib2 = _xSpriteVal; \ } #define SpriteGetY(spritePtr, _y) \ @@ -244,11 +253,11 @@ typedef struct SpriteOAM #define SpriteSetY(spritePtr, _y) \ { \ - u32 ySpriteVal = _y; \ - ySpriteVal &= SPRITEOAM_MAX_UNK6_4; \ - ySpriteVal <<= SPRITEOAM_SHIFT_UNK6_4; \ + u32 _ySpriteVal = _y; \ + _ySpriteVal &= SPRITEOAM_MAX_UNK6_4; \ + _ySpriteVal <<= SPRITEOAM_SHIFT_UNK6_4; \ (spritePtr)->unk6 &= ~SPRITEOAM_MASK_UNK6_4; \ - (spritePtr)->unk6 |= ySpriteVal; \ + (spritePtr)->unk6 |= _ySpriteVal; \ } #define SpriteAddY(spritePtr, addVal) \ @@ -261,29 +270,29 @@ typedef struct SpriteOAM #define SpriteSetUnk6_0(spritePtr, _unk6_0) \ { \ - u32 unk6_0 = _unk6_0; \ - unk6_0 &= SPRITEOAM_MAX_UNK6_0; \ - unk6_0 <<= SPRITEOAM_SHIFT_UNK6_0; \ + u32 _unk6_0Val = _unk6_0; \ + _unk6_0Val &= SPRITEOAM_MAX_UNK6_0; \ + _unk6_0Val <<= SPRITEOAM_SHIFT_UNK6_0; \ (spritePtr)->unk6 &= ~SPRITEOAM_MASK_UNK6_0; \ - (spritePtr)->unk6 |= unk6_0; \ + (spritePtr)->unk6 |= _unk6_0Val; \ } #define SpriteSetUnk6_1(spritePtr, _unk6_1) \ { \ - u32 unk6_1 = _unk6_1; \ - unk6_1 &= SPRITEOAM_MAX_UNK6_1; \ - unk6_1 <<= SPRITEOAM_SHIFT_UNK6_1; \ + u32 _unk6_1Val = _unk6_1; \ + _unk6_1Val &= SPRITEOAM_MAX_UNK6_1; \ + _unk6_1Val <<= SPRITEOAM_SHIFT_UNK6_1; \ (spritePtr)->unk6 &= ~SPRITEOAM_MASK_UNK6_1; \ - (spritePtr)->unk6 |= unk6_1; \ + (spritePtr)->unk6 |= _unk6_1Val; \ } #define SpriteSetUnk6_2(spritePtr, _unk6_2) \ { \ - u32 unk6_2 = _unk6_2; \ - unk6_2 &= SPRITEOAM_MAX_UNK6_2; \ - unk6_2 <<= SPRITEOAM_SHIFT_UNK6_2; \ + u32 _unk6_2Val = _unk6_2; \ + _unk6_2Val &= SPRITEOAM_MAX_UNK6_2; \ + _unk6_2Val <<= SPRITEOAM_SHIFT_UNK6_2; \ (spritePtr)->unk6 &= ~SPRITEOAM_MASK_UNK6_2; \ - (spritePtr)->unk6 |= unk6_2; \ + (spritePtr)->unk6 |= _unk6_2Val; \ } #endif // GUARD_SPRITE_OAM_H diff --git a/src/code_805D8C8_1.c b/src/code_805D8C8_1.c index d32adff7e..1fd19e071 100644 --- a/src/code_805D8C8_1.c +++ b/src/code_805D8C8_1.c @@ -624,8 +624,6 @@ struct UnkStruct_8106AE8 extern const struct UnkStruct_8106AE8 gUnknown_8106AE8[]; -#ifdef NONMATCHING -// Sprite OAM memes. https://decomp.me/scratch/Jm4oC // Creates arrow sprites which are used when in rotate or diagonal modes. static void TryCreateModeArrows(Entity *leader) { @@ -636,145 +634,90 @@ static void TryCreateModeArrows(Entity *leader) SpriteOAM sprite; for (i = 0; i < 4; i++) { - u32 objMode, matrixNum, tileNum, prio, xSprite, unk6; + u32 matrixNum; s32 x, xMul, x2; - s32 unk1, unk1Mul, unk2; + s32 y, yMul, y2; - sprite.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE1; - sprite.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE2; + SpriteSetAffine1(&sprite, 0); + SpriteSetAffine2(&sprite, 0); + SpriteSetObjMode(&sprite, 1); + SpriteSetMosaic(&sprite, 0); + SpriteSetBpp(&sprite, 0); + SpriteSetShape(&sprite, 0); - objMode = 1 << SPRITEOAM_SHIFT_OBJMODE; - sprite.attrib1 &= ~SPRITEOAM_MASK_OBJMODE; - sprite.attrib1 |= objMode; - - sprite.attrib1 &= ~SPRITEOAM_MASK_MOSAIC; - sprite.attrib1 &= ~SPRITEOAM_MASK_BPP; - - sprite.attrib1 &= ~SPRITEOAM_MASK_SHAPE; - - if (gUnknown_8106AC8[i].unk4 != 0) - matrixNum = 8; - else - matrixNum = 0; + matrixNum = (gUnknown_8106AC8[i].unk4 != 0) ? 8 : 0; if (gUnknown_8106AC8[i].unk5) matrixNum += 16; - matrixNum &= SPRITEOAM_MAX_MATRIXNUM; - matrixNum <<= SPRITEOAM_SHIFT_MATRIXNUM; - sprite.attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM; - sprite.attrib2 |= matrixNum; + SpriteSetMatrixNum_UseLocalVar(&sprite, matrixNum); + SpriteSetSize(&sprite, 0); - sprite.attrib2 &= ~SPRITEOAM_MASK_SHAPE; + SpriteSetTileNum(&sprite, 0x213); + SpriteSetPriority(&sprite, 2); + SpriteSetPalNum(&sprite, 0); - tileNum = 0x213 << SPRITEOAM_SHIFT_TILENUM; - sprite.attrib3 &= ~SPRITEOAM_MASK_TILENUM; - sprite.attrib3 |= tileNum; + SpriteSetUnk6_0(&sprite, 0); + SpriteSetUnk6_1(&sprite, 0); - prio = 2 << SPRITEOAM_SHIFT_PRIORITY; - sprite.attrib3 &= ~SPRITEOAM_MASK_PRIORITY; - sprite.attrib3 |= prio; - - sprite.attrib3 &= ~SPRITEOAM_MASK_PALETTENUM; - - sprite.unk6 &= ~SPRITEOAM_MASK_UNK6_0; - sprite.unk6 &= ~SPRITEOAM_MASK_UNK6_1; - - x = gUnknown_8106AC8[i].unk0; - xMul = x * 10; + xMul = gUnknown_8106AC8[i].unk0 * 10; x2 = (sArrowsFrames / 2) & 7; - xSprite = xMul + 116 + (x2 * x); - xSprite &= SPRITEOAM_MAX_X; - xSprite <<= SPRITEOAM_SHIFT_X; - sprite.attrib2 &= ~SPRITEOAM_MASK_X; - sprite.attrib2 |= xSprite; + x = (x2 * gUnknown_8106AC8[i].unk0) + xMul + 116; + SpriteSetX(&sprite, x); - unk1 = gUnknown_8106AC8[i].unk2; - unk1Mul = unk1 * 10; - unk2 = (sArrowsFrames / 2) & 7; - unk6 = 82 + unk1Mul + (unk2 * unk1); - unk6 &= SPRITEOAM_MAX_UNK6_4; - unk6 <<= SPRITEOAM_SHIFT_UNK6_4; - sprite.unk6 &= ~SPRITEOAM_MASK_UNK6_4; - sprite.unk6 |= unk6; + yMul = gUnknown_8106AC8[i].unk2 * 10; + y2 = (sArrowsFrames / 2) & 7; + y = (y2 * gUnknown_8106AC8[i].unk2) + yMul + 82; + SpriteSetY(&sprite, y); AddSprite(&sprite, 0x100, NULL, NULL); } } + else if (unkPtr->unk1821A) { - s32 i, to; + s32 i; SpriteOAM sprite; s32 var_2C = unkPtr->unk1821B; - s32 x, y; - s32 x1, x2, xMul; - s32 y1, y2, yMul; - if (var_2C < 8u) { - to = (sShowThreeArrows2 != 0 && sShowThreeArrows1 != 0) ? 3 : 1; + if (unkPtr->unk1821B < 8) { + s32 x, xMul, x2; + s32 y, yMul, y2; + s32 to = (sShowThreeArrows2 != FALSE && sShowThreeArrows1 != FALSE) ? 3 : 1; - x1 = gUnknown_8106AE8[var_2C].unk0; - xMul = x1 * 10; + xMul = gUnknown_8106AE8[var_2C].unk0 * 10; x2 = (sArrowsFrames / 2) & 7; - x = xMul + 116 + (x1 * x2); + x = (gUnknown_8106AE8[var_2C].unk0 * x2) + xMul + 116; - y1 = gUnknown_8106AE8[var_2C].unk2; - yMul = y1 * 10; + yMul = gUnknown_8106AE8[var_2C].unk2 * 10; y2 = (sArrowsFrames / 2) & 7; - y = 82 + yMul + (y2 * y1); + y = (y2 * gUnknown_8106AE8[var_2C].unk2) + yMul + 82; for (i = 0; i < to; i++) { - u32 objMode, tileNum, prio, matrixNum, xSprite, ySprite; + u32 matrixNum; - sprite.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE1; - sprite.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE2; + SpriteSetAffine1(&sprite, 0); + SpriteSetAffine2(&sprite, 0); + SpriteSetObjMode(&sprite, 1); + SpriteSetMosaic(&sprite, 0); + SpriteSetBpp(&sprite, 0); + SpriteSetShape(&sprite, 0); - objMode = 1 << SPRITEOAM_SHIFT_OBJMODE; - sprite.attrib1 &= ~SPRITEOAM_MASK_OBJMODE; - sprite.attrib1 |= objMode; - - sprite.attrib1 &= ~SPRITEOAM_MASK_MOSAIC; - sprite.attrib1 &= ~SPRITEOAM_MASK_BPP; - - sprite.attrib1 &= ~SPRITEOAM_MASK_SHAPE; - - if (gUnknown_8106AE8[var_2C].unk8 != 0) - matrixNum = 8; - else - matrixNum = 0; + matrixNum = (gUnknown_8106AE8[var_2C].unk8 != 0) ? 8 : 0; if (gUnknown_8106AE8[var_2C].unk9) matrixNum += 16; - matrixNum &= SPRITEOAM_MAX_MATRIXNUM; - matrixNum <<= SPRITEOAM_SHIFT_MATRIXNUM; - sprite.attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM; - sprite.attrib2 |= matrixNum; + SpriteSetMatrixNum_UseLocalVar(&sprite, matrixNum); + SpriteSetSize(&sprite, 0); - sprite.attrib2 &= ~SPRITEOAM_MASK_SIZE; + SpriteSetTileNum(&sprite, gUnknown_8106AE8[var_2C].unk4); + SpriteSetPriority(&sprite, 2); + SpriteSetPalNum(&sprite, 0); - tileNum = gUnknown_8106AE8[var_2C].unk4; - sprite.attrib3 &= ~SPRITEOAM_MASK_TILENUM; - sprite.attrib3 |= tileNum; + SpriteSetUnk6_0(&sprite, 0); + SpriteSetUnk6_1(&sprite, 0); - prio = 2 << SPRITEOAM_SHIFT_PRIORITY; - sprite.attrib3 &= ~SPRITEOAM_MASK_PRIORITY; - sprite.attrib3 |= prio; - - sprite.attrib3 &= ~SPRITEOAM_MASK_PALETTENUM; - - sprite.unk6 &= ~SPRITEOAM_MASK_UNK6_0; - sprite.unk6 &= ~SPRITEOAM_MASK_UNK6_1; - - xSprite = x; - xSprite &= SPRITEOAM_MAX_X; - xSprite <<= SPRITEOAM_SHIFT_X; - sprite.attrib2 &= ~SPRITEOAM_MASK_X; - sprite.attrib2 |= xSprite; - - ySprite = y; - ySprite &= SPRITEOAM_MAX_UNK6_4; - ySprite <<= SPRITEOAM_SHIFT_UNK6_4; - sprite.unk6 &= ~SPRITEOAM_MASK_UNK6_4; - sprite.unk6 |= ySprite; + SpriteSetX(&sprite, x); + SpriteSetY(&sprite, y); AddSprite(&sprite, 0x100, NULL, NULL); x += gUnknown_8106AE8[var_2C].unk0 * 4; @@ -789,558 +732,6 @@ static void TryCreateModeArrows(Entity *leader) } } -#else -NAKED static void TryCreateModeArrows(Entity *leader) -{ - asm_unified( "\n" -" push {r4-r7,lr}\n" -" mov r7, r10\n" -" mov r6, r9\n" -" mov r5, r8\n" -" push {r5-r7}\n" -" sub sp, 0x28\n" -" str r0, [sp, 0x10]\n" -" ldr r0, _0805E47C\n" -" ldr r1, [r0]\n" -" ldr r0, _0805E480\n" -" adds r0, r1, r0\n" -" str r0, [sp, 0x14]\n" -" ldr r0, _0805E484\n" -" ldrb r0, [r0]\n" -" cmp r0, 0\n" -" bne _0805E2E6\n" -" b _0805E4C4\n" -"_0805E2E6:\n" -" movs r1, 0\n" -" str r1, [sp, 0x18]\n" -" mov r7, sp\n" -" ldr r2, _0805E488\n" -" mov r10, r2\n" -"_0805E2F0:\n" -" ldrh r0, [r7]\n" -" ldr r3, _0805E48C\n" -" adds r1, r3, 0\n" -" ands r1, r0\n" -" ldr r0, [sp]\n" -" mov r4, r10\n" -" ands r0, r4\n" -" orrs r0, r1\n" -" str r0, [sp]\n" -" ldrh r1, [r7]\n" -" mov r2, r10\n" -" ands r2, r0\n" -" orrs r2, r1\n" -" str r2, [sp]\n" -" ldrh r0, [r7]\n" -" ldr r5, _0805E490\n" -" adds r1, r5, 0\n" -" ands r1, r0\n" -" mov r0, r10\n" -" ands r0, r2\n" -" orrs r0, r1\n" -" str r0, [sp]\n" -" ldrh r2, [r7]\n" -" mov r1, r10\n" -" ands r1, r0\n" -" orrs r1, r2\n" -" str r1, [sp]\n" -" ldrh r2, [r7]\n" -" ldr r0, _0805E494\n" -" ands r0, r2\n" -" mov r3, r10\n" -" ands r3, r1\n" -" orrs r3, r0\n" -" str r3, [sp]\n" -" ldrh r1, [r7]\n" -" movs r0, 0x80\n" -" lsls r0, 3\n" -" orrs r0, r1\n" -" movs r6, 0\n" -" orrs r0, r6\n" -" mov r2, r10\n" -" ands r2, r3\n" -" orrs r2, r0\n" -" str r2, [sp]\n" -" ldrh r0, [r7]\n" -" ldr r3, _0805E498\n" -" adds r1, r3, 0\n" -" ands r1, r0\n" -" mov r0, r10\n" -" ands r0, r2\n" -" orrs r0, r1\n" -" str r0, [sp]\n" -" ldrh r1, [r7]\n" -" mov r2, r10\n" -" ands r2, r0\n" -" orrs r2, r1\n" -" str r2, [sp]\n" -" ldrh r0, [r7]\n" -" ldr r4, _0805E49C\n" -" adds r1, r4, 0\n" -" ands r1, r0\n" -" mov r0, r10\n" -" ands r0, r2\n" -" orrs r0, r1\n" -" str r0, [sp]\n" -" ldrh r1, [r7]\n" -" mov r2, r10\n" -" ands r2, r0\n" -" orrs r2, r1\n" -" str r2, [sp]\n" -" ldrh r1, [r7]\n" -" ldr r0, _0805E4A0\n" -" ands r0, r1\n" -" mov r1, r10\n" -" ands r1, r2\n" -" orrs r1, r0\n" -" str r1, [sp]\n" -" ldrh r2, [r7]\n" -" mov r0, r10\n" -" ands r0, r1\n" -" orrs r0, r2\n" -" str r0, [sp]\n" -" ldr r1, _0805E4A4\n" -" ldr r5, [sp, 0x18]\n" -" lsls r0, r5, 3\n" -" adds r0, r1\n" -" mov r12, r0\n" -" ldrb r1, [r0, 0x4]\n" -" negs r0, r1\n" -" orrs r0, r1\n" -" asrs r1, r0, 31\n" -" movs r0, 0x8\n" -" ands r1, r0\n" -" mov r6, r12\n" -" ldrb r0, [r6, 0x5]\n" -" cmp r0, 0\n" -" beq _0805E3B4\n" -" adds r1, 0x10\n" -"_0805E3B4:\n" -" movs r0, 0x1F\n" -" ands r1, r0\n" -" lsls r1, 9\n" -" ldrh r3, [r7, 0x2]\n" -" ldr r2, _0805E4A8\n" -" adds r0, r2, 0\n" -" ands r3, r0\n" -" orrs r3, r1\n" -" ldr r4, _0805E4A0\n" -" ands r3, r4\n" -" strh r3, [r7, 0x2]\n" -" ldr r2, _0805E4AC\n" -" ldrh r0, [r7, 0x4]\n" -" movs r5, 0xFC\n" -" lsls r5, 8\n" -" adds r1, r5, 0\n" -" ands r0, r1\n" -" orrs r0, r2\n" -" movs r6, 0\n" -" orrs r0, r6\n" -" movs r1, 0x80\n" -" lsls r1, 4\n" -" ldr r2, _0805E494\n" -" ands r0, r2\n" -" orrs r0, r1\n" -" orrs r0, r6\n" -" ldr r4, _0805E4B0\n" -" mov r9, r4\n" -" ands r0, r4\n" -" strh r0, [r7, 0x4]\n" -" ldrh r4, [r7, 0x6]\n" -" ldr r5, _0805E4B4\n" -" adds r0, r5, 0\n" -" ands r4, r0\n" -" ldr r6, _0805E4B8\n" -" adds r0, r6, 0\n" -" ands r4, r0\n" -" strh r4, [r7, 0x6]\n" -" mov r0, r12\n" -" movs r1, 0\n" -" ldrsh r5, [r0, r1]\n" -" lsls r2, r5, 2\n" -" adds r2, r5\n" -" lsls r2, 1\n" -" ldr r6, _0805E4BC\n" -" mov r8, r6\n" -" movs r1, 0\n" -" ldrsh r0, [r6, r1]\n" -" lsrs r1, r0, 31\n" -" adds r0, r1\n" -" asrs r0, 1\n" -" movs r6, 0x7\n" -" ands r0, r6\n" -" muls r0, r5\n" -" adds r0, r2\n" -" adds r0, 0x74\n" -" ldr r1, _0805E4C0\n" -" ands r0, r1\n" -" movs r2, 0xFE\n" -" lsls r2, 8\n" -" adds r1, r2, 0\n" -" ands r3, r1\n" -" orrs r3, r0\n" -" strh r3, [r7, 0x2]\n" -" mov r5, r12\n" -" movs r0, 0x2\n" -" ldrsh r3, [r5, r0]\n" -" lsls r2, r3, 2\n" -" adds r2, r3\n" -" lsls r2, 1\n" -" mov r1, r8\n" -" movs r5, 0\n" -" ldrsh r0, [r1, r5]\n" -" lsrs r1, r0, 31\n" -" adds r0, r1\n" -" asrs r0, 1\n" -" ands r0, r6\n" -" muls r0, r3\n" -" adds r0, r2\n" -" adds r0, 0x52\n" -" mov r6, r9\n" -" ands r0, r6\n" -" lsls r0, 4\n" -" movs r1, 0xF\n" -" ands r4, r1\n" -" orrs r4, r0\n" -" strh r4, [r7, 0x6]\n" -" mov r0, sp\n" -" adds r1, 0xF1\n" -" movs r2, 0\n" -" movs r3, 0\n" -" bl AddSprite\n" -" ldr r2, [sp, 0x18]\n" -" adds r2, 0x1\n" -" str r2, [sp, 0x18]\n" -" cmp r2, 0x3\n" -" bgt _0805E47A\n" -" b _0805E2F0\n" -"_0805E47A:\n" -" b _0805E6AC\n" -" .align 2, 0\n" -"_0805E47C: .4byte gDungeon\n" -"_0805E480: .4byte 0x000181e8\n" -"_0805E484: .4byte sInDiagonalMode\n" -"_0805E488: .4byte 0xffff0000\n" -"_0805E48C: .4byte 0x0000feff\n" -"_0805E490: .4byte 0x0000fdff\n" -"_0805E494: .4byte 0x0000f3ff\n" -"_0805E498: .4byte 0x0000efff\n" -"_0805E49C: .4byte 0x0000dfff\n" -"_0805E4A0: .4byte 0x00003fff\n" -"_0805E4A4: .4byte gUnknown_8106AC8\n" -"_0805E4A8: .4byte 0x0000c1ff\n" -"_0805E4AC: .4byte 0x00000213\n" -"_0805E4B0: .4byte 0x00000fff\n" -"_0805E4B4: .4byte 0x0000fffe\n" -"_0805E4B8: .4byte 0x0000fffd\n" -"_0805E4BC: .4byte sArrowsFrames\n" -"_0805E4C0: .4byte 0x000001ff\n" -"_0805E4C4:\n" -" ldr r3, _0805E6E4\n" -" adds r0, r1, r3\n" -" ldrb r0, [r0]\n" -" cmp r0, 0\n" -" bne _0805E4D0\n" -" b _0805E6AC\n" -"_0805E4D0:\n" -" ldr r4, _0805E6E8\n" -" adds r0, r1, r4\n" -" ldrb r0, [r0]\n" -" str r0, [sp, 0x1C]\n" -" cmp r0, 0x7\n" -" bls _0805E4DE\n" -" b _0805E6AC\n" -"_0805E4DE:\n" -" ldr r0, _0805E6EC\n" -" ldrb r0, [r0]\n" -" movs r7, 0x1\n" -" cmp r0, 0\n" -" beq _0805E4F2\n" -" ldr r0, _0805E6F0\n" -" ldrb r0, [r0]\n" -" cmp r0, 0\n" -" beq _0805E4F2\n" -" movs r7, 0x3\n" -"_0805E4F2:\n" -" ldr r5, _0805E6F4\n" -" mov r12, r5\n" -" ldr r6, [sp, 0x1C]\n" -" lsls r5, r6, 1\n" -" adds r3, r5, r6\n" -" lsls r3, 2\n" -" add r3, r12\n" -" movs r0, 0\n" -" ldrsh r4, [r3, r0]\n" -" lsls r1, r4, 2\n" -" adds r1, r4\n" -" lsls r1, 1\n" -" ldr r0, _0805E6F8\n" -" movs r6, 0\n" -" ldrsh r2, [r0, r6]\n" -" lsrs r0, r2, 31\n" -" adds r2, r0\n" -" asrs r2, 1\n" -" movs r0, 0x7\n" -" ands r2, r0\n" -" adds r0, r4, 0\n" -" muls r0, r2\n" -" adds r0, r1\n" -" adds r0, 0x74\n" -" str r0, [sp, 0x20]\n" -" movs r1, 0x2\n" -" ldrsh r0, [r3, r1]\n" -" lsls r1, r0, 2\n" -" adds r1, r0\n" -" lsls r1, 1\n" -" muls r0, r2\n" -" adds r0, r1\n" -" adds r0, 0x52\n" -" mov r10, r0\n" -" str r5, [sp, 0x24]\n" -" cmp r7, 0\n" -" bne _0805E53E\n" -" b _0805E6AC\n" -"_0805E53E:\n" -" add r6, sp, 0x8\n" -" ldr r2, _0805E6FC\n" -" mov r8, r2\n" -" mov r9, r7\n" -"_0805E546:\n" -" ldrh r0, [r6]\n" -" ldr r3, _0805E700\n" -" adds r1, r3, 0\n" -" ands r1, r0\n" -" ldr r0, [sp, 0x8]\n" -" mov r4, r8\n" -" ands r0, r4\n" -" orrs r0, r1\n" -" str r0, [sp, 0x8]\n" -" ldrh r1, [r6]\n" -" mov r2, r8\n" -" ands r2, r0\n" -" orrs r2, r1\n" -" str r2, [sp, 0x8]\n" -" ldrh r0, [r6]\n" -" ldr r5, _0805E704\n" -" adds r1, r5, 0\n" -" ands r1, r0\n" -" mov r0, r8\n" -" ands r0, r2\n" -" orrs r0, r1\n" -" str r0, [sp, 0x8]\n" -" ldrh r2, [r6]\n" -" mov r1, r8\n" -" ands r1, r0\n" -" orrs r1, r2\n" -" str r1, [sp, 0x8]\n" -" ldrh r2, [r6]\n" -" ldr r0, _0805E708\n" -" ands r0, r2\n" -" mov r3, r8\n" -" ands r3, r1\n" -" orrs r3, r0\n" -" str r3, [sp, 0x8]\n" -" ldrh r1, [r6]\n" -" movs r0, 0x80\n" -" lsls r0, 3\n" -" orrs r0, r1\n" -" movs r1, 0\n" -" orrs r0, r1\n" -" mov r2, r8\n" -" ands r2, r3\n" -" orrs r2, r0\n" -" str r2, [sp, 0x8]\n" -" ldrh r0, [r6]\n" -" ldr r3, _0805E70C\n" -" adds r1, r3, 0\n" -" ands r1, r0\n" -" mov r0, r8\n" -" ands r0, r2\n" -" orrs r0, r1\n" -" str r0, [sp, 0x8]\n" -" ldrh r1, [r6]\n" -" mov r2, r8\n" -" ands r2, r0\n" -" orrs r2, r1\n" -" str r2, [sp, 0x8]\n" -" ldrh r0, [r6]\n" -" ldr r4, _0805E710\n" -" adds r1, r4, 0\n" -" ands r1, r0\n" -" mov r0, r8\n" -" ands r0, r2\n" -" orrs r0, r1\n" -" str r0, [sp, 0x8]\n" -" ldrh r1, [r6]\n" -" mov r2, r8\n" -" ands r2, r0\n" -" orrs r2, r1\n" -" str r2, [sp, 0x8]\n" -" ldrh r1, [r6]\n" -" ldr r0, _0805E714\n" -" ands r0, r1\n" -" mov r1, r8\n" -" ands r1, r2\n" -" orrs r1, r0\n" -" str r1, [sp, 0x8]\n" -" ldrh r2, [r6]\n" -" mov r0, r8\n" -" ands r0, r1\n" -" orrs r0, r2\n" -" str r0, [sp, 0x8]\n" -" ldr r5, [sp, 0x24]\n" -" ldr r1, [sp, 0x1C]\n" -" adds r0, r5, r1\n" -" lsls r2, r0, 2\n" -" ldr r3, _0805E6F4\n" -" adds r7, r2, r3\n" -" ldrb r1, [r7, 0x8]\n" -" negs r0, r1\n" -" orrs r0, r1\n" -" asrs r1, r0, 31\n" -" movs r0, 0x8\n" -" ands r1, r0\n" -" ldrb r0, [r7, 0x9]\n" -" cmp r0, 0\n" -" beq _0805E60A\n" -" adds r1, 0x10\n" -"_0805E60A:\n" -" movs r0, 0x1F\n" -" ands r1, r0\n" -" lsls r1, 9\n" -" ldrh r3, [r6, 0x2]\n" -" ldr r4, _0805E718\n" -" adds r0, r4, 0\n" -" ands r3, r0\n" -" orrs r3, r1\n" -" ldr r5, _0805E714\n" -" ands r3, r5\n" -" strh r3, [r6, 0x2]\n" -" ldr r1, _0805E71C\n" -" adds r0, r2, r1\n" -" ldr r2, [r0]\n" -" ldr r0, _0805E720\n" -" ands r2, r0\n" -" ldrh r0, [r6, 0x4]\n" -" movs r4, 0xFC\n" -" lsls r4, 8\n" -" adds r1, r4, 0\n" -" ands r0, r1\n" -" orrs r0, r2\n" -" movs r1, 0x80\n" -" lsls r1, 4\n" -" ldr r5, _0805E708\n" -" ands r0, r5\n" -" orrs r0, r1\n" -" movs r1, 0\n" -" orrs r0, r1\n" -" movs r2, 0xF\n" -" mov r12, r2\n" -" ldr r4, _0805E724\n" -" ands r0, r4\n" -" strh r0, [r6, 0x4]\n" -" ldrh r1, [r6, 0x6]\n" -" ldr r5, _0805E728\n" -" adds r0, r5, 0\n" -" ands r1, r0\n" -" ldr r2, _0805E72C\n" -" adds r0, r2, 0\n" -" ands r1, r0\n" -" ldr r0, _0805E730\n" -" ldr r5, [sp, 0x20]\n" -" ands r0, r5\n" -" movs r5, 0xFE\n" -" lsls r5, 8\n" -" adds r2, r5, 0\n" -" ands r3, r2\n" -" orrs r3, r0\n" -" strh r3, [r6, 0x2]\n" -" mov r0, r10\n" -" ands r0, r4\n" -" lsls r0, 4\n" -" mov r2, r12\n" -" ands r1, r2\n" -" orrs r1, r0\n" -" strh r1, [r6, 0x6]\n" -" adds r0, r6, 0\n" -" movs r1, 0x80\n" -" lsls r1, 1\n" -" movs r2, 0\n" -" movs r3, 0\n" -" bl AddSprite\n" -" movs r3, 0\n" -" ldrsh r0, [r7, r3]\n" -" lsls r0, 2\n" -" ldr r4, [sp, 0x20]\n" -" adds r4, r0\n" -" str r4, [sp, 0x20]\n" -" movs r5, 0x2\n" -" ldrsh r0, [r7, r5]\n" -" lsls r0, 2\n" -" add r10, r0\n" -" movs r0, 0x1\n" -" negs r0, r0\n" -" add r9, r0\n" -" mov r1, r9\n" -" cmp r1, 0\n" -" beq _0805E6AC\n" -" b _0805E546\n" -"_0805E6AC:\n" -" ldr r4, _0805E734\n" -" ldrb r0, [r4]\n" -" cmp r0, 0\n" -" beq _0805E6D4\n" -" ldr r2, [sp, 0x14]\n" -" adds r2, 0x34\n" -" ldr r3, [sp, 0x14]\n" -" adds r3, 0x33\n" -" ldrb r1, [r3]\n" -" ldrb r0, [r2]\n" -" cmp r0, r1\n" -" beq _0805E6D4\n" -" strb r1, [r2]\n" -" ldr r0, [sp, 0x10]\n" -" adds r0, 0x4\n" -" ldrb r1, [r3]\n" -" ldrb r3, [r4]\n" -" movs r2, 0\n" -" bl sub_804A728\n" -"_0805E6D4:\n" -" add sp, 0x28\n" -" pop {r3-r5}\n" -" mov r8, r3\n" -" mov r9, r4\n" -" mov r10, r5\n" -" pop {r4-r7}\n" -" pop {r0}\n" -" bx r0\n" -" .align 2, 0\n" -"_0805E6E4: .4byte 0x0001821a\n" -"_0805E6E8: .4byte 0x0001821b\n" -"_0805E6EC: .4byte sShowThreeArrows2\n" -"_0805E6F0: .4byte sShowThreeArrows1\n" -"_0805E6F4: .4byte gUnknown_8106AE8\n" -"_0805E6F8: .4byte sArrowsFrames\n" -"_0805E6FC: .4byte 0xffff0000\n" -"_0805E700: .4byte 0x0000feff\n" -"_0805E704: .4byte 0x0000fdff\n" -"_0805E708: .4byte 0x0000f3ff\n" -"_0805E70C: .4byte 0x0000efff\n" -"_0805E710: .4byte 0x0000dfff\n" -"_0805E714: .4byte 0x00003fff\n" -"_0805E718: .4byte 0x0000c1ff\n" -"_0805E71C: .4byte gUnknown_8106AE8 + 4\n" -"_0805E720: .4byte 0x000003ff\n" -"_0805E724: .4byte 0x00000fff\n" -"_0805E728: .4byte 0x0000fffe\n" -"_0805E72C: .4byte 0x0000fffd\n" -"_0805E730: .4byte 0x000001ff\n" -"_0805E734: .4byte sInRotateMode" -); -} - -#endif // NONMATCHING - void sub_805E738(Entity *a0) { const Tile *tile;