summaryrefslogtreecommitdiff
path: root/src/battle/anim/flying.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle/anim/flying.c')
-rw-r--r--src/battle/anim/flying.c1837
1 files changed, 319 insertions, 1518 deletions
diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c
index 64991d161..588729ab5 100644
--- a/src/battle/anim/flying.c
+++ b/src/battle/anim/flying.c
@@ -16,36 +16,36 @@ extern u8 gBattlerPositions[];
extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB538;
void sub_80785E4(struct Sprite *sprite);
-void sub_80DA034(struct Sprite *sprite);
-void sub_80DA05C(struct Sprite *sprite);
-void sub_80DA16C(struct Sprite *sprite);
-void sub_80DA1EC(struct Sprite *sprite);
-void sub_80DA208(struct Sprite *sprite);
-void sub_80DA300(struct Sprite *sprite);
-void sub_80DA348(struct Sprite *sprite);
-void sub_80DA38C(struct Sprite *sprite);
-void sub_80DA4D8(struct Sprite *sprite);
-void sub_80DA410(struct Sprite *sprite);
-void sub_80DA6F0(struct Sprite *sprite);
-void sub_80DAD30(struct Sprite *sprite);
-void sub_80DAD84(struct Sprite *sprite);
-void sub_80DAF0C(struct Sprite *sprite);
-void sub_80DB000(struct Sprite *sprite);
-void sub_80DB0A0(struct Sprite *sprite);
-void sub_80DB194(struct Sprite *sprite);
-void sub_80DB1F4(struct Sprite *sprite);
-void sub_80DB288(struct Sprite *sprite);
-void sub_80DB2D0(struct Sprite *sprite);
-void sub_80DB330(struct Sprite *sprite);
-void sub_80DB374(struct Sprite *sprite);
-void sub_80DB458(struct Sprite *sprite);
-void sub_80DB508(struct Sprite *sprite);
-void sub_80DB564(struct Sprite *sprite);
-void sub_80DB578(struct Sprite *sprite);
-void sub_80DB5E4(struct Sprite *sprite);
-void sub_80DB6A0(struct Sprite *sprite);
-
-void sub_80DA0DC(u8 taskId);
+static void sub_80DA034(struct Sprite *sprite);
+static void sub_80DA05C(struct Sprite *sprite);
+static void sub_80DA16C(struct Sprite *sprite);
+static void sub_80DA1EC(struct Sprite *sprite);
+static void sub_80DA208(struct Sprite *sprite);
+static void sub_80DA300(struct Sprite *sprite);
+static void sub_80DA348(struct Sprite *sprite);
+static void sub_80DA38C(struct Sprite *sprite);
+static void AnimFallingFeather(struct Sprite *sprite);
+static void sub_80DA410(struct Sprite *sprite);
+static void DestroyAnimSpriteAfterTimer(struct Sprite *sprite);
+static void sub_80DAD30(struct Sprite *sprite);
+static void sub_80DAD84(struct Sprite *sprite);
+static void sub_80DAF0C(struct Sprite *sprite);
+static void sub_80DB000(struct Sprite *sprite);
+static void sub_80DB0A0(struct Sprite *sprite);
+static void sub_80DB194(struct Sprite *sprite);
+static void sub_80DB1F4(struct Sprite *sprite);
+static void sub_80DB288(struct Sprite *sprite);
+static void sub_80DB2D0(struct Sprite *sprite);
+static void sub_80DB330(struct Sprite *sprite);
+static void sub_80DB374(struct Sprite *sprite);
+static void sub_80DB458(struct Sprite *sprite);
+static void sub_80DB508(struct Sprite *sprite);
+static void sub_80DB564(struct Sprite *sprite);
+static void sub_80DB578(struct Sprite *sprite);
+static void sub_80DB5E4(struct Sprite *sprite);
+static void sub_80DB6A0(struct Sprite *sprite);
+
+static void sub_80DA0DC(u8 taskId);
const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA380 =
{
@@ -186,7 +186,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA498 =
.anims = gSpriteAnimTable_83DA490,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80DA4D8,
+ .callback = AnimFallingFeather,
};
const u16 gUnknownPalette_83DA4B0[] = INCBIN_U16("graphics/unknown/unknown_3DA4B0.gbapal");
@@ -369,7 +369,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA65C =
.callback = sub_80DB5E4,
};
-void sub_80DA034(struct Sprite *sprite)
+static void sub_80DA034(struct Sprite *sprite)
{
sub_8078764(sprite, FALSE);
sprite->pos1.y += 20;
@@ -378,7 +378,7 @@ void sub_80DA034(struct Sprite *sprite)
sub_80DA05C(sprite);
}
-void sub_80DA05C(struct Sprite *sprite) {
+static void sub_80DA05C(struct Sprite *sprite) {
sprite->pos2.x = Sin(sprite->data[1], 0x20);
sprite->pos2.y = Cos(sprite->data[1], 0x8);
sprite->data[1] = (sprite->data[1] + 5) & 0xFF;
@@ -395,7 +395,7 @@ void sub_80DA09C(u8 taskId)
gTasks[taskId].func = sub_80DA0DC;
}
-void sub_80DA0DC(u8 taskId)
+static void sub_80DA0DC(u8 taskId)
{
u8 data2;
u16 temp;
@@ -427,7 +427,7 @@ void sub_80DA0DC(u8 taskId)
}
}
-void sub_80DA16C(struct Sprite *sprite)
+static void sub_80DA16C(struct Sprite *sprite)
{
InitAnimSpritePos(sprite, 1);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -444,7 +444,7 @@ void sub_80DA16C(struct Sprite *sprite)
StoreSpriteCallbackInData(sprite, sub_80DA1EC);
}
-void sub_80DA1EC(struct Sprite *sprite)
+static void sub_80DA1EC(struct Sprite *sprite)
{
if (TranslateAnimLinear(sprite) != 0)
{
@@ -452,7 +452,7 @@ void sub_80DA1EC(struct Sprite *sprite)
}
}
-void sub_80DA208(struct Sprite *sprite)
+static void sub_80DA208(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
@@ -492,16 +492,16 @@ void sub_80DA208(struct Sprite *sprite)
SeekSpriteAnim(sprite, gBattleAnimArgs[5]);
}
-void sub_80DA300(struct Sprite *sprite)
+static void sub_80DA300(struct Sprite *sprite)
{
InitAnimSpritePos(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gBattleAnimArgs[3];
sprite->callback = sub_80DA348;
- gSprites[GetAnimBattlerSpriteId(0)].invisible = 1;
+ gSprites[GetAnimBattlerSpriteId(0)].invisible = TRUE;
}
-void sub_80DA348(struct Sprite *sprite)
+static void sub_80DA348(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
{
@@ -519,7 +519,7 @@ void sub_80DA348(struct Sprite *sprite)
}
}
-void sub_80DA38C(struct Sprite *sprite)
+static void sub_80DA38C(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
@@ -543,7 +543,7 @@ void sub_80DA38C(struct Sprite *sprite)
sprite->callback = sub_80DA410;
}
-void sub_80DA410(struct Sprite *sprite)
+static void sub_80DA410(struct Sprite *sprite)
{
sprite->data[0] = 1;
TranslateAnimLinear(sprite);
@@ -555,1331 +555,283 @@ void sub_80DA410(struct Sprite *sprite)
sprite->data[3] &= 0xFF;
}
+ //The below if statement relies on overflow when cast to unsigned whenever pos1.x and pos2.x add up to less than 32.
if ((u32) (sprite->pos1.x + sprite->pos2.x + 32) > 304 || sprite->pos1.y + sprite->pos2.y > 160)
{
- gSprites[GetAnimBattlerSpriteId(0)].invisible = 0;
+ gSprites[GetAnimBattlerSpriteId(0)].invisible = FALSE;
DestroyAnimSprite(sprite);
}
}
void sub_80DA48C(struct Sprite *sprite)
{
- if (sprite->data[0]-- <= 0)
+ if (sprite->data[0]-- > 0)
+ return;
+ if (sprite->oam.affineMode & 1)
{
- if (sprite->oam.affineMode & 1)
- {
- FreeOamMatrix(sprite->oam.matrixNum);
- sprite->oam.affineMode = 0;
- }
-
- DestroySprite(sprite);
- gAnimVisualTaskCount--;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ sprite->oam.affineMode = 0;
}
+
+ DestroySprite(sprite);
+ gAnimVisualTaskCount--;
}
-// FAKEMATCHING
-void sub_80DA4D8(struct Sprite *sprite)
+struct FeatherDanceData
+{
+ u16 unk0_0a : 1;
+ u16 unk0_0b : 1;
+ u16 unk0_0c : 1;
+ u16 unk0_0d : 1;
+ u16 unk0_1 : 4;
+ u16 unk1 : 8;
+ u16 unk2;
+ s16 unk4;
+ u16 unk6;
+ u16 unk8;
+ u16 unkA;
+ u8 unkC[2];
+
+ u16 unkE_0 : 1;
+ u16 unkE_1 : 15;
+};
+#define ANIM_SWITCH(sprite) \
+ { \
+ (sprite)->hFlip ^= 1; \
+ (sprite)->animNum = (sprite)->hFlip; \
+ (sprite)->animBeginning = TRUE; \
+ (sprite)->animEnded = FALSE; \
+ }
+
+#define CHANGE_PRIORITY(sprite, data) \
+ { \
+ if ((data)->unk0_0c) \
+ { \
+ if (gMain.inBattle) \
+ { \
+ if ((data)->unkE_0 == 0) \
+ { \
+ (sprite)->oam.priority--; \
+ (data)->unkE_0 ^= 1; \
+ } \
+ else \
+ { \
+ (sprite)->oam.priority++; \
+ (data)->unkE_0 ^= 1; \
+ } \
+ } \
+ else \
+ { \
+ if ((data)->unkE_0 == 0) \
+ { \
+ (sprite)->subpriority -= 12; \
+ (data)->unkE_0 ^= 1; \
+ } \
+ else \
+ { \
+ (sprite)->subpriority += 12; \
+ (data)->unkE_0 ^= 1; \
+ } \
+ } \
+ } \
+ }
+
+static void AnimFallingFeather(struct Sprite *sprite)
{
- s16 *data;
- u8 slot;
- s16 spriteCoord;
- int t1, t2;
- u32 arg2;
+ u8 battler, sinIndex;
u32 matrixNum;
- u8 sinIndex;
- register s16 sinVal asm ("r4");
- register int sinVal2 asm ("r0");
+ s16 sinVal;
- data = sprite->data;
+ struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data;
- if (gBattleAnimArgs[7] & 0x100)
- {
- slot = gBattleAnimAttacker;
- }
- else
- {
- slot = gBattleAnimTarget;
- }
+ battler = (gBattleAnimArgs[7] & 0x100) ? gBattleAnimAttacker : gBattleAnimTarget;
- if (GetBattlerSide(slot) == 0)
- {
+ if (GetBattlerSide(battler) == B_SIDE_PLAYER)
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
- }
- sprite->pos1.x = GetBattlerSpriteCoord(slot, 0) + gBattleAnimArgs[0];
- spriteCoord = GetBattlerSpriteCoord(slot, 1);
- sprite->pos1.y = spriteCoord + gBattleAnimArgs[1];
- data[4] = sprite->pos1.y << 8;
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_HEIGHT) + gBattleAnimArgs[0];
+ sinVal = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_WIDTH);
+ sprite->pos1.y = sinVal + gBattleAnimArgs[1];
- t1 = (spriteCoord + (u16) gBattleAnimArgs[6]) << 1;
- data[7] = (data[7] & 1) | t1;
- ((u8 *) data)[0] |= 4;
+ data->unk8 = (u16)sprite->pos1.y << 8;
+ data->unkE_1 = (u16)(sinVal + gBattleAnimArgs[6]);
- arg2 = (u16) gBattleAnimArgs[2];
- data[1] = (u8) gBattleAnimArgs[2];
- arg2 <<= 16;
- data[5] = arg2 >> 24;
- data[2] = gBattleAnimArgs[3];
- data[3] = gBattleAnimArgs[4];
- data[6] = gBattleAnimArgs[5];
+ data->unk0_0c = 1;
+ data->unk2 = (u16)(gBattleAnimArgs[2] & 0xFF);
+ data->unkA = (u16)gBattleAnimArgs[2] >> 8;
+ data->unk4 = gBattleAnimArgs[3];
+ data->unk6 = (u16)gBattleAnimArgs[4];
+ *((u16 *)data->unkC) = (u16)gBattleAnimArgs[5];
- if ((u16) (data[1] - 64) <= 0x7f)
+ if (data->unk2 >= 64 && data->unk2 < 192)
{
if (gMain.inBattle)
{
- sprite->oam.priority = GetBattlerSpriteBGPriority(slot) + 1;
+ sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1;
}
else
{
- sprite->oam.priority = GetBattlerSpriteBGPriority(slot);
+ sprite->oam.priority = GetBattlerSpriteBGPriority(battler);
}
- ((u8 *) data)[14] = data[7] & -2;
+ data->unkE_0 = 0;
- if (!(data[2] & 0x8000))
+ if (!(data->unk4 & 0x8000))
{
- sprite->hFlip ^= 1;
- sprite->animNum = sprite->hFlip;
-
- sprite->animBeginning = 1;
- sprite->animEnded = 0;
+ ANIM_SWITCH(sprite);
}
}
else
{
- sprite->oam.priority = GetBattlerSpriteBGPriority(slot);
- ((u8 *) data)[14] |= 1;
+ sprite->oam.priority = GetBattlerSpriteBGPriority(battler);
+ data->unkE_0 = 1;
- if (data[2] & 0x8000)
+ if (data->unk4 & 0x8000)
{
- sprite->hFlip ^= 1;
- sprite->animNum = sprite->hFlip;
-
- sprite->animBeginning = 1;
- sprite->animEnded = 0;
+ ANIM_SWITCH(sprite);
}
}
- t2 = (u16) data[1] >> 6 << 4;
- ((u8 *) data)[0] = (15 & data[0]) | t2;
-
- sprite->pos2.x = (gSineTable[(u16) data[1]] * (u8) data[6]) >> 8;
-
+ data->unk0_1 = data->unk2/64;
+
+ sprite->pos2.x = (gSineTable[data->unk2] * (s32)data->unkC[0]) >> 8;
matrixNum = sprite->oam.matrixNum;
- sinIndex = (-sprite->pos2.x >> 1) + data[5];
+ sinIndex = ((-sprite->pos2.x >> 1) + data->unkA) & 0xFF;
sinVal = gSineTable[sinIndex];
gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
gOamMatrices[matrixNum].b = sinVal;
- sinVal2 = -sinVal;
- gOamMatrices[matrixNum].c = sinVal2;
+ gOamMatrices[matrixNum].c = -sinVal;
- sprite->callback = sub_80DA6F0;
+ sprite->callback = DestroyAnimSpriteAfterTimer;
}
-#ifdef NONMATCHING
-void sub_80DA6F0(struct Sprite * sprite)
+static void DestroyAnimSpriteAfterTimer(struct Sprite *sprite)
{
// (Probably) Functionally equivalent
- struct dataStruct {
- u8 one:1;
- u8 two:1;
- u8 three:1;
- u8 four:1;
- u8 fiveeight:4;
- };
-
- u8 zero;
- s16 * data;
- u8 * dataByte;
-
- u16 r8;
- u32 matrixNum;
u8 sinIndex;
- s16 sinVal;
-
- zero = 0;
- data = sprite->data;
- dataByte = (u8 *)data;
+ u32 matrixNum;
+ s16 sinVal = 0;
+ struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data;
- if (dataByte[0] & 1)
+ if (data->unk0_0a)
{
- u32 t1;
-
- t1 = dataByte[1];
- dataByte[1] += 0xff;
-
- t1 <<= 24;
- if (t1 == 0)
- {
- // 080da724
- ((struct dataStruct *)dataByte)[0].one = 0;
- dataByte[1] = zero;
- }
-
+ if (data->unk1-- > 0) return;
+ data->unk0_0a = 0;
+ data->unk1 = 0;
+ return;
}
- else
+ switch (data->unk2 / 64)
{
- // 080da730
- u16 tData;
- u16 t2;
-
- tData = data[1];
- t2 = tData >> 6;
- r8 = tData;
-
- switch (t2)
+ case 0:
+ if ((u8)data->unk0_1 == 1) // this must be cast to u8
{
- case (0):
- // 080da756
-
- if (dataByte[0] >> 4 == 1)
- {
- dataByte[0] |= 8;
- dataByte[0] |= 1;
- dataByte[1] = zero;
- }
- else if (dataByte[0] >> 4 == 3)
- {
- /*080da76c*/
- ((struct dataStruct *)dataByte)[0].two ^= 1;
- ((struct dataStruct *)dataByte)[0].one = 1;
- dataByte[1] = zero;
- }
- else
- {
- // 080da790
- if (dataByte[0] & 8)
- {
- sprite->hFlip ^= 1;
- sprite->animNum = sprite->hFlip;
- sprite->animBeginning = 1;
- sprite->animEnded = 0;
-
- if ((dataByte)[0] & 4)
- {
- u8 b;
- if (gMain.inBattle)
- {
- if (!(dataByte[14] & 1))
- {
- sprite->oam.priority -= 1;
- }
- else
- {
- // 080da814
- sprite->oam.priority += 1;
- }
- }
- else
- {
- // 080da82e
- if (!(dataByte[14] & 1))
- {
- sprite->subpriority -= 12;
- }
- else
- {
- // 080da85c
- sprite->subpriority += 12;
- }
- }
- b = (((u32)(dataByte[14] << 31) >> 31) ^ 1) & 1;
- dataByte[14] = (dataByte[14] & -2) | b;
- }
- // 080da87a
- ((struct dataStruct *)dataByte)[0].four = 0;
- r8 = data[1];
- }
- }
-
- // 080da88a
- dataByte[0] &= 15;
- // 080dac52
- break;
- case (1):
- // 080da896
- if (dataByte[0] >> 4 == 0)
- {
- dataByte[0] |= 8;
- dataByte[0] |= 1;
- dataByte[1] = zero;
- }
- else/*080da8ac*/if (dataByte[0] >> 4 == 2)
- {
- dataByte[0] |= 1;
- dataByte[1] = zero;
- }
- else
- {
- // 080da8be
- if (dataByte[0] & 8)
- {
- sprite->hFlip ^= 1;
- sprite->animNum = sprite->hFlip;
- sprite->animBeginning = 1;
- sprite->animEnded = 0;
-
- if (dataByte[0] & 4)
- {
- u8 b;
- if (gMain.inBattle)
- {
- if (!(dataByte[14] & 1))
- {
- sprite->oam.priority -= 1;
- }
- else
- {
- // 080da948
- sprite->oam.priority += 1;
- }
- }
- else
- {
- // 080da962
- if (!(dataByte[14] & 1))
- {
- sprite->subpriority -=12;
- }
- else
- {
- // 080da98c
- sprite->subpriority += 12;
- }
- }
- // 080da978 + 080da996
- b = (((u32)(dataByte[14] << 31) >> 31) ^ 1) & 1;
- dataByte[14] = (dataByte[14] & -2) | b;
- }
- // 080da9ac
- ((struct dataStruct *)dataByte)[0].four = 0;
- r8 = data[1];
- }
- }
- // 080da9bc
- dataByte[0] &= 15;
- dataByte[0] |= 16;
- // 080dac52
- break;
- case (2):
- // 080da9c8
- if (dataByte[0] >> 4 == 3)
- {
- dataByte[0] |= 8;
- dataByte[0] |= 1;
- dataByte[1] = zero;
- }
- else/*080da9de*/if (dataByte[0] >> 4 == 1)
- {
- dataByte[0] |= 1;
- dataByte[1] = zero;
- }
- else
- {
- // 080da9f0
- if (dataByte[0] & 8)
- {
- // 080da9fa
- sprite->hFlip ^= 1;
- sprite->animNum = sprite->hFlip;
- sprite->animBeginning = 1;
- sprite->animEnded = 0;
-
- if (dataByte[0] & 4)
- {
- u8 b;
- if (gMain.inBattle)
- {
- if (!(dataByte[14] & 1))
- {
- sprite->oam.priority -= 1;
- }
- else
- {
- // 080daa74
- sprite->oam.priority += 1;
- }
- }
- else
- {
- // 080daaa4
- if (!(dataByte[14] & 1))
- {
- sprite->subpriority -= 12;
- }
- else
- {
- // 080daace
- sprite->subpriority += 12;
- }
- }
- b = (((u32)(dataByte[14] << 31) >> 31) ^ 1) & 1;
- dataByte[14] = (dataByte[14] & -2) | b;
- }
- // 080daaec
- ((struct dataStruct *)dataByte)[0].four = 0;
- r8 = data[1];
- }
- }
- // 080daafe
- dataByte[0] &= 15;
- dataByte[0] |= 32;
- // 080dac52
- break;
- case (3):
- // 080dab0e
- if (dataByte[0] >> 4 == 2)
- {
- dataByte[0] |= 8;
- // 080dac42
- }
- else/*080dab20*/if (dataByte[0] >> 4 == 0)
- {
- ((struct dataStruct *)dataByte)[0].two ^= 1;
- ((struct dataStruct *)dataByte)[0].one = 1;
- dataByte[1] = zero;
- // 080dac42
- }
- else
- {
- // 080dab44
- if (dataByte[0] & 8)
- {
- sprite->hFlip ^= 1;
- sprite->animNum = sprite->hFlip;
- sprite->animBeginning = 1;
- sprite->animEnded = 0;
-
- if (dataByte[0] & 4)
- {
- u8 b;
- if (gMain.inBattle)
- {
- if (!(dataByte[14] & 1))
- {
- sprite->oam.priority -= 1;
- }
- else
- {
- // 080dabcc
- sprite->oam.priority += 1;
- }
- }
- else
- {
- // 080dabe6
- if (!(dataByte[14] & 1))
- {
- sprite->subpriority -= 12;
- }
- else
- {
- // 080dac14
- sprite->subpriority += 12;
- }
- }
- // 080dac00 + 080dac1e
- b = (((u32)(dataByte[14]) << 31 >> 31) ^ 1) & 1;
- dataByte[14] = (-2 & dataByte[14]) | b;
- }
- // 080dac32
- ((struct dataStruct *)dataByte)[0].four = 0;
- r8 = data[1];
- }
- }
- // 080dac42
- dataByte[0] &= 15;
- dataByte[0] |= 48;
- break;
+ data->unk0_0d = 1;
+ data->unk0_0a = 1;
+ data->unk1 = 0;
}
-
- // 080dac52
-
- sprite->pos2.x = (dataByte[12 + ((struct dataStruct *)dataByte)[0].two] * gSineTable[r8]) >> 8;
-
- matrixNum = sprite->oam.matrixNum;
-
- sinIndex = (-sprite->pos2.x >> 1) + dataByte[10];
- sinVal = gSineTable[sinIndex];
-
- gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
- gOamMatrices[matrixNum].b = sinVal;
- gOamMatrices[matrixNum].c = -sinVal;
-
- data[4] += data[3];
-
- sprite->pos1.y = (u16)data[4] >> 8;
-
- if (data[2] & (0x80 << 8))
+ else if ((u8)data->unk0_1 == 3)
{
- data[1] = (data[1] - (data[2] & ((0x80 << 8) - 1))) & 0xff;
+ data->unk0_0b ^= 1;
+ data->unk0_0a = 1;
+ data->unk1 = 0;
}
- else
+ else if (data->unk0_0d)
+ {
+ ANIM_SWITCH(sprite);
+ CHANGE_PRIORITY(sprite, data);
+ data->unk0_0d = 0;
+ }
+ data->unk0_1 = 0;
+ break;
+ case 1:
+ if ((u8)data->unk0_1 == 0)
+ {
+ data->unk0_0d = 1;
+ data->unk0_0a = 1;
+ data->unk1 = 0;
+ }
+ else if ((u8)data->unk0_1 == 2)
+ {
+ data->unk0_0a = 1;
+ data->unk1 = 0;
+ }
+ else if (data->unk0_0d)
+ {
+ ANIM_SWITCH(sprite);
+ CHANGE_PRIORITY(sprite, data);
+ data->unk0_0d = 0;
+ }
+ data->unk0_1 = 1;
+ break;
+ case 2:
+ if ((u8)data->unk0_1 == 3)
+ {
+ data->unk0_0d = 1;
+ data->unk0_0a = 1;
+ data->unk1 = 0;
+ }
+ else if ((u8)data->unk0_1 == 1)
+ {
+ data->unk0_0a = 1;
+ data->unk1 = 0;
+ }
+ else if (data->unk0_0d)
+ {
+ ANIM_SWITCH(sprite);
+ CHANGE_PRIORITY(sprite, data)
+ data->unk0_0d = 0;
+ }
+ data->unk0_1 = 2;
+ break;
+ case 3:
+ if ((u8)data->unk0_1 == 2)
{
- // 080dace8
- data[1] = ((data[2] & 0x7fff) + data[1]) & 0xff;
+ data->unk0_0d = 1;
}
- // 080dacfe
- if (sprite->pos1.y + sprite->pos2.y >= (u16)data[7] / 2)
+ else if ((u8)data->unk0_1 == 0)
{
- sprite->data[0] = 0;
- sprite->callback = sub_80DA48C;
+ data->unk0_0b ^= 1;
+ data->unk0_0a = 1;
+ data->unk1 = 0;
}
+ else if (data->unk0_0d)
+ {
+ ANIM_SWITCH(sprite);
+ CHANGE_PRIORITY(sprite, data);
+ data->unk0_0d = 0;
+ }
+ data->unk0_1 = 3;
+ break;
+ }
+
+ sprite->pos2.x = ((s32)(data->unkC[data->unk0_0b]) * gSineTable[data->unk2]) >> 8;
+ matrixNum = sprite->oam.matrixNum;
+
+ sinIndex = ((-sprite->pos2.x >> 1) + data->unkA) & 0xFF;
+ sinVal = gSineTable[sinIndex];
+
+ gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
+ gOamMatrices[matrixNum].b = sinVal;
+ gOamMatrices[matrixNum].c = -sinVal;
+
+ data->unk8 += data->unk6;
+ sprite->pos1.y = (s16)(data->unk8 >> 8);
+ if (data->unk4 & 0x8000)
+ data->unk2 = (data->unk2 - (data->unk4 & 0x7FFF)) & 0xFF;
+ else
+ data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF;
+ // 080dacfe
+ if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_80DA48C;
}
}
-#else
-NAKED
-void sub_80DA6F0(struct Sprite *sprite)
-{
- asm_unified("push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- adds r5, r0, 0\n\
- movs r6, 0\n\
- movs r0, 0x2E\n\
- adds r0, r5\n\
- mov r12, r0\n\
- ldrb r2, [r0]\n\
- movs r7, 0x1\n\
- movs r1, 0x1\n\
- mov r9, r1\n\
- mov r0, r9\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _080DA730\n\
- mov r3, r12\n\
- ldrb r0, [r3, 0x1]\n\
- adds r1, r0, 0\n\
- adds r1, 0xFF\n\
- strb r1, [r3, 0x1]\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080DA724\n\
- b _080DAD1A\n\
-_080DA724:\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- ands r0, r2\n\
- strb r0, [r3]\n\
- strb r6, [r3, 0x1]\n\
- b _080DAD1A\n\
-_080DA730:\n\
- mov r4, r12\n\
- ldrh r0, [r4, 0x2]\n\
- lsrs r4, r0, 6\n\
- mov r8, r0\n\
- cmp r4, 0x1\n\
- bne _080DA73E\n\
- b _080DA896\n\
-_080DA73E:\n\
- cmp r4, 0x1\n\
- bgt _080DA748\n\
- cmp r4, 0\n\
- beq _080DA756\n\
- b _080DAC52\n\
-_080DA748:\n\
- cmp r4, 0x2\n\
- bne _080DA74E\n\
- b _080DA9C8\n\
-_080DA74E:\n\
- cmp r4, 0x3\n\
- bne _080DA754\n\
- b _080DAB0E\n\
-_080DA754:\n\
- b _080DAC52\n\
-_080DA756:\n\
- lsls r1, r2, 24\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0x1\n\
- bne _080DA76C\n\
- movs r0, 0x8\n\
- orrs r0, r2\n\
- orrs r0, r7\n\
- mov r1, r12\n\
- strb r0, [r1]\n\
- strb r6, [r1, 0x1]\n\
- b _080DA88A\n\
-_080DA76C:\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0x3\n\
- bne _080DA790\n\
- lsls r0, r2, 30\n\
- lsrs r0, 31\n\
- movs r1, 0x1\n\
- eors r0, r1\n\
- ands r0, r7\n\
- lsls r0, 1\n\
- movs r1, 0x3\n\
- negs r1, r1\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- orrs r1, r7\n\
- mov r2, r12\n\
- strb r1, [r2]\n\
- strb r6, [r2, 0x1]\n\
- b _080DA88A\n\
-_080DA790:\n\
- movs r0, 0x8\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _080DA88A\n\
- adds r3, r5, 0\n\
- adds r3, 0x3F\n\
- ldrb r2, [r3]\n\
- lsls r1, r2, 31\n\
- lsrs r1, 31\n\
- movs r4, 0x1\n\
- eors r1, r4\n\
- ands r1, r7\n\
- movs r6, 0x2\n\
- negs r6, r6\n\
- adds r0, r6, 0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r3]\n\
- lsls r0, 31\n\
- lsrs r0, 31\n\
- adds r1, r5, 0\n\
- adds r1, 0x2A\n\
- strb r0, [r1]\n\
- ldrb r0, [r3]\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- movs r1, 0x11\n\
- negs r1, r1\n\
- ands r0, r1\n\
- strb r0, [r3]\n\
- mov r3, r12\n\
- ldrb r1, [r3]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080DA87A\n\
- ldr r0, _080DA80C @ =gMain\n\
- ldr r1, _080DA810 @ =0x0000043d\n\
- adds r0, r1\n\
- ldrb r1, [r0]\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080DA82E\n\
- ldrb r1, [r3, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080DA814\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- subs r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- b _080DA868\n\
- .align 2, 0\n\
-_080DA80C: .4byte gMain\n\
-_080DA810: .4byte 0x0000043d\n\
-_080DA814:\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- adds r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- b _080DA866\n\
-_080DA82E:\n\
- mov r0, r12\n\
- ldrb r1, [r0, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080DA85C\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- subs r0, 0xC\n\
- strb r0, [r1]\n\
- mov r1, r12\n\
- ldrb r2, [r1, 0xE]\n\
- lsls r0, r2, 31\n\
- lsrs r0, 31\n\
- eors r0, r4\n\
- ands r0, r7\n\
- adds r1, r6, 0\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- mov r2, r12\n\
- strb r1, [r2, 0xE]\n\
- b _080DA87A\n\
-_080DA85C:\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- adds r0, 0xC\n\
- strb r0, [r1]\n\
-_080DA866:\n\
- mov r3, r12\n\
-_080DA868:\n\
- ldrb r2, [r3, 0xE]\n\
- lsls r0, r2, 31\n\
- lsrs r0, 31\n\
- eors r0, r4\n\
- ands r0, r7\n\
- adds r1, r6, 0\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- strb r1, [r3, 0xE]\n\
-_080DA87A:\n\
- mov r4, r12\n\
- ldrb r1, [r4]\n\
- movs r0, 0x9\n\
- negs r0, r0\n\
- ands r0, r1\n\
- strb r0, [r4]\n\
- ldrh r0, [r4, 0x2]\n\
- mov r8, r0\n\
-_080DA88A:\n\
- mov r2, r12\n\
- ldrb r1, [r2]\n\
- movs r0, 0xF\n\
- ands r0, r1\n\
- strb r0, [r2]\n\
- b _080DAC52\n\
-_080DA896:\n\
- lsls r1, r2, 24\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0\n\
- bne _080DA8AC\n\
- movs r0, 0x8\n\
- orrs r0, r2\n\
- orrs r0, r7\n\
- mov r3, r12\n\
- strb r0, [r3]\n\
- strb r6, [r3, 0x1]\n\
- b _080DA9BC\n\
-_080DA8AC:\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0x2\n\
- bne _080DA8BE\n\
- adds r0, r2, 0\n\
- orrs r0, r7\n\
- mov r4, r12\n\
- strb r0, [r4]\n\
- strb r6, [r4, 0x1]\n\
- b _080DA9BC\n\
-_080DA8BE:\n\
- movs r0, 0x8\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _080DA9BC\n\
- adds r3, r5, 0\n\
- adds r3, 0x3F\n\
- ldrb r2, [r3]\n\
- lsls r1, r2, 31\n\
- lsrs r1, 31\n\
- movs r4, 0x1\n\
- eors r1, r4\n\
- ands r1, r7\n\
- movs r6, 0x2\n\
- negs r6, r6\n\
- adds r0, r6, 0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r3]\n\
- lsls r0, 31\n\
- lsrs r0, 31\n\
- adds r1, r5, 0\n\
- adds r1, 0x2A\n\
- strb r0, [r1]\n\
- ldrb r0, [r3]\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- movs r1, 0x11\n\
- negs r1, r1\n\
- ands r0, r1\n\
- strb r0, [r3]\n\
- mov r0, r12\n\
- ldrb r1, [r0]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080DA9AC\n\
- ldr r0, _080DA940 @ =gMain\n\
- ldr r1, _080DA944 @ =0x0000043d\n\
- adds r0, r1\n\
- ldrb r1, [r0]\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080DA962\n\
- mov r2, r12\n\
- ldrb r1, [r2, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080DA948\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- subs r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- mov r3, r12\n\
- b _080DA978\n\
- .align 2, 0\n\
-_080DA940: .4byte gMain\n\
-_080DA944: .4byte 0x0000043d\n\
-_080DA948:\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- adds r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- b _080DA996\n\
-_080DA962:\n\
- mov r3, r12\n\
- ldrb r1, [r3, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080DA98C\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- subs r0, 0xC\n\
- strb r0, [r1]\n\
-_080DA978:\n\
- ldrb r2, [r3, 0xE]\n\
- lsls r0, r2, 31\n\
- lsrs r0, 31\n\
- eors r0, r4\n\
- ands r0, r7\n\
- adds r1, r6, 0\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- strb r1, [r3, 0xE]\n\
- b _080DA9AC\n\
-_080DA98C:\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- adds r0, 0xC\n\
- strb r0, [r1]\n\
-_080DA996:\n\
- mov r0, r12\n\
- ldrb r2, [r0, 0xE]\n\
- lsls r0, r2, 31\n\
- lsrs r0, 31\n\
- eors r0, r4\n\
- ands r0, r7\n\
- adds r1, r6, 0\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- mov r2, r12\n\
- strb r1, [r2, 0xE]\n\
-_080DA9AC:\n\
- mov r3, r12\n\
- ldrb r1, [r3]\n\
- movs r0, 0x9\n\
- negs r0, r0\n\
- ands r0, r1\n\
- strb r0, [r3]\n\
- ldrh r4, [r3, 0x2]\n\
- mov r8, r4\n\
-_080DA9BC:\n\
- mov r1, r12\n\
- ldrb r0, [r1]\n\
- movs r1, 0xF\n\
- ands r1, r0\n\
- movs r0, 0x10\n\
- b _080DAC4C\n\
-_080DA9C8:\n\
- lsls r1, r2, 24\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0x3\n\
- bne _080DA9DE\n\
- movs r0, 0x8\n\
- orrs r0, r2\n\
- orrs r0, r7\n\
- mov r3, r12\n\
- strb r0, [r3]\n\
- strb r6, [r3, 0x1]\n\
- b _080DAAFE\n\
-_080DA9DE:\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0x1\n\
- bne _080DA9F0\n\
- adds r0, r2, 0\n\
- orrs r0, r7\n\
- mov r4, r12\n\
- strb r0, [r4]\n\
- strb r6, [r4, 0x1]\n\
- b _080DAAFE\n\
-_080DA9F0:\n\
- movs r0, 0x8\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- bne _080DA9FA\n\
- b _080DAAFE\n\
-_080DA9FA:\n\
- adds r3, r5, 0\n\
- adds r3, 0x3F\n\
- ldrb r2, [r3]\n\
- lsls r1, r2, 31\n\
- lsrs r1, 31\n\
- movs r6, 0x1\n\
- eors r1, r6\n\
- ands r1, r7\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- mov r8, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r3]\n\
- lsls r0, 31\n\
- lsrs r0, 31\n\
- adds r1, r5, 0\n\
- adds r1, 0x2A\n\
- strb r0, [r1]\n\
- ldrb r0, [r3]\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- movs r1, 0x11\n\
- negs r1, r1\n\
- ands r0, r1\n\
- strb r0, [r3]\n\
- mov r2, r12\n\
- ldrb r1, [r2]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080DAAEC\n\
- ldr r0, _080DAA6C @ =gMain\n\
- ldr r3, _080DAA70 @ =0x0000043d\n\
- adds r0, r3\n\
- ldrb r0, [r0]\n\
- ands r4, r0\n\
- cmp r4, 0\n\
- beq _080DAAA4\n\
- ldrb r1, [r2, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080DAA74\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- subs r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- b _080DAAD8\n\
- .align 2, 0\n\
-_080DAA6C: .4byte gMain\n\
-_080DAA70: .4byte 0x0000043d\n\
-_080DAA74:\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- adds r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- mov r0, r12\n\
- ldrb r2, [r0, 0xE]\n\
- lsls r0, r2, 31\n\
- lsrs r0, 31\n\
- eors r0, r6\n\
- ands r0, r7\n\
- mov r1, r8\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- mov r2, r12\n\
- strb r1, [r2, 0xE]\n\
- b _080DAAEC\n\
-_080DAAA4:\n\
- mov r3, r12\n\
- ldrb r1, [r3, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080DAACE\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- subs r0, 0xC\n\
- strb r0, [r1]\n\
- ldrb r2, [r3, 0xE]\n\
- lsls r0, r2, 31\n\
- lsrs r0, 31\n\
- eors r0, r6\n\
- ands r0, r7\n\
- mov r1, r8\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- strb r1, [r3, 0xE]\n\
- b _080DAAEC\n\
-_080DAACE:\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- adds r0, 0xC\n\
- strb r0, [r1]\n\
-_080DAAD8:\n\
- mov r4, r12\n\
- ldrb r2, [r4, 0xE]\n\
- lsls r0, r2, 31\n\
- lsrs r0, 31\n\
- eors r0, r6\n\
- ands r0, r7\n\
- mov r1, r8\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- strb r1, [r4, 0xE]\n\
-_080DAAEC:\n\
- mov r0, r12\n\
- ldrb r1, [r0]\n\
- movs r0, 0x9\n\
- negs r0, r0\n\
- ands r0, r1\n\
- mov r1, r12\n\
- strb r0, [r1]\n\
- ldrh r2, [r1, 0x2]\n\
- mov r8, r2\n\
-_080DAAFE:\n\
- mov r3, r12\n\
- ldrb r0, [r3]\n\
- movs r1, 0xF\n\
- ands r1, r0\n\
- movs r0, 0x20\n\
- orrs r1, r0\n\
- strb r1, [r3]\n\
- b _080DAC52\n\
-_080DAB0E:\n\
- lsls r1, r2, 24\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0x2\n\
- bne _080DAB20\n\
- movs r0, 0x8\n\
- orrs r0, r2\n\
- mov r4, r12\n\
- strb r0, [r4]\n\
- b _080DAC42\n\
-_080DAB20:\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0\n\
- bne _080DAB44\n\
- lsls r0, r2, 30\n\
- lsrs r0, 31\n\
- movs r1, 0x1\n\
- eors r0, r1\n\
- ands r0, r7\n\
- lsls r0, 1\n\
- movs r1, 0x3\n\
- negs r1, r1\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- orrs r1, r7\n\
- mov r0, r12\n\
- strb r1, [r0]\n\
- strb r6, [r0, 0x1]\n\
- b _080DAC42\n\
-_080DAB44:\n\
- movs r0, 0x8\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _080DAC42\n\
- adds r3, r5, 0\n\
- adds r3, 0x3F\n\
- ldrb r2, [r3]\n\
- lsls r1, r2, 31\n\
- lsrs r1, 31\n\
- movs r4, 0x1\n\
- eors r1, r4\n\
- ands r1, r7\n\
- movs r6, 0x2\n\
- negs r6, r6\n\
- adds r0, r6, 0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r3]\n\
- lsls r0, 31\n\
- lsrs r0, 31\n\
- adds r1, r5, 0\n\
- adds r1, 0x2A\n\
- strb r0, [r1]\n\
- ldrb r0, [r3]\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- movs r1, 0x11\n\
- negs r1, r1\n\
- ands r0, r1\n\
- strb r0, [r3]\n\
- mov r2, r12\n\
- ldrb r1, [r2]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080DAC32\n\
- ldr r0, _080DABC4 @ =gMain\n\
- ldr r3, _080DABC8 @ =0x0000043d\n\
- adds r0, r3\n\
- ldrb r1, [r0]\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080DABE6\n\
- ldrb r1, [r2, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080DABCC\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- subs r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- mov r0, r12\n\
- ldrb r2, [r0, 0xE]\n\
- b _080DAC00\n\
- .align 2, 0\n\
-_080DABC4: .4byte gMain\n\
-_080DABC8: .4byte 0x0000043d\n\
-_080DABCC:\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- adds r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- b _080DAC1E\n\
-_080DABE6:\n\
- mov r0, r12\n\
- ldrb r1, [r0, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080DAC14\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- subs r0, 0xC\n\
- strb r0, [r1]\n\
- mov r1, r12\n\
- ldrb r2, [r1, 0xE]\n\
-_080DAC00:\n\
- lsls r0, r2, 31\n\
- lsrs r0, 31\n\
- eors r0, r4\n\
- ands r0, r7\n\
- adds r1, r6, 0\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- mov r2, r12\n\
- strb r1, [r2, 0xE]\n\
- b _080DAC32\n\
-_080DAC14:\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- adds r0, 0xC\n\
- strb r0, [r1]\n\
-_080DAC1E:\n\
- mov r3, r12\n\
- ldrb r2, [r3, 0xE]\n\
- lsls r0, r2, 31\n\
- lsrs r0, 31\n\
- eors r0, r4\n\
- ands r0, r7\n\
- adds r1, r6, 0\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- strb r1, [r3, 0xE]\n\
-_080DAC32:\n\
- mov r4, r12\n\
- ldrb r1, [r4]\n\
- movs r0, 0x9\n\
- negs r0, r0\n\
- ands r0, r1\n\
- strb r0, [r4]\n\
- ldrh r0, [r4, 0x2]\n\
- mov r8, r0\n\
-_080DAC42:\n\
- mov r1, r12\n\
- ldrb r0, [r1]\n\
- movs r1, 0xF\n\
- ands r1, r0\n\
- movs r0, 0x30\n\
-_080DAC4C:\n\
- orrs r1, r0\n\
- mov r2, r12\n\
- strb r1, [r2]\n\
-_080DAC52:\n\
- mov r3, r12\n\
- ldrb r1, [r3]\n\
- lsls r1, 30\n\
- lsrs r1, 31\n\
- mov r0, r12\n\
- adds r0, 0xC\n\
- adds r0, r1\n\
- ldrb r1, [r0]\n\
- ldr r3, _080DACE0 @ =gSineTable\n\
- mov r4, r8\n\
- lsls r0, r4, 1\n\
- adds r0, r3\n\
- movs r2, 0\n\
- ldrsh r0, [r0, r2]\n\
- muls r0, r1\n\
- asrs r0, 8\n\
- strh r0, [r5, 0x24]\n\
- ldrb r2, [r5, 0x3]\n\
- lsls r2, 26\n\
- lsrs r2, 27\n\
- movs r4, 0x24\n\
- ldrsh r0, [r5, r4]\n\
- negs r0, r0\n\
- asrs r0, 1\n\
- mov r1, r12\n\
- ldrb r1, [r1, 0xA]\n\
- adds r0, r1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- lsls r1, r0, 1\n\
- adds r1, r3\n\
- ldrh r6, [r1]\n\
- ldr r1, _080DACE4 @ =gOamMatrices\n\
- lsls r2, 3\n\
- adds r2, r1\n\
- adds r0, 0x40\n\
- lsls r0, 1\n\
- adds r0, r3\n\
- ldrh r0, [r0]\n\
- strh r0, [r2, 0x6]\n\
- strh r0, [r2]\n\
- strh r6, [r2, 0x2]\n\
- lsls r0, r6, 16\n\
- asrs r0, 16\n\
- negs r0, r0\n\
- strh r0, [r2, 0x4]\n\
- mov r2, r12\n\
- ldrh r0, [r2, 0x6]\n\
- ldrh r3, [r2, 0x8]\n\
- adds r0, r3\n\
- strh r0, [r2, 0x8]\n\
- lsls r0, 16\n\
- lsrs r0, 24\n\
- strh r0, [r5, 0x22]\n\
- movs r4, 0x4\n\
- ldrsh r0, [r2, r4]\n\
- movs r1, 0x80\n\
- lsls r1, 8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080DACE8\n\
- ldrh r0, [r2, 0x4]\n\
- subs r1, 0x1\n\
- ands r1, r0\n\
- ldrh r0, [r2, 0x2]\n\
- subs r0, r1\n\
- movs r1, 0xFF\n\
- ands r0, r1\n\
- strh r0, [r2, 0x2]\n\
- b _080DACFE\n\
- .align 2, 0\n\
-_080DACE0: .4byte gSineTable\n\
-_080DACE4: .4byte gOamMatrices\n\
-_080DACE8:\n\
- mov r1, r12\n\
- ldrh r0, [r1, 0x4]\n\
- ldr r1, _080DAD28 @ =0x00007fff\n\
- ands r1, r0\n\
- mov r2, r12\n\
- ldrh r2, [r2, 0x2]\n\
- adds r1, r2\n\
- movs r0, 0xFF\n\
- ands r1, r0\n\
- mov r3, r12\n\
- strh r1, [r3, 0x2]\n\
-_080DACFE:\n\
- movs r4, 0x22\n\
- ldrsh r1, [r5, r4]\n\
- movs r2, 0x26\n\
- ldrsh r0, [r5, r2]\n\
- adds r1, r0\n\
- mov r3, r12\n\
- ldrh r0, [r3, 0xE]\n\
- lsrs r0, 1\n\
- cmp r1, r0\n\
- blt _080DAD1A\n\
- movs r0, 0\n\
- strh r0, [r5, 0x2E]\n\
- ldr r0, _080DAD2C @ =sub_80DA48C\n\
- str r0, [r5, 0x1C]\n\
-_080DAD1A:\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080DAD28: .4byte 0x00007fff\n\
-_080DAD2C: .4byte sub_80DA48C\n");
-};
-#endif
-void sub_80DAD30(struct Sprite *sprite)
+static void sub_80DAD30(struct Sprite *sprite)
{
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
@@ -1887,9 +839,9 @@ void sub_80DAD30(struct Sprite *sprite)
sprite->callback = TranslateAnimSpriteToTargetMonLocation;
}
-void sub_80DAD84(struct Sprite * sprite)
+static void sub_80DAD84(struct Sprite * sprite)
{
- s16 matrixNum;
+ u32 matrixNum;
s16 rand;
s16 sinVal;
@@ -1930,7 +882,7 @@ void sub_80DAD84(struct Sprite * sprite)
sprite->pos2.x = sprite->pos2.y = 0;
matrixNum = sprite->oam.matrixNum;
- sprite->data[1] = (u8) (sprite->data[1] >> 8);
+ sprite->data[1] = ((u16)sprite->data[1] >> 8);
rand = Random();
if (rand & 0x8000)
@@ -1957,217 +909,66 @@ void sub_80DAD84(struct Sprite * sprite)
}
-#ifdef NONMATCHING
-void sub_80DAF0C(struct Sprite *sprite)
+static void sub_80DAF0C(struct Sprite *sprite)
{
-
- /* NONMATCHING - Functionally equivalent
- *
- * differences:
- *
- * asm contains useless:
- * movs r1, 0
- * mov r8, r1
- * where r8 is never used can't be matched
- *
- * 0x8001 and 0x8002 loaded then added with 0 to r0 instead of loaded straight there */
-
- u16 *data;
u16 dataCpy[8];
- int higher;
-
- data = sprite->data;
+ struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data;
- if (++sprite->data[0] > 4)
- {
- sprite->pos2.x = (sprite->data[4] * sprite->data[6]) >> 8;
- sprite->pos2.y = (sprite->data[5] * sprite->data[6]) >> 8;
-
- sprite->data[6] += sprite->data[3] & 0xff;
-
- if (sprite->data[6] >= (sprite->data[2] & 0xff))
- {
- sprite->pos1.x += sprite->pos2.x;
- sprite->pos1.y += sprite->pos2.y;
+ if (++sprite->data[0] < 5)
+ return;
- sprite->pos2.x = 0;
- sprite->pos2.y = 0;
+ sprite->pos2.x = (sprite->data[4] * sprite->data[6]) >> 8;
+ sprite->pos2.y = (sprite->data[5] * sprite->data[6]) >> 8;
- memcpy(dataCpy, data, 16);
- memset(data, 0, 16);
+ sprite->data[6] += sprite->data[3] & 0xff;
- data[4] = sprite->pos1.y << 8;
- data[3] = dataCpy[3] >> 8;
- data[1] = 0;
- data[5] = dataCpy[1];
+ if (sprite->data[6] < (sprite->data[2] & 0xff))
+ return;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
- if (sprite->animNum != 0)
- {
- if (data[3] & 8)
- {
- data[2] = 0x8001;
- }
- else
- {
- data[2] = 0x8002;
- }
- }
- else
- {
- if (data[3] & 8)
- {
- data[2] = 1;
- }
- else
- {
- data[2] = 2;
- }
- }
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
- ((u8 *) data)[12] = dataCpy[2] >> 8;
- ((u8 *) data)[13] = (u8) data[6] - 2;
+ memcpy(dataCpy, sprite->data, 16);
+ memset(sprite->data, 0, 16);
- higher = dataCpy[7] << 1;
- data[7] = (data[7] & 1) | higher;
+ data->unk8 = (u16)sprite->pos1.y << 8;
+ data->unk6 = dataCpy[3] >> 8;
+ data->unk2 = 0;
+ data->unkA = dataCpy[1];
- sprite->callback = sub_80DA6F0;
+ if (sprite->animNum != 0)
+ {
+ if (data->unk6 & 8)
+ {
+ data->unk4 = 0x8001;
+ }
+ else
+ {
+ data->unk4 = 0x8002;
}
}
-}
-#else
-NAKED
-void sub_80DAF0C(struct Sprite *sprite)
-{
- asm_unified("push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- sub sp, 0x10\n\
- adds r4, r0, 0\n\
- adds r5, r4, 0\n\
- adds r5, 0x2E\n\
- ldrh r0, [r4, 0x2E]\n\
- adds r0, 0x1\n\
- movs r1, 0\n\
- mov r8, r1\n\
- movs r7, 0\n\
- strh r0, [r4, 0x2E]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x4\n\
- ble _080DAFF0\n\
- movs r2, 0x36\n\
- ldrsh r1, [r4, r2]\n\
- movs r2, 0x3A\n\
- ldrsh r0, [r4, r2]\n\
- muls r0, r1\n\
- asrs r6, r0, 8\n\
- strh r6, [r4, 0x24]\n\
- movs r0, 0x38\n\
- ldrsh r1, [r4, r0]\n\
- movs r2, 0x3A\n\
- ldrsh r0, [r4, r2]\n\
- muls r0, r1\n\
- asrs r3, r0, 8\n\
- strh r3, [r4, 0x26]\n\
- ldrh r2, [r4, 0x34]\n\
- movs r1, 0xFF\n\
- adds r0, r1, 0\n\
- ands r0, r2\n\
- ldrh r2, [r4, 0x3A]\n\
- adds r0, r2\n\
- strh r0, [r4, 0x3A]\n\
- ldrh r2, [r4, 0x32]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- ands r1, r2\n\
- cmp r0, r1\n\
- blt _080DAFF0\n\
- ldrh r0, [r4, 0x20]\n\
- adds r0, r6\n\
- strh r0, [r4, 0x20]\n\
- ldrh r0, [r4, 0x22]\n\
- adds r0, r3\n\
- strh r0, [r4, 0x22]\n\
- strh r7, [r4, 0x24]\n\
- strh r7, [r4, 0x26]\n\
- mov r0, sp\n\
- adds r1, r5, 0\n\
- movs r2, 0x10\n\
- bl memcpy\n\
- adds r0, r5, 0\n\
- movs r1, 0\n\
- movs r2, 0x10\n\
- bl memset\n\
- ldrh r0, [r4, 0x22]\n\
- lsls r0, 8\n\
- strh r0, [r5, 0x8]\n\
- mov r0, sp\n\
- ldrh r0, [r0, 0x6]\n\
- lsrs r1, r0, 8\n\
- strh r1, [r5, 0x6]\n\
- strh r7, [r5, 0x2]\n\
- mov r0, sp\n\
- ldrh r0, [r0, 0x2]\n\
- strh r0, [r5, 0xA]\n\
- adds r0, r4, 0\n\
- adds r0, 0x2A\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- beq _080DAFC0\n\
- movs r0, 0x8\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- beq _080DAFB8\n\
- ldr r0, _080DAFB4 @ =0x00008001\n\
- b _080DAFCE\n\
- .align 2, 0\n\
- _080DAFB4: .4byte 0x00008001\n\
- _080DAFB8:\n\
- ldr r0, _080DAFBC @ =0x00008002\n\
- b _080DAFCE\n\
- .align 2, 0\n\
- _080DAFBC: .4byte 0x00008002\n\
- _080DAFC0:\n\
- movs r0, 0x8\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- beq _080DAFCC\n\
- movs r0, 0x1\n\
- b _080DAFCE\n\
- _080DAFCC:\n\
- movs r0, 0x2\n\
- _080DAFCE:\n\
- strh r0, [r5, 0x4]\n\
- mov r0, sp\n\
- ldrh r0, [r0, 0x4]\n\
- lsrs r0, 8\n\
- strb r0, [r5, 0xC]\n\
- subs r0, 0x2\n\
- strb r0, [r5, 0xD]\n\
- mov r0, sp\n\
- ldrh r1, [r0, 0xE]\n\
- lsls r1, 1\n\
- ldrh r2, [r5, 0xE]\n\
- movs r0, 0x1\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strh r0, [r5, 0xE]\n\
- ldr r0, _080DAFFC @ =sub_80DA6F0\n\
- str r0, [r4, 0x1C]\n\
- _080DAFF0:\n\
- add sp, 0x10\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
- _080DAFFC: .4byte sub_80DA6F0\n");
+ else
+ {
+ if (data->unk6 & 8)
+ {
+ data->unk4 = 1;
+ }
+ else
+ {
+ data->unk4 = 2;
+ }
+ }
+
+ data->unkC[0] = (u8)(dataCpy[2] >> 8);
+ data->unkC[1] = data->unkC[0] - 2;
+ data->unkE_1 = dataCpy[7];
+ sprite->callback = DestroyAnimSpriteAfterTimer;
}
-#endif
-void sub_80DB000(struct Sprite *sprite)
+static void sub_80DB000(struct Sprite *sprite)
{
u16 arg;
u8 mult;
@@ -2199,7 +1000,7 @@ void sub_80DB000(struct Sprite *sprite)
sprite->callback = sub_80DB0A0;
}
-void sub_80DB0A0(struct Sprite *sprite)
+static void sub_80DB0A0(struct Sprite *sprite)
{
sprite->pos2.x += sprite->data[1] >> 8;
@@ -2210,7 +1011,7 @@ void sub_80DB0A0(struct Sprite *sprite)
StartSpriteAnim(sprite, 0);
}
- if (--sprite->data[7] == -1)
+ if (sprite->data[7]-- == 0)
{
DestroyAnimSprite(sprite);
}
@@ -2242,13 +1043,13 @@ void sub_80DB0E8(u8 task)
}
}
-void sub_80DB194(struct Sprite *sprite)
+static void sub_80DB194(struct Sprite *sprite)
{
switch (sprite->data[0])
{
case 0:
InitAnimSpritePos(sprite, 1);
- gSprites[GetAnimBattlerSpriteId(0)].invisible = 1;
+ gSprites[GetAnimBattlerSpriteId(0)].invisible = TRUE;
++sprite->data[0];
break;
case 1:
@@ -2259,7 +1060,7 @@ void sub_80DB194(struct Sprite *sprite)
}
}
-void sub_80DB1F4(struct Sprite *sprite)
+static void sub_80DB1F4(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -2279,22 +1080,22 @@ void sub_80DB1F4(struct Sprite *sprite)
sprite->pos2.y -= 10;
if (sprite->pos1.y + sprite->pos2.y < -32)
{
- gSprites[GetAnimBattlerSpriteId(0)].invisible = 0;
+ gSprites[GetAnimBattlerSpriteId(0)].invisible = FALSE;
DestroyAnimSprite(sprite);
}
}
}
-void sub_80DB288(struct Sprite *sprite)
+static void sub_80DB288(struct Sprite *sprite)
{
InitAnimSpritePos(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gBattleAnimArgs[3];
sprite->callback = sub_80DB2D0;
- gSprites[GetAnimBattlerSpriteId(0)].invisible = 1;
+ gSprites[GetAnimBattlerSpriteId(0)].invisible = TRUE;
}
-void sub_80DB2D0(struct Sprite *sprite)
+static void sub_80DB2D0(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
{
@@ -2307,7 +1108,7 @@ void sub_80DB2D0(struct Sprite *sprite)
}
else
{
- sprite->invisible = 1;
+ sprite->invisible = TRUE;
if (sprite->data[3]++ > 20)
{
sprite->callback = sub_80DB330;
@@ -2315,13 +1116,13 @@ void sub_80DB2D0(struct Sprite *sprite)
}
}
-void sub_80DB330(struct Sprite *sprite)
+static void sub_80DB330(struct Sprite *sprite)
{
sprite->pos2.y += sprite->data[2] >> 8;
if (sprite->pos1.y + sprite->pos2.y > -32)
{
- sprite->invisible = 0;
+ sprite->invisible = FALSE;
}
if (sprite->pos2.y > 0)
@@ -2330,7 +1131,7 @@ void sub_80DB330(struct Sprite *sprite)
}
}
-void sub_80DB374(struct Sprite *sprite)
+static void sub_80DB374(struct Sprite *sprite)
{
u32 matrixNum;
int t1, t2;
@@ -2384,7 +1185,7 @@ void sub_80DB374(struct Sprite *sprite)
}
}
-void sub_80DB458(struct Sprite *sprite)
+static void sub_80DB458(struct Sprite *sprite)
{
int v1, v2;
@@ -2430,7 +1231,7 @@ void sub_80DB458(struct Sprite *sprite)
sprite->callback = sub_80DB508;
}
-void sub_80DB508(struct Sprite *sprite)
+static void sub_80DB508(struct Sprite *sprite)
{
if (sprite->data[2] == 0)
{
@@ -2457,14 +1258,14 @@ void sub_80DB508(struct Sprite *sprite)
}
}
-void sub_80DB564(struct Sprite *sprite)
+static void sub_80DB564(struct Sprite *sprite)
{
sprite->data[6] = 0;
sprite->data[7] = 0x40;
sprite->callback = sub_80DB578;
}
-void sub_80DB578(struct Sprite *sprite)
+static void sub_80DB578(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -2484,7 +1285,7 @@ void sub_80DB578(struct Sprite *sprite)
}
}
-void sub_80DB5E4(struct Sprite *sprite)
+static void sub_80DB5E4(struct Sprite *sprite)
{
s16 posx, posy;
u16 rotation;
@@ -2509,7 +1310,7 @@ void sub_80DB5E4(struct Sprite *sprite)
sprite->callback = sub_80DB6A0;
}
-void sub_80DB6A0(struct Sprite *sprite)
+static void sub_80DB6A0(struct Sprite *sprite)
{
sprite->data[4] += sprite->data[6];
sprite->data[5] += sprite->data[7];
@@ -2528,12 +1329,12 @@ void unref_sub_80DB6E4(u8 taskId)
if (gBattleAnimArgs[0] == 0)
{
u8 spriteId = GetAnimBattlerSpriteId(0);
- gSprites[spriteId].invisible = 1;
+ gSprites[spriteId].invisible = TRUE;
}
else
{
u8 spriteId = GetAnimBattlerSpriteId(0);
- gSprites[spriteId].invisible = 0;
+ gSprites[spriteId].invisible = FALSE;
}
DestroyAnimVisualTask(taskId);