diff options
Diffstat (limited to 'src/battle')
-rw-r--r-- | src/battle/anim/aurora.c | 34 | ||||
-rw-r--r-- | src/battle/anim/current.c | 2 | ||||
-rw-r--r-- | src/battle/anim/fight.c | 14 | ||||
-rw-r--r-- | src/battle/anim/flying.c | 2247 | ||||
-rw-r--r-- | src/battle/anim/ghost.c | 23 | ||||
-rw-r--r-- | src/battle/anim/ground.c | 2 | ||||
-rw-r--r-- | src/battle/anim/heal.c | 2 | ||||
-rw-r--r-- | src/battle/anim/hop_2.c | 2 | ||||
-rw-r--r-- | src/battle/anim/ice.c | 1953 | ||||
-rw-r--r-- | src/battle/anim/normal.c | 38 | ||||
-rw-r--r-- | src/battle/anim/orbit.c | 2 | ||||
-rw-r--r-- | src/battle/anim/orbs.c | 2 | ||||
-rw-r--r-- | src/battle/anim/psychic.c | 4 | ||||
-rw-r--r-- | src/battle/anim/rock.c | 30 | ||||
-rw-r--r-- | src/battle/anim/splash.c | 11 | ||||
-rw-r--r-- | src/battle/anim/tendrils.c | 2 | ||||
-rw-r--r-- | src/battle/anim/tile.c | 2 | ||||
-rw-r--r-- | src/battle/anim/water.c | 4 | ||||
-rw-r--r-- | src/battle/anim/wisp_fire.c | 5 | ||||
-rw-r--r-- | src/battle/battle_4.c | 167 | ||||
-rw-r--r-- | src/battle/battle_anim.c | 1156 | ||||
-rw-r--r-- | src/battle/battle_anim_812C144.c | 1169 | ||||
-rwxr-xr-x | src/battle/battle_anim_813F0F4.c | 285 | ||||
-rw-r--r-- | src/battle/battle_interface.c | 4 |
24 files changed, 6137 insertions, 1023 deletions
diff --git a/src/battle/anim/aurora.c b/src/battle/anim/aurora.c index c17748440..3564da811 100644 --- a/src/battle/anim/aurora.c +++ b/src/battle/anim/aurora.c @@ -9,9 +9,9 @@ extern s16 gBattleAnimArgs[8]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -void sub_80D33B4(struct Sprite *sprite); -static void sub_80D344C(struct Sprite *); -static void sub_80D34D4(u8); +void AnimAuroraRings(struct Sprite *sprite); +static void AnimGrowAuroraRings(struct Sprite *); +static void AnimTask_RotateMonPalette2(u8); const union AnimCmd gSpriteAnim_83D9190[] = { @@ -43,7 +43,8 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D91C0[] = gSpriteAffineAnim_83D91A8, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D91C4 = +// Multi-colored rings used in Aurora Beam. +const struct SpriteTemplate RainbowRingSpriteTemplate = { .tileTag = 10140, .paletteTag = 10140, @@ -51,10 +52,16 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D91C4 = .anims = gSpriteAnimTable_83D91A0, .images = NULL, .affineAnims = gSpriteAffineAnimTable_83D91C0, - .callback = sub_80D33B4, + .callback = AnimAuroraRings, }; -void sub_80D33B4(struct Sprite *sprite) +// Animates the colorful rings in Aurora Beam linearly towards the target mon. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: duration +void AnimAuroraRings(struct Sprite *sprite) { s16 r6; @@ -69,12 +76,14 @@ void sub_80D33B4(struct Sprite *sprite) sprite->data[3] = sprite->pos1.y; sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; InitAnimLinearTranslation(sprite); - sprite->callback = sub_80D344C; + sprite->callback = AnimGrowAuroraRings; sprite->affineAnimPaused = TRUE; sprite->callback(sprite); } -static void sub_80D344C(struct Sprite *sprite) +// Grows the rings in Aurora Beam. +// arg 7: if -1, grow the rings +static void AnimGrowAuroraRings(struct Sprite *sprite) { if ((u16)gBattleAnimArgs[7] == 0xFFFF) { @@ -85,14 +94,17 @@ static void sub_80D344C(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_80D3490(u8 taskId) +// This seems to rotate the palette of the attacking mon, but the visual +// effect is not noticeable in-game. +// arg 0: duration +void AnimTask_RotateMonPalette1(u8 taskId) { gTasks[taskId].data[0] = gBattleAnimArgs[0]; gTasks[taskId].data[2] = 0x100 + IndexOfSpritePaletteTag(0x279C) * 16; - gTasks[taskId].func = sub_80D34D4; + gTasks[taskId].func = AnimTask_RotateMonPalette2; } -static void sub_80D34D4(u8 taskId) +static void AnimTask_RotateMonPalette2(u8 taskId) { gTasks[taskId].data[10]++; if (gTasks[taskId].data[10] == 3) diff --git a/src/battle/anim/current.c b/src/battle/anim/current.c index fb7bc4e1c..ea73b0116 100644 --- a/src/battle/anim/current.c +++ b/src/battle/anim/current.c @@ -463,7 +463,7 @@ static void sub_80D672C(struct Sprite *sprite) void sub_80D679C(struct Sprite *sprite) { - sub_8078764(sprite, 0); + sub_8078764(sprite, FALSE); sprite->oam.tileNum += gBattleAnimArgs[3] * 4; if (gBattleAnimArgs[3] == 1) diff --git a/src/battle/anim/fight.c b/src/battle/anim/fight.c index 1a534aec7..505356a57 100644 --- a/src/battle/anim/fight.c +++ b/src/battle/anim/fight.c @@ -480,7 +480,7 @@ void AnimBasicFistOrFoot(struct Sprite *sprite) if (gBattleAnimArgs[3] == 0) InitAnimSpritePos(sprite, 1); else - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[2]; sprite->callback = WaitAnimForDuration; @@ -553,7 +553,7 @@ static void sub_80D927C(struct Sprite *sprite) void sub_80D92D0(struct Sprite *sprite) { - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); sprite->data[0] = 30; if (gBattleAnimArgs[2] == 0) @@ -593,7 +593,7 @@ void sub_80D9378(struct Sprite *sprite) if ((gAnimBankAttacker ^ 2) == gAnimBankTarget && GetBattlerPosition(gAnimBankTarget) < 2) gBattleAnimArgs[0] *= -1; - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; @@ -634,7 +634,7 @@ static void sub_80D9404(struct Sprite *sprite) // arg 3: spin duration void AnimSpinningKickOrPunch(struct Sprite *sprite) { - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); StartSpriteAnim(sprite, gBattleAnimArgs[2]); sprite->data[0] = gBattleAnimArgs[3]; @@ -658,7 +658,7 @@ static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite) // arg 2: initial wait duration void AnimStompFoot(struct Sprite *sprite) { - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[2]; sprite->callback = AnimStompFootStep; @@ -689,7 +689,7 @@ void sub_80D9540(struct Sprite *sprite) { if (sprite->data[0] == 0) { - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); sprite->data[1] = gBattleAnimArgs[2]; sprite->data[2] = gBattleAnimArgs[3]; sprite->data[0]++; @@ -986,7 +986,7 @@ void sub_80D9BD4(struct Sprite *sprite) if (gBattleAnimArgs[2] == 0) InitAnimSpritePos(sprite, 0); else - sub_8078764(sprite, 0); + sub_8078764(sprite, FALSE); if (IsContest()) { diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c index 35022db1f..646c80c53 100644 --- a/src/battle/anim/flying.c +++ b/src/battle/anim/flying.c @@ -4,11 +4,16 @@ #include "palette.h" #include "rom_8077ABC.h" #include "trig.h" +#include "main.h" +#include "random.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern u8 gAnimVisualTaskCount; +extern struct OamMatrix gOamMatrices[]; +extern u8 gBanksBySide[]; +extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB538; void sub_80785E4(struct Sprite *sprite); void sub_80DA034(struct Sprite *sprite); @@ -21,16 +26,24 @@ 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); @@ -104,7 +117,7 @@ const union AffineAnimCmd gSpriteAffineAnim_83DA3FC[] = const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA424[] = { - gSpriteAffineAnim_83DA3FC, + gSpriteAffineAnim_83DA3FC, }; const union AffineAnimCmd gSpriteAffineAnim_83DA428[] = @@ -356,27 +369,25 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA65C = .callback = sub_80DB5E4, }; -void sub_80DA034(struct Sprite *sprite) +void sub_80DA034(struct Sprite *sprite) { - sub_8078764(sprite, 0); + sub_8078764(sprite, FALSE); sprite->pos1.y += 20; sprite->data[1] = 0xBF; sprite->callback = sub_80DA05C; sub_80DA05C(sprite); } -void sub_80DA05C(struct Sprite *sprite) -{ +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; - if(++sprite->data[0] == 0x47) - { + if (++sprite->data[0] == 0x47) { DestroyAnimSprite(sprite); } } -void sub_80DA09C(u8 taskId) +void sub_80DA09C(u8 taskId) { gTasks[taskId].data[0] = gBattleAnimArgs[1]; gTasks[taskId].data[1] = gBattleAnimArgs[0]; @@ -384,113 +395,45 @@ void sub_80DA09C(u8 taskId) gTasks[taskId].func = sub_80DA0DC; } -#ifdef NONMATCHING void sub_80DA0DC(u8 taskId) { - gTasks[taskId].data[10]++; - if(gTasks[taskId].data[10] == gTasks[taskId].data[1]) + u8 data2; + u16 temp; + int i, base; + + if (gTasks[taskId].data[10]++ == gTasks[taskId].data[1]) { - u16 r0; - u16 r2; - s32 i; - gTasks[taskId].data[10] = 0; - r0 = gTasks[taskId].data[2]; - r2 = gPlttBufferFaded[r0 * 8]; - for(i = 0; i < 8; i++) - gPlttBufferFaded[r0 * 8 + i + 0x107] = gPlttBufferFaded[r0 * 8 + i + 0x107]; - gTasks[taskId].data[2] = ((r0 + 0x101) * 2) + r2; + + data2 = gTasks[taskId].data[2]; + temp = gPlttBufferFaded[16 * data2 + 0x108]; + + i = 7; + base = data2 * 16; + + do + { + gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i]; + i--; + } + while (i > 0); + + gPlttBufferFaded[base + 0x101] = temp; } - gTasks[taskId].data[0] = gTasks[taskId].data[0] * 32; - if(gTasks[taskId].data[0] == 0) + + if (--gTasks[taskId].data[0] == 0) { DestroyAnimVisualTask(taskId); } } -#else -NAKED -void sub_80DA0DC(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - ldr r2, _080DA15C @ =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r3, r0, r2\n\ - ldrh r0, [r3, 0x1C]\n\ - adds r1, r0, 0x1\n\ - strh r1, [r3, 0x1C]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - movs r4, 0xA\n\ - ldrsh r1, [r3, r4]\n\ - adds r7, r2, 0\n\ - cmp r0, r1\n\ - bne _080DA13A\n\ - movs r0, 0\n\ - strh r0, [r3, 0x1C]\n\ - ldrb r0, [r3, 0xC]\n\ - ldr r2, _080DA160 @ =gPlttBufferFaded\n\ - lsls r0, 4\n\ - movs r3, 0x84\n\ - lsls r3, 1\n\ - adds r1, r0, r3\n\ - lsls r1, 1\n\ - adds r1, r2\n\ - ldrh r6, [r1]\n\ - movs r4, 0x7\n\ - mov r12, r0\n\ - ldr r0, _080DA164 @ =0x00000107\n\ - add r0, r12\n\ - lsls r0, 1\n\ - adds r3, r0, r2\n\ -_080DA122:\n\ - ldrh r0, [r3]\n\ - strh r0, [r1]\n\ - subs r3, 0x2\n\ - subs r1, 0x2\n\ - subs r4, 0x1\n\ - cmp r4, 0\n\ - bgt _080DA122\n\ - ldr r0, _080DA168 @ =0x00000101\n\ - add r0, r12\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - strh r6, [r0]\n\ -_080DA13A:\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r7\n\ - ldrh r1, [r0, 0x8]\n\ - subs r1, 0x1\n\ - strh r1, [r0, 0x8]\n\ - lsls r1, 16\n\ - cmp r1, 0\n\ - bne _080DA154\n\ - adds r0, r5, 0\n\ - bl DestroyAnimVisualTask\n\ -_080DA154:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080DA15C: .4byte gTasks\n\ -_080DA160: .4byte gPlttBufferFaded\n\ -_080DA164: .4byte 0x00000107\n\ -_080DA168: .4byte 0x00000101\n\ - .syntax divided\n"); -} -#endif void sub_80DA16C(struct Sprite *sprite) { InitAnimSpritePos(sprite, 1); if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } sprite->data[0] = gBattleAnimArgs[4]; sprite->data[1] = sprite->pos1.x; sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2]; @@ -605,14 +548,14 @@ void sub_80DA410(struct Sprite *sprite) sprite->data[0] = 1; TranslateAnimLinear(sprite); - if (((u16)sprite->data[3] >> 8) > 200) + if (((u16) sprite->data[3] >> 8) > 200) { sprite->pos1.x += sprite->pos2.x; sprite->pos2.x = 0; sprite->data[3] &= 0xFF; } - if ((u32)(sprite->pos1.x + sprite->pos2.x + 32) > 304 || sprite->pos1.y + sprite->pos2.y > 160) + if ((u32) (sprite->pos1.x + sprite->pos2.x + 32) > 304 || sprite->pos1.y + sprite->pos2.y > 160) { gSprites[GetAnimBattlerSpriteId(0)].invisible = 0; DestroyAnimSprite(sprite); @@ -628,8 +571,2106 @@ void sub_80DA48C(struct Sprite *sprite) FreeOamMatrix(sprite->oam.matrixNum); sprite->oam.affineMode = 0; } - + DestroySprite(sprite); gAnimVisualTaskCount--; } } + +// FAKEMATCHING +void sub_80DA4D8(struct Sprite *sprite) +{ + s16 *data; + u8 slot; + s16 spriteCoord; + int t1, t2; + u32 arg2; + u32 matrixNum; + u8 sinIndex; + register s16 sinVal asm ("r4"); + register int sinVal2 asm ("r0"); + + data = sprite->data; + + if (gBattleAnimArgs[7] & 0x100) + { + slot = gAnimBankAttacker; + } + else + { + slot = gAnimBankTarget; + } + + if (GetBattlerSide(slot) == 0) + { + 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; + + t1 = (spriteCoord + (u16) gBattleAnimArgs[6]) << 1; + data[7] = (data[7] & 1) | t1; + ((u8 *) data)[0] |= 4; + + 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]; + + if ((u16) (data[1] - 64) <= 0x7f) + { + if (gMain.inBattle) + { + sprite->oam.priority = sub_8079ED4(slot) + 1; + } + else + { + sprite->oam.priority = sub_8079ED4(slot); + } + + ((u8 *) data)[14] = data[7] & -2; + + if (!(data[2] & 0x8000)) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + + sprite->animBeginning = 1; + sprite->animEnded = 0; + } + } + else + { + sprite->oam.priority = sub_8079ED4(slot); + ((u8 *) data)[14] |= 1; + + if (data[2] & 0x8000) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + + sprite->animBeginning = 1; + sprite->animEnded = 0; + } + } + + t2 = (u16) data[1] >> 6 << 4; + ((u8 *) data)[0] = (15 & data[0]) | t2; + + sprite->pos2.x = (gSineTable[(u16) data[1]] * (u8) data[6]) >> 8; + + matrixNum = sprite->oam.matrixNum; + + sinIndex = (-sprite->pos2.x >> 1) + data[5]; + sinVal = gSineTable[sinIndex]; + + gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; + gOamMatrices[matrixNum].b = sinVal; + sinVal2 = -sinVal; + gOamMatrices[matrixNum].c = sinVal2; + + sprite->callback = sub_80DA6F0; +} + +#ifdef NONMATCHING +void sub_80DA6F0(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; + + if (dataByte[0] & 1) + { + u32 t1; + + t1 = dataByte[1]; + dataByte[1] += 0xff; + + t1 <<= 24; + if (t1 == 0) + { + // 080da724 + ((struct dataStruct *)dataByte)[0].one = 0; + dataByte[1] = zero; + } + + } + else + { + // 080da730 + u16 tData; + u16 t2; + + tData = data[1]; + t2 = tData >> 6; + r8 = tData; + + switch (t2) + { + 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; + } + + // 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)) + { + data[1] = (data[1] - (data[2] & ((0x80 << 8) - 1))) & 0xff; + } + else + { + // 080dace8 + data[1] = ((data[2] & 0x7fff) + data[1]) & 0xff; + } + // 080dacfe + if (sprite->pos1.y + sprite->pos2.y >= (u16)data[7] / 2) + { + 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) +{ + sprite->oam.priority = sub_8079ED4(gAnimBankTarget); + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + sprite->callback = TranslateAnimSpriteToTargetMonLocation; +} + +void sub_80DAD84(struct Sprite * sprite) +{ + s16 matrixNum; + s16 rand; + s16 sinVal; + + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[3] = gBattleAnimArgs[2]; + + if (gMain.inBattle) + { + if (gBanksBySide[gAnimBankTarget] & 1) + { + sprite->data[7] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + gBattleAnimArgs[3]; + } + else + { + // 080dade0 + sprite->data[7] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + 40; + } + + if (gBattleAnimArgs[4]) + { + sprite->oam.priority = sub_8079ED4(gAnimBankTarget) + 1; + // 080dae24 + } + else + { + sprite->oam.priority = sub_8079ED4(gAnimBankTarget); + } + } + else + { + sprite->data[7] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + gBattleAnimArgs[3]; + } + + sprite->data[4] = gSineTable[sprite->data[1] & 0xff]; + sprite->data[5] = -gSineTable[(sprite->data[1] & 0xff) + 64]; + sprite->data[6] = 0; + sprite->pos2.x = sprite->pos2.y = 0; + + matrixNum = sprite->oam.matrixNum; + sprite->data[1] = (u8) (sprite->data[1] >> 8); + + rand = Random(); + if (rand & 0x8000) + { + sprite->data[1] = 0xff - sprite->data[1]; + } + + sinVal = gSineTable[sprite->data[1]]; + + gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sprite->data[1] + 64]; + gOamMatrices[matrixNum].b = sinVal; + gOamMatrices[matrixNum].c = -sinVal; + + sprite->animBeginning = 1; + sprite->animEnded = 0; + + if (rand & 1) + { + sprite->animNum = 1; + sprite->hFlip = 1; + } + + sprite->callback = sub_80DAF0C; + +} + +#ifdef NONMATCHING +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; + + 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; + + sprite->pos2.x = 0; + sprite->pos2.y = 0; + + memcpy(dataCpy, data, 16); + memset(data, 0, 16); + + data[4] = sprite->pos1.y << 8; + data[3] = dataCpy[3] >> 8; + data[1] = 0; + data[5] = dataCpy[1]; + + 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; + } + } + + ((u8 *) data)[12] = dataCpy[2] >> 8; + ((u8 *) data)[13] = (u8) data[6] - 2; + + higher = dataCpy[7] << 1; + data[7] = (data[7] & 1) | higher; + + sprite->callback = sub_80DA6F0; + } + } +} +#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"); + +} +#endif + +void sub_80DB000(struct Sprite *sprite) +{ + u16 arg; + u8 mult; + + if (gBattleAnimArgs[2] == 0) + { + InitAnimSpritePos(sprite, 0); + } + else + { + sub_8078764(sprite, FALSE); + } + + if ((!gBattleAnimArgs[2] && !GetBattlerSide(gAnimBankAttacker)) + || (gBattleAnimArgs[2] == 1 && !GetBattlerSide(gAnimBankTarget))) + { + sprite->pos1.x += 8; + } + + SeekSpriteAnim(sprite, gBattleAnimArgs[4]); + sprite->pos1.x -= 32; + sprite->data[1] = 0x0ccc; + + arg = gBattleAnimArgs[4]; + mult = 12; + sprite->pos2.x += mult * arg; + sprite->data[0] = arg; + sprite->data[7] = gBattleAnimArgs[3]; + sprite->callback = sub_80DB0A0; +} + +void sub_80DB0A0(struct Sprite *sprite) +{ + sprite->pos2.x += sprite->data[1] >> 8; + + if (++sprite->data[0] == 6) + { + sprite->data[0] = 0; + sprite->pos2.x = 0; + StartSpriteAnim(sprite, 0); + } + + if (--sprite->data[7] == -1) + { + DestroyAnimSprite(sprite); + } +} + +void sub_80DB0E8(u8 task) +{ + u16 data = gTasks[task].data[0]; + if ((data & 31) == 0) + { + ++gAnimVisualTaskCount; + + gBattleAnimArgs[0] = Sin(gTasks[task].data[0], -13); + gBattleAnimArgs[1] = Cos(gTasks[task].data[0], -13); + gBattleAnimArgs[2] = 1; + gBattleAnimArgs[3] = 3; + + CreateSpriteAndAnimate(&gBattleAnimSpriteTemplate_83DB538, + GetBattlerSpriteCoord(gAnimBankTarget, 2), + GetBattlerSpriteCoord(gAnimBankTarget, 3), + 3); + } + + gTasks[task].data[0] += 8; + + if (gTasks[task].data[0] > 0xff) + { + DestroyAnimVisualTask(task); + } +} + +void sub_80DB194(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + InitAnimSpritePos(sprite, 1); + gSprites[GetAnimBattlerSpriteId(0)].invisible = 1; + ++sprite->data[0]; + break; + case 1: + if (sprite->affineAnimEnded) + { + DestroyAnimSprite(sprite); + } + } +} + +void sub_80DB1F4(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 1); + sprite->pos2.y = -sprite->pos1.y - 32; + ++sprite->data[0]; + break; + case 1: + sprite->pos2.y += 10; + if (sprite->pos2.y >= 0) + { + ++sprite->data[0]; + } + break; + case 2: + sprite->pos2.y -= 10; + if (sprite->pos1.y + sprite->pos2.y < -32) + { + gSprites[GetAnimBattlerSpriteId(0)].invisible = 0; + DestroyAnimSprite(sprite); + } + } +} + +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; +} + +void sub_80DB2D0(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + --sprite->data[0]; + } + else if (sprite->pos1.y + sprite->pos2.y > -32) + { + sprite->data[2] += sprite->data[1]; + sprite->pos2.y -= (sprite->data[2] >> 8); + } + else + { + sprite->invisible = 1; + if (sprite->data[3]++ > 20) + { + sprite->callback = sub_80DB330; + } + } +} + +void sub_80DB330(struct Sprite *sprite) +{ + sprite->pos2.y += sprite->data[2] >> 8; + + if (sprite->pos1.y + sprite->pos2.y > -32) + { + sprite->invisible = 0; + } + + if (sprite->pos2.y > 0) + { + DestroyAnimSprite(sprite); + } +} + +#ifdef NONMATCHING +void sub_80DB374(struct Sprite *sprite) +{ + // NONMATCHING - Functionally equivalent - slight register swap at end + + u32 matrixNum; + int t1, t3; + s16 t2; + + switch (sprite->data[0]) + { + + case 0: + if (!gBattleAnimArgs[0]) + { + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 1); + } + + sprite->data[1] = 512; + + sub_8078FDC(sprite, 0, 256, sprite->data[1], 0); + ++sprite->data[0]; + break; + case 1: + if (sprite->data[2] <= 11) + { + sprite->data[1] -= 40; + } + else + { + sprite->data[1] += 40; + } + + ++sprite->data[2]; + + sub_8078FDC(sprite, 0, 256, sprite->data[1], 0); + + matrixNum = sprite->oam.matrixNum; + + t1 = 15616; + t2 = gOamMatrices[matrixNum].d; + t3 = t1 / t2 + 1; + + if (t3 > 128) + { + t3 = 128; + } + + /* NONMATCHING + * compiles to: + * asr r0, r0, #0x1 + strh r0, [r5, #0x26] + * needed: + * asrs r1, r0, 1 + * strh r1, [r5, 0x26] */ + sprite->pos2.y = (64 - t3) / 2; + + if (sprite->data[2] == 24) + { + sub_8079098(sprite); + DestroyAnimSprite(sprite); + } + } +} +#else +NAKED +void sub_80DB374(struct Sprite *sprite) +{ + asm_unified("push {r4,r5,lr}\n\ + sub sp, 0x4\n\ + adds r5, r0, 0\n\ + movs r1, 0x2E\n\ + ldrsh r0, [r5, r1]\n\ + cmp r0, 0\n\ + beq _080DB388\n\ + cmp r0, 0x1\n\ + beq _080DB3E0\n\ + b _080DB44C\n\ +_080DB388:\n\ + ldr r0, _080DB398 @ =gBattleAnimArgs\n\ + movs r2, 0\n\ + ldrsh r0, [r0, r2]\n\ + cmp r0, 0\n\ + bne _080DB3A0\n\ + ldr r4, _080DB39C @ =gAnimBankAttacker\n\ + b _080DB3A2\n\ + .align 2, 0\n\ +_080DB398: .4byte gBattleAnimArgs\n\ +_080DB39C: .4byte gAnimBankAttacker\n\ +_080DB3A0:\n\ + ldr r4, _080DB3DC @ =gAnimBankTarget\n\ +_080DB3A2:\n\ + ldrb r0, [r4]\n\ + movs r1, 0\n\ + bl GetBattlerSpriteCoord\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + strh r0, [r5, 0x20]\n\ + ldrb r0, [r4]\n\ + movs r1, 0x1\n\ + bl GetBattlerSpriteCoord\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + strh r0, [r5, 0x22]\n\ + movs r0, 0\n\ + movs r3, 0x80\n\ + lsls r3, 2\n\ + strh r3, [r5, 0x30]\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + str r0, [sp]\n\ + adds r0, r5, 0\n\ + movs r1, 0\n\ + bl sub_8078FDC\n\ + ldrh r0, [r5, 0x2E]\n\ + adds r0, 0x1\n\ + strh r0, [r5, 0x2E]\n\ + b _080DB44C\n\ + .align 2, 0\n\ +_080DB3DC: .4byte gAnimBankTarget\n\ +_080DB3E0:\n\ + movs r1, 0x32\n\ + ldrsh r0, [r5, r1]\n\ + cmp r0, 0xB\n\ + bgt _080DB3EE\n\ + ldrh r0, [r5, 0x30]\n\ + subs r0, 0x28\n\ + b _080DB3F2\n\ +_080DB3EE:\n\ + ldrh r0, [r5, 0x30]\n\ + adds r0, 0x28\n\ +_080DB3F2:\n\ + strh r0, [r5, 0x30]\n\ + ldrh r0, [r5, 0x32]\n\ + adds r0, 0x1\n\ + movs r1, 0\n\ + strh r0, [r5, 0x32]\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + movs r0, 0x30\n\ + ldrsh r3, [r5, r0]\n\ + str r1, [sp]\n\ + adds r0, r5, 0\n\ + bl sub_8078FDC\n\ + ldrb r1, [r5, 0x3]\n\ + lsls r1, 26\n\ + lsrs r1, 27\n\ + movs r0, 0xF4\n\ + lsls r0, 6\n\ + ldr r2, _080DB454 @ =gOamMatrices\n\ + lsls r1, 3\n\ + adds r1, r2\n\ + movs r2, 0x6\n\ + ldrsh r1, [r1, r2]\n\ + bl __divsi3\n\ + adds r1, r0, 0x1\n\ + cmp r1, 0x80\n\ + ble _080DB42C\n\ + movs r1, 0x80\n\ +_080DB42C:\n\ + movs r0, 0x40\n\ + subs r0, r1\n\ + lsrs r1, r0, 31\n\ + adds r0, r1\n\ + asrs r1, r0, 1\n\ + strh r1, [r5, 0x26]\n\ + movs r1, 0x32\n\ + ldrsh r0, [r5, r1]\n\ + cmp r0, 0x18\n\ + bne _080DB44C\n\ + adds r0, r5, 0\n\ + bl sub_8079098\n\ + adds r0, r5, 0\n\ + bl DestroyAnimSprite\n\ +_080DB44C:\n\ + add sp, 0x4\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080DB454: .4byte gOamMatrices\n"); +} +#endif + +void sub_80DB458(struct Sprite *sprite) +{ + int v1, v2; + + v1 = 0x1ff & Random(); + v2 = 0x7f & Random(); + + if (v1 & 1) + { + sprite->data[0] = 736 + v1; + } + else + { + sprite->data[0] = 736 - v1; + } + + if (v2 & 1) + { + sprite->data[1] = 896 + v2; + } + else + { + sprite->data[1] = 896 - v2; + } + + sprite->data[2] = gBattleAnimArgs[0]; + + if (sprite->data[2]) + { + sprite->oam.matrixNum = 8; + } + + if (gBattleAnimArgs[1] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + 32; + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 1) + 32; + } + + sprite->callback = sub_80DB508; +} + +void sub_80DB508(struct Sprite *sprite) +{ + if (sprite->data[2] == 0) + { + sprite->pos2.x += sprite->data[0] >> 8; + sprite->pos2.y -= sprite->data[1] >> 8; + } + else + { + sprite->pos2.x -= sprite->data[0] >> 8; + sprite->pos2.y -= sprite->data[1] >> 8; + } + + sprite->data[0] = sprite->data[0]; + sprite->data[1] -= 32; + + if (sprite->data[0] < 0) + { + sprite->data[0] = 0; + } + + if (++sprite->data[3] == 31) + { + DestroyAnimSprite(sprite); + } +} + +void sub_80DB564(struct Sprite *sprite) +{ + sprite->data[6] = 0; + sprite->data[7] = 0x40; + sprite->callback = sub_80DB578; +} + +void sub_80DB578(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (++sprite->data[1] > 8) + { + sprite->data[1] = 0; + sprite->invisible ^= 1; + if (++sprite->data[2] > 5 && sprite->invisible) + { + sprite->data[0]++; + } + } + break; + case 1: + DestroyAnimSprite(sprite); + } +} + +void sub_80DB5E4(struct Sprite *sprite) +{ + s16 posx, posy; + u16 rotation; + + posx = sprite->pos1.x; + posy = sprite->pos1.y; + + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + + sprite->data[6] = ((posx - sprite->pos1.x) << 4) / 12; + sprite->data[7] = ((posy - sprite->pos1.y) << 4) / 12; + + rotation = ArcTan2Neg(posx - sprite->pos1.x, posy - sprite->pos1.y); + rotation += 0xc000; + + sub_8078FDC(sprite, 1, 0x100, 0x100, rotation); + + sprite->callback = sub_80DB6A0; +} + +void sub_80DB6A0(struct Sprite *sprite) +{ + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + + if ((u16) (sprite->pos1.x + 0x2d) > 0x14a || sprite->pos1.y > 0x9d || sprite->pos1.y < -0x2d) + { + move_anim_8074EE0(sprite); + } +} + +void unref_sub_80DB6E4(u8 taskId) +{ + if (gBattleAnimArgs[0] == 0) + { + u8 spriteId = GetAnimBattlerSpriteId(0); + gSprites[spriteId].invisible = 1; + } + else + { + u8 spriteId = GetAnimBattlerSpriteId(0); + gSprites[spriteId].invisible = 0; + } + + DestroyAnimVisualTask(taskId); +}
\ No newline at end of file diff --git a/src/battle/anim/ghost.c b/src/battle/anim/ghost.c index c11cea5a0..cba7b2b82 100644 --- a/src/battle/anim/ghost.c +++ b/src/battle/anim/ghost.c @@ -24,8 +24,8 @@ static void sub_80DDD58(struct Sprite *sprite); static void sub_80DDD78(struct Sprite *); static void sub_80DDE7C(u8 taskId); static void sub_80DDED0(u8 taskId); -static void sub_80DDF40(struct Sprite *sprite); -static void sub_80DDFE8(struct Sprite *); +static void InitAnimShadowBall(struct Sprite *sprite); +static void AnimShadowBallStep(struct Sprite *); static void sub_80DE0FC(struct Sprite *sprite); static void sub_80DE114(struct Sprite *); static void sub_80DE2DC(u8 taskId); @@ -94,7 +94,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83DAEA4[] = gSpriteAffineAnim_83DAE94, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAEA8 = +const struct SpriteTemplate gShadowBallSpriteTemplate = { .tileTag = 10176, .paletteTag = 10176, @@ -102,7 +102,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAEA8 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gSpriteAffineAnimTable_83DAEA4, - .callback = sub_80DDF40, + .callback = InitAnimShadowBall, }; const union AnimCmd gSpriteAnim_83DAEC0[] = @@ -320,7 +320,7 @@ static void sub_80DDCC8(struct Sprite *sprite) static void sub_80DDD58(struct Sprite *sprite) { - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); sprite->callback = sub_80DDD78; sub_80DDD78(sprite); } @@ -399,7 +399,12 @@ static void sub_80DDED0(u8 taskId) } } -static void sub_80DDF40(struct Sprite *sprite) +// Spins a sprite towards the target, pausing in the middle. +// Used in Shadow Ball. +// arg 0: duration step 1 (attacker -> center) +// arg 1: duration step 2 (spin center) +// arg 2: duration step 3 (center -> target) +static void InitAnimShadowBall(struct Sprite *sprite) { u16 r5, r6; r5 = sprite->pos1.x; @@ -414,10 +419,10 @@ static void sub_80DDF40(struct Sprite *sprite) sprite->data[5] = sprite->pos1.y << 4; sprite->data[6] = (((s16)r5 - sprite->pos1.x) << 4) / (gBattleAnimArgs[0] << 1); sprite->data[7] = (((s16)r6 - sprite->pos1.y) << 4) / (gBattleAnimArgs[0] << 1); - sprite->callback = sub_80DDFE8; + sprite->callback = AnimShadowBallStep; } -static void sub_80DDFE8(struct Sprite *sprite) +static void AnimShadowBallStep(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -463,7 +468,7 @@ static void sub_80DDFE8(struct Sprite *sprite) static void sub_80DE0FC(struct Sprite *sprite) { - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); sprite->callback = sub_80DE114; } diff --git a/src/battle/anim/ground.c b/src/battle/anim/ground.c index cf73ead2f..407abeddc 100644 --- a/src/battle/anim/ground.c +++ b/src/battle/anim/ground.c @@ -196,7 +196,7 @@ static void AnimBonemerangProjectileEnd(struct Sprite *sprite) // arg 4: duration static void AnimBoneHitProjectile(struct Sprite *sprite) { - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; diff --git a/src/battle/anim/heal.c b/src/battle/anim/heal.c index c2bce0e77..e0b8f9b9e 100644 --- a/src/battle/anim/heal.c +++ b/src/battle/anim/heal.c @@ -41,7 +41,7 @@ void sub_80CBAA4(struct Sprite* sprite) { if (sprite->data[0] == 0) { - sub_8078764(sprite, 0); + sub_8078764(sprite, FALSE); sprite->data[1] = gBattleAnimArgs[2]; } diff --git a/src/battle/anim/hop_2.c b/src/battle/anim/hop_2.c index ab239f3c4..108b06c60 100644 --- a/src/battle/anim/hop_2.c +++ b/src/battle/anim/hop_2.c @@ -35,7 +35,7 @@ void sub_80CBAE8(struct Sprite* sprite) { s16 p1; s16 p2; - sub_8078764(sprite, 0); + sub_8078764(sprite, FALSE); p1 = GetBattlerSpriteCoord(gAnimBankAttacker, 0); p2 = GetBattlerSpriteCoord(gAnimBankAttacker, 1); if ((gAnimBankTarget ^ 2) == gAnimBankAttacker) diff --git a/src/battle/anim/ice.c b/src/battle/anim/ice.c index 50c8b9030..e2288e704 100644 --- a/src/battle/anim/ice.c +++ b/src/battle/anim/ice.c @@ -1,25 +1,59 @@ #include "global.h" +#include "main.h" +#include "trig.h" #include "rom_8077ABC.h" +#include "battle.h" #include "battle_anim.h" +#include "constants/battle_constants.h" +#include "task.h" +#include "decompress.h" +#include "palette.h" +#include "random.h" extern s16 gBattleAnimArgs[]; -extern u8 gAnimBankAttacker; -extern u8 gAnimBankTarget; - -void sub_80D7704(struct Sprite *sprite); -void sub_80D78EC(struct Sprite *sprite); -void sub_80D792C(struct Sprite *sprite); -void sub_80D79B4(struct Sprite *sprite); -void sub_80D7A64(struct Sprite *sprite); -void sub_80D7CD4(struct Sprite *sprite); -void sub_80D7E88(struct Sprite *sprite); -void sub_80D7F10(struct Sprite *sprite); -void sub_80D83E0(struct Sprite *sprite); -void sub_80D8700(struct Sprite *sprite); -void sub_80D8D1C(struct Sprite *sprite); +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; +extern u8 gAnimVisualTaskCount; +extern u8 gBanksBySide[]; +extern u8 gBankSpriteIds[]; + +extern u16 gBattle_BG1_X; +extern u16 gBattle_BG1_Y; + +extern const u8 gUnknown_083970E8[]; + +extern struct INCBIN_U8 gBattleAnimFogTilemap; +extern struct INCBIN_U8 gWeatherFog1Tiles; + +static void sub_80D7704(struct Sprite *sprite); +static void AnimIcePunchSwirlingParticle(struct Sprite *sprite); +static void AnimIceBeamParticle(struct Sprite *sprite); +static void AnimIceEffectParticle(struct Sprite *sprite); +static void AnimFlickerIceEffectParticle(struct Sprite *sprite); +static void AnimMoveParticleBeyondTarget(struct Sprite *sprite); +static void AnimWaveFromCenterOfTarget(struct Sprite *sprite); +static void InitSwirlingFogAnim(struct Sprite *sprite); +static void AnimThrowMistBall(struct Sprite *sprite); +static void InitPoisonGasCloudAnim(struct Sprite *sprite); +static void AnimHailBegin(struct Sprite *sprite); void sub_807A9BC(struct Sprite *sprite); -void unc_080B06FC(struct Sprite *sprite); -void sub_80D8F10(struct Sprite *sprite); +static void InitIceBallAnim(struct Sprite *sprite); +static void InitIceBallParticle(struct Sprite *sprite); +static void AnimSwirlingSnowball_Step1(struct Sprite *sprite); +static void AnimSwirlingSnowball_Step2(struct Sprite *sprite); +static void AnimSwirlingSnowball_Step3(struct Sprite *sprite); +static void AnimSwirlingSnowball_End(struct Sprite *sprite); +static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite); +static void AnimSwirlingFogAnim(struct Sprite *sprite); +static void sub_80D8874(struct Sprite *sprite); +static void AnimHailContinue(struct Sprite *sprite); +static void AnimThrowIceBall(struct Sprite *sprite); +static void AnimIceBallParticle(struct Sprite *sprite); + +static void AnimTask_Haze2(u8 taskId); +static void AnimTask_OverlayFogTiles(u8 taskId); +static void AnimTask_Hail2(u8 taskId); +bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4); const union AnimCmd gSpriteAnim_83D9B58[] = { @@ -33,6 +67,7 @@ const union AnimCmd *const gSpriteAnimTable_83D9B64[] = gSpriteAnim_83D9B58, }; +// unknown sprite template const struct SpriteTemplate gSpriteTemplate_83D9B68 = { .tileTag = 10141, @@ -122,7 +157,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9BDC[] = gSpriteAffineAnim_83D9BCC, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BE0 = +const struct SpriteTemplate gLargeIcePunchCrystalSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -130,10 +165,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BE0 = .anims = gSpriteAnimTable_83D9BB8, .images = NULL, .affineAnims = gSpriteAffineAnimTable_83D9BDC, - .callback = sub_80D78EC, + .callback = AnimIcePunchSwirlingParticle, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BF8 = +const struct SpriteTemplate gSmallIcePunchCrystalSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -141,7 +176,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9BF8 = .anims = gSpriteAnimTable_83D9BBC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D78EC, + .callback = AnimIcePunchSwirlingParticle, }; const union AffineAnimCmd gSpriteAffineAnim_83D9C10[] = @@ -155,7 +190,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9C20[] = gSpriteAffineAnim_83D9C10, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C24 = +const struct SpriteTemplate IceBeamCenterParticleSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -163,10 +198,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C24 = .anims = gSpriteAnimTable_83D9BB8, .images = NULL, .affineAnims = gSpriteAffineAnimTable_83D9C20, - .callback = sub_80D792C, + .callback = AnimIceBeamParticle, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C3C = +const struct SpriteTemplate gIceBeamOuterParticleSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -174,7 +209,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C3C = .anims = gSpriteAnimTable_83D9BBC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D792C, + .callback = AnimIceBeamParticle, }; const union AffineAnimCmd gSpriteAffineAnim_83D9C54[] = @@ -190,7 +225,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9C74[] = gSpriteAffineAnim_83D9C54, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C78 = +const struct SpriteTemplate gLargeIceEffectParticleSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -198,10 +233,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C78 = .anims = gSpriteAnimTable_83D9BB8, .images = NULL, .affineAnims = gSpriteAffineAnimTable_83D9C74, - .callback = sub_80D79B4, + .callback = AnimIceEffectParticle, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C90 = +const struct SpriteTemplate gSmallIceEffectParticleSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -209,10 +244,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9C90 = .anims = gSpriteAnimTable_83D9BBC, .images = NULL, .affineAnims = gSpriteAffineAnimTable_83D9C74, - .callback = sub_80D79B4, + .callback = AnimIceEffectParticle, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CA8 = +const struct SpriteTemplate gSmallSnowballSpriteTemplate1 = { .tileTag = 10141, .paletteTag = 10141, @@ -220,10 +255,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CA8 = .anims = gSpriteAnimTable_83D9BC0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D7A64, + .callback = AnimSwirlingSnowball_Step1, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CC0 = +const struct SpriteTemplate gLargeSnowballSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -231,10 +266,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CC0 = .anims = gSpriteAnimTable_83D9BC4, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D7CD4, + .callback = AnimMoveParticleBeyondTarget, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CD8 = +const struct SpriteTemplate gSmallSnowballSpriteTemplate2 = { .tileTag = 10141, .paletteTag = 10141, @@ -242,7 +277,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9CD8 = .anims = gSpriteAnimTable_83D9BC0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D7CD4, + .callback = AnimMoveParticleBeyondTarget, }; const union AnimCmd gSpriteAnim_83D9CF0[] = @@ -262,7 +297,7 @@ const union AnimCmd *const gSpriteAnimTable_83D9D10[] = gSpriteAnim_83D9CF0, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D14 = +const struct SpriteTemplate gIceSpikeSpriteTemplate = { .tileTag = 10142, .paletteTag = 10142, @@ -270,7 +305,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D14 = .anims = gSpriteAnimTable_83D9D10, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D7E88, + .callback = AnimWaveFromCenterOfTarget, }; const union AnimCmd gSpriteAnim_83D9D2C[] = @@ -285,7 +320,7 @@ const union AnimCmd *const gSpriteAnimTable_83D9D38[] = gSpriteAnim_83D9D2C, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D3C = +const struct SpriteTemplate gMistCloudSpriteTemplate = { .tileTag = 10144, .paletteTag = 10144, @@ -293,10 +328,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D3C = .anims = gSpriteAnimTable_83D9D38, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D7F10, + .callback = InitSwirlingFogAnim, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D54 = +const struct SpriteTemplate gSmogCloudSpriteTemplate = { .tileTag = 10172, .paletteTag = 10172, @@ -304,7 +339,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D54 = .anims = gSpriteAnimTable_83D9D38, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D7F10, + .callback = InitSwirlingFogAnim, }; const u8 gUnknown_083D9D6C[] = @@ -312,7 +347,7 @@ const u8 gUnknown_083D9D6C[] = 0, 1, 2, 2, 2, 2, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 8, 9, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D80 = +const struct SpriteTemplate gMistBallSpriteTemplate = { .tileTag = 10155, .paletteTag = 10155, @@ -320,7 +355,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9D80 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D83E0, + .callback = AnimThrowMistBall, }; const u8 gUnknown_083D9D98[] = @@ -328,7 +363,7 @@ const u8 gUnknown_083D9D98[] = 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9DAC = +const struct SpriteTemplate gPoisonGasCloudSpriteTemplate = { .tileTag = 10172, .paletteTag = 10172, @@ -336,22 +371,21 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9DAC = .anims = gSpriteAnimTable_83D9D38, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D8700, + .callback = InitPoisonGasCloudAnim, }; -// bitfield array -const u32 gUnknown_083D9DC4[] = +const u8 gUnknown_083D9DC4[][4] = { - 0x2001E064, - 0x0001E055, - 0x1011E0F2, - 0x1021E042, - 0x0031E0B6, - 0x2001E03C, - 0x0011E0D6, - 0x1001E071, - 0x1031E0D2, - 0x0021E026, + {0x64, 0xE0, 0x01, 0x20}, + {0x55, 0xE0, 0x01, 0x00}, + {0xF2, 0xE0, 0x11, 0x10}, + {0x42, 0xE0, 0x21, 0x10}, + {0xB6, 0xE0, 0x31, 0x00}, + {0x3C, 0xE0, 0x01, 0x20}, + {0xD6, 0xE0, 0x11, 0x00}, + {0x71, 0xE0, 0x01, 0x10}, + {0xD2, 0xE0, 0x31, 0x10}, + {0x26, 0xE0, 0x21, 0x00}, }; const union AffineAnimCmd gSpriteAffineAnim_83D9DEC[] = @@ -390,7 +424,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9E38[] = gSpriteAffineAnim_83D9E1C, }; -const struct SpriteTemplate gSpriteTemplate_83D9E3C = +const struct SpriteTemplate gHailSpriteTemplate = { .tileTag = 10263, .paletteTag = 10263, @@ -398,10 +432,10 @@ const struct SpriteTemplate gSpriteTemplate_83D9E3C = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gSpriteAffineAnimTable_83D9E2C, - .callback = sub_80D8D1C, + .callback = AnimHailBegin, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9E54 = +const struct SpriteTemplate gWeatherBallHailSpriteTemplate = { .tileTag = 10263, .paletteTag = 10263, @@ -472,7 +506,7 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83D9EE0[] = gSpriteAffineAnim_83D9ED0, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9EF4 = +const struct SpriteTemplate gIceBallSpriteTemplate = { .tileTag = 10043, .paletteTag = 10043, @@ -480,10 +514,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9EF4 = .anims = gSpriteAnimTable_83D9E88, .images = NULL, .affineAnims = gSpriteAffineAnimTable_83D9EE0, - .callback = unc_080B06FC, + .callback = InitIceBallAnim, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F0C = +const struct SpriteTemplate gIceBallParticleSpriteTemplate = { .tileTag = 10141, .paletteTag = 10141, @@ -491,5 +525,1798 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F0C = .anims = gSpriteAnimTable_83D9BBC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D8F10, + .callback = InitIceBallParticle, }; + +// unknown - potentially used in weather ball +// TODO: decompile function and name it +/* +// NOT EQUIVALENT +static void sub_80D7704(struct Sprite *sprite) +{ + // + //u16 battler1, battler2, battler3, battler4; // + u16 r9, r8, r3, r6; + //s16 r4, r10; + + sprite->oam.tileNum += 7; + + //u8 battler1, battler2, battler3, battler4; + + //battler1 = GetBattlerSpriteCoord(gAnimBankTarget, 2); + //battler2 = GetBattlerSpriteCoord(gAnimBankTarget, 3); + //battler3 = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + //battler4 = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + + //sprite->oam.tileNum += 7; + + //sprite->data[0] = gBattleAnimArgs[4]; + + //sprite->data[1] = battler3 + gBattleAnimArgs[0]; //??? + //sprite->data[2] = battler1 + gBattleAnimArgs[2]; + //sprite->data[3] = battler4 + gBattleAnimArgs[1]; + //sprite->data[4] = battler2 + gBattleAnimArgs[3]; + + r9 = GetBattlerSpriteCoord(gAnimBankTarget, 2); + r8 = GetBattlerSpriteCoord(gAnimBankTarget, 3); + r3 = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + r6 = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + + sprite->data[0] = gBattleAnimArgs[4]; + + sprite->data[1] = r3 + gBattleAnimArgs[0]; //??? + sprite->data[2] = r9 + gBattleAnimArgs[2]; + sprite->data[3] = r6 + gBattleAnimArgs[1]; + sprite->data[4] = r8 + gBattleAnimArgs[3]; + + //sprite->data[0] = gBattleAnimArgs; + + + sub_8078314(sprite); + + if ((u32)(r9 + 32) <= 304 || (u32)(r8 + 32) <= 224) // cmp 1 + { + r4 = sprite->data[1]; + r10 = 304; + + // _080D77AA + for (int i = 0; i < 3; i++) + { + // + if (((u32)((s16)r9 + r4) + (0x80 << 14)) >> 16 > 304 + || ((u32)((s16)r8 + r4) + (0x80 << 14)) >> 16 > 0xE0) + { + break; + } + } + } + // _080D77DE +} +*/ + +NAKED static void sub_80D7704(struct Sprite *sprite) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x4\n" + "\tadds r5, r0, 0\n" + "\tldrh r2, [r5, 0x4]\n" + "\tlsls r1, r2, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x7\n" + "\tldr r3, _080D780C @ =0x000003ff\n" + "\tadds r0, r3, 0\n" + "\tands r1, r0\n" + "\tldr r0, _080D7810 @ =0xfffffc00\n" + "\tands r0, r2\n" + "\torrs r0, r1\n" + "\tstrh r0, [r5, 0x4]\n" + "\tldr r4, _080D7814 @ =gAnimBankTarget\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0x2\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r9, r0\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0x3\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r8, r0\n" + "\tldr r4, _080D7818 @ =gAnimBankAttacker\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0x2\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r3, r0, 24\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0x3\n" + "\tstr r3, [sp]\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tldr r1, _080D781C @ =gBattleAnimArgs\n" + "\tldrh r0, [r1, 0x8]\n" + "\tstrh r0, [r5, 0x2E]\n" + "\tldrh r0, [r1]\n" + "\tldr r3, [sp]\n" + "\tadds r0, r3\n" + "\tstrh r0, [r5, 0x30]\n" + "\t ldrh r0, [r1, 0x4]\n" + "\t mov r4, r9\n" + "\t adds r0, r4, r0\n" + "\tstrh r0, [r5, 0x32]\n" + "\tldrh r0, [r1, 0x2]\n" + "\tadds r0, r6\n" + "\tstrh r0, [r5, 0x34]\n" + "\tldrh r0, [r1, 0x6]\n" + "\tmov r7, r8\n" + "\tadds r0, r7, r0\n" + "\tstrh r0, [r5, 0x36]\n" + "\tadds r0, r5, 0\n" + "\tbl sub_8078314\n" + "\tadds r4, 0x20\n" + "\tmovs r0, 0x98\n" + "\tlsls r0, 1\n" + "\tmov r12, r0\n" + "\tldr r3, [sp]\n" + "\tcmp r4, r12\n" + "\tbhi _080D77DE\n" + "\tadds r0, r7, 0\n" + "\tadds r0, 0x20\n" + "\tldrh r1, [r5, 0x30]\n" + "\tldrh r2, [r5, 0x32]\n" + "\tcmp r0, 0xE0\n" + "\tbhi _080D77DE\n" + "\tadds r4, r1, 0\n" + "\tmov r10, r12\n" + "_080D77AA:\n" + "\tmov r7, r9\n" + "\tlsls r1, r7, 16\n" + "\tasrs r1, 16\n" + "\tadds r1, r4\n" + "\tlsls r1, 16\n" + "\tmov r7, r8\n" + "\tlsls r0, r7, 16\n" + "\tasrs r0, 16\n" + "\tadds r0, r2\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmov r8, r0\n" + "\tlsrs r0, r1, 16\n" + "\tmov r9, r0\n" + "\tmovs r7, 0x80\n" + "\tlsls r7, 14\n" + "\tadds r1, r7\n" + "\tlsrs r1, 16\n" + "\tcmp r1, r10\n" + "\tbhi _080D77DE\n" + "\tmov r1, r8\n" + "\tlsls r0, r1, 16\n" + "\tadds r0, r7\n" + "\tlsrs r0, 16\n" + "\tcmp r0, 0xE0\n" + "\tbls _080D77AA\n" + "_080D77DE:\n" + "\tldrh r0, [r5, 0x30]\n" + "\tnegs r7, r0\n" + "\tstrh r7, [r5, 0x30]\n" + "\tldrh r0, [r5, 0x32]\n" + "\tnegs r4, r0\n" + "\tstrh r4, [r5, 0x32]\n" + "\tlsls r0, r3, 16\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 14\n" + "\tadds r0, r1\n" + "\tlsrs r0, 16\n" + "\tmovs r2, 0x98\n" + "\tlsls r2, 1\n" + "\tmov r12, r2\n" + "\tldr r1, _080D781C @ =gBattleAnimArgs\n" + "\tmov r10, r1\n" + "\tcmp r0, r12\n" + "\tbhi _080D784A\n" + "\tlsls r1, r6, 16\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 14\n" + "\tadds r0, r1, r2\n" + "\tb _080D7842\n" + "\t.align 2, 0\n" + "_080D780C: .4byte 0x000003ff\n" + "_080D7810: .4byte 0xfffffc00\n" + "_080D7814: .4byte gAnimBankTarget\n" + "_080D7818: .4byte gAnimBankAttacker\n" + "_080D781C: .4byte gBattleAnimArgs\n" + "_080D7820:\n" + "\tlsls r1, r3, 16\n" + "\tasrs r1, 16\n" + "\tadds r1, r7\n" + "\tlsls r1, 16\n" + "\tasrs r0, r2, 16\n" + "\tadds r0, r4\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "\tlsrs r3, r1, 16\n" + "\tmovs r0, 0x80\n" + "\tlsls r0, 14\n" + "\tadds r1, r0\n" + "\tlsrs r1, 16\n" + "\tcmp r1, r12\n" + "\tbhi _080D784A\n" + "\tlsls r1, r6, 16\n" + "\tadds r0, r1, r0\n" + "_080D7842:\n" + "\tlsrs r0, 16\n" + "\tadds r2, r1, 0\n" + "\tcmp r0, 0xE0\n" + "\tbls _080D7820\n" + "_080D784A:\n" + "\tstrh r3, [r5, 0x20]\n" + "\tstrh r6, [r5, 0x22]\n" + "\tmov r1, r10\n" + "\tldrh r0, [r1, 0x8]\n" + "\tstrh r0, [r5, 0x2E]\n" + "\tstrh r3, [r5, 0x30]\n" + "\tmov r2, r9\n" + "\tstrh r2, [r5, 0x32]\n" + "\tstrh r6, [r5, 0x34]\n" + "\tmov r3, r8\n" + "\tstrh r3, [r5, 0x36]\n" + "\tadds r0, r5, 0\n" + "\tbl sub_8078314\n" + "\tmov r7, r10\n" + "\tldrh r0, [r7, 0xA]\n" + "\tstrh r0, [r5, 0x34]\n" + "\tldrh r0, [r7, 0xC]\n" + "\tstrh r0, [r5, 0x36]\n" + "\tldr r0, _080D7884 @ =sub_80D7888\n" + "\tstr r0, [r5, 0x1C]\n" + "\tadd sp, 0x4\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080D7884: .4byte sub_80D7888"); +} + +void sub_80D7888(struct Sprite *sprite) +{ + if (sprite->data[0] != 0) + { + sprite->data[5] += sprite->data[1]; + sprite->data[6] += sprite->data[2]; + sprite->pos2.x = sprite->data[5]; + sprite->pos2.y = sprite->data[6]; + sprite->pos2.x += Sin(sprite->data[7], sprite->data[3]); + sprite->pos2.y += Sin(sprite->data[7], sprite->data[3]); + sprite->data[7] = (sprite->data[7] + sprite->data[4]) & 0xFF; + sprite->data[0] -= 1; + } + else + { + DestroyAnimSprite(sprite); + } +} + +// Animates the swirling ice crystals in Ice Punch. +// arg 0: initial position angle around circle (0-256) +static void AnimIcePunchSwirlingParticle(struct Sprite *sprite) +{ + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = 60; + sprite->data[2] = 9; + sprite->data[3] = 30; + sprite->data[4] = 65024; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + sprite->callback = sub_8078174; + sub_8078174(sprite); +} + +// Animates the ice particles in Ice Beam. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: duration +static void AnimIceBeamParticle(struct Sprite *sprite) +{ + InitAnimSpritePos(sprite, 1); + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2); + + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + sprite->data[2] -= gBattleAnimArgs[2]; + else + sprite->data[2] += gBattleAnimArgs[2]; + + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + sprite->data[0] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + sprite->callback = StartAnimLinearTranslation; +} + +// Animates the ice crystals at the end of Ice Punch, Ice Beam, Tri Attack, +// Weather Ball (Hail), Blizzard, and Powder Snow. +// arg 0: target x offset +// arg 1: target y offset +// arg 2: ??? unknown boolean +static void AnimIceEffectParticle(struct Sprite *sprite) +{ + if (gBattleAnimArgs[2] == 0) + { + sub_8078764(sprite, TRUE); + } + else + { + SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y); + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + + StoreSpriteCallbackInData(sprite, AnimFlickerIceEffectParticle); + sprite->callback = sub_80785E4; +} + +static void AnimFlickerIceEffectParticle(struct Sprite *sprite) +{ + sprite->invisible ^= 1; + sprite->data[0] += 1; + if (sprite->data[0] == 20) + move_anim_8074EE0(sprite); +} + +// Animates the small snowballs that swirl around the target in Blizzard and Icy Wind. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: particle speed +// arg 5: multiple targets? (boolean) +static void AnimSwirlingSnowball_Step1(struct Sprite *sprite) +{ + int i; + s16 tempDataHolder[8]; + + InitAnimSpritePos(sprite, 1); + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + + if (!gBattleAnimArgs[5]) + { + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2); + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + } + else + { + SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); + } + + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + sprite->data[2] -= gBattleAnimArgs[2]; + else + sprite->data[2] += gBattleAnimArgs[2]; + + for (i = 0; i < 8; i++) + tempDataHolder[i] = sprite->data[i]; + + sub_8078D60(sprite); + sprite->data[1] ^= 1; + sprite->data[2] ^= 1; + + while (1) + { + sprite->data[0] = 1; + sub_8078CE8(sprite); + + if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272 + || sprite->pos1.y + sprite->pos2.y > 160 + || sprite->pos1.y + sprite->pos2.y < -16) + break; + } + + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + + for (i = 0; i < 8; i++) + sprite->data[i] = tempDataHolder[i]; + + sprite->callback = sub_8078D8C; + StoreSpriteCallbackInData(sprite, AnimSwirlingSnowball_Step2); +} + +static void AnimSwirlingSnowball_Step2(struct Sprite *sprite) +{ + s16 tempVar; + + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 128; + + tempVar = GetBattlerSide(gAnimBankAttacker) != 0 ? 20 : 65516; + + sprite->data[3] = Sin(sprite->data[0], tempVar); + sprite->data[4] = Cos(sprite->data[0], 0xF); + sprite->data[5] = 0; + sprite->callback = AnimSwirlingSnowball_Step3; + AnimSwirlingSnowball_Step3(sprite); +} + +static void AnimSwirlingSnowball_Step3(struct Sprite *sprite) +{ + s16 tempVar; + tempVar = GetBattlerSide(gAnimBankAttacker) != 0 ? 20 : 65516; + + if (sprite->data[5] <= 31) + { + sprite->pos2.x = Sin(sprite->data[0], tempVar) - sprite->data[3]; + sprite->pos2.y = Cos(sprite->data[0], 15) - sprite->data[4]; + sprite->data[0] = (sprite->data[0] + 16) & 0xFF; + sprite->data[5] += 1; + } + else + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[4] = 0; + sprite->data[3] = 0; + sprite->callback = AnimSwirlingSnowball_End; + } +} + +static void AnimSwirlingSnowball_End(struct Sprite *sprite) +{ + sprite->data[0] = 1; + sub_8078CE8(sprite); + + if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272 + || sprite->pos1.y + sprite->pos2.y > 256 + || sprite->pos1.y + sprite->pos2.y < -16) + DestroyAnimSprite(sprite); +} + +// Moves particles towards the target mon and off the screen. Used to animate +// the large snowballs in Blizzard and the small snowballs in Powder Snow. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: speed +// arg 5: wave amplitude +// arg 6: wave frequency +// arg 7: multiple targets? (boolean) +static void AnimMoveParticleBeyondTarget(struct Sprite *sprite) +{ + int i; + s16 tempDataHolder[8]; + + InitAnimSpritePos(sprite, 1); + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + + if (!gBattleAnimArgs[7]) + { + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2); + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3); + } + else + { + SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); + } + + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + sprite->data[2] -= gBattleAnimArgs[2]; + else + sprite->data[2] += gBattleAnimArgs[2]; + + sprite->data[4] += gBattleAnimArgs[3]; + sub_8078D60(sprite); + for (i = 0; i < 8; i++) + tempDataHolder[i] = sprite->data[i]; + + sprite->data[1] ^= 1; + sprite->data[2] ^= 1; + + while (1) + { + sprite->data[0] = 1; + sub_8078CE8(sprite); + if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272 + || sprite->pos1.y + sprite->pos2.y > 160 + || sprite->pos1.y + sprite->pos2.y < -16) + break; + } + + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + + for (i = 0; i < 8; i++) + sprite->data[i] = tempDataHolder[i]; + + sprite->data[5] = gBattleAnimArgs[5]; + sprite->data[6] = gBattleAnimArgs[6]; + sprite->callback = AnimWiggleParticleTowardsTarget; +} + +// Moves particles in a sine wave towards the target. +static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite) +{ + sub_8078CE8(sprite); + if (sprite->data[0] == 0) + sprite->data[0] = 1; + + sprite->pos2.y += Sin(sprite->data[7], sprite->data[5]); + sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF; + if (sprite->data[0] == 1) + { + if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272 + || sprite->pos1.y + sprite->pos2.y > 160 + || sprite->pos1.y + sprite->pos2.y < -16) + DestroyAnimSprite(sprite); + } +} + +// Animates the ice pilar wave used by Icy Wind. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: ??? unknown boolean +static void AnimWaveFromCenterOfTarget(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + if (gBattleAnimArgs[2] == 0) + { + sub_8078764(sprite, FALSE); + } + else + { + SetAverageBattlerPositions(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y); + + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + + sprite->data[0]++; + } + else + { + if (sprite->animEnded) + DestroyAnimSprite(sprite); + } +} + +// Animates the fog that swirls around the mon in Mist and Smog. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: change in y pixels per rotation +// arg 3: duration +// arg 4: animate on opponent? (boolean) +// arg 5: ??? unknown boolean +static void InitSwirlingFogAnim(struct Sprite *sprite) +{ + s16 tempVar; + u8 battler; + + if (gBattleAnimArgs[4] == 0) + { + if (gBattleAnimArgs[5] == 0) + { + InitAnimSpritePos(sprite, 0); + } + else + { + SetAverageBattlerPositions(gAnimBankAttacker, 0, &sprite->pos1.x, &sprite->pos1.y); + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + + sprite->pos1.y += gBattleAnimArgs[1]; + } + + battler = gAnimBankAttacker; + } + else + { + if (gBattleAnimArgs[5] == 0) + { + sub_8078764(sprite, FALSE); + } + else + { + SetAverageBattlerPositions(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y); + if (GetBattlerSide(gAnimBankTarget) != B_SIDE_PLAYER) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + + sprite->pos1.y += gBattleAnimArgs[1]; + } + + battler = gAnimBankTarget; + } + + sprite->data[7] = battler; + if (gBattleAnimArgs[5] == 0 || !IsDoubleBattle()) + tempVar = 0x20; + else + tempVar = 0x40; + + sprite->data[6] = tempVar; + if (GetBattlerSide(gAnimBankTarget) == B_SIDE_PLAYER) + sprite->pos1.y += 8; + + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[2]; + + InitAnimLinearTranslation(sprite); + + sprite->data[5] = 64; + sprite->callback = AnimSwirlingFogAnim; + AnimSwirlingFogAnim(sprite); +} + +// Animates swirling fog initialized by InitSwirlingFogAnim. +static void AnimSwirlingFogAnim(struct Sprite *sprite) +{ + if (!TranslateAnimLinear(sprite)) + { + sprite->pos2.x += Sin(sprite->data[5], sprite->data[6]); + sprite->pos2.y += Cos(sprite->data[5], -6); + + if ((u16)(sprite->data[5] - 64) <= 0x7F) + sprite->oam.priority = sub_8079ED4(sprite->data[7]); + else + sprite->oam.priority = sub_8079ED4(sprite->data[7]) + 1; + + sprite->data[5] = (sprite->data[5] + 3) & 0xFF; + } + else + { + DestroyAnimSprite(sprite); + } +} + +// Fades mons to black and places foggy overlay in Haze. +void AnimTask_Haze1(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + REG_BLDCNT = 0x3F42; + REG_BLDALPHA = 0x1000; + REG_BG1CNT_BITFIELD.priority = 1; + REG_BG1CNT_BITFIELD.screenSize = 0; + + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + + sub_8078914(&subStruct); + DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000); + DmaCopy16Defvars(3, &gWeatherFog1Tiles, subStruct.field_0, 0x800); + LZDecompressVram(&gBattleAnimFogTilemap, subStruct.field_4); + LoadPalette(&gUnknown_083970E8, subStruct.field_8 * 16, 32); + + if (IsContest()) + sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + + gTasks[taskId].func = AnimTask_Haze2; +} + +static void AnimTask_Haze2(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + gBattle_BG1_X += 0xFFFF; + gBattle_BG1_Y += 0; + + switch (gTasks[taskId].data[12]) + { + case 0: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[9]++; + gTasks[taskId].data[11] = gUnknown_083D9D6C[gTasks[taskId].data[9]]; + + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 9) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 1: + if (++gTasks[taskId].data[11] == 0x51) + { + gTasks[taskId].data[11] = 9; + gTasks[taskId].data[12]++; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]--; + + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_8078914(&subStruct); + DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000); + DmaClear32(3, subStruct.field_4, 0x800); + + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + + gTasks[taskId].data[12]++; + // fall through + case 4: + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BG1CNT_BITFIELD.priority = 1; + DestroyAnimVisualTask(taskId); + } +} + +// Throws the ball in Mist Ball. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: targey x offset +// arg 3: target y offset +// arg 4: duration +// arg 5: ??? unknown (seems to vibrate target mon somehow) +static void AnimThrowMistBall(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + sprite->callback = TranslateAnimSpriteToTargetMonLocation; +} + +// Displays misty background in Mist Ball. +void AnimTask_LoadMistTiles(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + REG_BLDCNT = 0x3F42; + REG_BLDALPHA = 0x1000; + REG_BG1CNT_BITFIELD.priority = 1; + REG_BG1CNT_BITFIELD.screenSize = 0; + + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + + sub_8078914(&subStruct); + DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000); + DmaCopy16Defvars(3, &gWeatherFog1Tiles, subStruct.field_0, 0x800); + LZDecompressVram(&gBattleAnimFogTilemap, subStruct.field_4); + LoadPalette(&gUnknown_083970E8, subStruct.field_8 * 16, 32); + + if (IsContest()) + sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + + gTasks[taskId].data[15] = -1; + gTasks[taskId].func = AnimTask_OverlayFogTiles; +} + +static void AnimTask_OverlayFogTiles(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + gBattle_BG1_X += gTasks[taskId].data[15]; + gBattle_BG1_Y += 0; + + switch (gTasks[taskId].data[12]) + { + case 0: + gTasks[taskId].data[9] += 1; + gTasks[taskId].data[11] = gUnknown_083D9D98[gTasks[taskId].data[9]]; + REG_BLDALPHA = gTasks[taskId].data[11] | ((17 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 5) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + break; + case 1: + if (++gTasks[taskId].data[11] == 0x51) + { + gTasks[taskId].data[11] = 5; + gTasks[taskId].data[12]++; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11] -= 1; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_8078914(&subStruct); + DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000); + DmaClear32(3, subStruct.field_4, 0x800); + + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + + gTasks[taskId].data[12]++; + // fall through + case 4: + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BG1CNT_BITFIELD.priority = 1; + DestroyAnimVisualTask(taskId); + } +} + +// Initializes gas clouds in the Poison Gas animation. +// arg 0: duration +// arg 1: ? target x offset +// arg 2: ? target y offset +// arg 3: ? swirl start x +// arg 4: ? swirl start y +// arg 5: ??? unknown +// arg 6: ??? unknown +// arg 7: ??? unknown boolean +static void InitPoisonGasCloudAnim(struct Sprite *sprite) +{ + sprite->data[0] = gBattleAnimArgs[0]; + + if (GetBattlerSpriteCoord(gAnimBankAttacker, 2) < GetBattlerSpriteCoord(gAnimBankTarget, 2)) + sprite->data[7] = 0x8000; + + if (!(gBanksBySide[gAnimBankTarget] & 1)) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + + if ((sprite->data[7] & 0x8000) && !(gBanksBySide[gAnimBankAttacker] & 1)) + sprite->subpriority = gSprites[GetAnimBattlerSpriteId(1)].subpriority + 1; + + sprite->data[6] = 1; + } + + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + if (gBattleAnimArgs[7]) + { + sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1]; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[3]; + sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[4]; + sprite->data[7] |= sub_8079ED4(gAnimBankTarget) << 8; + } + else + { + sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1]; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 0) + gBattleAnimArgs[3]; + sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 1) + gBattleAnimArgs[4]; + sprite->data[7] |= sub_8079ED4(gAnimBankTarget) << 8; + } + + if (IsContest()) + { + sprite->data[6] = 1; + sprite->subpriority = 0x80; + } + + InitAnimLinearTranslation(sprite); + sprite->callback = sub_80D8874; +} + +// Animates the gas clouds towards the target mon in Poison Gas. +// functionally correct, but there appears to be an unused local variable causing +// switch case 1 to not match +#ifdef NONMATCHING +static void sub_80D8874(struct Sprite *sprite) +{ + int value; + register s16 value2 asm("r5"); + + switch (sprite->data[7] & 0xFF) + { + case 0: + TranslateAnimLinear(sprite); + value = gSineTable[sprite->data[5]]; + sprite->pos2.x += value >> 4; + if (sprite->data[6]) + sprite->data[5] = (sprite->data[5] - 8) & 0xFF; + else + sprite->data[5] = (sprite->data[5] + 8) & 0xFF; + + if (sprite->data[0] <= 0) + { + value2 = 80; + sprite->data[0] = value2; + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 0); + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x; + sprite->pos1.y += sprite->pos2.y; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->pos1.y + 29; + sprite->data[7]++; + if (gMain.inBattle && gBanksBySide[gAnimBankTarget] & 1) + sprite->data[5] = 204; + else + sprite->data[5] = value2; + + sprite->pos2.y = 0; + value = gSineTable[sprite->data[5]]; + sprite->pos2.x = value >> 3; + sprite->data[5] = (sprite->data[5] + 2) & 0xFF; + InitAnimLinearTranslation(sprite); + } + break; + case 1: + TranslateAnimLinear(sprite); + value = gSineTable[sprite->data[5]]; + sprite->pos2.x += value >> 3; + sprite->pos2.y += (gSineTable[sprite->data[5] + 0x40] * -3) >> 8; + if (gMain.inBattle) + { + u16 var0 = sprite->data[5] - 0x40; + if (var0 <= 0x7F) + sprite->oam.priority = sprite->data[7] >> 8; + else + sprite->oam.priority = (sprite->data[7] >> 8) + 1; + + sprite->data[5] = (sprite->data[5] + 4) & 0xFF; + } + else + { + u16 var0 = sprite->data[5] - 0x40; + if (var0 <= 0x7F) + sprite->subpriority = 128; + else + sprite->subpriority = 140; + + sprite->data[5] = (sprite->data[5] - 4) & 0xFF; + } + + if (sprite->data[0] <= 0) + { + asm("mov r2, #0"); // unused local variable? + sprite->data[0] = 0x300; + sprite->data[1] = sprite->pos1.x += sprite->pos2.x; + sprite->data[3] = sprite->pos1.y += sprite->pos2.y; + sprite->data[4] = sprite->pos1.y + 4; + if (gMain.inBattle && gBanksBySide[gAnimBankTarget] & 1) + sprite->data[2] = 0x100; + else + sprite->data[2] = -0x10; + + sprite->data[7]++; + sprite->pos2.x = sprite->pos2.y = 0; + sub_8078BD4(sprite); + } + break; + case 2: + if (TranslateAnimLinear(sprite)) + { + if (sprite->oam.affineMode & 1) + { + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + } + + DestroySprite(sprite); + gAnimVisualTaskCount--; + } + break; + } +} +#else +NAKED static void sub_80D8874(struct Sprite *sprite) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tadds r4, r0, 0\n" + "\tldrh r0, [r4, 0x3C]\n" + "\tmovs r5, 0xFF\n" + "\tmovs r1, 0xFF\n" + "\tands r1, r0\n" + "\tcmp r1, 0x1\n" + "\tbeq _080D8968\n" + "\tcmp r1, 0x1\n" + "\tbgt _080D888E\n" + "\tcmp r1, 0\n" + "\tbeq _080D8896\n" + "\tb _080D8AD0\n" + "_080D888E:\n" + "\tcmp r1, 0x2\n" + "\tbne _080D8894\n" + "\tb _080D8A94\n" + "_080D8894:\n" + "\tb _080D8AD0\n" + "_080D8896:\n" + "\tadds r0, r4, 0\n" + "\tbl TranslateAnimLinear\n" + "\tldr r1, _080D88C0 @ =gSineTable\n" + "\tmovs r2, 0x38\n" + "\tldrsh r0, [r4, r2]\n" + "\tlsls r0, 1\n" + "\tadds r0, r1\n" + "\tmovs r1, 0\n" + "\tldrsh r0, [r0, r1]\n" + "\tasrs r0, 4\n" + "\tldrh r2, [r4, 0x24]\n" + "\tadds r0, r2\n" + "\tstrh r0, [r4, 0x24]\n" + "\tmovs r1, 0x3A\n" + "\tldrsh r0, [r4, r1]\n" + "\tcmp r0, 0\n" + "\tbeq _080D88C4\n" + "\tldrh r0, [r4, 0x38]\n" + "\tsubs r0, 0x8\n" + "\tb _080D88C8\n" + "\t.align 2, 0\n" + "_080D88C0: .4byte gSineTable\n" + "_080D88C4:\n" + "\tldrh r0, [r4, 0x38]\n" + "\tadds r0, 0x8\n" + "_080D88C8:\n" + "\tands r0, r5\n" + "\tstrh r0, [r4, 0x38]\n" + "\tmovs r2, 0x2E\n" + "\tldrsh r0, [r4, r2]\n" + "\tcmp r0, 0\n" + "\tble _080D88D6\n" + "\tb _080D8AD0\n" + "_080D88D6:\n" + "\tmovs r5, 0x50\n" + "\tstrh r5, [r4, 0x2E]\n" + "\tldr r6, _080D8928 @ =gAnimBankTarget\n" + "\tldrb r0, [r6]\n" + "\tmovs r1, 0\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstrh r0, [r4, 0x20]\n" + "\tstrh r0, [r4, 0x30]\n" + "\tstrh r0, [r4, 0x32]\n" + "\tldrh r0, [r4, 0x26]\n" + "\tldrh r1, [r4, 0x22]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r4, 0x22]\n" + "\tstrh r0, [r4, 0x34]\n" + "\tadds r0, 0x1D\n" + "\tstrh r0, [r4, 0x36]\n" + "\tldrh r0, [r4, 0x3C]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r4, 0x3C]\n" + "\tldr r0, _080D892C @ =gMain\n" + "\tldr r2, _080D8930 @ =0x0000043d\n" + "\tadds r0, r2\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x2\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8938\n" + "\tldr r1, _080D8934 @ =gBanksBySide\n" + "\tldrb r0, [r6]\n" + "\tadds r0, r1\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8938\n" + "\tmovs r0, 0xCC\n" + "\tstrh r0, [r4, 0x38]\n" + "\tb _080D893A\n" + "\t.align 2, 0\n" + "_080D8928: .4byte gAnimBankTarget\n" + "_080D892C: .4byte gMain\n" + "_080D8930: .4byte 0x0000043d\n" + "_080D8934: .4byte gBanksBySide\n" + "_080D8938:\n" + "\tstrh r5, [r4, 0x38]\n" + "_080D893A:\n" + "\tmovs r0, 0\n" + "\tstrh r0, [r4, 0x26]\n" + "\tldr r1, _080D8964 @ =gSineTable\n" + "\tmovs r2, 0x38\n" + "\tldrsh r0, [r4, r2]\n" + "\tlsls r0, 1\n" + "\tadds r0, r1\n" + "\tmovs r1, 0\n" + "\tldrsh r0, [r0, r1]\n" + "\tasrs r0, 3\n" + "\tstrh r0, [r4, 0x24]\n" + "\tldrh r0, [r4, 0x38]\n" + "\tadds r0, 0x2\n" + "\tmovs r1, 0xFF\n" + "\tands r0, r1\n" + "\tstrh r0, [r4, 0x38]\n" + "\tadds r0, r4, 0\n" + "\tbl InitAnimLinearTranslation\n" + "\tb _080D8AD0\n" + "\t.align 2, 0\n" + "_080D8964: .4byte gSineTable\n" + "_080D8968:\n" + "\tadds r0, r4, 0\n" + "\tbl TranslateAnimLinear\n" + "\tldr r1, _080D89C8 @ =gSineTable\n" + "\tmovs r2, 0x38\n" + "\tldrsh r0, [r4, r2]\n" + "\tlsls r0, 1\n" + "\tadds r0, r1\n" + "\tmovs r2, 0\n" + "\tldrsh r0, [r0, r2]\n" + "\tasrs r0, 3\n" + "\tldrh r2, [r4, 0x24]\n" + "\tadds r0, r2\n" + "\tstrh r0, [r4, 0x24]\n" + "\tmovs r2, 0x38\n" + "\tldrsh r0, [r4, r2]\n" + "\tadds r0, 0x40\n" + "\tlsls r0, 1\n" + "\tadds r0, r1\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r0, r2]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tnegs r0, r0\n" + "\tasrs r0, 8\n" + "\tldrh r1, [r4, 0x26]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r4, 0x26]\n" + "\tldr r0, _080D89CC @ =gMain\n" + "\tldr r2, _080D89D0 @ =0x0000043d\n" + "\tadds r0, r2\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x2\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D89F2\n" + "\tldrh r1, [r4, 0x38]\n" + "\tadds r0, r1, 0\n" + "\tsubs r0, 0x40\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tadds r3, r1, 0\n" + "\tcmp r0, 0x7F\n" + "\tbhi _080D89D4\n" + "\tldrh r1, [r4, 0x3C]\n" + "\tlsls r1, 16\n" + "\tasrs r1, 24\n" + "\tb _080D89DC\n" + "\t.align 2, 0\n" + "_080D89C8: .4byte gSineTable\n" + "_080D89CC: .4byte gMain\n" + "_080D89D0: .4byte 0x0000043d\n" + "_080D89D4:\n" + "\tldrh r1, [r4, 0x3C]\n" + "\tlsls r1, 16\n" + "\tasrs r1, 24\n" + "\tadds r1, 0x1\n" + "_080D89DC:\n" + "\tmovs r0, 0x3\n" + "\tands r1, r0\n" + "\tlsls r1, 2\n" + "\tldrb r2, [r4, 0x5]\n" + "\tmovs r0, 0xD\n" + "\tnegs r0, r0\n" + "\tands r0, r2\n" + "\torrs r0, r1\n" + "\tstrb r0, [r4, 0x5]\n" + "\tadds r0, r3, 0x4\n" + "\tb _080D8A12\n" + "_080D89F2:\n" + "\tldrh r0, [r4, 0x38]\n" + "\tsubs r0, 0x40\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tcmp r0, 0x7F\n" + "\tbhi _080D8A06\n" + "\tadds r1, r4, 0\n" + "\tadds r1, 0x43\n" + "\tmovs r0, 0x80\n" + "\tb _080D8A0C\n" + "_080D8A06:\n" + "\tadds r1, r4, 0\n" + "\tadds r1, 0x43\n" + "\tmovs r0, 0x8C\n" + "_080D8A0C:\n" + "\tstrb r0, [r1]\n" + "\tldrh r0, [r4, 0x38]\n" + "\tsubs r0, 0x4\n" + "_080D8A12:\n" + "\tmovs r1, 0xFF\n" + "\tands r0, r1\n" + "\tstrh r0, [r4, 0x38]\n" + "\tmovs r1, 0x2E\n" + "\tldrsh r0, [r4, r1]\n" + "\tcmp r0, 0\n" + "\tbgt _080D8AD0\n" + "\tmovs r2, 0\n" + "\tmovs r0, 0xC0\n" + "\tlsls r0, 2\n" + "\tstrh r0, [r4, 0x2E]\n" + "\tldrh r0, [r4, 0x24]\n" + "\tldrh r1, [r4, 0x20]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r4, 0x20]\n" + "\tstrh r0, [r4, 0x30]\n" + "\tldrh r0, [r4, 0x26]\n" + "\tldrh r1, [r4, 0x22]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r4, 0x22]\n" + "\tstrh r0, [r4, 0x34]\n" + "\tadds r0, 0x4\n" + "\tstrh r0, [r4, 0x36]\n" + "\tldr r0, _080D8A68 @ =gMain\n" + "\tldr r1, _080D8A6C @ =0x0000043d\n" + "\tadds r0, r1\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x2\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8A78\n" + "\tldr r1, _080D8A70 @ =gBanksBySide\n" + "\tldr r0, _080D8A74 @ =gAnimBankTarget\n" + "\tldrb r0, [r0]\n" + "\tadds r0, r1\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8A78\n" + "\tmovs r0, 0x80\n" + "\tlsls r0, 1\n" + "\tb _080D8A7A\n" + "\t.align 2, 0\n" + "_080D8A68: .4byte gMain\n" + "_080D8A6C: .4byte 0x0000043d\n" + "_080D8A70: .4byte gBanksBySide\n" + "_080D8A74: .4byte gAnimBankTarget\n" + "_080D8A78:\n" + "\tldr r0, _080D8A90 @ =0x0000fff0\n" + "_080D8A7A:\n" + "\tstrh r0, [r4, 0x32]\n" + "\tldrh r0, [r4, 0x3C]\n" + "\tadds r0, 0x1\n" + "\tmovs r1, 0\n" + "\tstrh r0, [r4, 0x3C]\n" + "\tstrh r1, [r4, 0x26]\n" + "\tstrh r1, [r4, 0x24]\n" + "\tadds r0, r4, 0\n" + "\tbl sub_8078BD4\n" + "\tb _080D8AD0\n" + "\t.align 2, 0\n" + "_080D8A90: .4byte 0x0000fff0\n" + "_080D8A94:\n" + "\tadds r0, r4, 0\n" + "\tbl TranslateAnimLinear\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _080D8AD0\n" + "\tldrb r0, [r4, 0x1]\n" + "\tlsls r0, 30\n" + "\tlsrs r0, 30\n" + "\tmovs r1, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8AC2\n" + "\tldrb r0, [r4, 0x3]\n" + "\tlsls r0, 26\n" + "\tlsrs r0, 27\n" + "\tbl FreeOamMatrix\n" + "\tldrb r1, [r4, 0x1]\n" + "\tmovs r0, 0x4\n" + "\tnegs r0, r0\n" + "\tands r0, r1\n" + "\tstrb r0, [r4, 0x1]\n" + "_080D8AC2:\n" + "\tadds r0, r4, 0\n" + "\tbl DestroySprite\n" + "\tldr r1, _080D8AD8 @ =gAnimVisualTaskCount\n" + "\tldrb r0, [r1]\n" + "\tsubs r0, 0x1\n" + "\tstrb r0, [r1]\n" + "_080D8AD0:\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080D8AD8: .4byte gAnimVisualTaskCount"); +} +#endif // NONMATCHING + +// Creates Hail. +void AnimTask_Hail1(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->func = AnimTask_Hail2; +} + +static void AnimTask_Hail2(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + if (++task->data[4] > 2) + { + task->data[4] = 0; + task->data[5] = 0; + task->data[2] = 0; + task->data[0]++; + } + break; + case 1: + if (task->data[5] == 0) + { + if (sub_80D8BA8(task->data[3], task->data[2], taskId, 1)) + task->data[1]++; + + if (++task->data[2] == 3) + { + if (++task->data[3] == 10) + task->data[0]++; + else + task->data[0]--; + } + else + { + task->data[5] = 1; + } + + } + else + { + task->data[5]--; + } + break; + case 2: + if (task->data[1] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + + +/* +// Something to do with Hail. +// possibly equivalent, possibly not +bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4)//(u8 spriteId, u8 taskId, u8 a3)//(u8 taskId) +{ + // + //struct Task *task = &gTasks[a2]; + //u16 i, j; + //task->data[3]++; + //u8 r5bank = ; + + //const struct SpriteTemplate *spriteTemplate; + u8 spriteId; + + s16 r6, r7; + + u32 tempA, tempB; // u32? s16? u16? u8? int? + + //u8 r6, r7; + + tempA = a3 + 0; + tempB = 0; + + // is that gunknown a tempvar? + + if (gUnknown_083D9DC4[a1][3] != 2 + || IsAnimBankSpriteVisible(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]))) + { + //return TRUE; + tempB = 1; + + r7 = GetBattlerSpriteCoord(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 2); + r6 = GetBattlerSpriteCoord(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 3); + + switch (gUnknown_083D9DC4[a1][3]) + { + case 0: + // + r7 -= sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 1) / 6; + r6 -= sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 0) / 6; + break; + case 1: + // + r7 += sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 1) / 6; + r6 += sub_807A100(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 0) / 6; + } + } + + else + { + // _94 + r7 = gUnknown_083D9DC4[a1][0]; + r6 = gUnknown_083D9DC4[a1][1]; + } + + spriteId = CreateSprite(&HailSpriteTemplate, r7 - r6, -0x8, 0x12); + + if (spriteId != 0x40) + { + // + StartSpriteAffineAnim(&gSprites[spriteId], a2); + + gSprites[spriteId].data[0] = tempB; + gSprites[spriteId].data[3] = r7; + gSprites[spriteId].data[4] = r6; + + gSprites[spriteId].data[5] = a2; + gSprites[spriteId].data[6] = tempA; + gSprites[spriteId].data[7] = a4; + + return TRUE; + } + + return FALSE; + +} +//*/ + +//* +NAKED bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x8\n" + "\tlsls r0, 24\n" + "\tlsls r1, 24\n" + "\tlsrs r1, 24\n" + "\tmov r9, r1\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tstr r2, [sp]\n" + "\tlsls r3, 24\n" + "\tlsrs r3, 24\n" + "\tmov r10, r3\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp, 0x4]\n" + "\tldr r1, _080D8C20 @ =gUnknown_083D9DC4\n" + "\tlsrs r0, 22\n" + "\tadds r4, r0, r1\n" + "\tldrb r0, [r4, 0x3]\n" + "\tlsls r0, 24\n" + "\tasrs r0, 28\n" + "\tmov r8, r0\n" + "\tcmp r0, 0x2\n" + "\tbeq _080D8C94\n" + "\tldrh r0, [r4, 0x2]\n" + "\tlsls r0, 20\n" + "\tlsrs r0, 24\n" + "\tbl GetBattlerAtPosition\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tadds r0, r5, 0\n" + "\tbl IsAnimBankSpriteVisible\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _080D8C94\n" + "\tmovs r0, 0x1\n" + "\tstr r0, [sp, 0x4]\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0x2\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0x3\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tmov r1, r8\n" + "\tcmp r1, 0\n" + "\tbeq _080D8C24\n" + "\tcmp r1, 0x1\n" + "\tbeq _080D8C5A\n" + "\tb _080D8CA6\n" + "\t.align 2, 0\n" + "_080D8C20: .4byte gUnknown_083D9DC4\n" + "_080D8C24:\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0x1\n" + "\tbl sub_807A100\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tmovs r1, 0x6\n" + "\tbl __divsi3\n" + "\tlsls r1, r7, 16\n" + "\tasrs r1, 16\n" + "\tsubs r1, r0\n" + "\tlsls r1, 16\n" + "\tlsrs r7, r1, 16\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0\n" + "\tbl sub_807A100\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tmovs r1, 0x6\n" + "\tbl __divsi3\n" + "\tlsls r1, r6, 16\n" + "\tasrs r1, 16\n" + "\tsubs r1, r0\n" + "\tb _080D8C8E\n" + "_080D8C5A:\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0x1\n" + "\tbl sub_807A100\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tmovs r1, 0x6\n" + "\tbl __divsi3\n" + "\tlsls r1, r7, 16\n" + "\tasrs r1, 16\n" + "\tadds r1, r0\n" + "\tlsls r1, 16\n" + "\tlsrs r7, r1, 16\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0\n" + "\tbl sub_807A100\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tmovs r1, 0x6\n" + "\tbl __divsi3\n" + "\tlsls r1, r6, 16\n" + "\tasrs r1, 16\n" + "\tadds r1, r0\n" + "_080D8C8E:\n" + "\tlsls r1, 16\n" + "\tlsrs r6, r1, 16\n" + "\tb _080D8CA6\n" + "_080D8C94:\n" + "\tldrh r0, [r4]\n" + "\tlsls r0, 22\n" + "\tasrs r0, 6\n" + "\tlsrs r7, r0, 16\n" + "\tldr r0, [r4]\n" + "\tlsls r0, 12\n" + "\tasrs r0, 22\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "_080D8CA6:\n" + "\tlsls r0, r6, 16\n" + "\tasrs r0, 16\n" + "\tadds r0, 0x8\n" + "\tlsrs r1, r0, 31\n" + "\tadds r0, r1\n" + "\tasrs r0, 1\n" + "\tlsls r1, r7, 16\n" + "\tasrs r1, 16\n" + "\tsubs r1, r0\n" + "\tldr r0, _080D8D00 @ =HailSpriteTemplate\n" + "\tlsls r1, 16\n" + "\tasrs r1, 16\n" + "\tmovs r2, 0x8\n" + "\tnegs r2, r2\n" + "\tmovs r3, 0x12\n" + "\tbl CreateSprite\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, 0x40\n" + "\tbeq _080D8D08\n" + "\tlsls r4, r5, 4\n" + "\tadds r4, r5\n" + "\tlsls r4, 2\n" + "\tldr r0, _080D8D04 @ =gSprites\n" + "\tadds r4, r0\n" + "\tadds r0, r4, 0\n" + "\tmov r1, r9\n" + "\tbl StartSpriteAffineAnim\n" + "\tmov r0, sp\n" + "\tldrh r0, [r0, 0x4]\n" + "\tstrh r0, [r4, 0x2E]\n" + "\tstrh r7, [r4, 0x34]\n" + "\tstrh r6, [r4, 0x36]\n" + "\tmov r1, r9\n" + "\tstrh r1, [r4, 0x38]\n" + "\tmov r0, sp\n" + "\tldrh r0, [r0]\n" + "\tstrh r0, [r4, 0x3A]\n" + "\tmov r1, r10\n" + "\tstrh r1, [r4, 0x3C]\n" + "\tmovs r0, 0x1\n" + "\tb _080D8D0A\n" + "\t.align 2, 0\n" + "_080D8D00: .4byte gHailSpriteTemplate\n" + "_080D8D04: .4byte gSprites\n" + "_080D8D08:\n" + "\tmovs r0, 0\n" + "_080D8D0A:\n" + "\tadd sp, 0x8\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1"); +} +//*/ + +static void AnimHailBegin(struct Sprite *sprite) +{ + u8 spriteId; + + sprite->pos1.x += 4; + sprite->pos1.y += 8; + + if (sprite->pos1.x < sprite->data[3] && sprite->pos1.y < sprite->data[4]) + return; + + if (sprite->data[0] == 1 && sprite->data[5] == 0) + { + spriteId = CreateSprite(&gLargeIceEffectParticleSpriteTemplate, + sprite->data[3], sprite->data[4], sprite->subpriority); + + sprite->data[0] = spriteId; + if (spriteId != 64) + { + gSprites[sprite->data[0]].callback = AnimHailContinue; + gSprites[sprite->data[0]].data[6] = sprite->data[6]; + gSprites[sprite->data[0]].data[7] = sprite->data[7]; + } + + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } + else + { + gTasks[sprite->data[6]].data[sprite->data[7]]--; + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } +} + +static void AnimHailContinue(struct Sprite *sprite) +{ + if (++sprite->data[0] == 20) + { + gTasks[sprite->data[6]].data[sprite->data[7]]--; + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } +} + +// Initializes the animation for Ice Ball. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: duration +// arg 5: arc height (negative) +static void InitIceBallAnim(struct Sprite *sprite) +{ + u8 animNum = gAnimDisableStructPtr->rolloutTimer2 - gAnimDisableStructPtr->rolloutTimer1 - 1; + + if (animNum > 4) + animNum = 4; + + StartSpriteAffineAnim(sprite, animNum); + InitAnimSpritePos(sprite, 1); + + sprite->data[0] = gBattleAnimArgs[4]; + + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[5]; + + InitAnimArcTranslation(sprite); + + sprite->callback = AnimThrowIceBall; +} + +// Throws the ball of ice in Ice Ball. +static void AnimThrowIceBall(struct Sprite *sprite) +{ + if (!TranslateAnimArc(sprite)) + return; + + StartSpriteAnim(sprite, 1); + sprite->callback = sub_8078600; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +// Initializes the particles that scatter at the end of the Ice Ball animation. +static void InitIceBallParticle(struct Sprite *sprite) +{ + s16 randA, randB; + + sprite->oam.tileNum += 8; + sub_8078764(sprite, TRUE); + + randA = (Random() & 0xFF) + 256; + randB = Random() & 0x1FF; + + if (randB > 0xFF) + randB = 256 - randB; + + sprite->data[1] = randA; + sprite->data[2] = randB; + sprite->callback = AnimIceBallParticle; +} + +// Animates the particles created by InitIceBallParticle. +static void AnimIceBallParticle(struct Sprite *sprite) +{ + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + + if (sprite->data[1] & 1) + sprite->pos2.x = -(sprite->data[3] >> 8); + else + sprite->pos2.x = sprite->data[3] >> 8; + + sprite->pos2.y = sprite->data[4] >> 8; + + if (++sprite->data[0] == 21) + DestroyAnimSprite(sprite); +} + +// Counter for Ice Ball. +void AnimTask_CountIceBallThrows(u8 taskId) +{ + u8 arg = gBattleAnimArgs[0]; + + gBattleAnimArgs[arg] = gAnimDisableStructPtr->rolloutTimer2 - gAnimDisableStructPtr->rolloutTimer1 - 1; + DestroyAnimVisualTask(taskId); +} diff --git a/src/battle/anim/normal.c b/src/battle/anim/normal.c index 7564c529c..54524f2ef 100644 --- a/src/battle/anim/normal.c +++ b/src/battle/anim/normal.c @@ -69,8 +69,8 @@ static void sub_80E260C(void); static void sub_80E255C(struct Sprite *sprite); static void sub_80E2710(u8 taskId); static void sub_80E29FC(struct Sprite *sprite); -static void sub_80E2C8C(u8 taskId, u32 selectedPalettes); -static void sub_80E2CD0(u8 taskId); +static void AnimTask_BlendSpriteColor_Step1(u8 taskId, u32 selectedPalettes); +static void AnimTask_BlendSpriteColor_Step2(u8 taskId); static void sub_80E2DB8(u8 taskId); static void sub_80E2E10(u8 taskId); static void sub_80E2EE8(struct Sprite *sprite); @@ -854,7 +854,7 @@ static void sub_80E27A0(struct Sprite *sprite) if (gBattleAnimArgs[2] == 0) InitAnimSpritePos(sprite, 1); else - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); sprite->callback = sub_80785E4; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); @@ -866,7 +866,7 @@ static void sub_80E27E8(struct Sprite *sprite) if (gBattleAnimArgs[2] == 0) InitAnimSpritePos(sprite, 1); else - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[4]; sprite->callback = sub_80785E4; @@ -890,7 +890,7 @@ static void sub_80E2870(struct Sprite *sprite) if (gBattleAnimArgs[0] == 0) InitAnimSpritePos(sprite, 0); else - sub_8078764(sprite, 0); + sub_8078764(sprite, FALSE); sprite->pos2.x += (Random() % 48) - 24; sprite->pos2.y += (Random() % 24) - 12; @@ -916,7 +916,7 @@ static void sub_80E2978(struct Sprite *sprite) if (gBattleAnimArgs[2] == 0) InitAnimSpritePos(sprite, 1); else - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[3]; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); @@ -929,7 +929,7 @@ static void sub_80E29C0(struct Sprite *sprite) if (gBattleAnimArgs[2] == 0) InitAnimSpritePos(sprite, 1); else - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); sprite->callback = sub_80E29FC; } @@ -950,7 +950,7 @@ void sub_80E2A38(u8 taskId) (gBattleAnimArgs[0] >> 9) & 1, (gBattleAnimArgs[0] >> 10) & 1); - sub_80E2C8C(taskId, selectedPalettes); + AnimTask_BlendSpriteColor_Step1(taskId, selectedPalettes); } void sub_80E2A7C(u8 taskId) @@ -1001,7 +1001,7 @@ void sub_80E2A7C(u8 taskId) } } - sub_80E2C8C(taskId, selectedPalettes); + AnimTask_BlendSpriteColor_Step1(taskId, selectedPalettes); } void sub_80E2B74(u8 taskId) @@ -1042,16 +1042,22 @@ void sub_80E2B74(u8 taskId) break; } - sub_80E2C8C(taskId, selectedPalettes); + AnimTask_BlendSpriteColor_Step1(taskId, selectedPalettes); } -void sub_80E2C60(u8 taskId) +// Used to add a color mask to a Sprite. +// arg 0: spriteId +// arg 1: ??? unknown +// arg 2: ??? unknown +// arg 3: coefficient +// arg 4: color code +void AnimTask_BlendSpriteColor(u8 taskId) { u8 paletteIndex = IndexOfSpritePaletteTag(gBattleAnimArgs[0]); - sub_80E2C8C(taskId, 1 << (paletteIndex + 16)); + AnimTask_BlendSpriteColor_Step1(taskId, 1 << (paletteIndex + 16)); } -static void sub_80E2C8C(u8 taskId, u32 selectedPalettes) +static void AnimTask_BlendSpriteColor_Step1(u8 taskId, u32 selectedPalettes) { gTasks[taskId].data[0] = selectedPalettes; gTasks[taskId].data[1] = selectedPalettes >> 16; @@ -1060,11 +1066,11 @@ static void sub_80E2C8C(u8 taskId, u32 selectedPalettes) gTasks[taskId].data[4] = gBattleAnimArgs[3]; gTasks[taskId].data[5] = gBattleAnimArgs[4]; gTasks[taskId].data[10] = gBattleAnimArgs[2]; - gTasks[taskId].func = sub_80E2CD0; + gTasks[taskId].func = AnimTask_BlendSpriteColor_Step2; gTasks[taskId].func(taskId); } -static void sub_80E2CD0(u8 taskId) +static void AnimTask_BlendSpriteColor_Step2(u8 taskId) { u32 selectedPalettes; u16 singlePaletteMask = 0; @@ -1577,7 +1583,7 @@ void sub_80E3A08(u8 taskId) for (j = 5; j != 0; j--) gBattleAnimArgs[j] = gBattleAnimArgs[j - 1]; - sub_80E2C8C(taskId, selectedPalettes); + AnimTask_BlendSpriteColor_Step1(taskId, selectedPalettes); } void sub_80E3A58(u8 taskId) diff --git a/src/battle/anim/orbit.c b/src/battle/anim/orbit.c index f938a2707..5d82b2842 100644 --- a/src/battle/anim/orbit.c +++ b/src/battle/anim/orbit.c @@ -89,7 +89,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D6440 = void sub_80CABF8(struct Sprite* sprite) { - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); StartSpriteAnim(sprite, gBattleAnimArgs[4]); if (gBattleAnimArgs[4] == 1) { diff --git a/src/battle/anim/orbs.c b/src/battle/anim/orbs.c index b97f0c246..d4886d1f8 100644 --- a/src/battle/anim/orbs.c +++ b/src/battle/anim/orbs.c @@ -267,7 +267,7 @@ void sub_80CA928(u8 taskId) void sub_80CA9A8(struct Sprite* sprite) { - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[3]; sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 2); sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 3); diff --git a/src/battle/anim/psychic.c b/src/battle/anim/psychic.c index 704fa0306..ef263b971 100644 --- a/src/battle/anim/psychic.c +++ b/src/battle/anim/psychic.c @@ -562,9 +562,9 @@ void sub_80DBA4C(struct Sprite *sprite) if (sprite->data[0] == 0) { int arg3 = gBattleAnimArgs[3]; - u8 var0 = 0; + bool8 var0 = FALSE; if (arg3 == 0) - var0 = 1; + var0 = TRUE; if (!IsContest() && IsDoubleBattle()) { diff --git a/src/battle/anim/rock.c b/src/battle/anim/rock.c index 7738e4d0c..fa53df5b8 100644 --- a/src/battle/anim/rock.c +++ b/src/battle/anim/rock.c @@ -28,8 +28,8 @@ extern void AnimMoveTwisterParticle(struct Sprite *sprite); void sub_80DCE9C(struct Sprite *sprite); void sub_80DCF60(struct Sprite *sprite); void sub_80DCFE4(struct Sprite *sprite); -void sub_80DD3AC(struct Sprite *sprite); -void sub_80DD490(struct Sprite *sprite); +void AnimDirtParticleAcrossScreen(struct Sprite *sprite); +void AnimRaiseSprite(struct Sprite *sprite); void sub_80DD87C(struct Sprite *sprite); void sub_80DD8E8(struct Sprite *sprite); void sub_80DD978(struct Sprite *sprite); @@ -136,7 +136,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DACD0 = .callback = sub_80DCFE4, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DACE8 = +const struct SpriteTemplate gFlyingDirtSpriteTemplate = { .tileTag = 10261, .paletteTag = 10261, @@ -144,7 +144,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DACE8 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80DD3AC, + .callback = AnimDirtParticleAcrossScreen, }; const struct Subsprite gSubspriteTable_83DAD00[] = @@ -212,7 +212,7 @@ const union AnimCmd *const gSpriteAnimTable_83DAD58[] = gSpriteAnim_83DAD40, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAD60 = +const struct SpriteTemplate gAncientPowerRockSpriteTemplate = { .tileTag = 10058, .paletteTag = 10058, @@ -220,7 +220,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DAD60 = .anims = gSpriteAnimTable_83DAD48, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80DD490, + .callback = AnimRaiseSprite, }; const struct SpriteTemplate gSpriteTemplate_83DAD78 = @@ -387,7 +387,7 @@ void sub_80DCFE4(struct Sprite *sprite) if (gBattleAnimArgs[6] == 0) InitAnimSpritePos(sprite, 0); else - sub_8078764(sprite, 0); + sub_8078764(sprite, FALSE); sprite->data[0] = gBattleAnimArgs[3]; sprite->data[1] = gBattleAnimArgs[2]; @@ -510,7 +510,13 @@ static void sub_80DD190(u8 taskId) } } -void sub_80DD3AC(struct Sprite *sprite) +// Animates the sprites that fly diagonally across the screen +// in Sandstorm and Heat Wave. +// arg 0: initial y pixel offset +// arg 1: projectile speed +// arg 2: y pixel drop +// arg 3: ??? unknown (possibly a color bit) +void AnimDirtParticleAcrossScreen(struct Sprite *sprite) { if (sprite->data[0] == 0) { @@ -555,7 +561,13 @@ void sub_80DD3AC(struct Sprite *sprite) } } -void sub_80DD490(struct Sprite *sprite) +// Animates the rising rocks in Ancient Power. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: terminal y offset +// arg 3: duration +// arg 4: sprite size [1,5] +void AnimRaiseSprite(struct Sprite *sprite) { StartSpriteAnim(sprite, gBattleAnimArgs[4]); InitAnimSpritePos(sprite, 0); diff --git a/src/battle/anim/splash.c b/src/battle/anim/splash.c index c01748953..7e3d08554 100644 --- a/src/battle/anim/splash.c +++ b/src/battle/anim/splash.c @@ -8,7 +8,7 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -static void sub_80D07AC(u8 taskId); +static void AnimTask_SplashStep(u8 taskId); // splash (splash effect of hopping up and down) // Used in Splash, Mud Sport, and Sketch. @@ -21,7 +21,10 @@ const union AffineAnimCmd gSpriteAffineAnim_83D76F4[] = AFFINEANIMCMD_END, }; -void sub_80D074C(u8 taskId) +// Task to facilitate expanding and hopping effect seen in Splash. +// arg 0: anim battler +// arg 1: num hops +void AnimTask_Splash(u8 taskId) { struct Task* task = &gTasks[taskId]; if (gBattleAnimArgs[1] == 0) @@ -37,11 +40,11 @@ void sub_80D074C(u8 taskId) task->data[3] = 0; task->data[4] = 0; sub_80798F4(task, spriteId, &gSpriteAffineAnim_83D76F4); - task->func = sub_80D07AC; + task->func = AnimTask_SplashStep; } } -void sub_80D07AC(u8 taskId) +void AnimTask_SplashStep(u8 taskId) { struct Task* task = &gTasks[taskId]; switch (task->data[1]) diff --git a/src/battle/anim/tendrils.c b/src/battle/anim/tendrils.c index 55e2c21bb..cee45b648 100644 --- a/src/battle/anim/tendrils.c +++ b/src/battle/anim/tendrils.c @@ -70,7 +70,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D65A0 = void sub_80CB25C(struct Sprite* sprite) { - sub_8078764(sprite, 0); + sub_8078764(sprite, FALSE); sprite->affineAnimPaused = 1; StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]); sprite->data[6] = gBattleAnimArgs[2]; diff --git a/src/battle/anim/tile.c b/src/battle/anim/tile.c index 12cfd53b3..0442321d6 100644 --- a/src/battle/anim/tile.c +++ b/src/battle/anim/tile.c @@ -157,7 +157,7 @@ void sub_80CE108(u8 taskId) void sub_80CE17C(struct Sprite* sprite) { - sub_8078764(sprite, 0); + sub_8078764(sprite, FALSE); sprite->animPaused = 1; sprite->data[0] = gBattleAnimArgs[2]; sprite->callback = sub_80CE1AC; diff --git a/src/battle/anim/water.c b/src/battle/anim/water.c index 1c354d916..487624224 100644 --- a/src/battle/anim/water.c +++ b/src/battle/anim/water.c @@ -192,7 +192,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9438 = void sub_80D37FC(struct Sprite *sprite) { - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[4]; sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; @@ -206,7 +206,7 @@ void sub_80D3838(struct Sprite *sprite) { if (gBattleAnimArgs[3] != 0) { - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); } else { diff --git a/src/battle/anim/wisp_fire.c b/src/battle/anim/wisp_fire.c index c96a3a86f..a8ced992a 100644 --- a/src/battle/anim/wisp_fire.c +++ b/src/battle/anim/wisp_fire.c @@ -186,7 +186,10 @@ static void sub_80D5E4C(u8 taskId) } } -void sub_80D6080(u8 taskId) +// Used to add a color mask to the battle interface / HUD in Heat Wave. +// arg 0: opacity +// arg 1: color code +void AnimTask_BlendInterfaceColor(u8 taskId) { struct Struct_sub_8078914 unk; sub_8078914(&unk); diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 54cacd0cb..39ba0318b 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -13996,153 +13996,30 @@ static void atkC0_recoverbasedonsunlight(void) } } -NAKED static void atkC1_hiddenpowercalc(void) { - asm(".syntax unified\n\ -push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - ldr r2, _08029894 @ =gBattleMons\n\ - ldr r0, _08029898 @ =gBankAttacker\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - adds r4, r1, 0\n\ - muls r4, r0\n\ - adds r4, r2\n\ - ldrb r0, [r4, 0x14]\n\ - mov r10, r0\n\ - mov r7, r10\n\ - lsls r7, 27\n\ - adds r0, r7, 0\n\ - lsrs r0, 27\n\ - mov r10, r0\n\ - movs r1, 0x2\n\ - mov r2, r10\n\ - ands r2, r1\n\ - asrs r2, 1\n\ - ldrh r7, [r4, 0x14]\n\ - mov r9, r7\n\ - mov r0, r9\n\ - lsls r0, 22\n\ - mov r9, r0\n\ - lsrs r3, r0, 27\n\ - adds r0, r1, 0\n\ - ands r0, r3\n\ - orrs r2, r0\n\ - ldrb r7, [r4, 0x15]\n\ - mov r8, r7\n\ - mov r0, r8\n\ - lsls r0, 25\n\ - mov r8, r0\n\ - lsrs r3, r0, 27\n\ - adds r0, r1, 0\n\ - ands r0, r3\n\ - lsls r0, 1\n\ - orrs r2, r0\n\ - ldr r6, [r4, 0x14]\n\ - lsls r6, 12\n\ - lsrs r3, r6, 27\n\ - adds r0, r1, 0\n\ - ands r0, r3\n\ - lsls r0, 2\n\ - orrs r2, r0\n\ - ldrh r5, [r4, 0x16]\n\ - lsls r5, 23\n\ - lsrs r3, r5, 27\n\ - adds r0, r1, 0\n\ - ands r0, r3\n\ - lsls r0, 3\n\ - orrs r2, r0\n\ - ldrb r3, [r4, 0x17]\n\ - lsls r3, 26\n\ - lsrs r0, r3, 27\n\ - ands r1, r0\n\ - lsls r1, 4\n\ - orrs r2, r1\n\ - movs r1, 0x1\n\ - adds r4, r1, 0\n\ - mov r7, r10\n\ - ands r4, r7\n\ - mov r0, r9\n\ - lsrs r0, 27\n\ - mov r9, r0\n\ - adds r0, r1, 0\n\ - mov r7, r9\n\ - ands r0, r7\n\ - lsls r0, 1\n\ - orrs r4, r0\n\ - mov r0, r8\n\ - lsrs r0, 27\n\ - mov r8, r0\n\ - adds r0, r1, 0\n\ - mov r7, r8\n\ - ands r0, r7\n\ - lsls r0, 2\n\ - orrs r4, r0\n\ - lsrs r6, 27\n\ - adds r0, r1, 0\n\ - ands r0, r6\n\ - lsls r0, 3\n\ - orrs r4, r0\n\ - lsrs r5, 27\n\ - adds r0, r1, 0\n\ - ands r0, r5\n\ - lsls r0, 4\n\ - orrs r4, r0\n\ - lsrs r3, 27\n\ - ands r1, r3\n\ - lsls r1, 5\n\ - orrs r4, r1\n\ - ldr r5, _0802989C @ =gDynamicBasePower\n\ - lsls r0, r2, 2\n\ - adds r0, r2\n\ - lsls r0, 3\n\ - movs r1, 0x3F\n\ - bl __divsi3\n\ - adds r0, 0x1E\n\ - strh r0, [r5]\n\ - ldr r5, _080298A0 @ =gSharedMem\n\ - lsls r0, r4, 4\n\ - subs r0, r4\n\ - movs r1, 0x3F\n\ - bl __divsi3\n\ - adds r1, r0, 0x1\n\ - ldr r0, _080298A4 @ =0x0001601c\n\ - adds r5, r0\n\ - strb r1, [r5]\n\ - lsls r0, r1, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x8\n\ - bls _08029876\n\ - adds r0, r1, 0x1\n\ - strb r0, [r5]\n\ -_08029876:\n\ - ldrb r0, [r5]\n\ - movs r1, 0xC0\n\ - orrs r0, r1\n\ - strb r0, [r5]\n\ - ldr r1, _080298A8 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x1\n\ - str r0, [r1]\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\ -_08029894: .4byte gBattleMons\n\ -_08029898: .4byte gBankAttacker\n\ -_0802989C: .4byte gDynamicBasePower\n\ -_080298A0: .4byte gSharedMem\n\ -_080298A4: .4byte 0x0001601c\n\ -_080298A8: .4byte gBattlescriptCurrInstr\n\ - .syntax divided"); + u8 power = ((gBattleMons[gBankAttacker].hpIV & 2) >> 1) | + ((gBattleMons[gBankAttacker].attackIV & 2)) | + ((gBattleMons[gBankAttacker].defenseIV & 2) << 1) | + ((gBattleMons[gBankAttacker].speedIV & 2) << 2) | + ((gBattleMons[gBankAttacker].spAttackIV & 2) << 3) | + ((gBattleMons[gBankAttacker].spDefenseIV & 2) << 4); + u8 type = ((gBattleMons[gBankAttacker].hpIV & 1)) | + ((gBattleMons[gBankAttacker].attackIV & 1) << 1) | + ((gBattleMons[gBankAttacker].defenseIV & 1) << 2) | + ((gBattleMons[gBankAttacker].speedIV & 1) << 3) | + ((gBattleMons[gBankAttacker].spAttackIV & 1) << 4) | + ((gBattleMons[gBankAttacker].spDefenseIV & 1) << 5); + + gDynamicBasePower = 30 + (power * 40 / 63); + + gBattleStruct->dynamicMoveType = ((type * 15) / 63) + 1; + if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY) + gBattleStruct->dynamicMoveType++; + + gBattleStruct->dynamicMoveType |= 0xC0; + + gBattlescriptCurrInstr++; } static void atkC2_selectfirstvalidtarget(void) diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index 8b729d2ab..7420e3e2e 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -672,588 +672,588 @@ const struct OamData gOamData_837E15C = const struct CompressedSpriteSheet gBattleAnimPicTable[] = { - { (u8 *) &gBattleAnimSpriteSheet_000, 0x200, 10000 }, - { (u8 *) &gBattleAnimSpriteSheet_001, 0x300, 10001 }, - { (u8 *) &gBattleAnimSpriteSheet_002, 0x200, 10002 }, - { (u8 *) &gBattleAnimSpriteSheet_003, 0x100, 10003 }, - { (u8 *) &gBattleAnimSpriteSheet_004, 0x200, 10004 }, - { (u8 *) &gBattleAnimSpriteSheet_005, 0x400, 10005 }, - { (u8 *) &gBattleAnimSpriteSheet_006, 0x180, 10006 }, - { (u8 *) &gBattleAnimSpriteSheet_007, 0x800, 10007 }, - { (u8 *) &gBattleAnimSpriteSheet_008, 0x20, 10008 }, - { (u8 *) &gBattleAnimSpriteSheet_009, 0x400, 10009 }, - { (u8 *) &gBattleAnimSpriteSheet_010, 0x1200, 10010 }, - { (u8 *) &gBattleAnimSpriteSheet_011, 0x180, 10011 }, - { (u8 *) &gBattleAnimSpriteSheet_012, 0x80, 10012 }, - { (u8 *) &gBattleAnimSpriteSheet_013, 0x80, 10013 }, - { (u8 *) &gBattleAnimSpriteSheet_014, 0x280, 10014 }, - { (u8 *) &gBattleAnimSpriteSheet_015, 0x80, 10015 }, - { (u8 *) &gBattleAnimSpriteSheet_016, 0x100, 10016 }, - { (u8 *) &gBattleAnimSpriteSheet_017, 0x20, 10017 }, - { (u8 *) &gBattleAnimSpriteSheet_018, 0x80, 10018 }, - { (u8 *) &gBattleAnimSpriteSheet_019, 0x400, 10019 }, - { (u8 *) &gBattleAnimSpriteSheet_020, 0x200, 10020 }, - { (u8 *) &gBattleAnimSpriteSheet_021, 0xA00, 10021 }, - { (u8 *) &gBattleAnimSpriteSheet_021, 0xA00, 10022 }, - { (u8 *) &gBattleAnimSpriteSheet_023, 0x380, 10023 }, - { (u8 *) &gBattleAnimSpriteSheet_024, 0x300, 10024 }, - { (u8 *) &gBattleAnimSpriteSheet_025, 0xA00, 10025 }, - { (u8 *) &gBattleAnimSpriteSheet_026, 0xA00, 10026 }, - { (u8 *) &gBattleAnimSpriteSheet_027, 0xA00, 10027 }, - { (u8 *) &gBattleAnimSpriteSheet_028, 0xA00, 10028 }, - { (u8 *) &gBattleAnimSpriteSheet_029, 0xA00, 10029 }, - { (u8 *) &gBattleAnimSpriteSheet_030, 0xA00, 10030 }, - { (u8 *) &gBattleAnimSpriteSheet_031, 0xE00, 10031 }, - { (u8 *) &gBattleAnimSpriteSheet_032, 0x380, 10032 }, - { (u8 *) &gBattleAnimSpriteSheet_033, 0x1000, 10033 }, - { (u8 *) &gBattleAnimSpriteSheet_034, 0x800, 10034 }, - { (u8 *) &gBattleAnimSpriteSheet_035, 0xA00, 10035 }, - { (u8 *) &gBattleAnimSpriteSheet_036, 0x800, 10036 }, - { (u8 *) &gBattleAnimSpriteSheet_037, 0xA00, 10037 }, - { (u8 *) &gBattleAnimSpriteSheet_038, 0xA00, 10038 }, - { (u8 *) &gBattleAnimSpriteSheet_039, 0xA00, 10039 }, - { (u8 *) &gBattleAnimSpriteSheet_040, 0xA00, 10040 }, - { (u8 *) &gBattleAnimSpriteSheet_041, 0xA00, 10041 }, - { (u8 *) &gBattleAnimSpriteSheet_042, 0xA00, 10042 }, - { (u8 *) &gBattleAnimSpriteSheet_043, 0xA00, 10043 }, - { (u8 *) &gBattleAnimSpriteSheet_044, 0xA00, 10044 }, - { (u8 *) &gBattleAnimSpriteSheet_045, 0xA00, 10045 }, - { (u8 *) &gBattleAnimSpriteSheet_046, 0x1000, 10046 }, - { (u8 *) &gBattleAnimSpriteSheet_046, 0x1000, 10047 }, - { (u8 *) &gBattleAnimSpriteSheet_048, 0x1000, 10048 }, - { (u8 *) &gBattleAnimSpriteSheet_048, 0x1000, 10049 }, - { (u8 *) &gBattleAnimSpriteSheet_050, 0x200, 10050 }, - { (u8 *) &gBattleAnimSpriteSheet_051, 0x200, 10051 }, - { (u8 *) &gBattleAnimSpriteSheet_052, 0x200, 10052 }, - { (u8 *) &gBattleAnimSpriteSheet_053, 0x800, 10053 }, - { (u8 *) &gBattleAnimSpriteSheet_054, 0x80, 10054 }, - { (u8 *) &gBattleAnimSpriteSheet_055, 0x200, 10055 }, - { (u8 *) &gBattleAnimSpriteSheet_056, 0x1000, 10056 }, - { (u8 *) &gBattleAnimSpriteSheet_057, 0x180, 10057 }, - { (u8 *) &gBattleAnimSpriteSheet_058, 0xC00, 10058 }, - { (u8 *) &gBattleAnimSpriteSheet_059, 0x100, 10059 }, - { (u8 *) &gBattleAnimSpriteSheet_060, 0x40, 10060 }, - { (u8 *) &gBattleAnimSpriteSheet_061, 0x180, 10061 }, - { (u8 *) &gBattleAnimSpriteSheet_062, 0x800, 10062 }, - { (u8 *) &gBattleAnimSpriteSheet_063, 0x480, 10063 }, - { (u8 *) &gBattleAnimSpriteSheet_064, 0x200, 10064 }, - { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10065 }, - { (u8 *) &gBattleAnimSpriteSheet_066, 0x100, 10066 }, - { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10067 }, - { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10068 }, - { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10069 }, - { (u8 *) &gBattleAnimSpriteSheet_070, 0x200, 10070 }, - { (u8 *) &gBattleAnimSpriteSheet_071, 0xA00, 10071 }, - { (u8 *) &gBattleAnimSpriteSheet_072, 0x300, 10072 }, - { (u8 *) &gBattleAnimSpriteSheet_073, 0x180, 10073 }, - { (u8 *) &gBattleAnimSpriteSheet_074, 0xA0, 10074 }, - { (u8 *) &gBattleAnimSpriteSheet_075, 0x700, 10075 }, - { (u8 *) &gBattleAnimSpriteSheet_076, 0x400, 10076 }, - { (u8 *) &gBattleAnimSpriteSheet_077, 0x200, 10077 }, - { (u8 *) &gBattleAnimSpriteSheet_078, 0x300, 10078 }, - { (u8 *) &gBattleAnimSpriteSheet_079, 0xC00, 10079 }, - { (u8 *) &gBattleAnimSpriteSheet_080, 0xA00, 10080 }, - { (u8 *) &gBattleAnimSpriteSheet_081, 0x80, 10081 }, - { (u8 *) &gBattleAnimSpriteSheet_082, 0x40, 10082 }, - { (u8 *) &gBattleAnimSpriteSheet_083, 0xE00, 10083 }, - { (u8 *) &gBattleAnimSpriteSheet_084, 0xE00, 10084 }, - { (u8 *) &gBattleAnimSpriteSheet_085, 0x280, 10085 }, - { (u8 *) &gBattleAnimSpriteSheet_086, 0x200, 10086 }, - { (u8 *) &gBattleAnimSpriteSheet_087, 0x80, 10087 }, - { (u8 *) &gBattleAnimSpriteSheet_088, 0xC0, 10088 }, - { (u8 *) &gBattleAnimSpriteSheet_089, 0xA00, 10089 }, - { (u8 *) &gBattleAnimSpriteSheet_090, 0x200, 10090 }, - { (u8 *) &gBattleAnimSpriteSheet_091, 0x180, 10091 }, - { (u8 *) &gBattleAnimSpriteSheet_092, 0x80, 10092 }, - { (u8 *) &gBattleAnimSpriteSheet_093, 0x1000, 10093 }, - { (u8 *) &gBattleAnimSpriteSheet_094, 0xA00, 10094 }, - { (u8 *) &gBattleAnimSpriteSheet_095, 0x180, 10095 }, - { (u8 *) &gBattleAnimSpriteSheet_096, 0x380, 10096 }, - { (u8 *) &gBattleAnimSpriteSheet_097, 0xC00, 10097 }, - { (u8 *) &gBattleAnimSpriteSheet_098, 0x200, 10098 }, - { (u8 *) &gBattleAnimSpriteSheet_099, 0x200, 10099 }, - { (u8 *) &gBattleAnimSpriteSheet_100, 0x200, 10100 }, - { (u8 *) &gBattleAnimSpriteSheet_101, 0x200, 10101 }, - { (u8 *) &gBattleAnimSpriteSheet_102, 0x400, 10102 }, - { (u8 *) &gBattleAnimSpriteSheet_103, 0x80, 10103 }, - { (u8 *) &gBattleAnimSpriteSheet_104, 0x400, 10104 }, - { (u8 *) &gBattleAnimSpriteSheet_105, 0xC00, 10105 }, - { (u8 *) &gBattleAnimSpriteSheet_106, 0x200, 10106 }, - { (u8 *) &gBattleAnimSpriteSheet_107, 0x1000, 10107 }, - { (u8 *) &gBattleAnimSpriteSheet_108, 0xA00, 10108 }, - { (u8 *) &gBattleAnimSpriteSheet_109, 0x20, 10109 }, - { (u8 *) &gBattleAnimSpriteSheet_110, 0xE00, 10110 }, - { (u8 *) &gBattleAnimSpriteSheet_111, 0x80, 10111 }, - { (u8 *) &gBattleAnimSpriteSheet_112, 0xA00, 10112 }, - { (u8 *) &gBattleAnimSpriteSheet_113, 0x400, 10113 }, - { (u8 *) &gBattleAnimSpriteSheet_114, 0x200, 10114 }, - { (u8 *) &gBattleAnimSpriteSheet_115, 0x700, 10115 }, - { (u8 *) &gBattleAnimSpriteSheet_116, 0x800, 10116 }, - { (u8 *) &gBattleAnimSpriteSheet_117, 0xA00, 10117 }, - { (u8 *) &gBattleAnimSpriteSheet_118, 0x600, 10118 }, - { (u8 *) &gBattleAnimSpriteSheet_119, 0x800, 10119 }, - { (u8 *) &gBattleAnimSpriteSheet_120, 0x200, 10120 }, - { (u8 *) &gBattleAnimSpriteSheet_121, 0x40, 10121 }, - { (u8 *) &gBattleAnimSpriteSheet_122, 0x180, 10122 }, - { (u8 *) &gBattleAnimSpriteSheet_123, 0x600, 10123 }, - { (u8 *) &gBattleAnimSpriteSheet_124, 0x600, 10124 }, - { (u8 *) &gBattleAnimSpriteSheet_125, 0x200, 10125 }, - { (u8 *) &gBattleAnimSpriteSheet_126, 0x80, 10126 }, - { (u8 *) &gBattleAnimSpriteSheet_127, 0x200, 10127 }, - { (u8 *) &gBattleAnimSpriteSheet_128, 0x800, 10128 }, - { (u8 *) &gBattleAnimSpriteSheet_129, 0x80, 10129 }, - { (u8 *) &gBattleAnimSpriteSheet_130, 0xA00, 10130 }, - { (u8 *) &gBattleAnimSpriteSheet_131, 0x280, 10131 }, - { (u8 *) &gBattleAnimSpriteSheet_132, 0x280, 10132 }, - { (u8 *) &gBattleAnimSpriteSheet_133, 0x100, 10133 }, - { (u8 *) &gBattleAnimSpriteSheet_134, 0x200, 10134 }, - { (u8 *) &gBattleAnimSpriteSheet_135, 0x200, 10135 }, - { (u8 *) &gBattleAnimSpriteSheet_136, 0x20, 10136 }, - { (u8 *) &gBattleAnimSpriteSheet_137, 0xA00, 10137 }, - { (u8 *) &gBattleAnimSpriteSheet_138, 0x800, 10138 }, - { (u8 *) &gBattleAnimSpriteSheet_139, 0x800, 10139 }, - { (u8 *) &gBattleAnimSpriteSheet_140, 0xC0, 10140 }, - { (u8 *) &gBattleAnimSpriteSheet_141, 0x1C0, 10141 }, - { (u8 *) &gBattleAnimSpriteSheet_142, 0x100, 10142 }, - { (u8 *) &gBattleAnimSpriteSheet_143, 0x800, 10143 }, - { (u8 *) &gBattleAnimSpriteSheet_144, 0x200, 10144 }, - { (u8 *) &gBattleAnimSpriteSheet_145, 0x800, 10145 }, - { (u8 *) &gBattleAnimSpriteSheet_146, 0x180, 10146 }, - { (u8 *) &gBattleAnimSpriteSheet_147, 0x180, 10147 }, - { (u8 *) &gBattleAnimSpriteSheet_148, 0x200, 10148 }, - { (u8 *) &gBattleAnimSpriteSheet_149, 0x200, 10149 }, - { (u8 *) &gBattleAnimSpriteSheet_150, 0x180, 10150 }, - { (u8 *) &gBattleAnimSpriteSheet_151, 0x400, 10151 }, - { (u8 *) &gBattleAnimSpriteSheet_152, 0x80, 10152 }, - { (u8 *) &gBattleAnimSpriteSheet_153, 0x100, 10153 }, - { (u8 *) &gBattleAnimSpriteSheet_154, 0x100, 10154 }, - { (u8 *) &gBattleAnimSpriteSheet_155, 0x140, 10155 }, - { (u8 *) &gBattleAnimSpriteSheet_156, 0x800, 10156 }, - { (u8 *) &gBattleAnimSpriteSheet_157, 0x200, 10157 }, - { (u8 *) &gBattleAnimSpriteSheet_158, 0x100, 10158 }, - { (u8 *) &gBattleAnimSpriteSheet_159, 0xA0, 10159 }, - { (u8 *) &gBattleAnimSpriteSheet_160, 0x100, 10160 }, - { (u8 *) &gBattleAnimSpriteSheet_161, 0x80, 10161 }, - { (u8 *) &gBattleAnimSpriteSheet_162, 0x300, 10162 }, - { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10163 }, - { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10164 }, - { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10165 }, - { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10166 }, - { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10167 }, - { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10168 }, - { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10169 }, - { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10170 }, - { (u8 *) &gBattleAnimSpriteSheet_171, 0x80, 10171 }, - { (u8 *) &gBattleAnimSpriteSheet_144, 0x200, 10172 }, - { (u8 *) &gBattleAnimSpriteSheet_173, 0x200, 10173 }, - { (u8 *) &gBattleAnimSpriteSheet_174, 0x200, 10174 }, - { (u8 *) &gBattleAnimSpriteSheet_175, 0x80, 10175 }, - { (u8 *) &gBattleAnimSpriteSheet_176, 0x200, 10176 }, - { (u8 *) &gBattleAnimSpriteSheet_177, 0x500, 10177 }, - { (u8 *) &gBattleAnimSpriteSheet_178, 0x800, 10178 }, - { (u8 *) &gBattleAnimSpriteSheet_179, 0x400, 10179 }, - { (u8 *) &gBattleAnimSpriteSheet_180, 0x20, 10180 }, - { (u8 *) &gBattleAnimSpriteSheet_181, 0x800, 10181 }, - { (u8 *) &gBattleAnimSpriteSheet_182, 0x100, 10182 }, - { (u8 *) &gBattleAnimSpriteSheet_183, 0x800, 10183 }, - { (u8 *) &gBattleAnimSpriteSheet_184, 0x400, 10184 }, - { (u8 *) &gBattleAnimSpriteSheet_185, 0xA00, 10185 }, - { (u8 *) &gBattleAnimSpriteSheet_186, 0x1000, 10186 }, - { (u8 *) &gBattleAnimSpriteSheet_187, 0x800, 10187 }, - { (u8 *) &gBattleAnimSpriteSheet_188, 0x400, 10188 }, - { (u8 *) &gBattleAnimSpriteSheet_189, 0x200, 10189 }, - { (u8 *) &gBattleAnimSpriteSheet_190, 0x800, 10190 }, - { (u8 *) &gBattleAnimSpriteSheet_191, 0x800, 10191 }, - { (u8 *) &gBattleAnimSpriteSheet_192, 0x800, 10192 }, - { (u8 *) &gBattleAnimSpriteSheet_193, 0x200, 10193 }, - { (u8 *) &gBattleAnimSpriteSheet_194, 0x800, 10194 }, - { (u8 *) &gBattleAnimSpriteSheet_195, 0x200, 10195 }, - { (u8 *) &gBattleAnimSpriteSheet_196, 0x800, 10196 }, - { (u8 *) &gBattleAnimSpriteSheet_197, 0x200, 10197 }, - { (u8 *) &gBattleAnimSpriteSheet_198, 0x800, 10198 }, - { (u8 *) &gBattleAnimSpriteSheet_199, 0x400, 10199 }, - { (u8 *) &gBattleAnimSpriteSheet_200, 0x200, 10200 }, - { (u8 *) &gBattleAnimSpriteSheet_201, 0xA80, 10201 }, - { (u8 *) &gBattleAnimSpriteSheet_202, 0x600, 10202 }, - { (u8 *) &gBattleAnimSpriteSheet_203, 0x800, 10203 }, - { (u8 *) &gBattleAnimSpriteSheet_204, 0x200, 10204 }, - { (u8 *) &gBattleAnimSpriteSheet_205, 0x600, 10205 }, - { (u8 *) &gBattleAnimSpriteSheet_206, 0x800, 10206 }, - { (u8 *) &gBattleAnimSpriteSheet_207, 0x180, 10207 }, - { (u8 *) &gBattleAnimSpriteSheet_208, 0x800, 10208 }, - { (u8 *) &gBattleAnimSpriteSheet_209, 0x800, 10209 }, - { (u8 *) &gBattleAnimSpriteSheet_210, 0x80, 10210 }, - { (u8 *) &gBattleAnimSpriteSheet_211, 0x80, 10211 }, - { (u8 *) &gBattleAnimSpriteSheet_212, 0x800, 10212 }, - { (u8 *) &gBattleAnimSpriteSheet_213, 0x800, 10213 }, - { (u8 *) &gBattleAnimSpriteSheet_214, 0x600, 10214 }, - { (u8 *) &gBattleAnimSpriteSheet_215, 0x600, 10215 }, - { (u8 *) &gBattleAnimSpriteSheet_210, 0x80, 10216 }, - { (u8 *) &gBattleAnimSpriteSheet_217, 0x80, 10217 }, - { (u8 *) &gBattleAnimSpriteSheet_218, 0x180, 10218 }, - { (u8 *) &gBattleAnimSpriteSheet_210, 0x80, 10219 }, - { (u8 *) &gBattleAnimSpriteSheet_220, 0x200, 10220 }, - { (u8 *) &gBattleAnimSpriteSheet_221, 0x400, 10221 }, - { (u8 *) &gBattleAnimSpriteSheet_222, 0xA00, 10222 }, - { (u8 *) &gBattleAnimSpriteSheet_223, 0x800, 10223 }, - { (u8 *) &gBattleAnimSpriteSheet_224, 0x200, 10224 }, - { (u8 *) &gBattleAnimSpriteSheet_225, 0x400, 10225 }, - { (u8 *) &gBattleAnimSpriteSheet_226, 0x80, 10226 }, - { (u8 *) &gBattleAnimSpriteSheet_227, 0x800, 10227 }, - { (u8 *) &gBattleAnimSpriteSheet_228, 0x200, 10228 }, - { (u8 *) &gBattleAnimSpriteSheet_229, 0x300, 10229 }, - { (u8 *) &gBattleAnimSpriteSheet_230, 0x800, 10230 }, - { (u8 *) &gBattleAnimSpriteSheet_231, 0x380, 10231 }, - { (u8 *) &gBattleAnimSpriteSheet_232, 0x800, 10232 }, - { (u8 *) &gBattleAnimSpriteSheet_233, 0xC0, 10233 }, - { (u8 *) &gBattleAnimSpriteSheet_234, 0x800, 10234 }, - { (u8 *) &gBattleAnimSpriteSheet_235, 0x60, 10235 }, - { (u8 *) &gBattleAnimSpriteSheet_235, 0x60, 10236 }, - { (u8 *) &gBattleAnimSpriteSheet_235, 0x60, 10237 }, - { (u8 *) &gBattleAnimSpriteSheet_238, 0x80, 10238 }, - { (u8 *) &gBattleAnimSpriteSheet_239, 0x180, 10239 }, - { (u8 *) &gBattleAnimSpriteSheet_240, 0x180, 10240 }, - { (u8 *) &gBattleAnimSpriteSheet_241, 0x200, 10241 }, - { (u8 *) &gBattleAnimSpriteSheet_242, 0x200, 10242 }, - { (u8 *) &gBattleAnimSpriteSheet_243, 0x20, 10243 }, - { (u8 *) &gBattleAnimSpriteSheet_244, 0x400, 10244 }, - { (u8 *) &gBattleAnimSpriteSheet_245, 0x600, 10245 }, - { (u8 *) &gBattleAnimSpriteSheet_246, 0x1000, 10246 }, - { (u8 *) &gBattleAnimSpriteSheet_247, 0x400, 10247 }, - { (u8 *) &gBattleAnimSpriteSheet_248, 0x20, 10248 }, - { (u8 *) &gBattleAnimSpriteSheet_249, 0x80, 10249 }, - { (u8 *) &gBattleAnimSpriteSheet_250, 0x800, 10250 }, - { (u8 *) &gBattleAnimSpriteSheet_251, 0x80, 10251 }, - { (u8 *) &gBattleAnimSpriteSheet_252, 0x200, 10252 }, - { (u8 *) &gBattleAnimSpriteSheet_253, 0x400, 10253 }, - { (u8 *) &gBattleAnimSpriteSheet_254, 0x200, 10254 }, - { (u8 *) &gBattleAnimSpriteSheet_255, 0x200, 10255 }, - { (u8 *) &gBattleAnimSpriteSheet_256, 0x800, 10256 }, - { (u8 *) &gBattleAnimSpriteSheet_257, 0x280, 10257 }, - { (u8 *) &gBattleAnimSpriteSheet_258, 0x200, 10258 }, - { (u8 *) &gBattleAnimSpriteSheet_149, 0x200, 10259 }, - { (u8 *) &gBattleAnimSpriteSheet_260, 0x400, 10260 }, - { (u8 *) &gBattleAnimSpriteSheet_261, 0x200, 10261 }, - { (u8 *) &gBattleAnimSpriteSheet_262, 0x200, 10262 }, - { (u8 *) &gBattleAnimSpriteSheet_263, 0x80, 10263 }, - { (u8 *) &gBattleAnimSpriteSheet_264, 0x20, 10264 }, - { (u8 *) &gBattleAnimSpriteSheet_264, 0x20, 10265 }, - { (u8 *) &gBattleAnimSpriteSheet_266, 0x80, 10266 }, - { (u8 *) &gBattleAnimSpriteSheet_212, 0x800, 10267 }, - { (u8 *) &gBattleAnimSpriteSheet_264, 0x20, 10268 }, - { (u8 *) &gBattleAnimSpriteSheet_269, 0x80, 10269 }, - { (u8 *) &gBattleAnimSpriteSheet_270, 0x400, 10270 }, - { (u8 *) &gBattleAnimSpriteSheet_271, 0x80, 10271 }, - { (u8 *) &gBattleAnimSpriteSheet_272, 0x800, 10272 }, - { (u8 *) &gBattleAnimSpriteSheet_273, 0x20, 10273 }, - { (u8 *) &gBattleAnimSpriteSheet_274, 0x800, 10274 }, - { (u8 *) &gBattleAnimSpriteSheet_275, 0x800, 10275 }, - { (u8 *) &gBattleAnimSpriteSheet_276, 0x800, 10276 }, - { (u8 *) &gBattleAnimSpriteSheet_277, 0x1000, 10277 }, - { (u8 *) &gBattleAnimSpriteSheet_278, 0x800, 10278 }, - { (u8 *) &gBattleAnimSpriteSheet_279, 0xA0, 10279 }, - { (u8 *) &gBattleAnimSpriteSheet_280, 0x800, 10280 }, - { (u8 *) &gBattleAnimSpriteSheet_281, 0x200, 10281 }, - { (u8 *) &gBattleAnimSpriteSheet_282, 0x600, 10282 }, - { (u8 *) &gBattleAnimSpriteSheet_283, 0x200, 10283 }, - { (u8 *) &gBattleAnimSpriteSheet_284, 0x800, 10284 }, - { (u8 *) &gBattleAnimSpriteSheet_285, 0x200, 10285 }, - { (u8 *) &gBattleAnimSpriteSheet_183, 0x800, 10286 }, - { (u8 *) &gBattleAnimSpriteSheet_056, 0x1000, 10287 }, - { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10288 }, + { gBattleAnimSpriteSheet_000, 0x200, 10000 }, + { gBattleAnimSpriteSheet_001, 0x300, 10001 }, + { gBattleAnimSpriteSheet_002, 0x200, 10002 }, + { gBattleAnimSpriteSheet_003, 0x100, 10003 }, + { gBattleAnimSpriteSheet_004, 0x200, 10004 }, + { gBattleAnimSpriteSheet_005, 0x400, 10005 }, + { gBattleAnimSpriteSheet_006, 0x180, 10006 }, + { gBattleAnimSpriteSheet_007, 0x800, 10007 }, + { gBattleAnimSpriteSheet_008, 0x20, 10008 }, + { gBattleAnimSpriteSheet_009, 0x400, 10009 }, + { gBattleAnimSpriteSheet_010, 0x1200, 10010 }, + { gBattleAnimSpriteSheet_011, 0x180, 10011 }, + { gBattleAnimSpriteSheet_012, 0x80, 10012 }, + { gBattleAnimSpriteSheet_013, 0x80, 10013 }, + { gBattleAnimSpriteSheet_014, 0x280, 10014 }, + { gBattleAnimSpriteSheet_015, 0x80, 10015 }, + { gBattleAnimSpriteSheet_016, 0x100, 10016 }, + { gBattleAnimSpriteSheet_017, 0x20, 10017 }, + { gBattleAnimSpriteSheet_018, 0x80, 10018 }, + { gBattleAnimSpriteSheet_019, 0x400, 10019 }, + { gBattleAnimSpriteSheet_020, 0x200, 10020 }, + { gBattleAnimSpriteSheet_021, 0xA00, 10021 }, + { gBattleAnimSpriteSheet_021, 0xA00, 10022 }, + { gBattleAnimSpriteSheet_023, 0x380, 10023 }, + { gBattleAnimSpriteSheet_024, 0x300, 10024 }, + { gBattleAnimSpriteSheet_025, 0xA00, 10025 }, + { gBattleAnimSpriteSheet_026, 0xA00, 10026 }, + { gBattleAnimSpriteSheet_027, 0xA00, 10027 }, + { gBattleAnimSpriteSheet_028, 0xA00, 10028 }, + { gBattleAnimSpriteSheet_029, 0xA00, 10029 }, + { gBattleAnimSpriteSheet_030, 0xA00, 10030 }, + { gBattleAnimSpriteSheet_031, 0xE00, 10031 }, + { gBattleAnimSpriteSheet_032, 0x380, 10032 }, + { gBattleAnimSpriteSheet_033, 0x1000, 10033 }, + { gBattleAnimSpriteSheet_034, 0x800, 10034 }, + { gBattleAnimSpriteSheet_035, 0xA00, 10035 }, + { gBattleAnimSpriteSheet_036, 0x800, 10036 }, + { gBattleAnimSpriteSheet_037, 0xA00, 10037 }, + { gBattleAnimSpriteSheet_038, 0xA00, 10038 }, + { gBattleAnimSpriteSheet_039, 0xA00, 10039 }, + { gBattleAnimSpriteSheet_040, 0xA00, 10040 }, + { gBattleAnimSpriteSheet_041, 0xA00, 10041 }, + { gBattleAnimSpriteSheet_042, 0xA00, 10042 }, + { gBattleAnimSpriteSheet_043, 0xA00, 10043 }, + { gBattleAnimSpriteSheet_044, 0xA00, 10044 }, + { gBattleAnimSpriteSheet_045, 0xA00, 10045 }, + { gBattleAnimSpriteSheet_046, 0x1000, 10046 }, + { gBattleAnimSpriteSheet_046, 0x1000, 10047 }, + { gBattleAnimSpriteSheet_048, 0x1000, 10048 }, + { gBattleAnimSpriteSheet_048, 0x1000, 10049 }, + { gBattleAnimSpriteSheet_050, 0x200, 10050 }, + { gBattleAnimSpriteSheet_051, 0x200, 10051 }, + { gBattleAnimSpriteSheet_052, 0x200, 10052 }, + { gBattleAnimSpriteSheet_053, 0x800, 10053 }, + { gBattleAnimSpriteSheet_054, 0x80, 10054 }, + { gBattleAnimSpriteSheet_055, 0x200, 10055 }, + { gBattleAnimSpriteSheet_056, 0x1000, 10056 }, + { gBattleAnimSpriteSheet_057, 0x180, 10057 }, + { gBattleAnimSpriteSheet_058, 0xC00, 10058 }, + { gBattleAnimSpriteSheet_059, 0x100, 10059 }, + { gBattleAnimSpriteSheet_060, 0x40, 10060 }, + { gBattleAnimSpriteSheet_061, 0x180, 10061 }, + { gBattleAnimSpriteSheet_062, 0x800, 10062 }, + { gBattleAnimSpriteSheet_063, 0x480, 10063 }, + { gBattleAnimSpriteSheet_064, 0x200, 10064 }, + { gBattleAnimSpriteSheet_065, 0x200, 10065 }, + { gBattleAnimSpriteSheet_066, 0x100, 10066 }, + { gBattleAnimSpriteSheet_065, 0x200, 10067 }, + { gBattleAnimSpriteSheet_065, 0x200, 10068 }, + { gBattleAnimSpriteSheet_065, 0x200, 10069 }, + { gBattleAnimSpriteSheet_070, 0x200, 10070 }, + { gBattleAnimSpriteSheet_071, 0xA00, 10071 }, + { gBattleAnimSpriteSheet_072, 0x300, 10072 }, + { gBattleAnimSpriteSheet_073, 0x180, 10073 }, + { gBattleAnimSpriteSheet_074, 0xA0, 10074 }, + { gBattleAnimSpriteSheet_075, 0x700, 10075 }, + { gBattleAnimSpriteSheet_076, 0x400, 10076 }, + { gBattleAnimSpriteSheet_077, 0x200, 10077 }, + { gBattleAnimSpriteSheet_078, 0x300, 10078 }, + { gBattleAnimSpriteSheet_079, 0xC00, 10079 }, + { gBattleAnimSpriteSheet_080, 0xA00, 10080 }, + { gBattleAnimSpriteSheet_081, 0x80, 10081 }, + { gBattleAnimSpriteSheet_082, 0x40, 10082 }, + { gBattleAnimSpriteSheet_083, 0xE00, 10083 }, + { gBattleAnimSpriteSheet_084, 0xE00, 10084 }, + { gBattleAnimSpriteSheet_085, 0x280, 10085 }, + { gBattleAnimSpriteSheet_086, 0x200, 10086 }, + { gBattleAnimSpriteSheet_087, 0x80, 10087 }, + { gBattleAnimSpriteSheet_088, 0xC0, 10088 }, + { gBattleAnimSpriteSheet_089, 0xA00, 10089 }, + { gBattleAnimSpriteSheet_090, 0x200, 10090 }, + { gBattleAnimSpriteSheet_091, 0x180, 10091 }, + { gBattleAnimSpriteSheet_092, 0x80, 10092 }, + { gBattleAnimSpriteSheet_093, 0x1000, 10093 }, + { gBattleAnimSpriteSheet_094, 0xA00, 10094 }, + { gBattleAnimSpriteSheet_095, 0x180, 10095 }, + { gBattleAnimSpriteSheet_096, 0x380, 10096 }, + { gBattleAnimSpriteSheet_097, 0xC00, 10097 }, + { gBattleAnimSpriteSheet_098, 0x200, 10098 }, + { gBattleAnimSpriteSheet_099, 0x200, 10099 }, + { gBattleAnimSpriteSheet_100, 0x200, 10100 }, + { gBattleAnimSpriteSheet_101, 0x200, 10101 }, + { gBattleAnimSpriteSheet_102, 0x400, 10102 }, + { gBattleAnimSpriteSheet_103, 0x80, 10103 }, + { gBattleAnimSpriteSheet_104, 0x400, 10104 }, + { gBattleAnimSpriteSheet_105, 0xC00, 10105 }, + { gBattleAnimSpriteSheet_106, 0x200, 10106 }, + { gBattleAnimSpriteSheet_107, 0x1000, 10107 }, + { gBattleAnimSpriteSheet_108, 0xA00, 10108 }, + { gBattleAnimSpriteSheet_109, 0x20, 10109 }, + { gBattleAnimSpriteSheet_110, 0xE00, 10110 }, + { gBattleAnimSpriteSheet_111, 0x80, 10111 }, + { gBattleAnimSpriteSheet_112, 0xA00, 10112 }, + { gBattleAnimSpriteSheet_113, 0x400, 10113 }, + { gBattleAnimSpriteSheet_114, 0x200, 10114 }, + { gBattleAnimSpriteSheet_115, 0x700, 10115 }, + { gBattleAnimSpriteSheet_116, 0x800, 10116 }, + { gBattleAnimSpriteSheet_117, 0xA00, 10117 }, + { gBattleAnimSpriteSheet_118, 0x600, 10118 }, + { gBattleAnimSpriteSheet_119, 0x800, 10119 }, + { gBattleAnimSpriteSheet_120, 0x200, 10120 }, + { gBattleAnimSpriteSheet_121, 0x40, 10121 }, + { gBattleAnimSpriteSheet_122, 0x180, 10122 }, + { gBattleAnimSpriteSheet_123, 0x600, 10123 }, + { gBattleAnimSpriteSheet_124, 0x600, 10124 }, + { gBattleAnimSpriteSheet_125, 0x200, 10125 }, + { gBattleAnimSpriteSheet_126, 0x80, 10126 }, + { gBattleAnimSpriteSheet_127, 0x200, 10127 }, + { gBattleAnimSpriteSheet_128, 0x800, 10128 }, + { gBattleAnimSpriteSheet_129, 0x80, 10129 }, + { gBattleAnimSpriteSheet_130, 0xA00, 10130 }, + { gBattleAnimSpriteSheet_131, 0x280, 10131 }, + { gBattleAnimSpriteSheet_132, 0x280, 10132 }, + { gBattleAnimSpriteSheet_133, 0x100, 10133 }, + { gBattleAnimSpriteSheet_134, 0x200, 10134 }, + { gBattleAnimSpriteSheet_135, 0x200, 10135 }, + { gBattleAnimSpriteSheet_136, 0x20, 10136 }, + { gBattleAnimSpriteSheet_137, 0xA00, 10137 }, + { gBattleAnimSpriteSheet_138, 0x800, 10138 }, + { gBattleAnimSpriteSheet_139, 0x800, 10139 }, + { gBattleAnimSpriteSheet_140, 0xC0, 10140 }, + { gBattleAnimSpriteSheet_141, 0x1C0, 10141 }, + { gBattleAnimSpriteSheet_142, 0x100, 10142 }, + { gBattleAnimSpriteSheet_143, 0x800, 10143 }, + { gBattleAnimSpriteSheet_144, 0x200, 10144 }, + { gBattleAnimSpriteSheet_145, 0x800, 10145 }, + { gBattleAnimSpriteSheet_146, 0x180, 10146 }, + { gBattleAnimSpriteSheet_147, 0x180, 10147 }, + { gBattleAnimSpriteSheet_148, 0x200, 10148 }, + { gBattleAnimSpriteSheet_149, 0x200, 10149 }, + { gBattleAnimSpriteSheet_150, 0x180, 10150 }, + { gBattleAnimSpriteSheet_151, 0x400, 10151 }, + { gBattleAnimSpriteSheet_152, 0x80, 10152 }, + { gBattleAnimSpriteSheet_153, 0x100, 10153 }, + { gBattleAnimSpriteSheet_154, 0x100, 10154 }, + { gBattleAnimSpriteSheet_155, 0x140, 10155 }, + { gBattleAnimSpriteSheet_156, 0x800, 10156 }, + { gBattleAnimSpriteSheet_157, 0x200, 10157 }, + { gBattleAnimSpriteSheet_158, 0x100, 10158 }, + { gBattleAnimSpriteSheet_159, 0xA0, 10159 }, + { gBattleAnimSpriteSheet_160, 0x100, 10160 }, + { gBattleAnimSpriteSheet_161, 0x80, 10161 }, + { gBattleAnimSpriteSheet_162, 0x300, 10162 }, + { gBattleAnimSpriteSheet_163, 0x100, 10163 }, + { gBattleAnimSpriteSheet_163, 0x100, 10164 }, + { gBattleAnimSpriteSheet_163, 0x100, 10165 }, + { gBattleAnimSpriteSheet_166, 0x800, 10166 }, + { gBattleAnimSpriteSheet_166, 0x800, 10167 }, + { gBattleAnimSpriteSheet_166, 0x800, 10168 }, + { gBattleAnimSpriteSheet_166, 0x800, 10169 }, + { gBattleAnimSpriteSheet_166, 0x800, 10170 }, + { gBattleAnimSpriteSheet_171, 0x80, 10171 }, + { gBattleAnimSpriteSheet_144, 0x200, 10172 }, + { gBattleAnimSpriteSheet_173, 0x200, 10173 }, + { gBattleAnimSpriteSheet_174, 0x200, 10174 }, + { gBattleAnimSpriteSheet_175, 0x80, 10175 }, + { gBattleAnimSpriteSheet_176, 0x200, 10176 }, + { gBattleAnimSpriteSheet_177, 0x500, 10177 }, + { gBattleAnimSpriteSheet_178, 0x800, 10178 }, + { gBattleAnimSpriteSheet_179, 0x400, 10179 }, + { gBattleAnimSpriteSheet_180, 0x20, 10180 }, + { gBattleAnimSpriteSheet_181, 0x800, 10181 }, + { gBattleAnimSpriteSheet_182, 0x100, 10182 }, + { gBattleAnimSpriteSheet_183, 0x800, 10183 }, + { gBattleAnimSpriteSheet_184, 0x400, 10184 }, + { gBattleAnimSpriteSheet_185, 0xA00, 10185 }, + { gBattleAnimSpriteSheet_186, 0x1000, 10186 }, + { gBattleAnimSpriteSheet_187, 0x800, 10187 }, + { gBattleAnimSpriteSheet_188, 0x400, 10188 }, + { gBattleAnimSpriteSheet_189, 0x200, 10189 }, + { gBattleAnimSpriteSheet_190, 0x800, 10190 }, + { gBattleAnimSpriteSheet_191, 0x800, 10191 }, + { gBattleAnimSpriteSheet_192, 0x800, 10192 }, + { gBattleAnimSpriteSheet_193, 0x200, 10193 }, + { gBattleAnimSpriteSheet_194, 0x800, 10194 }, + { gBattleAnimSpriteSheet_195, 0x200, 10195 }, + { gBattleAnimSpriteSheet_196, 0x800, 10196 }, + { gBattleAnimSpriteSheet_197, 0x200, 10197 }, + { gBattleAnimSpriteSheet_198, 0x800, 10198 }, + { gBattleAnimSpriteSheet_199, 0x400, 10199 }, + { gBattleAnimSpriteSheet_200, 0x200, 10200 }, + { gBattleAnimSpriteSheet_201, 0xA80, 10201 }, + { gBattleAnimSpriteSheet_202, 0x600, 10202 }, + { gBattleAnimSpriteSheet_203, 0x800, 10203 }, + { gBattleAnimSpriteSheet_204, 0x200, 10204 }, + { gBattleAnimSpriteSheet_205, 0x600, 10205 }, + { gBattleAnimSpriteSheet_206, 0x800, 10206 }, + { gBattleAnimSpriteSheet_207, 0x180, 10207 }, + { gBattleAnimSpriteSheet_208, 0x800, 10208 }, + { gBattleAnimSpriteSheet_209, 0x800, 10209 }, + { gBattleAnimSpriteSheet_210, 0x80, 10210 }, + { gBattleAnimSpriteSheet_211, 0x80, 10211 }, + { gBattleAnimSpriteSheet_212, 0x800, 10212 }, + { gBattleAnimSpriteSheet_213, 0x800, 10213 }, + { gBattleAnimSpriteSheet_214, 0x600, 10214 }, + { gBattleAnimSpriteSheet_215, 0x600, 10215 }, + { gBattleAnimSpriteSheet_210, 0x80, 10216 }, + { gBattleAnimSpriteSheet_217, 0x80, 10217 }, + { gBattleAnimSpriteSheet_218, 0x180, 10218 }, + { gBattleAnimSpriteSheet_210, 0x80, 10219 }, + { gBattleAnimSpriteSheet_220, 0x200, 10220 }, + { gBattleAnimSpriteSheet_221, 0x400, 10221 }, + { gBattleAnimSpriteSheet_222, 0xA00, 10222 }, + { gBattleAnimSpriteSheet_223, 0x800, 10223 }, + { gBattleAnimSpriteSheet_224, 0x200, 10224 }, + { gBattleAnimSpriteSheet_225, 0x400, 10225 }, + { gBattleAnimSpriteSheet_226, 0x80, 10226 }, + { gBattleAnimSpriteSheet_227, 0x800, 10227 }, + { gBattleAnimSpriteSheet_228, 0x200, 10228 }, + { gBattleAnimSpriteSheet_229, 0x300, 10229 }, + { gBattleAnimSpriteSheet_230, 0x800, 10230 }, + { gBattleAnimSpriteSheet_231, 0x380, 10231 }, + { gBattleAnimSpriteSheet_232, 0x800, 10232 }, + { gBattleAnimSpriteSheet_233, 0xC0, 10233 }, + { gBattleAnimSpriteSheet_234, 0x800, 10234 }, + { gBattleAnimSpriteSheet_235, 0x60, 10235 }, + { gBattleAnimSpriteSheet_235, 0x60, 10236 }, + { gBattleAnimSpriteSheet_235, 0x60, 10237 }, + { gBattleAnimSpriteSheet_238, 0x80, 10238 }, + { gBattleAnimSpriteSheet_239, 0x180, 10239 }, + { gBattleAnimSpriteSheet_240, 0x180, 10240 }, + { gBattleAnimSpriteSheet_241, 0x200, 10241 }, + { gBattleAnimSpriteSheet_242, 0x200, 10242 }, + { gBattleAnimSpriteSheet_243, 0x20, 10243 }, + { gBattleAnimSpriteSheet_244, 0x400, 10244 }, + { gBattleAnimSpriteSheet_245, 0x600, 10245 }, + { gBattleAnimSpriteSheet_246, 0x1000, 10246 }, + { gBattleAnimSpriteSheet_247, 0x400, 10247 }, + { gBattleAnimSpriteSheet_248, 0x20, 10248 }, + { gBattleAnimSpriteSheet_249, 0x80, 10249 }, + { gBattleAnimSpriteSheet_250, 0x800, 10250 }, + { gBattleAnimSpriteSheet_251, 0x80, 10251 }, + { gBattleAnimSpriteSheet_252, 0x200, 10252 }, + { gBattleAnimSpriteSheet_253, 0x400, 10253 }, + { gBattleAnimSpriteSheet_254, 0x200, 10254 }, + { gBattleAnimSpriteSheet_255, 0x200, 10255 }, + { gBattleAnimSpriteSheet_256, 0x800, 10256 }, + { gBattleAnimSpriteSheet_257, 0x280, 10257 }, + { gBattleAnimSpriteSheet_258, 0x200, 10258 }, + { gBattleAnimSpriteSheet_149, 0x200, 10259 }, + { gBattleAnimSpriteSheet_260, 0x400, 10260 }, + { gBattleAnimSpriteSheet_261, 0x200, 10261 }, + { gBattleAnimSpriteSheet_262, 0x200, 10262 }, + { gBattleAnimSpriteSheet_263, 0x80, 10263 }, + { gBattleAnimSpriteSheet_264, 0x20, 10264 }, + { gBattleAnimSpriteSheet_264, 0x20, 10265 }, + { gBattleAnimSpriteSheet_266, 0x80, 10266 }, + { gBattleAnimSpriteSheet_212, 0x800, 10267 }, + { gBattleAnimSpriteSheet_264, 0x20, 10268 }, + { gBattleAnimSpriteSheet_269, 0x80, 10269 }, + { gBattleAnimSpriteSheet_270, 0x400, 10270 }, + { gBattleAnimSpriteSheet_271, 0x80, 10271 }, + { gBattleAnimSpriteSheet_272, 0x800, 10272 }, + { gBattleAnimSpriteSheet_273, 0x20, 10273 }, + { gBattleAnimSpriteSheet_274, 0x800, 10274 }, + { gBattleAnimSpriteSheet_275, 0x800, 10275 }, + { gBattleAnimSpriteSheet_276, 0x800, 10276 }, + { gBattleAnimSpriteSheet_277, 0x1000, 10277 }, + { gBattleAnimSpriteSheet_278, 0x800, 10278 }, + { gBattleAnimSpriteSheet_279, 0xA0, 10279 }, + { gBattleAnimSpriteSheet_280, 0x800, 10280 }, + { gBattleAnimSpriteSheet_281, 0x200, 10281 }, + { gBattleAnimSpriteSheet_282, 0x600, 10282 }, + { gBattleAnimSpriteSheet_283, 0x200, 10283 }, + { gBattleAnimSpriteSheet_284, 0x800, 10284 }, + { gBattleAnimSpriteSheet_285, 0x200, 10285 }, + { gBattleAnimSpriteSheet_183, 0x800, 10286 }, + { gBattleAnimSpriteSheet_056, 0x1000, 10287 }, + { gBattleAnimSpriteSheet_163, 0x100, 10288 }, }; const struct CompressedSpritePalette gBattleAnimPaletteTable[] = { - { (u8 *) &gBattleAnimSpritePalette_000, 10000 }, - { (u8 *) &gBattleAnimSpritePalette_001, 10001 }, - { (u8 *) &gBattleAnimSpritePalette_002, 10002 }, - { (u8 *) &gBattleAnimSpritePalette_003, 10003 }, - { (u8 *) &gBattleAnimSpritePalette_004, 10004 }, - { (u8 *) &gBattleAnimSpritePalette_005, 10005 }, - { (u8 *) &gBattleAnimSpritePalette_006, 10006 }, - { (u8 *) &gBattleAnimSpritePalette_007, 10007 }, - { (u8 *) &gBattleAnimSpritePalette_008, 10008 }, - { (u8 *) &gBattleAnimSpritePalette_009, 10009 }, - { (u8 *) &gBattleAnimSpritePalette_010, 10010 }, - { (u8 *) &gBattleAnimSpritePalette_011, 10011 }, - { (u8 *) &gBattleAnimSpritePalette_012, 10012 }, - { (u8 *) &gBattleAnimSpritePalette_013, 10013 }, - { (u8 *) &gBattleAnimSpritePalette_014, 10014 }, - { (u8 *) &gBattleAnimSpritePalette_015, 10015 }, - { (u8 *) &gBattleAnimSpritePalette_016, 10016 }, - { (u8 *) &gBattleAnimSpritePalette_016, 10017 }, - { (u8 *) &gBattleAnimSpritePalette_018, 10018 }, - { (u8 *) &gBattleAnimSpritePalette_019, 10019 }, - { (u8 *) &gBattleAnimSpritePalette_020, 10020 }, - { (u8 *) &gBattleAnimSpritePalette_021, 10021 }, - { (u8 *) &gBattleAnimSpritePalette_022, 10022 }, - { (u8 *) &gBattleAnimSpritePalette_023, 10023 }, - { (u8 *) &gBattleAnimSpritePalette_024, 10024 }, - { (u8 *) &gBattleAnimSpritePalette_025, 10025 }, - { (u8 *) &gBattleAnimSpritePalette_026, 10026 }, - { (u8 *) &gBattleAnimSpritePalette_027, 10027 }, - { (u8 *) &gBattleAnimSpritePalette_028, 10028 }, - { (u8 *) &gBattleAnimSpritePalette_029, 10029 }, - { (u8 *) &gBattleAnimSpritePalette_030, 10030 }, - { (u8 *) &gBattleAnimSpritePalette_031, 10031 }, - { (u8 *) &gBattleAnimSpritePalette_032, 10032 }, - { (u8 *) &gBattleAnimSpritePalette_033, 10033 }, - { (u8 *) &gBattleAnimSpritePalette_033, 10034 }, - { (u8 *) &gBattleAnimSpritePalette_033, 10035 }, - { (u8 *) &gBattleAnimSpritePalette_036, 10036 }, - { (u8 *) &gBattleAnimSpritePalette_036, 10037 }, - { (u8 *) &gBattleAnimSpritePalette_038, 10038 }, - { (u8 *) &gBattleAnimSpritePalette_039, 10039 }, - { (u8 *) &gBattleAnimSpritePalette_038, 10040 }, - { (u8 *) &gBattleAnimSpritePalette_038, 10041 }, - { (u8 *) &gBattleAnimSpritePalette_042, 10042 }, - { (u8 *) &gBattleAnimSpritePalette_043, 10043 }, - { (u8 *) &gBattleAnimSpritePalette_044, 10044 }, - { (u8 *) &gBattleAnimSpritePalette_045, 10045 }, - { (u8 *) &gBattleAnimSpritePalette_046, 10046 }, - { (u8 *) &gBattleAnimSpritePalette_047, 10046 }, - { (u8 *) &gBattleAnimSpritePalette_048, 10048 }, - { (u8 *) &gBattleAnimSpritePalette_049, 10049 }, - { (u8 *) &gBattleAnimSpritePalette_050, 10050 }, - { (u8 *) &gBattleAnimSpritePalette_050, 10051 }, - { (u8 *) &gBattleAnimSpritePalette_050, 10052 }, - { (u8 *) &gBattleAnimSpritePalette_026, 10053 }, - { (u8 *) &gBattleAnimSpritePalette_054, 10054 }, - { (u8 *) &gBattleAnimSpritePalette_050, 10055 }, - { (u8 *) &gBattleAnimSpritePalette_056, 10056 }, - { (u8 *) &gBattleAnimSpritePalette_057, 10057 }, - { (u8 *) &gBattleAnimSpritePalette_058, 10058 }, - { (u8 *) &gBattleAnimSpritePalette_059, 10059 }, - { (u8 *) &gBattleAnimSpritePalette_060, 10060 }, - { (u8 *) &gBattleAnimSpritePalette_061, 10061 }, - { (u8 *) &gBattleAnimSpritePalette_062, 10062 }, - { (u8 *) &gBattleAnimSpritePalette_063, 10063 }, - { (u8 *) &gBattleAnimSpritePalette_064, 10064 }, - { (u8 *) &gBattleAnimSpritePalette_065, 10065 }, - { (u8 *) &gBattleAnimSpritePalette_066, 10066 }, - { (u8 *) &gBattleAnimSpritePalette_067, 10067 }, - { (u8 *) &gBattleAnimSpritePalette_068, 10068 }, - { (u8 *) &gBattleAnimSpritePalette_065, 10069 }, - { (u8 *) &gBattleAnimSpritePalette_070, 10070 }, - { (u8 *) &gBattleAnimSpritePalette_070, 10071 }, - { (u8 *) &gBattleAnimSpritePalette_072, 10072 }, - { (u8 *) &gBattleAnimSpritePalette_073, 10073 }, - { (u8 *) &gBattleAnimSpritePalette_074, 10074 }, - { (u8 *) &gBattleAnimSpritePalette_075, 10075 }, - { (u8 *) &gBattleAnimSpritePalette_076, 10076 }, - { (u8 *) &gBattleAnimSpritePalette_076, 10077 }, - { (u8 *) &gBattleAnimSpritePalette_078, 10078 }, - { (u8 *) &gBattleAnimSpritePalette_078, 10079 }, - { (u8 *) &gBattleAnimSpritePalette_080, 10080 }, - { (u8 *) &gBattleAnimSpritePalette_081, 10081 }, - { (u8 *) &gBattleAnimSpritePalette_082, 10082 }, - { (u8 *) &gBattleAnimSpritePalette_083, 10083 }, - { (u8 *) &gBattleAnimSpritePalette_084, 10084 }, - { (u8 *) &gBattleAnimSpritePalette_085, 10085 }, - { (u8 *) &gBattleAnimSpritePalette_086, 10086 }, - { (u8 *) &gBattleAnimSpritePalette_087, 10087 }, - { (u8 *) &gBattleAnimSpritePalette_088, 10088 }, - { (u8 *) &gBattleAnimSpritePalette_089, 10089 }, - { (u8 *) &gBattleAnimSpritePalette_090, 10090 }, - { (u8 *) &gBattleAnimSpritePalette_091, 10091 }, - { (u8 *) &gBattleAnimSpritePalette_092, 10092 }, - { (u8 *) &gBattleAnimSpritePalette_093, 10093 }, - { (u8 *) &gBattleAnimSpritePalette_094, 10094 }, - { (u8 *) &gBattleAnimSpritePalette_095, 10095 }, - { (u8 *) &gBattleAnimSpritePalette_096, 10096 }, - { (u8 *) &gBattleAnimSpritePalette_097, 10097 }, - { (u8 *) &gBattleAnimSpritePalette_094, 10098 }, - { (u8 *) &gBattleAnimSpritePalette_099, 10099 }, - { (u8 *) &gBattleAnimSpritePalette_100, 10100 }, - { (u8 *) &gBattleAnimSpritePalette_101, 10101 }, - { (u8 *) &gBattleAnimSpritePalette_101, 10102 }, - { (u8 *) &gBattleAnimSpritePalette_103, 10103 }, - { (u8 *) &gBattleAnimSpritePalette_104, 10104 }, - { (u8 *) &gBattleAnimSpritePalette_105, 10105 }, - { (u8 *) &gBattleAnimSpritePalette_105, 10106 }, - { (u8 *) &gBattleAnimSpritePalette_107, 10107 }, - { (u8 *) &gBattleAnimSpritePalette_107, 10108 }, - { (u8 *) &gBattleAnimSpritePalette_109, 10109 }, - { (u8 *) &gBattleAnimSpritePalette_109, 10110 }, - { (u8 *) &gBattleAnimSpritePalette_111, 10111 }, - { (u8 *) &gBattleAnimSpritePalette_112, 10112 }, - { (u8 *) &gBattleAnimSpritePalette_113, 10113 }, - { (u8 *) &gBattleAnimSpritePalette_114, 10114 }, - { (u8 *) &gBattleAnimSpritePalette_115, 10115 }, - { (u8 *) &gBattleAnimSpritePalette_116, 10116 }, - { (u8 *) &gBattleAnimSpritePalette_117, 10117 }, - { (u8 *) &gBattleAnimSpritePalette_118, 10118 }, - { (u8 *) &gBattleAnimSpritePalette_119, 10119 }, - { (u8 *) &gBattleAnimSpritePalette_120, 10120 }, - { (u8 *) &gBattleAnimSpritePalette_121, 10121 }, - { (u8 *) &gBattleAnimSpritePalette_122, 10122 }, - { (u8 *) &gBattleAnimSpritePalette_122, 10123 }, - { (u8 *) &gBattleAnimSpritePalette_124, 10124 }, - { (u8 *) &gBattleAnimSpritePalette_125, 10125 }, - { (u8 *) &gBattleAnimSpritePalette_126, 10126 }, - { (u8 *) &gBattleAnimSpritePalette_127, 10127 }, - { (u8 *) &gBattleAnimSpritePalette_128, 10128 }, - { (u8 *) &gBattleAnimSpritePalette_128, 10129 }, - { (u8 *) &gBattleAnimSpritePalette_130, 10130 }, - { (u8 *) &gBattleAnimSpritePalette_130, 10131 }, - { (u8 *) &gBattleAnimSpritePalette_132, 10132 }, - { (u8 *) &gBattleAnimSpritePalette_133, 10133 }, - { (u8 *) &gBattleAnimSpritePalette_133, 10134 }, - { (u8 *) &gBattleAnimSpritePalette_135, 10135 }, - { (u8 *) &gBattleAnimSpritePalette_136, 10136 }, - { (u8 *) &gBattleAnimSpritePalette_135, 10137 }, - { (u8 *) &gBattleAnimSpritePalette_135, 10138 }, - { (u8 *) &gBattleAnimSpritePalette_139, 10139 }, - { (u8 *) &gBattleAnimSpritePalette_140, 10140 }, - { (u8 *) &gBattleAnimSpritePalette_141, 10141 }, - { (u8 *) &gBattleAnimSpritePalette_141, 10142 }, - { (u8 *) &gBattleAnimSpritePalette_143, 10143 }, - { (u8 *) &gBattleAnimSpritePalette_144, 10144 }, - { (u8 *) &gBattleAnimSpritePalette_139, 10145 }, - { (u8 *) &gBattleAnimSpritePalette_115, 10146 }, - { (u8 *) &gBattleAnimSpritePalette_147, 10147 }, - { (u8 *) &gBattleAnimSpritePalette_148, 10148 }, - { (u8 *) &gBattleAnimSpritePalette_148, 10149 }, - { (u8 *) &gBattleAnimSpritePalette_150, 10150 }, - { (u8 *) &gBattleAnimSpritePalette_150, 10151 }, - { (u8 *) &gBattleAnimSpritePalette_152, 10152 }, - { (u8 *) &gBattleAnimSpritePalette_153, 10153 }, - { (u8 *) &gBattleAnimSpritePalette_154, 10154 }, - { (u8 *) &gBattleAnimSpritePalette_155, 10155 }, - { (u8 *) &gBattleAnimSpritePalette_156, 10156 }, - { (u8 *) &gBattleAnimSpritePalette_157, 10157 }, - { (u8 *) &gBattleAnimSpritePalette_158, 10158 }, - { (u8 *) &gBattleAnimSpritePalette_159, 10159 }, - { (u8 *) &gBattleAnimSpritePalette_160, 10160 }, - { (u8 *) &gBattleAnimSpritePalette_161, 10161 }, - { (u8 *) &gBattleAnimSpritePalette_162, 10162 }, - { (u8 *) &gBattleAnimSpritePalette_163, 10163 }, - { (u8 *) &gBattleAnimSpritePalette_164, 10164 }, - { (u8 *) &gBattleAnimSpritePalette_165, 10165 }, - { (u8 *) &gBattleAnimSpritePalette_166, 10166 }, - { (u8 *) &gBattleAnimSpritePalette_167, 10167 }, - { (u8 *) &gBattleAnimSpritePalette_168, 10168 }, - { (u8 *) &gBattleAnimSpritePalette_169, 10169 }, - { (u8 *) &gBattleAnimSpritePalette_170, 10170 }, - { (u8 *) &gBattleAnimSpritePalette_171, 10171 }, - { (u8 *) &gBattleAnimSpritePalette_172, 10172 }, - { (u8 *) &gBattleAnimSpritePalette_001, 10173 }, - { (u8 *) &gBattleAnimSpritePalette_174, 10174 }, - { (u8 *) &gBattleAnimSpritePalette_175, 10175 }, - { (u8 *) &gBattleAnimSpritePalette_176, 10176 }, - { (u8 *) &gBattleAnimSpritePalette_177, 10177 }, - { (u8 *) &gBattleAnimSpritePalette_178, 10178 }, - { (u8 *) &gBattleAnimSpritePalette_179, 10179 }, - { (u8 *) &gBattleAnimSpritePalette_179, 10180 }, - { (u8 *) &gBattleAnimSpritePalette_179, 10181 }, - { (u8 *) &gBattleAnimSpritePalette_182, 10182 }, - { (u8 *) &gBattleAnimSpritePalette_183, 10183 }, - { (u8 *) &gBattleAnimSpritePalette_184, 10184 }, - { (u8 *) &gBattleAnimSpritePalette_185, 10185 }, - { (u8 *) &gBattleAnimSpritePalette_186, 10186 }, - { (u8 *) &gBattleAnimSpritePalette_187, 10187 }, - { (u8 *) &gBattleAnimSpritePalette_188, 10188 }, - { (u8 *) &gBattleAnimSpritePalette_189, 10189 }, - { (u8 *) &gBattleAnimSpritePalette_190, 10190 }, - { (u8 *) &gBattleAnimSpritePalette_191, 10191 }, - { (u8 *) &gBattleAnimSpritePalette_192, 10192 }, - { (u8 *) &gBattleAnimSpritePalette_193, 10193 }, - { (u8 *) &gBattleAnimSpritePalette_194, 10194 }, - { (u8 *) &gBattleAnimSpritePalette_195, 10195 }, - { (u8 *) &gBattleAnimSpritePalette_196, 10196 }, - { (u8 *) &gBattleAnimSpritePalette_197, 10197 }, - { (u8 *) &gBattleAnimSpritePalette_198, 10198 }, - { (u8 *) &gBattleAnimSpritePalette_199, 10199 }, - { (u8 *) &gBattleAnimSpritePalette_200, 10200 }, - { (u8 *) &gBattleAnimSpritePalette_201, 10201 }, - { (u8 *) &gBattleAnimSpritePalette_202, 10202 }, - { (u8 *) &gBattleAnimSpritePalette_203, 10203 }, - { (u8 *) &gBattleAnimSpritePalette_204, 10204 }, - { (u8 *) &gBattleAnimSpritePalette_205, 10205 }, - { (u8 *) &gBattleAnimSpritePalette_206, 10206 }, - { (u8 *) &gBattleAnimSpritePalette_207, 10207 }, - { (u8 *) &gBattleAnimSpritePalette_167, 10208 }, - { (u8 *) &gBattleAnimSpritePalette_209, 10209 }, - { (u8 *) &gBattleAnimSpritePalette_210, 10210 }, - { (u8 *) &gBattleAnimSpritePalette_211, 10211 }, - { (u8 *) &gBattleAnimSpritePalette_211, 10212 }, - { (u8 *) &gBattleAnimSpritePalette_211, 10213 }, - { (u8 *) &gBattleAnimSpritePalette_064, 10214 }, - { (u8 *) &gBattleAnimSpritePalette_215, 10215 }, - { (u8 *) &gBattleAnimSpritePalette_216, 10216 }, - { (u8 *) &gBattleAnimSpritePalette_217, 10217 }, - { (u8 *) &gBattleAnimSpritePalette_218, 10218 }, - { (u8 *) &gBattleAnimSpritePalette_219, 10219 }, - { (u8 *) &gBattleAnimSpritePalette_220, 10220 }, - { (u8 *) &gBattleAnimSpritePalette_221, 10221 }, - { (u8 *) &gBattleAnimSpritePalette_222, 10222 }, - { (u8 *) &gBattleAnimSpritePalette_223, 10223 }, - { (u8 *) &gBattleAnimSpritePalette_224, 10224 }, - { (u8 *) &gBattleAnimSpritePalette_225, 10225 }, - { (u8 *) &gBattleAnimSpritePalette_226, 10226 }, - { (u8 *) &gBattleAnimSpritePalette_226, 10227 }, - { (u8 *) &gBattleAnimSpritePalette_228, 10228 }, - { (u8 *) &gBattleAnimSpritePalette_229, 10229 }, - { (u8 *) &gBattleAnimSpritePalette_230, 10230 }, - { (u8 *) &gBattleAnimSpritePalette_231, 10231 }, - { (u8 *) &gBattleAnimSpritePalette_231, 10232 }, - { (u8 *) &gBattleAnimSpritePalette_233, 10233 }, - { (u8 *) &gBattleAnimSpritePalette_234, 10234 }, - { (u8 *) &gBattleAnimSpritePalette_235, 10235 }, - { (u8 *) &gBattleAnimSpritePalette_236, 10236 }, - { (u8 *) &gBattleAnimSpritePalette_237, 10237 }, - { (u8 *) &gBattleAnimSpritePalette_238, 10238 }, - { (u8 *) &gBattleAnimSpritePalette_239, 10239 }, - { (u8 *) &gBattleAnimSpritePalette_240, 10240 }, - { (u8 *) &gBattleAnimSpritePalette_241, 10241 }, - { (u8 *) &gBattleAnimSpritePalette_242, 10242 }, - { (u8 *) &gBattleAnimSpritePalette_243, 10243 }, - { (u8 *) &gBattleAnimSpritePalette_244, 10244 }, - { (u8 *) &gBattleAnimSpritePalette_245, 10245 }, - { (u8 *) &gBattleAnimSpritePalette_245, 10246 }, - { (u8 *) &gBattleAnimSpritePalette_064, 10247 }, - { (u8 *) &gBattleAnimSpritePalette_248, 10248 }, - { (u8 *) &gBattleAnimSpritePalette_249, 10249 }, - { (u8 *) &gBattleAnimSpritePalette_249, 10250 }, - { (u8 *) &gBattleAnimSpritePalette_251, 10251 }, - { (u8 *) &gBattleAnimSpritePalette_252, 10252 }, - { (u8 *) &gBattleAnimSpritePalette_253, 10253 }, - { (u8 *) &gBattleAnimSpritePalette_254, 10254 }, - { (u8 *) &gBattleAnimSpritePalette_255, 10255 }, - { (u8 *) &gBattleAnimSpritePalette_256, 10256 }, - { (u8 *) &gBattleAnimSpritePalette_257, 10257 }, - { (u8 *) &gBattleAnimSpritePalette_258, 10258 }, - { (u8 *) &gBattleAnimSpritePalette_259, 10259 }, - { (u8 *) &gBattleAnimSpritePalette_260, 10260 }, - { (u8 *) &gBattleAnimSpritePalette_261, 10261 }, - { (u8 *) &gBattleAnimSpritePalette_262, 10262 }, - { (u8 *) &gBattleAnimSpritePalette_263, 10263 }, - { (u8 *) &gBattleAnimSpritePalette_264, 10264 }, - { (u8 *) &gBattleAnimSpritePalette_265, 10265 }, - { (u8 *) &gBattleAnimSpritePalette_266, 10266 }, - { (u8 *) &gBattleAnimSpritePalette_267, 10267 }, - { (u8 *) &gBattleAnimSpritePalette_268, 10268 }, - { (u8 *) &gBattleAnimSpritePalette_269, 10269 }, - { (u8 *) &gBattleAnimSpritePalette_270, 10270 }, - { (u8 *) &gBattleAnimSpritePalette_271, 10271 }, - { (u8 *) &gBattleAnimSpritePalette_272, 10272 }, - { (u8 *) &gBattleAnimSpritePalette_272, 10273 }, - { (u8 *) &gBattleAnimSpritePalette_274, 10274 }, - { (u8 *) &gBattleAnimSpritePalette_274, 10275 }, - { (u8 *) &gBattleAnimSpritePalette_274, 10276 }, - { (u8 *) &gBattleAnimSpritePalette_277, 10277 }, - { (u8 *) &gBattleAnimSpritePalette_278, 10278 }, - { (u8 *) &gBattleAnimSpritePalette_279, 10279 }, - { (u8 *) &gBattleAnimSpritePalette_280, 10280 }, - { (u8 *) &gBattleAnimSpritePalette_281, 10281 }, - { (u8 *) &gBattleAnimSpritePalette_282, 10282 }, - { (u8 *) &gBattleAnimSpritePalette_283, 10283 }, - { (u8 *) &gBattleAnimSpritePalette_284, 10284 }, - { (u8 *) &gBattleAnimSpritePalette_285, 10285 }, - { (u8 *) &gBattleAnimSpritePalette_286, 10286 }, - { (u8 *) &gBattleAnimSpritePalette_287, 10287 }, - { (u8 *) &gBattleAnimSpritePalette_288, 10288 }, + { gBattleAnimSpritePalette_000, 10000 }, + { gBattleAnimSpritePalette_001, 10001 }, + { gBattleAnimSpritePalette_002, 10002 }, + { gBattleAnimSpritePalette_003, 10003 }, + { gBattleAnimSpritePalette_004, 10004 }, + { gBattleAnimSpritePalette_005, 10005 }, + { gBattleAnimSpritePalette_006, 10006 }, + { gBattleAnimSpritePalette_007, 10007 }, + { gBattleAnimSpritePalette_008, 10008 }, + { gBattleAnimSpritePalette_009, 10009 }, + { gBattleAnimSpritePalette_010, 10010 }, + { gBattleAnimSpritePalette_011, 10011 }, + { gBattleAnimSpritePalette_012, 10012 }, + { gBattleAnimSpritePalette_013, 10013 }, + { gBattleAnimSpritePalette_014, 10014 }, + { gBattleAnimSpritePalette_015, 10015 }, + { gBattleAnimSpritePalette_016, 10016 }, + { gBattleAnimSpritePalette_016, 10017 }, + { gBattleAnimSpritePalette_018, 10018 }, + { gBattleAnimSpritePalette_019, 10019 }, + { gBattleAnimSpritePalette_020, 10020 }, + { gBattleAnimSpritePalette_021, 10021 }, + { gBattleAnimSpritePalette_022, 10022 }, + { gBattleAnimSpritePalette_023, 10023 }, + { gBattleAnimSpritePalette_024, 10024 }, + { gBattleAnimSpritePalette_025, 10025 }, + { gBattleAnimSpritePalette_026, 10026 }, + { gBattleAnimSpritePalette_027, 10027 }, + { gBattleAnimSpritePalette_028, 10028 }, + { gBattleAnimSpritePalette_029, 10029 }, + { gBattleAnimSpritePalette_030, 10030 }, + { gBattleAnimSpritePalette_031, 10031 }, + { gBattleAnimSpritePalette_032, 10032 }, + { gBattleAnimSpritePalette_033, 10033 }, + { gBattleAnimSpritePalette_033, 10034 }, + { gBattleAnimSpritePalette_033, 10035 }, + { gBattleAnimSpritePalette_036, 10036 }, + { gBattleAnimSpritePalette_036, 10037 }, + { gBattleAnimSpritePalette_038, 10038 }, + { gBattleAnimSpritePalette_039, 10039 }, + { gBattleAnimSpritePalette_038, 10040 }, + { gBattleAnimSpritePalette_038, 10041 }, + { gBattleAnimSpritePalette_042, 10042 }, + { gBattleAnimSpritePalette_043, 10043 }, + { gBattleAnimSpritePalette_044, 10044 }, + { gBattleAnimSpritePalette_045, 10045 }, + { gBattleAnimSpritePalette_046, 10046 }, + { gBattleAnimSpritePalette_047, 10046 }, + { gBattleAnimSpritePalette_048, 10048 }, + { gBattleAnimSpritePalette_049, 10049 }, + { gBattleAnimSpritePalette_050, 10050 }, + { gBattleAnimSpritePalette_050, 10051 }, + { gBattleAnimSpritePalette_050, 10052 }, + { gBattleAnimSpritePalette_026, 10053 }, + { gBattleAnimSpritePalette_054, 10054 }, + { gBattleAnimSpritePalette_050, 10055 }, + { gBattleAnimSpritePalette_056, 10056 }, + { gBattleAnimSpritePalette_057, 10057 }, + { gBattleAnimSpritePalette_058, 10058 }, + { gBattleAnimSpritePalette_059, 10059 }, + { gBattleAnimSpritePalette_060, 10060 }, + { gBattleAnimSpritePalette_061, 10061 }, + { gBattleAnimSpritePalette_062, 10062 }, + { gBattleAnimSpritePalette_063, 10063 }, + { gBattleAnimSpritePalette_064, 10064 }, + { gBattleAnimSpritePalette_065, 10065 }, + { gBattleAnimSpritePalette_066, 10066 }, + { gBattleAnimSpritePalette_067, 10067 }, + { gBattleAnimSpritePalette_068, 10068 }, + { gBattleAnimSpritePalette_065, 10069 }, + { gBattleAnimSpritePalette_070, 10070 }, + { gBattleAnimSpritePalette_070, 10071 }, + { gBattleAnimSpritePalette_072, 10072 }, + { gBattleAnimSpritePalette_073, 10073 }, + { gBattleAnimSpritePalette_074, 10074 }, + { gBattleAnimSpritePalette_075, 10075 }, + { gBattleAnimSpritePalette_076, 10076 }, + { gBattleAnimSpritePalette_076, 10077 }, + { gBattleAnimSpritePalette_078, 10078 }, + { gBattleAnimSpritePalette_078, 10079 }, + { gBattleAnimSpritePalette_080, 10080 }, + { gBattleAnimSpritePalette_081, 10081 }, + { gBattleAnimSpritePalette_082, 10082 }, + { gBattleAnimSpritePalette_083, 10083 }, + { gBattleAnimSpritePalette_084, 10084 }, + { gBattleAnimSpritePalette_085, 10085 }, + { gBattleAnimSpritePalette_086, 10086 }, + { gBattleAnimSpritePalette_087, 10087 }, + { gBattleAnimSpritePalette_088, 10088 }, + { gBattleAnimSpritePalette_089, 10089 }, + { gBattleAnimSpritePalette_090, 10090 }, + { gBattleAnimSpritePalette_091, 10091 }, + { gBattleAnimSpritePalette_092, 10092 }, + { gBattleAnimSpritePalette_093, 10093 }, + { gBattleAnimSpritePalette_094, 10094 }, + { gBattleAnimSpritePalette_095, 10095 }, + { gBattleAnimSpritePalette_096, 10096 }, + { gBattleAnimSpritePalette_097, 10097 }, + { gBattleAnimSpritePalette_094, 10098 }, + { gBattleAnimSpritePalette_099, 10099 }, + { gBattleAnimSpritePalette_100, 10100 }, + { gBattleAnimSpritePalette_101, 10101 }, + { gBattleAnimSpritePalette_101, 10102 }, + { gBattleAnimSpritePalette_103, 10103 }, + { gBattleAnimSpritePalette_104, 10104 }, + { gBattleAnimSpritePalette_105, 10105 }, + { gBattleAnimSpritePalette_105, 10106 }, + { gBattleAnimSpritePalette_107, 10107 }, + { gBattleAnimSpritePalette_107, 10108 }, + { gBattleAnimSpritePalette_109, 10109 }, + { gBattleAnimSpritePalette_109, 10110 }, + { gBattleAnimSpritePalette_111, 10111 }, + { gBattleAnimSpritePalette_112, 10112 }, + { gBattleAnimSpritePalette_113, 10113 }, + { gBattleAnimSpritePalette_114, 10114 }, + { gBattleAnimSpritePalette_115, 10115 }, + { gBattleAnimSpritePalette_116, 10116 }, + { gBattleAnimSpritePalette_117, 10117 }, + { gBattleAnimSpritePalette_118, 10118 }, + { gBattleAnimSpritePalette_119, 10119 }, + { gBattleAnimSpritePalette_120, 10120 }, + { gBattleAnimSpritePalette_121, 10121 }, + { gBattleAnimSpritePalette_122, 10122 }, + { gBattleAnimSpritePalette_122, 10123 }, + { gBattleAnimSpritePalette_124, 10124 }, + { gBattleAnimSpritePalette_125, 10125 }, + { gBattleAnimSpritePalette_126, 10126 }, + { gBattleAnimSpritePalette_127, 10127 }, + { gBattleAnimSpritePalette_128, 10128 }, + { gBattleAnimSpritePalette_128, 10129 }, + { gBattleAnimSpritePalette_130, 10130 }, + { gBattleAnimSpritePalette_130, 10131 }, + { gBattleAnimSpritePalette_132, 10132 }, + { gBattleAnimSpritePalette_133, 10133 }, + { gBattleAnimSpritePalette_133, 10134 }, + { gBattleAnimSpritePalette_135, 10135 }, + { gBattleAnimSpritePalette_136, 10136 }, + { gBattleAnimSpritePalette_135, 10137 }, + { gBattleAnimSpritePalette_135, 10138 }, + { gBattleAnimSpritePalette_139, 10139 }, + { gBattleAnimSpritePalette_140, 10140 }, + { gBattleAnimSpritePalette_141, 10141 }, + { gBattleAnimSpritePalette_141, 10142 }, + { gBattleAnimSpritePalette_143, 10143 }, + { gBattleAnimSpritePalette_144, 10144 }, + { gBattleAnimSpritePalette_139, 10145 }, + { gBattleAnimSpritePalette_115, 10146 }, + { gBattleAnimSpritePalette_147, 10147 }, + { gBattleAnimSpritePalette_148, 10148 }, + { gBattleAnimSpritePalette_148, 10149 }, + { gBattleAnimSpritePalette_150, 10150 }, + { gBattleAnimSpritePalette_150, 10151 }, + { gBattleAnimSpritePalette_152, 10152 }, + { gBattleAnimSpritePalette_153, 10153 }, + { gBattleAnimSpritePalette_154, 10154 }, + { gBattleAnimSpritePalette_155, 10155 }, + { gBattleAnimSpritePalette_156, 10156 }, + { gBattleAnimSpritePalette_157, 10157 }, + { gBattleAnimSpritePalette_158, 10158 }, + { gBattleAnimSpritePalette_159, 10159 }, + { gBattleAnimSpritePalette_160, 10160 }, + { gBattleAnimSpritePalette_161, 10161 }, + { gBattleAnimSpritePalette_162, 10162 }, + { gBattleAnimSpritePalette_163, 10163 }, + { gBattleAnimSpritePalette_164, 10164 }, + { gBattleAnimSpritePalette_165, 10165 }, + { gBattleAnimSpritePalette_166, 10166 }, + { gBattleAnimSpritePalette_167, 10167 }, + { gBattleAnimSpritePalette_168, 10168 }, + { gBattleAnimSpritePalette_169, 10169 }, + { gBattleAnimSpritePalette_170, 10170 }, + { gBattleAnimSpritePalette_171, 10171 }, + { gBattleAnimSpritePalette_172, 10172 }, + { gBattleAnimSpritePalette_001, 10173 }, + { gBattleAnimSpritePalette_174, 10174 }, + { gBattleAnimSpritePalette_175, 10175 }, + { gBattleAnimSpritePalette_176, 10176 }, + { gBattleAnimSpritePalette_177, 10177 }, + { gBattleAnimSpritePalette_178, 10178 }, + { gBattleAnimSpritePalette_179, 10179 }, + { gBattleAnimSpritePalette_179, 10180 }, + { gBattleAnimSpritePalette_179, 10181 }, + { gBattleAnimSpritePalette_182, 10182 }, + { gBattleAnimSpritePalette_183, 10183 }, + { gBattleAnimSpritePalette_184, 10184 }, + { gBattleAnimSpritePalette_185, 10185 }, + { gBattleAnimSpritePalette_186, 10186 }, + { gBattleAnimSpritePalette_187, 10187 }, + { gBattleAnimSpritePalette_188, 10188 }, + { gBattleAnimSpritePalette_189, 10189 }, + { gBattleAnimSpritePalette_190, 10190 }, + { gBattleAnimSpritePalette_191, 10191 }, + { gBattleAnimSpritePalette_192, 10192 }, + { gBattleAnimSpritePalette_193, 10193 }, + { gBattleAnimSpritePalette_194, 10194 }, + { gBattleAnimSpritePalette_195, 10195 }, + { gBattleAnimSpritePalette_196, 10196 }, + { gBattleAnimSpritePalette_197, 10197 }, + { gBattleAnimSpritePalette_198, 10198 }, + { gBattleAnimSpritePalette_199, 10199 }, + { gBattleAnimSpritePalette_200, 10200 }, + { gBattleAnimSpritePalette_201, 10201 }, + { gBattleAnimSpritePalette_202, 10202 }, + { gBattleAnimSpritePalette_203, 10203 }, + { gBattleAnimSpritePalette_204, 10204 }, + { gBattleAnimSpritePalette_205, 10205 }, + { gBattleAnimSpritePalette_206, 10206 }, + { gBattleAnimSpritePalette_207, 10207 }, + { gBattleAnimSpritePalette_167, 10208 }, + { gBattleAnimSpritePalette_209, 10209 }, + { gBattleAnimSpritePalette_210, 10210 }, + { gBattleAnimSpritePalette_211, 10211 }, + { gBattleAnimSpritePalette_211, 10212 }, + { gBattleAnimSpritePalette_211, 10213 }, + { gBattleAnimSpritePalette_064, 10214 }, + { gBattleAnimSpritePalette_215, 10215 }, + { gBattleAnimSpritePalette_216, 10216 }, + { gBattleAnimSpritePalette_217, 10217 }, + { gBattleAnimSpritePalette_218, 10218 }, + { gBattleAnimSpritePalette_219, 10219 }, + { gBattleAnimSpritePalette_220, 10220 }, + { gBattleAnimSpritePalette_221, 10221 }, + { gBattleAnimSpritePalette_222, 10222 }, + { gBattleAnimSpritePalette_223, 10223 }, + { gBattleAnimSpritePalette_224, 10224 }, + { gBattleAnimSpritePalette_225, 10225 }, + { gBattleAnimSpritePalette_226, 10226 }, + { gBattleAnimSpritePalette_226, 10227 }, + { gBattleAnimSpritePalette_228, 10228 }, + { gBattleAnimSpritePalette_229, 10229 }, + { gBattleAnimSpritePalette_230, 10230 }, + { gBattleAnimSpritePalette_231, 10231 }, + { gBattleAnimSpritePalette_231, 10232 }, + { gBattleAnimSpritePalette_233, 10233 }, + { gBattleAnimSpritePalette_234, 10234 }, + { gBattleAnimSpritePalette_235, 10235 }, + { gBattleAnimSpritePalette_236, 10236 }, + { gBattleAnimSpritePalette_237, 10237 }, + { gBattleAnimSpritePalette_238, 10238 }, + { gBattleAnimSpritePalette_239, 10239 }, + { gBattleAnimSpritePalette_240, 10240 }, + { gBattleAnimSpritePalette_241, 10241 }, + { gBattleAnimSpritePalette_242, 10242 }, + { gBattleAnimSpritePalette_243, 10243 }, + { gBattleAnimSpritePalette_244, 10244 }, + { gBattleAnimSpritePalette_245, 10245 }, + { gBattleAnimSpritePalette_245, 10246 }, + { gBattleAnimSpritePalette_064, 10247 }, + { gBattleAnimSpritePalette_248, 10248 }, + { gBattleAnimSpritePalette_249, 10249 }, + { gBattleAnimSpritePalette_249, 10250 }, + { gBattleAnimSpritePalette_251, 10251 }, + { gBattleAnimSpritePalette_252, 10252 }, + { gBattleAnimSpritePalette_253, 10253 }, + { gBattleAnimSpritePalette_254, 10254 }, + { gBattleAnimSpritePalette_255, 10255 }, + { gBattleAnimSpritePalette_256, 10256 }, + { gBattleAnimSpritePalette_257, 10257 }, + { gBattleAnimSpritePalette_258, 10258 }, + { gBattleAnimSpritePalette_259, 10259 }, + { gBattleAnimSpritePalette_260, 10260 }, + { gBattleAnimSpritePalette_261, 10261 }, + { gBattleAnimSpritePalette_262, 10262 }, + { gBattleAnimSpritePalette_263, 10263 }, + { gBattleAnimSpritePalette_264, 10264 }, + { gBattleAnimSpritePalette_265, 10265 }, + { gBattleAnimSpritePalette_266, 10266 }, + { gBattleAnimSpritePalette_267, 10267 }, + { gBattleAnimSpritePalette_268, 10268 }, + { gBattleAnimSpritePalette_269, 10269 }, + { gBattleAnimSpritePalette_270, 10270 }, + { gBattleAnimSpritePalette_271, 10271 }, + { gBattleAnimSpritePalette_272, 10272 }, + { gBattleAnimSpritePalette_272, 10273 }, + { gBattleAnimSpritePalette_274, 10274 }, + { gBattleAnimSpritePalette_274, 10275 }, + { gBattleAnimSpritePalette_274, 10276 }, + { gBattleAnimSpritePalette_277, 10277 }, + { gBattleAnimSpritePalette_278, 10278 }, + { gBattleAnimSpritePalette_279, 10279 }, + { gBattleAnimSpritePalette_280, 10280 }, + { gBattleAnimSpritePalette_281, 10281 }, + { gBattleAnimSpritePalette_282, 10282 }, + { gBattleAnimSpritePalette_283, 10283 }, + { gBattleAnimSpritePalette_284, 10284 }, + { gBattleAnimSpritePalette_285, 10285 }, + { gBattleAnimSpritePalette_286, 10286 }, + { gBattleAnimSpritePalette_287, 10287 }, + { gBattleAnimSpritePalette_288, 10288 }, }; const struct BattleAnimBackground gBattleAnimBackgroundTable[] = diff --git a/src/battle/battle_anim_812C144.c b/src/battle/battle_anim_812C144.c index 6edc56549..4614f9aa9 100644 --- a/src/battle/battle_anim_812C144.c +++ b/src/battle/battle_anim_812C144.c @@ -31,35 +31,17 @@ extern u16 gBattle_BG2_X; extern u16 gBattle_BG2_Y; extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7220; -extern const struct SpriteTemplate gSpriteTemplate_8402500; -extern const struct SpriteTemplate gSpriteTemplate_84028CC; -extern const struct SpriteTemplate gSpriteTemplate_840294C; -extern const struct SpriteTemplate gSpriteTemplate_84029AC; extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7C18[]; extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7BEC[]; -extern const union AffineAnimCmd gUnknown_08402400[]; -extern const union AffineAnimCmd gUnknown_084024B0[]; -extern const union AffineAnimCmd gUnknown_08402518[]; -extern const union AffineAnimCmd gUnknown_08402540[]; -extern const union AffineAnimCmd gUnknown_08402590[]; -extern const union AffineAnimCmd gUnknown_08402610[]; -extern const union AffineAnimCmd gUnknown_08402750[]; -extern const union AffineAnimCmd gUnknown_084028AC[]; -extern const union AffineAnimCmd gUnknown_084029DC[]; extern const u32 gUnknown_08D2AA98[]; extern const u32 gUnknown_08D2A9E0[]; extern const u16 gUnknown_08D2AA80[]; -extern const s8 gUnknown_084025C0[]; -extern const s8 gUnknown_08402604[]; -extern const u8 gUnknown_08402608[]; -extern const struct SpriteTemplate gBattleAnimSpriteTemplate_84025EC; extern const u8 gUnknown_08D2E014[]; extern const u8 gUnknown_08D2E170[]; extern const u16 gUnknown_08D2E150[]; extern u8 gBattleMonForms[]; extern u8 gBankSpriteIds[]; extern u16 gBattlerPartyIndexes[]; -extern s16 gUnknown_084028E4[]; extern u8 sub_8046234(s16 x, s16 y, u8 a3); extern void sub_80DA48C(struct Sprite *); @@ -116,9 +98,1082 @@ static void sub_8131408(u8 taskId); static void sub_81315C8(struct Sprite *sprite); static void sub_8131810(u8 taskId); static void sub_8131838(struct Sprite *sprite); +static void sub_812C144(struct Sprite *sprite); +static void sub_812C220(struct Sprite *sprite); +static void sub_812C2BC(struct Sprite *sprite); +static void sub_812C358(struct Sprite *sprite); +static void sub_812C720(struct Sprite *sprite); +static void sub_812C80C(struct Sprite *sprite); +static void sub_812C848(struct Sprite *sprite); +static void sub_812C908(struct Sprite *sprite); +static void sub_812C990(struct Sprite *sprite); +static void sub_812CAFC(struct Sprite *sprite); +static void sub_812CC28(struct Sprite *sprite); +static void sub_812CCE8(struct Sprite *sprite); +static void sub_812D294(struct Sprite *sprite); +static void sub_812D3AC(struct Sprite *sprite); +static void sub_812D4B4(struct Sprite *sprite); +static void sub_812D588(struct Sprite *sprite); +static void sub_812DEAC(struct Sprite *sprite); +static void sub_812D724(struct Sprite *sprite); +static void sub_812E4F0(struct Sprite *sprite); +static void sub_812E7A0(struct Sprite *sprite); +static void sub_812EA4C(struct Sprite *sprite); +static void sub_812EC78(struct Sprite *sprite); +static void sub_812ED84(struct Sprite *sprite); +static void sub_812EEA4(struct Sprite *sprite); +static void sub_812F88C(struct Sprite *sprite); +static void sub_812F948(struct Sprite *sprite); +static void sub_812FF94(struct Sprite *sprite); +static void sub_81300F4(struct Sprite *sprite); +static void sub_81304DC(struct Sprite *sprite); +static void sub_813051C(struct Sprite *sprite); +static void sub_81307B0(struct Sprite *sprite); +static void sub_8130A2C(struct Sprite *sprite); +static void sub_8130AEC(struct Sprite *sprite); +static void sub_8130F5C(struct Sprite *sprite); +static void sub_8131264(struct Sprite *sprite); +extern void sub_80D1FDC(struct Sprite *sprite);// kiss_fountain.c +static void sub_8131564(struct Sprite *sprite); + +/*static*/ void sub_8131EB8(struct Sprite *sprite);// rest not yet decompiled +/*static*/ void sub_8132370(struct Sprite *sprite); +/*static*/ void sub_81323E0(struct Sprite *sprite); + +const union AnimCmd gSpriteAnim_8402164[] = +{ + ANIMCMD_FRAME(0 , 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_840217C[] = +{ + gSpriteAnim_8402164, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402180 = +{ + .tileTag = 10137, + .paletteTag = 10137, + .oam = &gOamData_837E054, + .anims = gSpriteAnimTable_840217C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80793C4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402198 = +{ + .tileTag = 10016, + .paletteTag = 10016, + .oam = &gOamData_837DF54, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812C144, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84021B0 = +{ + .tileTag = 10017, + .paletteTag = 10017, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80794A8, +}; + +const union AnimCmd gSpriteAnim_84021C8[] = +{ + ANIMCMD_FRAME(0, 40), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(32, 40), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_84021D8[] = +{ + gSpriteAnim_84021C8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84021DC = +{ + .tileTag = 10190, + .paletteTag = 10190, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_84021D8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80793C4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84021F4 = +{ + .tileTag = 10191, + .paletteTag = 10191, + .oam = &gOamData_837E05C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812C220, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_840220C = +{ + .tileTag = 10189, + .paletteTag = 10189, + .oam = &gOamData_837DF94, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812C2BC, +}; + +const union AffineAnimCmd gSpriteAffineAnim_8402224[] = +{ + AFFINEANIMCMD_FRAME(0x180, 0x180, 0, 0), + AFFINEANIMCMD_FRAME(0xFFE0, 0x18, 0, 5), + AFFINEANIMCMD_FRAME(0x18, 0xFFE0, 0, 5), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd gSpriteAffineAnim_8402244[] = +{ + AFFINEANIMCMD_FRAME(0x30, 0x30, 0, 0), + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 6), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_840225C[] = +{ + gSpriteAffineAnim_8402224, + gSpriteAffineAnim_8402244, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402264 = +{ + .tileTag = 10187, + .paletteTag = 10187, + .oam = &gOamData_837E11C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_840225C, + .callback = sub_812C358, +}; +const struct SpriteTemplate gBattleAnimSpriteTemplate_840227C = +{ + .tileTag = 10152, + .paletteTag = 10152, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812C720, +}; -void sub_812C144(struct Sprite *sprite) +const union AnimCmd gSpriteAnim_8402294[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_84022AC[] = +{ + gSpriteAnim_8402294, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84022B0 = +{ + .tileTag = 10027, + .paletteTag = 10027, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_84022AC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812C80C, +}; + +const union AnimCmd gSpriteAnim_84022C8[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_84022D0[] = +{ + gSpriteAnim_84022C8, +}; + +const union AffineAnimCmd gSpriteAffineAnim_84022D4[] = +{ + AFFINEANIMCMD_FRAME(0xFFF9, 0xFFF9, -3, 16), + AFFINEANIMCMD_FRAME(0x7, 0x7, 3, 16), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_84022EC[] = +{ + gSpriteAffineAnim_84022D4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84022F0 = +{ + .tileTag = 10228, + .paletteTag = 10228, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_84022D0, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_84022EC, + .callback = sub_812C848, +}; + +const union AnimCmd gSpriteAnim_8402308[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(16, 16), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_840231C[] = +{ + gSpriteAnim_8402308, +}; + +const union AffineAnimCmd gSpriteAffineAnim_8402320[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_FRAME(0xFFE0, 0xFFE0, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_8402338[] = +{ + gSpriteAffineAnim_8402320, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_840233C = +{ + .tileTag = 10192, + .paletteTag = 10192, + .oam = &gOamData_837DFF4, + .anims = gSpriteAnimTable_840231C, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_8402338, + .callback = sub_812C908, +}; + +const union AffineAnimCmd gSpriteAffineAnim_8402354[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x180, 0, 0), + AFFINEANIMCMD_FRAME(0x10, 0x0, 0, 20), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_840236C[] = +{ + AFFINEANIMCMD_FRAME(0x140, 0x180, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF0, 0x0, 0, 19), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_8402384[] = +{ + gSpriteAffineAnim_8402354, + gSpriteAffineAnim_840236C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_840238C = +{ + .tileTag = 10227, + .paletteTag = 10227, + .oam = &gOamData_837DFFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_8402384, + .callback = sub_812C990, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84023A4 = +{ + .tileTag = 10247, + .paletteTag = 10247, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812CAFC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84023BC = +{ + .tileTag = 10247, + .paletteTag = 10247, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812CC28, +}; + +const union AnimCmd gSpriteAnim_84023D4[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(8, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_84023E4[] = +{ + gSpriteAnim_84023D4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84023E8 = +{ + .tileTag = 10229, + .paletteTag = 10229, + .oam = &gOamData_837DF54, + .anims = gSpriteAnimTable_84023E4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812CCE8, +}; + +const union AffineAnimCmd gUnknown_08402400[] = +{ + AFFINEANIMCMD_FRAME(-12, 8, 0, 4), + AFFINEANIMCMD_FRAME(20, -20, 0, 4), + AFFINEANIMCMD_FRAME(-8, 12, 0, 4), + AFFINEANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_8402420[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_8402428[] = +{ + gSpriteAnim_8402420, +}; + +const union AffineAnimCmd gSpriteAffineAnim_840242C[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 5, 40), + AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 10), + AFFINEANIMCMD_FRAME(0x0, 0x0, 15, 10), + AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 40), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_8402454[] = +{ + gSpriteAffineAnim_840242C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402458 = +{ + .tileTag = 10230, + .paletteTag = 10230, + .oam = &gOamData_837DFFC, + .anims = gSpriteAnimTable_8402428, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_8402454, + .callback = sub_812D294, +}; + +const union AnimCmd gSpriteAnim_8402470[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_FRAME(32, 3, .hFlip = TRUE), + ANIMCMD_FRAME(16, 3, .hFlip = TRUE), + ANIMCMD_FRAME(0, 3, .hFlip = TRUE), + ANIMCMD_LOOP(1), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_8402494[] = +{ + gSpriteAnim_8402470, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402498 = +{ + .tileTag = 10234, + .paletteTag = 10234, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_8402494, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80793C4, +}; + +const union AffineAnimCmd gUnknown_084024B0[] = +{ + AFFINEANIMCMD_FRAME(-12, 20, 0, 8), + AFFINEANIMCMD_FRAME(12, -20, 0, 8), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_END, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84024D0 = +{ + .tileTag = 10226, + .paletteTag = 10226, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812D3AC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84024E8 = +{ + .tileTag = 10233, + .paletteTag = 10233, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812D4B4, +}; + +const struct SpriteTemplate gSpriteTemplate_8402500 = +{ + .tileTag = 10233, + .paletteTag = 10233, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812D588, +}; + +const union AffineAnimCmd gUnknown_08402518[] = +{ + AFFINEANIMCMD_FRAME(8, -8, 0, 12), + AFFINEANIMCMD_FRAME(-16, 16, 0, 12), + AFFINEANIMCMD_FRAME(8, -8, 0, 12), + AFFINEANIMCMD_LOOP(1), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_08402540[] = +{ + AFFINEANIMCMD_FRAME(0, 6, 0, 20), + AFFINEANIMCMD_FRAME(0, 0, 0, 20), + AFFINEANIMCMD_FRAME(0, -18, 0, 6), + AFFINEANIMCMD_FRAME(-18, -18, 0, 3), + AFFINEANIMCMD_FRAME(0, 0, 0, 15), + AFFINEANIMCMD_FRAME(4, 4, 0, 13), + AFFINEANIMCMD_END, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402578 = +{ + .tileTag = 10236, + .paletteTag = 10236, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812D724, +}; + +const union AffineAnimCmd gUnknown_08402590[] = +{ + AFFINEANIMCMD_FRAME(0, 6, 0, 20), + AFFINEANIMCMD_FRAME(0, 0, 0, 20), + AFFINEANIMCMD_FRAME(7, -30, 0, 6), + AFFINEANIMCMD_FRAME(0, 0, 0, 20), + AFFINEANIMCMD_FRAME(-2, 3, 0, 20), + AFFINEANIMCMD_END, +}; + +const s8 gUnknown_084025C0[] = +{ + 0xE8, + 0x18, + 0xFC, + 0x00, +}; + +const union AnimCmd gSpriteAnim_84025C4[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(4, 6), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_84025D0[] = +{ + ANIMCMD_FRAME(8, 6), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_84025D8[] = +{ + ANIMCMD_FRAME(12, 6), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_84025E0[] = +{ + gSpriteAnim_84025C4, + gSpriteAnim_84025D0, + gSpriteAnim_84025D8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84025EC = +{ + .tileTag = 10241, + .paletteTag = 10241, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_84025E0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812DEAC, +}; + +const s8 gUnknown_08402604[] = +{ + 0x78, + 0x50, + 0x28, + 0x00, +}; + +const u8 gUnknown_08402608[] = +{ + 0, + 0, + 0, + 0, + 50, +}; + +const union AffineAnimCmd gUnknown_08402610[] = +{ + AFFINEANIMCMD_FRAME(0, -15, 0, 7), + AFFINEANIMCMD_FRAME(0, 15, 0, 7), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_END, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402630 = +{ + .tileTag = 10087, + .paletteTag = 10087, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812E4F0, +}; + +const union AnimCmd gSpriteAnim_8402648[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(3, 8), + ANIMCMD_FRAME(3, 8, .vFlip = TRUE), + ANIMCMD_FRAME(2, 8, .vFlip = TRUE), + ANIMCMD_FRAME(0, 8, .vFlip = TRUE), + ANIMCMD_FRAME(1, 8, .vFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_840266C[] = +{ + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_FRAME(1, 8, .hFlip = TRUE), + ANIMCMD_FRAME(2, 8, .hFlip = TRUE), + ANIMCMD_FRAME(3, 8, .hFlip = TRUE), + ANIMCMD_FRAME(3, 8, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(2, 8, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(0, 8, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(1, 8, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_8402690[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_8402698[] = +{ + gSpriteAnim_8402648, + gSpriteAnim_840266C, + gSpriteAnim_8402690, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84026A4 = +{ + .tileTag = 10238, + .paletteTag = 10238, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_8402698, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812E7A0, +}; + +const u16 gUnknown_4026BC[] = INCBIN_U16("graphics/unknown/unknown_4026BC.gbapal"); + +const union AnimCmd gSpriteAnim_84026DC[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(4, 9), + ANIMCMD_FRAME(8, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_84026EC[] = +{ + gSpriteAnim_84026DC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84026F0 = +{ + .tileTag = 10239, + .paletteTag = 10239, + .oam = &gOamData_837DF2C, + .anims = gSpriteAnimTable_84026EC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812EA4C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402708 = +{ + .tileTag = 10240, + .paletteTag = 10240, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812EC78, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402720 = +{ + .tileTag = 10227, + .paletteTag = 10227, + .oam = &gOamData_837DFFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_8402384, + .callback = sub_812ED84, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402738 = +{ + .tileTag = 10236, + .paletteTag = 10236, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812EEA4, +}; + +const union AffineAnimCmd gUnknown_08402750[] = +{ + AFFINEANIMCMD_FRAME(16, 0, 0, 4), + AFFINEANIMCMD_FRAME(0, -3, 0, 16), + AFFINEANIMCMD_FRAME(4, 0, 0, 4), + AFFINEANIMCMD_FRAME(0, 0, 0, 24), + AFFINEANIMCMD_FRAME(-5, 3, 0, 16), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_8402780[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 8), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gSpriteAffineAnim_84027A0[] = +{ + AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 8), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gSpriteAffineAnim_84027C0[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 8), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_84027E0[] = +{ + gSpriteAffineAnim_8402780, + gSpriteAffineAnim_84027A0, + gSpriteAffineAnim_84027C0, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84027EC = +{ + .tileTag = 10242, + .paletteTag = 10242, + .oam = &gOamData_837DF94, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_84027E0, + .callback = sub_812F88C, +}; + +const union AffineAnimCmd gSpriteAffineAnim_8402804[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFA, 0, 16), + AFFINEANIMCMD_FRAME(0x4, 0x6, 0, 16), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gSpriteAffineAnim_8402824[] = +{ + AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x6, 0, 16), + AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFA, 0, 16), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gSpriteAffineAnim_8402844[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x6, 0, 16), + AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFA, 0, 16), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gSpriteAffineAnim_8402864[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0xA, 0, 30), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF6, 0, 16), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_8402884[] = +{ + gSpriteAffineAnim_8402804, + gSpriteAffineAnim_8402824, + gSpriteAffineAnim_8402844, + gSpriteAffineAnim_8402864, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402894 = +{ + .tileTag = 10242, + .paletteTag = 10242, + .oam = &gOamData_837DFF4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_8402884, + .callback = sub_812F948, +}; + +const union AffineAnimCmd gUnknown_084028AC[] = +{ + AFFINEANIMCMD_FRAME(-16, 16, 0, 6), + AFFINEANIMCMD_FRAME(16, -16, 0, 12), + AFFINEANIMCMD_FRAME(-16, 16, 0, 6), + AFFINEANIMCMD_END, +}; + +const struct SpriteTemplate gSpriteTemplate_84028CC = +{ + .tileTag = 10243, + .paletteTag = 10243, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_812FF94, +}; + +const u16 gUnknown_084028E4[] = INCBIN_U16("graphics/battle_anims/sprites/effect.gbapal"); + +const union AnimCmd gSpriteAnim_8402914[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_8402920[] = +{ + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_840292C[] = +{ + gSpriteAnim_8402914, + gSpriteAnim_8402920, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402934 = +{ + .tileTag = 10053, + .paletteTag = 10053, + .oam = &gOamData_837DF34, + .anims = gSpriteAnimTable_840292C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81300F4, +}; + +const struct SpriteTemplate gSpriteTemplate_840294C = +{ + .tileTag = 10248, + .paletteTag = 10248, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81304DC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402964 = +{ + .tileTag = 10252, + .paletteTag = 10252, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813051C, +}; + +const union AffineAnimCmd gSpriteAffineAnim_840297C[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 24), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_840298C[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 24), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_84029A4[] = +{ + gSpriteAffineAnim_840297C, + gSpriteAffineAnim_840298C, +}; + +const struct SpriteTemplate gSpriteTemplate_84029AC = +{ + .tileTag = 10254, + .paletteTag = 10254, + .oam = &gOamData_837DF94, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_84029A4, + .callback = SpriteCallbackDummy, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84029C4 = +{ + .tileTag = 10247, + .paletteTag = 10247, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81307B0, +}; + +const union AffineAnimCmd gUnknown_084029DC[] = +{ + AFFINEANIMCMD_FRAME(0, -16, 0, 6), + AFFINEANIMCMD_FRAME(0, 16, 0, 6), + AFFINEANIMCMD_END,//0 +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_84029F4 = +{ + .tileTag = 10255, + .paletteTag = 10255, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8130A2C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402A0C = +{ + .tileTag = 10247, + .paletteTag = 10247, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8130AEC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402A24 = +{ + .tileTag = 10258, + .paletteTag = 10258, + .oam = &gOamData_837E054, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8130F5C, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402A3C = +{ + .tileTag = 10233, + .paletteTag = 10233, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8131264, +}; + +const struct SpriteTemplate gSpriteTemplate_8402A54 = +{ + .tileTag = 10233, + .paletteTag = 10233, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D1FDC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402A6C = +{ + .tileTag = 10250, + .paletteTag = 10250, + .oam = &gOamData_837DF3C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8131564, +}; + +const struct SpriteTemplate gSpriteTemplate_8402A84 = +{ + .tileTag = 10224, + .paletteTag = 10224, + .oam = &gOamData_837DF34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8131EB8, +}; + +const union AnimCmd gSpriteAnim_8402A9C[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_8402AA8[] = +{ + gSpriteAnim_8402A9C, +}; + +const union AffineAnimCmd gSpriteAffineAnim_8402AAC[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_8402AC4[] = +{ + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_8402ADC[] = +{ + gSpriteAffineAnim_8402AAC, + gSpriteAffineAnim_8402AC4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402AE4 = +{ + .tileTag = 10277, + .paletteTag = 10277, + .oam = &gOamData_837DF9C, + .anims = gSpriteAnimTable_8402AA8, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_8402ADC, + .callback = sub_8132370, +}; + +const union AffineAnimCmd gSpriteAffineAnim_8402AFC[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 64), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_8402B0C[] = +{ + gSpriteAffineAnim_8402AFC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8402B10 = +{ + .tileTag = 10278, + .paletteTag = 10278, + .oam = &gOamData_837E0BC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_8402B0C, + .callback = sub_81323E0, +}; + +const union AffineAnimCmd gUnknown_08402B28[] = +{ + AFFINEANIMCMD_FRAME(0, 16, 0, 4), + AFFINEANIMCMD_FRAME(-2, 0, 0, 8), + AFFINEANIMCMD_FRAME(0, 4, 0, 4), + AFFINEANIMCMD_FRAME(0, 0, 0, 24), + AFFINEANIMCMD_FRAME(1, -5, 0, 16), + AFFINEANIMCMD_END, +}; + +static void sub_812C144(struct Sprite *sprite) { sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; @@ -157,7 +1212,7 @@ void sub_812C1D0(u8 taskId) } -void sub_812C220(struct Sprite *sprite) +static void sub_812C220(struct Sprite *sprite) { sprite->data[0] = 90; sprite->callback = WaitAnimForDuration; @@ -184,13 +1239,13 @@ static void sub_812C2A4(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_812C2BC(struct Sprite *sprite) +static void sub_812C2BC(struct Sprite *sprite) { u16 rotation; u8 x = GetBattlerSpriteCoord(gAnimBankTarget, 2); u8 y = GetBattlerSpriteCoord(gAnimBankTarget, 3); - sub_8078764(sprite, 1); + sub_8078764(sprite, TRUE); rotation = ArcTan2Neg(sprite->pos1.x - x, sprite->pos1.y - y); rotation += 0x6000; @@ -206,7 +1261,7 @@ void sub_812C2BC(struct Sprite *sprite) StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } -void sub_812C358(struct Sprite *sprite) +static void sub_812C358(struct Sprite *sprite) { REG_BLDCNT = 0x3F40; REG_BLDALPHA = 0x1000; @@ -366,7 +1421,7 @@ static void sub_812C64C(u8 taskId) DestroyTask(taskId); } -void sub_812C720(struct Sprite *sprite) +static void sub_812C720(struct Sprite *sprite) { u16 x; u16 y; @@ -406,7 +1461,7 @@ static void sub_812C7C8(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_812C80C(struct Sprite *sprite) +static void sub_812C80C(struct Sprite *sprite) { sub_8078650(sprite); sub_807867C(sprite, gBattleAnimArgs[0]); @@ -416,7 +1471,7 @@ void sub_812C80C(struct Sprite *sprite) } // This is likely fakematching due to some strange type casting behavior. -void sub_812C848(struct Sprite *sprite) +static void sub_812C848(struct Sprite *sprite) { int var0; int var1; @@ -459,7 +1514,7 @@ void sub_812C848(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_812C908(struct Sprite *sprite) +static void sub_812C908(struct Sprite *sprite) { if (sprite->animEnded) DestroyAnimSprite(sprite); @@ -485,7 +1540,7 @@ void sub_812C960(u8 taskId) DestroyAnimVisualTask(taskId); } -void sub_812C990(struct Sprite *sprite) +static void sub_812C990(struct Sprite *sprite) { REG_WINOUT = 0x1F3F; REG_DISPCNT |= DISPCNT_OBJWIN_ON; @@ -494,7 +1549,7 @@ void sub_812C990(struct Sprite *sprite) REG_WIN0H = 0; REG_WIN0V = 0; - sub_8078764(sprite, 0); + sub_8078764(sprite, FALSE); sprite->oam.objMode = ST_OAM_OBJ_WINDOW; sprite->invisible = 1; @@ -550,7 +1605,7 @@ static void sub_812CAD0(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_812CAFC(struct Sprite *sprite) +static void sub_812CAFC(struct Sprite *sprite) { if (gBattleAnimArgs[3] == 0) { @@ -611,7 +1666,7 @@ static void sub_812CBB4(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_812CC28(struct Sprite *sprite) +static void sub_812CC28(struct Sprite *sprite) { sprite->oam.objMode = ST_OAM_OBJ_WINDOW; sprite->data[3] = 255; @@ -644,7 +1699,7 @@ void sub_812CCA8(u8 taskId) DestroyAnimVisualTask(taskId); } -void sub_812CCE8(struct Sprite *sprite) +static void sub_812CCE8(struct Sprite *sprite) { int var0; if (gBattleAnimArgs[0] == 0) @@ -955,7 +2010,7 @@ static void sub_812D254(struct Sprite *sprite) } } -void sub_812D294(struct Sprite *sprite) +static void sub_812D294(struct Sprite *sprite) { if (sprite->data[0] == 0) InitAnimSpritePos(sprite, 0); @@ -1002,7 +2057,7 @@ void sub_812D350(u8 taskId) } } -void sub_812D3AC(struct Sprite *sprite) +static void sub_812D3AC(struct Sprite *sprite) { u8 spriteId = GetAnimBattlerSpriteId(0); @@ -1045,7 +2100,7 @@ void sub_812D3AC(struct Sprite *sprite) } } -void sub_812D4B4(struct Sprite *sprite) +static void sub_812D4B4(struct Sprite *sprite) { if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) sprite->pos1.x = -16; @@ -1083,7 +2138,7 @@ static void sub_812D4EC(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_812D588(struct Sprite *sprite) +static void sub_812D588(struct Sprite *sprite) { u8 rand; s8 y; @@ -1158,7 +2213,7 @@ void sub_812D6CC(u8 taskId) } } -void sub_812D724(struct Sprite *sprite) +static void sub_812D724(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -1414,7 +2469,7 @@ void sub_812DB84(u8 taskId) } } -void sub_812DEAC(struct Sprite *sprite) +static void sub_812DEAC(struct Sprite *sprite) { s16 var0; u8 spriteId1; @@ -1635,7 +2690,7 @@ void sub_812E498(u8 taskId) } } -void sub_812E4F0(struct Sprite *sprite) +static void sub_812E4F0(struct Sprite *sprite) { if (sprite->data[0] == 0) { @@ -1752,7 +2807,7 @@ static void sub_812E638(u8 taskId) } } -void sub_812E7A0(struct Sprite *sprite) +static void sub_812E7A0(struct Sprite *sprite) { if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_PLAYER) { @@ -1883,7 +2938,7 @@ static void sub_812E8B4(u8 taskId) } } -void sub_812EA4C(struct Sprite *sprite) +static void sub_812EA4C(struct Sprite *sprite) { if (sprite->data[0] == 0) { @@ -1974,7 +3029,7 @@ void sub_812EB10(u8 taskId) } } -void sub_812EC78(struct Sprite *sprite) +static void sub_812EC78(struct Sprite *sprite) { u8 tileOffset; int rand1; @@ -2027,7 +3082,7 @@ static void sub_812ED24(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_812ED84(struct Sprite *sprite) +static void sub_812ED84(struct Sprite *sprite) { REG_WINOUT = 0x1F3F; REG_DISPCNT |= DISPCNT_OBJWIN_ON; @@ -2037,7 +3092,7 @@ void sub_812ED84(struct Sprite *sprite) REG_WIN0V = 0; sprite->data[0] = gBattleAnimArgs[2]; - sub_8078764(sprite, 0); + sub_8078764(sprite, FALSE); sprite->oam.objMode = ST_OAM_OBJ_WINDOW; sprite->invisible = 1; sprite->callback = sub_812EE00; @@ -2074,7 +3129,7 @@ static void sub_812EE00(struct Sprite *sprite) } } -void sub_812EEA4(struct Sprite *sprite) +static void sub_812EEA4(struct Sprite *sprite) { sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); @@ -2757,7 +3812,7 @@ void sub_812F86C(struct Sprite *sprite) sprite->pos1.y = sprite->data[5] >> 4; } -void sub_812F88C(struct Sprite *sprite) +static void sub_812F88C(struct Sprite *sprite) { s16 x = sprite->pos1.x; s16 y = sprite->pos1.y; @@ -2790,7 +3845,7 @@ static void sub_812F8DC(struct Sprite *sprite) } } -void sub_812F948(struct Sprite *sprite) +static void sub_812F948(struct Sprite *sprite) { sprite->data[0] = gBattleAnimArgs[3]; StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]); @@ -3039,7 +4094,7 @@ static void sub_812FEB8(u8 taskId, bool8 arg1) } } -void sub_812FF94(struct Sprite *sprite) +static void sub_812FF94(struct Sprite *sprite) { sprite->pos1.x += sprite->data[1]; sprite->pos1.y += sprite->data[2]; @@ -3094,7 +4149,7 @@ void sub_81300A4(u8 taskId) gUnknown_08D2E150); } -void sub_81300F4(struct Sprite *sprite) +static void sub_81300F4(struct Sprite *sprite) { if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_OPPONENT) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; @@ -3259,7 +4314,7 @@ static void sub_8130424(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5 *y = y2 >> 8; } -void sub_81304DC(struct Sprite *sprite) +static void sub_81304DC(struct Sprite *sprite) { if (++sprite->data[0] > 36) { @@ -3268,7 +4323,7 @@ void sub_81304DC(struct Sprite *sprite) } } -void sub_813051C(struct Sprite *sprite) +static void sub_813051C(struct Sprite *sprite) { sprite->pos1.x = gBattleAnimArgs[0]; sprite->pos1.y = gBattleAnimArgs[1]; @@ -3349,7 +4404,7 @@ static void sub_81306A4(u8 taskId) } } -void sub_81307B0(struct Sprite *sprite) +static void sub_81307B0(struct Sprite *sprite) { u8 battler; @@ -3465,7 +4520,7 @@ static void sub_8130970(u8 taskId) } } -void sub_8130A2C(struct Sprite *sprite) +static void sub_8130A2C(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) { @@ -3500,7 +4555,7 @@ static void sub_8130A94(struct Sprite *sprite) } } -void sub_8130AEC(struct Sprite *sprite) +static void sub_8130AEC(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) { @@ -3715,7 +4770,7 @@ static void sub_8130DBC(u8 taskId) } } -void sub_8130F5C(struct Sprite *sprite) +static void sub_8130F5C(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) { @@ -3855,7 +4910,7 @@ static void sub_81311E4(struct Sprite *sprite) sprite->data[5]++; } -void sub_8131264(struct Sprite *sprite) +static void sub_8131264(struct Sprite *sprite) { GetBattlerSpriteCoord(gAnimBankTarget, 2); // unused local variable GetBattlerSpriteCoord(gAnimBankTarget, 3); // unused local variable @@ -3973,7 +5028,7 @@ static void sub_8131408(u8 taskId) } } -void sub_8131564(struct Sprite *sprite) +static void sub_8131564(struct Sprite *sprite) { s16 y2; diff --git a/src/battle/battle_anim_813F0F4.c b/src/battle/battle_anim_813F0F4.c index f112c59aa..312cdf8c9 100755 --- a/src/battle/battle_anim_813F0F4.c +++ b/src/battle/battle_anim_813F0F4.c @@ -36,14 +36,9 @@ extern u8 gEffectBank; extern const u8 gUnknown_08D2EE48[]; extern const u8 gUnknown_08D2EDFC[]; extern const u16 gUnknown_08D2E150[]; -extern const struct CompressedSpritePalette gBallOpenParticlePalettes[]; extern const struct SpriteTemplate gSpriteTemplates_840B3B4[]; extern const struct SpriteTemplate gSpriteTemplate_8402500; extern const struct SpriteTemplate gBattleAnimSpriteTemplate_84024E8; -extern const u8 gBallOpenParticleAnimNums[]; -extern const struct CompressedSpriteSheet gBallOpenParticleSpritesheets[]; -extern const TaskFunc gBallOpenParticleAnimationFuncs[]; -extern const u16 gUnknown_0840B4D4[]; extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; @@ -86,6 +81,284 @@ static void sub_8141CBC(struct Sprite *sprite); static void sub_8141CF4(struct Sprite *sprite); static void sub_8141D20(struct Sprite *sprite); +extern const u8 gBattleAnimSpriteSheet_Particles[]; +const struct CompressedSpriteSheet gBallOpenParticleSpritesheets[] = +{ + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EC}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6ED}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EE}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EF}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F0}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F1}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F2}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F3}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F4}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F5}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F6}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F7}, +}; + +extern const u8 gBattleAnimSpritePalette_136[]; +const struct CompressedSpritePalette gBallOpenParticlePalettes[] = +{ + {gBattleAnimSpritePalette_136, 0xD6EC}, + {gBattleAnimSpritePalette_136, 0xD6ED}, + {gBattleAnimSpritePalette_136, 0xD6EE}, + {gBattleAnimSpritePalette_136, 0xD6EF}, + {gBattleAnimSpritePalette_136, 0xD6F0}, + {gBattleAnimSpritePalette_136, 0xD6F1}, + {gBattleAnimSpritePalette_136, 0xD6F2}, + {gBattleAnimSpritePalette_136, 0xD6F3}, + {gBattleAnimSpritePalette_136, 0xD6F4}, + {gBattleAnimSpritePalette_136, 0xD6F5}, + {gBattleAnimSpritePalette_136, 0xD6F6}, + {gBattleAnimSpritePalette_136, 0xD6F7}, +}; + +const union AnimCmd gSpriteAnim_840B318[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(0, 1, .hFlip = TRUE), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_840B334[] = +{ + ANIMCMD_FRAME(3, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_840B33C[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_840B344[] = +{ + ANIMCMD_FRAME(5, 1), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_840B34C[] = +{ + ANIMCMD_FRAME(6, 4), + ANIMCMD_FRAME(7, 4), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_840B358[] = +{ + ANIMCMD_FRAME(7, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_840B360[] = +{ + gSpriteAnim_840B318, + gSpriteAnim_840B334, + gSpriteAnim_840B33C, + gSpriteAnim_840B344, + gSpriteAnim_840B34C, + gSpriteAnim_840B358, +}; + +const u8 gBallOpenParticleAnimNums[] = +{ + 0, + 0, + 0, + 5, + 1, + 2, + 2, + 3, + 5, + 5, + 4, + 4, +}; + +void PokeBallOpenParticleAnimation(u8); +void GreatBallOpenParticleAnimation(u8); +void SafariBallOpenParticleAnimation(u8); +void UltraBallOpenParticleAnimation(u8); +void MasterBallOpenParticleAnimation(u8); +void SafariBallOpenParticleAnimation(u8); +void DiveBallOpenParticleAnimation(u8); +void UltraBallOpenParticleAnimation(u8); +void RepeatBallOpenParticleAnimation(u8); +void TimerBallOpenParticleAnimation(u8); +void GreatBallOpenParticleAnimation(u8); +void PremierBallOpenParticleAnimation(u8); + +const TaskFunc gBallOpenParticleAnimationFuncs[] = +{ + PokeBallOpenParticleAnimation, + GreatBallOpenParticleAnimation, + SafariBallOpenParticleAnimation, + UltraBallOpenParticleAnimation, + MasterBallOpenParticleAnimation, + SafariBallOpenParticleAnimation, + DiveBallOpenParticleAnimation, + UltraBallOpenParticleAnimation, + RepeatBallOpenParticleAnimation, + TimerBallOpenParticleAnimation, + GreatBallOpenParticleAnimation, + PremierBallOpenParticleAnimation, +}; + +const struct SpriteTemplate gSpriteTemplates_840B3B4[] = +{ + { + .tileTag = 55020, + .paletteTag = 55020, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_840B360, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55021, + .paletteTag = 55021, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_840B360, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55022, + .paletteTag = 55022, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_840B360, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55023, + .paletteTag = 55023, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_840B360, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55024, + .paletteTag = 55024, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_840B360, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55025, + .paletteTag = 55025, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_840B360, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55026, + .paletteTag = 55026, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_840B360, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55027, + .paletteTag = 55027, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_840B360, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55028, + .paletteTag = 55028, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_840B360, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55029, + .paletteTag = 55029, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_840B360, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55030, + .paletteTag = 55030, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_840B360, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55031, + .paletteTag = 55031, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_840B360, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, +}; + +const u16 gUnknown_0840B4D4[] = +{ + 0x7ADF, + 0x7AF0, + 0x53D7, + 0x3FFF, + 0x7297, + 0x67F5, + 0x7B2C, + 0x2B7E, + 0x431F, + 0x7BDD, + 0x2A3F, + 0x293F, + 0x0000, + 0x0201, + 0x0403, + 0x0101, + 0x0100, + 0x0503, + 0x0506, + 0x0004, +}; + +static void sub_8141C30(struct Sprite *sprite); +const struct SpriteTemplate gBattleAnimSpriteTemplate_840B4FC = +{ + .tileTag = 10269, + .paletteTag = 10269, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8141C30, +}; void unref_sub_813F0F4(u8 taskId) { @@ -1826,7 +2099,7 @@ void sub_8141C08(u8 taskId) DestroyAnimVisualTask(taskId); } -void sub_8141C30(struct Sprite *sprite) +static void sub_8141C30(struct Sprite *sprite) { InitAnimSpritePos(sprite, 0); sprite->data[0] = 30; diff --git a/src/battle/battle_interface.c b/src/battle/battle_interface.c index ec882bcce..dedde2cb3 100644 --- a/src/battle/battle_interface.c +++ b/src/battle/battle_interface.c @@ -433,7 +433,7 @@ extern u16 gBattleTypeFlags; extern const u8 BattleText_SafariBalls[]; extern const u8 BattleText_SafariBallsLeft[]; extern const u8 BattleText_HighlightRed[]; -extern const u8 gUnknown_08D1216C[][32]; +extern const u8 gHealthboxElementsGfxTable[][32]; extern const u16 gBattleInterfaceStatusIcons_DynPal[]; @@ -870,7 +870,7 @@ u8 battle_make_oam_safari_battle(void) static const void *sub_8043CDC(u8 a) { - return gUnknown_08D1216C[a]; + return gHealthboxElementsGfxTable[a]; } static void sub_8043CEC(struct Sprite *sprite) |