diff options
Diffstat (limited to 'src/battle/anim/flying.c')
-rw-r--r-- | src/battle/anim/flying.c | 1837 |
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); |