diff options
Diffstat (limited to 'src')
41 files changed, 10070 insertions, 2494 deletions
diff --git a/src/battle_anim.c b/src/battle_anim.c index c3fa2e2aa..88c548208 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -1656,7 +1656,7 @@ static void ScriptCmd_createsprite(void) else argVar *= -1; - subpriority = GetBattlerSubpriority(gBattleAnimTarget) + (s8)(argVar); + subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + (s8)(argVar); } else { @@ -1665,7 +1665,7 @@ static void ScriptCmd_createsprite(void) else argVar *= -1; - subpriority = GetBattlerSubpriority(gBattleAnimAttacker) + (s8)(argVar); + subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) + (s8)(argVar); } if (subpriority < 3) diff --git a/src/battle_anim_80A5C6C.c b/src/battle_anim_80A5C6C.c index c4cf1600b..15a4d2b63 100644 --- a/src/battle_anim_80A5C6C.c +++ b/src/battle_anim_80A5C6C.c @@ -40,18 +40,17 @@ void sub_80A7144(struct Sprite *sprite); void sub_80A791C(struct Sprite *sprite); void sub_80A8DFC(struct Sprite *sprite); void sub_80A8E88(struct Sprite *sprite); -void sub_80A7E6C(u8 spriteId); -u16 sub_80A7F18(u8 spriteId); +void SetBattlerSpriteYOffsetFromYScale(u8 spriteId); +u16 GetBattlerYDeltaFromSpriteId(u8 spriteId); void AnimTask_BlendMonInAndOutSetup(struct Task *task); void sub_80A7AFC(u8 taskId); void sub_80A8CAC(u8 taskId); void AnimTask_BlendMonInAndOutStep(u8 taskId); bool8 sub_80A7238(void); -u8 GetBattlerSubpriority(u8 battlerId); void sub_80A8D78(struct Task *task, u8 taskId); // EWRAM vars -EWRAM_DATA static union AffineAnimCmd *gUnknown_02038444 = NULL; +EWRAM_DATA static union AffineAnimCmd *gAnimTaskAffineAnim = NULL; // Const rom data static const struct UCoords8 sBattlerCoords[][4] = @@ -124,8 +123,7 @@ static const struct SpriteSheet sUnknown_08525FC0[] = { gMiscBlank_Gfx, 0x800, 55126, }, }; -// code -u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId) +u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType) { u8 retVal; u16 species; @@ -133,11 +131,11 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId) if (IsContest()) { - if (attributeId == BATTLER_COORD_3 && battlerId == 3) - attributeId = BATTLER_COORD_Y; + if (coordType == BATTLER_COORD_Y_PIC_OFFSET && battlerId == 3) + coordType = BATTLER_COORD_Y; } - switch (attributeId) + switch (coordType) { case BATTLER_COORD_X: case BATTLER_COORD_X_2: @@ -146,15 +144,15 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId) case BATTLER_COORD_Y: retVal = sBattlerCoords[IS_DOUBLE_BATTLE()][GetBattlerPosition(battlerId)].y; break; - case BATTLER_COORD_3: - case BATTLER_COORD_4: + case BATTLER_COORD_Y_PIC_OFFSET: + case BATTLER_COORD_Y_PIC_OFFSET_DEFAULT: default: if (IsContest()) { - if (shared19348.unk4_0) - species = shared19348.unk2; + if (gContestResources->field_18->unk4_0) + species = gContestResources->field_18->unk2; else - species = shared19348.species; + species = gContestResources->field_18->species; } else { @@ -175,7 +173,7 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId) species = spriteInfo[battlerId].transformSpecies; } } - if (attributeId == BATTLER_COORD_3) + if (coordType == BATTLER_COORD_Y_PIC_OFFSET) retVal = GetBattlerSpriteFinal_Y(battlerId, species, TRUE); else retVal = GetBattlerSpriteFinal_Y(battlerId, species, FALSE); @@ -199,10 +197,10 @@ u8 GetBattlerYDelta(u8 battlerId, u16 species) { if (IsContest()) { - if (shared19348.unk4_0) - personality = shared19348.unk10; + if (gContestResources->field_18->unk4_0) + personality = gContestResources->field_18->unk10; else - personality = shared19348.unk8; + personality = gContestResources->field_18->unk8; } else { @@ -307,19 +305,19 @@ u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3) return y; } -u8 GetBattlerSpriteCoord2(u8 battlerId, u8 attributeId) +u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType) { u16 species; struct BattleSpriteInfo *spriteInfo; - if (attributeId == BATTLER_COORD_3 || attributeId == BATTLER_COORD_4) + if (coordType == BATTLER_COORD_Y_PIC_OFFSET || coordType == BATTLER_COORD_Y_PIC_OFFSET_DEFAULT) { if (IsContest()) { - if (shared19348.unk4_0) - species = shared19348.unk2; + if (gContestResources->field_18->unk4_0) + species = gContestResources->field_18->unk2; else - species = shared19348.species; + species = gContestResources->field_18->species; } else { @@ -329,20 +327,20 @@ u8 GetBattlerSpriteCoord2(u8 battlerId, u8 attributeId) else species = spriteInfo[battlerId].transformSpecies; } - if (attributeId == BATTLER_COORD_3) + if (coordType == BATTLER_COORD_Y_PIC_OFFSET) return GetBattlerSpriteFinal_Y(battlerId, species, TRUE); else return GetBattlerSpriteFinal_Y(battlerId, species, FALSE); } else { - return GetBattlerSpriteCoord(battlerId, attributeId); + return GetBattlerSpriteCoord(battlerId, coordType); } } u8 GetBattlerSpriteDefault_Y(u8 battlerId) { - return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_4); + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET_DEFAULT); } u8 GetSubstituteSpriteDefault_Y(u8 battlerId) @@ -386,11 +384,11 @@ u8 GetBattlerYCoordWithElevation(u8 battlerId) return y; } -u8 GetAnimBattlerSpriteId(u8 which) +u8 GetAnimBattlerSpriteId(u8 animBattler) { u8 *sprites; - if (which == ANIM_ATTACKER) + if (animBattler == ANIM_ATTACKER) { if (IsBattlerSpritePresent(gBattleAnimAttacker)) { @@ -402,7 +400,7 @@ u8 GetAnimBattlerSpriteId(u8 which) return 0xff; } } - else if (which == ANIM_TARGET) + else if (animBattler == ANIM_TARGET) { if (IsBattlerSpritePresent(gBattleAnimTarget)) { @@ -414,7 +412,7 @@ u8 GetAnimBattlerSpriteId(u8 which) return 0xff; } } - else if (which == ANIM_ATK_PARTNER) + else if (animBattler == ANIM_ATK_PARTNER) { if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) return 0xff; @@ -442,7 +440,7 @@ void SetCallbackToStoredInData6(struct Sprite *sprite) sprite->callback = (void (*)(struct Sprite *))callback; } -void sub_80A62EC(struct Sprite *sprite) +void TranslateSpriteInCircleOverDuration(struct Sprite *sprite) { if (sprite->data[3]) { @@ -461,7 +459,7 @@ void sub_80A62EC(struct Sprite *sprite) } } -void sub_80A634C(struct Sprite *sprite) +void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite) { if (sprite->data[3]) { @@ -570,7 +568,7 @@ void TranslateSpriteOverDuration(struct Sprite *sprite) } } -void sub_80A656C(struct Sprite *sprite) +void TranslateAnimLinearSimple(struct Sprite *sprite) { if (sprite->data[0] > 0) { @@ -665,7 +663,7 @@ void sub_80A66DC(struct Sprite *sprite) } } -void move_anim_8074EE0(struct Sprite *sprite) +void DestroySpriteAndMatrix(struct Sprite *sprite) { FreeSpriteOamMatrix(sprite); DestroyAnimSprite(sprite); @@ -683,16 +681,16 @@ void sub_80A6760(struct Sprite *sprite) void sub_80A67A4(struct Sprite *sprite) { ResetPaletteStructByUid(sprite->data[5]); - move_anim_8074EE0(sprite); + DestroySpriteAndMatrix(sprite); } -void sub_80A67BC(struct Sprite *sprite) +void RunStoredCallbackWhenAffineAnimEnds(struct Sprite *sprite) { if (sprite->affineAnimEnded) SetCallbackToStoredInData6(sprite); } -void sub_80A67D8(struct Sprite *sprite) +void RunStoredCallbackWhenAnimEnds(struct Sprite *sprite) { if (sprite->animEnded) SetCallbackToStoredInData6(sprite); @@ -712,31 +710,31 @@ void sub_80A6814(u8 taskId) DestroyAnimVisualTask(taskId); } -void sub_80A6838(struct Sprite *sprite) +void SetSpriteCoordsToAnimAttackerCoords(struct Sprite *sprite) { - sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); } -void sub_80A6864(struct Sprite *sprite, s16 a2) +void sub_80A6864(struct Sprite *sprite, s16 xOffset) { - u16 v1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - u16 v2 = GetBattlerSpriteCoord(gBattleAnimTarget, 0); + u16 attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + u16 targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); - if (v1 > v2) + if (attackerX > targetX) { - sprite->pos1.x -= a2; + sprite->pos1.x -= xOffset; } - else if (v1 < v2) + else if (attackerX < targetX) { - sprite->pos1.x += a2; + sprite->pos1.x += xOffset; } else { - if (GetBattlerSide(gBattleAnimAttacker) != 0) - sprite->pos1.x -= a2; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos1.x -= xOffset; else - sprite->pos1.x += a2; + sprite->pos1.x += xOffset; } } @@ -779,24 +777,24 @@ void sub_80A6980(struct Sprite *sprite, bool8 a2) { if (!a2) { - sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, 0); - sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, 1); + sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X); + sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y); } sub_80A6864(sprite, gBattleAnimArgs[0]); sprite->pos1.y += gBattleAnimArgs[1]; } -void InitAnimSpritePos(struct Sprite *sprite, u8 a2) +void InitAnimSpritePos(struct Sprite *sprite, u8 respectMonPicOffsets) { - if (!a2) + if (!respectMonPicOffsets) { - sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, 0); - sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, 1); + sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y); } else { - sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, 2); - sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, 3); + sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); } sub_80A6864(sprite, gBattleAnimArgs[0]); sprite->pos1.y += gBattleAnimArgs[1]; @@ -908,7 +906,7 @@ void sub_80A6B90(struct UnknownAnimStruct2 *unk, u32 arg1) } } -void sub_80A6BFC(struct UnknownAnimStruct2 *unk) +void sub_80A6BFC(struct UnknownAnimStruct2 *unk, u8 unused) { unk->bgTiles = gUnknown_0202305C; unk->unk4 = (u16 *)gUnknown_02023060; @@ -1208,7 +1206,7 @@ void sub_80A718C(struct Sprite *sprite) sprite->callback(sprite); } -void obj_id_set_rotscale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation) +void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation) { int i; struct ObjAffineSrcData src; @@ -1242,7 +1240,7 @@ bool8 sub_80A7238(void) } } -void sub_80A7270(u8 spriteId, u8 objMode) +void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 objMode) { u8 battlerId = gSprites[spriteId].data[0]; @@ -1251,32 +1249,34 @@ void sub_80A7270(u8 spriteId, u8 objMode) gSprites[spriteId].oam.objMode = objMode; gSprites[spriteId].affineAnimPaused = TRUE; if (!IsContest() && !gSprites[spriteId].oam.affineMode) - gSprites[spriteId].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[battlerId].field_6; - gSprites[spriteId].oam.affineMode = 3; + gSprites[spriteId].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[battlerId].matrixNum; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE; CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode); } -void sub_80A7344(u8 spriteId) +void ResetSpriteRotScale(u8 spriteId) { - obj_id_set_rotscale(spriteId, 0x100, 0x100, 0); - gSprites[spriteId].oam.affineMode = 1; + SetSpriteRotScale(spriteId, 0x100, 0x100, 0); + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.objMode = 0; gSprites[spriteId].affineAnimPaused = FALSE; CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode); } -void sub_80A73A0(u8 spriteId) +// Sets the sprite's y offset equal to the y displacement caused by the +// matrix's rotation. +void SetBattlerSpriteYOffsetFromRotation(u8 spriteId) { - u16 matrix = gSprites[spriteId].oam.matrixNum; - s16 c = gOamMatrices[matrix].c; - + u16 matrixNum = gSprites[spriteId].oam.matrixNum; + // The "c" component of the battler sprite matrix contains the sine of the rotation angle divided by some scale amount. + s16 c = gOamMatrices[matrixNum].c; if (c < 0) c = -c; + gSprites[spriteId].pos2.y = c >> 3; } -// related to obj_id_set_rotscale -void sub_80A73E0(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation) +void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 xScale, s16 yScale, u16 rotation) { int i; struct ObjAffineSrcData src; @@ -1285,7 +1285,7 @@ void sub_80A73E0(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 ro if (sprite->oam.affineMode & 1) { sprite->affineAnimPaused = TRUE; - if (a2) + if (recalcCenterVector) CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); src.xScale = xScale; src.yScale = yScale; @@ -1303,7 +1303,7 @@ void sub_80A73E0(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 ro void sub_80A749C(struct Sprite *sprite) { - sub_80A73E0(sprite, TRUE, 0x100, 0x100, 0); + TrySetSpriteRotScale(sprite, TRUE, 0x100, 0x100, 0); sprite->affineAnimPaused = FALSE; CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); } @@ -1319,32 +1319,32 @@ u16 ArcTan2Neg(s16 a, s16 b) return -var; } -void sub_80A750C(u16 a1, bool8 a2) +void SetGreyscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor) { int i; - struct PlttData *c; - struct PlttData *c2; + struct PlttData *originalColor; + struct PlttData *destColor; u16 average; - a1 *= 0x10; + paletteNum *= 16; - if (!a2) + if (!restoreOriginalColor) { - for (i = 0; i < 0x10; i++) + for (i = 0; i < 16; i++) { - c = (struct PlttData *)&gPlttBufferUnfaded[a1 + i]; - average = c->r + c->g + c->b; + originalColor = (struct PlttData *)&gPlttBufferUnfaded[paletteNum + i]; + average = originalColor->r + originalColor->g + originalColor->b; average /= 3; - c2 = (struct PlttData *)&gPlttBufferFaded[a1 + i]; - c2->r = average; - c2->g = average; - c2->b = average; + destColor = (struct PlttData *)&gPlttBufferFaded[paletteNum + i]; + destColor->r = average; + destColor->g = average; + destColor->b = average; } } else { - CpuCopy32(&gPlttBufferUnfaded[a1], &gPlttBufferFaded[a1], 0x20); + CpuCopy32(&gPlttBufferUnfaded[paletteNum], &gPlttBufferFaded[paletteNum], 32); } } @@ -1479,7 +1479,7 @@ void sub_80A77C8(struct Sprite *sprite) } else if (sprite->animEnded || sprite->affineAnimEnded) { - move_anim_8074EE0(sprite); + DestroySpriteAndMatrix(sprite); } } @@ -1494,7 +1494,7 @@ void sub_80A77C8(struct Sprite *sprite) void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite) { bool8 v1; - u8 attributeId; + u8 coordType; if (!(gBattleAnimArgs[5] & 0xff00)) v1 = TRUE; @@ -1502,9 +1502,9 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite) v1 = FALSE; if (!(gBattleAnimArgs[5] & 0xff)) - attributeId = BATTLER_COORD_3; + coordType = BATTLER_COORD_Y_PIC_OFFSET; else - attributeId = BATTLER_COORD_Y; + coordType = BATTLER_COORD_Y; InitAnimSpritePos(sprite, v1); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) @@ -1512,7 +1512,7 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite) sprite->data[0] = gBattleAnimArgs[4]; sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, attributeId) + gBattleAnimArgs[3]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, coordType) + gBattleAnimArgs[3]; sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } @@ -1544,7 +1544,7 @@ void sub_80A7938(struct Sprite *sprite) if (!gBattleAnimArgs[6]) { r4 = TRUE; - attributeId = BATTLER_COORD_3; + attributeId = BATTLER_COORD_Y_PIC_OFFSET; } else { @@ -1571,19 +1571,19 @@ void sub_80A7938(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 whichBattler) +s16 CloneBattlerSpriteWithBlend(u8 animBattler) { u16 i; - u8 spriteId = GetAnimBattlerSpriteId(whichBattler); + u8 spriteId = GetAnimBattlerSpriteId(animBattler); - if (spriteId != 0xff) + if (spriteId != 0xFF) { for (i = 0; i < MAX_SPRITES; i++) { if (!gSprites[i].inUse) { gSprites[i] = gSprites[spriteId]; - gSprites[i].oam.objMode = 1; + gSprites[i].oam.objMode = ST_OAM_OBJ_BLEND; gSprites[i].invisible = FALSE; return i; } @@ -1730,49 +1730,49 @@ void sub_80A7CB4(u8 task) AnimTask_BlendMonInAndOutSetup(&gTasks[task]); } -void sub_80A7CFC(struct Task *task, u8 a2, const void *a3) +void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union AffineAnimCmd *affineAnimCmds) { task->data[7] = 0; task->data[8] = 0; task->data[9] = 0; - task->data[15] = a2; + task->data[15] = spriteId; task->data[10] = 0x100; task->data[11] = 0x100; task->data[12] = 0; - sub_80A8048(&task->data[13], &task->data[14], a3); - sub_80A7270(a2, 0); + StorePointerInVars(&task->data[13], &task->data[14], affineAnimCmds); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); } -bool8 sub_80A7D34(struct Task *task) +bool8 RunAffineAnimFromTaskData(struct Task *task) { - gUnknown_02038444 = sub_80A8050(task->data[13], task->data[14]) + (task->data[7] << 3); - switch (gUnknown_02038444->type) + gAnimTaskAffineAnim = LoadPointerFromVars(task->data[13], task->data[14]) + (task->data[7] << 3); + switch (gAnimTaskAffineAnim->type) { default: - if (!gUnknown_02038444->frame.duration) + if (!gAnimTaskAffineAnim->frame.duration) { - task->data[10] = gUnknown_02038444->frame.xScale; - task->data[11] = gUnknown_02038444->frame.yScale; - task->data[12] = gUnknown_02038444->frame.rotation; + task->data[10] = gAnimTaskAffineAnim->frame.xScale; + task->data[11] = gAnimTaskAffineAnim->frame.yScale; + task->data[12] = gAnimTaskAffineAnim->frame.rotation; task->data[7]++; - gUnknown_02038444++; + gAnimTaskAffineAnim++; } - task->data[10] += gUnknown_02038444->frame.xScale; - task->data[11] += gUnknown_02038444->frame.yScale; - task->data[12] += gUnknown_02038444->frame.rotation; - obj_id_set_rotscale(task->data[15], task->data[10], task->data[11], task->data[12]); - sub_80A7E6C(task->data[15]); - if (++task->data[8] >= gUnknown_02038444->frame.duration) + task->data[10] += gAnimTaskAffineAnim->frame.xScale; + task->data[11] += gAnimTaskAffineAnim->frame.yScale; + task->data[12] += gAnimTaskAffineAnim->frame.rotation; + SetSpriteRotScale(task->data[15], task->data[10], task->data[11], task->data[12]); + SetBattlerSpriteYOffsetFromYScale(task->data[15]); + if (++task->data[8] >= gAnimTaskAffineAnim->frame.duration) { task->data[8] = 0; task->data[7]++; } break; case AFFINEANIMCMDTYPE_JUMP: - task->data[7] = gUnknown_02038444->jump.target; + task->data[7] = gAnimTaskAffineAnim->jump.target; break; case AFFINEANIMCMDTYPE_LOOP: - if (gUnknown_02038444->loop.count) + if (gAnimTaskAffineAnim->loop.count) { if (task->data[9]) { @@ -1784,7 +1784,7 @@ bool8 sub_80A7D34(struct Task *task) } else { - task->data[9] = gUnknown_02038444->loop.count; + task->data[9] = gAnimTaskAffineAnim->loop.count; } if (!task->data[7]) { @@ -1793,8 +1793,8 @@ bool8 sub_80A7D34(struct Task *task) for (;;) { task->data[7]--; - gUnknown_02038444--; - if (gUnknown_02038444->type == AFFINEANIMCMDTYPE_LOOP) + gAnimTaskAffineAnim--; + if (gAnimTaskAffineAnim->type == AFFINEANIMCMDTYPE_LOOP) { task->data[7]++; return TRUE; @@ -1807,36 +1807,40 @@ bool8 sub_80A7D34(struct Task *task) break; case AFFINEANIMCMDTYPE_END: gSprites[task->data[15]].pos2.y = 0; - sub_80A7344(task->data[15]); + ResetSpriteRotScale(task->data[15]); return FALSE; } return TRUE; } -void sub_80A7E6C(u8 spriteId) +// Sets the sprite's y offset equal to the y displacement caused by the +// matrix's scale in the y dimension. +void SetBattlerSpriteYOffsetFromYScale(u8 spriteId) { - int var = 0x40 - sub_80A7F18(spriteId) * 2; + int var = 64 - GetBattlerYDeltaFromSpriteId(spriteId) * 2; u16 matrix = gSprites[spriteId].oam.matrixNum; int var2 = (var << 8) / gOamMatrices[matrix].d; - if (var2 > 0x80) - var2 = 0x80; + if (var2 > 128) + var2 = 128; gSprites[spriteId].pos2.y = (var - var2) / 2; } -void sub_80A7EC0(u8 spriteId, u8 spriteId2) +// Sets the sprite's y offset equal to the y displacement caused by another sprite +// matrix's scale in the y dimension. +void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId) { - int var = 0x40 - sub_80A7F18(spriteId2) * 2; + int var = 64 - GetBattlerYDeltaFromSpriteId(otherSpriteId) * 2; u16 matrix = gSprites[spriteId].oam.matrixNum; int var2 = (var << 8) / gOamMatrices[matrix].d; - if (var2 > 0x80) - var2 = 0x80; + if (var2 > 128) + var2 = 128; gSprites[spriteId].pos2.y = (var - var2) / 2; } -u16 sub_80A7F18(u8 spriteId) +u16 GetBattlerYDeltaFromSpriteId(u8 spriteId) { struct BattleSpriteInfo *spriteInfo; u8 battlerId = gSprites[spriteId].data[0]; @@ -1849,7 +1853,7 @@ u16 sub_80A7F18(u8 spriteId) { if (IsContest()) { - species = shared19348.species; + species = gContestResources->field_18->species; return gMonBackPicCoords[species].y_offset; } else @@ -1883,18 +1887,18 @@ u16 sub_80A7F18(u8 spriteId) } } } - return 0x40; + return 64; } -void sub_80A8048(s16 *bottom, s16 *top, const void *ptr) +void StorePointerInVars(s16 *lo, s16 *hi, const void *ptr) { - *bottom = ((intptr_t) ptr) & 0xffff; - *top = (((intptr_t) ptr) >> 16) & 0xffff; + *lo = ((intptr_t) ptr) & 0xffff; + *hi = (((intptr_t) ptr) >> 16) & 0xffff; } -void *sub_80A8050(s16 bottom, s16 top) +void *LoadPointerFromVars(s16 lo, s16 hi) { - return (void *)((u16)bottom | ((u16)top << 16)); + return (void *)((u16)lo | ((u16)hi << 16)); } void sub_80A805C(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7) @@ -1924,9 +1928,9 @@ u8 sub_80A80C8(struct Task *task) task->data[9] = task->data[13]; task->data[10] = task->data[14]; } - obj_id_set_rotscale(task->data[15], task->data[9], task->data[10], 0); + SetSpriteRotScale(task->data[15], task->data[9], task->data[10], 0); if (task->data[8]) - sub_80A7E6C(task->data[15]); + SetBattlerSpriteYOffsetFromYScale(task->data[15]); else gSprites[task->data[15]].pos2.y = 0; return task->data[8]; @@ -1968,16 +1972,16 @@ void sub_80A8278(void) { if (IsBattlerSpriteVisible(i)) { - gSprites[gBattlerSpriteIds[i]].subpriority = GetBattlerSubpriority(i); + gSprites[gBattlerSpriteIds[i]].subpriority = GetBattlerSpriteSubpriority(i); gSprites[gBattlerSpriteIds[i]].oam.priority = 2; } } } -u8 GetBattlerSubpriority(u8 battlerId) +u8 GetBattlerSpriteSubpriority(u8 battlerId) { u8 position; - u8 ret; + u8 subpriority; if (IsContest()) { @@ -1990,15 +1994,16 @@ u8 GetBattlerSubpriority(u8 battlerId) { position = GetBattlerPosition(battlerId); if (position == B_POSITION_PLAYER_LEFT) - ret = 30; + subpriority = 30; else if (position == B_POSITION_PLAYER_RIGHT) - ret = 20; + subpriority = 20; else if (position == B_POSITION_OPPONENT_LEFT) - ret = 40; + subpriority = 40; else - ret = 50; + subpriority = 50; } - return ret; + + return subpriority; } u8 sub_80A8328(u8 battlerId) @@ -2100,15 +2105,15 @@ s16 sub_80A861C(u8 battlerId, u8 a2) if (IsContest()) { - if (shared19348.unk4_0) + if (gContestResources->field_18->unk4_0) { - species = shared19348.unk2; - personality = shared19348.unk10; + species = gContestResources->field_18->unk2; + personality = gContestResources->field_18->unk10; } else { - species = shared19348.species; - personality = shared19348.unk8; + species = gContestResources->field_18->species; + personality = gContestResources->field_18->unk8; } if (species == SPECIES_UNOWN) { @@ -2270,7 +2275,7 @@ u8 sub_80A89C8(int battlerId, u8 spriteId, int species) void sub_80A8A6C(struct Sprite *sprite) { - sub_80A6838(sprite); + SetSpriteCoordsToAnimAttackerCoords(sprite); if (GetBattlerSide(gBattleAnimAttacker)) { sprite->pos1.x -= gBattleAnimArgs[0]; @@ -2286,7 +2291,7 @@ void sub_80A8A6C(struct Sprite *sprite) sprite->data[1] = gBattleAnimArgs[3]; sprite->data[3] = gBattleAnimArgs[4]; sprite->data[5] = gBattleAnimArgs[5]; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); sprite->callback = sub_80A66DC; } @@ -2307,19 +2312,19 @@ void sub_80A8AEC(struct Sprite *sprite) sprite->data[3] = gBattleAnimArgs[4]; sprite->data[5] = gBattleAnimArgs[5]; StartSpriteAnim(sprite, gBattleAnimArgs[6]); - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); sprite->callback = sub_80A66DC; } void sub_80A8B64(struct Sprite *sprite) { - sub_80A6838(sprite); + SetSpriteCoordsToAnimAttackerCoords(sprite); if (GetBattlerSide(gBattleAnimAttacker)) sprite->pos1.x -= gBattleAnimArgs[0]; else sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; - sprite->callback = sub_80A67D8; + sprite->callback = RunStoredCallbackWhenAnimEnds; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } @@ -2339,7 +2344,7 @@ void sub_80A8BC4(u8 taskId) dest = (task->data[4] + 0x10) * 0x10; src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10; - task->data[6] = GetBattlerSubpriority(gBattleAnimAttacker); + task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimAttacker); if (task->data[6] == 20 || task->data[6] == 40) task->data[6] = 2; else @@ -2384,7 +2389,7 @@ void sub_80A8CAC(u8 taskId) void sub_80A8D78(struct Task *task, u8 taskId) { - s16 spriteId = duplicate_obj_of_side_rel2move_in_transparent_mode(0); + s16 spriteId = CloneBattlerSpriteWithBlend(0); if (spriteId >= 0) { gSprites[spriteId].oam.priority = task->data[6]; @@ -2410,7 +2415,7 @@ void sub_80A8DFC(struct Sprite *sprite) void sub_80A8E30(struct Sprite *sprite) { sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); - sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_3); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); if (!GetBattlerSide(gBattleAnimAttacker)) sprite->data[0] = 5; else diff --git a/src/battle_anim_80A9C70.c b/src/battle_anim_80A9C70.c index f1245a032..2eea276a1 100644 --- a/src/battle_anim_80A9C70.c +++ b/src/battle_anim_80A9C70.c @@ -175,7 +175,7 @@ static void sub_80A9E78(struct Sprite *sprite) void sub_80A9EF4(u8 taskId) { s16 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - 32; - s16 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_3) - 36; + s16 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) - 36; u8 spriteId; if (IsContest()) diff --git a/src/battle_anim_80D51AC.c b/src/battle_anim_80D51AC.c index 51be7bbe9..34eee7376 100644 --- a/src/battle_anim_80D51AC.c +++ b/src/battle_anim_80D51AC.c @@ -834,7 +834,7 @@ void AnimTask_ScaleMonAndRestore(u8 taskId) { u8 spriteId; spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[3]); - sub_80A7270(spriteId, gBattleAnimArgs[4]); + PrepareBattlerSpriteForRotScale(spriteId, gBattleAnimArgs[4]); gTasks[taskId].data[0] = gBattleAnimArgs[0]; gTasks[taskId].data[1] = gBattleAnimArgs[1]; gTasks[taskId].data[2] = gBattleAnimArgs[2]; @@ -851,7 +851,7 @@ void AnimTask_ScaleMonAndRestoreStep(u8 taskId) gTasks[taskId].data[10] += gTasks[taskId].data[0]; gTasks[taskId].data[11] += gTasks[taskId].data[1]; spriteId = gTasks[taskId].data[4]; - obj_id_set_rotscale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[11], 0); + SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[11], 0); if (--gTasks[taskId].data[2] == 0) { if (gTasks[taskId].data[3] > 0) @@ -863,7 +863,7 @@ void AnimTask_ScaleMonAndRestoreStep(u8 taskId) } else { - sub_80A7344(spriteId); + ResetSpriteRotScale(spriteId); DestroyAnimVisualTask(taskId); return; } @@ -874,7 +874,7 @@ void sub_80D6134(u8 taskId) { u8 spriteId; spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]); - sub_80A7270(spriteId, 0); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = gBattleAnimArgs[0]; if (gBattleAnimArgs[3] != 1) @@ -918,7 +918,7 @@ void sub_80D622C(u8 taskId) { u8 spriteId; spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]); - sub_80A7270(spriteId, 0); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = gBattleAnimArgs[0]; if (gBattleAnimArgs[2] == 0) @@ -955,17 +955,17 @@ void sub_80D622C(u8 taskId) void sub_80D6308(u8 taskId) { gTasks[taskId].data[3] += gTasks[taskId].data[4]; - obj_id_set_rotscale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]); + SetSpriteRotScale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]); if (gTasks[taskId].data[7]) { - sub_80A73A0(gTasks[taskId].data[5]); + SetBattlerSpriteYOffsetFromRotation(gTasks[taskId].data[5]); } if (++gTasks[taskId].data[1] >= gTasks[taskId].data[2]) { switch (gTasks[taskId].data[6]) { case 1: - sub_80A7344(gTasks[taskId].data[5]); + ResetSpriteRotScale(gTasks[taskId].data[5]); case 0: default: DestroyAnimVisualTask(taskId); diff --git a/src/battle_anim_8170478.c b/src/battle_anim_8170478.c index a570e1bfa..34898899c 100755 --- a/src/battle_anim_8170478.c +++ b/src/battle_anim_8170478.c @@ -604,19 +604,19 @@ void sub_8170B04(u8 taskId) switch (gTasks[taskId].data[0]) { case 0: - sub_80A7270(spriteId, 0); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); gTasks[taskId].data[10] = 0x100; gTasks[taskId].data[0]++; break; case 1: gTasks[taskId].data[10] += 0x30; - obj_id_set_rotscale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0); - sub_80A7E6C(spriteId); + SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0); + SetBattlerSpriteYOffsetFromYScale(spriteId); if (gTasks[taskId].data[10] >= 0x2D0) gTasks[taskId].data[0]++; break; case 2: - sub_80A7344(spriteId); + ResetSpriteRotScale(spriteId); gSprites[spriteId].invisible = 1; DestroyAnimVisualTask(taskId); break; @@ -756,7 +756,7 @@ void sub_8170F2C(u8 taskId) } ballId = ItemIdToBallId(gLastUsedItem); - subpriority = GetBattlerSubpriority(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + 1; + subpriority = GetBattlerSpriteSubpriority(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + 1; spriteId = CreateSprite(&gBallSpriteTemplates[ballId], x + 32, y | 80, subpriority); gSprites[spriteId].data[0] = 34; gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 0); @@ -862,7 +862,7 @@ static void sub_8171240(struct Sprite *sprite) switch (gTasks[taskId].data[0]) { case 0: - sub_80A7270(spriteId, 0); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); gTasks[taskId].data[10] = 256; gUnknown_030062DC = 28; gUnknown_030062E4 = (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) - (sprite->pos1.y + sprite->pos2.y); @@ -872,14 +872,14 @@ static void sub_8171240(struct Sprite *sprite) break; case 1: gTasks[taskId].data[10] += 0x20; - obj_id_set_rotscale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0); + SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0); gTasks[taskId].data[3] += gTasks[taskId].data[2]; gSprites[spriteId].pos2.y = -gTasks[taskId].data[3] >> 8; if (gTasks[taskId].data[10] >= 0x480) gTasks[taskId].data[0]++; break; case 2: - sub_80A7344(spriteId); + ResetSpriteRotScale(spriteId); gSprites[spriteId].invisible = 1; gTasks[taskId].data[0]++; break; diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 78e0608e1..3b1b49e34 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -1,9 +1,15 @@ #include "global.h" +#include "alloc.h" #include "battle_anim.h" #include "battle_interface.h" +#include "decompress.h" #include "gpu_regs.h" +#include "graphics.h" +#include "main.h" +#include "math_util.h" #include "palette.h" #include "random.h" +#include "scanline_effect.h" #include "sound.h" #include "trig.h" #include "util.h" @@ -2220,7 +2226,7 @@ void sub_80FE8E0(struct Sprite* sprite) sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); sprite->callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); } void sub_80FE930(struct Sprite* sprite) @@ -2257,9 +2263,9 @@ static void sub_80FE9E4(struct Sprite* sprite) else { if (sprite->data[5] > 0x7F) - sprite->subpriority = GetBattlerSubpriority(gBattleAnimTarget) + 1; + sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1; else - sprite->subpriority = GetBattlerSubpriority(gBattleAnimTarget) + 6; + sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + 6; sprite->pos2.x += Sin(sprite->data[5], 5); sprite->pos2.y += Cos(sprite->data[5], 14); @@ -2278,7 +2284,7 @@ void sub_80FEA58(u8 taskId) gBattleAnimArgs[1] = 0; gBattleAnimArgs[2] = 80; gBattleAnimArgs[3] = 0; - CreateSpriteAndAnimate(&gUnknown_08592210, 0, 0, GetBattlerSubpriority(gBattleAnimTarget) + 1); + CreateSpriteAndAnimate(&gUnknown_08592210, 0, 0, GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1); } if (gTasks[taskId].data[1] == 15) @@ -2465,9 +2471,9 @@ static void sub_80FEECC(struct Sprite* sprite) sprite->pos2.x += Sin(sprite->data[5], 32); sprite->pos2.y += Cos(sprite->data[5], -5); if ((u16)(sprite->data[5] - 0x40) < 0x80) - sprite->subpriority = GetBattlerSubpriority(gBattleAnimAttacker) - 1; + sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; else - sprite->subpriority = GetBattlerSubpriority(gBattleAnimAttacker) + 1; + sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) + 1; sprite->data[5] = (sprite->data[5] + 5) & 0xFF; } @@ -2731,7 +2737,7 @@ void sub_80FF458(u8 taskId) } else { - sub_80A7270(spriteId, 1); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND); gTasks[taskId].data[14] = gSprites[spriteId].oam.priority; gSprites[spriteId].oam.priority = sub_80A8328(gBattleAnimTarget); spriteId = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER); @@ -2753,8 +2759,8 @@ static void sub_80FF53C(u8 taskId) gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; gTasks[taskId].data[11] += 16; - obj_id_set_rotscale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0); - sub_80A7E6C(spriteId); + SetSpriteRotScale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0); + SetBattlerSpriteYOffsetFromYScale(spriteId); if (--gTasks[taskId].data[1] == 0) { gTasks[taskId].data[0] = 0; @@ -2769,7 +2775,7 @@ static void sub_80FF5CC(u8 taskId) if (gTasks[taskId].data[0] == 0) { u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); - sub_80A7344(spriteId); + ResetSpriteRotScale(spriteId); gSprites[spriteId].pos2.x = 0; gSprites[spriteId].pos2.y = 0; gSprites[spriteId].oam.priority = gTasks[taskId].data[14]; @@ -2795,7 +2801,6 @@ void sub_80FF698(struct Sprite* sprite) switch (sprite->data[0]) { case 0: - { if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) gBattleAnimArgs[0] *= -1; @@ -2804,9 +2809,7 @@ void sub_80FF698(struct Sprite* sprite) sprite->invisible = 1; sprite->data[0]++; break; - } case 1: - { sprite->invisible = 0; if (sprite->affineAnimEnded) { @@ -2819,7 +2822,6 @@ void sub_80FF698(struct Sprite* sprite) break; } } - } } void sub_80FF768(struct Sprite* sprite) @@ -3205,7 +3207,7 @@ void sub_80FFFC0(u8 taskId) { struct Task *task = &gTasks[taskId]; - task->data[4] = GetBattlerSubpriority(gBattleAnimTarget) - 1; + task->data[4] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 1; task->data[6] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); task->data[10] = sub_80A861C(gBattleAnimTarget, 1); @@ -3529,7 +3531,7 @@ static void sub_810074C(struct Sprite* sprite) return; } - move_anim_8074EE0(sprite); + DestroySpriteAndMatrix(sprite); } void sub_81007C4(u8 taskId) @@ -3613,7 +3615,7 @@ void sub_8100898(struct Sprite* sprite) if (IsContest()) c -= 0x8000; - sub_80A73E0(sprite, 0, 0x100, 0x100, c); + TrySetSpriteRotScale(sprite, 0, 0x100, 0x100, c); sprite->callback = sub_81009A0; } } @@ -3630,7 +3632,7 @@ static void sub_81009A0(struct Sprite* sprite) } else { - move_anim_8074EE0(sprite); + DestroySpriteAndMatrix(sprite); } } @@ -3653,7 +3655,7 @@ void sub_81009F8(struct Sprite* sprite) sprite->pos1.y += gBattleAnimArgs[1]; } - sprite->callback = sub_80A67D8; + sprite->callback = RunStoredCallbackWhenAnimEnds; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } @@ -3676,7 +3678,7 @@ void sub_8100A94(struct Sprite* sprite) sprite->data[3] = gBattleAnimArgs[4]; sprite->data[5] = gBattleAnimArgs[5]; StartSpriteAffineAnim(sprite, gBattleAnimArgs[6]); - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); sprite->callback = sub_80A66DC; } @@ -4024,7 +4026,7 @@ static void sub_8101298(struct Sprite* sprite, int unk1, int unk2) void sub_810130C(struct Sprite* sprite) { if (!gBattleAnimArgs[2]) - sub_80A6838(sprite); + SetSpriteCoordsToAnimAttackerCoords(sprite); sub_80A6864(sprite, gBattleAnimArgs[0]); sprite->pos1.y += gBattleAnimArgs[1]; @@ -4032,7 +4034,7 @@ void sub_810130C(struct Sprite* sprite) sprite->data[1] = gBattleAnimArgs[3]; sprite->data[2] = gBattleAnimArgs[4]; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = sub_80A656C; + sprite->callback = TranslateAnimLinearSimple; } void sub_810135C(struct Sprite* sprite) @@ -4069,13 +4071,13 @@ void sub_810135C(struct Sprite* sprite) sprite->data[1] = gBattleAnimArgs[3]; sprite->data[2] = gBattleAnimArgs[4]; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = sub_80A656C; + sprite->callback = TranslateAnimLinearSimple; } void sub_8101440(struct Sprite* sprite) { - sub_80A6838(sprite); - if (GetBattlerSide(gBattleAnimAttacker) == 0) + SetSpriteCoordsToAnimAttackerCoords(sprite); + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) { sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; @@ -4105,7 +4107,7 @@ static void sub_81014A0(struct Sprite* sprite) void sub_81014F4(struct Sprite* sprite) { - sub_80A6838(sprite); + SetSpriteCoordsToAnimAttackerCoords(sprite); if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) { sprite->pos1.x += gBattleAnimArgs[0]; @@ -4130,7 +4132,7 @@ static void sub_8101560(struct Sprite* sprite) sprite->data[4] += sprite->data[3] * 2; sprite->data[0] += sprite->data[1]; if (++sprite->data[1] > 60) - move_anim_8074EE0(sprite); + DestroySpriteAndMatrix(sprite); } void sub_81015AC(struct Sprite* sprite) @@ -4347,14 +4349,14 @@ static void sub_81019E8(struct Sprite* sprite) if (sprite->data[0] == 0) { sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; - sub_80A7270(sprite->data[3], 0); + PrepareBattlerSpriteForRotScale(sprite->data[3], ST_OAM_OBJ_NORMAL); sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : 0xFFFFFD00; sprite->data[5] = 0; } sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); - sub_80A73A0(sprite->data[3]); + SetSpriteRotScale(sprite->data[3], 0x100, 0x100, sprite->data[5]); + SetBattlerSpriteYOffsetFromRotation(sprite->data[3]); if (++sprite->data[0] > 3) { sprite->data[0] = 0; @@ -4400,11 +4402,11 @@ static void sub_8101AE8(struct Sprite* sprite) } sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); - sub_80A73A0(sprite->data[3]); + SetSpriteRotScale(sprite->data[3], 0x100, 0x100, sprite->data[5]); + SetBattlerSpriteYOffsetFromRotation(sprite->data[3]); if (++sprite->data[0] > 2) { - sub_80A7344(sprite->data[3]); + ResetSpriteRotScale(sprite->data[3]); sprite->callback = sub_8101B84; } } @@ -4430,13 +4432,13 @@ static void sub_8101BA0(struct Sprite *sprite) sprite->data[3] = GetBattlerSide(gBattleAnimAttacker); sprite->data[4] = (sprite->data[3] != B_SIDE_PLAYER) ? 0x200 : -0x200; sprite->data[5] = 0; - sub_80A7270(sprite->data[2], 0); + PrepareBattlerSpriteForRotScale(sprite->data[2], ST_OAM_OBJ_NORMAL); sprite->data[0]++; // fall through case 1: sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); - sub_80A73A0(sprite->data[2]); + SetSpriteRotScale(sprite->data[2], 0x100, 0x100, sprite->data[5]); + SetBattlerSpriteYOffsetFromRotation(sprite->data[2]); if (++sprite->data[1] > 3) { sprite->data[1] = 0; @@ -4446,11 +4448,11 @@ static void sub_8101BA0(struct Sprite *sprite) break; case 2: sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); - sub_80A73A0(sprite->data[2]); + SetSpriteRotScale(sprite->data[2], 0x100, 0x100, sprite->data[5]); + SetBattlerSpriteYOffsetFromRotation(sprite->data[2]); if (++sprite->data[1] > 3) { - sub_80A7344(sprite->data[2]); + ResetSpriteRotScale(sprite->data[2]); DestroyAnimSprite(sprite); } break; @@ -4512,7 +4514,7 @@ static void sub_8101D2C(u8 taskId) task->data[3] = 8; task->data[4] = 0; task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0; - sub_80A7270(task->data[0], 0); + PrepareBattlerSpriteForRotScale(task->data[0], ST_OAM_OBJ_NORMAL); task->data[2]++; } break; @@ -4520,8 +4522,8 @@ static void sub_8101D2C(u8 taskId) if (task->data[3]) { task->data[4] += task->data[5]; - obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); - sub_80A73A0(task->data[0]); + SetSpriteRotScale(task->data[0], 0x100, 0x100, task->data[4]); + SetBattlerSpriteYOffsetFromRotation(task->data[0]); task->data[3]--; } else @@ -4592,13 +4594,13 @@ static void sub_8101EEC(u8 taskId) if (task->data[3]) { task->data[4] -= task->data[5]; - obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); - sub_80A73A0(task->data[0]); + SetSpriteRotScale(task->data[0], 0x100, 0x100, task->data[4]); + SetBattlerSpriteYOffsetFromRotation(task->data[0]); task->data[3]--; } else { - sub_80A7344(task->data[0]); + ResetSpriteRotScale(task->data[0]); DestroyAnimVisualTask(taskId); } } @@ -4619,7 +4621,7 @@ void sub_8101F40(struct Sprite* sprite) sprite->data[0] = 0; sprite->data[1] = 0; StoreSpriteCallbackInData6(sprite, sub_810208C); - sprite->callback = sub_80A67D8; + sprite->callback = RunStoredCallbackWhenAnimEnds; } void sub_8101FA8(struct Sprite* sprite) @@ -4627,7 +4629,7 @@ void sub_8101FA8(struct Sprite* sprite) sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0; sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); StoreSpriteCallbackInData6(sprite, sub_8102044); - sprite->callback = sub_80A67D8; + sprite->callback = RunStoredCallbackWhenAnimEnds; } void sub_8101FF0(struct Sprite* sprite) @@ -4914,7 +4916,7 @@ void sub_81025C0(u8 taskId) gTasks[taskId].data[9] = 15; b = sub_80A76C4(1, 1, 1, 1); c = a | b; - sub_80A8048(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c); + StorePointerInVars(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c); b = b | (0x10000 << IndexOfSpritePaletteTag(ANIM_TAG_MOON)); d = IndexOfSpritePaletteTag(ANIM_TAG_GREEN_SPARKLE); BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 16, RGB(27, 29, 31)); @@ -4989,7 +4991,7 @@ void sub_81026A8(u8 taskId) case 2: if (++task->data[1] > 30) { - BeginNormalPaletteFade((u32)sub_80A8050(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31)); + BeginNormalPaletteFade((u32)LoadPointerFromVars(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31)); task->data[0]++; } break; @@ -5080,7 +5082,7 @@ void sub_81029B4(u8 taskId) BlendPalette(r3, 16, 11, RGB(0, 0, 0)); task->data[3] = 0; i = 0; - while (i < 2 && (obj = duplicate_obj_of_side_rel2move_in_transparent_mode(0)) >= 0) + while (i < 2 && (obj = CloneBattlerSpriteWithBlend(0)) >= 0) { gSprites[obj].oam.paletteNum = task->data[1]; gSprites[obj].data[0] = 0; @@ -5138,7 +5140,7 @@ static void sub_8102B3C(struct Sprite* sprite) void sub_8102BCC(struct Sprite* sprite) { StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = sub_80A67D8; + sprite->callback = RunStoredCallbackWhenAnimEnds; } void sub_8102BE8(u8 taskId) @@ -5183,7 +5185,7 @@ void sub_8102CD4(struct Sprite* sprite) u8 index; u8 a; u8 b; - sub_80A6838(sprite); + SetSpriteCoordsToAnimAttackerCoords(sprite); StartSpriteAnim(sprite, gBattleAnimArgs[0]); if ((index = IndexOfSpritePaletteTag(gUnknown_08593020[gBattleAnimArgs[1]][0])) != 0xFF) sprite->oam.paletteNum = index; @@ -5242,7 +5244,7 @@ static void sub_8102DE4(struct Sprite* sprite) if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80) { - move_anim_8074EE0(sprite); + DestroySpriteAndMatrix(sprite); } else { @@ -5296,7 +5298,7 @@ static void sub_8102F40(struct Sprite* sprite) } if (++sprite->data[0] == 48) - move_anim_8074EE0(sprite); + DestroySpriteAndMatrix(sprite); } void sub_8102FB8(struct Sprite* sprite) @@ -5323,7 +5325,7 @@ void sub_8103028(struct Sprite* sprite) { s16 xDiff; u8 index; - sub_80A6838(sprite); + SetSpriteCoordsToAnimAttackerCoords(sprite); sprite->pos1.y += 8; StartSpriteAnim(sprite, gBattleAnimArgs[1]); index = IndexOfSpritePaletteTag(gUnknown_08593020[gBattleAnimArgs[2]][0]); @@ -5385,7 +5387,7 @@ void sub_8103164(struct Sprite* sprite) sprite->data[1] = a + 2; StartSpriteAnim(sprite, a); StoreSpriteCallbackInData6(sprite, sub_81031D0); - sprite->callback = sub_80A67D8; + sprite->callback = RunStoredCallbackWhenAnimEnds; } static void sub_81031D0(struct Sprite* sprite) @@ -5394,7 +5396,7 @@ static void sub_81031D0(struct Sprite* sprite) { StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); StartSpriteAnim(sprite, sprite->data[1]); - sprite->callback = sub_80A67D8; + sprite->callback = RunStoredCallbackWhenAnimEnds; } } @@ -5409,7 +5411,7 @@ void sub_8103208(struct Sprite* sprite) sub_810310C(battler, sprite); sprite->data[0] = 0; StoreSpriteCallbackInData6(sprite, sub_8103250); - sprite->callback = sub_80A67BC; + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; } static void sub_8103250(struct Sprite* sprite) @@ -5417,8 +5419,8 @@ static void sub_8103250(struct Sprite* sprite) if (++sprite->data[0] > 16) { StartSpriteAffineAnim(sprite, 1); - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); - sprite->callback = sub_80A67BC; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; } } @@ -5441,7 +5443,7 @@ void sub_8103284(struct Sprite* sprite) sprite->data[3] = sprite->subpriority + 4; sprite->data[4] = 0; StoreSpriteCallbackInData6(sprite, sub_8103300); - sprite->callback = sub_80A67BC; + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; } static void sub_8103300(struct Sprite* sprite) @@ -5509,7 +5511,7 @@ static void sub_81033F0(struct Sprite* sprite) sprite->data[1] = 0; StartSpriteAnim(sprite, sprite->data[0]); StoreSpriteCallbackInData6(sprite, sub_810342C); - sprite->callback = sub_80A67D8; + sprite->callback = RunStoredCallbackWhenAnimEnds; } } diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c new file mode 100755 index 000000000..244823d13 --- /dev/null +++ b/src/battle_anim_effects_2.c @@ -0,0 +1,3884 @@ +#include "global.h" +#include "alloc.h" +#include "battle_anim.h" +#include "battle_interface.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "main.h" +#include "math_util.h" +#include "palette.h" +#include "random.h" +#include "scanline_effect.h" +#include "sound.h" +#include "trig.h" +#include "util.h" +#include "constants/rgb.h" +#include "constants/songs.h" + +extern void sub_8108C94(struct Sprite *); +extern void sub_810310C(u8, struct Sprite *); + +void sub_8103448(struct Sprite *); +void sub_8103498(struct Sprite *); +void sub_810358C(struct Sprite *); +void sub_8103620(struct Sprite *); +void Anim_KinesisZapEnergy(struct Sprite *); +void Anim_SwordsDanceBlade(struct Sprite *); +void AnimSonicBoomProjectile(struct Sprite *); +void sub_8103AA4(struct Sprite *); +void sub_8103FE8(struct Sprite *); +void sub_8104088(struct Sprite *); +void sub_810413C(struct Sprite *); +void sub_81041C4(struct Sprite *); +void Anim_RazorWindTornado(struct Sprite *); +void Anim_ViceGripPincer(struct Sprite *); +void Anim_GuillotinePincer(struct Sprite *); +void Anim_BreathPuff(struct Sprite *); +void Anim_AngerMark(struct Sprite *); +void sub_810501C(struct Sprite *); +void sub_81051C4(struct Sprite *); +void sub_81052A4(struct Sprite *); +void sub_81054E8(struct Sprite *); +void sub_8105538(struct Sprite *); +void sub_8105C48(struct Sprite *); +void sub_8105DE8(struct Sprite *); +void sub_8105E60(struct Sprite *); +void sub_8106140(struct Sprite *); +void sub_81061C4(struct Sprite *); +void sub_810624C(struct Sprite *); +void AnimOrbitFast(struct Sprite *); +void AnimOrbitScatter(struct Sprite *); +void sub_8106944(struct Sprite *); +void sub_81069B8(struct Sprite *); +void sub_81069D0(struct Sprite *); +void sub_8106AD0(struct Sprite *); +void sub_8106B54(struct Sprite *); +void sub_8106C80(struct Sprite *); +void sub_8106CD0(struct Sprite *); +void sub_8106E00(struct Sprite *); +void sub_8106F00(struct Sprite *); +void sub_8106F60(struct Sprite *); +void sub_81070AC(struct Sprite *); +static void sub_81034D8(struct Sprite *); +static void sub_8103658(struct Sprite *); +static void sub_8103680(struct Sprite *); +static void AnimTask_WithdrawStep(u8); +static void Anim_SwordsDanceBladeStep(struct Sprite *); +static void sub_8104018(struct Sprite *); +static void sub_8104154(struct Sprite *); +static void sub_810421C(struct Sprite *); +static void sub_81042A0(struct Sprite *); +static void Anim_ViceGripPincerStep(struct Sprite *); +static void Anim_GuillotinePincerStep1(struct Sprite *); +static void Anim_GuillotinePincerStep2(struct Sprite *); +static void Anim_GuillotinePincerStep3(struct Sprite *); +static void AnimTask_GrowAndGreyscaleStep(u8); +static void AnimTask_MinimizeStep1(u8); +static void CreateMinimizeSprite(struct Task *, u8); +static void ClonedMinizeSprite_Step(struct Sprite *); +static void AnimTask_SplashStep(u8); +static void AnimTask_GrowAndShrinkStep(u8); +static void sub_8104C78(u8); +static void sub_8104D28(u8); +static void sub_8104F54(u8); +static void sub_8105078(struct Sprite *); +static void sub_810557C(struct Sprite *); +static void sub_81055F4(struct Sprite *); +static void sub_810561C(struct Sprite *); +static void sub_8105694(struct Sprite *); +static void sub_81056D4(struct Sprite *); +static void sub_810571C(struct Sprite *); +static void sub_810575C(struct Sprite *); +static void sub_81057B8(u8); +static void sub_8105878(u8); +static void sub_81059E0(u8); +static void sub_8105B08(u8); +static void sub_8105F30(u8); +static void sub_8105F84(u8); +static void sub_810618C(struct Sprite *); +static void sub_810627C(struct Sprite *); +static void sub_81063A8(u8); +static void sub_81065EC(u8); +static void AnimOrbitFastStep(struct Sprite *); +static void AnimOrbitScatterStep(struct Sprite *); +static void sub_8106D5C(struct Sprite *); +static void sub_8106DD4(u8); +static void sub_8106EC8(struct Sprite *); +static void sub_8107018(struct Sprite *); +static void sub_810703C(struct Sprite *); + +const struct SpriteTemplate gUnknown_08593264 = +{ + .tileTag = ANIM_TAG_FINGER, + .paletteTag = ANIM_TAG_FINGER, + .oam = &gUnknown_08524914, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8103448, +}; + +const union AnimCmd gUnknown_0859327C[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_08593284[] = +{ + gUnknown_0859327C, +}; + +const struct SpriteTemplate gUnknown_08593288 = +{ + .tileTag = ANIM_TAG_MUSIC_NOTES, + .paletteTag = ANIM_TAG_MUSIC_NOTES, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8103498, +}; + +const struct SpriteTemplate gUnknown_085932A0 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_810358C, +}; + +extern const union AffineAnimCmd *const gUnknown_08597060[]; +const struct SpriteTemplate gUnknown_085932B8 = +{ + .tileTag = ANIM_TAG_CLAMP, + .paletteTag = ANIM_TAG_CLAMP, + .oam = &gUnknown_08524A9C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08597060, + .callback = sub_8103620, +}; + +const union AnimCmd gUnknown_085932D0[] = +{ + ANIMCMD_FRAME(0, 9), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_085932E4[] = +{ + gUnknown_085932D0, +}; + +const union AffineAnimCmd gUnknown_085932E8[] = +{ + AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0), + AFFINEANIMCMD_FRAME(0x9, 0x9, 0, 18), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gUnknown_08593300[] = +{ + gUnknown_085932E8, +}; + +const struct SpriteTemplate gUnknown_08593304 = +{ + .tileTag = ANIM_TAG_UNUSED_EXPLOSION, + .paletteTag = ANIM_TAG_UNUSED_EXPLOSION, + .oam = &gUnknown_08524974, + .anims = gUnknown_085932E4, + .images = NULL, + .affineAnims = gUnknown_08593300, + .callback = sub_80A77C8, +}; + +const union AnimCmd gUnknown_0859331C[] = +{ + ANIMCMD_FRAME(0, 3, .hFlip = TRUE), + ANIMCMD_FRAME(8, 3, .hFlip = TRUE), + ANIMCMD_FRAME(16, 3, .hFlip = TRUE), + ANIMCMD_FRAME(24, 3, .hFlip = TRUE), + ANIMCMD_FRAME(32, 3, .hFlip = TRUE), + ANIMCMD_FRAME(40, 3, .hFlip = TRUE), + ANIMCMD_FRAME(48, 3, .hFlip = TRUE), + ANIMCMD_LOOP(1), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_08593340[] = +{ + gUnknown_0859331C, +}; + +const struct SpriteTemplate gKinesisZapEnergySpriteTemplate = +{ + .tileTag = ANIM_TAG_ALERT, + .paletteTag = ANIM_TAG_ALERT, + .oam = &gUnknown_08524934, + .anims = gUnknown_08593340, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = Anim_KinesisZapEnergy, +}; + +const union AffineAnimCmd gUnknown_0859335C[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x14, 0x0, 0, 12), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gUnknown_0859337C[] = +{ + gUnknown_0859335C, +}; + +const struct SpriteTemplate gSwordsDanceBladeSpriteTemplate = +{ + .tileTag = ANIM_TAG_SWORD, + .paletteTag = ANIM_TAG_SWORD, + .oam = &gUnknown_08524ADC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_0859337C, + .callback = Anim_SwordsDanceBlade, +}; + +const struct SpriteTemplate gSonicBoomSpriteTemplate = +{ + .tileTag = ANIM_TAG_AIR_WAVE, + .paletteTag = ANIM_TAG_AIR_WAVE, + .oam = &gUnknown_08524B14, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSonicBoomProjectile, +}; + +const struct SpriteTemplate gUnknown_085933B0 = +{ + .tileTag = ANIM_TAG_AIR_WAVE, + .paletteTag = ANIM_TAG_AIR_WAVE, + .oam = &gUnknown_08524A54, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8103AA4, +}; + +const union AffineAnimCmd gUnknown_085933C8[] = +{ + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0), + AFFINEANIMCMD_FRAME(0x7, 0x7, 0, -56), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_085933E0[] = +{ + AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10), + AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10), + AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10), + AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10), + AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10), + AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10), + AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gUnknown_08593420[] = +{ + gUnknown_085933C8, +}; + +const union AffineAnimCmd *const gUnknown_08593424[] = +{ + gUnknown_085933E0, +}; + +const struct SpriteTemplate gSupersonicWaveSpriteTemplate = +{ + .tileTag = ANIM_TAG_GOLD_RING, + .paletteTag = ANIM_TAG_GOLD_RING, + .oam = &gUnknown_08524A14, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08593420, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +const struct SpriteTemplate gScreechWaveSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_RING, + .paletteTag = ANIM_TAG_PURPLE_RING, + .oam = &gUnknown_08524A14, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08593420, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +const struct SpriteTemplate gUnknown_08593458 = +{ + .tileTag = ANIM_TAG_METAL_SOUND_WAVES, + .paletteTag = ANIM_TAG_METAL_SOUND_WAVES, + .oam = &gUnknown_08524A1C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08593420, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +const struct SpriteTemplate gUnknown_08593470 = +{ + .tileTag = ANIM_TAG_BLUE_RING_2, + .paletteTag = ANIM_TAG_BLUE_RING_2, + .oam = &gUnknown_08524A14, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08593424, + .callback = sub_8108C94, +}; + +const struct SpriteTemplate gUnknown_08593488 = +{ + .tileTag = ANIM_TAG_LARGE_FRESH_EGG, + .paletteTag = ANIM_TAG_LARGE_FRESH_EGG, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A78AC, +}; + +const struct SpriteTemplate gUnknown_085934A0 = +{ + .tileTag = ANIM_TAG_UNUSED_VOID_LINES, + .paletteTag = ANIM_TAG_UNUSED_VOID_LINES, + .oam = &gUnknown_08524A3C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8103FE8, +}; + +const union AnimCmd gUnknown_085934B8[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_085934C0[] = +{ + gUnknown_085934B8, +}; + +const union AffineAnimCmd gUnknown_085934C4[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gUnknown_085934D4[] = +{ + gUnknown_085934C4, +}; + +const struct SpriteTemplate gUnknown_085934D8 = +{ + .tileTag = ANIM_TAG_COIN, + .paletteTag = ANIM_TAG_COIN, + .oam = &gUnknown_0852496C, + .anims = gUnknown_085934C0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8104088, +}; + +const struct SpriteTemplate gUnknown_085934F0 = +{ + .tileTag = ANIM_TAG_COIN, + .paletteTag = ANIM_TAG_COIN, + .oam = &gUnknown_0852496C, + .anims = gUnknown_085934C0, + .images = NULL, + .affineAnims = gUnknown_085934D4, + .callback = sub_810413C, +}; + +const union AffineAnimCmd gUnknown_08593508[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gUnknown_08593518[] = +{ + gUnknown_08593508, +}; + +const struct SpriteTemplate gUnknown_0859351C = +{ + .tileTag = ANIM_TAG_SEED, + .paletteTag = ANIM_TAG_SEED, + .oam = &gUnknown_0852496C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08593518, + .callback = sub_81041C4, +}; + +const union AffineAnimCmd gUnknown_08593534[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x0, 0, 40), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gUnknown_0859354C[] = +{ + gUnknown_08593534, +}; + +const struct SpriteTemplate gRazorWindTornadoSpriteTemplate = +{ + .tileTag = ANIM_TAG_GUST, + .paletteTag = ANIM_TAG_GUST, + .oam = &gUnknown_085249BC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_0859354C, + .callback = Anim_RazorWindTornado, +}; + +const union AnimCmd gUnknown_08593568[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 20), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_08593578[] = +{ + ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 20, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_08593588[] = +{ + gUnknown_08593568, + gUnknown_08593578, +}; + +const struct SpriteTemplate gViceGripSpriteTemplate = +{ + .tileTag = ANIM_TAG_CUT, + .paletteTag = ANIM_TAG_CUT, + .oam = &gUnknown_08524A34, + .anims = gUnknown_08593588, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = Anim_ViceGripPincer, +}; + +const union AnimCmd gUnknown_085935A8[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_085935B8[] = +{ + ANIMCMD_FRAME(0, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(16, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 1, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_085935C8[] = +{ + gUnknown_085935A8, + gUnknown_085935B8, +}; + +const struct SpriteTemplate gGuillotineSpriteTemplate = +{ + .tileTag = ANIM_TAG_CUT, + .paletteTag = ANIM_TAG_CUT, + .oam = &gUnknown_08524A34, + .anims = gUnknown_085935C8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = Anim_GuillotinePincer, +}; + +const union AffineAnimCmd gSplashEffectAffineAnimCmds[] = +{ + AFFINEANIMCMD_FRAME(-6, 4, 0, 8), + AFFINEANIMCMD_FRAME(10, -10, 0, 8), + AFFINEANIMCMD_FRAME(-4, 6, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gGrowAndShrinkAffineAnimCmds[] = +{ + AFFINEANIMCMD_FRAME(-4, -5, 0, 12), + AFFINEANIMCMD_FRAME(0, 0, 0, 24), + AFFINEANIMCMD_FRAME(4, 5, 0, 12), + AFFINEANIMCMD_END, +}; + +const union AnimCmd gUnknown_08593628[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(4, 40, .hFlip = TRUE), + ANIMCMD_FRAME(8, 4, .hFlip = TRUE), + ANIMCMD_FRAME(12, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_0859363C[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 40), + ANIMCMD_FRAME(8, 4), + ANIMCMD_FRAME(12, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_08593650[] = +{ + gUnknown_08593628, + gUnknown_0859363C, +}; + +const struct SpriteTemplate gBreathPuffSpriteTemplate = +{ + .tileTag = ANIM_TAG_BREATH, + .paletteTag = ANIM_TAG_BREATH, + .oam = &gUnknown_0852490C, + .anims = gUnknown_08593650, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = Anim_BreathPuff, +}; + +const union AffineAnimCmd gUnknown_08593670[] = +{ + AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 8), + AFFINEANIMCMD_FRAME(0xFFF5, 0xFFF5, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gUnknown_08593688[] = +{ + gUnknown_08593670, +}; + +const struct SpriteTemplate gAngerMarkSpriteTemplate = +{ + .tileTag = ANIM_TAG_ANGER, + .paletteTag = ANIM_TAG_ANGER, + .oam = &gUnknown_0852496C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08593688, + .callback = Anim_AngerMark, +}; + +const union AffineAnimCmd gUnknown_085936A4[] = +{ + AFFINEANIMCMD_FRAME(-10, 9, 0, 7), + AFFINEANIMCMD_FRAME(20, -20, 0, 7), + AFFINEANIMCMD_FRAME(-20, 20, 0, 7), + AFFINEANIMCMD_FRAME(10, -9, 0, 7), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_END, +}; + +const struct SpriteTemplate gUnknown_085936D4 = +{ + .tileTag = ANIM_TAG_PENCIL, + .paletteTag = ANIM_TAG_PENCIL, + .oam = &gUnknown_08524914, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_810501C, +}; + +const struct SpriteTemplate gUnknown_085936EC = +{ + .tileTag = ANIM_TAG_SNORE_Z, + .paletteTag = ANIM_TAG_SNORE_Z, + .oam = &gUnknown_08524914, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A7938, +}; + +const union AnimCmd gUnknown_08593704[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(48, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_08593718[] = +{ + gUnknown_08593704, +}; +//* +const struct SpriteTemplate gBattleAnimSpriteTemplate_859371C = +{ + .tileTag = ANIM_TAG_EXPLOSION, + .paletteTag = ANIM_TAG_EXPLOSION, + .oam = &gUnknown_08524914, + .anims = gUnknown_08593718, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A77C8, +}; + +const union AffineAnimCmd gUnknown_08593734[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gUnknown_08593754[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_08593764[] = +{ + AFFINEANIMCMD_FRAME(0xFFF8, 0x4, 0, 8), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0x10, 0xFFF8, 0, 8), + AFFINEANIMCMD_FRAME(0xFFF0, 0x8, 0, 8), + AFFINEANIMCMD_LOOP(1), + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 15), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gUnknown_085937A4[] = +{ + gUnknown_08593734, + gUnknown_08593754, + gUnknown_08593764, +}; +//* +const struct SpriteTemplate gUnknown_085937B0 = +{ + .tileTag = ANIM_TAG_BREAKING_EGG, + .paletteTag = ANIM_TAG_BREAKING_EGG, + .oam = &gUnknown_08524AF4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_085937A4, + .callback = sub_8105538, +}; + +const union AffineAnimCmd gUnknown_085937C8[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 30), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd gUnknown_085937E0[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 15), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd gUnknown_085937F8[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 45), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd *const gUnknown_08593810[] = +{ + gUnknown_085937C8, + gUnknown_085937E0, +}; + +const union AffineAnimCmd *const gUnknown_08593818[] = +{ + gUnknown_085937F8, +}; + +const struct SpriteTemplate gUnknown_0859381C = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_THIN_RING, + .oam = &gUnknown_085249DC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08593810, + .callback = sub_80A77C8, +}; +//* +const union AffineAnimCmd gUnknown_08593834[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 30), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd *const gUnknown_0859384C[] = +{ + gUnknown_08593834, +}; + +const struct SpriteTemplate gUnknown_08593850 = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_THIN_RING, + .oam = &gUnknown_08524AFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_0859384C, + .callback = sub_80A77C8, +}; + +const struct SpriteTemplate gUnknown_08593868 = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_THIN_RING, + .oam = &gUnknown_08524AFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08593810, + .callback = sub_81051C4, +}; + +const struct SpriteTemplate gUnknown_08593880 = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_THIN_RING, + .oam = &gUnknown_08524AFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08593818, + .callback = sub_81052A4, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8593898 = +{ + .tileTag = ANIM_TAG_THIN_RING, + .paletteTag = ANIM_TAG_THIN_RING, + .oam = &gUnknown_08524AFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08593810, + .callback = sub_81054E8, +}; + +const union AffineAnimCmd gUnknown_085938B0[] = +{ + AFFINEANIMCMD_FRAME(96, -13, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AnimCmd gUnknown_085938C0[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(4, 3), + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(4, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_085938D8[] = +{ + gUnknown_085938C0, +}; + +const struct SpriteTemplate gUnknown_085938DC = +{ + .tileTag = ANIM_TAG_SPEED_DUST, + .paletteTag = ANIM_TAG_SPEED_DUST, + .oam = &gUnknown_0852490C, + .anims = gUnknown_085938D8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8105C48, +}; + +const s8 gUnknown_085938F4[][2] = +{ + {30, 28}, + {-20, 24}, + {16, 26}, + {-10, 28}, +}; + +const union AnimCmd gUnknown_085938FC[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 6, .hFlip = TRUE), + ANIMCMD_FRAME(32, 15, .hFlip = TRUE), + ANIMCMD_FRAME(16, 6, .hFlip = TRUE), + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(0, 6), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_08593934[] = +{ + gUnknown_085938FC, +}; + +const struct SpriteTemplate gUnknown_08593938 = +{ + .tileTag = ANIM_TAG_BELL, + .paletteTag = ANIM_TAG_BELL, + .oam = &gUnknown_08524914, + .anims = gUnknown_08593934, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A77C8, +}; + +const u16 gUnknown_08593950[] = +{ + ANIM_TAG_MUSIC_NOTES_2, + ANIM_SPRITES_START - 1, + ANIM_SPRITES_START - 2, +}; + +const struct SpriteTemplate gUnknown_08593958 = +{ + .tileTag = ANIM_TAG_MUSIC_NOTES_2, + .paletteTag = ANIM_TAG_MUSIC_NOTES_2, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8105DE8, +}; + +const struct SpriteTemplate gUnknown_08593970 = +{ + .tileTag = ANIM_TAG_MAGENTA_HEART, + .paletteTag = ANIM_TAG_MAGENTA_HEART, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8105E60, +}; + +const union AffineAnimCmd gUnknown_08593988[] = +{ + AFFINEANIMCMD_FRAME(0x000A, 0xFFF3, 0x00, 0x0A), + AFFINEANIMCMD_FRAME(0xFFF6, 0x000D, 0x00, 0x0A), + AFFINEANIMCMD_END, +}; + +const struct SpriteTemplate gUnknown_085939A0 = +{ + .tileTag = ANIM_TAG_RED_HEART, + .paletteTag = ANIM_TAG_RED_HEART, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8106140, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_85939B8 = +{ + .tileTag = ANIM_TAG_RED_HEART, + .paletteTag = ANIM_TAG_RED_HEART, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81061C4, +}; + +const struct SpriteTemplate gUnknown_085939D0 = +{ + .tileTag = ANIM_TAG_RED_HEART, + .paletteTag = ANIM_TAG_RED_HEART, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_810624C, +}; + +const union AffineAnimCmd gUnknown_085939E8[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gUnknown_08593A00[] = +{ + gUnknown_085939E8, +}; + +const struct SpriteTemplate gHiddenPowerOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_RED_ORB, + .paletteTag = ANIM_TAG_RED_ORB, + .oam = &gUnknown_0852496C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08593A00, + .callback = AnimOrbitFast, +}; + +const struct SpriteTemplate gHiddenPowerOrbScatterSpriteTemplate = +{ + .tileTag = ANIM_TAG_RED_ORB, + .paletteTag = ANIM_TAG_RED_ORB, + .oam = &gUnknown_085249CC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08593A00, + .callback = AnimOrbitScatter, +}; + +const union AffineAnimCmd gUnknown_08593A34[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd *const gUnknown_08593A4C[] = +{ + gUnknown_08593A34, +}; + +const struct SpriteTemplate gUnknown_08593A50 = +{ + .tileTag = ANIM_TAG_RED_ORB_2, + .paletteTag = ANIM_TAG_RED_ORB_2, + .oam = &gUnknown_085249C4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08593A4C, + .callback = sub_8106944, +}; + +const union AnimCmd gUnknown_08593A68[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(8, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_08593A80[] = +{ + gUnknown_08593A68, +}; + +const struct SpriteTemplate gUnknown_08593A84 = +{ + .tileTag = ANIM_TAG_EYE_SPARKLE, + .paletteTag = ANIM_TAG_EYE_SPARKLE, + .oam = &gUnknown_0852490C, + .anims = gUnknown_08593A80, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81069B8, +}; + +const union AnimCmd gUnknown_08593A9C[] = +{ + ANIMCMD_FRAME(0, 24), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_08593AA4[] = +{ + gUnknown_08593A9C, +}; + +const struct SpriteTemplate gUnknown_08593AA8 = +{ + .tileTag = ANIM_TAG_ANGEL, + .paletteTag = ANIM_TAG_ANGEL, + .oam = &gUnknown_08524914, + .anims = gUnknown_08593AA4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81069D0, +}; + +const struct SpriteTemplate gUnknown_08593AC0 = +{ + .tileTag = ANIM_TAG_PINK_HEART, + .paletteTag = ANIM_TAG_PINK_HEART, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8106AD0, +}; + +const union AnimCmd gUnknown_08593AD8[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gUnknown_08593AE0[] = +{ + ANIMCMD_FRAME(16, 3), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gUnknown_08593AE8[] = +{ + gUnknown_08593AD8, + gUnknown_08593AE0, +}; + +const struct SpriteTemplate gUnknown_08593AF0 = +{ + .tileTag = ANIM_TAG_DEVIL, + .paletteTag = ANIM_TAG_DEVIL, + .oam = &gUnknown_08524914, + .anims = gUnknown_08593AE8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8106B54, +}; + +const union AnimCmd gUnknown_08593B08[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_08593B1C[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_FRAME(48, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_08593B30[] = +{ + gUnknown_08593B08, + gUnknown_08593B1C, +}; + +const struct SpriteTemplate gUnknown_08593B38 = +{ + .tileTag = ANIM_TAG_SWIPE, + .paletteTag = ANIM_TAG_SWIPE, + .oam = &gUnknown_08524914, + .anims = gUnknown_08593B30, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8106C80, +}; + +const union AnimCmd gUnknown_08593B50[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(16, 8), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_08593B64[] = +{ + ANIMCMD_FRAME(16, 8, .hFlip = TRUE), + ANIMCMD_FRAME(32, 8, .hFlip = TRUE), + ANIMCMD_FRAME(16, 8, .hFlip = TRUE), + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_08593B78[] = +{ + gUnknown_08593B50, + gUnknown_08593B64, +}; + +const struct SpriteTemplate gUnknown_08593B80 = +{ + .tileTag = ANIM_TAG_MOVEMENT_WAVES, + .paletteTag = ANIM_TAG_MOVEMENT_WAVES, + .oam = &gUnknown_08524914, + .anims = gUnknown_08593B78, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8106CD0, +}; + +const union AffineAnimCmd gUnknown_08593B98[] = +{ + AFFINEANIMCMD_FRAME(-12, 8, 0, 4), + AFFINEANIMCMD_FRAME(20, -20, 0, 4), + AFFINEANIMCMD_FRAME(-8, 12, 0, 4), + AFFINEANIMCMD_END, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_8593BB8 = +{ + .tileTag = ANIM_TAG_JAGGED_MUSIC_NOTE, + .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE, + .oam = &gUnknown_08524914, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8106E00, +}; + +const union AffineAnimCmd gUnknown_08593BD0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 5), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_08593BE0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 16), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd gUnknown_08593BF0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 16), + AFFINEANIMCMD_END_ALT(1), +}; + +const union AffineAnimCmd *const gUnknown_08593C00[] = +{ + gUnknown_08593BD0, + gUnknown_08593BE0, + gUnknown_08593BF0, +}; + +extern const union AnimCmd *const gUnknown_08592FCC[]; +const struct SpriteTemplate gUnknown_08593C0C = +{ + .tileTag = ANIM_TAG_MUSIC_NOTES_2, + .paletteTag = ANIM_TAG_MUSIC_NOTES_2, + .oam = &gUnknown_0852496C, + .anims = gUnknown_08592FCC, + .images = NULL, + .affineAnims = gUnknown_08593C00, + .callback = sub_8106F60, +}; + +const struct SpriteTemplate gUnknown_08593C24 = +{ + .tileTag = ANIM_TAG_MUSIC_NOTES_2, + .paletteTag = ANIM_TAG_MUSIC_NOTES_2, + .oam = &gUnknown_0852496C, + .anims = gUnknown_08592FCC, + .images = NULL, + .affineAnims = gUnknown_08593C00, + .callback = sub_8106F00, +}; + +const union AffineAnimCmd gUnknown_08593C3C[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_08593C4C[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gUnknown_08593C5C[] = +{ + gUnknown_08593C3C, + gUnknown_08593C4C, +}; + +const struct SpriteTemplate gUnknown_08593C64 = +{ + .tileTag = ANIM_TAG_GUARD_RING, + .paletteTag = ANIM_TAG_GUARD_RING, + .oam = &gUnknown_08524B1C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08593C5C, + .callback = sub_81070AC, +}; + +void sub_8103448(struct Sprite *sprite) +{ + SetSpriteCoordsToAnimAttackerCoords(sprite); + sub_80A6864(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[3] = gBattleAnimArgs[5]; + sprite->data[4] = gBattleAnimArgs[3]; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = sub_80A6450; + sprite->callback(sprite); +} + +void sub_8103498(struct Sprite *sprite) +{ + u8 battler; + if (gBattleAnimArgs[0] == 0) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + + sub_810310C(battler, sprite); + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->callback = sub_81034D8; +} + +static void sub_81034D8(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos2.y -= 3; + if (++sprite->data[1] == 6) + sprite->data[0]++; + break; + case 1: + sprite->pos2.y += 3; + if (--sprite->data[1] == 0) + sprite->data[0]++; + break; + case 2: + if (++sprite->data[1] == 64) + DestroyAnimSprite(sprite); + break; + } +} + +static void sub_810353C(struct Sprite *sprite) +{ + s16 temp; + gSprites[sprite->data[2]].pos2.x += sprite->data[1]; + temp = sprite->data[1]; + sprite->data[1] = -temp; + if (sprite->data[0] == 0) + { + gSprites[sprite->data[2]].pos2.x = 0; + DestroySpriteAndMatrix(sprite); + } + + sprite->data[0]--; +} + +void sub_810358C(struct Sprite *sprite) +{ + u8 spriteId; + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + spriteId = gBattlerSpriteIds[gBattleAnimTarget]; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = spriteId; + sprite->callback = sub_810353C; + sprite->invisible = 1; +} + +void sub_8103620(struct Sprite *sprite) +{ + InitAnimSpritePos(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[4]; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, sub_8103658); +} + +static void sub_8103658(struct Sprite *sprite) +{ + sprite->data[0] = sprite->data[1]; + sprite->data[2] = sprite->pos1.x; + sprite->data[4] = sprite->pos1.y + 15; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, sub_8103680); +} + +static void sub_8103680(struct Sprite *sprite) +{ + if (sprite->data[5] == 0) + DestroyAnimSprite(sprite); + else + sprite->data[5]--; +} + +// Rotates the attacking mon sprite downwards and then back upwards to its original position. +// No args. +void AnimTask_Withdraw(u8 taskId) +{ + PrepareBattlerSpriteForRotScale(gBattlerSpriteIds[gBattleAnimAttacker], ST_OAM_OBJ_NORMAL); + gTasks[taskId].func = AnimTask_WithdrawStep; +} + +static void AnimTask_WithdrawStep(u8 taskId) +{ + u8 spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; + s16 rotation; + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + rotation = -gTasks[taskId].data[0]; + else + rotation = gTasks[taskId].data[0]; + + SetSpriteRotScale(spriteId, 0x100, 0x100, rotation); + if (gTasks[taskId].data[1] == 0) + { + gTasks[taskId].data[0] += 0xB0; + // this y position update gets overwritten by SetBattlerSpriteYOffsetFromRotation() + gSprites[spriteId].pos2.y++; + } + else if (gTasks[taskId].data[1] == 1) + { + if (++gTasks[taskId].data[3] == 30) + gTasks[taskId].data[1] = 2; + + return; + } + else + { + gTasks[taskId].data[0] -= 0xB0; + // this y position update gets overwritten by SetBattlerSpriteYOffsetFromRotation() + gSprites[spriteId].pos2.y--; + } + + SetBattlerSpriteYOffsetFromRotation(spriteId); + if (gTasks[taskId].data[0] == 0xF20 || gTasks[taskId].data[0] == 0) + { + if (gTasks[taskId].data[1] == 2) + { + ResetSpriteRotScale(spriteId); + DestroyAnimVisualTask(taskId); + } + else + { + gTasks[taskId].data[1]++; + } + } +} + +// Animates a "zap of energy" used in KINESIS. +// arg 0: x pixel offset +// arg 1: y pixel offset +// arg 2: vertical flip +void Anim_KinesisZapEnergy(struct Sprite *sprite) +{ + SetSpriteCoordsToAnimAttackerCoords(sprite); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + + sprite->pos1.y += gBattleAnimArgs[1]; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->hFlip = 1; + if (gBattleAnimArgs[2]) + sprite->vFlip = 1; + } + else + { + if (gBattleAnimArgs[2]) + sprite->vFlip = 1; + } + + sprite->callback = RunStoredCallbackWhenAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +// Animates a sword that rises into the air after a brief pause. +// arg 0: x pixel offset +// arg 1: y pixel offset +void Anim_SwordsDanceBlade(struct Sprite *sprite) +{ + InitAnimSpritePos(sprite, FALSE); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; + StoreSpriteCallbackInData6(sprite, Anim_SwordsDanceBladeStep); +} + +static void Anim_SwordsDanceBladeStep(struct Sprite *sprite) +{ + sprite->data[0] = 6; + sprite->data[2] = sprite->pos1.x; + sprite->data[4] = sprite->pos1.y - 32; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +// Moves a projectile towards the target mon. The sprite is rotated to be pointing +// in the same direction it's moving. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x pixel offset +// arg 3: target y pixel offset +// arg 4: duration +void AnimSonicBoomProjectile(struct Sprite *sprite) +{ + s16 targetXPos; + s16 targetYPos; + u16 rotation; + + if (IsContest()) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + else if (GetBattlerSide(gBattleAnimAttacker) != 0) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + + InitAnimSpritePos(sprite, TRUE); + targetXPos = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; + targetYPos = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + rotation = ArcTan2Neg(targetXPos - sprite->pos1.x, targetYPos - sprite->pos1.y); + rotation += 0xF000; + if (IsContest()) + rotation -= 0x6000; + + TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = targetXPos; + sprite->data[4] = targetYPos; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void sub_81039CC(struct Sprite *sprite) +{ + if (sprite->data[0]-- <= 0) + { + gTasks[sprite->data[7]].data[1]--; + DestroySprite(sprite); + } +} + +static void sub_8103A00(struct Sprite *sprite) +{ + struct Task* task = &gTasks[sprite->data[7]]; + if (sprite->data[0] > task->data[5]) + { + sprite->data[5] += sprite->data[3]; + sprite->data[6] += sprite->data[4]; + } + else + { + sprite->data[5] -= sprite->data[3]; + sprite->data[6] -= sprite->data[4]; + } + + sprite->data[1] += sprite->data[5]; + sprite->data[2] += sprite->data[6]; + if (1 & task->data[7]) + sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1; + else + sprite->pos2.x = (u16)sprite->data[1] >> 8; + + if (1 & task->data[8]) + sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1; + else + sprite->pos2.y = (u16)sprite->data[2] / 256u; + + if (sprite->data[0]-- <= 0) + { + sprite->data[0] = 30; + sprite->callback = sub_81039CC; + } +} + +void sub_8103AA4(struct Sprite *sprite) +{ + s16 a; + s16 b; + s16 c; + + struct Task* task = &gTasks[sprite->data[7]]; + sprite->data[1] += (-2 & task->data[7]); + sprite->data[2] += (-2 & task->data[8]); + if (1 & task->data[7]) + sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1; + else + sprite->pos2.x = (u16)sprite->data[1] >> 8; + + if (1 & task->data[8]) + sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1; + else + sprite->pos2.y = (u16)sprite->data[2] / 256u; + + if (sprite->data[0]-- <= 0) + { + sprite->data[0] = 8; + task->data[5] = 4; + a = sub_8151624(0x1000); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + if (task->data[11] >= sprite->pos1.x) + b = (task->data[11] - sprite->pos1.x) << 8; + else + b = (sprite->pos1.x - task->data[11]) << 8; + + if (task->data[12] >= sprite->pos1.y) + c = (task->data[12] - sprite->pos1.y) << 8; + else + c = (sprite->pos1.y - task->data[12]) << 8; + + sprite->data[2] = 0; + sprite->data[1] = 0; + sprite->data[6] = 0; + sprite->data[5] = 0; + sprite->data[3] = sub_8151534(sub_8151534(b, a), sub_8151624(0x1C0)); + sprite->data[4] = sub_8151534(sub_8151534(c, a), sub_8151624(0x1C0)); + sprite->callback = sub_8103A00; + } +} + +static void sub_8103BE4(u8 taskId) +{ + if (gTasks[taskId].data[1] == 0) + DestroyAnimVisualTask(taskId); +} + +static void sub_8103C0C(u8 taskId) +{ + if (gTasks[taskId].data[0]-- <= 0) + { + u8 spriteId; + struct Sprite *sprite; + spriteId = CreateSprite(&gUnknown_085933B0, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]); + sprite = &gSprites[spriteId]; + switch (gTasks[taskId].data[4]) + { + case 1: + sprite->oam.matrixNum |= 24; + break; + case 2: + sprite->oam.matrixNum = 8; + break; + } + + sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6]; + sprite->data[7] = taskId; + gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId; + gTasks[taskId].data[0] = gTasks[taskId].data[3]; + gTasks[taskId].data[1]++; + PlaySE12WithPanning(SE_W059B, BattleAnimAdjustPanning(-63)); + if (gTasks[taskId].data[1] > 2) + gTasks[taskId].func = sub_8103BE4; + } +} + +void sub_8103CF0(u8 taskId) +{ + s16 attackerY = 0; + s16 attackerX = 0; + s16 targetX = 0; + s16 targetY = 0; + s16 xDiff, yDiff; + + if (IsContest()) + { + gTasks[taskId].data[4] = 2; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + if (gBattleAnimArgs[2] & 1) + gBattleAnimArgs[2] &= ~1; + else + gBattleAnimArgs[2] |= 1; + } + else + { + if ((gBattlerPositions[gBattleAnimTarget] & 1) == 0) + { + gTasks[taskId].data[4] = 1; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + if (gBattleAnimArgs[2] & 1) + gBattleAnimArgs[2] &= ~1; + else + gBattleAnimArgs[2] |= 1; + } + } + + attackerX = gTasks[taskId].data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + attackerY = gTasks[taskId].data[10] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) + { + SetAverageBattlerPositions(gBattleAnimTarget, 0, &targetX, &targetY); + } + else + { + targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); + } + + targetX = gTasks[taskId].data[11] = targetX + gBattleAnimArgs[0]; + targetY = gTasks[taskId].data[12] = targetY + gBattleAnimArgs[1]; + if (targetX >= attackerX) + xDiff = targetX - attackerX; + else + xDiff = attackerX - targetX; + + gTasks[taskId].data[5] = sub_8151534(xDiff, sub_8151624(gBattleAnimArgs[2] & ~1)); + gTasks[taskId].data[6] = sub_8151534(gTasks[taskId].data[5], 0x80); + gTasks[taskId].data[7] = gBattleAnimArgs[2]; + if (targetY >= attackerY) + { + yDiff = targetY - attackerY; + gTasks[taskId].data[8] = sub_8151534(yDiff, sub_8151624(gTasks[taskId].data[5])) & ~1; + } + else + { + yDiff = attackerY - targetY; + gTasks[taskId].data[8] = sub_8151534(yDiff, sub_8151624(gTasks[taskId].data[5])) | 1; + } + + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + if (gBattleAnimArgs[4] & 0x80) + { + gBattleAnimArgs[4] ^= 0x80; + if (gBattleAnimArgs[4] >= 64) + { + u16 var = GetBattlerSpriteSubpriority(gBattleAnimTarget) + (gBattleAnimArgs[4] - 64); + gTasks[taskId].data[2] = var; + } + else + { + u16 var = GetBattlerSpriteSubpriority(gBattleAnimTarget) - gBattleAnimArgs[4]; + gTasks[taskId].data[2] = var; + } + } + else + { + if (gBattleAnimArgs[4] >= 64) + { + u16 var = GetBattlerSpriteSubpriority(gBattleAnimTarget) + (gBattleAnimArgs[4] - 64); + gTasks[taskId].data[2] = var; + } + else + { + u16 var = GetBattlerSpriteSubpriority(gBattleAnimTarget) - gBattleAnimArgs[4]; + gTasks[taskId].data[2] = var; + } + } + + if (gTasks[taskId].data[2] < 3) + gTasks[taskId].data[2] = 3; + + gTasks[taskId].func = sub_8103C0C; +} + +void sub_8103FE8(struct Sprite *sprite) +{ + InitAnimSpritePos(sprite, FALSE); + sprite->data[0] = 0x100 + (IndexOfSpritePaletteTag(gUnknown_085934A0.paletteTag) << 4); + sprite->callback = sub_8104018; +} + +#ifdef NONMATCHING +static void sub_8104018(struct Sprite *sprite) +{ + u16 r7; + u16 r5; + int i; + if (++sprite->data[1] == 2) + { + sprite->data[1] = 0; + r5 = sprite->data[0]; + r7 = gPlttBufferFaded[8 + r5]; + for (i = 0; i < 8; i++) + { + gPlttBufferFaded[i + r5 + 8] = gPlttBufferFaded[i + r5 + 9]; + } + gPlttBufferFaded[r5 + 15] = r7; + + if (++sprite->data[2] == 24) + DestroyAnimSprite(sprite); + } +} +#else +NAKED +static void sub_8104018(struct Sprite *sprite) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + adds r4, r0, 0\n\ + ldrh r0, [r4, 0x30]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x30]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x2\n\ + bne _0810407C\n\ + movs r0, 0\n\ + strh r0, [r4, 0x30]\n\ + ldrh r5, [r4, 0x2E]\n\ + ldr r1, =gPlttBufferFaded\n\ + adds r0, r5, 0\n\ + adds r0, 0x8\n\ + lsls r0, 1\n\ + adds r0, r1 \n\ + ldrh r7, [r0]\n\ + adds r6, r1, 0\n\ + adds r1, r5, 0\n\ + adds r1, 0x9\n\ + lsls r0, r5, 1\n\ + adds r0, r6\n\ + adds r2, r0, 0\n\ + adds r2, 0x10\n\ + movs r3, 0x7\n\ + lsls r1, 1\n\ + adds r1, r6\n\ +_08104050:\n\ + ldrh r0, [r1]\n\ + strh r0, [r2]\n\ + adds r1, 0x2\n\ + adds r2, 0x2\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _08104050\n\ + adds r0, r5, 0\n\ + adds r0, 0xF\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + strh r7, [r0]\n\ + ldrh r0, [r4, 0x32]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x32]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x18\n\ + bne _0810407C\n\ + adds r0, r4, 0\n\ + bl DestroyAnimSprite\n\ +_0810407C:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ +.syntax divided\n"); +} +#endif + +void sub_8104088(struct Sprite *sprite) +{ + s16 r6; + s16 r7; + u16 var; + + InitAnimSpritePos(sprite, TRUE); + r6 = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + r7 = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + r6 += gBattleAnimArgs[2]; + var = ArcTan2Neg(r6 - sprite->pos1.x, r7 - sprite->pos1.y); + var += 0xC000; + TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, var); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = r6; + sprite->data[4] = r7; + sprite->callback = sub_80A7000; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void sub_810413C(struct Sprite *sprite) +{ + sprite->data[2] = -16; + sprite->pos1.y += 8; + sprite->callback = sub_8104154; +} + +static void sub_8104154(struct Sprite *sprite) +{ + sprite->data[0] += 0x80; + sprite->pos2.x = sprite->data[0] >> 8; + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + sprite->pos2.x = -sprite->pos2.x; + + sprite->pos2.y = Sin(sprite->data[1], sprite->data[2]); + sprite->data[1] += 5; + if (sprite->data[1] > 126) + { + sprite->data[1] = 0; + sprite->data[2] /= 2; + if (++sprite->data[3] == 2) + DestroyAnimSprite(sprite); + } +} + +void sub_81041C4(struct Sprite *sprite) +{ + InitAnimSpritePos(sprite, TRUE); + sprite->data[0] = 20; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + sprite->callback = StartAnimLinearTranslation; + sprite->affineAnimPaused = 1; + StoreSpriteCallbackInData6(sprite, sub_810421C); +} + +static void sub_810421C(struct Sprite *sprite) +{ + int i; + u16 rand; + s16* ptr; + PlaySE12WithPanning(SE_W030, BattleAnimAdjustPanning(63)); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + ptr = &sprite->data[7]; + for (i = 0; i < 8; i++) + ptr[i - 7] = 0; + + rand = Random2(); + sprite->data[6] = 0xFFF4 - (rand & 7); + rand = Random2(); + sprite->data[7] = (rand % 0xA0) + 0xA0; + sprite->callback = sub_81042A0; + sprite->affineAnimPaused = 0; +} + +static void sub_81042A0(struct Sprite *sprite) +{ + sprite->data[0] += sprite->data[7]; + sprite->pos2.x = sprite->data[0] >> 8; + if (sprite->data[7] & 1) + sprite->pos2.x = -sprite->pos2.x; + + sprite->pos2.y = Sin(sprite->data[1], sprite->data[6]); + sprite->data[1] += 8; + if (sprite->data[1] > 126) + { + sprite->data[1] = 0; + sprite->data[2] /= 2; + if (++sprite->data[3] == 1) + DestroyAnimSprite(sprite); + } +} + +// Moves a tornado in a circlular motion. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: wave amplitude +// arg 3: unused +// arg 4: initial wave offset +// arg 5: wave period (higher means faster wave) +// arg 6: duration +void Anim_RazorWindTornado(struct Sprite *sprite) +{ + InitAnimSpritePos(sprite, FALSE); + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + sprite->pos1.y += 16; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[5]; + sprite->data[3] = gBattleAnimArgs[6]; + sprite->data[4] = gBattleAnimArgs[3]; + sprite->callback = TranslateSpriteInCircleOverDuration; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback(sprite); +} + +// Animates a single pincer line that extends towards the center of the target mon. +// arg 0: invert +void Anim_ViceGripPincer(struct Sprite *sprite) +{ + s16 startXOffset = 32; + s16 startYOffset = -32; + s16 endXOffset = 16; + s16 endYOffset = -16; + if (gBattleAnimArgs[0]) + { + startXOffset = -32; + startYOffset = 32; + endXOffset = -16; + endYOffset = 16; + StartSpriteAnim(sprite, 1); + } + + sprite->pos1.x += startXOffset; + sprite->pos1.y += startYOffset; + sprite->data[0] = 6; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + endXOffset; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + endYOffset; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, Anim_ViceGripPincerStep); +} + +static void Anim_ViceGripPincerStep(struct Sprite *sprite) +{ + if (sprite->animEnded) + DestroyAnimSprite(sprite); +} + +// Animates a single pincer line that extends towards the center of the target mon, and then back out. +// arg 0: animation id +void Anim_GuillotinePincer(struct Sprite *sprite) +{ + s16 startXOffset = 32; + s16 startYOffset = -32; + s16 endXOffset = 16; + s16 endYOffset = -16; + if (gBattleAnimArgs[0]) + { + startXOffset = -32; + startYOffset = 32; + endXOffset = -16; + endYOffset = 16; + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + } + + sprite->pos1.x += startXOffset; + sprite->pos1.y += startYOffset; + sprite->data[0] = 6; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + endXOffset; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + endYOffset; + InitAnimLinearTranslation(sprite); + sprite->data[5] = gBattleAnimArgs[0]; + sprite->data[6] = sprite->data[0]; + sprite->callback = Anim_GuillotinePincerStep1; +} + +static void Anim_GuillotinePincerStep1(struct Sprite *sprite) +{ + if (TranslateAnimLinear(sprite) && sprite->animEnded) + { + SeekSpriteAnim(sprite, 0); + sprite->animPaused = 1; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 2; + sprite->pos2.y = -2; + sprite->data[0] = sprite->data[6]; + sprite->data[1] ^= 1; + sprite->data[2] ^= 1; + sprite->data[4] = 0; + sprite->data[3] = 0; + sprite->callback = Anim_GuillotinePincerStep2; + } +} + +static void Anim_GuillotinePincerStep2(struct Sprite *sprite) +{ + if (sprite->data[3]) + { + sprite->pos2.x = -sprite->pos2.x; + sprite->pos2.y = -sprite->pos2.y; + } + + sprite->data[3] ^= 1; + if (++sprite->data[4] == 51) + { + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[4] = 0; + sprite->data[3] = 0; + sprite->animPaused = 0; + StartSpriteAnim(sprite, sprite->data[5] ^ 1); + sprite->callback = Anim_GuillotinePincerStep3; + } +} + +static void Anim_GuillotinePincerStep3(struct Sprite *sprite) +{ + if (TranslateAnimLinear(sprite)) + DestroyAnimSprite(sprite); +} + +// Scales up the target mon sprite, and sets the palette to greyscale. +// Used in MOVE_DISABLE. +// No args. +void AnimTask_GrowAndGreyscale(u8 taskId) +{ + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND); + SetSpriteRotScale(spriteId, 0xD0, 0xD0, 0); + SetGreyscaleOrOriginalPalette(gSprites[spriteId].oam.paletteNum + 16, FALSE); + gTasks[taskId].data[0] = 80; + gTasks[taskId].func = AnimTask_GrowAndGreyscaleStep; +} + +static void AnimTask_GrowAndGreyscaleStep(u8 taskId) +{ + if (--gTasks[taskId].data[0] == -1) + { + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + ResetSpriteRotScale(spriteId); + SetGreyscaleOrOriginalPalette(gSprites[spriteId].oam.paletteNum + 16, TRUE); + DestroyAnimVisualTask(taskId); + } +} + +// Shrinks and grows the attacking mon several times. Also creates transparent versions of the +// mon's sprite while it is shrinking. +// No args. +void AnimTask_Minimize(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->data[0] = spriteId; + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0x100; + task->data[5] = 0; + task->data[6] = 0; + task->data[7] = GetBattlerSpriteSubpriority(gBattleAnimAttacker); + task->func = AnimTask_MinimizeStep1; +} + +static void AnimTask_MinimizeStep1(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[1]) + { + case 0: + if (task->data[2] == 0 || task->data[2] == 3 || task->data[2] == 6) + CreateMinimizeSprite(task, taskId); + task->data[2]++; + task->data[4] += 0x28; + SetSpriteRotScale(task->data[0], task->data[4], task->data[4], 0); + SetBattlerSpriteYOffsetFromYScale(task->data[0]); + if (task->data[2] == 32) + { + task->data[5]++; + task->data[1]++; + } + break; + case 1: + if (task->data[6] == 0) + { + if (task->data[5] == 3) + { + task->data[2] = 0; + task->data[1] = 3; + } + else + { + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0x100; + SetSpriteRotScale(task->data[0], task->data[4], task->data[4], 0); + SetBattlerSpriteYOffsetFromYScale(task->data[0]); + task->data[1] = 2; + } + } + break; + case 2: + task->data[1] = 0; + break; + case 3: + if (++task->data[2] > 32) + { + task->data[2] = 0; + task->data[1]++; + } + break; + case 4: + task->data[2] += 2; + task->data[4] -= 0x50; + SetSpriteRotScale(task->data[0], task->data[4], task->data[4], 0); + SetBattlerSpriteYOffsetFromYScale(task->data[0]); + if (task->data[2] == 32) + { + task->data[2] = 0; + task->data[1]++; + } + break; + case 5: + ResetSpriteRotScale(task->data[0]); + gSprites[task->data[15]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + break; + } +} + +static void CreateMinimizeSprite(struct Task* task, u8 taskId) +{ + u16 matrixNum; + s16 spriteId = CloneBattlerSpriteWithBlend(ANIM_ATTACKER); + if (spriteId >= 0) + { + if ((matrixNum = AllocOamMatrix()) == 0xFF) + { + obj_delete_but_dont_free_vram(&gSprites[spriteId]); + } + else + { + gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE; + gSprites[spriteId].affineAnimPaused = TRUE; + gSprites[spriteId].oam.matrixNum = matrixNum; + gSprites[spriteId].subpriority = task->data[7] - task->data[3]; + task->data[3]++; + task->data[6]++; + gSprites[spriteId].data[0] = 16; + gSprites[spriteId].data[1] = taskId; + gSprites[spriteId].data[2] = 6; + gSprites[spriteId].callback = ClonedMinizeSprite_Step; + SetSpriteRotScale(spriteId, task->data[4], task->data[4], 0); + gSprites[spriteId].oam.affineMode = 1; + CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode); + } + } +} + +static void ClonedMinizeSprite_Step(struct Sprite *sprite) +{ + if (--sprite->data[0] == 0) + { + gTasks[sprite->data[1]].data[sprite->data[2]]--; + FreeOamMatrix(sprite->oam.matrixNum); + obj_delete_but_dont_free_vram(sprite); + } +} + +// 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) + { + DestroyAnimVisualTask(taskId); + } + else + { + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + task->data[0] = spriteId; + task->data[1] = 0; + task->data[2] = gBattleAnimArgs[1]; + task->data[3] = 0; + task->data[4] = 0; + PrepareAffineAnimInTaskData(task, spriteId, gSplashEffectAffineAnimCmds); + task->func = AnimTask_SplashStep; + } +} + +static void AnimTask_SplashStep(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[1]) + { + case 0: + RunAffineAnimFromTaskData(task); + task->data[4] += 3; + gSprites[task->data[0]].pos2.y += task->data[4]; + if (++task->data[3] > 7) + { + task->data[3] = 0; + task->data[1]++; + } + break; + case 1: + RunAffineAnimFromTaskData(task); + gSprites[task->data[0]].pos2.y += task->data[4]; + if (++task->data[3] > 7) + { + task->data[3] = 0; + task->data[1]++; + } + break; + case 2: + if (task->data[4] != 0) + { + gSprites[task->data[0]].pos2.y -= 2; + task->data[4] -= 2; + } + else + task->data[1]++; + break; + case 3: + if (!RunAffineAnimFromTaskData(task)) + { + if (--task->data[2] == 0) + { + gSprites[task->data[0]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + else + { + PrepareAffineAnimInTaskData(task, task->data[0], gSplashEffectAffineAnimCmds); + task->data[1] = 0; + } + } + break; + } +} + +// Grows, pauses, then shrinks the attacking mon. +// Used by MOVE_SWAGGER and MOVE_BULK_UP +// No args. +void AnimTask_GrowAndShrink(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + PrepareAffineAnimInTaskData(task, spriteId, gGrowAndShrinkAffineAnimCmds); + task->func = AnimTask_GrowAndShrinkStep; +} + +static void AnimTask_GrowAndShrinkStep(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (!RunAffineAnimFromTaskData(task)) + DestroyAnimVisualTask(taskId); +} + +// Animates a little puff of the mon's breath. +// Used by MOVE_SWAGGER and MOVE_BULK_UP +// No args. +void Anim_BreathPuff(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + StartSpriteAnim(sprite, 0); + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + 32; + sprite->data[1] = 64; + } + else + { + StartSpriteAnim(sprite, 1); + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - 32; + sprite->data[1] = -64; + } + + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + sprite->data[0] = 52; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = TranslateAnimLinearSimple; +} + +// Animates an "angry" mark above a mon's head. +// arg 0: target mon (0 = attacker, 1 = target) +// arg 1: x pixel offset +// arg 2: y pixel offset +void Anim_AngerMark(struct Sprite *sprite) +{ + u8 battler; + if (!gBattleAnimArgs[0]) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + + if (GetBattlerSide(battler) == B_SIDE_OPPONENT) + gBattleAnimArgs[1] *= -1; + + sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; + if (sprite->pos1.y < 8) + sprite->pos1.y = 8; + + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; +} + +// left/right movements +void sub_8104C38(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->data[0] = spriteId; + task->data[1] = 0; + PrepareAffineAnimInTaskData(task, spriteId, gUnknown_085936A4); + task->func = sub_8104C78; +} + +static void sub_8104C78(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (!RunAffineAnimFromTaskData(task)) + DestroyAnimVisualTask(taskId); +} + +// up/down movements +void sub_8104CA4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->data[1] = 0; + task->data[2] = 4; + task->data[3] = 7; + task->data[4] = 3; + task->data[5] = gSprites[task->data[0]].pos1.x; + task->data[6] = gSprites[task->data[0]].pos1.y; + task->data[7] = 0; + task->data[8] = 0; + task->data[9] = 2; + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + task->data[2] *= -1; + + task->func = sub_8104D28; +} + +static void sub_8104D28(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (++task->data[7] > 2) + { + task->data[7] = 0; + task->data[8]++; + if (task->data[8] & 1) + gSprites[task->data[0]].pos1.y += task->data[9]; + else + gSprites[task->data[0]].pos1.y -= task->data[9]; + } + switch (task->data[1]) + { + case 0: + gSprites[task->data[0]].pos1.x += task->data[2]; + if (--task->data[3] == 0) + { + task->data[3] = 14; + task->data[1] = 1; + } + break; + case 1: + gSprites[task->data[0]].pos1.x -= task->data[2]; + if (--task->data[3] == 0) + { + task->data[3] = 7; + task->data[1] = 2; + } + break; + case 2: + gSprites[task->data[0]].pos1.x += task->data[2]; + if (--task->data[3] == 0) + { + if (--task->data[4] != 0) + { + task->data[3] = 7; + task->data[1] = 0; + } + else + { + if ((task->data[8] & 1) != 0) + gSprites[task->data[0]].pos1.y -= task->data[9]; + + DestroyAnimVisualTask(taskId); + } + } + break; + } +} + +void sub_8104E74(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + struct ScanlineEffectParams params; + + s16 i; + task->data[0] = GetBattlerYCoordWithElevation(gBattleAnimTarget) + 32; + task->data[1] = 4; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0; + task->data[5] = 0; + task->data[15] = sub_80A861C(gBattleAnimTarget, 0); + + if (sub_80A8364(gBattleAnimTarget) == 1) + { + task->data[6] = gBattle_BG1_X; + params.dmaDest = (u16 *)REG_ADDR_BG1HOFS; + } + else + { + task->data[6] = gBattle_BG2_X; + params.dmaDest = (u16 *)REG_ADDR_BG2HOFS; + } + + for (i = task->data[0] - 0x40; i <= task->data[0]; i++) + { + if (i >= 0) + { + gScanlineEffectRegBuffers[0][i] = task->data[6] + 0xF0; + gScanlineEffectRegBuffers[1][i] = task->data[6] + 0xF0; + } + } + + params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; + params.initState = 1; + params.unused9 = 0; + ScanlineEffect_SetParams(params); + task->func = sub_8104F54; +} + +static void sub_8104F54(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + + switch (task->data[4]) + { + case 0: + if (++task->data[5] > 20) + task->data[4]++; + break; + case 1: + if (++task->data[1] > 3) + { + task->data[1] = 0; + task->data[2] = task->data[3] & 3; + task->data[5] = task->data[0] - task->data[3]; + switch (task->data[2]) + { + case 0: + break; + case 1: + task->data[5] -= 2; + break; + case 2: + task->data[5] += 1; + break; + case 3: + task->data[5] += 1; + break; + } + + if (task->data[5] >= 0) + { + gScanlineEffectRegBuffers[0][task->data[5]] = task->data[6]; + gScanlineEffectRegBuffers[1][task->data[5]] = task->data[6]; + } + + if (++task->data[3] >= task->data[15]) + { + gScanlineEffect.state = 3; + DestroyAnimVisualTask(taskId); + } + } + break; + } +} + +void sub_810501C(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) - 16; + sprite->pos1.y = GetBattlerYCoordWithElevation(gBattleAnimTarget) + 16; + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 16; + sprite->data[4] = 0; + sprite->data[5] = sub_80A861C(gBattleAnimTarget, 0) + 2; + sprite->data[6] = BattleAnimAdjustPanning(63); + sprite->callback = sub_8105078; +} + +static void sub_8105078(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (++sprite->data[2] > 1) + { + sprite->data[2] = 0; + sprite->invisible = !sprite->invisible; + } + if (++sprite->data[1] > 16) + { + sprite->invisible = 0; + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[1] > 3 && sprite->data[2] < sprite->data[5]) + { + sprite->data[1] = 0; + sprite->pos1.y -= 1; + sprite->data[2]++; + if (sprite->data[2] % 10 == 0) + PlaySE12WithPanning(SE_W166, sprite->data[6]); + } + sprite->data[4] += sprite->data[3]; + if (sprite->data[4] > 31) + { + sprite->data[4] = 0x40 - sprite->data[4]; + sprite->data[3] *= -1; + } + else if (sprite->data[4] <= -32) + { + sprite->data[4] = -0x40 - sprite->data[4]; + sprite->data[3] *= -1; + } + sprite->pos2.x = sprite->data[4]; + if (sprite->data[5] == sprite->data[2]) + { + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[0]++; + } + break; + case 2: + if (++sprite->data[2] > 1) + { + sprite->data[2] = 0; + sprite->invisible = !sprite->invisible; + } + if (++sprite->data[1] > 16) + { + sprite->invisible = 0; + DestroyAnimSprite(sprite); + } + break; + } +} + +void sub_81051C4(struct Sprite *sprite) +{ + u8 battler = 0; + u16 sp0 = 0; + u16 sp1 = 0; + u8 r4; + + if (gBattleAnimArgs[2] == 0) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + + r4 = gBattleAnimArgs[3] ^ 1; + if (IsDoubleBattle() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler))) + { + SetAverageBattlerPositions(battler, r4, &sp0, &sp1); + if (r4 == 0) + r4 = GetBattlerSpriteCoord(battler, 0); + else + r4 = GetBattlerSpriteCoord(battler, 2); + + if (GetBattlerSide(battler) != B_SIDE_PLAYER) + gBattleAnimArgs[0] -= (sp0 - r4) - gBattleAnimArgs[0]; // This is weird. + else + gBattleAnimArgs[0] = sp0 - r4; + } + + sprite->callback = sub_80A77C8; + sprite->callback(sprite); +} + +void sub_8105284(struct Sprite *sprite) +{ + if (TranslateAnimLinear(sprite)) + { + FreeSpriteOamMatrix(sprite); + DestroyAnimSprite(sprite); + } +} + +void sub_81052A4(struct Sprite *sprite) +{ + u16 r9 = 0; + u16 r6 = 0; + s16 sp0 = 0; + s16 sp1 = 0; + u8 sp4; + u8 battler1; + u8 battler2; + u8 r10; + + if (gBattleAnimArgs[5] == 0) + { + battler1 = gBattleAnimAttacker; + battler2 = gBattleAnimTarget; + } + else + { + battler1 = gBattleAnimTarget; + battler2 = gBattleAnimAttacker; + } + + if (!gBattleAnimArgs[6]) + { + r10 = 0; + sp4 = 1; + } + else + { + r10 = 2; + sp4 = 3; + } + + if (GetBattlerSide(battler1) != B_SIDE_PLAYER) + { + r9 = GetBattlerSpriteCoord(battler1, r10) + gBattleAnimArgs[0]; + if (IsBattlerSpriteVisible(BATTLE_PARTNER(battler2))) + sprite->subpriority = gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler2)]].subpriority - 1; + else + sprite->subpriority = gSprites[gBattlerSpriteIds[battler2]].subpriority - 1; + } + else + { + r9 = GetBattlerSpriteCoord(battler1, r10) - gBattleAnimArgs[0]; + if (!IsContest() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler1))) + { + if (gSprites[gBattlerSpriteIds[battler1]].pos1.x < gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler1)]].pos1.x) + sprite->subpriority = gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler1)]].subpriority + 1; + else + sprite->subpriority = gSprites[gBattlerSpriteIds[battler1]].subpriority - 1; + } + else + { + sprite->subpriority = gSprites[gBattlerSpriteIds[battler1]].subpriority - 1; + } + + } + + r6 = GetBattlerSpriteCoord(battler1, sp4) + gBattleAnimArgs[1]; + if (!IsContest() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler2))) + { + SetAverageBattlerPositions(battler2, gBattleAnimArgs[6], &sp0, &sp1); + } + else + { + sp0 = GetBattlerSpriteCoord(battler2, r10); + sp1 = GetBattlerSpriteCoord(battler2, sp4); + } + + if (GetBattlerSide(battler2)) + sp0 += gBattleAnimArgs[3]; + else + sp0 -= gBattleAnimArgs[3]; + + sp1 += gBattleAnimArgs[4]; + sprite->pos1.x = sprite->data[1] = r9; + sprite->pos1.y = sprite->data[3] = r6; + sprite->data[2] = sp0; + sprite->data[4] = sp1; + sprite->data[0] = gBattleAnimArgs[0]; + InitAnimLinearTranslation(sprite); + sprite->callback = sub_8105284; + sprite->callback(sprite); +} + +void sub_81054E8(struct Sprite *sprite) +{ + u8 index = IndexOfSpritePaletteTag(ANIM_TAG_THIN_RING); + if (index != 0xFF) + { + BlendPalette(((index << 20) + 0x1010000) >> 16, 15, gBattleAnimArgs[5], gBattleAnimArgs[4]); + } + + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_80A77C8; + sprite->callback(sprite); +} + +void sub_8105538(struct Sprite *sprite) +{ + s16 r1; + InitAnimSpritePos(sprite, FALSE); + r1 = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? -160 : 160; + sprite->data[0] = 0x380; + sprite->data[1] = r1; + sprite->data[7] = gBattleAnimArgs[2]; + sprite->callback = sub_810557C; +} + +static void sub_810557C(struct Sprite *sprite) +{ + s16 add; + sprite->pos2.y -= (sprite->data[0] >> 8); + sprite->pos2.x = sprite->data[1] >> 8; + sprite->data[0] -= 32; + add = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? -160 : 160; + sprite->data[1] += add; + if (sprite->pos2.y > 0) + { + sprite->pos1.y += sprite->pos2.y; + sprite->pos1.x += sprite->pos2.x; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 0; + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_81055F4; + } +} + +static void sub_81055F4(struct Sprite *sprite) +{ + if (sprite->data[0]++ > 19) + { + StartSpriteAffineAnim(sprite, 2); + sprite->callback = sub_810561C; + } +} + +static void sub_810561C(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 1); + sprite->data[0] = 0; + if (sprite->data[7] == 0) + { + sprite->oam.tileNum += 16; + sprite->callback = sub_8105694; + } + else + { + sprite->oam.tileNum += 32; + sprite->callback = sub_810571C; + } + } +} + +static void sub_8105694(struct Sprite *sprite) +{ + sprite->pos2.y -= 2; + if (++sprite->data[0] == 9) + { + sprite->data[0] = 16; + sprite->data[1] = 0; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND((u16)sprite->data[0], 0)); + sprite->callback = sub_81056D4; + } +} + +static void sub_81056D4(struct Sprite *sprite) +{ + if (sprite->data[1]++ % 3 == 0) + { + sprite->data[0]--; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0])); + if (sprite->data[0] == 0) + sprite->callback = sub_810571C; + } +} + +static void sub_810571C(struct Sprite *sprite) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + sprite->invisible = 1; + if (sprite->data[7] == 0) + sprite->callback = sub_810575C; + else + sprite->callback = DestroyAnimSprite; + } +} + +static void sub_810575C(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimSprite(sprite); +} + +void sub_810577C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->data[0] = spriteId; + PrepareAffineAnimInTaskData(task, spriteId, gUnknown_085938B0); + task->func = sub_81057B8; +} + +static void sub_81057B8(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (!RunAffineAnimFromTaskData(task)) + { + gSprites[task->data[0]].pos2.y = 0; + gSprites[task->data[0]].invisible = 1; + DestroyAnimVisualTask(taskId); + } +} + +void sub_8105810(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[12] = 3; + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + { + task->data[13] = 0xFFFF; + task->data[14] = 8; + } + else + { + task->data[13] = 1; + task->data[14] = -8; + } + + task->data[15] = GetAnimBattlerSpriteId(ANIM_TARGET); + task->func = sub_8105878; +} + +static void sub_8105878(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + gSprites[task->data[15]].pos2.x += task->data[14]; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + break; + case 1: + if (++task->data[1] > 1) + { + task->data[1] = 0; + task->data[2]++; + if (task->data[2] & 1) + gSprites[task->data[15]].pos2.x += 6; + else + gSprites[task->data[15]].pos2.x -= 6; + + if (++task->data[3] > 4) + { + if (task->data[2] & 1) + gSprites[task->data[15]].pos2.x -= 6; + + task->data[0]++; + } + } + break; + case 2: + if (--task->data[12] != 0) + task->data[0] = 0; + else + task->data[0]++; + break; + case 3: + gSprites[task->data[15]].pos2.x += task->data[13]; + if (gSprites[task->data[15]].pos2.x == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_810599C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 1; + task->data[13] = 14; + task->data[14] = 2; + task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->func = sub_81059E0; +} + +static void sub_81059E0(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (task->data[0] == 0 && ++task->data[1] > task->data[4]) + { + task->data[1] = 0; + if (++task->data[2] & 1) + gSprites[task->data[15]].invisible = 0; + else + gSprites[task->data[15]].invisible = 1; + + if (++task->data[3] >= task->data[13]) + { + if (++task->data[4] < task->data[14]) + { + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + } + else + { + gSprites[task->data[15]].invisible = 0; + DestroyAnimVisualTask(taskId); + } + } + } +} + +void sub_8105AAC(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = 0; + task->data[1] = 4; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0; + task->data[5] = 0; + task->data[6] = 0; + task->data[7] = 0; + task->data[8] = 0; + task->data[13] = 0; + task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_ATTACKER); + task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_TARGET); + task->func = sub_8105B08; +} + +static void sub_8105B08(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[8]) + { + case 0: + if (++task->data[4] > 1) + { + task->data[4] = 0; + task->data[5] = (task->data[5] + 1) & 1; + if (++task->data[6] > 20) + { + if (task->data[7] == 0) + { + task->data[6] = 0; + task->data[8] = 1; + } + else + task->data[8] = 2; + } + } + break; + case 1: + task->data[5] = 0; + if (++task->data[4] > 20) + { + task->data[7] = 1; + task->data[8] = 0; + } + break; + case 2: + task->data[5] = 1; + break; + } + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 4) + { + u8 spriteId; + task->data[1] = 0; + spriteId = CreateSprite(&gUnknown_085938DC, task->data[14], task->data[15], 0); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = 13; + gSprites[spriteId].pos2.x = gUnknown_085938F4[task->data[2]][0]; + gSprites[spriteId].pos2.y = gUnknown_085938F4[task->data[2]][1]; + task->data[13]++; + if (++task->data[2] > 3) + { + task->data[2] = 0; + if (++task->data[3] > 5) + task->data[0]++; + } + } + } + break; + case 1: + if (task->data[13] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_8105C48(struct Sprite *sprite) +{ + sprite->invisible = gTasks[sprite->data[0]].data[5]; + if (sprite->animEnded) + { + gTasks[sprite->data[0]].data[sprite->data[1]]--; + DestroySprite(sprite); + } +} + +void sub_8105CB4(u8 taskId) +{ + int i; + u8 paletteNums[3]; + + paletteNums[0] = IndexOfSpritePaletteTag(ANIM_TAG_MUSIC_NOTES_2); + for (i = 1; i < 3; i++) + paletteNums[i] = AllocSpritePalette(ANIM_SPRITES_START - i); + + gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000); + LZDecompressWram(gBattleAnimSpritePalette_206, gMonSpritesGfxPtr->field_17C); + for (i = 0; i < 3; i++) + LoadPalette(&gMonSpritesGfxPtr->field_17C[i * 32], (u16)((paletteNums[i] << 4) + 0x100), 32); + + FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C); + DestroyAnimVisualTask(taskId); +} + +void sub_8105D60(u8 taskId) +{ + int i; + for (i = 0; i < 3; i++) + FreeSpritePaletteByTag(gUnknown_08593950[i]); + + DestroyAnimVisualTask(taskId); +} + +static void sub_8105D88(struct Sprite *sprite, u8 a, u8 b) +{ + u8 tile; + tile = (b & 1); + tile = ((-tile | tile) >> 31) & 32; + sprite->oam.tileNum += tile + (a << 2); + sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_08593950[b >> 1]); +} + +void sub_8105DE8(struct Sprite *sprite) +{ + InitAnimSpritePos(sprite, FALSE); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3]; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sub_8105D88(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); +} + +void sub_8105E60(struct Sprite *sprite) +{ + if (++sprite->data[0] == 1) + InitAnimSpritePos(sprite, FALSE); + + sprite->pos2.x = Sin(sprite->data[1], 8); + sprite->pos2.y = sprite->data[2] >> 8; + sprite->data[1] = (sprite->data[1] + 7) & 0xFF; + sprite->data[2] -= 0x80; + if (sprite->data[0] == 60) + DestroyAnimSprite(sprite); +} + +void sub_8105EB0(u8 taskId) +{ + u16 win0h = IsContest() ? 0x98 : 0xF0; + u16 win0v = 0; + + gBattle_WIN0H = win0h; + gBattle_WIN0V = 0xA0; + SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H); + SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V); + SetGpuReg(REG_OFFSET_WININ, 0x3F1F); + SetGpuReg(REG_OFFSET_WINOUT, 0x3F3F); + SetGpuReg(REG_OFFSET_BLDCNT, 0xC8); + SetGpuReg(REG_OFFSET_BLDY, 0x10); + gTasks[taskId].data[0] = win0v; + gTasks[taskId].data[1] = win0h; + gTasks[taskId].func = sub_8105F30; +} + +static void sub_8105F30(u8 taskId) +{ + gTasks[taskId].data[0] += 13; + gTasks[taskId].data[1] -= 13; + if (gTasks[taskId].data[0] >= gTasks[taskId].data[1]) + { + gBattle_WIN0H = 0; + gTasks[taskId].func = sub_8105F84; + } + else + { + gBattle_WIN0H = gTasks[taskId].data[1] | (gTasks[taskId].data[0] << 8); + } +} + +static void sub_8105F84(u8 taskId) +{ + if (++gTasks[taskId].data[10] == 5) + { + gTasks[taskId].data[11] = 0x88; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_LIGHTEN); + BlendPalettes(sub_80A75AC(1, 0, 0, 0, 0, 0, 0), 16, RGB(31, 31, 31)); + } + else if (gTasks[taskId].data[10] > 4) + { + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + DestroyAnimVisualTask(taskId); + } +} + +void sub_8106020(u8 taskId) +{ + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + if (++gTasks[taskId].data[0] == 1) + { + PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(1), gUnknown_08593988); + gSprites[spriteId].pos2.x = 4; + } + else + { + gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; + if (!RunAffineAnimFromTaskData(&gTasks[taskId])) + { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_81060B0(u8 taskId) +{ + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + if (++gTasks[taskId].data[0] == 1) + { + PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(0), gUnknown_08593988); + gSprites[spriteId].pos2.x = 4; + } + else + { + gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; + if (!RunAffineAnimFromTaskData(&gTasks[taskId])) + { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_8106140(struct Sprite *sprite) +{ + InitAnimSpritePos(sprite, TRUE); + sprite->data[0] = 95; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + InitAnimLinearTranslation(sprite); + sprite->callback = sub_810618C; +} + +static void sub_810618C(struct Sprite *sprite) +{ + if (!TranslateAnimLinear(sprite)) + { + sprite->pos2.y += Sin(sprite->data[5], 14); + sprite->data[5] = (sprite->data[5] + 4) & 0xFF; + } + else + { + DestroyAnimSprite(sprite); + } +} + +void sub_81061C4(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[0]++; + } + else + { + sprite->data[4] += sprite->data[1]; + sprite->pos2.x = sprite->data[4] >> 8; + sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]); + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + if (sprite->data[3] > 100) + sprite->invisible = sprite->data[3] % 2; + + if (sprite->data[3] > 120) + DestroyAnimSprite(sprite); + } +} + +void sub_810624C(struct Sprite *sprite) +{ + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = 160; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, sub_810627C); +} + +static void sub_810627C(struct Sprite *sprite) +{ + s16 y; + sprite->data[2] += sprite->data[1]; + sprite->pos2.y = -((u16)sprite->data[2] >> 8); + sprite->pos2.x = Sin(sprite->data[3], 4); + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + y = sprite->pos1.y + sprite->pos2.y; + if (y <= 72) + { + sprite->invisible = sprite->data[3] % 2; + if (y <= 64) + DestroyAnimSprite(sprite); + } +} + +void sub_81062E8(u8 taskId) +{ + struct UnknownAnimStruct2 unknownStruct; + + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 3); + SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0); + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); + + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); + SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + sub_80A6B30(&unknownStruct); + sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C232E0, unknownStruct.tilesOffset); + sub_80A6D60(&unknownStruct, &gUnknown_08C23D78, 0); + LoadCompressedPalette(&gUnknown_08C23D50, unknownStruct.unk8 << 4, 32); + gTasks[taskId].func = sub_81063A8; +} + +static void sub_81063A8(u8 taskId) +{ + struct UnknownAnimStruct2 unknownStruct; + + switch (gTasks[taskId].data[12]) + { + case 0: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11])); + if (gTasks[taskId].data[11] == 16) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 1: + if (++gTasks[taskId].data[11] == 141) + { + gTasks[taskId].data[11] = 16; + gTasks[taskId].data[12]++; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]--; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11])); + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_80A6B30(&unknownStruct); + sub_80A6C68(unknownStruct.bgId); + gTasks[taskId].data[12]++; + break; + case 4: + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); + + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_81064F8(u8 taskId) +{ + struct UnknownAnimStruct2 unknownStruct; + + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0); + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); + + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); + SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + sub_80A6B30(&unknownStruct); + if (IsContest()) + sub_80A6D60(&unknownStruct, &gBattleAnimBackgroundTilemap_ScaryFaceContest, 0); + else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) + sub_80A6D60(&unknownStruct, &gBattleAnimBackgroundTilemap_ScaryFacePlayer, 0); + else + sub_80A6D60(&unknownStruct, &gBattleAnimBackgroundTilemap_ScaryFaceOpponent, 0); + + sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C249F8, unknownStruct.tilesOffset); + LoadCompressedPalette(&gUnknown_08C249D0, unknownStruct.unk8 << 4, 32); + gTasks[taskId].func = sub_81065EC; +} + +static void sub_81065EC(u8 taskId) +{ + struct UnknownAnimStruct2 unknownStruct; + + switch (gTasks[taskId].data[12]) + { + case 0: + if (++gTasks[taskId].data[10] == 2) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11])); + if (gTasks[taskId].data[11] == 14) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 1: + if (++gTasks[taskId].data[11] == 21) + { + gTasks[taskId].data[11] = 14; + gTasks[taskId].data[12]++; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 2) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]--; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11])); + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_80A6B30(&unknownStruct); + sub_80A6C68(1); + sub_80A6C68(2); + gTasks[taskId].data[12]++; + // fall through + case 4: + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); + + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + DestroyAnimVisualTask(taskId); + break; + } +} + +// Orbits a sphere in an ellipse around the mon. +// Used by MOVE_HIDDEN_POWER +// arg 0: duration +// arg 1: initial wave offset +void AnimOrbitFast(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->affineAnimPaused = 1; + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[7] = GetBattlerSpriteSubpriority(gBattleAnimAttacker); + sprite->callback = AnimOrbitFastStep; + sprite->callback(sprite); +} + +static void AnimOrbitFastStep(struct Sprite *sprite) +{ + if ((u16)(sprite->data[1] - 64) < 128) + sprite->subpriority = sprite->data[7] + 1; + else + sprite->subpriority = sprite->data[7] - 1; + + sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); + sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8); + sprite->data[1] = (sprite->data[1] + 9) & 0xFF; + switch (sprite->data[5]) + { + case 1: + sprite->data[2] -= 0x400; + sprite->data[3] -= 0x100; + if (++sprite->data[4] == sprite->data[0]) + { + sprite->data[5] = 2; + return; + } + break; + case 0: + sprite->data[2] += 0x400; + sprite->data[3] += 0x100; + if (++sprite->data[4] == sprite->data[0]) + { + sprite->data[4] = 0; + sprite->data[5] = 1; + } + break; + } + + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + DestroyAnimSprite(sprite); +} + +// Moves orbs away from the mon, based on where they are in their orbit. +// Used in MOVE_HIDDEN_POWER. +// arg 0: initial wave offset +void AnimOrbitScatter(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[0] = Sin(gBattleAnimArgs[0], 10); + sprite->data[1] = Cos(gBattleAnimArgs[0], 7); + sprite->callback = AnimOrbitScatterStep; +} + +static void AnimOrbitScatterStep(struct Sprite *sprite) +{ + sprite->pos2.x += sprite->data[0]; + sprite->pos2.y += sprite->data[1]; + if (sprite->pos1.x + sprite->pos2.x + 16 > 272u || sprite->pos1.y + sprite->pos2.y > 160 || sprite->pos1.y + sprite->pos2.y < -16) + DestroyAnimSprite(sprite); +} + +static void sub_8106914(struct Sprite *sprite) +{ + sprite->pos2.x += sprite->data[0]; + sprite->pos2.y += sprite->data[1]; + if (sprite->data[3]++ >= sprite->data[2]) + DestroyAnimSprite(sprite); +} + +void sub_8106944(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[0] = Sin(gBattleAnimArgs[0], 10); + sprite->data[1] = Cos(gBattleAnimArgs[0], 7); + sprite->data[2] = gBattleAnimArgs[1]; + sprite->callback = sub_8106914; +} + +static void sub_810699C(struct Sprite *sprite) +{ + if (sprite->animEnded) + DestroyAnimSprite(sprite); +} + +void sub_81069B8(struct Sprite *sprite) +{ + InitAnimSpritePos(sprite, TRUE); + sprite->callback = sub_810699C; +} + +void sub_81069D0(struct Sprite *sprite) +{ + s16 var0; + if (!sprite->data[0]) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + + sprite->data[0]++; + var0 = (sprite->data[0] * 10) & 0xFF; + sprite->pos2.x = Sin(var0, 80) >> 8; + if (sprite->data[0] < 80) + sprite->pos2.y = (sprite->data[0] / 2) + (Cos(var0, 80) >> 8); + + if (sprite->data[0] > 90) + { + sprite->data[2]++; + sprite->pos2.x -= sprite->data[2] / 2; + } + + if (sprite->data[0] > 100) + DestroyAnimSprite(sprite); +} + +static void sub_8106A64(struct Sprite *sprite) +{ + sprite->data[5]++; + sprite->pos2.x = Sin(sprite->data[3], 5); + sprite->pos2.y = sprite->data[5] / 2; + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + if (sprite->data[5] > 20) + sprite->invisible = sprite->data[5] % 2; + + if (sprite->data[5] > 30) + DestroyAnimSprite(sprite); +} + +void sub_8106AD0(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[0]++; + } + else + { + sprite->data[4] += sprite->data[1]; + sprite->pos2.x = sprite->data[4] >> 8; + sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]); + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + if (sprite->data[3] > 70) + { + sprite->callback = sub_8106A64; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[3] = Random2() % 180; + } + } +} + +void sub_8106B54(struct Sprite *sprite) +{ + if (sprite->data[3] == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + StartSpriteAnim(sprite, 0); + sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 1; + sprite->data[2] = 1; + } + sprite->data[0] += sprite->data[2]; + sprite->data[1] = (sprite->data[0] * 4) % 256; + if (sprite->data[1] < 0) + sprite->data[1] = 0; + sprite->pos2.x = Cos(sprite->data[1], 30 - sprite->data[0] / 4); + sprite->pos2.y = Sin(sprite->data[1], 10 - sprite->data[0] / 8); + if (sprite->data[1] > 128 && sprite->data[2] > 0) + sprite->data[2] = -1; + if (sprite->data[1] == 0 && sprite->data[2] < 0) + sprite->data[2] = 1; + sprite->data[3]++; + if (sprite->data[3] < 10 || sprite->data[3] > 80) + sprite->invisible = sprite->data[0] % 2; + else + sprite->invisible = FALSE; + if (sprite->data[3] > 90) + DestroyAnimSprite(sprite); +} + +void sub_8106C80(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + StartSpriteAnim(sprite, gBattleAnimArgs[2]); + sprite->data[0]++; + } + else if (sprite->animEnded) + { + DestroyAnimSprite(sprite); + } +} + +void sub_8106CD0(struct Sprite *sprite) +{ + if (!gBattleAnimArgs[2]) + { + DestroyAnimSprite(sprite); + } + else + { + if (!gBattleAnimArgs[0]) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + } + + if (!gBattleAnimArgs[1]) + sprite->pos1.x += 32; + else + sprite->pos1.x -= 32; + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[1]; + StartSpriteAnim(sprite, sprite->data[1]); + sprite->callback = sub_8106D5C; + } +} + +static void sub_8106D5C(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + if (--sprite->data[0]) + StartSpriteAnim(sprite, sprite->data[1]); + else + DestroyAnimSprite(sprite); + } +} + +void sub_8106D90(u8 taskId) +{ + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + + PrepareAffineAnimInTaskData(&gTasks[taskId], spriteId, gUnknown_08593B98); + gTasks[taskId].func = sub_8106DD4; +} + +static void sub_8106DD4(u8 taskId) +{ + if (!RunAffineAnimFromTaskData(&gTasks[taskId])) + DestroyAnimVisualTask(taskId); +} + +void sub_8106E00(struct Sprite *sprite) +{ + int var1; + u8 battler = !gBattleAnimArgs[0] ? gBattleAnimAttacker : gBattleAnimTarget; + + if (GetBattlerSide(battler) == B_SIDE_OPPONENT) + gBattleAnimArgs[1] *= -1; + + sprite->pos1.x = GetBattlerSpriteCoord(battler, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[2]; + sprite->data[0] = 0; + sprite->data[1] = (u16)sprite->pos1.x << 3; + sprite->data[2] = (u16)sprite->pos1.y << 3; + + var1 = gBattleAnimArgs[1] << 3; + if (var1 < 0) + var1 += 7; + sprite->data[3] = var1 >> 3; + + var1 = gBattleAnimArgs[2] << 3; + if (var1 < 0) + var1 += 7; + sprite->data[4] = var1 >> 3; + + sprite->oam.tileNum += gBattleAnimArgs[3] * 16; + sprite->callback = sub_8106EC8; +} + +static void sub_8106EC8(struct Sprite *sprite) +{ + sprite->data[1] += sprite->data[3]; + sprite->data[2] += sprite->data[4]; + sprite->pos1.x = sprite->data[1] >> 3; + sprite->pos1.y = sprite->data[2] >> 3; + if (++sprite->data[0] > 16) + DestroyAnimSprite(sprite); +} + +void sub_8106F00(struct Sprite *sprite) +{ + if (!sprite->data[0]) + { + sprite->data[1] = 120 - gBattleAnimArgs[0]; + sprite->invisible = 1; + } + + if (++sprite->data[0] == sprite->data[1]) + SetGreyscaleOrOriginalPalette(sprite->oam.paletteNum + 16, 0); + + if (sprite->data[0] == sprite->data[1] + 80) + DestroyAnimSprite(sprite); +} + +void sub_8106F60(struct Sprite *sprite) +{ + int index; + int var2; + + if (!sprite->data[0]) + { + sprite->pos1.x = 120; + sprite->pos1.y = (gBattleAnimArgs[0] + (((u16)gBattleAnimArgs[0]) >> 31)) / 2 - 15; + + StartSpriteAnim(sprite, gBattleAnimArgs[1]); + + sprite->data[5] = 120; + sprite->data[3] = gBattleAnimArgs[2]; + } + + sprite->data[0]++; + + sprite->data[1] = (sprite->data[0] + ((u16)sprite->data[0] >> 31)) / 2; + index = ((sprite->data[0] * 3) + (u16)sprite->data[3]); + var2 = 0xFF; + sprite->data[6] = (sprite->data[6] + 10) & 0xFF; + + index &= var2; + sprite->pos2.x = Cos(index, 100); + + sprite->pos2.y = sprite->data[1] + Sin(index, 10) + Cos(sprite->data[6], 4); + + if (sprite->data[0] > sprite->data[5]) + { + sprite->callback = sub_8107018; + + sprite->data[0] = 0; + oamt_add_pos2_onto_pos1(sprite); + sprite->data[2] = 5; + sprite->data[4] = 0; + sprite->data[3] = 0; + + StartSpriteAffineAnim(sprite, 1); + } +} + +static void sub_8107018(struct Sprite *sprite) +{ + if (++sprite->data[0] > 10) + { + sprite->data[0] = 0; + sprite->callback = sub_810703C; + } +} + +static void sub_810703C(struct Sprite *sprite) +{ + sprite->data[3] += sprite->data[2]; + sprite->pos2.y = sprite->data[3]; + + sprite->data[2]++; + + if (sprite->data[3] > 48 && sprite->data[2] > 0) + { + sprite->data[2] = sprite->data[4] - 5; + sprite->data[4]++; + } + + if (sprite->data[4] > 3) + { + int var1 = sprite->data[2]; + sprite->invisible = var1 - (((s32)(var1 + ((u32)var1 >> 31)) >> 1) << 1); + DestroyAnimSprite(sprite); + } + + if (sprite->data[4] == 4) + { + DestroyAnimSprite(sprite); + } +} + +void sub_81070AC(struct Sprite *sprite) +{ + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + { + SetAverageBattlerPositions(gBattleAnimAttacker, 0, &sprite->pos1.x, &sprite->pos1.y); + sprite->pos1.y += 40; + + StartSpriteAffineAnim(sprite, 1); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 40; + } + + sprite->data[0] = 13; + sprite->data[2] = sprite->pos1.x; + sprite->data[4] = sprite->pos1.y - 72; + + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void AnimTask_IsFuryCutterHitRight(u8 taskId) +{ + gBattleAnimArgs[7] = gAnimDisableStructPtr->furyCutterCounter & 1; + DestroyAnimVisualTask(taskId); +} + +void AnimTask_GetFuryCutterHitCount(u8 taskId) +{ + gBattleAnimArgs[7] = gAnimDisableStructPtr->furyCutterCounter; + DestroyAnimVisualTask(taskId); +} diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c new file mode 100755 index 000000000..5f65cb31f --- /dev/null +++ b/src/battle_anim_effects_3.c @@ -0,0 +1,4889 @@ +#include "global.h" +#include "alloc.h" +#include "battle.h" +#include "battle_anim.h" +#include "bg.h" +#include "contest.h" +#include "data2.h" +#include "decompress.h" +#include "dma3.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "palette.h" +#include "pokemon_icon.h" +#include "random.h" +#include "scanline_effect.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "util.h" +#include "constants/battle_anim.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/species.h" + +extern u8 sub_807521C(s16 x, s16 y, u8 a3); +extern void sub_810E2C8(struct Sprite *); + +extern const struct SpriteTemplate gUnknown_08593114; +extern const union AffineAnimCmd *const gUnknown_082FF6C0[]; +extern const union AffineAnimCmd *const gUnknown_082FF694[]; + +void sub_815A0D4(struct Sprite *); +void sub_815A1B0(struct Sprite *); +void sub_815A254(struct Sprite *); +void sub_815A2F0(struct Sprite *); +void sub_815A6C4(struct Sprite *); +void sub_815A7B0(struct Sprite *); +void sub_815A7EC(struct Sprite *); +void sub_815A8AC(struct Sprite *); +void sub_815A934(struct Sprite *); +void sub_815AAA4(struct Sprite *); +void sub_815ABD0(struct Sprite *); +void sub_815ACD0(struct Sprite *); +void sub_815B27C(struct Sprite *); +void sub_815B394(struct Sprite *); +void sub_815B49C(struct Sprite *); +void sub_815B570(struct Sprite *); +void sub_815B70C(struct Sprite *); +void sub_815BE04(struct Sprite *); +void sub_815C400(struct Sprite *); +void sub_815C6B0(struct Sprite *); +void sub_815C95C(struct Sprite *); +void sub_815CB88(struct Sprite *); +void sub_815CC94(struct Sprite *); +void sub_815CDB4(struct Sprite *); +void sub_815D7B4(struct Sprite *); +void sub_815D870(struct Sprite *); +void sub_815DEBC(struct Sprite *); +void sub_815E01C(struct Sprite *); +void sub_815E404(struct Sprite *); +void sub_815E444(struct Sprite *); +void sub_815E6D8(struct Sprite *); +void sub_815E954(struct Sprite *); +void sub_815EA14(struct Sprite *); +void sub_815EE84(struct Sprite *); +void sub_815F18C(struct Sprite *); +void sub_815F48C(struct Sprite *); +void sub_815FE80(struct Sprite *); +void sub_81061C4(struct Sprite *); +void sub_8160338(struct Sprite *); +void sub_81603A8(struct Sprite *); +static void sub_815A114(struct Sprite *); +static void sub_815A1F4(struct Sprite *); +static void sub_815A234(struct Sprite *); +static void sub_815A31C(struct Sprite *); +static void sub_815A3AC(struct Sprite *); +static void sub_815A3F0(struct Sprite *); +static void sub_815A49C(struct Sprite *); +static void sub_815A52C(u8); +static void sub_815A5F0(u8); +static void sub_815A73C(struct Sprite *); +static void sub_815A76C(struct Sprite *); +static void sub_815A9A0(struct Sprite *); +static void sub_815AA6C(struct Sprite *); +static void sub_815AB5C(struct Sprite *); +static void sub_815AD4C(struct Sprite *); +static void sub_815AED8(u8); +static void sub_815B054(u8); +static void sub_815B23C(struct Sprite *); +static void sub_815B4D4(struct Sprite *); +static void sub_815B5D0(struct Sprite *); +static void sub_815BF44(struct Sprite *); +static void sub_815BFF4(struct Sprite *); +static void sub_815C050(struct Sprite *); +static void sub_815C548(u8); +static void sub_815C700(struct Sprite *); +static void sub_815C7C4(u8); +static void sub_815CC34(struct Sprite *); +static void sub_815CD0C(struct Sprite *); +static void sub_815CDFC(struct Sprite *); +static void sub_815D1BC(u8); +static void sub_815D398(u8); +static void sub_815D694(u8); +static void sub_815D804(struct Sprite *); +static void sub_815DD48(u8); +static void sub_815DDE0(u8, bool8); +static void sub_815DF64(u8); +static void sub_815E0DC(struct Sprite *); +static void sub_815E20C(u8); +static void sub_815E34C(s16, s16, s16, s16, u8, u8, s16 *, s16 *); +static void sub_815E5CC(u8); +static void sub_815E784(struct Sprite *); +static void sub_815E898(u8); +static void sub_815E9BC(struct Sprite *); +static void sub_815EA60(struct Sprite *); +static void sub_815ECE4(u8); +static void sub_815EF08(struct Sprite *); +static void sub_815F330(u8); +static void sub_815F4F0(struct Sprite *); +static void sub_815F79C(u8); +static void sub_815F7C4(struct Sprite *); + +const union AnimCmd gUnknown_085CE004[] = +{ + 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 gUnknown_085CE01C[] = +{ + gUnknown_085CE004, +}; + +const struct SpriteTemplate gUnknown_085CE020 = +{ + .tileTag = ANIM_TAG_SCRATCH, + .paletteTag = ANIM_TAG_SCRATCH, + .oam = &gUnknown_08524A34, + .anims = gUnknown_085CE01C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A77C8, +}; + +const struct SpriteTemplate gUnknown_085CE038 = +{ + .tileTag = ANIM_TAG_BLACK_SMOKE, + .paletteTag = ANIM_TAG_BLACK_SMOKE, + .oam = &gUnknown_08524934, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815A0D4, +}; + +const struct SpriteTemplate gUnknown_085CE050 = +{ + .tileTag = ANIM_TAG_BLACK_BALL, + .paletteTag = ANIM_TAG_BLACK_BALL, + .oam = &gUnknown_08524904, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A78AC, +}; + +const union AnimCmd gUnknown_085CE068[] = +{ + ANIMCMD_FRAME(0, 40), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(32, 40), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_085CE078[] = +{ + gUnknown_085CE068, +}; + +const struct SpriteTemplate gUnknown_085CE07C = +{ + .tileTag = ANIM_TAG_OPENING_EYE, + .paletteTag = ANIM_TAG_OPENING_EYE, + .oam = &gUnknown_08524914, + .anims = gUnknown_085CE078, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A77C8, +}; + +const struct SpriteTemplate gUnknown_085CE094 = +{ + .tileTag = ANIM_TAG_ROUND_WHITE_HALO, + .paletteTag = ANIM_TAG_ROUND_WHITE_HALO, + .oam = &gUnknown_08524A3C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815A1B0, +}; + +const struct SpriteTemplate gUnknown_085CE0AC = +{ + .tileTag = ANIM_TAG_TEAL_ALERT, + .paletteTag = ANIM_TAG_TEAL_ALERT, + .oam = &gUnknown_08524974, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815A254, +}; + +const union AffineAnimCmd gUnknown_085CE0C4[] = +{ + AFFINEANIMCMD_FRAME(0x180, 0x180, 0, 0), + AFFINEANIMCMD_FRAME(-0x20, 0x18, 0, 5), + AFFINEANIMCMD_FRAME(0x18, -0x20, 0, 5), + AFFINEANIMCMD_JUMP(1), +}; + +const union AffineAnimCmd gUnknown_085CE0E4[] = +{ + AFFINEANIMCMD_FRAME(0x30, 0x30, 0, 0), + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 6), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gUnknown_085CE0FC[] = +{ + gUnknown_085CE0C4, + gUnknown_085CE0E4, +}; + +const struct SpriteTemplate gUnknown_085CE104 = +{ + .tileTag = ANIM_TAG_EYE, + .paletteTag = ANIM_TAG_EYE, + .oam = &gUnknown_08524AFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_085CE0FC, + .callback = sub_815A2F0, +}; + +const struct SpriteTemplate gUnknown_085CE11C = +{ + .tileTag = ANIM_TAG_SPIKES, + .paletteTag = ANIM_TAG_SPIKES, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815A6C4, +}; + +const union AnimCmd gUnknown_085CE134[] = +{ + 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 gUnknown_085CE14C[] = +{ + gUnknown_085CE134, +}; + +const struct SpriteTemplate gUnknown_085CE150 = +{ + .tileTag = ANIM_TAG_LEER, + .paletteTag = ANIM_TAG_LEER, + .oam = &gUnknown_08524914, + .anims = gUnknown_085CE14C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815A7B0, +}; + +const union AnimCmd gUnknown_085CE168[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_085CE170[] = +{ + gUnknown_085CE168, +}; + +const union AffineAnimCmd gUnknown_085CE174[] = +{ + AFFINEANIMCMD_FRAME(-7, -7, -3, 16), + AFFINEANIMCMD_FRAME(7, 7, 3, 16), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gUnknown_085CE18C[] = +{ + gUnknown_085CE174, +}; + +const struct SpriteTemplate gUnknown_085CE190 = +{ + .tileTag = ANIM_TAG_LETTER_Z, + .paletteTag = ANIM_TAG_LETTER_Z, + .oam = &gUnknown_08524974, + .anims = gUnknown_085CE170, + .images = NULL, + .affineAnims = gUnknown_085CE18C, + .callback = sub_815A7EC, +}; + +const union AnimCmd gUnknown_085CE1A8[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(16, 16), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_085CE1BC[] = +{ + gUnknown_085CE1A8, +}; + +const union AffineAnimCmd gUnknown_085CE1C0[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_FRAME(-0x20, -0x20, 0, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gUnknown_085CE1D8[] = +{ + gUnknown_085CE1C0, +}; + +const struct SpriteTemplate gUnknown_085CE1DC = +{ + .tileTag = ANIM_TAG_FANG_ATTACK, + .paletteTag = ANIM_TAG_FANG_ATTACK, + .oam = &gUnknown_085249D4, + .anims = gUnknown_085CE1BC, + .images = NULL, + .affineAnims = gUnknown_085CE1D8, + .callback = sub_815A8AC, +}; + +const union AffineAnimCmd gUnknown_085CE1F4[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x180, 0, 0), + AFFINEANIMCMD_FRAME(0x10, 0x0, 0, 20), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_085CE20C[] = +{ + AFFINEANIMCMD_FRAME(0x140, 0x180, 0, 0), + AFFINEANIMCMD_FRAME(-0x10, 0x0, 0, 19), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gUnknown_085CE224[] = +{ + gUnknown_085CE1F4, + gUnknown_085CE20C, +}; + +const struct SpriteTemplate gUnknown_085CE22C = +{ + .tileTag = ANIM_TAG_SPOTLIGHT, + .paletteTag = ANIM_TAG_SPOTLIGHT, + .oam = &gUnknown_085249DC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_085CE224, + .callback = sub_815A934, +}; + +const struct SpriteTemplate gUnknown_085CE244 = +{ + .tileTag = ANIM_TAG_TAG_HAND, + .paletteTag = ANIM_TAG_TAG_HAND, + .oam = &gUnknown_08524914, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815AAA4, +}; + +const struct SpriteTemplate gUnknown_085CE25C = +{ + .tileTag = ANIM_TAG_TAG_HAND, + .paletteTag = ANIM_TAG_TAG_HAND, + .oam = &gUnknown_08524914, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815ABD0, +}; + +const union AnimCmd gUnknown_085CE274[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(8, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gUnknown_085CE284[] = +{ + gUnknown_085CE274, +}; + +const struct SpriteTemplate gUnknown_085CE288 = +{ + .tileTag = ANIM_TAG_RAPID_SPIN, + .paletteTag = ANIM_TAG_RAPID_SPIN, + .oam = &gUnknown_08524934, + .anims = gUnknown_085CE284, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815ACD0, +}; + +const union AffineAnimCmd gUnknown_085CE2A0[] = +{ + AFFINEANIMCMD_FRAME(-12, 8, 0, 4), + AFFINEANIMCMD_FRAME(20, -20, 0, 4), + AFFINEANIMCMD_FRAME(-8, 12, 0, 4), + AFFINEANIMCMD_END, +}; + +const union AnimCmd gUnknown_085CE2C0[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_085CE2C8[] = +{ + gUnknown_085CE2C0, +}; + +const union AffineAnimCmd gUnknown_085CE2CC[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 5, 40), + AFFINEANIMCMD_FRAME(0, 0, 10, 10), + AFFINEANIMCMD_FRAME(0, 0, 15, 10), + AFFINEANIMCMD_FRAME(0, 0, 20, 40), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gUnknown_085CE2F4[] = +{ + gUnknown_085CE2CC, +}; + +const struct SpriteTemplate gUnknown_085CE2F8 = +{ + .tileTag = ANIM_TAG_TRI_FORCE_TRIANGLE, + .paletteTag = ANIM_TAG_TRI_FORCE_TRIANGLE, + .oam = &gUnknown_085249DC, + .anims = gUnknown_085CE2C8, + .images = NULL, + .affineAnims = gUnknown_085CE2F4, + .callback = sub_815B27C, +}; + +const union AnimCmd gUnknown_085CE310[] = +{ + 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 gUnknown_085CE334[] = +{ + gUnknown_085CE310, +}; + +const struct SpriteTemplate gUnknown_085CE338 = +{ + .tileTag = ANIM_TAG_ECLIPSING_ORB, + .paletteTag = ANIM_TAG_ECLIPSING_ORB, + .oam = &gUnknown_08524914, + .anims = gUnknown_085CE334, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A77C8, +}; + +const union AffineAnimCmd gUnknown_085CE350[] = +{ + AFFINEANIMCMD_FRAME(-12, 20, 0, 8), + AFFINEANIMCMD_FRAME(12, -20, 0, 8), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_END, +}; + +const struct SpriteTemplate gUnknown_085CE370 = +{ + .tileTag = ANIM_TAG_POKEBALL, + .paletteTag = ANIM_TAG_POKEBALL, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815B394, +}; + +const struct SpriteTemplate gUnknown_085CE388 = +{ + .tileTag = ANIM_TAG_GOLD_STARS, + .paletteTag = ANIM_TAG_GOLD_STARS, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815B49C, +}; + +const struct SpriteTemplate gUnknown_085CE3A0 = +{ + .tileTag = ANIM_TAG_GOLD_STARS, + .paletteTag = ANIM_TAG_GOLD_STARS, + .oam = &gUnknown_08524904, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815B570, +}; + +const union AffineAnimCmd gUnknown_085CE3B8[] = +{ + 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_085CE3E0[] = +{ + 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 gUnknown_085CE418 = +{ + .tileTag = ANIM_TAG_BLUE_ORB, + .paletteTag = ANIM_TAG_BLUE_ORB, + .oam = &gUnknown_08524904, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815B70C, +}; + +const union AffineAnimCmd gUnknown_085CE430[] = +{ + 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_085CE460[] = +{ + 0xE8, + 0x18, + 0xFC, + 0x00, +}; + +const union AnimCmd gUnknown_085CE464[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(4, 6), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gUnknown_085CE470[] = +{ + ANIMCMD_FRAME(8, 6), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_085CE478[] = +{ + ANIMCMD_FRAME(12, 6), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_085CE480[] = +{ + gUnknown_085CE464, + gUnknown_085CE470, + gUnknown_085CE478, +}; + +const struct SpriteTemplate gUnknown_085CE48C = +{ + .tileTag = ANIM_TAG_GREEN_STAR, + .paletteTag = ANIM_TAG_GREEN_STAR, + .oam = &gUnknown_0852490C, + .anims = gUnknown_085CE480, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815BE04, +}; + +const s8 gUnknown_085CE4A4[] = +{ + 0x78, + 0x50, + 0x28, + 0x00, +}; + +const u8 gUnknown_085CE4A8[] = +{ + 0, + 0, + 0, + 0, + 50, +}; + +const union AffineAnimCmd gUnknown_085CE4B0[] = +{ + AFFINEANIMCMD_FRAME(0, -15, 0, 7), + AFFINEANIMCMD_FRAME(0, 15, 0, 7), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_END, +}; + +const struct SpriteTemplate gUnknown_085CE4D0 = +{ + .tileTag = ANIM_TAG_ANGER, + .paletteTag = ANIM_TAG_ANGER, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815C400, +}; + +const union AnimCmd gUnknown_085CE4E8[] = +{ + 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 gUnknown_085CE50C[] = +{ + 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 gUnknown_085CE530[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_085CE538[] = +{ + gUnknown_085CE4E8, + gUnknown_085CE50C, + gUnknown_085CE530, +}; + +const struct SpriteTemplate gUnknown_085CE544 = +{ + .tileTag = ANIM_TAG_PINK_PETAL, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gUnknown_08524904, + .anims = gUnknown_085CE538, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815C6B0, +}; + +const u16 gUnknown_085CE55C[] = INCBIN_U16("graphics/unknown/unknown_85CE55C.gbapal"); + +const union AnimCmd gUnknown_085CE57C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(4, 9), + ANIMCMD_FRAME(8, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_085CE58C[] = +{ + gUnknown_085CE57C, +}; + +const struct SpriteTemplate gUnknown_085CE590 = +{ + .tileTag = ANIM_TAG_PAIN_SPLIT, + .paletteTag = ANIM_TAG_PAIN_SPLIT, + .oam = &gUnknown_0852490C, + .anims = gUnknown_085CE58C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815C95C, +}; + +const struct SpriteTemplate gUnknown_085CE5A8 = +{ + .tileTag = ANIM_TAG_CONFETTI, + .paletteTag = ANIM_TAG_CONFETTI, + .oam = &gUnknown_08524904, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815CB88, +}; + +const struct SpriteTemplate gUnknown_085CE5C0 = +{ + .tileTag = ANIM_TAG_SPOTLIGHT, + .paletteTag = ANIM_TAG_SPOTLIGHT, + .oam = &gUnknown_085249DC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_085CE224, + .callback = sub_815CC94, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_85CE5D8 = +{ + .tileTag = ANIM_TAG_BLUE_ORB, + .paletteTag = ANIM_TAG_BLUE_ORB, + .oam = &gUnknown_08524904, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815CDB4, +}; + +const union AffineAnimCmd gUnknown_085CE5F0[] = +{ + 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 gUnknown_085CE620[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(-8, -8, 0, 8), + AFFINEANIMCMD_FRAME(8, 8, 0, 8), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gUnknown_085CE640[] = +{ + AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0), + AFFINEANIMCMD_FRAME(8, 8, 0, 8), + AFFINEANIMCMD_FRAME(-8, -8, 0, 8), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gUnknown_085CE660[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(8, 8, 0, 8), + AFFINEANIMCMD_FRAME(-8, -8, 0, 8), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gUnknown_085CE680[] = +{ + gUnknown_085CE620, + gUnknown_085CE640, + gUnknown_085CE660, +}; + +const struct SpriteTemplate gUnknown_085CE68C = +{ + .tileTag = ANIM_TAG_PINK_CLOUD, + .paletteTag = ANIM_TAG_PINK_CLOUD, + .oam = &gUnknown_08524974, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_085CE680, + .callback = sub_815D7B4, +}; + +const union AffineAnimCmd gUnknown_085CE6A4[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(-4, -6, 0, 16), + AFFINEANIMCMD_FRAME(4, 6, 0, 16), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gUnknown_085CE6C4[] = +{ + AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0), + AFFINEANIMCMD_FRAME(4, 6, 0, 16), + AFFINEANIMCMD_FRAME(-4, -6, 0, 16), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gUnknown_085CE6E4[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(4, 6, 0, 16), + AFFINEANIMCMD_FRAME(-4, -6, 0, 16), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gUnknown_085CE704[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(8, 10, 0, 30), + AFFINEANIMCMD_FRAME(-8, -10, 0, 16), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gUnknown_085CE724[] = +{ + gUnknown_085CE6A4, + gUnknown_085CE6C4, + gUnknown_085CE6E4, + gUnknown_085CE704, +}; + +const struct SpriteTemplate gUnknown_085CE734 = +{ + .tileTag = ANIM_TAG_PINK_CLOUD, + .paletteTag = ANIM_TAG_PINK_CLOUD, + .oam = &gUnknown_085249D4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_085CE724, + .callback = sub_815D870, +}; + +const union AffineAnimCmd gUnknown_085CE74C[] = +{ + AFFINEANIMCMD_FRAME(-16, 16, 0, 6), + AFFINEANIMCMD_FRAME(16, -16, 0, 12), + AFFINEANIMCMD_FRAME(-16, 16, 0, 6), + AFFINEANIMCMD_END, +}; + +const struct SpriteTemplate gUnknown_085CE76C = +{ + .tileTag = ANIM_TAG_SWEAT_DROP, + .paletteTag = ANIM_TAG_SWEAT_DROP, + .oam = &gUnknown_08524904, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815DEBC, +}; + +const u16 gUnknown_085CE784[] = INCBIN_U16("graphics/battle_anims/sprites/effect.gbapal"); + +const union AnimCmd gUnknown_085CE7B4[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gUnknown_085CE7C0[] = +{ + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gUnknown_085CE7CC[] = +{ + gUnknown_085CE7B4, + gUnknown_085CE7C0, +}; + +const struct SpriteTemplate gUnknown_085CE7D4 = +{ + .tileTag = ANIM_TAG_NOISE_LINE, + .paletteTag = ANIM_TAG_NOISE_LINE, + .oam = &gUnknown_08524914, + .anims = gUnknown_085CE7CC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815E01C, +}; + +const struct SpriteTemplate gUnknown_085CE7EC = +{ + .tileTag = ANIM_TAG_SMALL_RED_EYE, + .paletteTag = ANIM_TAG_SMALL_RED_EYE, + .oam = &gUnknown_08524904, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815E404, +}; + +const struct SpriteTemplate gUnknown_085CE804 = +{ + .tileTag = ANIM_TAG_PAW_PRINT, + .paletteTag = ANIM_TAG_PAW_PRINT, + .oam = &gUnknown_08524914, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815E444, +}; + +const union AffineAnimCmd gUnknown_085CE81C[] = +{ + AFFINEANIMCMD_FRAME(0, 0, -4, 24), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_085CE82C[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), + AFFINEANIMCMD_FRAME(0, 0, 4, 24), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gUnknown_085CE844[] = +{ + gUnknown_085CE81C, + gUnknown_085CE82C, +}; + +const struct SpriteTemplate gUnknown_085CE84C = +{ + .tileTag = ANIM_TAG_RED_BALL, + .paletteTag = ANIM_TAG_RED_BALL, + .oam = &gUnknown_08524974, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_085CE844, + .callback = SpriteCallbackDummy, +}; + +const struct SpriteTemplate gUnknown_085CE864 = +{ + .tileTag = ANIM_TAG_TAG_HAND, + .paletteTag = ANIM_TAG_TAG_HAND, + .oam = &gUnknown_08524914, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815E6D8, +}; + +const union AffineAnimCmd gUnknown_085CE87C[] = +{ + AFFINEANIMCMD_FRAME(0, -16, 0, 6), + AFFINEANIMCMD_FRAME(0, 16, 0, 6), + AFFINEANIMCMD_END, +}; + +const struct SpriteTemplate gUnknown_085CE894 = +{ + .tileTag = ANIM_TAG_SMELLINGSALT_EFFECT, + .paletteTag = ANIM_TAG_SMELLINGSALT_EFFECT, + .oam = &gUnknown_08524914, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815E954, +}; + +const struct SpriteTemplate gUnknown_085CE8AC = +{ + .tileTag = ANIM_TAG_TAG_HAND, + .paletteTag = ANIM_TAG_TAG_HAND, + .oam = &gUnknown_08524914, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815EA14, +}; + +const struct SpriteTemplate gUnknown_085CE8C4 = +{ + .tileTag = ANIM_TAG_MAGNIFYING_GLASS, + .paletteTag = ANIM_TAG_MAGNIFYING_GLASS, + .oam = &gUnknown_08524A34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815EE84, +}; + +const struct SpriteTemplate gUnknown_085CE8DC = +{ + .tileTag = ANIM_TAG_GOLD_STARS, + .paletteTag = ANIM_TAG_GOLD_STARS, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815F18C, +}; + +const struct SpriteTemplate gUnknown_085CE8F4 = +{ + .tileTag = ANIM_TAG_GOLD_STARS, + .paletteTag = ANIM_TAG_GOLD_STARS, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81061C4, +}; + +const struct SpriteTemplate gUnknown_085CE90C = +{ + .tileTag = ANIM_TAG_X_SIGN, + .paletteTag = ANIM_TAG_X_SIGN, + .oam = &gUnknown_0852491C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815F48C, +}; + +const struct SpriteTemplate gUnknown_085CE924 = +{ + .tileTag = ANIM_TAG_ITEM_BAG, + .paletteTag = ANIM_TAG_ITEM_BAG, + .oam = &gUnknown_08524914, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_815FE80, +}; + +const union AnimCmd gUnknown_085CE93C[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_085CE948[] = +{ + gUnknown_085CE93C, +}; + +const union AffineAnimCmd gUnknown_085CE94C[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, -4, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_085CE964[] = +{ + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 4, 8), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gUnknown_085CE97C[] = +{ + gUnknown_085CE94C, + gUnknown_085CE964, +}; + +const struct SpriteTemplate gUnknown_085CE984 = +{ + .tileTag = ANIM_TAG_SLAM_HIT_2, + .paletteTag = ANIM_TAG_SLAM_HIT_2, + .oam = &gUnknown_0852497C, + .anims = gUnknown_085CE948, + .images = NULL, + .affineAnims = gUnknown_085CE97C, + .callback = sub_8160338, +}; + +const union AffineAnimCmd gUnknown_085CE99C[] = +{ + AFFINEANIMCMD_FRAME(0, 0, -4, 64), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gUnknown_085CE9AC[] = +{ + gUnknown_085CE99C, +}; + +const struct SpriteTemplate gUnknown_085CE9B0 = +{ + .tileTag = ANIM_TAG_RECYCLE, + .paletteTag = ANIM_TAG_RECYCLE, + .oam = &gUnknown_08524A9C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_085CE9AC, + .callback = sub_81603A8, +}; + +const union AffineAnimCmd gUnknown_085CE9C8[] = +{ + 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, +}; + +void sub_815A0D4(struct Sprite *sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + + if (!gBattleAnimArgs[3]) + sprite->data[0] = gBattleAnimArgs[2]; + else + sprite->data[0] = -gBattleAnimArgs[2]; + + sprite->data[1] = gBattleAnimArgs[4]; + sprite->callback = sub_815A114; +} + +static void sub_815A114(struct Sprite *sprite) +{ + if (sprite->data[1] > 0) + { + sprite->pos2.x = sprite->data[2] >> 8; + sprite->data[2] += sprite->data[0]; + sprite->invisible ^= 1; + sprite->data[1]--; + } + else + { + DestroyAnimSprite(sprite); + } +} + +void sub_815A160(u8 taskId) +{ + sub_807521C( + GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 8, + GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 8, + 0); + DestroyAnimVisualTask(taskId); +} + +void sub_815A1B0(struct Sprite *sprite) +{ + sprite->data[0] = 90; + sprite->callback = WaitAnimForDuration; + sprite->data[1] = 7; + StoreSpriteCallbackInData6(sprite, sub_815A1F4); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], 16 - sprite->data[1])); +} + +static void sub_815A1F4(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], 16 - sprite->data[1])); + if (--sprite->data[1] < 0) + { + sprite->invisible = 1; + sprite->callback = sub_815A234; + } +} + +static void sub_815A234(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimSprite(sprite); +} + +void sub_815A254(struct Sprite *sprite) +{ + u16 rotation; + u8 x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + u8 y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + + sub_80A6980(sprite, TRUE); + + rotation = ArcTan2Neg(sprite->pos1.x - x, sprite->pos1.y - y); + rotation += 0x6000; + if (IsContest()) + rotation += 0x4000; + + TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation); + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = x; + sprite->data[4] = y; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void sub_815A2F0(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + sprite->data[0] = 4; + sprite->callback = sub_815A31C; +} + +static void sub_815A31C(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0])); + + if (sprite->data[1]) + sprite->data[0]--; + else + sprite->data[0]++; + + if (sprite->data[0] == 15 || sprite->data[0] == 4) + sprite->data[1] ^= 1; + + if (sprite->data[2]++ > 70) + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + StartSpriteAffineAnim(sprite, 1); + sprite->data[2] = 0; + sprite->invisible = 1; + sprite->affineAnimPaused = 1; + sprite->callback = sub_815A3AC; + } +} + +static void sub_815A3AC(struct Sprite *sprite) +{ + if (sprite->data[2]++ > 9) + { + sprite->invisible = 0; + sprite->affineAnimPaused = 0; + if (sprite->affineAnimEnded) + sprite->callback = sub_815A3F0; + } +} + +static void sub_815A3F0(struct Sprite *sprite) +{ + switch (sprite->data[3]) + { + case 0: + case 1: + sprite->pos2.x = 1; + sprite->pos2.y = 0; + break; + case 2: + case 3: + sprite->pos2.x = -1; + sprite->pos2.y = 0; + break; + case 4: + case 5: + sprite->pos2.x = 0; + sprite->pos2.y = 1; + break; + case 6: + default: + sprite->pos2.x = 0; + sprite->pos2.y = -1; + break; + } + + if (++sprite->data[3] > 7) + sprite->data[3] = 0; + + if (sprite->data[4]++ > 15) + { + sprite->data[0] = 16; + sprite->data[1] = 0; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 0)); + sprite->callback = sub_815A49C; + } +} + +static void sub_815A49C(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0])); + + if (sprite->data[1]++ > 1) + { + sprite->data[0]--; + sprite->data[1] = 0; + } + + if (sprite->data[0] == 0) + sprite->invisible = 1; + + if (sprite->data[0] < 0) + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimSprite(sprite); + } +} + +void sub_815A504(u8 taskId) +{ + gTasks[taskId].func = sub_815A52C; + gAnimVisualTaskCount--; +} + +static void sub_815A52C(u8 taskId) +{ + int i; + u16 lastColor; + u8 paletteIndex = sub_80A6D94(); + + if (++gTasks[taskId].data[5] == 4) + { + lastColor = gPlttBufferFaded[paletteIndex * 16 + 11]; + for (i = 10; i > 0; i--) + gPlttBufferFaded[paletteIndex * 16 + i + 1] = gPlttBufferFaded[paletteIndex * 16 + i]; + + gPlttBufferFaded[paletteIndex * 16 + 1] = lastColor; + gTasks[taskId].data[5] = 0; + } + + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + DestroyTask(taskId); +} + +void sub_815A5C8(u8 taskId) +{ + gTasks[taskId].func = sub_815A5F0; + gAnimVisualTaskCount--; +} + +static void sub_815A5F0(u8 taskId) +{ + int i; + u16 lastColor; + u8 paletteIndex = sub_80A6D94(); + + if (++gTasks[taskId].data[5] == 4) + { + lastColor = gPlttBufferFaded[paletteIndex * 16 + 11]; + for (i = 10; i > 0; i--) + gPlttBufferFaded[paletteIndex * 16 + i + 1] = gPlttBufferFaded[paletteIndex * 16 + i]; + gPlttBufferFaded[paletteIndex * 16 + 1] = lastColor; + + lastColor = gPlttBufferUnfaded[paletteIndex * 16 + 11]; + for (i = 10; i > 0; i--) + gPlttBufferUnfaded[paletteIndex * 16 + i + 1] = gPlttBufferUnfaded[paletteIndex * 16 + i]; + gPlttBufferUnfaded[paletteIndex * 16 + 1] = lastColor; + + gTasks[taskId].data[5] = 0; + } + + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + DestroyTask(taskId); +} + +void sub_815A6C4(struct Sprite *sprite) +{ + u16 x; + u16 y; + + InitAnimSpritePos(sprite, TRUE); + SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &x, &y); + + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = x + gBattleAnimArgs[2]; + sprite->data[4] = y + gBattleAnimArgs[3]; + sprite->data[5] = -50; + + InitAnimArcTranslation(sprite); + sprite->callback = sub_815A73C; +} + +static void sub_815A73C(struct Sprite *sprite) +{ + if (TranslateAnimArc(sprite)) + { + sprite->data[0] = 30; + sprite->data[1] = 0; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, sub_815A76C); + } +} + +static void sub_815A76C(struct Sprite *sprite) +{ + if (sprite->data[1] & 1) + sprite->invisible ^= 1; + + if (++sprite->data[1] == 16) + DestroyAnimSprite(sprite); +} + +void sub_815A7B0(struct Sprite *sprite) +{ + SetSpriteCoordsToAnimAttackerCoords(sprite); + sub_80A6864(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->callback = RunStoredCallbackWhenAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +// This is likely fakematching due to some strange type casting behavior. +void sub_815A7EC(struct Sprite *sprite) +{ + int var0; + int var1; + if (sprite->data[0] == 0) + { + SetSpriteCoordsToAnimAttackerCoords(sprite); + sub_80A6864(sprite, gBattleAnimArgs[0]); + if (!IsContest()) + { + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[3]; + } + else + { + var1 = -gBattleAnimArgs[2]; + sprite->data[1] = var1; + var1 = -gBattleAnimArgs[3]; + sprite->data[2] = var1; + } + } + else + { + var1 = -gBattleAnimArgs[2]; + sprite->data[1] = var1; + sprite->data[2] = gBattleAnimArgs[3]; + } + } + + sprite->data[0]++; + var0 = (sprite->data[0] * 20) & 0xFF; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x = (sprite->data[3] + (s32)((u32)sprite->data[3] >> 31)) >> 1; + sprite->pos2.y = Sin(var0 & 0xFF, 5) + ((s32)(sprite->data[4] + ((u32)sprite->data[4] >> 31)) >> 1); + + if ((u16)(sprite->pos1.x + sprite->pos2.x) > 240) + DestroyAnimSprite(sprite); +} + +void sub_815A8AC(struct Sprite *sprite) +{ + if (sprite->animEnded) + DestroyAnimSprite(sprite); +} + +void AnimTask_IsTargetPlayerSide(u8 taskId) +{ + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) + gBattleAnimArgs[7] = 0; + else + gBattleAnimArgs[7] = 1; + + DestroyAnimVisualTask(taskId); +} + +void AnimTask_IsHealingMove(u8 taskId) +{ + if (gAnimMoveDmg > 0) + gBattleAnimArgs[7] = 0; + else + gBattleAnimArgs[7] = 1; + + DestroyAnimVisualTask(taskId); +} + +void sub_815A934(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H); + SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V); + + sub_80A6980(sprite, FALSE); + + sprite->oam.objMode = ST_OAM_OBJ_WINDOW; + sprite->invisible = 1; + sprite->callback = sub_815A9A0; +} + +static void sub_815A9A0(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->invisible = 0; + if (sprite->affineAnimEnded) + sprite->data[0]++; + break; + case 1: + case 3: + sprite->data[1] += 117; + sprite->pos2.x = sprite->data[1] >> 8; + if (++sprite->data[2] == 21) + { + sprite->data[2] = 0; + sprite->data[0]++; + } + break; + case 2: + sprite->data[1] -= 117; + sprite->pos2.x = sprite->data[1] >> 8; + if (++sprite->data[2] == 41) + { + sprite->data[2] = 0; + sprite->data[0]++; + } + break; + case 4: + ChangeSpriteAffineAnim(sprite, 1); + sprite->data[0]++; + break; + case 5: + if (sprite->affineAnimEnded) + { + sprite->invisible = 1; + sprite->callback = sub_815AA6C; + } + break; + } +} + +static void sub_815AA6C(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON); + DestroyAnimSprite(sprite); +} + +void sub_815AAA4(struct Sprite *sprite) +{ + if (gBattleAnimArgs[3] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + } + + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->oam.tileNum += 16; + + if (gBattleAnimArgs[2] == 0) + { + sprite->oam.matrixNum = 8; + sprite->pos2.x = -12; + sprite->data[1] = 2; + } + else + { + sprite->pos2.x = 12; + sprite->data[1] = -2; + } + + sprite->data[0] = gBattleAnimArgs[4]; + + if (sprite->data[3] != 255) + sprite->data[3] = gBattleAnimArgs[2]; + + sprite->callback = sub_815AB5C; +} + +static void sub_815AB5C(struct Sprite *sprite) +{ + if (sprite->data[2] == 0) + { + sprite->pos2.x += sprite->data[1]; + if (sprite->pos2.x == 0) + { + sprite->data[2]++; + if (sprite->data[3] == 0) + { + PlaySE1WithPanning(SE_W227, BattleAnimAdjustPanning(-64)); + } + } + } + else + { + sprite->pos2.x -= sprite->data[1]; + if (abs(sprite->pos2.x) == 12) + { + sprite->data[0]--; + sprite->data[2]--; + } + + } + + if (sprite->data[0] == 0) + DestroyAnimSprite(sprite); +} + +void sub_815ABD0(struct Sprite *sprite) +{ + sprite->oam.objMode = ST_OAM_OBJ_WINDOW; + sprite->data[3] = 255; + sub_815AAA4(sprite); +} + +void sub_815ABEC(u8 taskId) +{ + if (IsContest()) + { + SetGpuReg(REG_OFFSET_WININ, 0x1F3F); + gBattle_WIN1H = 0x98F0; + gBattle_WIN1V = 0x00A0; + SetGpuReg(REG_OFFSET_WIN1H, gBattle_WIN0H); + SetGpuReg(REG_OFFSET_WIN1V, gBattle_WIN0V); + } + else + { + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ); + gBattle_WIN1H = 0x00F0; + gBattle_WIN1V = 0x78A0; + SetGpuReg(REG_OFFSET_WIN1H, 0x00F0); + SetGpuReg(REG_OFFSET_WIN1V, gBattle_WIN1V); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON); + } + + DestroyAnimVisualTask(taskId); +} + +void sub_815AC8C(u8 taskId) +{ + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + gBattle_WIN1H = 0; + gBattle_WIN1V = 0; + if (!IsContest()) + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON); + + DestroyAnimVisualTask(taskId); +} + +void sub_815ACD0(struct Sprite *sprite) +{ + int var0; + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + } + + sprite->pos2.y = gBattleAnimArgs[2]; + var0 = 0; + if (sprite->pos2.y > gBattleAnimArgs[3]) + var0 = 1; + + sprite->data[0] = var0; + sprite->data[1] = 0; + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[3] = gBattleAnimArgs[5]; + sprite->data[4] = gBattleAnimArgs[3]; + sprite->callback = sub_815AD4C; +} + +static void sub_815AD4C(struct Sprite *sprite) +{ + sprite->data[1] = (sprite->data[1] + sprite->data[2]) & 0xFF; + sprite->pos2.x = gSineTable[sprite->data[1]] >> 4; + sprite->pos2.y += sprite->data[3]; + + if (sprite->data[0]) + { + if (sprite->pos2.y < sprite->data[4]) + DestroyAnimSprite(sprite); + } + else + { + if (sprite->pos2.y > sprite->data[4]) + DestroyAnimSprite(sprite); + } +} + +void sub_815ADB0(u8 taskId) +{ + s16 var0; + u8 toBG2; + s16 var2; + int var3; + int var4; + s16 i; + struct ScanlineEffectParams scanlineParams; + struct Task *task = &gTasks[taskId]; + + if (!gBattleAnimArgs[0]) + { + var0 = GetBattlerYCoordWithElevation(gBattleAnimAttacker); + toBG2 = sub_80A8364(gBattleAnimAttacker); + } + else + { + var0 = GetBattlerYCoordWithElevation(gBattleAnimTarget); + toBG2 = sub_80A8364(gBattleAnimTarget); + } + + task->data[0] = var0 + 36; + task->data[1] = task->data[0]; + task->data[2] = var0 - 33; + if (task->data[2] < 0) + task->data[2] = 0; + + task->data[3] = task->data[0]; + task->data[4] = 8; + task->data[5] = gBattleAnimArgs[1]; + task->data[6] = 0; + task->data[7] = 0; + + if (toBG2 == 1) + { + var3 = gBattle_BG1_X; + task->data[8] = var3; + var4 = var3 + 240; + } + else + { + var3 = gBattle_BG2_X; + task->data[8] = var3; + var4 = var3 + 240; + } + + task->data[9] = var4; + task->data[10] = gBattleAnimArgs[2]; + + if (!gBattleAnimArgs[2]) + { + task->data[11] = var4; + var2 = task->data[8]; + } + else + { + task->data[11] = var3; + var2 = task->data[9]; + } + + task->data[15] = 0; + + i = task->data[2]; + while (i <= task->data[3]) + { + gScanlineEffectRegBuffers[0][i] = var2; + gScanlineEffectRegBuffers[1][i] = var2; + i++; + } + + if (toBG2 == 1) + scanlineParams.dmaDest = ®_BG1HOFS; + else + scanlineParams.dmaDest = ®_BG2HOFS; + + scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; + scanlineParams.initState = 1; + scanlineParams.unused9 = 0; + ScanlineEffect_SetParams(scanlineParams); + + task->func = sub_815AED8; +} + +static void sub_815AED8(u8 taskId) +{ + s16 i; + struct Task *task = &gTasks[taskId]; + + task->data[0] -= task->data[5]; + if (task->data[0] < task->data[2]) + task->data[0] = task->data[2]; + + if (task->data[4] == 0) + { + task->data[1] -= task->data[5]; + if (task->data[1] < task->data[2]) + { + task->data[1] = task->data[2]; + task->data[15] = 1; + } + } + else + { + task->data[4]--; + } + + if (++task->data[6] > 1) + { + task->data[6] = 0; + task->data[7] = task->data[7] == 0 ? 1 : 0; + + if (task->data[7]) + task->data[12] = task->data[8]; + else + task->data[12] = task->data[9]; + } + + i = task->data[0]; + while (i < task->data[1]) + { + gScanlineEffectRegBuffers[0][i] = task->data[12]; + gScanlineEffectRegBuffers[1][i] = task->data[12]; + i++; + } + + i = task->data[1]; + while (i <= task->data[3]) + { + gScanlineEffectRegBuffers[0][i] = task->data[11]; + gScanlineEffectRegBuffers[1][i] = task->data[11]; + i++; + } + + if (task->data[15]) + { + if (task->data[10]) + gScanlineEffect.state = 3; + + DestroyAnimVisualTask(taskId); + } +} + +void sub_815AFF0(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + task->data[4] = 32; + task->data[5] = -20; + task->data[6] = 0; + task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->func = sub_815B054; +} + +static void sub_815B054(u8 taskId) +{ + int var0, var1; + s16 x, y; + u16 i, j; + u8 spriteId; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + var0 = task->data[2]; + if (task->data[1] & 1) + { + var1 = task->data[4]; + x = var0 - var1; + } + else + { + var1 = task->data[4]; + x = var0 + var1; + } + + y = task->data[3] + task->data[5]; + spriteId = CreateSprite(&gUnknown_08593114, x, y, 6 - task->data[1]); + PlaySE12WithPanning(SE_W118, BattleAnimAdjustPanning(-64)); + + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].hFlip = task->data[1] & 1; + gSprites[spriteId].callback = SpriteCallbackDummy; + } + + if (task->data[1] & 1) + { + task->data[4] -= 6; + task->data[5] -= 6; + } + + PrepareAffineAnimInTaskData(task, task->data[15], gUnknown_085CE2A0); + task->data[1]++; + task->data[0] = 1; + break; + case 1: + if (!RunAffineAnimFromTaskData(task)) + { + if (task->data[1] == 6) + { + task->data[6] = 8; + task->data[0] = 3; + } + else + { + if (task->data[1] <= 2) + task->data[6] = 10; + else + task->data[6] = 0; + + task->data[0] = 2; + } + } + break; + case 2: + if (task->data[6] != 0) + task->data[6]--; + else + task->data[0] = 0; + break; + case 3: + if (task->data[6] != 0) + task->data[6]--; + else + task->data[0] = 4; + break; + case 4: + for (i = 0, j = 0; i < MAX_SPRITES; i++) + { + if (gSprites[i].template == &gUnknown_08593114) + { + gSprites[i].data[0] = taskId; + gSprites[i].data[1] = 6; + StartSpriteAnim(&gSprites[i], 2); + gSprites[i].callback = sub_815B23C; + + if (++j == 6) + break; + } + } + + task->data[6] = j; + task->data[0] = 5; + break; + case 5: + if (task->data[6] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_815B23C(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + gTasks[sprite->data[0]].data[sprite->data[1]]--; + DestroySprite(sprite); + } +} + +void sub_815B27C(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + InitAnimSpritePos(sprite, FALSE); + + if (++sprite->data[0] < 40) + { + u16 var = sprite->data[0]; + if ((var & 1) == 0) + sprite->invisible = 1; + else + sprite->invisible = 0; + } + + if (sprite->data[0] > 30) + sprite->invisible = 0; + + if (sprite->data[0] == 61) + { + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 20; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->callback = StartAnimLinearTranslation; + } +} + +void sub_815B338(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE350); + gTasks[taskId].data[0]++; + break; + case 1: + if (!RunAffineAnimFromTaskData(&gTasks[taskId])) + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_815B394(struct Sprite *sprite) +{ + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + + switch (sprite->data[0]) + { + case 0: + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); + sprite->data[1] = 256; + sprite->data[2] = 256; + sprite->data[0]++; + break; + case 1: + sprite->data[1] += 96; + sprite->data[2] -= 26; + SetSpriteRotScale(spriteId, sprite->data[1], sprite->data[2], 0); + + if (++sprite->data[3] == 5) + sprite->data[0]++; + // fall through + case 2: + sprite->data[1] += 96; + sprite->data[2] += 48; + SetSpriteRotScale(spriteId, sprite->data[1], sprite->data[2], 0); + + if (++sprite->data[3] == 9) + { + sprite->data[3] = 0; + gSprites[spriteId].invisible = 1; + ResetSpriteRotScale(spriteId); + sprite->data[0]++; + } + break; + case 3: + sprite->pos2.y -= 6; + if (sprite->pos1.y + sprite->pos2.y < -32) + DestroyAnimSprite(sprite); + break; + } +} + +void sub_815B49C(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos1.x = -16; + else + sprite->pos1.x = 256; + + sprite->pos1.y = 0; + sprite->callback = sub_815B4D4; +} + +static void sub_815B4D4(struct Sprite *sprite) +{ + u32 newX; + + sprite->data[0] += 72; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos2.x = sprite->data[0] >> 4; + else + sprite->pos2.x = -(sprite->data[0] >> 4); + + sprite->data[1] += 16; + sprite->pos2.y += sprite->data[1] >> 8; + + if (++sprite->data[2] % 3 == 0) + { + CreateSpriteAndAnimate( + &gUnknown_085CE3A0, + sprite->pos1.x + sprite->pos2.x, + sprite->pos1.y + sprite->pos2.y, + sprite->subpriority + 1); + } + + newX = sprite->pos1.x + sprite->pos2.x + 32; + if (newX > 304) + DestroyAnimSprite(sprite); +} + +void sub_815B570(struct Sprite *sprite) +{ + u8 rand; + s8 y; + + rand = Random2() & 3; + if (rand == 0) + sprite->oam.tileNum += 4; + else + sprite->oam.tileNum += 5; + + y = Random2() & 7; + if (y > 3) + y = -y; + + sprite->pos2.y = y; + sprite->callback = sub_815B5D0; +} + +static void sub_815B5D0(struct Sprite *sprite) +{ + if (++sprite->data[0] < 30) + { + if (++sprite->data[1] == 2) + { + sprite->invisible ^= 1; + sprite->data[1] = 0; + } + } + else + { + if (sprite->data[1] == 2) + sprite->invisible = 0; + + if (sprite->data[1] == 3) + { + sprite->invisible = 1; + sprite->data[1] = -1; + } + + sprite->data[1]++; + } + + if (sprite->data[0] > 60) + DestroySprite(sprite); +} + +void sub_815B65C(u8 taskId) +{ + if (!gTasks[taskId].data[0]) + { + PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE3B8); + gTasks[taskId].data[0]++; + } + else + { + if (!RunAffineAnimFromTaskData(&gTasks[taskId])) + DestroyAnimVisualTask(taskId); + } +} + +void sub_815B6B4(u8 taskId) +{ + if (!gTasks[taskId].data[0]) + { + PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE3E0); + gTasks[taskId].data[0]++; + } + else + { + if (!RunAffineAnimFromTaskData(&gTasks[taskId])) + DestroyAnimVisualTask(taskId); + } +} + +void sub_815B70C(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + InitAnimSpritePos(sprite, FALSE); + sprite->data[1] = 0x900; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[0]++; + break; + case 1: + sprite->pos2.y -= sprite->data[1] >> 8; + sprite->data[1] -= 96; + if (sprite->pos1.y + sprite->pos2.y > sprite->data[2]) + DestroyAnimSprite(sprite); + break; + } +} + +void sub_815B778(u8 taskId) +{ + if (!gTasks[taskId].data[0]) + { + PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE430); + gTasks[taskId].data[0]++; + } + else + { + if (!RunAffineAnimFromTaskData(&gTasks[taskId])) + DestroyAnimVisualTask(taskId); + } +} + +void sub_815B7D0(u8 taskId) +{ + int i, j; + u8 position; + struct UnknownAnimStruct2 unknownStruct; + u8 *dest; + u8 *src; + u16 *unk4; + u16 stretch; + + switch (gTasks[taskId].data[0]) + { + case 0: + SetGpuReg(REG_OFFSET_MOSAIC, 0); + if (sub_80A8364(gBattleAnimAttacker) == 1) + SetAnimBgAttribute(1, BG_ANIM_MOSAIC, 1); + else + SetAnimBgAttribute(2, BG_ANIM_MOSAIC, 1); + + gTasks[taskId].data[10] = gBattleAnimArgs[0]; + gTasks[taskId].data[0]++; + break; + case 1: + if (gTasks[taskId].data[2]++ > 1) + { + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[1]++; + stretch = gTasks[taskId].data[1]; + SetGpuReg(REG_OFFSET_MOSAIC, (stretch << 4) | stretch); + if (stretch == 15) + gTasks[taskId].data[0]++; + } + break; + case 2: + HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10]); + sub_80A6BFC(&unknownStruct, gBattleAnimAttacker); + + if (IsContest()) + position = 0; + else + position = GetBattlerPosition(gBattleAnimAttacker); + + src = gMonSpritesGfxPtr->sprites[position] + (gBattleMonForms[gBattleAnimAttacker] << 11); + dest = unknownStruct.bgTiles; + CpuCopy32(src, dest, 0x800); + LoadBgTiles(1, unknownStruct.bgTiles, 0x800, unknownStruct.tilesOffset); + if (IsContest()) + { + if (IsSpeciesNotUnown(gContestResources->field_18->species) != IsSpeciesNotUnown(gContestResources->field_18->unk2)) + { + unk4 = (u16 *)unknownStruct.unk4; + for (i = 0; i < 8; i++) + { + for (j = 0; j < 4; j++) + { + u16 temp = unk4[j + i * 0x20]; + unk4[j + i * 0x20] = unk4[(7 - j) + i * 0x20]; + unk4[(7 - j) + i * 0x20] = temp; + } + } + + for (i = 0; i < 8; i++) + { + for (j = 0; j < 8; j++) + { + unk4[j + i * 0x20] ^= 0x400; + } + } + } + + if (IsSpeciesNotUnown(gContestResources->field_18->unk2)) + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0; + else + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF694; + + StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0); + } + + gTasks[taskId].data[0]++; + break; + case 3: + if (gTasks[taskId].data[2]++ > 1) + { + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[1]--; + stretch = gTasks[taskId].data[1]; + SetGpuReg(REG_OFFSET_MOSAIC, (stretch << 4) | stretch); + + if (stretch == 0) + gTasks[taskId].data[0]++; + } + break; + case 4: + SetGpuReg(REG_OFFSET_MOSAIC, 0); + if (sub_80A8364(gBattleAnimAttacker) == 1) + SetAnimBgAttribute(1, BG_ANIM_MOSAIC, 0); + else + SetAnimBgAttribute(2, BG_ANIM_MOSAIC, 0); + + if (!IsContest()) + { + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + { + if (gTasks[taskId].data[10] == 0) + SetBattlerShadowSpriteCallback(gBattleAnimAttacker, gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies); + } + } + + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_815BB18(u8 taskId) +{ + gBattleAnimArgs[7] = gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible; + DestroyAnimVisualTask(taskId); +} + +void sub_815BB58(u8 taskId) +{ + HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, TRUE); + DestroyAnimVisualTask(taskId); +} + +void sub_815BB84(u8 taskId) +{ + struct UnknownAnimStruct2 unknownStruct; + + switch (gTasks[taskId].data[0]) + { + case 0: + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); + + sub_80A6B30(&unknownStruct); + sub_80A6D60(&unknownStruct, &gUnknown_08C2A6EC, 0); + if (IsContest()) + { + gBattle_BG1_X = -56; + gBattle_BG1_Y = 0; + } + else + { + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattle_BG1_X = -135; + else + gBattle_BG1_X = -10; + + gBattle_BG1_Y = 0; + } + + sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C2A634, unknownStruct.tilesOffset); + LoadCompressedPalette(&gUnknown_08C2A6D4, unknownStruct.unk8 << 4, 32); + + gTasks[taskId].data[10] = gBattle_BG1_X; + gTasks[taskId].data[11] = gBattle_BG1_Y; + + gTasks[taskId].data[0]++; + PlaySE12WithPanning(SE_W234, BattleAnimAdjustPanning(-64)); + break; + case 1: + if (gTasks[taskId].data[4]++ > 0) + { + gTasks[taskId].data[4] = 0; + if (++gTasks[taskId].data[1] > 12) + gTasks[taskId].data[1] = 12; + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1])); + + if (gTasks[taskId].data[1] == 12) + gTasks[taskId].data[0]++; + } + break; + case 2: + if (--gTasks[taskId].data[1] < 0) + gTasks[taskId].data[1] = 0; + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1])); + + if (!gTasks[taskId].data[1]) + { + gBattle_BG1_X = gUnknown_085CE460[gTasks[taskId].data[2]] + gTasks[taskId].data[10]; + if (++gTasks[taskId].data[2] == 4) + gTasks[taskId].data[0] = 4; + else + gTasks[taskId].data[0] = 3; + } + break; + case 3: + if (++gTasks[taskId].data[3] == 4) + { + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[0] = 1; + PlaySE12WithPanning(SE_W234, BattleAnimAdjustPanning(-64)); + } + break; + case 4: + sub_80A6B30(&unknownStruct); + sub_80A6C68(unknownStruct.bgId); + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); + + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_815BE04(struct Sprite *sprite) +{ + s16 xOffset; + u8 spriteId1; + u8 spriteId2; + + xOffset = Random2(); + xOffset &= 0x3F; + if (xOffset > 31) + xOffset = 32 - xOffset; + + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + xOffset; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 32; + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + + spriteId1 = CreateSprite(&gUnknown_085CE48C, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1); + spriteId2 = CreateSprite(&gUnknown_085CE48C, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1); + StartSpriteAnim(&gSprites[spriteId1], 1); + StartSpriteAnim(&gSprites[spriteId2], 2); + + gSprites[spriteId1].data[1] = gBattleAnimArgs[0]; + gSprites[spriteId1].data[2] = gBattleAnimArgs[1]; + gSprites[spriteId2].data[1] = gBattleAnimArgs[0]; + gSprites[spriteId2].data[2] = gBattleAnimArgs[1]; + gSprites[spriteId1].data[7] = -1; + gSprites[spriteId2].data[7] = -1; + gSprites[spriteId1].invisible = 1; + gSprites[spriteId2].invisible = 1; + gSprites[spriteId1].callback = sub_815C050; + gSprites[spriteId2].callback = sub_815C050; + + sprite->data[6] = spriteId1; + sprite->data[7] = spriteId2; + sprite->callback = sub_815BF44; +} + +static void sub_815BF44(struct Sprite *sprite) +{ + int var0; + s8 var1; + + var0 = (u16)sprite->data[2] + (u16)sprite->data[3]; + var1 = var0 >> 8; + sprite->pos2.y -= var1; + sprite->data[3] = var0 & 0xFF; + if (sprite->data[4] == 0 && sprite->pos2.y < -8) + { + gSprites[sprite->data[6]].invisible = 0; + sprite->data[4]++; + } + + if (sprite->data[4] == 1 && sprite->pos2.y < -16) + { + gSprites[sprite->data[7]].invisible = 0; + sprite->data[4]++; + } + + if (--sprite->data[1] == -1) + { + sprite->invisible = 1; + sprite->callback = sub_815BFF4; + } +} + +static void sub_815BFF4(struct Sprite *sprite) +{ + if (gSprites[sprite->data[6]].callback == SpriteCallbackDummy + && gSprites[sprite->data[7]].callback == SpriteCallbackDummy) + { + DestroySprite(&gSprites[sprite->data[6]]); + DestroySprite(&gSprites[sprite->data[7]]); + DestroyAnimSprite(sprite); + } +} + +static void sub_815C050(struct Sprite *sprite) +{ + u16 d2; + register u16 d3 asm("r1"); + int var0; + s8 var1; + + if (!sprite->invisible) + { + d2 = sprite->data[2]; + d3 = sprite->data[3]; + var0 = d2 + d3; + var1 = var0 >> 8; + sprite->pos2.y -= var1; + sprite->data[3] = var0 & 0xFF; + if (--sprite->data[1] == -1) + { + sprite->invisible = 1; + sprite->callback = SpriteCallbackDummy; + } + } +} + +void sub_815C0A4(u8 taskId) +{ + struct UnknownAnimStruct2 unknownStruct; + + switch (gTasks[taskId].data[0]) + { + case 0: + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(3, 13)); + SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); + + sub_80A6B30(&unknownStruct); + sub_80A6D60(&unknownStruct, &gUnknown_08C2A6EC, 0); + if (IsContest()) + { + gBattle_BG1_X = -56; + gBattle_BG1_Y = 0; + } + else + { + u8 position = GetBattlerPosition(gBattleAnimTarget); + if (IsDoubleBattle() == TRUE) + { + if (position == B_POSITION_OPPONENT_LEFT) + gBattle_BG1_X = -155; + if (position == B_POSITION_OPPONENT_RIGHT) + gBattle_BG1_X = -115; + if (position == B_POSITION_PLAYER_LEFT) + gBattle_BG1_X = 14; + if (position == B_POSITION_PLAYER_RIGHT) + gBattle_BG1_X = -20; + } + else + { + if (position == B_POSITION_OPPONENT_LEFT) + gBattle_BG1_X = -135; + if (position == B_POSITION_PLAYER_LEFT) + gBattle_BG1_X = -10; + } + + gBattle_BG1_Y = 0; + } + + sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C2A634, unknownStruct.tilesOffset); + LoadCompressedPalette(&gUnknown_08C2A6D4, unknownStruct.unk8 << 4, 32); + gTasks[taskId].data[10] = gBattle_BG1_X; + gTasks[taskId].data[11] = gBattle_BG1_Y; + gTasks[taskId].data[0]++; + break; + case 1: + gTasks[taskId].data[3] = 0; + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) + gBattle_BG1_X = gTasks[taskId].data[10] + gUnknown_085CE4A4[gTasks[taskId].data[2]]; + else + gBattle_BG1_X = gTasks[taskId].data[10] - gUnknown_085CE4A4[gTasks[taskId].data[2]]; + + if (++gTasks[taskId].data[2] == 5) + gTasks[taskId].data[0] = 5; + else + gTasks[taskId].data[0]++; + break; + case 2: + if (--gTasks[taskId].data[1] <= 4) + gTasks[taskId].data[1] = 5; + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(3, gTasks[taskId].data[1])); + if (gTasks[taskId].data[1] == 5) + gTasks[taskId].data[0]++; + break; + case 3: + if (++gTasks[taskId].data[3] > gUnknown_085CE4A8[gTasks[taskId].data[2]]) + gTasks[taskId].data[0]++; + break; + case 4: + if (++gTasks[taskId].data[1] > 13) + gTasks[taskId].data[1] = 13; + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(3, gTasks[taskId].data[1])); + if (gTasks[taskId].data[1] == 13) + gTasks[taskId].data[0] = 1; + break; + case 5: + sub_80A6B30(&unknownStruct); + sub_80A6C68(unknownStruct.bgId); + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); + + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_815C3A8(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + { + PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(0), gUnknown_085CE4B0); + gTasks[taskId].data[0]++; + } + else + { + if (!RunAffineAnimFromTaskData(&gTasks[taskId])) + DestroyAnimVisualTask(taskId); + } +} + +void sub_815C400(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + InitAnimSpritePos(sprite, 0); + sprite->data[0]++; + } + else if (sprite->data[0]++ > 20) + { + sprite->data[1] += 160; + sprite->data[2] += 128; + + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos2.x = -(sprite->data[1] >> 8); + else + sprite->pos2.x = sprite->data[1] >> 8; + + sprite->pos2.y += sprite->data[2] >> 8; + if (sprite->pos2.y > 64) + DestroyAnimSprite(sprite); + } +} + +void sub_815C478(u8 taskId) +{ + u8 side; + struct Task *task = &gTasks[taskId]; + + if (!gBattleAnimArgs[1]) + { + DestroyAnimVisualTask(taskId); + return; + } + + if (gBattleAnimArgs[2] < 0) + gBattleAnimArgs[2] = 0; + if (gBattleAnimArgs[2] > 2) + gBattleAnimArgs[2] = 2; + + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 8 - (2 * gBattleAnimArgs[2]); + task->data[4] = 0x100 + (gBattleAnimArgs[2] * 128); + task->data[5] = gBattleAnimArgs[2] + 2; + task->data[6] = gBattleAnimArgs[1] - 1; + task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + + if (!gBattleAnimArgs[0]) + side = GetBattlerSide(gBattleAnimAttacker); + else + side = GetBattlerSide(gBattleAnimTarget); + + if (side == B_SIDE_OPPONENT) + { + task->data[4] *= -1; + task->data[5] *= -1; + } + + PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL); + task->func = sub_815C548; +} + +static void sub_815C548(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + gSprites[task->data[15]].pos2.x += task->data[5]; + task->data[2] -= task->data[4]; + SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]); + SetBattlerSpriteYOffsetFromRotation(task->data[15]); + if (++task->data[1] >= task->data[3]) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 1: + gSprites[task->data[15]].pos2.x -= task->data[5]; + task->data[2] += task->data[4]; + SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]); + SetBattlerSpriteYOffsetFromRotation(task->data[15]); + if (++task->data[1] >= task->data[3] * 2) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 2: + gSprites[task->data[15]].pos2.x += task->data[5]; + task->data[2] -= task->data[4]; + SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]); + SetBattlerSpriteYOffsetFromRotation(task->data[15]); + if (++task->data[1] >= task->data[3]) + { + if (task->data[6]) + { + task->data[6]--; + task->data[1] = 0; + task->data[0] = 0; + } + else + { + task->data[0]++; + } + } + break; + case 3: + ResetSpriteRotScale(task->data[15]); + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_815C6B0(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + sprite->pos1.x = 0; + sprite->pos1.y = gBattleAnimArgs[0]; + } + else + { + sprite->pos1.x = 240; + sprite->pos1.y = gBattleAnimArgs[0] - 30; + } + + sprite->data[2] = gBattleAnimArgs[2]; + StartSpriteAnim(sprite, gBattleAnimArgs[1]); + sprite->callback = sub_815C700; +} + +static void sub_815C700(struct Sprite *sprite) +{ + sprite->data[0] += 3; + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + sprite->pos1.x += 5; + sprite->pos1.y -= 1; + + if (sprite->pos1.x > 240) + DestroyAnimSprite(sprite); + + sprite->pos2.y = Sin(sprite->data[0] & 0xFF, 16); + } + else + { + sprite->pos1.x -= 5; + sprite->pos1.y += 1; + + if (sprite->pos1.x < 0) + DestroyAnimSprite(sprite); + + sprite->pos2.y = Cos(sprite->data[0] & 0xFF, 16); + } +} + +void sub_815C770(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[12] = 0x20; + task->data[13] = 0x40; + task->data[14] = 0x800; + task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + + PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL); + task->func = sub_815C7C4; +} + +static void sub_815C7C4(u8 taskId) +{ + int temp; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[2] += 0x200; + if (task->data[2] >= task->data[14]) + { + s16 diff = task->data[14] - task->data[2]; + s16 div = diff / (task->data[14] * 2); + s16 mod = diff % (task->data[14] * 2); + + if ((div & 1) == 0) + { + task->data[2] = task->data[14] - mod; + task->data[0] = 1; + } + else + { + task->data[2] = mod - task->data[14]; + } + } + break; + case 1: + task->data[2] -= 0x200; + if (task->data[2] <= -task->data[14]) + { + s16 diff = task->data[14] - task->data[2]; + s16 div = diff / (task->data[14] * 2); + s16 mod = diff % (task->data[14] * 2); + + if ((1 & div) == 0) + { + task->data[2] = mod - task->data[14]; + task->data[0] = 0; + } + else + { + task->data[2] = task->data[14] - mod; + } + } + break; + case 2: + ResetSpriteRotScale(task->data[15]); + DestroyAnimVisualTask(taskId); + return; + } + + SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]); + SetBattlerSpriteYOffsetFromRotation(task->data[15]); + gSprites[task->data[15]].pos2.x = -(((temp = task->data[2]) >= 0 ? task->data[2] : temp + 63) >> 6); + + if (++task->data[1] > 8) + { + if (task->data[12]) + { + task->data[12]--; + task->data[14] -= task->data[13]; + if (task->data[14] < 16) + task->data[14] = 16; + } + else + { + task->data[0] = 2; + } + } +} + +void sub_815C95C(struct Sprite *sprite) +{ + if (!sprite->data[0]) + { + if (!gBattleAnimArgs[2]) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + } + + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[1] = 0x80; + sprite->data[2] = 0x300; + sprite->data[3] = gBattleAnimArgs[1]; + sprite->data[0]++; + } + else + { + sprite->pos2.x = sprite->data[1] >> 8; + sprite->pos2.y += sprite->data[2] >> 8; + if (sprite->data[4] == 0 && sprite->pos2.y > -sprite->data[3]) + { + sprite->data[4] = 1; + sprite->data[2] = (-sprite->data[2] / 3) * 2; + } + + sprite->data[1] += 192; + sprite->data[2] += 128; + if (sprite->animEnded) + DestroyAnimSprite(sprite); + } +} + +void sub_815CA20(u8 taskId) +{ + u8 spriteId; + + if (gTasks[taskId].data[0] == 0) + { + if (gBattleAnimArgs[0] == 0) + gTasks[taskId].data[11] = gBattleAnimAttacker; + else + gTasks[taskId].data[11] = gBattleAnimTarget; + + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + gTasks[taskId].data[10] = spriteId; + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); + + switch (gBattleAnimArgs[1]) + { + case 0: + SetSpriteRotScale(spriteId, 0xE0, 0x140, 0); + SetBattlerSpriteYOffsetFromYScale(spriteId); + break; + case 1: + SetSpriteRotScale(spriteId, 0xD0, 0x130, 0xF00); + SetBattlerSpriteYOffsetFromYScale(spriteId); + if (IsContest() || GetBattlerSide(gTasks[taskId].data[11]) == B_SIDE_PLAYER) + gSprites[spriteId].pos2.y += 16; + break; + case 2: + SetSpriteRotScale(spriteId, 0xD0, 0x130, 0xF100); + SetBattlerSpriteYOffsetFromYScale(spriteId); + if (IsContest() || GetBattlerSide(gTasks[taskId].data[11]) == B_SIDE_PLAYER) + gSprites[spriteId].pos2.y += 16; + break; + } + + gSprites[spriteId].pos2.x = 2; + gTasks[taskId].data[0]++; + } + else + { + spriteId = gTasks[taskId].data[10]; + if (++gTasks[taskId].data[2] == 3) + { + gTasks[taskId].data[2] = 0; + gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; + } + + if (++gTasks[taskId].data[1] == 13) + { + ResetSpriteRotScale(spriteId); + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_815CB88(struct Sprite *sprite) +{ + u8 tileOffset; + int rand1; + int rand2; + + tileOffset = Random2() % 12; + sprite->oam.tileNum += tileOffset; + rand1 = Random2() & 0x1FF; + rand2 = Random2() & 0xFF; + + if (rand1 & 1) + sprite->data[0] = 0x5E0 + rand1; + else + sprite->data[0] = 0x5E0 - rand1; + + if (rand2 & 1) + sprite->data[1] = 0x480 + rand2; + else + sprite->data[1] = 0x480 - rand2; + + sprite->data[2] = gBattleAnimArgs[0]; + if (sprite->data[2] == 0) + sprite->pos1.x = -8; + else + sprite->pos1.x = 248; + + sprite->pos1.y = 104; + sprite->callback = sub_815CC34; +} + +static void sub_815CC34(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] -= 22; + sprite->data[1] -= 48; + if (sprite->data[0] < 0) + sprite->data[0] = 0; + + if (++sprite->data[3] == 31) + DestroyAnimSprite(sprite); +} + +void sub_815CC94(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H); + SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V); + + sprite->data[0] = gBattleAnimArgs[2]; + sub_80A6980(sprite, FALSE); + sprite->oam.objMode = ST_OAM_OBJ_WINDOW; + sprite->invisible = 1; + sprite->callback = sub_815CD0C; +} + +static void sub_815CD0C(struct Sprite *sprite) +{ + switch (sprite->data[1]) + { + case 0: + sprite->invisible = 0; + if (sprite->affineAnimEnded) + sprite->data[1]++; + break; + case 1: + if (--sprite->data[0] == 0) + { + ChangeSpriteAffineAnim(sprite, 1); + sprite->data[1]++; + } + break; + case 2: + if (sprite->affineAnimEnded) + { + sprite->invisible = 1; + sprite->data[1]++; + } + break; + case 3: + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON); + DestroyAnimSprite(sprite); + break; + } +} + +void sub_815CDB4(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->callback = sub_815CDFC; + sprite->callback(sprite); +} + +static void sub_815CDFC(struct Sprite *sprite) +{ + sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); + sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8); + sprite->data[1] = (sprite->data[1] + 9) & 0xFF; + + if ((u16)sprite->data[1] < 64 || sprite->data[1] > 195) + sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; + else + sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) + 1; + + if (!sprite->data[5]) + { + sprite->data[2] += 0x400; + sprite->data[3] += 0x100; + sprite->data[4]++; + if (sprite->data[4] == sprite->data[0]) + { + sprite->data[4] = 0; + sprite->data[5] = 1; + } + } + else if (sprite->data[5] == 1) + { + sprite->data[2] -= 0x400; + sprite->data[3] -= 0x100; + sprite->data[4]++; + if (sprite->data[4] == sprite->data[0]) + DestroyAnimSprite(sprite); + } +} + + + +extern void sub_815D160(u8); + +void sub_815CED8(u8 taskId) +{ + u8 isBackPic; + u32 personality; + u32 otId; + u16 species; + s16 xOffset; + u32 priority; + u8 spriteId; + s16 coord1, coord2; + + GetAnimBattlerSpriteId(ANIM_ATTACKER); + if (IsContest()) + { + isBackPic = 1; + personality = gContestResources->field_18->unk10; + otId = gContestResources->field_18->unkC; + species = gContestResources->field_18->unk2; + xOffset = 20; + priority = sub_80A8328(gBattleAnimAttacker); + } + else + { + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + isBackPic = 0; + personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_PERSONALITY); + otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_OT_ID); + if (gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies == SPECIES_NONE) + { + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES); + else + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES); + } + else + { + species = gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies; + } + + xOffset = 20; + priority = sub_80A8328(gBattleAnimAttacker); + } + else + { + isBackPic = 1; + personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_PERSONALITY); + otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_OT_ID); + if (gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies == SPECIES_NONE) + { + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES); + else + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES); + } + else + { + species = gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies; + } + + xOffset = -20; + priority = sub_80A8328(gBattleAnimAttacker); + } + } + + coord1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); + coord2 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + spriteId = sub_80A8394(species, isBackPic, 0, coord1 + xOffset, coord2, 5, personality, otId, gBattleAnimTarget, 1); + + gSprites[spriteId].oam.priority = priority; + gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; + FillPalette(RGB(31, 31, 31), (gSprites[spriteId].oam.paletteNum << 4) + 0x100, 32); + gSprites[spriteId].oam.priority = priority; + SetGpuReg(REG_OFFSET_BLDCNT, 0x3F40); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1])); + + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].func = sub_815D160; +} + +void sub_815D160(u8 taskId) +{ + if (gTasks[taskId].data[10]++ > 1) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[1]++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1])); + if (gTasks[taskId].data[1] == 10) + { + gTasks[taskId].data[10] = 256; + gTasks[taskId].data[11] = 256; + gTasks[taskId].func = sub_815D1BC; + } + } +} + +static void sub_815D1BC(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[0]; + gTasks[taskId].data[10] -= 16; + gTasks[taskId].data[11] += 128; + gSprites[spriteId].oam.affineMode |= ST_OAM_AFFINE_DOUBLE_MASK; + TrySetSpriteRotScale(&gSprites[spriteId], TRUE, gTasks[taskId].data[10], gTasks[taskId].data[11], 0); + if (++gTasks[taskId].data[12] == 9) + { + sub_80A749C(&gSprites[spriteId]); + sub_80A8610(&gSprites[spriteId]); + gTasks[taskId].func = sub_80A6814; + } +} + +void sub_815D240(u8 taskId) +{ + u8 battler; + u16 bgX, bgY; + s16 y, i; + struct ScanlineEffectParams scanlineParams; + struct Task *task = &gTasks[taskId]; + + if (gBattleAnimArgs[0] == 0) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 16; + task->data[4] = 0; + task->data[5] = battler; + task->data[6] = 32; + task->data[7] = 0; + task->data[8] = 24; + + if (GetBattlerSide(battler) == B_SIDE_OPPONENT) + task->data[8] *= -1; + + task->data[13] = GetBattlerYCoordWithElevation(battler) - 34; + if (task->data[13] < 0) + task->data[13] = 0; + + task->data[14] = task->data[13] + 66; + task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + if (sub_80A8364(battler) == 1) + { + scanlineParams.dmaDest = ®_BG1HOFS; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1); + bgX = gBattle_BG1_X; + bgY = gBattle_BG1_Y; + } + else + { + scanlineParams.dmaDest = ®_BG2HOFS; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2); + bgX = gBattle_BG2_X; + bgY = gBattle_BG2_Y; + } + + for (y = 0, i = 0; y < 160; y++, i += 2) + { + gScanlineEffectRegBuffers[0][i] = bgX; + gScanlineEffectRegBuffers[1][i] = bgX; + gScanlineEffectRegBuffers[0][i + 1] = bgY; + gScanlineEffectRegBuffers[1][i + 1] = bgY; + } + + scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_32BIT; + scanlineParams.initState = 1; + scanlineParams.unused9 = 0; + ScanlineEffect_SetParams(scanlineParams); + task->func = sub_815D398; +} + +static void sub_815D398(u8 taskId) +{ + struct Task *task; + s16 var1; + s16 var2; + s16 bgX, bgY; + s16 offset; + s16 var0; + s16 i; + s16 sineIndex; + s16 var3; + + task = &gTasks[taskId]; + if (sub_80A8364(task->data[5]) == 1) + { + bgX = gBattle_BG1_X; + bgY = gBattle_BG1_Y; + } + else + { + bgX = gBattle_BG2_X; + bgY = gBattle_BG2_Y; + } + + switch (task->data[0]) + { + case 0: + offset = task->data[14] * 2; + var1 = 0; + var2 = 0; + i = 0; + task->data[1] = (task->data[1] + 2) & 0xFF; + sineIndex = task->data[1]; + task->data[9] = 0x7E0 / task->data[6]; + task->data[10] = -((task->data[7] * 2) / task->data[9]); + task->data[11] = task->data[7]; + var3 = task->data[11] >> 5; + task->data[12] = var3; + var0 = task->data[14]; + while (var0 > task->data[13]) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][offset + 1] = (i - var2) + bgY; + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][offset] = bgX + var3 + (gSineTable[sineIndex] >> 5); + sineIndex = (sineIndex + 10) & 0xFF; + task->data[11] += task->data[10]; + var3 = task->data[11] >> 5; + task->data[12] = var3; + + i++; + offset -= 2; + var1 += task->data[6]; + var2 = var1 >> 5; + var0--; + } + + var0 *= 2; + while (var0 >= 0) + { + gScanlineEffectRegBuffers[0][var0] = bgX + 240; + gScanlineEffectRegBuffers[1][var0] = bgX + 240; + var0 -= 2; + } + + if (++task->data[6] > 63) + { + task->data[6] = 64; + task->data[2]++; + if (task->data[2] & 1) + task->data[3]--; + else + task->data[4]++; + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4])); + if (task->data[3] == 0 && task->data[4] == 16) + { + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + } + } + else + { + task->data[7] += task->data[8]; + } + break; + case 1: + if (++task->data[2] > 12) + { + gScanlineEffect.state = 3; + task->data[2] = 0; + task->data[0]++; + } + break; + case 2: + task->data[2]++; + if (task->data[2] & 1) + task->data[3]++; + else + task->data[4]--; + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4])); + if (task->data[3] == 16 && task->data[4] == 0) + { + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + } + break; + case 3: + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_815D64C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + task->data[0] = 0; + task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + PrepareAffineAnimInTaskData(&gTasks[taskId], task->data[15], gUnknown_085CE5F0); + task->func = sub_815D694; +} + +static void sub_815D694(u8 taskId) +{ + u16 var0; + + struct Task *task = &gTasks[taskId]; + var0 = task->data[0]; + task->data[0]++; + var0 -= 20; + if (var0 < 23) + { + if (++task->data[1] > 1) + { + task->data[1] = 0; + task->data[2]++; + if (task->data[2] & 1) + gSprites[task->data[15]].pos2.x = 1; + else + gSprites[task->data[15]].pos2.x = -1; + } + } + else + { + gSprites[task->data[15]].pos2.x = 0; + } + + if (!RunAffineAnimFromTaskData(&gTasks[taskId])) + DestroyAnimVisualTask(taskId); +} + +void sub_815D72C(struct Sprite *sprite, s16 b, s16 c, s16 d, s16 e, u16 f) +{ + sprite->pos1.x = b; + sprite->pos1.y = c; + sprite->data[4] = b << 4; + sprite->data[5] = c << 4; + sprite->data[6] = ((d - b) << 4) / f; + sprite->data[7] = ((e - c) << 4) / f; +} + +void sub_815D794(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; +} + +void sub_815D7B4(struct Sprite *sprite) +{ + s16 x = sprite->pos1.x; + s16 y = sprite->pos1.y; + + SetSpriteCoordsToAnimAttackerCoords(sprite); + StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]); + sub_815D72C(sprite, sprite->pos1.x, sprite->pos1.y, x, y, 64); + sprite->data[0] = 0; + sprite->callback = sub_815D804; +} + +static void sub_815D804(struct Sprite *sprite) +{ + int index; + + sprite->data[0]++; + index = (sprite->data[0] * 8) & 0xFF; + sub_815D794(sprite); + sprite->pos2.y = Sin(index, 8); + if (sprite->data[0] > 58) + { + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + sprite->data[2]++; + sprite->invisible = sprite->data[2] & 1; + if (sprite->data[2] > 3) + DestroySpriteAndMatrix(sprite); + } + } +} + +void sub_815D870(struct Sprite *sprite) +{ + sprite->data[0] = gBattleAnimArgs[3]; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]); + if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER) + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; + sprite->callback = sub_810E2C8; +} + +static void sub_815D8D8(u8 taskId) +{ + u16 var0 = 0; + u16 var1 = 0; + + gTasks[taskId].data[0]--; + if ((gTasks[taskId].data[6] & 0x8000) && (--gTasks[taskId].data[1] == -1)) + { + if (gTasks[taskId].data[9] == 0) + { + gTasks[taskId].data[9] = gTasks[taskId].data[4]; + gTasks[taskId].data[4] = -gTasks[taskId].data[4]; + } + else + { + gTasks[taskId].data[9] = 0; + } + + if (gTasks[taskId].data[10] == 0) + { + gTasks[taskId].data[10] = gTasks[taskId].data[5]; + gTasks[taskId].data[5] = -gTasks[taskId].data[5]; + } + else + { + gTasks[taskId].data[10] = 0; + } + + gTasks[taskId].data[1] = gTasks[taskId].data[13]; + } + + var0 = gTasks[taskId].data[7]; + var1 = gTasks[taskId].data[8]; + if (gTasks[taskId].data[2] & 0x8000) + gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] - (var0 >> 8); + else + gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] + (var0 >> 8); + + if (gTasks[taskId].data[3] & 0x8000) + gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] - (var1 >> 8); + else + gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] + (var1 >> 8); + + if (gTasks[taskId].data[0] < 1) + { + DestroyTask(taskId); + gAnimVisualTaskCount--; + } +} + +static void sub_815DA20(u8 taskId) +{ + u16 var0 = 0; + u16 var1 = 0; + + gTasks[taskId].data[0]--; + if ((gTasks[taskId].data[6] & 0x8000) && (--gTasks[taskId].data[1] == -1)) + { + if (gTasks[taskId].data[9] == 0) + { + gTasks[taskId].data[9] = gTasks[taskId].data[4]; + gTasks[taskId].data[4] = -gTasks[taskId].data[4]; + } + else + { + gTasks[taskId].data[9] = var0; + } + + if (gTasks[taskId].data[10] == 0) + { + gTasks[taskId].data[10] = gTasks[taskId].data[5]; + gTasks[taskId].data[5] = -gTasks[taskId].data[5]; + } + else + { + gTasks[taskId].data[10] = 0; + } + + gTasks[taskId].data[1] = gTasks[taskId].data[13]; + } + + var0 = (gTasks[taskId].data[2] & 0x7FFF) + gTasks[taskId].data[7]; + var1 = (gTasks[taskId].data[3] & 0x7FFF) + gTasks[taskId].data[8]; + if (gTasks[taskId].data[2] & 0x8000) + gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] - (var0 >> 8); + else + gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] + (var0 >> 8); + + if (gTasks[taskId].data[3] & 0x8000) + gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] - (var1 >> 8); + else + gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] + (var1 >> 8); + + gTasks[taskId].data[7] = var0; + gTasks[taskId].data[8] = var1; + if (gTasks[taskId].data[0] < 1) + { + gTasks[taskId].data[0] = 30; + gTasks[taskId].data[13] = 0; + gTasks[taskId].func = sub_815D8D8; + } +} + +void sub_815DB90(u8 taskId) +{ + gTasks[taskId].data[15] = gBattlerSpriteIds[gBattleAnimAttacker]; + gTasks[taskId].data[14] = gBattleAnimArgs[0]; + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[13] = gBattleAnimArgs[6]; + if (gBattleAnimArgs[3]) + gTasks[taskId].data[6] = gTasks[taskId].data[6] | -0x8000; + + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + gTasks[taskId].data[2] = gBattleAnimArgs[1]; + gTasks[taskId].data[3] = gBattleAnimArgs[2]; + } + else + { + if (gBattleAnimArgs[1] & 0x8000) + gTasks[taskId].data[2] = gBattleAnimArgs[1] & 0x7FFF; + else + gTasks[taskId].data[2] = gBattleAnimArgs[1] | -0x8000; + + if (gBattleAnimArgs[2] & 0x8000) + gTasks[taskId].data[3] = gBattleAnimArgs[2] & 0x7FFF; + else + gTasks[taskId].data[3] = gBattleAnimArgs[2] | -0x8000; + } + + gTasks[taskId].data[8] = 0; + gTasks[taskId].data[7] = 0; + gTasks[taskId].data[4] = gBattleAnimArgs[4]; + gTasks[taskId].data[5] = gBattleAnimArgs[5]; + gTasks[taskId].func = sub_815DA20; +} + +void sub_815DCA4(u8 taskId) +{ + u8 battler; + struct Task *task = &gTasks[taskId]; + + if (!gBattleAnimArgs[1]) + DestroyAnimVisualTask(taskId); + + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = gBattleAnimArgs[1]; + if (gBattleAnimArgs[0] == 0) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + + task->data[4] = GetBattlerSpriteCoord(battler, 0); + task->data[5] = GetBattlerSpriteCoord(battler, 1); + task->data[6] = GetBattlerSpriteSubpriority(battler); + task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + PrepareAffineAnimInTaskData(task, task->data[15], gUnknown_085CE74C); + task->func = sub_815DD48; +} + +static void sub_815DD48(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] == 6) + sub_815DDE0(taskId, TRUE); + + if (task->data[1] == 18) + sub_815DDE0(taskId, FALSE); + + if (!RunAffineAnimFromTaskData(task)) + { + if (--task->data[3] == 0) + { + task->data[0]++; + } + else + { + task->data[1] = 0; + PrepareAffineAnimInTaskData(task, task->data[15], gUnknown_085CE74C); + } + } + break; + case 1: + if (task->data[2] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_815DDE0(u8 taskId, bool8 arg1) +{ + u8 i; + s8 xOffset, yOffset; + struct Task *task; + s16 xCoords[4]; + s16 yCoords[2]; + + task = &gTasks[taskId]; + if (!arg1) + { + xOffset = 18; + yOffset = -20; + } + else + { + xOffset = 30; + yOffset = 20; + } + + xCoords[0] = task->data[4] - xOffset; + xCoords[1] = task->data[4] - xOffset - 4; + xCoords[2] = task->data[4] + xOffset; + xCoords[3] = task->data[4] + xOffset + 4; + yCoords[0] = task->data[5] + yOffset; + yCoords[1] = task->data[5] + yOffset + 6; + + for (i = 0; i < 4; i++) + { + u8 spriteId = CreateSprite(&gUnknown_085CE76C, xCoords[i], yCoords[i & 1], task->data[6] - 5); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = i < 2 ? -2 : 2; + gSprites[spriteId].data[2] = -1; + gSprites[spriteId].data[3] = taskId; + gSprites[spriteId].data[4] = 2; + task->data[2]++; + } + } +} + +void sub_815DEBC(struct Sprite *sprite) +{ + sprite->pos1.x += sprite->data[1]; + sprite->pos1.y += sprite->data[2]; + if (++sprite->data[0] > 6) + { + gTasks[sprite->data[3]].data[sprite->data[4]]--; + DestroySprite(sprite); + } +} + +void sub_815DF0C(u8 taskId) +{ + u8 spriteId; + + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + gTasks[taskId].data[2] = 0x100 + gSprites[spriteId].oam.paletteNum * 16; + gTasks[taskId].func = sub_815DF64; +} + +static void sub_815DF64(u8 taskId) +{ + if (gTasks[taskId].data[1]) + { + BlendPalette(gTasks[taskId].data[2], 16, 8, gUnknown_085CE784[gTasks[taskId].data[0]]); + if (++gTasks[taskId].data[0] > 23) + gTasks[taskId].data[0] = 0; + + gTasks[taskId].data[1]--; + } + else + { + BlendPalette(gTasks[taskId].data[2], 16, 0, RGB(0, 0, 0)); + DestroyAnimVisualTask(taskId); + } +} + +void sub_815DFCC(u8 taskId) +{ + sub_8117854( + taskId, + 0, + 0x1A0, + gBattleAnimAttacker, + gBattleAnimArgs[0], + 10, + 2, + 30, + gUnknown_08C2DC68, + gUnknown_08C2DDC4, + gUnknown_08C2DDA4); +} + +void sub_815E01C(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1]; + if (gBattleAnimArgs[2] == 0) + { + sprite->data[0] = 640; + sprite->data[1] = -640; + } + else if (gBattleAnimArgs[2] == 1) + { + sprite->vFlip = 1; + sprite->data[0] = 640; + sprite->data[1] = 640; + } + else + { + StartSpriteAnim(sprite, 1); + sprite->data[0] = 640; + } + + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->data[0] = -sprite->data[0]; + sprite->hFlip = 1; + } + + sprite->callback = sub_815E0DC; +} + +static void sub_815E0DC(struct Sprite *sprite) +{ + sprite->data[6] += sprite->data[0]; + sprite->data[7] += sprite->data[1]; + sprite->pos2.x = sprite->data[6] >> 8; + sprite->pos2.y = sprite->data[7] >> 8; + if (++sprite->data[5] == 14) + DestroyAnimSprite(sprite); +} + +void sub_815E114(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (IsContest()) + { + task->data[5] = 8; + task->data[6] = 3; + task->data[7] = 1; + } + else + { + task->data[5] = 12; + task->data[6] = 3; + task->data[7] = 0; + } + + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + sub_80A861C(gBattleAnimAttacker, 0) / 4; + else + task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) - sub_80A861C(gBattleAnimAttacker, 0) / 4; + + task->data[12] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) - sub_80A861C(gBattleAnimAttacker, 0) / 4; + task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + task->func = sub_815E20C; +} + +static void sub_815E20C(u8 taskId) +{ + u8 i; + s16 x, y; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 3) + { + task->data[1] = 0; + sub_815E34C( + task->data[11], + task->data[12], + task->data[13], + task->data[14], + task->data[5], + task->data[2], + &x, + &y); + + for (i = 0; i < 2; i++) + { + u8 spriteId = CreateSprite(&gUnknown_085CE7EC, x, y, 35); + if (spriteId != MAX_SPRITES) + { + if (task->data[7] == 0) + { + if (i == 0) + gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = -task->data[6]; + else + gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = task->data[6]; + } + else + { + if (i == 0) + { + gSprites[spriteId].pos2.x = -task->data[6]; + gSprites[spriteId].pos2.y = task->data[6]; + } + else + { + gSprites[spriteId].pos2.x = task->data[6]; + gSprites[spriteId].pos2.y = -task->data[6]; + } + } + + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = taskId; + gSprites[spriteId].data[2] = 10; + task->data[10]++; + } + } + + if (task->data[2] == task->data[5]) + task->data[0]++; + + task->data[2]++; + } + break; + case 1: + if (task->data[10] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_815E34C(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5, s16 *x, s16 *y) +{ + int x2; + int y2; + + if (arg5 == 0) + { + *x = arg0; + *y = arg1; + return; + } + + if (arg5 >= arg4) + { + *x = arg2; + *y = arg3; + return; + } + + arg4--; + x2 = (arg0 << 8) + arg5 * (((arg2 - arg0) << 8) / arg4); + y2 = (arg1 << 8) + arg5 * (((arg3 - arg1) << 8) / arg4); + *x = x2 >> 8; + *y = y2 >> 8; +} + +void sub_815E404(struct Sprite *sprite) +{ + if (++sprite->data[0] > 36) + { + gTasks[sprite->data[1]].data[sprite->data[2]]--; + DestroySprite(sprite); + } +} + +void sub_815E444(struct Sprite *sprite) +{ + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[2]; + sprite->data[4] = gBattleAnimArgs[3]; + sprite->data[0] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = sub_80A70C0; +} + +void sub_815E47C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + task->data[12] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + sub_80A861C(gBattleAnimTarget, 0) / 4; + task->data[15] = CreateSprite(&gUnknown_085CE84C, task->data[11], task->data[12], GetBattlerSpriteSubpriority(gBattleAnimTarget) - 5); + if (task->data[15] != MAX_SPRITES) + { + gSprites[task->data[15]].data[0] = 16; + gSprites[task->data[15]].data[2] = task->data[13]; + gSprites[task->data[15]].data[4] = task->data[14]; + gSprites[task->data[15]].data[5] = -32; + InitAnimArcTranslation(&gSprites[task->data[15]]); + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + StartSpriteAffineAnim(&gSprites[task->data[15]], 1); + + task->func = sub_815E5CC; + } + else + { + DestroyAnimVisualTask(taskId); + } +} + +static void sub_815E5CC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 1) + { + task->data[1] = 0; + TranslateAnimArc(&gSprites[task->data[15]]); + if (++task->data[2] > 7) + task->data[0]++; + } + break; + case 1: + if (TranslateAnimArc(&gSprites[task->data[15]])) + { + task->data[1] = 0; + task->data[2] = 0; + task->data[0]++; + } + break; + case 2: + if (++task->data[1] > 1) + { + task->data[1] = 0; + task->data[2]++; + gSprites[task->data[15]].invisible = task->data[2] & 1; + if (task->data[2] == 16) + { + FreeOamMatrix(gSprites[task->data[15]].oam.matrixNum); + DestroySprite(&gSprites[task->data[15]]); + task->data[0]++; + } + } + break; + case 3: + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_815E6D8(struct Sprite *sprite) +{ + u8 battler; + + if (gBattleAnimArgs[0] == 0) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + + sprite->oam.tileNum += 16; + sprite->data[6] = gBattleAnimArgs[2]; + sprite->data[7] = gBattleAnimArgs[1] == 0 ? -1 : 1; + sprite->pos1.y = GetBattlerSpriteCoord(battler, 3); + if (gBattleAnimArgs[1] == 0) + { + sprite->oam.matrixNum |= 0x8; + sprite->pos1.x = sub_80A861C(battler, 4) - 8; + } + else + { + sprite->pos1.x = sub_80A861C(battler, 5) + 8; + } + + sprite->callback = sub_815E784; +} + +static void sub_815E784(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + sprite->pos2.x += sprite->data[7]; + if (++sprite->data[2] == 12) + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[1] == 8) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 2: + sprite->pos2.x -= sprite->data[7] * 4; + if (++sprite->data[1] == 6) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 3: + sprite->pos2.x += sprite->data[7] * 3; + if (++sprite->data[1] == 8) + { + if (--sprite->data[6]) + { + sprite->data[1] = 0; + sprite->data[0]--; + } + else + { + DestroyAnimSprite(sprite); + } + } + break; + } +} + +void sub_815E840(u8 taskId) +{ + if (gBattleAnimArgs[0] == 0) + { + DestroyAnimVisualTask(taskId); + } + else + { + gTasks[taskId].data[0] = gBattleAnimArgs[1]; + gTasks[taskId].data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + PrepareAffineAnimInTaskData(&gTasks[taskId], gTasks[taskId].data[15], gUnknown_085CE87C); + gTasks[taskId].func = sub_815E898; + } +} + +static void sub_815E898(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (++task->data[1] > 1) + { + task->data[1] = 0; + if (!(task->data[2] & 1)) + gSprites[task->data[15]].pos2.x = 2; + else + gSprites[task->data[15]].pos2.x = -2; + } + + if (!RunAffineAnimFromTaskData(task)) + { + gSprites[task->data[15]].pos2.x = 0; + if (--task->data[0]) + { + PrepareAffineAnimInTaskData(&gTasks[taskId], gTasks[taskId].data[15], gUnknown_085CE87C); + task->data[1] = 0; + task->data[2] = 0; + } + else + { + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_815E954(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = sub_80A861C(gBattleAnimAttacker, 2); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->pos1.y = sub_80A861C(gBattleAnimTarget, 2); + } + + if (sprite->pos1.y < 8) + sprite->pos1.y = 8; + + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = 0; + sprite->data[3] = gBattleAnimArgs[2]; + sprite->callback = sub_815E9BC; +} + +static void sub_815E9BC(struct Sprite *sprite) +{ + if (++sprite->data[0] >= sprite->data[1]) + { + sprite->data[0] = 0; + sprite->data[2] = (sprite->data[2] + 1) & 1; + sprite->invisible = sprite->data[2]; + if (sprite->data[2] && --sprite->data[3] == 0) + DestroyAnimSprite(sprite); + } +} + +void sub_815EA14(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->oam.matrixNum |= 0x8; + sprite->pos1.x = 100; + sprite->data[7] = 1; + } + else + { + sprite->pos1.x = 140; + sprite->data[7] = -1; + } + + sprite->pos1.y = 56; + sprite->callback = sub_815EA60; +} + +static void sub_815EA60(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos1.y -= sprite->data[7] * 2; + if (sprite->data[1] & 1) + sprite->pos1.x -= sprite->data[7] * 2; + + if (++sprite->data[1] == 9) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[1] == 4) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 2: + sprite->data[1]++; + sprite->pos1.y += sprite->data[7] * 3; + sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3); + if (sprite->data[1] == 12) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 3: + if (++sprite->data[1] == 2) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 4: + sprite->data[1]++; + sprite->pos1.y -= sprite->data[7] * 3; + sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3); + if (sprite->data[1] == 12) + sprite->data[0]++; + break; + case 5: + sprite->data[1]++; + sprite->pos1.y += sprite->data[7] * 3; + sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3); + if (sprite->data[1] == 15) + sprite->oam.tileNum += 16; + + if (sprite->data[1] == 18) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 6: + sprite->pos1.x += sprite->data[7] * 6; + if (++sprite->data[1] == 9) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 7: + sprite->pos1.x += sprite->data[7] * 2; + if (++sprite->data[1] == 1) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 8: + sprite->pos1.x -= sprite->data[7] * 3; + if (++sprite->data[1] == 5) + DestroyAnimSprite(sprite); + break; + } +} + +void sub_815EC48(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER); + if (!IsContest()) + { + if (IsDoubleBattle() == TRUE) + { + int x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); + int y = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimAttacker), 0); + if (x > y) + task->data[14] = 1; + else + task->data[14] = -1; + } + else + { + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + task->data[14] = -1; + else + task->data[14] = 1; + } + } + else + { + task->data[14] = 1; + } + + task->func = sub_815ECE4; +} + +static void sub_815ECE4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] == 13) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 1: + gSprites[task->data[15]].pos2.x -= task->data[14] * 3; + if (++task->data[1] == 6) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 2: + gSprites[task->data[15]].pos2.x += task->data[14] * 3; + if (++task->data[1] == 6) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 3: + if (++task->data[1] == 2) + { + task->data[1] = 0; + if (task->data[2] == 0) + { + task->data[2]++; + task->data[0] = 1; + } + else + { + task->data[0]++; + } + } + break; + case 4: + gSprites[task->data[15]].pos2.x += task->data[14]; + if (++task->data[1] == 3) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 5: + if (++task->data[1] == 6) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 6: + gSprites[task->data[15]].pos2.x -= task->data[14] * 4; + if (++task->data[1] == 5) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 7: + gSprites[task->data[15]].pos2.x += task->data[14] * 4; + if (++task->data[1] == 5) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 8: + gSprites[task->data[15]].pos2.x = 0; + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_815EE84(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + InitAnimSpritePos(sprite, TRUE); + sprite->data[7] = gBattleAnimAttacker; + } + else + { + sprite->data[7] = gBattleAnimTarget; + } + + if (GetBattlerSide(sprite->data[7]) == B_SIDE_OPPONENT) + sprite->oam.matrixNum = 8; + + sprite->oam.priority = sub_80A8328(sprite->data[7]); + sprite->oam.objMode = ST_OAM_OBJ_BLEND; + sprite->callback = sub_815EF08; +} + +static void sub_815EF08(struct Sprite *sprite) +{ + u16 x, y; + + switch (sprite->data[5]) + { + case 0: + switch (sprite->data[6]) + { + default: + sprite->data[6] = 0; + case 0: + case 4: + x = sub_80A861C(sprite->data[7], 5) - 4; + y = sub_80A861C(sprite->data[7], 3) - 4; + break; + case 1: + x = sub_80A861C(sprite->data[7], 5) - 4; + y = sub_80A861C(sprite->data[7], 2) + 4; + break; + case 2: + x = sub_80A861C(sprite->data[7], 4) + 4; + y = sub_80A861C(sprite->data[7], 3) - 4; + break; + case 3: + x = sub_80A861C(sprite->data[7], 4) + 4; + y = sub_80A861C(sprite->data[7], 2) - 4; + break; + case 5: + x = GetBattlerSpriteCoord(sprite->data[7], 2); + y = GetBattlerSpriteCoord(sprite->data[7], 3); + break; + } + + if (sprite->data[6] == 4) + sprite->data[0] = 24; + else if (sprite->data[6] == 5) + sprite->data[0] = 6; + else + sprite->data[0] = 12; + + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = x; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = y; + InitAnimLinearTranslation(sprite); + sprite->data[5]++; + break; + case 1: + if (TranslateAnimLinear(sprite)) + { + switch (sprite->data[6]) + { + default: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 0; + sprite->data[5]++; + sprite->data[6]++; + break; + case 4: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[5] = 0; + sprite->data[6]++; + break; + case 5: + sprite->data[0] = 0; + sprite->data[1] = 16; + sprite->data[2] = 0; + sprite->data[5] = 3; + break; + } + } + break; + case 2: + if (++sprite->data[0] == 4) + sprite->data[5] = 0; + break; + case 3: + if (!(sprite->data[0] & 1)) + sprite->data[1]--; + else + sprite->data[2]++; + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], sprite->data[2])); + if (++sprite->data[0] == 32) + { + sprite->invisible = 1; + sprite->data[5]++; + } + break; + case 4: + DestroyAnimSprite(sprite); + break; + } +} + +static void sub_815F10C(struct Sprite *sprite) +{ + sprite->pos2.x = ((sprite->data[2] - sprite->data[0]) * sprite->data[5]) / sprite->data[4]; + sprite->pos2.y = ((sprite->data[3] - sprite->data[1]) * sprite->data[5]) / sprite->data[4]; + if (!(sprite->data[5] & 1)) + { + CreateSprite( + &gUnknown_085CE3A0, + sprite->pos1.x + sprite->pos2.x, + sprite->pos1.y + sprite->pos2.y, 5); + } + + if (sprite->data[5] == sprite->data[4]) + DestroyAnimSprite(sprite); + + sprite->data[5]++; +} + +void sub_815F18C(struct Sprite *sprite) +{ + GetBattlerSpriteCoord(gBattleAnimTarget, 2); // unused local variable + GetBattlerSpriteCoord(gBattleAnimTarget, 3); // unused local variable + + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER || IsContest()) + { + sprite->data[0] = sprite->pos1.x - gBattleAnimArgs[0]; + sprite->data[2] = sprite->pos1.x - gBattleAnimArgs[2]; + } + else + { + sprite->data[0] = sprite->pos1.x + gBattleAnimArgs[0]; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; + } + + sprite->data[1] = sprite->pos1.y + gBattleAnimArgs[1]; + sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[3]; + sprite->data[4] = gBattleAnimArgs[4]; + sprite->pos1.x = sprite->data[0]; + sprite->pos1.y = sprite->data[1]; + sprite->callback = sub_815F10C; +} + +void AnimTask_MonToSubstitute(u8 taskId) +{ + int i; + u8 spriteId = GetAnimBattlerSpriteId(0); + + if (gTasks[taskId].data[0] == 0) + { + PrepareBattlerSpriteForRotScale(spriteId, FALSE); + gTasks[taskId].data[1] = 0x100; + gTasks[taskId].data[2] = 0x100; + gTasks[taskId].data[0]++; + } + else if (gTasks[taskId].data[0] == 1) + { + gTasks[taskId].data[1] += 0x60; + gTasks[taskId].data[2] -= 0xD; + SetSpriteRotScale(spriteId, gTasks[taskId].data[1], gTasks[taskId].data[2], 0); + if (++gTasks[taskId].data[3] == 9) + { + gTasks[taskId].data[3] = 0; + ResetSpriteRotScale(spriteId); + gSprites[spriteId].invisible = 1; + gTasks[taskId].data[0]++; + } + } + else + { + LoadBattleMonGfxAndAnimate(gBattleAnimAttacker, 0, spriteId); + if (IsContest()) + { + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0; + StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0); + } + + for (i = 0; i < 16; i++) + gTasks[taskId].data[i] = 0; + + gTasks[taskId].func = sub_815F330; + } +} + +static void sub_815F330(u8 taskId) +{ + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + + switch (gTasks[taskId].data[0]) + { + case 0: + gSprites[spriteId].pos2.y = -200; + gSprites[spriteId].pos2.x = 200; + gSprites[spriteId].invisible = 0; + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[0]++; + break; + case 1: + gTasks[taskId].data[10] += 112; + gSprites[spriteId].pos2.y += gTasks[taskId].data[10] >> 8; + if (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y >= -32) + gSprites[spriteId].pos2.x = 0; + + if (gSprites[spriteId].pos2.y > 0) + gSprites[spriteId].pos2.y = 0; + + if (gSprites[spriteId].pos2.y == 0) + { + PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64)); + gTasks[taskId].data[10] -= 0x800; + gTasks[taskId].data[0]++; + } + break; + case 2: + gTasks[taskId].data[10] -= 112; + if (gTasks[taskId].data[10] < 0) + gTasks[taskId].data[10] = 0; + + gSprites[spriteId].pos2.y -= gTasks[taskId].data[10] >> 8; + if (gTasks[taskId].data[10] == 0) + gTasks[taskId].data[0]++; + break; + case 3: + gTasks[taskId].data[10] += 112; + gSprites[spriteId].pos2.y += gTasks[taskId].data[10] >> 8; + if (gSprites[spriteId].pos2.y > 0) + gSprites[spriteId].pos2.y = 0; + + if (gSprites[spriteId].pos2.y == 0) + { + PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64)); + DestroyAnimVisualTask(taskId); + } + break; + } +} + +void sub_815F48C(struct Sprite *sprite) +{ + s16 y2; + + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + { + sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2; + y2 = -144; + } + else + { + sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + 2; + y2 = -96; + } + + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->pos2.y = y2; + sprite->callback = sub_815F4F0; +} + +static void sub_815F4F0(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos2.y += 10; + if (sprite->pos2.y >= 0) + { + PlaySE12WithPanning(SE_W166, BattleAnimAdjustPanning(63)); + sprite->pos2.y = 0; + sprite->data[0]++; + } + break; + case 1: + sprite->data[1] += 4; + sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 3); + if (sprite->data[1] > 127) + { + PlaySE12WithPanning(SE_W166, BattleAnimAdjustPanning(63)); + sprite->data[1] = 0; + sprite->pos2.y = 0; + sprite->data[0]++; + } + break; + case 2: + sprite->data[1] += 6; + sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 4); + if (sprite->data[1] > 127) + { + sprite->data[1] = 0; + sprite->pos2.y = 0; + sprite->data[0]++; + } + break; + case 3: + if (++sprite->data[1] > 8) + { + PlaySE12WithPanning(SE_W043, BattleAnimAdjustPanning(63)); + sprite->data[1] = 0; + sprite->data[0]++; + } + break; + case 4: + if (++sprite->data[1] > 8) + { + sprite->data[1] = 0; + sprite->data[2]++; + sprite->invisible = sprite->data[2] & 1; + if (sprite->data[2] == 7) + DestroyAnimSprite(sprite); + } + break; + } +} + +void sub_815F620(u8 taskId) +{ + s16 spriteId1, spriteId2; + + if (IsContest()) + { + DestroyAnimVisualTask(taskId); + return; + } + + spriteId1 = CloneBattlerSpriteWithBlend(ANIM_TARGET); + if (spriteId1 < 0) + { + DestroyAnimVisualTask(taskId); + return; + } + + spriteId2 = CloneBattlerSpriteWithBlend(ANIM_TARGET); + if (spriteId2 < 0) + { + obj_delete_but_dont_free_vram(&gSprites[spriteId1]); + DestroyAnimVisualTask(taskId); + return; + } + + gSprites[spriteId2].pos2.x += 24; + gSprites[spriteId1].pos2.x -= 24; + gSprites[spriteId2].data[0] = 0; + gSprites[spriteId1].data[0] = 0; + gSprites[spriteId2].data[1] = 0; + gSprites[spriteId1].data[1] = 0; + gSprites[spriteId2].data[2] = 0; + gSprites[spriteId1].data[2] = 0; + gSprites[spriteId2].data[3] = 16; + gSprites[spriteId1].data[3] = -16; + gSprites[spriteId2].data[4] = 0; + gSprites[spriteId1].data[4] = 128; + gSprites[spriteId2].data[5] = 24; + gSprites[spriteId1].data[5] = 24; + gSprites[spriteId2].data[6] = taskId; + gSprites[spriteId1].data[6] = taskId; + gSprites[spriteId2].data[7] = 0; + gSprites[spriteId1].data[7] = 0; + gTasks[taskId].data[0] = 2; + + if (!gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].invisible) + { + gSprites[spriteId2].invisible = 0; + gSprites[spriteId1].invisible = 1; + } + else + { + gSprites[spriteId2].invisible = 1; + gSprites[spriteId1].invisible = 1; + } + + + gSprites[spriteId2].oam.objMode = ST_OAM_OBJ_NORMAL; + gSprites[spriteId1].oam.objMode = ST_OAM_OBJ_NORMAL; + gSprites[spriteId2].callback = sub_815F7C4; + gSprites[spriteId1].callback = sub_815F7C4; + gTasks[taskId].func = sub_815F79C; +} + +static void sub_815F79C(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + DestroyAnimVisualTask(taskId); +} + +static void sub_815F7C4(struct Sprite *sprite) +{ + int zero = 0; + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + if (!gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].invisible) + sprite->invisible ^= 1; + } + + sprite->data[4] = sprite->data[4] + sprite->data[3]; + sprite->data[4] &= 0xFF; + sprite->pos2.x = Cos(sprite->data[4], sprite->data[5]); + switch (sprite->data[0]) + { + case 0: + if (++sprite->data[2] == 60) + { + sprite->data[2] = 0; + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[2] > 0) + { + sprite->data[2] = 0; + sprite->data[5] -= 2; + if (sprite->data[5] < 0) + { + gTasks[sprite->data[6]].data[sprite->data[7]]--; + obj_delete_but_dont_free_vram(sprite); + } + } + break; + } +} diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index 85ff692b3..f99b1aeac 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -236,7 +236,7 @@ static void sub_81169F8(u8 taskId) } else { - task->data[6] = duplicate_obj_of_side_rel2move_in_transparent_mode(task->data[0]); + task->data[6] = CloneBattlerSpriteWithBlend(task->data[0]); if (task->data[6] >= 0) { gSprites[task->data[6]].oam.priority = task->data[0] ? 1 : 2; diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 32a9e926a..e81035fc7 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -1136,7 +1136,7 @@ static void LinkOpponentHandleLoadMonSprite(void) gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteDefault_Y(gActiveBattler), - GetBattlerSubpriority(gActiveBattler)); + GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; @@ -1170,7 +1170,7 @@ static void sub_8066494(u8 battlerId, bool8 dontClearSubstituteBit) &gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSubpriority(battlerId)); + GetBattlerSpriteSubpriority(battlerId)); gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId; @@ -1302,7 +1302,7 @@ static void LinkOpponentHandleDrawTrainerPic(void) gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40, - GetBattlerSubpriority(gActiveBattler)); + GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2; diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index e4cc0ac34..533ec39de 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -1024,7 +1024,7 @@ static void LinkPartnerHandleLoadMonSprite(void) gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteDefault_Y(gActiveBattler), - GetBattlerSubpriority(gActiveBattler)); + GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; @@ -1055,7 +1055,7 @@ static void sub_814CC98(u8 battlerId, bool8 dontClearSubstituteBit) &gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSubpriority(battlerId)); + GetBattlerSpriteSubpriority(battlerId)); gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId; @@ -1143,7 +1143,7 @@ static void LinkPartnerHandleDrawTrainerPic(void) DecompressTrainerBackPic(trainerPicId, gActiveBattler); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80, GetBattlerSubpriority(gActiveBattler)); + gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80, GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 516e7192a..30aa3217b 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -1128,7 +1128,7 @@ static void OpponentHandleLoadMonSprite(void) gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteDefault_Y(gActiveBattler), - GetBattlerSubpriority(gActiveBattler)); + GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; @@ -1163,7 +1163,7 @@ static void sub_80613DC(u8 battlerId, bool8 dontClearSubstituteBit) gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSubpriority(battlerId)); + GetBattlerSpriteSubpriority(battlerId)); gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; @@ -1293,7 +1293,7 @@ static void OpponentHandleDrawTrainerPic(void) gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40, - GetBattlerSubpriority(gActiveBattler)); + GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2; diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index e0e618918..2d8fba63a 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -2200,7 +2200,7 @@ static void sub_805B258(u8 battlerId, bool8 dontClearSubstituteBit) &gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSubpriority(battlerId)); + GetBattlerSpriteSubpriority(battlerId)); gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId; @@ -2314,7 +2314,7 @@ static void PlayerHandleDrawTrainerPic(void) trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender); DecompressTrainerFrontPic(trainerPicId, gActiveBattler); SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSubpriority(gActiveBattler)); + gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; @@ -2329,7 +2329,7 @@ static void PlayerHandleDrawTrainerPic(void) { DecompressTrainerBackPic(trainerPicId, gActiveBattler); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSubpriority(gActiveBattler)); + gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 2e8a4a079..22018add4 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -1211,7 +1211,7 @@ static void PlayerPartnerHandleLoadMonSprite(void) gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteDefault_Y(gActiveBattler), - GetBattlerSubpriority(gActiveBattler)); + GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; @@ -1242,7 +1242,7 @@ static void sub_81BD0E4(u8 battlerId, bool8 dontClearSubstituteBit) &gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSubpriority(battlerId)); + GetBattlerSpriteSubpriority(battlerId)); gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId; @@ -1322,7 +1322,7 @@ static void PlayerPartnerHandleDrawTrainerPic(void) { DecompressTrainerBackPic(trainerPicId, gActiveBattler); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSubpriority(gActiveBattler)); + gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; @@ -1333,7 +1333,7 @@ static void PlayerPartnerHandleDrawTrainerPic(void) { DecompressTrainerFrontPic(trainerPicId, gActiveBattler); SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSubpriority(gActiveBattler)); + gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 52c147c1f..1cf780264 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -1119,9 +1119,7 @@ static void RecordedOpponentHandleLoadMonSprite(void) gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteDefault_Y(gActiveBattler), - GetBattlerSubpriority(gActiveBattler)); - - + GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; @@ -1154,7 +1152,7 @@ static void sub_81885D8(u8 battlerId, bool8 dontClearSubstituteBit) gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSubpriority(battlerId)); + GetBattlerSpriteSubpriority(battlerId)); gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId; @@ -1251,7 +1249,7 @@ static void RecordedOpponentHandleDrawTrainerPic(void) gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40, - GetBattlerSubpriority(gActiveBattler)); + GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2; diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index b11be2e47..a788d6be3 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -1105,7 +1105,7 @@ static void RecordedPlayerHandleLoadMonSprite(void) gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteDefault_Y(gActiveBattler), - GetBattlerSubpriority(gActiveBattler)); + GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; @@ -1136,7 +1136,7 @@ static void sub_818BA6C(u8 battlerId, bool8 dontClearSubstituteBit) &gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSubpriority(battlerId)); + GetBattlerSpriteSubpriority(battlerId)); gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId; @@ -1236,7 +1236,7 @@ static void RecordedPlayerHandleDrawTrainerPic(void) trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender); DecompressTrainerFrontPic(trainerPicId, gActiveBattler); SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSubpriority(gActiveBattler)); + gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; @@ -1250,7 +1250,7 @@ static void RecordedPlayerHandleDrawTrainerPic(void) { DecompressTrainerBackPic(trainerPicId, gActiveBattler); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSubpriority(gActiveBattler)); + gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 2d5eb69fd..c0b496e47 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -1464,7 +1464,7 @@ static void sub_816AA80(u8 battlerId) gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteDefault_Y(battlerId), - GetBattlerSubpriority(battlerId)); + GetBattlerSpriteSubpriority(battlerId)); gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId; diff --git a/src/battle_factory.c b/src/battle_factory.c index a693acfb6..801b33ba7 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -526,7 +526,7 @@ static void sub_81A67EC(void) } var_40 = sub_81A6F70(factoryBattleMode, factoryLvlMode); - currSpecies = 0; + currSpecies = SPECIES_NONE; i = 0; while (i != PARTY_SIZE) { @@ -546,7 +546,7 @@ static void sub_81A67EC(void) break; if (species[j] == gFacilityTrainerMons[monSetId].species) { - if (currSpecies == 0) + if (currSpecies == SPECIES_NONE) currSpecies = gFacilityTrainerMons[monSetId].species; else break; @@ -561,7 +561,7 @@ static void sub_81A67EC(void) if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]) { if (gFacilityTrainerMons[monSetId].species == currSpecies) - currSpecies = 0; + currSpecies = SPECIES_NONE; break; } } @@ -579,7 +579,7 @@ static void sub_81A67EC(void) static void sub_81A6A08(void) { u8 i; - u8 typesCount[18]; + u8 typesCount[NUMBER_OF_MON_TYPES]; u8 usedType[2]; gFacilityTrainerMons = gBattleFrontierMons; diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 8d7ed2dce..f53a6281d 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -1097,14 +1097,14 @@ void sub_805EB9C(u8 affineMode) if (IsBattlerSpritePresent(i)) { gSprites[gBattlerSpriteIds[i]].oam.affineMode = affineMode; - if (affineMode == 0) + if (affineMode == ST_OAM_AFFINE_OFF) { - gBattleSpritesDataPtr->healthBoxesData[i].field_6 = gSprites[gBattlerSpriteIds[i]].oam.matrixNum; + gBattleSpritesDataPtr->healthBoxesData[i].matrixNum = gSprites[gBattlerSpriteIds[i]].oam.matrixNum; gSprites[gBattlerSpriteIds[i]].oam.matrixNum = 0; } else { - gSprites[gBattlerSpriteIds[i]].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[i].field_6; + gSprites[gBattlerSpriteIds[i]].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[i].matrixNum; } } } diff --git a/src/battle_main.c b/src/battle_main.c index fb2e5105a..16025a455 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -2122,12 +2122,12 @@ static void sub_8038B94(u8 taskId) if (species != SPECIES_EGG && hp != 0 && status == 0) r7 |= 1 << i * 2; - if (species == 0) + if (species == SPECIES_NONE) continue; if (hp != 0 && (species == SPECIES_EGG || status != 0)) r7 |= 2 << i * 2; - if (species == 0) + if (species == SPECIES_NONE) continue; if (species != SPECIES_EGG && hp == 0) r7 |= 3 << i * 2; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 475b16c98..f1e7143dc 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8648,7 +8648,7 @@ static void atkAE_healpartystatus(void) u16 species = GetMonData(&party[i], MON_DATA_SPECIES2); u8 abilityBit = GetMonData(&party[i], MON_DATA_ALT_ABILITY); - if (species != 0 && species != SPECIES_EGG) + if (species != SPECIES_NONE && species != SPECIES_EGG) { u8 ability; diff --git a/src/battle_tent.c b/src/battle_tent.c index d66c093e9..c358deaa5 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -13,6 +13,7 @@ #include "string_util.h" #include "constants/items.h" #include "constants/region_map_sections.h" +#include "constants/species.h" // This file's functions. static void sub_81B99D4(void); @@ -292,7 +293,7 @@ static void sub_81B9EC0(void) heldItems[i] = 0; } gFacilityTrainerMons = gSlateportBattleTentMons; - currSpecies = 0; + currSpecies = SPECIES_NONE; i = 0; while (i != PARTY_SIZE) { @@ -305,7 +306,7 @@ static void sub_81B9EC0(void) break; if (species[j] == gFacilityTrainerMons[monSetId].species) { - if (currSpecies == 0) + if (currSpecies == SPECIES_NONE) currSpecies = gFacilityTrainerMons[monSetId].species; else break; @@ -320,7 +321,7 @@ static void sub_81B9EC0(void) if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]) { if (gFacilityTrainerMons[monSetId].species == currSpecies) - currSpecies = 0; + currSpecies = SPECIES_NONE; break; } } @@ -395,7 +395,7 @@ void AnimTranslateStinger(struct Sprite *sprite) lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; rot = ArcTan2Neg(lVarX - sprite->pos1.x, lVarY - sprite->pos1.y); rot += 0xC000; - sub_80A73E0(sprite, FALSE, 0x100, 0x100, rot); + TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rot); sprite->data[0] = gBattleAnimArgs[4]; sprite->data[2] = lVarX; @@ -458,7 +458,7 @@ static void AnimMissileArcStep(struct Sprite *sprite) u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - x2, sprite->pos1.y + sprite->pos2.y - y2); rotation += 0xC000; - sub_80A73E0(sprite, FALSE, 0x100, 0x100, rotation); + TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation); for (i = 0; i < 8; i++) data[i] = tempData[i]; @@ -479,6 +479,6 @@ void sub_8110994(struct Sprite *sprite) sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 18; } - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); - sprite->callback = sub_80A67BC; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; } diff --git a/src/contest.c b/src/contest.c index 201a7472e..3d74109cb 100644 --- a/src/contest.c +++ b/src/contest.c @@ -2520,7 +2520,7 @@ u8 sub_80DB174(u16 species, u32 otId, u32 personality, u32 index) spriteId = CreateSprite(&gMultiuseSpriteTemplate, 0x70, GetBattlerSpriteFinal_Y(2, species, FALSE), 30); gSprites[spriteId].oam.paletteNum = 2; gSprites[spriteId].oam.priority = 2; - gSprites[spriteId].subpriority = GetBattlerSubpriority(2); + gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(2); gSprites[spriteId].callback = SpriteCallbackDummy; gSprites[spriteId].data[0] = gSprites[spriteId].oam.paletteNum; gSprites[spriteId].data[2] = species; diff --git a/src/data/pokemon_graphics/front_anims.h b/src/data/pokemon_graphics/front_anims.h index 0e7b75bde..8a42eb5c9 100644 --- a/src/data/pokemon_graphics/front_anims.h +++ b/src/data/pokemon_graphics/front_anims.h @@ -1,4 +1,4 @@ - + const union AnimCmd gAnimCmd_NONE_1[] = { ANIMCMD_FRAME(0, 30), @@ -6946,446 +6946,449 @@ const union AnimCmd *const gAnims_UNOWN_QMARK[] ={ gAnimCmd_UNOWN_QMARK_1, }; +#define ANIM_CMD(name) [SPECIES_##name] = gAnims_##name +#define ANIM_CMD_FULL(name, anims) [SPECIES_##name] = anims + const union AnimCmd* const * const gMonAnimationsSpriteAnimsPtrTable[] = { - gAnims_NONE, - gAnims_BULBASAUR, - gAnims_IVYSAUR, - gAnims_VENUSAUR, - gAnims_CHARMANDER, - gAnims_CHARMELEON, - gAnims_CHARIZARD, - gAnims_SQUIRTLE, - gAnims_WARTORTLE, - gAnims_BLASTOISE, - gAnims_CATERPIE, - gAnims_METAPOD, - gAnims_BUTTERFREE, - gAnims_WEEDLE, - gAnims_KAKUNA, - gAnims_BEEDRILL, - gAnims_PIDGEY, - gAnims_PIDGEOTTO, - gAnims_PIDGEOT, - gAnims_RATTATA, - gAnims_RATICATE, - gAnims_SPEAROW, - gAnims_FEAROW, - gAnims_EKANS, - gAnims_ARBOK, - gAnims_PIKACHU, - gAnims_RAICHU, - gAnims_SANDSHREW, - gAnims_SANDSLASH, - gAnims_NIDORAN_F, - gAnims_NIDORINA, - gAnims_NIDOQUEEN, - gAnims_NIDORAN_M, - gAnims_NIDORINO, - gAnims_NIDOKING, - gAnims_CLEFAIRY, - gAnims_CLEFABLE, - gAnims_VULPIX, - gAnims_NINETALES, - gAnims_JIGGLYPUFF, - gAnims_WIGGLYTUFF, - gAnims_ZUBAT, - gAnims_GOLBAT, - gAnims_ODDISH, - gAnims_GLOOM, - gAnims_VILEPLUME, - gAnims_PARAS, - gAnims_PARASECT, - gAnims_VENONAT, - gAnims_VENOMOTH, - gAnims_DIGLETT, - gAnims_DUGTRIO, - gAnims_MEOWTH, - gAnims_PERSIAN, - gAnims_PSYDUCK, - gAnims_GOLDUCK, - gAnims_MANKEY, - gAnims_PRIMEAPE, - gAnims_GROWLITHE, - gAnims_ARCANINE, - gAnims_POLIWAG, - gAnims_POLIWHIRL, - gAnims_POLIWRATH, - gAnims_ABRA, - gAnims_KADABRA, - gAnims_ALAKAZAM, - gAnims_MACHOP, - gAnims_MACHOKE, - gAnims_MACHAMP, - gAnims_BELLSPROUT, - gAnims_WEEPINBELL, - gAnims_VICTREEBEL, - gAnims_TENTACOOL, - gAnims_TENTACRUEL, - gAnims_GEODUDE, - gAnims_GRAVELER, - gAnims_GOLEM, - gAnims_PONYTA, - gAnims_RAPIDASH, - gAnims_SLOWPOKE, - gAnims_SLOWBRO, - gAnims_MAGNEMITE, - gAnims_MAGNETON, - gAnims_FARFETCHD, - gAnims_DODUO, - gAnims_DODRIO, - gAnims_SEEL, - gAnims_DEWGONG, - gAnims_GRIMER, - gAnims_MUK, - gAnims_SHELLDER, - gAnims_CLOYSTER, - gAnims_GASTLY, - gAnims_HAUNTER, - gAnims_GENGAR, - gAnims_ONIX, - gAnims_DROWZEE, - gAnims_HYPNO, - gAnims_KRABBY, - gAnims_KINGLER, - gAnims_VOLTORB, - gAnims_ELECTRODE, - gAnims_EXEGGCUTE, - gAnims_EXEGGUTOR, - gAnims_CUBONE, - gAnims_MAROWAK, - gAnims_HITMONLEE, - gAnims_HITMONCHAN, - gAnims_LICKITUNG, - gAnims_KOFFING, - gAnims_WEEZING, - gAnims_RHYHORN, - gAnims_RHYDON, - gAnims_CHANSEY, - gAnims_TANGELA, - gAnims_KANGASKHAN, - gAnims_HORSEA, - gAnims_SEADRA, - gAnims_GOLDEEN, - gAnims_SEAKING, - gAnims_STARYU, - gAnims_STARMIE, - gAnims_MR_MIME, - gAnims_SCYTHER, - gAnims_JYNX, - gAnims_ELECTABUZZ, - gAnims_MAGMAR, - gAnims_PINSIR, - gAnims_TAUROS, - gAnims_MAGIKARP, - gAnims_GYARADOS, - gAnims_LAPRAS, - gAnims_DITTO, - gAnims_EEVEE, - gAnims_VAPOREON, - gAnims_JOLTEON, - gAnims_FLAREON, - gAnims_PORYGON, - gAnims_OMANYTE, - gAnims_OMASTAR, - gAnims_KABUTO, - gAnims_KABUTOPS, - gAnims_AERODACTYL, - gAnims_SNORLAX, - gAnims_ARTICUNO, - gAnims_ZAPDOS, - gAnims_MOLTRES, - gAnims_DRATINI, - gAnims_DRAGONAIR, - gAnims_DRAGONITE, - gAnims_MEWTWO, - gAnims_MEW, - gAnims_CHIKORITA, - gAnims_BAYLEEF, - gAnims_MEGANIUM, - gAnims_CYNDAQUIL, - gAnims_QUILAVA, - gAnims_TYPHLOSION, - gAnims_TOTODILE, - gAnims_CROCONAW, - gAnims_FERALIGATR, - gAnims_SENTRET, - gAnims_FURRET, - gAnims_HOOTHOOT, - gAnims_NOCTOWL, - gAnims_LEDYBA, - gAnims_LEDIAN, - gAnims_SPINARAK, - gAnims_ARIADOS, - gAnims_CROBAT, - gAnims_CHINCHOU, - gAnims_LANTURN, - gAnims_PICHU, - gAnims_CLEFFA, - gAnims_IGGLYBUFF, - gAnims_TOGEPI, - gAnims_TOGETIC, - gAnims_NATU, - gAnims_XATU, - gAnims_MAREEP, - gAnims_FLAAFFY, - gAnims_AMPHAROS, - gAnims_BELLOSSOM, - gAnims_MARILL, - gAnims_AZUMARILL, - gAnims_SUDOWOODO, - gAnims_POLITOED, - gAnims_HOPPIP, - gAnims_SKIPLOOM, - gAnims_JUMPLUFF, - gAnims_AIPOM, - gAnims_SUNKERN, - gAnims_SUNFLORA, - gAnims_YANMA, - gAnims_WOOPER, - gAnims_QUAGSIRE, - gAnims_ESPEON, - gAnims_UMBREON, - gAnims_MURKROW, - gAnims_SLOWKING, - gAnims_MISDREAVUS, - gAnims_UNOWN, - gAnims_WOBBUFFET, - gAnims_GIRAFARIG, - gAnims_PINECO, - gAnims_FORRETRESS, - gAnims_DUNSPARCE, - gAnims_GLIGAR, - gAnims_STEELIX, - gAnims_SNUBBULL, - gAnims_GRANBULL, - gAnims_QWILFISH, - gAnims_SCIZOR, - gAnims_SHUCKLE, - gAnims_HERACROSS, - gAnims_SNEASEL, - gAnims_TEDDIURSA, - gAnims_URSARING, - gAnims_SLUGMA, - gAnims_MAGCARGO, - gAnims_SWINUB, - gAnims_PILOSWINE, - gAnims_CORSOLA, - gAnims_REMORAID, - gAnims_OCTILLERY, - gAnims_DELIBIRD, - gAnims_MANTINE, - gAnims_SKARMORY, - gAnims_HOUNDOUR, - gAnims_HOUNDOOM, - gAnims_KINGDRA, - gAnims_PHANPY, - gAnims_DONPHAN, - gAnims_PORYGON2, - gAnims_STANTLER, - gAnims_SMEARGLE, - gAnims_TYROGUE, - gAnims_HITMONTOP, - gAnims_SMOOCHUM, - gAnims_ELEKID, - gAnims_MAGBY, - gAnims_MILTANK, - gAnims_BLISSEY, - gAnims_RAIKOU, - gAnims_ENTEI, - gAnims_SUICUNE, - gAnims_LARVITAR, - gAnims_PUPITAR, - gAnims_TYRANITAR, - gAnims_LUGIA, - gAnims_HO_OH, - gAnims_CELEBI, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_OLD_UNOWN_B, - gAnims_TREECKO, - gAnims_GROVYLE, - gAnims_SCEPTILE, - gAnims_TORCHIC, - gAnims_COMBUSKEN, - gAnims_BLAZIKEN, - gAnims_MUDKIP, - gAnims_MARSHTOMP, - gAnims_SWAMPERT, - gAnims_POOCHYENA, - gAnims_MIGHTYENA, - gAnims_ZIGZAGOON, - gAnims_LINOONE, - gAnims_WURMPLE, - gAnims_SILCOON, - gAnims_BEAUTIFLY, - gAnims_CASCOON, - gAnims_DUSTOX, - gAnims_LOTAD, - gAnims_LOMBRE, - gAnims_LUDICOLO, - gAnims_SEEDOT, - gAnims_NUZLEAF, - gAnims_SHIFTRY, - gAnims_NINCADA, - gAnims_NINJASK, - gAnims_SHEDINJA, - gAnims_TAILLOW, - gAnims_SWELLOW, - gAnims_SHROOMISH, - gAnims_BRELOOM, - gAnims_SPINDA, - gAnims_WINGULL, - gAnims_PELIPPER, - gAnims_SURSKIT, - gAnims_MASQUERAIN, - gAnims_WAILMER, - gAnims_WAILORD, - gAnims_SKITTY, - gAnims_DELCATTY, - gAnims_KECLEON, - gAnims_BALTOY, - gAnims_CLAYDOL, - gAnims_NOSEPASS, - gAnims_TORKOAL, - gAnims_SABLEYE, - gAnims_BARBOACH, - gAnims_WHISCASH, - gAnims_LUVDISC, - gAnims_CORPHISH, - gAnims_CRAWDAUNT, - gAnims_FEEBAS, - gAnims_MILOTIC, - gAnims_CARVANHA, - gAnims_SHARPEDO, - gAnims_TRAPINCH, - gAnims_VIBRAVA, - gAnims_FLYGON, - gAnims_MAKUHITA, - gAnims_HARIYAMA, - gAnims_ELECTRIKE, - gAnims_MANECTRIC, - gAnims_NUMEL, - gAnims_CAMERUPT, - gAnims_SPHEAL, - gAnims_SEALEO, - gAnims_WALREIN, - gAnims_CACNEA, - gAnims_CACTURNE, - gAnims_SNORUNT, - gAnims_GLALIE, - gAnims_LUNATONE, - gAnims_SOLROCK, - gAnims_AZURILL, - gAnims_SPOINK, - gAnims_GRUMPIG, - gAnims_PLUSLE, - gAnims_MINUN, - gAnims_MAWILE, - gAnims_MEDITITE, - gAnims_MEDICHAM, - gAnims_SWABLU, - gAnims_ALTARIA, - gAnims_WYNAUT, - gAnims_DUSKULL, - gAnims_DUSCLOPS, - gAnims_ROSELIA, - gAnims_SLAKOTH, - gAnims_VIGOROTH, - gAnims_SLAKING, - gAnims_GULPIN, - gAnims_SWALOT, - gAnims_TROPIUS, - gAnims_WHISMUR, - gAnims_LOUDRED, - gAnims_EXPLOUD, - gAnims_CLAMPERL, - gAnims_HUNTAIL, - gAnims_GOREBYSS, - gAnims_ABSOL, - gAnims_SHUPPET, - gAnims_BANETTE, - gAnims_SEVIPER, - gAnims_ZANGOOSE, - gAnims_RELICANTH, - gAnims_ARON, - gAnims_LAIRON, - gAnims_AGGRON, - gAnims_CASTFORM, - gAnims_VOLBEAT, - gAnims_ILLUMISE, - gAnims_LILEEP, - gAnims_CRADILY, - gAnims_ANORITH, - gAnims_ARMALDO, - gAnims_RALTS, - gAnims_KIRLIA, - gAnims_GARDEVOIR, - gAnims_BAGON, - gAnims_SHELGON, - gAnims_SALAMENCE, - gAnims_BELDUM, - gAnims_METANG, - gAnims_METAGROSS, - gAnims_REGIROCK, - gAnims_REGICE, - gAnims_REGISTEEL, - gAnims_KYOGRE, - gAnims_GROUDON, - gAnims_RAYQUAZA, - gAnims_LATIAS, - gAnims_LATIOS, - gAnims_JIRACHI, - gAnims_DEOXYS, - gAnims_CHIMECHO, - gAnims_EGG, - gAnims_UNOWN_B, - gAnims_UNOWN_C, - gAnims_UNOWN_D, - gAnims_UNOWN_E, - gAnims_UNOWN_F, - gAnims_UNOWN_G, - gAnims_UNOWN_H, - gAnims_UNOWN_I, - gAnims_UNOWN_J, - gAnims_UNOWN_K, - gAnims_UNOWN_L, - gAnims_UNOWN_M, - gAnims_UNOWN_N, - gAnims_UNOWN_O, - gAnims_UNOWN_P, - gAnims_UNOWN_Q, - gAnims_UNOWN_R, - gAnims_UNOWN_S, - gAnims_UNOWN_T, - gAnims_UNOWN_U, - gAnims_UNOWN_V, - gAnims_UNOWN_W, - gAnims_UNOWN_X, - gAnims_UNOWN_Y, - gAnims_UNOWN_Z, - gAnims_UNOWN_EMARK, - gAnims_UNOWN_QMARK, + ANIM_CMD(NONE), + ANIM_CMD(BULBASAUR), + ANIM_CMD(IVYSAUR), + ANIM_CMD(VENUSAUR), + ANIM_CMD(CHARMANDER), + ANIM_CMD(CHARMELEON), + ANIM_CMD(CHARIZARD), + ANIM_CMD(SQUIRTLE), + ANIM_CMD(WARTORTLE), + ANIM_CMD(BLASTOISE), + ANIM_CMD(CATERPIE), + ANIM_CMD(METAPOD), + ANIM_CMD(BUTTERFREE), + ANIM_CMD(WEEDLE), + ANIM_CMD(KAKUNA), + ANIM_CMD(BEEDRILL), + ANIM_CMD(PIDGEY), + ANIM_CMD(PIDGEOTTO), + ANIM_CMD(PIDGEOT), + ANIM_CMD(RATTATA), + ANIM_CMD(RATICATE), + ANIM_CMD(SPEAROW), + ANIM_CMD(FEAROW), + ANIM_CMD(EKANS), + ANIM_CMD(ARBOK), + ANIM_CMD(PIKACHU), + ANIM_CMD(RAICHU), + ANIM_CMD(SANDSHREW), + ANIM_CMD(SANDSLASH), + ANIM_CMD(NIDORAN_F), + ANIM_CMD(NIDORINA), + ANIM_CMD(NIDOQUEEN), + ANIM_CMD(NIDORAN_M), + ANIM_CMD(NIDORINO), + ANIM_CMD(NIDOKING), + ANIM_CMD(CLEFAIRY), + ANIM_CMD(CLEFABLE), + ANIM_CMD(VULPIX), + ANIM_CMD(NINETALES), + ANIM_CMD(JIGGLYPUFF), + ANIM_CMD(WIGGLYTUFF), + ANIM_CMD(ZUBAT), + ANIM_CMD(GOLBAT), + ANIM_CMD(ODDISH), + ANIM_CMD(GLOOM), + ANIM_CMD(VILEPLUME), + ANIM_CMD(PARAS), + ANIM_CMD(PARASECT), + ANIM_CMD(VENONAT), + ANIM_CMD(VENOMOTH), + ANIM_CMD(DIGLETT), + ANIM_CMD(DUGTRIO), + ANIM_CMD(MEOWTH), + ANIM_CMD(PERSIAN), + ANIM_CMD(PSYDUCK), + ANIM_CMD(GOLDUCK), + ANIM_CMD(MANKEY), + ANIM_CMD(PRIMEAPE), + ANIM_CMD(GROWLITHE), + ANIM_CMD(ARCANINE), + ANIM_CMD(POLIWAG), + ANIM_CMD(POLIWHIRL), + ANIM_CMD(POLIWRATH), + ANIM_CMD(ABRA), + ANIM_CMD(KADABRA), + ANIM_CMD(ALAKAZAM), + ANIM_CMD(MACHOP), + ANIM_CMD(MACHOKE), + ANIM_CMD(MACHAMP), + ANIM_CMD(BELLSPROUT), + ANIM_CMD(WEEPINBELL), + ANIM_CMD(VICTREEBEL), + ANIM_CMD(TENTACOOL), + ANIM_CMD(TENTACRUEL), + ANIM_CMD(GEODUDE), + ANIM_CMD(GRAVELER), + ANIM_CMD(GOLEM), + ANIM_CMD(PONYTA), + ANIM_CMD(RAPIDASH), + ANIM_CMD(SLOWPOKE), + ANIM_CMD(SLOWBRO), + ANIM_CMD(MAGNEMITE), + ANIM_CMD(MAGNETON), + ANIM_CMD(FARFETCHD), + ANIM_CMD(DODUO), + ANIM_CMD(DODRIO), + ANIM_CMD(SEEL), + ANIM_CMD(DEWGONG), + ANIM_CMD(GRIMER), + ANIM_CMD(MUK), + ANIM_CMD(SHELLDER), + ANIM_CMD(CLOYSTER), + ANIM_CMD(GASTLY), + ANIM_CMD(HAUNTER), + ANIM_CMD(GENGAR), + ANIM_CMD(ONIX), + ANIM_CMD(DROWZEE), + ANIM_CMD(HYPNO), + ANIM_CMD(KRABBY), + ANIM_CMD(KINGLER), + ANIM_CMD(VOLTORB), + ANIM_CMD(ELECTRODE), + ANIM_CMD(EXEGGCUTE), + ANIM_CMD(EXEGGUTOR), + ANIM_CMD(CUBONE), + ANIM_CMD(MAROWAK), + ANIM_CMD(HITMONLEE), + ANIM_CMD(HITMONCHAN), + ANIM_CMD(LICKITUNG), + ANIM_CMD(KOFFING), + ANIM_CMD(WEEZING), + ANIM_CMD(RHYHORN), + ANIM_CMD(RHYDON), + ANIM_CMD(CHANSEY), + ANIM_CMD(TANGELA), + ANIM_CMD(KANGASKHAN), + ANIM_CMD(HORSEA), + ANIM_CMD(SEADRA), + ANIM_CMD(GOLDEEN), + ANIM_CMD(SEAKING), + ANIM_CMD(STARYU), + ANIM_CMD(STARMIE), + ANIM_CMD(MR_MIME), + ANIM_CMD(SCYTHER), + ANIM_CMD(JYNX), + ANIM_CMD(ELECTABUZZ), + ANIM_CMD(MAGMAR), + ANIM_CMD(PINSIR), + ANIM_CMD(TAUROS), + ANIM_CMD(MAGIKARP), + ANIM_CMD(GYARADOS), + ANIM_CMD(LAPRAS), + ANIM_CMD(DITTO), + ANIM_CMD(EEVEE), + ANIM_CMD(VAPOREON), + ANIM_CMD(JOLTEON), + ANIM_CMD(FLAREON), + ANIM_CMD(PORYGON), + ANIM_CMD(OMANYTE), + ANIM_CMD(OMASTAR), + ANIM_CMD(KABUTO), + ANIM_CMD(KABUTOPS), + ANIM_CMD(AERODACTYL), + ANIM_CMD(SNORLAX), + ANIM_CMD(ARTICUNO), + ANIM_CMD(ZAPDOS), + ANIM_CMD(MOLTRES), + ANIM_CMD(DRATINI), + ANIM_CMD(DRAGONAIR), + ANIM_CMD(DRAGONITE), + ANIM_CMD(MEWTWO), + ANIM_CMD(MEW), + ANIM_CMD(CHIKORITA), + ANIM_CMD(BAYLEEF), + ANIM_CMD(MEGANIUM), + ANIM_CMD(CYNDAQUIL), + ANIM_CMD(QUILAVA), + ANIM_CMD(TYPHLOSION), + ANIM_CMD(TOTODILE), + ANIM_CMD(CROCONAW), + ANIM_CMD(FERALIGATR), + ANIM_CMD(SENTRET), + ANIM_CMD(FURRET), + ANIM_CMD(HOOTHOOT), + ANIM_CMD(NOCTOWL), + ANIM_CMD(LEDYBA), + ANIM_CMD(LEDIAN), + ANIM_CMD(SPINARAK), + ANIM_CMD(ARIADOS), + ANIM_CMD(CROBAT), + ANIM_CMD(CHINCHOU), + ANIM_CMD(LANTURN), + ANIM_CMD(PICHU), + ANIM_CMD(CLEFFA), + ANIM_CMD(IGGLYBUFF), + ANIM_CMD(TOGEPI), + ANIM_CMD(TOGETIC), + ANIM_CMD(NATU), + ANIM_CMD(XATU), + ANIM_CMD(MAREEP), + ANIM_CMD(FLAAFFY), + ANIM_CMD(AMPHAROS), + ANIM_CMD(BELLOSSOM), + ANIM_CMD(MARILL), + ANIM_CMD(AZUMARILL), + ANIM_CMD(SUDOWOODO), + ANIM_CMD(POLITOED), + ANIM_CMD(HOPPIP), + ANIM_CMD(SKIPLOOM), + ANIM_CMD(JUMPLUFF), + ANIM_CMD(AIPOM), + ANIM_CMD(SUNKERN), + ANIM_CMD(SUNFLORA), + ANIM_CMD(YANMA), + ANIM_CMD(WOOPER), + ANIM_CMD(QUAGSIRE), + ANIM_CMD(ESPEON), + ANIM_CMD(UMBREON), + ANIM_CMD(MURKROW), + ANIM_CMD(SLOWKING), + ANIM_CMD(MISDREAVUS), + ANIM_CMD(UNOWN), + ANIM_CMD(WOBBUFFET), + ANIM_CMD(GIRAFARIG), + ANIM_CMD(PINECO), + ANIM_CMD(FORRETRESS), + ANIM_CMD(DUNSPARCE), + ANIM_CMD(GLIGAR), + ANIM_CMD(STEELIX), + ANIM_CMD(SNUBBULL), + ANIM_CMD(GRANBULL), + ANIM_CMD(QWILFISH), + ANIM_CMD(SCIZOR), + ANIM_CMD(SHUCKLE), + ANIM_CMD(HERACROSS), + ANIM_CMD(SNEASEL), + ANIM_CMD(TEDDIURSA), + ANIM_CMD(URSARING), + ANIM_CMD(SLUGMA), + ANIM_CMD(MAGCARGO), + ANIM_CMD(SWINUB), + ANIM_CMD(PILOSWINE), + ANIM_CMD(CORSOLA), + ANIM_CMD(REMORAID), + ANIM_CMD(OCTILLERY), + ANIM_CMD(DELIBIRD), + ANIM_CMD(MANTINE), + ANIM_CMD(SKARMORY), + ANIM_CMD(HOUNDOUR), + ANIM_CMD(HOUNDOOM), + ANIM_CMD(KINGDRA), + ANIM_CMD(PHANPY), + ANIM_CMD(DONPHAN), + ANIM_CMD(PORYGON2), + ANIM_CMD(STANTLER), + ANIM_CMD(SMEARGLE), + ANIM_CMD(TYROGUE), + ANIM_CMD(HITMONTOP), + ANIM_CMD(SMOOCHUM), + ANIM_CMD(ELEKID), + ANIM_CMD(MAGBY), + ANIM_CMD(MILTANK), + ANIM_CMD(BLISSEY), + ANIM_CMD(RAIKOU), + ANIM_CMD(ENTEI), + ANIM_CMD(SUICUNE), + ANIM_CMD(LARVITAR), + ANIM_CMD(PUPITAR), + ANIM_CMD(TYRANITAR), + ANIM_CMD(LUGIA), + ANIM_CMD(HO_OH), + ANIM_CMD(CELEBI), + ANIM_CMD(OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_C, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_D, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_E, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_F, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_G, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_H, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_I, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_J, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_K, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_L, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_M, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_N, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_O, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_P, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_Q, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_R, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_S, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_T, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_U, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_V, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_W, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_X, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_Y, gAnims_OLD_UNOWN_B), + ANIM_CMD_FULL(OLD_UNOWN_Z, gAnims_OLD_UNOWN_B), + ANIM_CMD(TREECKO), + ANIM_CMD(GROVYLE), + ANIM_CMD(SCEPTILE), + ANIM_CMD(TORCHIC), + ANIM_CMD(COMBUSKEN), + ANIM_CMD(BLAZIKEN), + ANIM_CMD(MUDKIP), + ANIM_CMD(MARSHTOMP), + ANIM_CMD(SWAMPERT), + ANIM_CMD(POOCHYENA), + ANIM_CMD(MIGHTYENA), + ANIM_CMD(ZIGZAGOON), + ANIM_CMD(LINOONE), + ANIM_CMD(WURMPLE), + ANIM_CMD(SILCOON), + ANIM_CMD(BEAUTIFLY), + ANIM_CMD(CASCOON), + ANIM_CMD(DUSTOX), + ANIM_CMD(LOTAD), + ANIM_CMD(LOMBRE), + ANIM_CMD(LUDICOLO), + ANIM_CMD(SEEDOT), + ANIM_CMD(NUZLEAF), + ANIM_CMD(SHIFTRY), + ANIM_CMD(NINCADA), + ANIM_CMD(NINJASK), + ANIM_CMD(SHEDINJA), + ANIM_CMD(TAILLOW), + ANIM_CMD(SWELLOW), + ANIM_CMD(SHROOMISH), + ANIM_CMD(BRELOOM), + ANIM_CMD(SPINDA), + ANIM_CMD(WINGULL), + ANIM_CMD(PELIPPER), + ANIM_CMD(SURSKIT), + ANIM_CMD(MASQUERAIN), + ANIM_CMD(WAILMER), + ANIM_CMD(WAILORD), + ANIM_CMD(SKITTY), + ANIM_CMD(DELCATTY), + ANIM_CMD(KECLEON), + ANIM_CMD(BALTOY), + ANIM_CMD(CLAYDOL), + ANIM_CMD(NOSEPASS), + ANIM_CMD(TORKOAL), + ANIM_CMD(SABLEYE), + ANIM_CMD(BARBOACH), + ANIM_CMD(WHISCASH), + ANIM_CMD(LUVDISC), + ANIM_CMD(CORPHISH), + ANIM_CMD(CRAWDAUNT), + ANIM_CMD(FEEBAS), + ANIM_CMD(MILOTIC), + ANIM_CMD(CARVANHA), + ANIM_CMD(SHARPEDO), + ANIM_CMD(TRAPINCH), + ANIM_CMD(VIBRAVA), + ANIM_CMD(FLYGON), + ANIM_CMD(MAKUHITA), + ANIM_CMD(HARIYAMA), + ANIM_CMD(ELECTRIKE), + ANIM_CMD(MANECTRIC), + ANIM_CMD(NUMEL), + ANIM_CMD(CAMERUPT), + ANIM_CMD(SPHEAL), + ANIM_CMD(SEALEO), + ANIM_CMD(WALREIN), + ANIM_CMD(CACNEA), + ANIM_CMD(CACTURNE), + ANIM_CMD(SNORUNT), + ANIM_CMD(GLALIE), + ANIM_CMD(LUNATONE), + ANIM_CMD(SOLROCK), + ANIM_CMD(AZURILL), + ANIM_CMD(SPOINK), + ANIM_CMD(GRUMPIG), + ANIM_CMD(PLUSLE), + ANIM_CMD(MINUN), + ANIM_CMD(MAWILE), + ANIM_CMD(MEDITITE), + ANIM_CMD(MEDICHAM), + ANIM_CMD(SWABLU), + ANIM_CMD(ALTARIA), + ANIM_CMD(WYNAUT), + ANIM_CMD(DUSKULL), + ANIM_CMD(DUSCLOPS), + ANIM_CMD(ROSELIA), + ANIM_CMD(SLAKOTH), + ANIM_CMD(VIGOROTH), + ANIM_CMD(SLAKING), + ANIM_CMD(GULPIN), + ANIM_CMD(SWALOT), + ANIM_CMD(TROPIUS), + ANIM_CMD(WHISMUR), + ANIM_CMD(LOUDRED), + ANIM_CMD(EXPLOUD), + ANIM_CMD(CLAMPERL), + ANIM_CMD(HUNTAIL), + ANIM_CMD(GOREBYSS), + ANIM_CMD(ABSOL), + ANIM_CMD(SHUPPET), + ANIM_CMD(BANETTE), + ANIM_CMD(SEVIPER), + ANIM_CMD(ZANGOOSE), + ANIM_CMD(RELICANTH), + ANIM_CMD(ARON), + ANIM_CMD(LAIRON), + ANIM_CMD(AGGRON), + ANIM_CMD(CASTFORM), + ANIM_CMD(VOLBEAT), + ANIM_CMD(ILLUMISE), + ANIM_CMD(LILEEP), + ANIM_CMD(CRADILY), + ANIM_CMD(ANORITH), + ANIM_CMD(ARMALDO), + ANIM_CMD(RALTS), + ANIM_CMD(KIRLIA), + ANIM_CMD(GARDEVOIR), + ANIM_CMD(BAGON), + ANIM_CMD(SHELGON), + ANIM_CMD(SALAMENCE), + ANIM_CMD(BELDUM), + ANIM_CMD(METANG), + ANIM_CMD(METAGROSS), + ANIM_CMD(REGIROCK), + ANIM_CMD(REGICE), + ANIM_CMD(REGISTEEL), + ANIM_CMD(KYOGRE), + ANIM_CMD(GROUDON), + ANIM_CMD(RAYQUAZA), + ANIM_CMD(LATIAS), + ANIM_CMD(LATIOS), + ANIM_CMD(JIRACHI), + ANIM_CMD(DEOXYS), + ANIM_CMD(CHIMECHO), + ANIM_CMD(EGG), + ANIM_CMD(UNOWN_B), + ANIM_CMD(UNOWN_C), + ANIM_CMD(UNOWN_D), + ANIM_CMD(UNOWN_E), + ANIM_CMD(UNOWN_F), + ANIM_CMD(UNOWN_G), + ANIM_CMD(UNOWN_H), + ANIM_CMD(UNOWN_I), + ANIM_CMD(UNOWN_J), + ANIM_CMD(UNOWN_K), + ANIM_CMD(UNOWN_L), + ANIM_CMD(UNOWN_M), + ANIM_CMD(UNOWN_N), + ANIM_CMD(UNOWN_O), + ANIM_CMD(UNOWN_P), + ANIM_CMD(UNOWN_Q), + ANIM_CMD(UNOWN_R), + ANIM_CMD(UNOWN_S), + ANIM_CMD(UNOWN_T), + ANIM_CMD(UNOWN_U), + ANIM_CMD(UNOWN_V), + ANIM_CMD(UNOWN_W), + ANIM_CMD(UNOWN_X), + ANIM_CMD(UNOWN_Y), + ANIM_CMD(UNOWN_Z), + ANIM_CMD(UNOWN_EMARK), + ANIM_CMD(UNOWN_QMARK), }; diff --git a/src/data/pokemon_graphics/still_front_pic_table.h b/src/data/pokemon_graphics/still_front_pic_table.h index a345a3d43..308a872b4 100644 --- a/src/data/pokemon_graphics/still_front_pic_table.h +++ b/src/data/pokemon_graphics/still_front_pic_table.h @@ -1,446 +1,448 @@ +#define STILL_FRONT_PIC(species, frontpic) [SPECIES_##species] = {frontpic, 0x800, SPECIES_##species} + const struct CompressedSpriteSheet gMonStillFrontPicTable[] = -{ //.data .size .tag - gMonStillFrontPic_CircledQuestionMark, 0x800, 0, - gMonStillFrontPic_Bulbasaur, 0x800, 1, - gMonStillFrontPic_Ivysaur, 0x800, 2, - gMonStillFrontPic_Venusaur, 0x800, 3, - gMonStillFrontPic_Charmander, 0x800, 4, - gMonStillFrontPic_Charmeleon, 0x800, 5, - gMonStillFrontPic_Charizard, 0x800, 6, - gMonStillFrontPic_Squirtle, 0x800, 7, - gMonStillFrontPic_Wartortle, 0x800, 8, - gMonStillFrontPic_Blastoise, 0x800, 9, - gMonStillFrontPic_Caterpie, 0x800, 10, - gMonStillFrontPic_Metapod, 0x800, 11, - gMonStillFrontPic_Butterfree, 0x800, 12, - gMonStillFrontPic_Weedle, 0x800, 13, - gMonStillFrontPic_Kakuna, 0x800, 14, - gMonStillFrontPic_Beedrill, 0x800, 15, - gMonStillFrontPic_Pidgey, 0x800, 16, - gMonStillFrontPic_Pidgeotto, 0x800, 17, - gMonStillFrontPic_Pidgeot, 0x800, 18, - gMonStillFrontPic_Rattata, 0x800, 19, - gMonStillFrontPic_Raticate, 0x800, 20, - gMonStillFrontPic_Spearow, 0x800, 21, - gMonStillFrontPic_Fearow, 0x800, 22, - gMonStillFrontPic_Ekans, 0x800, 23, - gMonStillFrontPic_Arbok, 0x800, 24, - gMonStillFrontPic_Pikachu, 0x800, 25, - gMonStillFrontPic_Raichu, 0x800, 26, - gMonStillFrontPic_Sandshrew, 0x800, 27, - gMonStillFrontPic_Sandslash, 0x800, 28, - gMonStillFrontPic_NidoranF, 0x800, 29, - gMonStillFrontPic_Nidorina, 0x800, 30, - gMonStillFrontPic_Nidoqueen, 0x800, 31, - gMonStillFrontPic_NidoranM, 0x800, 32, - gMonStillFrontPic_Nidorino, 0x800, 33, - gMonStillFrontPic_Nidoking, 0x800, 34, - gMonStillFrontPic_Clefairy, 0x800, 35, - gMonStillFrontPic_Clefable, 0x800, 36, - gMonStillFrontPic_Vulpix, 0x800, 37, - gMonStillFrontPic_Ninetales, 0x800, 38, - gMonStillFrontPic_Jigglypuff, 0x800, 39, - gMonStillFrontPic_Wigglytuff, 0x800, 40, - gMonStillFrontPic_Zubat, 0x800, 41, - gMonStillFrontPic_Golbat, 0x800, 42, - gMonStillFrontPic_Oddish, 0x800, 43, - gMonStillFrontPic_Gloom, 0x800, 44, - gMonStillFrontPic_Vileplume, 0x800, 45, - gMonStillFrontPic_Paras, 0x800, 46, - gMonStillFrontPic_Parasect, 0x800, 47, - gMonStillFrontPic_Venonat, 0x800, 48, - gMonStillFrontPic_Venomoth, 0x800, 49, - gMonStillFrontPic_Diglett, 0x800, 50, - gMonStillFrontPic_Dugtrio, 0x800, 51, - gMonStillFrontPic_Meowth, 0x800, 52, - gMonStillFrontPic_Persian, 0x800, 53, - gMonStillFrontPic_Psyduck, 0x800, 54, - gMonStillFrontPic_Golduck, 0x800, 55, - gMonStillFrontPic_Mankey, 0x800, 56, - gMonStillFrontPic_Primeape, 0x800, 57, - gMonStillFrontPic_Growlithe, 0x800, 58, - gMonStillFrontPic_Arcanine, 0x800, 59, - gMonStillFrontPic_Poliwag, 0x800, 60, - gMonStillFrontPic_Poliwhirl, 0x800, 61, - gMonStillFrontPic_Poliwrath, 0x800, 62, - gMonStillFrontPic_Abra, 0x800, 63, - gMonStillFrontPic_Kadabra, 0x800, 64, - gMonStillFrontPic_Alakazam, 0x800, 65, - gMonStillFrontPic_Machop, 0x800, 66, - gMonStillFrontPic_Machoke, 0x800, 67, - gMonStillFrontPic_Machamp, 0x800, 68, - gMonStillFrontPic_Bellsprout, 0x800, 69, - gMonStillFrontPic_Weepinbell, 0x800, 70, - gMonStillFrontPic_Victreebel, 0x800, 71, - gMonStillFrontPic_Tentacool, 0x800, 72, - gMonStillFrontPic_Tentacruel, 0x800, 73, - gMonStillFrontPic_Geodude, 0x800, 74, - gMonStillFrontPic_Graveler, 0x800, 75, - gMonStillFrontPic_Golem, 0x800, 76, - gMonStillFrontPic_Ponyta, 0x800, 77, - gMonStillFrontPic_Rapidash, 0x800, 78, - gMonStillFrontPic_Slowpoke, 0x800, 79, - gMonStillFrontPic_Slowbro, 0x800, 80, - gMonStillFrontPic_Magnemite, 0x800, 81, - gMonStillFrontPic_Magneton, 0x800, 82, - gMonStillFrontPic_Farfetchd, 0x800, 83, - gMonStillFrontPic_Doduo, 0x800, 84, - gMonStillFrontPic_Dodrio, 0x800, 85, - gMonStillFrontPic_Seel, 0x800, 86, - gMonStillFrontPic_Dewgong, 0x800, 87, - gMonStillFrontPic_Grimer, 0x800, 88, - gMonStillFrontPic_Muk, 0x800, 89, - gMonStillFrontPic_Shellder, 0x800, 90, - gMonStillFrontPic_Cloyster, 0x800, 91, - gMonStillFrontPic_Gastly, 0x800, 92, - gMonStillFrontPic_Haunter, 0x800, 93, - gMonStillFrontPic_Gengar, 0x800, 94, - gMonStillFrontPic_Onix, 0x800, 95, - gMonStillFrontPic_Drowzee, 0x800, 96, - gMonStillFrontPic_Hypno, 0x800, 97, - gMonStillFrontPic_Krabby, 0x800, 98, - gMonStillFrontPic_Kingler, 0x800, 99, - gMonStillFrontPic_Voltorb, 0x800, 100, - gMonStillFrontPic_Electrode, 0x800, 101, - gMonStillFrontPic_Exeggcute, 0x800, 102, - gMonStillFrontPic_Exeggutor, 0x800, 103, - gMonStillFrontPic_Cubone, 0x800, 104, - gMonStillFrontPic_Marowak, 0x800, 105, - gMonStillFrontPic_Hitmonlee, 0x800, 106, - gMonStillFrontPic_Hitmonchan, 0x800, 107, - gMonStillFrontPic_Lickitung, 0x800, 108, - gMonStillFrontPic_Koffing, 0x800, 109, - gMonStillFrontPic_Weezing, 0x800, 110, - gMonStillFrontPic_Rhyhorn, 0x800, 111, - gMonStillFrontPic_Rhydon, 0x800, 112, - gMonStillFrontPic_Chansey, 0x800, 113, - gMonStillFrontPic_Tangela, 0x800, 114, - gMonStillFrontPic_Kangaskhan, 0x800, 115, - gMonStillFrontPic_Horsea, 0x800, 116, - gMonStillFrontPic_Seadra, 0x800, 117, - gMonStillFrontPic_Goldeen, 0x800, 118, - gMonStillFrontPic_Seaking, 0x800, 119, - gMonStillFrontPic_Staryu, 0x800, 120, - gMonStillFrontPic_Starmie, 0x800, 121, - gMonStillFrontPic_Mrmime, 0x800, 122, - gMonStillFrontPic_Scyther, 0x800, 123, - gMonStillFrontPic_Jynx, 0x800, 124, - gMonStillFrontPic_Electabuzz, 0x800, 125, - gMonStillFrontPic_Magmar, 0x800, 126, - gMonStillFrontPic_Pinsir, 0x800, 127, - gMonStillFrontPic_Tauros, 0x800, 128, - gMonStillFrontPic_Magikarp, 0x800, 129, - gMonStillFrontPic_Gyarados, 0x800, 130, - gMonStillFrontPic_Lapras, 0x800, 131, - gMonStillFrontPic_Ditto, 0x800, 132, - gMonStillFrontPic_Eevee, 0x800, 133, - gMonStillFrontPic_Vaporeon, 0x800, 134, - gMonStillFrontPic_Jolteon, 0x800, 135, - gMonStillFrontPic_Flareon, 0x800, 136, - gMonStillFrontPic_Porygon, 0x800, 137, - gMonStillFrontPic_Omanyte, 0x800, 138, - gMonStillFrontPic_Omastar, 0x800, 139, - gMonStillFrontPic_Kabuto, 0x800, 140, - gMonStillFrontPic_Kabutops, 0x800, 141, - gMonStillFrontPic_Aerodactyl, 0x800, 142, - gMonStillFrontPic_Snorlax, 0x800, 143, - gMonStillFrontPic_Articuno, 0x800, 144, - gMonStillFrontPic_Zapdos, 0x800, 145, - gMonStillFrontPic_Moltres, 0x800, 146, - gMonStillFrontPic_Dratini, 0x800, 147, - gMonStillFrontPic_Dragonair, 0x800, 148, - gMonStillFrontPic_Dragonite, 0x800, 149, - gMonStillFrontPic_Mewtwo, 0x800, 150, - gMonStillFrontPic_Mew, 0x800, 151, +{ + STILL_FRONT_PIC(NONE, gMonStillFrontPic_CircledQuestionMark), + STILL_FRONT_PIC(BULBASAUR, gMonStillFrontPic_Bulbasaur), + STILL_FRONT_PIC(IVYSAUR, gMonStillFrontPic_Ivysaur), + STILL_FRONT_PIC(VENUSAUR, gMonStillFrontPic_Venusaur), + STILL_FRONT_PIC(CHARMANDER, gMonStillFrontPic_Charmander), + STILL_FRONT_PIC(CHARMELEON, gMonStillFrontPic_Charmeleon), + STILL_FRONT_PIC(CHARIZARD, gMonStillFrontPic_Charizard), + STILL_FRONT_PIC(SQUIRTLE, gMonStillFrontPic_Squirtle), + STILL_FRONT_PIC(WARTORTLE, gMonStillFrontPic_Wartortle), + STILL_FRONT_PIC(BLASTOISE, gMonStillFrontPic_Blastoise), + STILL_FRONT_PIC(CATERPIE, gMonStillFrontPic_Caterpie), + STILL_FRONT_PIC(METAPOD, gMonStillFrontPic_Metapod), + STILL_FRONT_PIC(BUTTERFREE, gMonStillFrontPic_Butterfree), + STILL_FRONT_PIC(WEEDLE, gMonStillFrontPic_Weedle), + STILL_FRONT_PIC(KAKUNA, gMonStillFrontPic_Kakuna), + STILL_FRONT_PIC(BEEDRILL, gMonStillFrontPic_Beedrill), + STILL_FRONT_PIC(PIDGEY, gMonStillFrontPic_Pidgey), + STILL_FRONT_PIC(PIDGEOTTO, gMonStillFrontPic_Pidgeotto), + STILL_FRONT_PIC(PIDGEOT, gMonStillFrontPic_Pidgeot), + STILL_FRONT_PIC(RATTATA, gMonStillFrontPic_Rattata), + STILL_FRONT_PIC(RATICATE, gMonStillFrontPic_Raticate), + STILL_FRONT_PIC(SPEAROW, gMonStillFrontPic_Spearow), + STILL_FRONT_PIC(FEAROW, gMonStillFrontPic_Fearow), + STILL_FRONT_PIC(EKANS, gMonStillFrontPic_Ekans), + STILL_FRONT_PIC(ARBOK, gMonStillFrontPic_Arbok), + STILL_FRONT_PIC(PIKACHU, gMonStillFrontPic_Pikachu), + STILL_FRONT_PIC(RAICHU, gMonStillFrontPic_Raichu), + STILL_FRONT_PIC(SANDSHREW, gMonStillFrontPic_Sandshrew), + STILL_FRONT_PIC(SANDSLASH, gMonStillFrontPic_Sandslash), + STILL_FRONT_PIC(NIDORAN_F, gMonStillFrontPic_NidoranF), + STILL_FRONT_PIC(NIDORINA, gMonStillFrontPic_Nidorina), + STILL_FRONT_PIC(NIDOQUEEN, gMonStillFrontPic_Nidoqueen), + STILL_FRONT_PIC(NIDORAN_M, gMonStillFrontPic_NidoranM), + STILL_FRONT_PIC(NIDORINO, gMonStillFrontPic_Nidorino), + STILL_FRONT_PIC(NIDOKING, gMonStillFrontPic_Nidoking), + STILL_FRONT_PIC(CLEFAIRY, gMonStillFrontPic_Clefairy), + STILL_FRONT_PIC(CLEFABLE, gMonStillFrontPic_Clefable), + STILL_FRONT_PIC(VULPIX, gMonStillFrontPic_Vulpix), + STILL_FRONT_PIC(NINETALES, gMonStillFrontPic_Ninetales), + STILL_FRONT_PIC(JIGGLYPUFF, gMonStillFrontPic_Jigglypuff), + STILL_FRONT_PIC(WIGGLYTUFF, gMonStillFrontPic_Wigglytuff), + STILL_FRONT_PIC(ZUBAT, gMonStillFrontPic_Zubat), + STILL_FRONT_PIC(GOLBAT, gMonStillFrontPic_Golbat), + STILL_FRONT_PIC(ODDISH, gMonStillFrontPic_Oddish), + STILL_FRONT_PIC(GLOOM, gMonStillFrontPic_Gloom), + STILL_FRONT_PIC(VILEPLUME, gMonStillFrontPic_Vileplume), + STILL_FRONT_PIC(PARAS, gMonStillFrontPic_Paras), + STILL_FRONT_PIC(PARASECT, gMonStillFrontPic_Parasect), + STILL_FRONT_PIC(VENONAT, gMonStillFrontPic_Venonat), + STILL_FRONT_PIC(VENOMOTH, gMonStillFrontPic_Venomoth), + STILL_FRONT_PIC(DIGLETT, gMonStillFrontPic_Diglett), + STILL_FRONT_PIC(DUGTRIO, gMonStillFrontPic_Dugtrio), + STILL_FRONT_PIC(MEOWTH, gMonStillFrontPic_Meowth), + STILL_FRONT_PIC(PERSIAN, gMonStillFrontPic_Persian), + STILL_FRONT_PIC(PSYDUCK, gMonStillFrontPic_Psyduck), + STILL_FRONT_PIC(GOLDUCK, gMonStillFrontPic_Golduck), + STILL_FRONT_PIC(MANKEY, gMonStillFrontPic_Mankey), + STILL_FRONT_PIC(PRIMEAPE, gMonStillFrontPic_Primeape), + STILL_FRONT_PIC(GROWLITHE, gMonStillFrontPic_Growlithe), + STILL_FRONT_PIC(ARCANINE, gMonStillFrontPic_Arcanine), + STILL_FRONT_PIC(POLIWAG, gMonStillFrontPic_Poliwag), + STILL_FRONT_PIC(POLIWHIRL, gMonStillFrontPic_Poliwhirl), + STILL_FRONT_PIC(POLIWRATH, gMonStillFrontPic_Poliwrath), + STILL_FRONT_PIC(ABRA, gMonStillFrontPic_Abra), + STILL_FRONT_PIC(KADABRA, gMonStillFrontPic_Kadabra), + STILL_FRONT_PIC(ALAKAZAM, gMonStillFrontPic_Alakazam), + STILL_FRONT_PIC(MACHOP, gMonStillFrontPic_Machop), + STILL_FRONT_PIC(MACHOKE, gMonStillFrontPic_Machoke), + STILL_FRONT_PIC(MACHAMP, gMonStillFrontPic_Machamp), + STILL_FRONT_PIC(BELLSPROUT, gMonStillFrontPic_Bellsprout), + STILL_FRONT_PIC(WEEPINBELL, gMonStillFrontPic_Weepinbell), + STILL_FRONT_PIC(VICTREEBEL, gMonStillFrontPic_Victreebel), + STILL_FRONT_PIC(TENTACOOL, gMonStillFrontPic_Tentacool), + STILL_FRONT_PIC(TENTACRUEL, gMonStillFrontPic_Tentacruel), + STILL_FRONT_PIC(GEODUDE, gMonStillFrontPic_Geodude), + STILL_FRONT_PIC(GRAVELER, gMonStillFrontPic_Graveler), + STILL_FRONT_PIC(GOLEM, gMonStillFrontPic_Golem), + STILL_FRONT_PIC(PONYTA, gMonStillFrontPic_Ponyta), + STILL_FRONT_PIC(RAPIDASH, gMonStillFrontPic_Rapidash), + STILL_FRONT_PIC(SLOWPOKE, gMonStillFrontPic_Slowpoke), + STILL_FRONT_PIC(SLOWBRO, gMonStillFrontPic_Slowbro), + STILL_FRONT_PIC(MAGNEMITE, gMonStillFrontPic_Magnemite), + STILL_FRONT_PIC(MAGNETON, gMonStillFrontPic_Magneton), + STILL_FRONT_PIC(FARFETCHD, gMonStillFrontPic_Farfetchd), + STILL_FRONT_PIC(DODUO, gMonStillFrontPic_Doduo), + STILL_FRONT_PIC(DODRIO, gMonStillFrontPic_Dodrio), + STILL_FRONT_PIC(SEEL, gMonStillFrontPic_Seel), + STILL_FRONT_PIC(DEWGONG, gMonStillFrontPic_Dewgong), + STILL_FRONT_PIC(GRIMER, gMonStillFrontPic_Grimer), + STILL_FRONT_PIC(MUK, gMonStillFrontPic_Muk), + STILL_FRONT_PIC(SHELLDER, gMonStillFrontPic_Shellder), + STILL_FRONT_PIC(CLOYSTER, gMonStillFrontPic_Cloyster), + STILL_FRONT_PIC(GASTLY, gMonStillFrontPic_Gastly), + STILL_FRONT_PIC(HAUNTER, gMonStillFrontPic_Haunter), + STILL_FRONT_PIC(GENGAR, gMonStillFrontPic_Gengar), + STILL_FRONT_PIC(ONIX, gMonStillFrontPic_Onix), + STILL_FRONT_PIC(DROWZEE, gMonStillFrontPic_Drowzee), + STILL_FRONT_PIC(HYPNO, gMonStillFrontPic_Hypno), + STILL_FRONT_PIC(KRABBY, gMonStillFrontPic_Krabby), + STILL_FRONT_PIC(KINGLER, gMonStillFrontPic_Kingler), + STILL_FRONT_PIC(VOLTORB, gMonStillFrontPic_Voltorb), + STILL_FRONT_PIC(ELECTRODE, gMonStillFrontPic_Electrode), + STILL_FRONT_PIC(EXEGGCUTE, gMonStillFrontPic_Exeggcute), + STILL_FRONT_PIC(EXEGGUTOR, gMonStillFrontPic_Exeggutor), + STILL_FRONT_PIC(CUBONE, gMonStillFrontPic_Cubone), + STILL_FRONT_PIC(MAROWAK, gMonStillFrontPic_Marowak), + STILL_FRONT_PIC(HITMONLEE, gMonStillFrontPic_Hitmonlee), + STILL_FRONT_PIC(HITMONCHAN, gMonStillFrontPic_Hitmonchan), + STILL_FRONT_PIC(LICKITUNG, gMonStillFrontPic_Lickitung), + STILL_FRONT_PIC(KOFFING, gMonStillFrontPic_Koffing), + STILL_FRONT_PIC(WEEZING, gMonStillFrontPic_Weezing), + STILL_FRONT_PIC(RHYHORN, gMonStillFrontPic_Rhyhorn), + STILL_FRONT_PIC(RHYDON, gMonStillFrontPic_Rhydon), + STILL_FRONT_PIC(CHANSEY, gMonStillFrontPic_Chansey), + STILL_FRONT_PIC(TANGELA, gMonStillFrontPic_Tangela), + STILL_FRONT_PIC(KANGASKHAN, gMonStillFrontPic_Kangaskhan), + STILL_FRONT_PIC(HORSEA, gMonStillFrontPic_Horsea), + STILL_FRONT_PIC(SEADRA, gMonStillFrontPic_Seadra), + STILL_FRONT_PIC(GOLDEEN, gMonStillFrontPic_Goldeen), + STILL_FRONT_PIC(SEAKING, gMonStillFrontPic_Seaking), + STILL_FRONT_PIC(STARYU, gMonStillFrontPic_Staryu), + STILL_FRONT_PIC(STARMIE, gMonStillFrontPic_Starmie), + STILL_FRONT_PIC(MR_MIME, gMonStillFrontPic_Mrmime), + STILL_FRONT_PIC(SCYTHER, gMonStillFrontPic_Scyther), + STILL_FRONT_PIC(JYNX, gMonStillFrontPic_Jynx), + STILL_FRONT_PIC(ELECTABUZZ, gMonStillFrontPic_Electabuzz), + STILL_FRONT_PIC(MAGMAR, gMonStillFrontPic_Magmar), + STILL_FRONT_PIC(PINSIR, gMonStillFrontPic_Pinsir), + STILL_FRONT_PIC(TAUROS, gMonStillFrontPic_Tauros), + STILL_FRONT_PIC(MAGIKARP, gMonStillFrontPic_Magikarp), + STILL_FRONT_PIC(GYARADOS, gMonStillFrontPic_Gyarados), + STILL_FRONT_PIC(LAPRAS, gMonStillFrontPic_Lapras), + STILL_FRONT_PIC(DITTO, gMonStillFrontPic_Ditto), + STILL_FRONT_PIC(EEVEE, gMonStillFrontPic_Eevee), + STILL_FRONT_PIC(VAPOREON, gMonStillFrontPic_Vaporeon), + STILL_FRONT_PIC(JOLTEON, gMonStillFrontPic_Jolteon), + STILL_FRONT_PIC(FLAREON, gMonStillFrontPic_Flareon), + STILL_FRONT_PIC(PORYGON, gMonStillFrontPic_Porygon), + STILL_FRONT_PIC(OMANYTE, gMonStillFrontPic_Omanyte), + STILL_FRONT_PIC(OMASTAR, gMonStillFrontPic_Omastar), + STILL_FRONT_PIC(KABUTO, gMonStillFrontPic_Kabuto), + STILL_FRONT_PIC(KABUTOPS, gMonStillFrontPic_Kabutops), + STILL_FRONT_PIC(AERODACTYL, gMonStillFrontPic_Aerodactyl), + STILL_FRONT_PIC(SNORLAX, gMonStillFrontPic_Snorlax), + STILL_FRONT_PIC(ARTICUNO, gMonStillFrontPic_Articuno), + STILL_FRONT_PIC(ZAPDOS, gMonStillFrontPic_Zapdos), + STILL_FRONT_PIC(MOLTRES, gMonStillFrontPic_Moltres), + STILL_FRONT_PIC(DRATINI, gMonStillFrontPic_Dratini), + STILL_FRONT_PIC(DRAGONAIR, gMonStillFrontPic_Dragonair), + STILL_FRONT_PIC(DRAGONITE, gMonStillFrontPic_Dragonite), + STILL_FRONT_PIC(MEWTWO, gMonStillFrontPic_Mewtwo), + STILL_FRONT_PIC(MEW, gMonStillFrontPic_Mew), // Gen II - gMonStillFrontPic_Chikorita, 0x800, 152, - gMonStillFrontPic_Bayleef, 0x800, 153, - gMonStillFrontPic_Meganium, 0x800, 154, - gMonStillFrontPic_Cyndaquil, 0x800, 155, - gMonStillFrontPic_Quilava, 0x800, 156, - gMonStillFrontPic_Typhlosion, 0x800, 157, - gMonStillFrontPic_Totodile, 0x800, 158, - gMonStillFrontPic_Croconaw, 0x800, 159, - gMonStillFrontPic_Feraligatr, 0x800, 160, - gMonStillFrontPic_Sentret, 0x800, 161, - gMonStillFrontPic_Furret, 0x800, 162, - gMonStillFrontPic_Hoothoot, 0x800, 163, - gMonStillFrontPic_Noctowl, 0x800, 164, - gMonStillFrontPic_Ledyba, 0x800, 165, - gMonStillFrontPic_Ledian, 0x800, 166, - gMonStillFrontPic_Spinarak, 0x800, 167, - gMonStillFrontPic_Ariados, 0x800, 168, - gMonStillFrontPic_Crobat, 0x800, 169, - gMonStillFrontPic_Chinchou, 0x800, 170, - gMonStillFrontPic_Lanturn, 0x800, 171, - gMonStillFrontPic_Pichu, 0x800, 172, - gMonStillFrontPic_Cleffa, 0x800, 173, - gMonStillFrontPic_Igglybuff, 0x800, 174, - gMonStillFrontPic_Togepi, 0x800, 175, - gMonStillFrontPic_Togetic, 0x800, 176, - gMonStillFrontPic_Natu, 0x800, 177, - gMonStillFrontPic_Xatu, 0x800, 178, - gMonStillFrontPic_Mareep, 0x800, 179, - gMonStillFrontPic_Flaaffy, 0x800, 180, - gMonStillFrontPic_Ampharos, 0x800, 181, - gMonStillFrontPic_Bellossom, 0x800, 182, - gMonStillFrontPic_Marill, 0x800, 183, - gMonStillFrontPic_Azumarill, 0x800, 184, - gMonStillFrontPic_Sudowoodo, 0x800, 185, - gMonStillFrontPic_Politoed, 0x800, 186, - gMonStillFrontPic_Hoppip, 0x800, 187, - gMonStillFrontPic_Skiploom, 0x800, 188, - gMonStillFrontPic_Jumpluff, 0x800, 189, - gMonStillFrontPic_Aipom, 0x800, 190, - gMonStillFrontPic_Sunkern, 0x800, 191, - gMonStillFrontPic_Sunflora, 0x800, 192, - gMonStillFrontPic_Yanma, 0x800, 193, - gMonStillFrontPic_Wooper, 0x800, 194, - gMonStillFrontPic_Quagsire, 0x800, 195, - gMonStillFrontPic_Espeon, 0x800, 196, - gMonStillFrontPic_Umbreon, 0x800, 197, - gMonStillFrontPic_Murkrow, 0x800, 198, - gMonStillFrontPic_Slowking, 0x800, 199, - gMonStillFrontPic_Misdreavus, 0x800, 200, - gMonStillFrontPic_UnownA, 0x800, 201, - gMonStillFrontPic_Wobbuffet, 0x800, 202, - gMonStillFrontPic_Girafarig, 0x800, 203, - gMonStillFrontPic_Pineco, 0x800, 204, - gMonStillFrontPic_Forretress, 0x800, 205, - gMonStillFrontPic_Dunsparce, 0x800, 206, - gMonStillFrontPic_Gligar, 0x800, 207, - gMonStillFrontPic_Steelix, 0x800, 208, - gMonStillFrontPic_Snubbull, 0x800, 209, - gMonStillFrontPic_Granbull, 0x800, 210, - gMonStillFrontPic_Qwilfish, 0x800, 211, - gMonStillFrontPic_Scizor, 0x800, 212, - gMonStillFrontPic_Shuckle, 0x800, 213, - gMonStillFrontPic_Heracross, 0x800, 214, - gMonStillFrontPic_Sneasel, 0x800, 215, - gMonStillFrontPic_Teddiursa, 0x800, 216, - gMonStillFrontPic_Ursaring, 0x800, 217, - gMonStillFrontPic_Slugma, 0x800, 218, - gMonStillFrontPic_Magcargo, 0x800, 219, - gMonStillFrontPic_Swinub, 0x800, 220, - gMonStillFrontPic_Piloswine, 0x800, 221, - gMonStillFrontPic_Corsola, 0x800, 222, - gMonStillFrontPic_Remoraid, 0x800, 223, - gMonStillFrontPic_Octillery, 0x800, 224, - gMonStillFrontPic_Delibird, 0x800, 225, - gMonStillFrontPic_Mantine, 0x800, 226, - gMonStillFrontPic_Skarmory, 0x800, 227, - gMonStillFrontPic_Houndour, 0x800, 228, - gMonStillFrontPic_Houndoom, 0x800, 229, - gMonStillFrontPic_Kingdra, 0x800, 230, - gMonStillFrontPic_Phanpy, 0x800, 231, - gMonStillFrontPic_Donphan, 0x800, 232, - gMonStillFrontPic_Porygon2, 0x800, 233, - gMonStillFrontPic_Stantler, 0x800, 234, - gMonStillFrontPic_Smeargle, 0x800, 235, - gMonStillFrontPic_Tyrogue, 0x800, 236, - gMonStillFrontPic_Hitmontop, 0x800, 237, - gMonStillFrontPic_Smoochum, 0x800, 238, - gMonStillFrontPic_Elekid, 0x800, 239, - gMonStillFrontPic_Magby, 0x800, 240, - gMonStillFrontPic_Miltank, 0x800, 241, - gMonStillFrontPic_Blissey, 0x800, 242, - gMonStillFrontPic_Raikou, 0x800, 243, - gMonStillFrontPic_Entei, 0x800, 244, - gMonStillFrontPic_Suicune, 0x800, 245, - gMonStillFrontPic_Larvitar, 0x800, 246, - gMonStillFrontPic_Pupitar, 0x800, 247, - gMonStillFrontPic_Tyranitar, 0x800, 248, - gMonStillFrontPic_Lugia, 0x800, 249, - gMonStillFrontPic_HoOh, 0x800, 250, - gMonStillFrontPic_Celebi, 0x800, 251, + STILL_FRONT_PIC(CHIKORITA, gMonStillFrontPic_Chikorita), + STILL_FRONT_PIC(BAYLEEF, gMonStillFrontPic_Bayleef), + STILL_FRONT_PIC(MEGANIUM, gMonStillFrontPic_Meganium), + STILL_FRONT_PIC(CYNDAQUIL, gMonStillFrontPic_Cyndaquil), + STILL_FRONT_PIC(QUILAVA, gMonStillFrontPic_Quilava), + STILL_FRONT_PIC(TYPHLOSION, gMonStillFrontPic_Typhlosion), + STILL_FRONT_PIC(TOTODILE, gMonStillFrontPic_Totodile), + STILL_FRONT_PIC(CROCONAW, gMonStillFrontPic_Croconaw), + STILL_FRONT_PIC(FERALIGATR, gMonStillFrontPic_Feraligatr), + STILL_FRONT_PIC(SENTRET, gMonStillFrontPic_Sentret), + STILL_FRONT_PIC(FURRET, gMonStillFrontPic_Furret), + STILL_FRONT_PIC(HOOTHOOT, gMonStillFrontPic_Hoothoot), + STILL_FRONT_PIC(NOCTOWL, gMonStillFrontPic_Noctowl), + STILL_FRONT_PIC(LEDYBA, gMonStillFrontPic_Ledyba), + STILL_FRONT_PIC(LEDIAN, gMonStillFrontPic_Ledian), + STILL_FRONT_PIC(SPINARAK, gMonStillFrontPic_Spinarak), + STILL_FRONT_PIC(ARIADOS, gMonStillFrontPic_Ariados), + STILL_FRONT_PIC(CROBAT, gMonStillFrontPic_Crobat), + STILL_FRONT_PIC(CHINCHOU, gMonStillFrontPic_Chinchou), + STILL_FRONT_PIC(LANTURN, gMonStillFrontPic_Lanturn), + STILL_FRONT_PIC(PICHU, gMonStillFrontPic_Pichu), + STILL_FRONT_PIC(CLEFFA, gMonStillFrontPic_Cleffa), + STILL_FRONT_PIC(IGGLYBUFF, gMonStillFrontPic_Igglybuff), + STILL_FRONT_PIC(TOGEPI, gMonStillFrontPic_Togepi), + STILL_FRONT_PIC(TOGETIC, gMonStillFrontPic_Togetic), + STILL_FRONT_PIC(NATU, gMonStillFrontPic_Natu), + STILL_FRONT_PIC(XATU, gMonStillFrontPic_Xatu), + STILL_FRONT_PIC(MAREEP, gMonStillFrontPic_Mareep), + STILL_FRONT_PIC(FLAAFFY, gMonStillFrontPic_Flaaffy), + STILL_FRONT_PIC(AMPHAROS, gMonStillFrontPic_Ampharos), + STILL_FRONT_PIC(BELLOSSOM, gMonStillFrontPic_Bellossom), + STILL_FRONT_PIC(MARILL, gMonStillFrontPic_Marill), + STILL_FRONT_PIC(AZUMARILL, gMonStillFrontPic_Azumarill), + STILL_FRONT_PIC(SUDOWOODO, gMonStillFrontPic_Sudowoodo), + STILL_FRONT_PIC(POLITOED, gMonStillFrontPic_Politoed), + STILL_FRONT_PIC(HOPPIP, gMonStillFrontPic_Hoppip), + STILL_FRONT_PIC(SKIPLOOM, gMonStillFrontPic_Skiploom), + STILL_FRONT_PIC(JUMPLUFF, gMonStillFrontPic_Jumpluff), + STILL_FRONT_PIC(AIPOM, gMonStillFrontPic_Aipom), + STILL_FRONT_PIC(SUNKERN, gMonStillFrontPic_Sunkern), + STILL_FRONT_PIC(SUNFLORA, gMonStillFrontPic_Sunflora), + STILL_FRONT_PIC(YANMA, gMonStillFrontPic_Yanma), + STILL_FRONT_PIC(WOOPER, gMonStillFrontPic_Wooper), + STILL_FRONT_PIC(QUAGSIRE, gMonStillFrontPic_Quagsire), + STILL_FRONT_PIC(ESPEON, gMonStillFrontPic_Espeon), + STILL_FRONT_PIC(UMBREON, gMonStillFrontPic_Umbreon), + STILL_FRONT_PIC(MURKROW, gMonStillFrontPic_Murkrow), + STILL_FRONT_PIC(SLOWKING, gMonStillFrontPic_Slowking), + STILL_FRONT_PIC(MISDREAVUS, gMonStillFrontPic_Misdreavus), + STILL_FRONT_PIC(UNOWN, gMonStillFrontPic_UnownA), + STILL_FRONT_PIC(WOBBUFFET, gMonStillFrontPic_Wobbuffet), + STILL_FRONT_PIC(GIRAFARIG, gMonStillFrontPic_Girafarig), + STILL_FRONT_PIC(PINECO, gMonStillFrontPic_Pineco), + STILL_FRONT_PIC(FORRETRESS, gMonStillFrontPic_Forretress), + STILL_FRONT_PIC(DUNSPARCE, gMonStillFrontPic_Dunsparce), + STILL_FRONT_PIC(GLIGAR, gMonStillFrontPic_Gligar), + STILL_FRONT_PIC(STEELIX, gMonStillFrontPic_Steelix), + STILL_FRONT_PIC(SNUBBULL, gMonStillFrontPic_Snubbull), + STILL_FRONT_PIC(GRANBULL, gMonStillFrontPic_Granbull), + STILL_FRONT_PIC(QWILFISH, gMonStillFrontPic_Qwilfish), + STILL_FRONT_PIC(SCIZOR, gMonStillFrontPic_Scizor), + STILL_FRONT_PIC(SHUCKLE, gMonStillFrontPic_Shuckle), + STILL_FRONT_PIC(HERACROSS, gMonStillFrontPic_Heracross), + STILL_FRONT_PIC(SNEASEL, gMonStillFrontPic_Sneasel), + STILL_FRONT_PIC(TEDDIURSA, gMonStillFrontPic_Teddiursa), + STILL_FRONT_PIC(URSARING, gMonStillFrontPic_Ursaring), + STILL_FRONT_PIC(SLUGMA, gMonStillFrontPic_Slugma), + STILL_FRONT_PIC(MAGCARGO, gMonStillFrontPic_Magcargo), + STILL_FRONT_PIC(SWINUB, gMonStillFrontPic_Swinub), + STILL_FRONT_PIC(PILOSWINE, gMonStillFrontPic_Piloswine), + STILL_FRONT_PIC(CORSOLA, gMonStillFrontPic_Corsola), + STILL_FRONT_PIC(REMORAID, gMonStillFrontPic_Remoraid), + STILL_FRONT_PIC(OCTILLERY, gMonStillFrontPic_Octillery), + STILL_FRONT_PIC(DELIBIRD, gMonStillFrontPic_Delibird), + STILL_FRONT_PIC(MANTINE, gMonStillFrontPic_Mantine), + STILL_FRONT_PIC(SKARMORY, gMonStillFrontPic_Skarmory), + STILL_FRONT_PIC(HOUNDOUR, gMonStillFrontPic_Houndour), + STILL_FRONT_PIC(HOUNDOOM, gMonStillFrontPic_Houndoom), + STILL_FRONT_PIC(KINGDRA, gMonStillFrontPic_Kingdra), + STILL_FRONT_PIC(PHANPY, gMonStillFrontPic_Phanpy), + STILL_FRONT_PIC(DONPHAN, gMonStillFrontPic_Donphan), + STILL_FRONT_PIC(PORYGON2, gMonStillFrontPic_Porygon2), + STILL_FRONT_PIC(STANTLER, gMonStillFrontPic_Stantler), + STILL_FRONT_PIC(SMEARGLE, gMonStillFrontPic_Smeargle), + STILL_FRONT_PIC(TYROGUE, gMonStillFrontPic_Tyrogue), + STILL_FRONT_PIC(HITMONTOP, gMonStillFrontPic_Hitmontop), + STILL_FRONT_PIC(SMOOCHUM, gMonStillFrontPic_Smoochum), + STILL_FRONT_PIC(ELEKID, gMonStillFrontPic_Elekid), + STILL_FRONT_PIC(MAGBY, gMonStillFrontPic_Magby), + STILL_FRONT_PIC(MILTANK, gMonStillFrontPic_Miltank), + STILL_FRONT_PIC(BLISSEY, gMonStillFrontPic_Blissey), + STILL_FRONT_PIC(RAIKOU, gMonStillFrontPic_Raikou), + STILL_FRONT_PIC(ENTEI, gMonStillFrontPic_Entei), + STILL_FRONT_PIC(SUICUNE, gMonStillFrontPic_Suicune), + STILL_FRONT_PIC(LARVITAR, gMonStillFrontPic_Larvitar), + STILL_FRONT_PIC(PUPITAR, gMonStillFrontPic_Pupitar), + STILL_FRONT_PIC(TYRANITAR, gMonStillFrontPic_Tyranitar), + STILL_FRONT_PIC(LUGIA, gMonStillFrontPic_Lugia), + STILL_FRONT_PIC(HO_OH, gMonStillFrontPic_HoOh), + STILL_FRONT_PIC(CELEBI, gMonStillFrontPic_Celebi), // Empty slots - gMonStillFrontPic_DoubleQuestionMark, 0x800, 252, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 253, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 254, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 255, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 256, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 257, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 258, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 259, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 260, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 261, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 262, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 263, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 264, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 265, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 266, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 267, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 268, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 269, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 270, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 271, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 272, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 273, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 274, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 275, - gMonStillFrontPic_DoubleQuestionMark, 0x800, 276, + STILL_FRONT_PIC(OLD_UNOWN_B, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_C, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_D, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_E, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_F, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_G, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_H, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_I, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_J, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_K, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_L, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_M, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_N, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_O, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_P, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_Q, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_R, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_S, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_T, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_U, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_V, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_W, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_X, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_Y, gMonStillFrontPic_DoubleQuestionMark), + STILL_FRONT_PIC(OLD_UNOWN_Z, gMonStillFrontPic_DoubleQuestionMark), // Gen III - gMonStillFrontPic_Treecko, 0x800, 277, - gMonStillFrontPic_Grovyle, 0x800, 278, - gMonStillFrontPic_Sceptile, 0x800, 279, - gMonStillFrontPic_Torchic, 0x800, 280, - gMonStillFrontPic_Combusken, 0x800, 281, - gMonStillFrontPic_Blaziken, 0x800, 282, - gMonStillFrontPic_Mudkip, 0x800, 283, - gMonStillFrontPic_Marshtomp, 0x800, 284, - gMonStillFrontPic_Swampert, 0x800, 285, - gMonStillFrontPic_Poochyena, 0x800, 286, - gMonStillFrontPic_Mightyena, 0x800, 287, - gMonStillFrontPic_Zigzagoon, 0x800, 288, - gMonStillFrontPic_Linoone, 0x800, 289, - gMonStillFrontPic_Wurmple, 0x800, 290, - gMonStillFrontPic_Silcoon, 0x800, 291, - gMonStillFrontPic_Beautifly, 0x800, 292, - gMonStillFrontPic_Cascoon, 0x800, 293, - gMonStillFrontPic_Dustox, 0x800, 294, - gMonStillFrontPic_Lotad, 0x800, 295, - gMonStillFrontPic_Lombre, 0x800, 296, - gMonStillFrontPic_Ludicolo, 0x800, 297, - gMonStillFrontPic_Seedot, 0x800, 298, - gMonStillFrontPic_Nuzleaf, 0x800, 299, - gMonStillFrontPic_Shiftry, 0x800, 300, - gMonStillFrontPic_Nincada, 0x800, 301, - gMonStillFrontPic_Ninjask, 0x800, 302, - gMonStillFrontPic_Shedinja, 0x800, 303, - gMonStillFrontPic_Taillow, 0x800, 304, - gMonStillFrontPic_Swellow, 0x800, 305, - gMonStillFrontPic_Shroomish, 0x800, 306, - gMonStillFrontPic_Breloom, 0x800, 307, - gMonStillFrontPic_Spinda, 0x800, 308, - gMonStillFrontPic_Wingull, 0x800, 309, - gMonStillFrontPic_Pelipper, 0x800, 310, - gMonStillFrontPic_Surskit, 0x800, 311, - gMonStillFrontPic_Masquerain, 0x800, 312, - gMonStillFrontPic_Wailmer, 0x800, 313, - gMonStillFrontPic_Wailord, 0x800, 314, - gMonStillFrontPic_Skitty, 0x800, 315, - gMonStillFrontPic_Delcatty, 0x800, 316, - gMonStillFrontPic_Kecleon, 0x800, 317, - gMonStillFrontPic_Baltoy, 0x800, 318, - gMonStillFrontPic_Claydol, 0x800, 319, - gMonStillFrontPic_Nosepass, 0x800, 320, - gMonStillFrontPic_Torkoal, 0x800, 321, - gMonStillFrontPic_Sableye, 0x800, 322, - gMonStillFrontPic_Barboach, 0x800, 323, - gMonStillFrontPic_Whiscash, 0x800, 324, - gMonStillFrontPic_Luvdisc, 0x800, 325, - gMonStillFrontPic_Corphish, 0x800, 326, - gMonStillFrontPic_Crawdaunt, 0x800, 327, - gMonStillFrontPic_Feebas, 0x800, 328, - gMonStillFrontPic_Milotic, 0x800, 329, - gMonStillFrontPic_Carvanha, 0x800, 330, - gMonStillFrontPic_Sharpedo, 0x800, 331, - gMonStillFrontPic_Trapinch, 0x800, 332, - gMonStillFrontPic_Vibrava, 0x800, 333, - gMonStillFrontPic_Flygon, 0x800, 334, - gMonStillFrontPic_Makuhita, 0x800, 335, - gMonStillFrontPic_Hariyama, 0x800, 336, - gMonStillFrontPic_Electrike, 0x800, 337, - gMonStillFrontPic_Manectric, 0x800, 338, - gMonStillFrontPic_Numel, 0x800, 339, - gMonStillFrontPic_Camerupt, 0x800, 340, - gMonStillFrontPic_Spheal, 0x800, 341, - gMonStillFrontPic_Sealeo, 0x800, 342, - gMonStillFrontPic_Walrein, 0x800, 343, - gMonStillFrontPic_Cacnea, 0x800, 344, - gMonStillFrontPic_Cacturne, 0x800, 345, - gMonStillFrontPic_Snorunt, 0x800, 346, - gMonStillFrontPic_Glalie, 0x800, 347, - gMonStillFrontPic_Lunatone, 0x800, 348, - gMonStillFrontPic_Solrock, 0x800, 349, - gMonStillFrontPic_Azurill, 0x800, 350, - gMonStillFrontPic_Spoink, 0x800, 351, - gMonStillFrontPic_Grumpig, 0x800, 352, - gMonStillFrontPic_Plusle, 0x800, 353, - gMonStillFrontPic_Minun, 0x800, 354, - gMonStillFrontPic_Mawile, 0x800, 355, - gMonStillFrontPic_Meditite, 0x800, 356, - gMonStillFrontPic_Medicham, 0x800, 357, - gMonStillFrontPic_Swablu, 0x800, 358, - gMonStillFrontPic_Altaria, 0x800, 359, - gMonStillFrontPic_Wynaut, 0x800, 360, - gMonStillFrontPic_Duskull, 0x800, 361, - gMonStillFrontPic_Dusclops, 0x800, 362, - gMonStillFrontPic_Roselia, 0x800, 363, - gMonStillFrontPic_Slakoth, 0x800, 364, - gMonStillFrontPic_Vigoroth, 0x800, 365, - gMonStillFrontPic_Slaking, 0x800, 366, - gMonStillFrontPic_Gulpin, 0x800, 367, - gMonStillFrontPic_Swalot, 0x800, 368, - gMonStillFrontPic_Tropius, 0x800, 369, - gMonStillFrontPic_Whismur, 0x800, 370, - gMonStillFrontPic_Loudred, 0x800, 371, - gMonStillFrontPic_Exploud, 0x800, 372, - gMonStillFrontPic_Clamperl, 0x800, 373, - gMonStillFrontPic_Huntail, 0x800, 374, - gMonStillFrontPic_Gorebyss, 0x800, 375, - gMonStillFrontPic_Absol, 0x800, 376, - gMonStillFrontPic_Shuppet, 0x800, 377, - gMonStillFrontPic_Banette, 0x800, 378, - gMonStillFrontPic_Seviper, 0x800, 379, - gMonStillFrontPic_Zangoose, 0x800, 380, - gMonStillFrontPic_Relicanth, 0x800, 381, - gMonStillFrontPic_Aron, 0x800, 382, - gMonStillFrontPic_Lairon, 0x800, 383, - gMonStillFrontPic_Aggron, 0x800, 384, - gMonStillFrontPic_Castform, 0x800, 385, - gMonStillFrontPic_Volbeat, 0x800, 386, - gMonStillFrontPic_Illumise, 0x800, 387, - gMonStillFrontPic_Lileep, 0x800, 388, - gMonStillFrontPic_Cradily, 0x800, 389, - gMonStillFrontPic_Anorith, 0x800, 390, - gMonStillFrontPic_Armaldo, 0x800, 391, - gMonStillFrontPic_Ralts, 0x800, 392, - gMonStillFrontPic_Kirlia, 0x800, 393, - gMonStillFrontPic_Gardevoir, 0x800, 394, - gMonStillFrontPic_Bagon, 0x800, 395, - gMonStillFrontPic_Shelgon, 0x800, 396, - gMonStillFrontPic_Salamence, 0x800, 397, - gMonStillFrontPic_Beldum, 0x800, 398, - gMonStillFrontPic_Metang, 0x800, 399, - gMonStillFrontPic_Metagross, 0x800, 400, - gMonStillFrontPic_Regirock, 0x800, 401, - gMonStillFrontPic_Regice, 0x800, 402, - gMonStillFrontPic_Registeel, 0x800, 403, - gMonStillFrontPic_Kyogre, 0x800, 404, - gMonStillFrontPic_Groudon, 0x800, 405, - gMonStillFrontPic_Rayquaza, 0x800, 406, - gMonStillFrontPic_Latias, 0x800, 407, - gMonStillFrontPic_Latios, 0x800, 408, - gMonStillFrontPic_Jirachi, 0x800, 409, - gMonStillFrontPic_Deoxys, 0x800, 410, - gMonStillFrontPic_Chimecho, 0x800, 411, - gMonStillFrontPic_Egg, 0x800, 412, - gMonStillFrontPic_UnownB, 0x800, 413, - gMonStillFrontPic_UnownC, 0x800, 414, - gMonStillFrontPic_UnownD, 0x800, 415, - gMonStillFrontPic_UnownE, 0x800, 416, - gMonStillFrontPic_UnownF, 0x800, 417, - gMonStillFrontPic_UnownG, 0x800, 418, - gMonStillFrontPic_UnownH, 0x800, 419, - gMonStillFrontPic_UnownI, 0x800, 420, - gMonStillFrontPic_UnownJ, 0x800, 421, - gMonStillFrontPic_UnownK, 0x800, 422, - gMonStillFrontPic_UnownL, 0x800, 423, - gMonStillFrontPic_UnownM, 0x800, 424, - gMonStillFrontPic_UnownN, 0x800, 425, - gMonStillFrontPic_UnownO, 0x800, 426, - gMonStillFrontPic_UnownP, 0x800, 427, - gMonStillFrontPic_UnownQ, 0x800, 428, - gMonStillFrontPic_UnownR, 0x800, 429, - gMonStillFrontPic_UnownS, 0x800, 430, - gMonStillFrontPic_UnownT, 0x800, 431, - gMonStillFrontPic_UnownU, 0x800, 432, - gMonStillFrontPic_UnownV, 0x800, 433, - gMonStillFrontPic_UnownW, 0x800, 434, - gMonStillFrontPic_UnownX, 0x800, 435, - gMonStillFrontPic_UnownY, 0x800, 436, - gMonStillFrontPic_UnownZ, 0x800, 437, - gMonStillFrontPic_UnownExclamationMark, 0x800, 438, - gMonStillFrontPic_UnownQuestionMark, 0x800, 439, + STILL_FRONT_PIC(TREECKO, gMonStillFrontPic_Treecko), + STILL_FRONT_PIC(GROVYLE, gMonStillFrontPic_Grovyle), + STILL_FRONT_PIC(SCEPTILE, gMonStillFrontPic_Sceptile), + STILL_FRONT_PIC(TORCHIC, gMonStillFrontPic_Torchic), + STILL_FRONT_PIC(COMBUSKEN, gMonStillFrontPic_Combusken), + STILL_FRONT_PIC(BLAZIKEN, gMonStillFrontPic_Blaziken), + STILL_FRONT_PIC(MUDKIP, gMonStillFrontPic_Mudkip), + STILL_FRONT_PIC(MARSHTOMP, gMonStillFrontPic_Marshtomp), + STILL_FRONT_PIC(SWAMPERT, gMonStillFrontPic_Swampert), + STILL_FRONT_PIC(POOCHYENA, gMonStillFrontPic_Poochyena), + STILL_FRONT_PIC(MIGHTYENA, gMonStillFrontPic_Mightyena), + STILL_FRONT_PIC(ZIGZAGOON, gMonStillFrontPic_Zigzagoon), + STILL_FRONT_PIC(LINOONE, gMonStillFrontPic_Linoone), + STILL_FRONT_PIC(WURMPLE, gMonStillFrontPic_Wurmple), + STILL_FRONT_PIC(SILCOON, gMonStillFrontPic_Silcoon), + STILL_FRONT_PIC(BEAUTIFLY, gMonStillFrontPic_Beautifly), + STILL_FRONT_PIC(CASCOON, gMonStillFrontPic_Cascoon), + STILL_FRONT_PIC(DUSTOX, gMonStillFrontPic_Dustox), + STILL_FRONT_PIC(LOTAD, gMonStillFrontPic_Lotad), + STILL_FRONT_PIC(LOMBRE, gMonStillFrontPic_Lombre), + STILL_FRONT_PIC(LUDICOLO, gMonStillFrontPic_Ludicolo), + STILL_FRONT_PIC(SEEDOT, gMonStillFrontPic_Seedot), + STILL_FRONT_PIC(NUZLEAF, gMonStillFrontPic_Nuzleaf), + STILL_FRONT_PIC(SHIFTRY, gMonStillFrontPic_Shiftry), + STILL_FRONT_PIC(NINCADA, gMonStillFrontPic_Nincada), + STILL_FRONT_PIC(NINJASK, gMonStillFrontPic_Ninjask), + STILL_FRONT_PIC(SHEDINJA, gMonStillFrontPic_Shedinja), + STILL_FRONT_PIC(TAILLOW, gMonStillFrontPic_Taillow), + STILL_FRONT_PIC(SWELLOW, gMonStillFrontPic_Swellow), + STILL_FRONT_PIC(SHROOMISH, gMonStillFrontPic_Shroomish), + STILL_FRONT_PIC(BRELOOM, gMonStillFrontPic_Breloom), + STILL_FRONT_PIC(SPINDA, gMonStillFrontPic_Spinda), + STILL_FRONT_PIC(WINGULL, gMonStillFrontPic_Wingull), + STILL_FRONT_PIC(PELIPPER, gMonStillFrontPic_Pelipper), + STILL_FRONT_PIC(SURSKIT, gMonStillFrontPic_Surskit), + STILL_FRONT_PIC(MASQUERAIN, gMonStillFrontPic_Masquerain), + STILL_FRONT_PIC(WAILMER, gMonStillFrontPic_Wailmer), + STILL_FRONT_PIC(WAILORD, gMonStillFrontPic_Wailord), + STILL_FRONT_PIC(SKITTY, gMonStillFrontPic_Skitty), + STILL_FRONT_PIC(DELCATTY, gMonStillFrontPic_Delcatty), + STILL_FRONT_PIC(KECLEON, gMonStillFrontPic_Kecleon), + STILL_FRONT_PIC(BALTOY, gMonStillFrontPic_Baltoy), + STILL_FRONT_PIC(CLAYDOL, gMonStillFrontPic_Claydol), + STILL_FRONT_PIC(NOSEPASS, gMonStillFrontPic_Nosepass), + STILL_FRONT_PIC(TORKOAL, gMonStillFrontPic_Torkoal), + STILL_FRONT_PIC(SABLEYE, gMonStillFrontPic_Sableye), + STILL_FRONT_PIC(BARBOACH, gMonStillFrontPic_Barboach), + STILL_FRONT_PIC(WHISCASH, gMonStillFrontPic_Whiscash), + STILL_FRONT_PIC(LUVDISC, gMonStillFrontPic_Luvdisc), + STILL_FRONT_PIC(CORPHISH, gMonStillFrontPic_Corphish), + STILL_FRONT_PIC(CRAWDAUNT, gMonStillFrontPic_Crawdaunt), + STILL_FRONT_PIC(FEEBAS, gMonStillFrontPic_Feebas), + STILL_FRONT_PIC(MILOTIC, gMonStillFrontPic_Milotic), + STILL_FRONT_PIC(CARVANHA, gMonStillFrontPic_Carvanha), + STILL_FRONT_PIC(SHARPEDO, gMonStillFrontPic_Sharpedo), + STILL_FRONT_PIC(TRAPINCH, gMonStillFrontPic_Trapinch), + STILL_FRONT_PIC(VIBRAVA, gMonStillFrontPic_Vibrava), + STILL_FRONT_PIC(FLYGON, gMonStillFrontPic_Flygon), + STILL_FRONT_PIC(MAKUHITA, gMonStillFrontPic_Makuhita), + STILL_FRONT_PIC(HARIYAMA, gMonStillFrontPic_Hariyama), + STILL_FRONT_PIC(ELECTRIKE, gMonStillFrontPic_Electrike), + STILL_FRONT_PIC(MANECTRIC, gMonStillFrontPic_Manectric), + STILL_FRONT_PIC(NUMEL, gMonStillFrontPic_Numel), + STILL_FRONT_PIC(CAMERUPT, gMonStillFrontPic_Camerupt), + STILL_FRONT_PIC(SPHEAL, gMonStillFrontPic_Spheal), + STILL_FRONT_PIC(SEALEO, gMonStillFrontPic_Sealeo), + STILL_FRONT_PIC(WALREIN, gMonStillFrontPic_Walrein), + STILL_FRONT_PIC(CACNEA, gMonStillFrontPic_Cacnea), + STILL_FRONT_PIC(CACTURNE, gMonStillFrontPic_Cacturne), + STILL_FRONT_PIC(SNORUNT, gMonStillFrontPic_Snorunt), + STILL_FRONT_PIC(GLALIE, gMonStillFrontPic_Glalie), + STILL_FRONT_PIC(LUNATONE, gMonStillFrontPic_Lunatone), + STILL_FRONT_PIC(SOLROCK, gMonStillFrontPic_Solrock), + STILL_FRONT_PIC(AZURILL, gMonStillFrontPic_Azurill), + STILL_FRONT_PIC(SPOINK, gMonStillFrontPic_Spoink), + STILL_FRONT_PIC(GRUMPIG, gMonStillFrontPic_Grumpig), + STILL_FRONT_PIC(PLUSLE, gMonStillFrontPic_Plusle), + STILL_FRONT_PIC(MINUN, gMonStillFrontPic_Minun), + STILL_FRONT_PIC(MAWILE, gMonStillFrontPic_Mawile), + STILL_FRONT_PIC(MEDITITE, gMonStillFrontPic_Meditite), + STILL_FRONT_PIC(MEDICHAM, gMonStillFrontPic_Medicham), + STILL_FRONT_PIC(SWABLU, gMonStillFrontPic_Swablu), + STILL_FRONT_PIC(ALTARIA, gMonStillFrontPic_Altaria), + STILL_FRONT_PIC(WYNAUT, gMonStillFrontPic_Wynaut), + STILL_FRONT_PIC(DUSKULL, gMonStillFrontPic_Duskull), + STILL_FRONT_PIC(DUSCLOPS, gMonStillFrontPic_Dusclops), + STILL_FRONT_PIC(ROSELIA, gMonStillFrontPic_Roselia), + STILL_FRONT_PIC(SLAKOTH, gMonStillFrontPic_Slakoth), + STILL_FRONT_PIC(VIGOROTH, gMonStillFrontPic_Vigoroth), + STILL_FRONT_PIC(SLAKING, gMonStillFrontPic_Slaking), + STILL_FRONT_PIC(GULPIN, gMonStillFrontPic_Gulpin), + STILL_FRONT_PIC(SWALOT, gMonStillFrontPic_Swalot), + STILL_FRONT_PIC(TROPIUS, gMonStillFrontPic_Tropius), + STILL_FRONT_PIC(WHISMUR, gMonStillFrontPic_Whismur), + STILL_FRONT_PIC(LOUDRED, gMonStillFrontPic_Loudred), + STILL_FRONT_PIC(EXPLOUD, gMonStillFrontPic_Exploud), + STILL_FRONT_PIC(CLAMPERL, gMonStillFrontPic_Clamperl), + STILL_FRONT_PIC(HUNTAIL, gMonStillFrontPic_Huntail), + STILL_FRONT_PIC(GOREBYSS, gMonStillFrontPic_Gorebyss), + STILL_FRONT_PIC(ABSOL, gMonStillFrontPic_Absol), + STILL_FRONT_PIC(SHUPPET, gMonStillFrontPic_Shuppet), + STILL_FRONT_PIC(BANETTE, gMonStillFrontPic_Banette), + STILL_FRONT_PIC(SEVIPER, gMonStillFrontPic_Seviper), + STILL_FRONT_PIC(ZANGOOSE, gMonStillFrontPic_Zangoose), + STILL_FRONT_PIC(RELICANTH, gMonStillFrontPic_Relicanth), + STILL_FRONT_PIC(ARON, gMonStillFrontPic_Aron), + STILL_FRONT_PIC(LAIRON, gMonStillFrontPic_Lairon), + STILL_FRONT_PIC(AGGRON, gMonStillFrontPic_Aggron), + STILL_FRONT_PIC(CASTFORM, gMonStillFrontPic_Castform), + STILL_FRONT_PIC(VOLBEAT, gMonStillFrontPic_Volbeat), + STILL_FRONT_PIC(ILLUMISE, gMonStillFrontPic_Illumise), + STILL_FRONT_PIC(LILEEP, gMonStillFrontPic_Lileep), + STILL_FRONT_PIC(CRADILY, gMonStillFrontPic_Cradily), + STILL_FRONT_PIC(ANORITH, gMonStillFrontPic_Anorith), + STILL_FRONT_PIC(ARMALDO, gMonStillFrontPic_Armaldo), + STILL_FRONT_PIC(RALTS, gMonStillFrontPic_Ralts), + STILL_FRONT_PIC(KIRLIA, gMonStillFrontPic_Kirlia), + STILL_FRONT_PIC(GARDEVOIR, gMonStillFrontPic_Gardevoir), + STILL_FRONT_PIC(BAGON, gMonStillFrontPic_Bagon), + STILL_FRONT_PIC(SHELGON, gMonStillFrontPic_Shelgon), + STILL_FRONT_PIC(SALAMENCE, gMonStillFrontPic_Salamence), + STILL_FRONT_PIC(BELDUM, gMonStillFrontPic_Beldum), + STILL_FRONT_PIC(METANG, gMonStillFrontPic_Metang), + STILL_FRONT_PIC(METAGROSS, gMonStillFrontPic_Metagross), + STILL_FRONT_PIC(REGIROCK, gMonStillFrontPic_Regirock), + STILL_FRONT_PIC(REGICE, gMonStillFrontPic_Regice), + STILL_FRONT_PIC(REGISTEEL, gMonStillFrontPic_Registeel), + STILL_FRONT_PIC(KYOGRE, gMonStillFrontPic_Kyogre), + STILL_FRONT_PIC(GROUDON, gMonStillFrontPic_Groudon), + STILL_FRONT_PIC(RAYQUAZA, gMonStillFrontPic_Rayquaza), + STILL_FRONT_PIC(LATIAS, gMonStillFrontPic_Latias), + STILL_FRONT_PIC(LATIOS, gMonStillFrontPic_Latios), + STILL_FRONT_PIC(JIRACHI, gMonStillFrontPic_Jirachi), + STILL_FRONT_PIC(DEOXYS, gMonStillFrontPic_Deoxys), + STILL_FRONT_PIC(CHIMECHO, gMonStillFrontPic_Chimecho), + STILL_FRONT_PIC(EGG, gMonStillFrontPic_Egg), + STILL_FRONT_PIC(UNOWN_B, gMonStillFrontPic_UnownB), + STILL_FRONT_PIC(UNOWN_C, gMonStillFrontPic_UnownC), + STILL_FRONT_PIC(UNOWN_D, gMonStillFrontPic_UnownD), + STILL_FRONT_PIC(UNOWN_E, gMonStillFrontPic_UnownE), + STILL_FRONT_PIC(UNOWN_F, gMonStillFrontPic_UnownF), + STILL_FRONT_PIC(UNOWN_G, gMonStillFrontPic_UnownG), + STILL_FRONT_PIC(UNOWN_H, gMonStillFrontPic_UnownH), + STILL_FRONT_PIC(UNOWN_I, gMonStillFrontPic_UnownI), + STILL_FRONT_PIC(UNOWN_J, gMonStillFrontPic_UnownJ), + STILL_FRONT_PIC(UNOWN_K, gMonStillFrontPic_UnownK), + STILL_FRONT_PIC(UNOWN_L, gMonStillFrontPic_UnownL), + STILL_FRONT_PIC(UNOWN_M, gMonStillFrontPic_UnownM), + STILL_FRONT_PIC(UNOWN_N, gMonStillFrontPic_UnownN), + STILL_FRONT_PIC(UNOWN_O, gMonStillFrontPic_UnownO), + STILL_FRONT_PIC(UNOWN_P, gMonStillFrontPic_UnownP), + STILL_FRONT_PIC(UNOWN_Q, gMonStillFrontPic_UnownQ), + STILL_FRONT_PIC(UNOWN_R, gMonStillFrontPic_UnownR), + STILL_FRONT_PIC(UNOWN_S, gMonStillFrontPic_UnownS), + STILL_FRONT_PIC(UNOWN_T, gMonStillFrontPic_UnownT), + STILL_FRONT_PIC(UNOWN_U, gMonStillFrontPic_UnownU), + STILL_FRONT_PIC(UNOWN_V, gMonStillFrontPic_UnownV), + STILL_FRONT_PIC(UNOWN_W, gMonStillFrontPic_UnownW), + STILL_FRONT_PIC(UNOWN_X, gMonStillFrontPic_UnownX), + STILL_FRONT_PIC(UNOWN_Y, gMonStillFrontPic_UnownY), + STILL_FRONT_PIC(UNOWN_Z, gMonStillFrontPic_UnownZ), + STILL_FRONT_PIC(UNOWN_EMARK, gMonStillFrontPic_UnownExclamationMark), + STILL_FRONT_PIC(UNOWN_QMARK, gMonStillFrontPic_UnownQuestionMark), }; diff --git a/src/dragon.c b/src/dragon.c index 49f1b57c8..156d10ce1 100644 --- a/src/dragon.c +++ b/src/dragon.c @@ -208,13 +208,13 @@ void sub_8113064(struct Sprite *sprite) sprite->data[3] = gBattleAnimArgs[4]; sprite->data[5] = gBattleAnimArgs[5]; sprite->invisible = 1; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); sprite->callback = sub_80A66DC; } static void sub_8113100(struct Sprite *sprite) { - sub_80A6838(sprite); + SetSpriteCoordsToAnimAttackerCoords(sprite); sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) @@ -235,7 +235,7 @@ static void sub_8113100(struct Sprite *sprite) sprite->data[0] = gBattleAnimArgs[4]; sprite->callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); } void sub_81131B4(struct Sprite *sprite) @@ -253,8 +253,8 @@ void sub_81131B4(struct Sprite *sprite) sub_80A6864(sprite, gBattleAnimArgs[1]); sprite->pos1.y += gBattleAnimArgs[2]; - sprite->callback = sub_80A67D8; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + sprite->callback = RunStoredCallbackWhenAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); } void sub_8113224(struct Sprite *sprite) diff --git a/src/effects_2.c b/src/effects_2.c deleted file mode 100644 index 82336be5c..000000000 --- a/src/effects_2.c +++ /dev/null @@ -1,1197 +0,0 @@ -#include "global.h" -#include "battle_anim.h" -#include "constants/rgb.h" - -extern void sub_8103448(struct Sprite *); -extern void sub_8103498(struct Sprite *); -extern void sub_810358C(struct Sprite *); -extern void sub_8103620(struct Sprite *); -extern void sub_80A77C8(struct Sprite *); -extern void sub_81037D8(struct Sprite *); -extern void sub_810387C(struct Sprite *); -extern void sub_81038C8(struct Sprite *); -extern void sub_8103AA4(struct Sprite *); -extern void TranslateAnimSpriteToTargetMonLocation(struct Sprite *); -extern void sub_8108C94(struct Sprite *); -extern void sub_80A78AC(struct Sprite *); -extern void sub_8103FE8(struct Sprite *); -extern void sub_8104088(struct Sprite *); -extern void sub_810413C(struct Sprite *); -extern void sub_81041C4(struct Sprite *); -extern void sub_8104304(struct Sprite *); -extern void sub_8104364(struct Sprite *); -extern void sub_8104414(struct Sprite *); -extern void sub_8104B1C(struct Sprite *); -extern void sub_8104BAC(struct Sprite *); -extern void sub_810501C(struct Sprite *); -extern void sub_80A7938(struct Sprite *); -extern void sub_8105538(struct Sprite *); -extern void sub_81051C4(struct Sprite *); -extern void sub_81052A4(struct Sprite *); -extern void sub_81054E8(struct Sprite *); -extern void sub_8105C48(struct Sprite *); -extern void sub_8105DE8(struct Sprite *); -extern void sub_8105E60(struct Sprite *); -extern void sub_8106140(struct Sprite *); -extern void sub_81061C4(struct Sprite *); -extern void sub_810624C(struct Sprite *); -extern void sub_810673C(struct Sprite *); -extern void sub_8106878(struct Sprite *); -extern void sub_8106944(struct Sprite *); -extern void sub_81069B8(struct Sprite *); -extern void sub_81069D0(struct Sprite *); -extern void sub_8106AD0(struct Sprite *); -extern void sub_8106B54(struct Sprite *); -extern void sub_8106C80(struct Sprite *); -extern void sub_8106CD0(struct Sprite *); -extern void sub_8106E00(struct Sprite *); -extern void sub_8106F60(struct Sprite *); -extern void sub_8106F00(struct Sprite *); -extern void sub_81070AC(struct Sprite *); - -const struct SpriteTemplate gUnknown_08593264 = -{ - .tileTag = ANIM_TAG_FINGER, - .paletteTag = ANIM_TAG_FINGER, - .oam = &gUnknown_08524914, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8103448, -}; - -const union AnimCmd gUnknown_0859327C[] = -{ - ANIMCMD_FRAME(4, 1), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_08593284[] = -{ - gUnknown_0859327C, -}; - -const struct SpriteTemplate gUnknown_08593288 = -{ - .tileTag = ANIM_TAG_MUSIC_NOTES, - .paletteTag = ANIM_TAG_MUSIC_NOTES, - .oam = &gUnknown_0852490C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8103498, -}; - -const struct SpriteTemplate gUnknown_085932A0 = -{ - .tileTag = 0, - .paletteTag = 0, - .oam = &gDummyOamData, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810358C, -}; - -extern const union AffineAnimCmd *const gUnknown_08597060[]; -const struct SpriteTemplate gUnknown_085932B8 = -{ - .tileTag = ANIM_TAG_CLAMP, - .paletteTag = ANIM_TAG_CLAMP, - .oam = &gUnknown_08524A9C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_08597060, - .callback = sub_8103620, -}; - -const union AnimCmd gUnknown_085932D0[] = -{ - ANIMCMD_FRAME(0, 9), - ANIMCMD_FRAME(16, 3), - ANIMCMD_FRAME(32, 3), - ANIMCMD_FRAME(48, 3), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_085932E4[] = -{ - gUnknown_085932D0, -}; - -const union AffineAnimCmd gUnknown_085932E8[] = -{ - AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0), - AFFINEANIMCMD_FRAME(0x9, 0x9, 0, 18), - AFFINEANIMCMD_END, -}; - -const union AffineAnimCmd *const gUnknown_08593300[] = -{ - gUnknown_085932E8, -}; - -const struct SpriteTemplate gUnknown_08593304 = -{ - .tileTag = ANIM_TAG_UNUSED_EXPLOSION, - .paletteTag = ANIM_TAG_UNUSED_EXPLOSION, - .oam = &gUnknown_08524974, - .anims = gUnknown_085932E4, - .images = NULL, - .affineAnims = gUnknown_08593300, - .callback = sub_80A77C8, -}; - -const union AnimCmd gUnknown_0859331C[] = -{ - ANIMCMD_FRAME(0, 3, .hFlip = TRUE), - ANIMCMD_FRAME(8, 3, .hFlip = TRUE), - ANIMCMD_FRAME(16, 3, .hFlip = TRUE), - ANIMCMD_FRAME(24, 3, .hFlip = TRUE), - ANIMCMD_FRAME(32, 3, .hFlip = TRUE), - ANIMCMD_FRAME(40, 3, .hFlip = TRUE), - ANIMCMD_FRAME(48, 3, .hFlip = TRUE), - ANIMCMD_LOOP(1), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_08593340[] = -{ - gUnknown_0859331C, -}; - -const struct SpriteTemplate gUnknown_08593344 = -{ - .tileTag = ANIM_TAG_ALERT, - .paletteTag = ANIM_TAG_ALERT, - .oam = &gUnknown_08524934, - .anims = gUnknown_08593340, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81037D8, -}; - -const union AffineAnimCmd gUnknown_0859335C[] = -{ - AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0x14, 0x0, 0, 12), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32), - AFFINEANIMCMD_END, -}; - -const union AffineAnimCmd *const gUnknown_0859337C[] = -{ - gUnknown_0859335C, -}; - -const struct SpriteTemplate gBattleAnimSpriteTemplate_8593380 = -{ - .tileTag = ANIM_TAG_SWORD, - .paletteTag = ANIM_TAG_SWORD, - .oam = &gUnknown_08524ADC, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_0859337C, - .callback = sub_810387C, -}; - -const struct SpriteTemplate gSonicBoomSpriteTemplate = -{ - .tileTag = ANIM_TAG_AIR_WAVE, - .paletteTag = ANIM_TAG_AIR_WAVE, - .oam = &gUnknown_08524B14, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81038C8, -}; - -const struct SpriteTemplate gUnknown_085933B0 = -{ - .tileTag = ANIM_TAG_AIR_WAVE, - .paletteTag = ANIM_TAG_AIR_WAVE, - .oam = &gUnknown_08524A54, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8103AA4, -}; - -const union AffineAnimCmd gUnknown_085933C8[] = -{ - AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0), - AFFINEANIMCMD_FRAME(0x7, 0x7, 0, -56), - AFFINEANIMCMD_END, -}; - -const union AffineAnimCmd gUnknown_085933E0[] = -{ - AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10), - AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10), - AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10), - AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10), - AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10), - AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10), - AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10), - AFFINEANIMCMD_END, -}; - -const union AffineAnimCmd *const gUnknown_08593420[] = -{ - gUnknown_085933C8, -}; - -const union AffineAnimCmd *const gUnknown_08593424[] = -{ - gUnknown_085933E0, -}; - -const struct SpriteTemplate gSupersonicWaveSpriteTemplate = -{ - .tileTag = ANIM_TAG_GOLD_RING, - .paletteTag = ANIM_TAG_GOLD_RING, - .oam = &gUnknown_08524A14, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_08593420, - .callback = TranslateAnimSpriteToTargetMonLocation, -}; - -const struct SpriteTemplate gScreechWaveSpriteTemplate = -{ - .tileTag = ANIM_TAG_PURPLE_RING, - .paletteTag = ANIM_TAG_PURPLE_RING, - .oam = &gUnknown_08524A14, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_08593420, - .callback = TranslateAnimSpriteToTargetMonLocation, -}; - -const struct SpriteTemplate gUnknown_08593458 = -{ - .tileTag = ANIM_TAG_METAL_SOUND_WAVES, - .paletteTag = ANIM_TAG_METAL_SOUND_WAVES, - .oam = &gUnknown_08524A1C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_08593420, - .callback = TranslateAnimSpriteToTargetMonLocation, -}; - -const struct SpriteTemplate gUnknown_08593470 = -{ - .tileTag = ANIM_TAG_BLUE_RING_2, - .paletteTag = ANIM_TAG_BLUE_RING_2, - .oam = &gUnknown_08524A14, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_08593424, - .callback = sub_8108C94, -}; - -const struct SpriteTemplate gUnknown_08593488 = -{ - .tileTag = ANIM_TAG_LARGE_FRESH_EGG, - .paletteTag = ANIM_TAG_LARGE_FRESH_EGG, - .oam = &gUnknown_0852490C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A78AC, -}; - -const struct SpriteTemplate gUnknown_085934A0 = -{ - .tileTag = ANIM_TAG_UNUSED_VOID_LINES, - .paletteTag = ANIM_TAG_UNUSED_VOID_LINES, - .oam = &gUnknown_08524A3C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8103FE8, -}; - -const union AnimCmd gUnknown_085934B8[] = -{ - ANIMCMD_FRAME(8, 1), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_085934C0[] = -{ - gUnknown_085934B8, -}; - -const union AffineAnimCmd gUnknown_085934C4[] = -{ - AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1), - AFFINEANIMCMD_JUMP(0), -}; - -const union AffineAnimCmd *const gUnknown_085934D4[] = -{ - gUnknown_085934C4, -}; - -const struct SpriteTemplate gUnknown_085934D8 = -{ - .tileTag = ANIM_TAG_COIN, - .paletteTag = ANIM_TAG_COIN, - .oam = &gUnknown_0852496C, - .anims = gUnknown_085934C0, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8104088, -}; - -const struct SpriteTemplate gUnknown_085934F0 = -{ - .tileTag = ANIM_TAG_COIN, - .paletteTag = ANIM_TAG_COIN, - .oam = &gUnknown_0852496C, - .anims = gUnknown_085934C0, - .images = NULL, - .affineAnims = gUnknown_085934D4, - .callback = sub_810413C, -}; - -const union AffineAnimCmd gUnknown_08593508[] = -{ - AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1), - AFFINEANIMCMD_JUMP(0), -}; - -const union AffineAnimCmd *const gUnknown_08593518[] = -{ - gUnknown_08593508, -}; - -const struct SpriteTemplate gUnknown_0859351C = -{ - .tileTag = ANIM_TAG_SEED, - .paletteTag = ANIM_TAG_SEED, - .oam = &gUnknown_0852496C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_08593518, - .callback = sub_81041C4, -}; - -const union AffineAnimCmd gUnknown_08593534[] = -{ - AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0x4, 0x0, 0, 40), - AFFINEANIMCMD_END, -}; - -const union AffineAnimCmd *const gUnknown_0859354C[] = -{ - gUnknown_08593534, -}; - -const struct SpriteTemplate gUnknown_08593550 = -{ - .tileTag = ANIM_TAG_GUST, - .paletteTag = ANIM_TAG_GUST, - .oam = &gUnknown_085249BC, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_0859354C, - .callback = sub_8104304, -}; - -const union AnimCmd gUnknown_08593568[] = -{ - ANIMCMD_FRAME(0, 3), - ANIMCMD_FRAME(16, 3), - ANIMCMD_FRAME(32, 20), - ANIMCMD_END, -}; - -const union AnimCmd gUnknown_08593578[] = -{ - ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME(32, 20, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_08593588[] = -{ - gUnknown_08593568, - gUnknown_08593578, -}; - -const struct SpriteTemplate gUnknown_08593590 = -{ - .tileTag = ANIM_TAG_CUT, - .paletteTag = ANIM_TAG_CUT, - .oam = &gUnknown_08524A34, - .anims = gUnknown_08593588, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8104364, -}; - -const union AnimCmd gUnknown_085935A8[] = -{ - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(16, 2), - ANIMCMD_FRAME(32, 1), - ANIMCMD_END, -}; - -const union AnimCmd gUnknown_085935B8[] = -{ - ANIMCMD_FRAME(0, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME(16, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME(32, 1, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_085935C8[] = -{ - gUnknown_085935A8, - gUnknown_085935B8, -}; - -const struct SpriteTemplate gUnknown_085935D0 = -{ - .tileTag = ANIM_TAG_CUT, - .paletteTag = ANIM_TAG_CUT, - .oam = &gUnknown_08524A34, - .anims = gUnknown_085935C8, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8104414, -}; - -const union AffineAnimCmd gUnknown_085935E8[] = -{ - AFFINEANIMCMD_FRAME(-6, 4, 0, 8), - AFFINEANIMCMD_FRAME(10, -10, 0, 8), - AFFINEANIMCMD_FRAME(-4, 6, 0, 8), - AFFINEANIMCMD_END, -}; - -const union AffineAnimCmd gUnknown_08593608[] = -{ - AFFINEANIMCMD_FRAME(-4, -5, 0, 12), - AFFINEANIMCMD_FRAME(0, 0, 0, 24), - AFFINEANIMCMD_FRAME(4, 5, 0, 12), - AFFINEANIMCMD_END, -}; - -const union AnimCmd gUnknown_08593628[] = -{ - ANIMCMD_FRAME(0, 4, .hFlip = TRUE), - ANIMCMD_FRAME(4, 40, .hFlip = TRUE), - ANIMCMD_FRAME(8, 4, .hFlip = TRUE), - ANIMCMD_FRAME(12, 4, .hFlip = TRUE), - ANIMCMD_END, -}; - -const union AnimCmd gUnknown_0859363C[] = -{ - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(4, 40), - ANIMCMD_FRAME(8, 4), - ANIMCMD_FRAME(12, 4), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_08593650[] = -{ - gUnknown_08593628, - gUnknown_0859363C, -}; - -const struct SpriteTemplate gUnknown_08593658 = -{ - .tileTag = ANIM_TAG_BREATH, - .paletteTag = ANIM_TAG_BREATH, - .oam = &gUnknown_0852490C, - .anims = gUnknown_08593650, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8104B1C, -}; - -const union AffineAnimCmd gUnknown_08593670[] = -{ - AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 8), - AFFINEANIMCMD_FRAME(0xFFF5, 0xFFF5, 0, 8), - AFFINEANIMCMD_END, -}; - -const union AffineAnimCmd *const gUnknown_08593688[] = -{ - gUnknown_08593670, -}; - -const struct SpriteTemplate gUnknown_0859368C = -{ - .tileTag = ANIM_TAG_ANGER, - .paletteTag = ANIM_TAG_ANGER, - .oam = &gUnknown_0852496C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_08593688, - .callback = sub_8104BAC, -}; - -const union AffineAnimCmd gUnknown_085936A4[] = -{ - AFFINEANIMCMD_FRAME(-10, 9, 0, 7), - AFFINEANIMCMD_FRAME(20, -20, 0, 7), - AFFINEANIMCMD_FRAME(-20, 20, 0, 7), - AFFINEANIMCMD_FRAME(10, -9, 0, 7), - AFFINEANIMCMD_LOOP(2), - AFFINEANIMCMD_END, -}; - -const struct SpriteTemplate gUnknown_085936D4 = -{ - .tileTag = ANIM_TAG_PENCIL, - .paletteTag = ANIM_TAG_PENCIL, - .oam = &gUnknown_08524914, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810501C, -}; - -const struct SpriteTemplate gUnknown_085936EC = -{ - .tileTag = ANIM_TAG_SNORE_Z, - .paletteTag = ANIM_TAG_SNORE_Z, - .oam = &gUnknown_08524914, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A7938, -}; - -const union AnimCmd gUnknown_08593704[] = -{ - ANIMCMD_FRAME(0, 5), - ANIMCMD_FRAME(16, 5), - ANIMCMD_FRAME(32, 5), - ANIMCMD_FRAME(48, 5), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_08593718[] = -{ - gUnknown_08593704, -}; -//* -const struct SpriteTemplate gBattleAnimSpriteTemplate_859371C = -{ - .tileTag = ANIM_TAG_EXPLOSION, - .paletteTag = ANIM_TAG_EXPLOSION, - .oam = &gUnknown_08524914, - .anims = gUnknown_08593718, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A77C8, -}; - -const union AffineAnimCmd gUnknown_08593734[] = -{ - AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2), - AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 4), - AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2), - AFFINEANIMCMD_JUMP(0), -}; - -const union AffineAnimCmd gUnknown_08593754[] = -{ - AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), - AFFINEANIMCMD_END, -}; - -const union AffineAnimCmd gUnknown_08593764[] = -{ - AFFINEANIMCMD_FRAME(0xFFF8, 0x4, 0, 8), - AFFINEANIMCMD_LOOP(0), - AFFINEANIMCMD_FRAME(0x10, 0xFFF8, 0, 8), - AFFINEANIMCMD_FRAME(0xFFF0, 0x8, 0, 8), - AFFINEANIMCMD_LOOP(1), - AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 15), - AFFINEANIMCMD_END, -}; - -const union AffineAnimCmd *const gUnknown_085937A4[] = -{ - gUnknown_08593734, - gUnknown_08593754, - gUnknown_08593764, -}; -//* -const struct SpriteTemplate gUnknown_085937B0 = -{ - .tileTag = ANIM_TAG_BREAKING_EGG, - .paletteTag = ANIM_TAG_BREAKING_EGG, - .oam = &gUnknown_08524AF4, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_085937A4, - .callback = sub_8105538, -}; - -const union AffineAnimCmd gUnknown_085937C8[] = -{ - AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), - AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 30), - AFFINEANIMCMD_END_ALT(1), -}; - -const union AffineAnimCmd gUnknown_085937E0[] = -{ - AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), - AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 15), - AFFINEANIMCMD_END_ALT(1), -}; - -const union AffineAnimCmd gUnknown_085937F8[] = -{ - AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), - AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 45), - AFFINEANIMCMD_END_ALT(1), -}; - -const union AffineAnimCmd *const gUnknown_08593810[] = -{ - gUnknown_085937C8, - gUnknown_085937E0, -}; - -const union AffineAnimCmd *const gUnknown_08593818[] = -{ - gUnknown_085937F8, -}; - -const struct SpriteTemplate gUnknown_0859381C = -{ - .tileTag = ANIM_TAG_THIN_RING, - .paletteTag = ANIM_TAG_THIN_RING, - .oam = &gUnknown_085249DC, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_08593810, - .callback = sub_80A77C8, -}; -//* -const union AffineAnimCmd gUnknown_08593834[] = -{ - AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), - AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 30), - AFFINEANIMCMD_END_ALT(1), -}; - -const union AffineAnimCmd *const gUnknown_0859384C[] = -{ - gUnknown_08593834, -}; - -const struct SpriteTemplate gUnknown_08593850 = -{ - .tileTag = ANIM_TAG_THIN_RING, - .paletteTag = ANIM_TAG_THIN_RING, - .oam = &gUnknown_08524AFC, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_0859384C, - .callback = sub_80A77C8, -}; - -const struct SpriteTemplate gUnknown_08593868 = -{ - .tileTag = ANIM_TAG_THIN_RING, - .paletteTag = ANIM_TAG_THIN_RING, - .oam = &gUnknown_08524AFC, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_08593810, - .callback = sub_81051C4, -}; - -const struct SpriteTemplate gUnknown_08593880 = -{ - .tileTag = ANIM_TAG_THIN_RING, - .paletteTag = ANIM_TAG_THIN_RING, - .oam = &gUnknown_08524AFC, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_08593818, - .callback = sub_81052A4, -}; - -const struct SpriteTemplate gBattleAnimSpriteTemplate_8593898 = -{ - .tileTag = ANIM_TAG_THIN_RING, - .paletteTag = ANIM_TAG_THIN_RING, - .oam = &gUnknown_08524AFC, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_08593810, - .callback = sub_81054E8, -}; - -const union AffineAnimCmd gUnknown_085938B0[] = -{ - AFFINEANIMCMD_FRAME(96, -13, 0, 8), - AFFINEANIMCMD_END, -}; - -const union AnimCmd gUnknown_085938C0[] = -{ - ANIMCMD_FRAME(0, 3), - ANIMCMD_FRAME(4, 3), - ANIMCMD_FRAME(8, 3), - ANIMCMD_FRAME(4, 3), - ANIMCMD_FRAME(0, 3), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_085938D8[] = -{ - gUnknown_085938C0, -}; - -const struct SpriteTemplate gUnknown_085938DC = -{ - .tileTag = ANIM_TAG_SPEED_DUST, - .paletteTag = ANIM_TAG_SPEED_DUST, - .oam = &gUnknown_0852490C, - .anims = gUnknown_085938D8, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8105C48, -}; - -const s8 gUnknown_085938F4[][2] = -{ - {30, 28}, - {-20, 24}, - {16, 26}, - {-10, 28}, -}; - -const union AnimCmd gUnknown_085938FC[] = -{ - ANIMCMD_FRAME(0, 6), - ANIMCMD_FRAME(16, 6), - ANIMCMD_FRAME(32, 15), - ANIMCMD_FRAME(16, 6), - ANIMCMD_FRAME(0, 6), - ANIMCMD_FRAME(16, 6, .hFlip = TRUE), - ANIMCMD_FRAME(32, 15, .hFlip = TRUE), - ANIMCMD_FRAME(16, 6, .hFlip = TRUE), - ANIMCMD_FRAME(0, 6), - ANIMCMD_FRAME(16, 6), - ANIMCMD_FRAME(32, 15), - ANIMCMD_FRAME(16, 6), - ANIMCMD_FRAME(0, 6), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_08593934[] = -{ - gUnknown_085938FC, -}; - -const struct SpriteTemplate gUnknown_08593938 = -{ - .tileTag = ANIM_TAG_BELL, - .paletteTag = ANIM_TAG_BELL, - .oam = &gUnknown_08524914, - .anims = gUnknown_08593934, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A77C8, -}; - -const u16 gUnknown_08593950[] = -{ - 10206, - 9999, - 9998, - 0, -}; - -const struct SpriteTemplate gUnknown_08593958 = -{ - .tileTag = ANIM_TAG_MUSIC_NOTES_2, - .paletteTag = ANIM_TAG_MUSIC_NOTES_2, - .oam = &gUnknown_0852490C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8105DE8, -}; - -const struct SpriteTemplate gUnknown_08593970 = -{ - .tileTag = ANIM_TAG_MAGENTA_HEART, - .paletteTag = ANIM_TAG_MAGENTA_HEART, - .oam = &gUnknown_0852490C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8105E60, -}; - -const union AffineAnimCmd gUnknown_08593988[] = -{ - AFFINEANIMCMD_FRAME(0x000A, 0xFFF3, 0x00, 0x0A), - AFFINEANIMCMD_FRAME(0xFFF6, 0x000D, 0x00, 0x0A), - AFFINEANIMCMD_END, -}; - -const struct SpriteTemplate gUnknown_085939A0 = -{ - .tileTag = ANIM_TAG_RED_HEART, - .paletteTag = ANIM_TAG_RED_HEART, - .oam = &gUnknown_0852490C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8106140, -}; - -const struct SpriteTemplate gBattleAnimSpriteTemplate_85939B8 = -{ - .tileTag = ANIM_TAG_RED_HEART, - .paletteTag = ANIM_TAG_RED_HEART, - .oam = &gUnknown_0852490C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81061C4, -}; - -const struct SpriteTemplate gUnknown_085939D0 = -{ - .tileTag = ANIM_TAG_RED_HEART, - .paletteTag = ANIM_TAG_RED_HEART, - .oam = &gUnknown_0852490C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810624C, -}; - -const union AffineAnimCmd gUnknown_085939E8[] = -{ - AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), - AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1), - AFFINEANIMCMD_JUMP(1), -}; - -const union AffineAnimCmd *const gUnknown_08593A00[] = -{ - gUnknown_085939E8, -}; - -const struct SpriteTemplate gHiddenPowerOrbSpriteTemplate = -{ - .tileTag = ANIM_TAG_RED_ORB, - .paletteTag = ANIM_TAG_RED_ORB, - .oam = &gUnknown_0852496C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_08593A00, - .callback = sub_810673C, -}; - -const struct SpriteTemplate gHiddenPowerOrbScatterSpriteTemplate = -{ - .tileTag = ANIM_TAG_RED_ORB, - .paletteTag = ANIM_TAG_RED_ORB, - .oam = &gUnknown_085249CC, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_08593A00, - .callback = sub_8106878, -}; - -const union AffineAnimCmd gUnknown_08593A34[] = -{ - AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), - AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1), - AFFINEANIMCMD_JUMP(1), -}; - -const union AffineAnimCmd *const gUnknown_08593A4C[] = -{ - gUnknown_08593A34, -}; - -const struct SpriteTemplate gUnknown_08593A50 = -{ - .tileTag = ANIM_TAG_RED_ORB_2, - .paletteTag = ANIM_TAG_RED_ORB_2, - .oam = &gUnknown_085249C4, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_08593A4C, - .callback = sub_8106944, -}; - -const union AnimCmd gUnknown_08593A68[] = -{ - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(4, 4), - ANIMCMD_FRAME(8, 4), - ANIMCMD_FRAME(4, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_08593A80[] = -{ - gUnknown_08593A68, -}; - -const struct SpriteTemplate gUnknown_08593A84 = -{ - .tileTag = ANIM_TAG_EYE_SPARKLE, - .paletteTag = ANIM_TAG_EYE_SPARKLE, - .oam = &gUnknown_0852490C, - .anims = gUnknown_08593A80, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81069B8, -}; - -const union AnimCmd gUnknown_08593A9C[] = -{ - ANIMCMD_FRAME(0, 24), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_08593AA4[] = -{ - gUnknown_08593A9C, -}; - -const struct SpriteTemplate gUnknown_08593AA8 = -{ - .tileTag = ANIM_TAG_ANGEL, - .paletteTag = ANIM_TAG_ANGEL, - .oam = &gUnknown_08524914, - .anims = gUnknown_08593AA4, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81069D0, -}; - -const struct SpriteTemplate gUnknown_08593AC0 = -{ - .tileTag = ANIM_TAG_PINK_HEART, - .paletteTag = ANIM_TAG_PINK_HEART, - .oam = &gUnknown_0852490C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8106AD0, -}; - -const union AnimCmd gUnknown_08593AD8[] = -{ - ANIMCMD_FRAME(0, 3), - ANIMCMD_JUMP(0), -}; - -const union AnimCmd gUnknown_08593AE0[] = -{ - ANIMCMD_FRAME(16, 3), - ANIMCMD_JUMP(0), -}; - -const union AnimCmd *const gUnknown_08593AE8[] = -{ - gUnknown_08593AD8, - gUnknown_08593AE0, -}; - -const struct SpriteTemplate gUnknown_08593AF0 = -{ - .tileTag = ANIM_TAG_DEVIL, - .paletteTag = ANIM_TAG_DEVIL, - .oam = &gUnknown_08524914, - .anims = gUnknown_08593AE8, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8106B54, -}; - -const union AnimCmd gUnknown_08593B08[] = -{ - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(16, 4), - ANIMCMD_FRAME(32, 4), - ANIMCMD_FRAME(48, 4), - ANIMCMD_END, -}; - -const union AnimCmd gUnknown_08593B1C[] = -{ - ANIMCMD_FRAME(0, 4, .hFlip = TRUE), - ANIMCMD_FRAME(16, 4, .hFlip = TRUE), - ANIMCMD_FRAME(32, 4, .hFlip = TRUE), - ANIMCMD_FRAME(48, 4, .hFlip = TRUE), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_08593B30[] = -{ - gUnknown_08593B08, - gUnknown_08593B1C, -}; - -const struct SpriteTemplate gUnknown_08593B38 = -{ - .tileTag = ANIM_TAG_SWIPE, - .paletteTag = ANIM_TAG_SWIPE, - .oam = &gUnknown_08524914, - .anims = gUnknown_08593B30, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8106C80, -}; - -const union AnimCmd gUnknown_08593B50[] = -{ - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(16, 8), - ANIMCMD_FRAME(32, 8), - ANIMCMD_FRAME(16, 8), - ANIMCMD_END, -}; - -const union AnimCmd gUnknown_08593B64[] = -{ - ANIMCMD_FRAME(16, 8, .hFlip = TRUE), - ANIMCMD_FRAME(32, 8, .hFlip = TRUE), - ANIMCMD_FRAME(16, 8, .hFlip = TRUE), - ANIMCMD_FRAME(0, 8, .hFlip = TRUE), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_08593B78[] = -{ - gUnknown_08593B50, - gUnknown_08593B64, -}; - -const struct SpriteTemplate gUnknown_08593B80 = -{ - .tileTag = ANIM_TAG_MOVEMENT_WAVES, - .paletteTag = ANIM_TAG_MOVEMENT_WAVES, - .oam = &gUnknown_08524914, - .anims = gUnknown_08593B78, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8106CD0, -}; - -const union AffineAnimCmd gUnknown_08593B98[] = -{ - AFFINEANIMCMD_FRAME(-12, 8, 0, 4), - AFFINEANIMCMD_FRAME(20, -20, 0, 4), - AFFINEANIMCMD_FRAME(-8, 12, 0, 4), - AFFINEANIMCMD_END, -}; - -const struct SpriteTemplate gBattleAnimSpriteTemplate_8593BB8 = -{ - .tileTag = ANIM_TAG_JAGGED_MUSIC_NOTE, - .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE, - .oam = &gUnknown_08524914, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8106E00, -}; - -const union AffineAnimCmd gUnknown_08593BD0[] = -{ - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 5), - AFFINEANIMCMD_END, -}; - -const union AffineAnimCmd gUnknown_08593BE0[] = -{ - AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 16), - AFFINEANIMCMD_END_ALT(1), -}; - -const union AffineAnimCmd gUnknown_08593BF0[] = -{ - AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 16), - AFFINEANIMCMD_END_ALT(1), -}; - -const union AffineAnimCmd *const gUnknown_08593C00[] = -{ - gUnknown_08593BD0, - gUnknown_08593BE0, - gUnknown_08593BF0, -}; - -extern const union AnimCmd *const gUnknown_08592FCC[]; -const struct SpriteTemplate gUnknown_08593C0C = -{ - .tileTag = ANIM_TAG_MUSIC_NOTES_2, - .paletteTag = ANIM_TAG_MUSIC_NOTES_2, - .oam = &gUnknown_0852496C, - .anims = gUnknown_08592FCC, - .images = NULL, - .affineAnims = gUnknown_08593C00, - .callback = sub_8106F60, -}; - -const struct SpriteTemplate gUnknown_08593C24 = -{ - .tileTag = ANIM_TAG_MUSIC_NOTES_2, - .paletteTag = ANIM_TAG_MUSIC_NOTES_2, - .oam = &gUnknown_0852496C, - .anims = gUnknown_08592FCC, - .images = NULL, - .affineAnims = gUnknown_08593C00, - .callback = sub_8106F00, -}; - -const union AffineAnimCmd gUnknown_08593C3C[] = -{ - AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), - AFFINEANIMCMD_END, -}; - -const union AffineAnimCmd gUnknown_08593C4C[] = -{ - AFFINEANIMCMD_FRAME(0x200, 0x100, 0, 0), - AFFINEANIMCMD_END, -}; - -const union AffineAnimCmd *const gUnknown_08593C5C[] = -{ - gUnknown_08593C3C, - gUnknown_08593C4C, -}; - -const struct SpriteTemplate gUnknown_08593C64 = -{ - .tileTag = ANIM_TAG_GUARD_RING, - .paletteTag = ANIM_TAG_GUARD_RING, - .oam = &gUnknown_08524B1C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gUnknown_08593C5C, - .callback = sub_81070AC, -}; diff --git a/src/electric.c b/src/electric.c index 4a0c5525e..5d772e042 100644 --- a/src/electric.c +++ b/src/electric.c @@ -5,7 +5,6 @@ #include "constants/songs.h" #include "sound.h" -extern void sub_80A62EC(struct Sprite *); extern void sub_810E2C8(struct Sprite *); extern bool8 sub_810B614(struct Task *task, u8 taskId); extern void TranslateAnimSpriteToTargetMonLocation(struct Sprite *); @@ -487,13 +486,13 @@ static void sub_810A214(struct Sprite *sprite) static void sub_810A258(struct Sprite *sprite) { if (sprite->affineAnimEnded) - move_anim_8074EE0(sprite); + DestroySpriteAndMatrix(sprite); } static void sub_810A274(struct Sprite *sprite) { - sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { @@ -509,65 +508,55 @@ static void sub_810A274(struct Sprite *sprite) sprite->data[1] = gBattleAnimArgs[2]; sprite->data[2] = gBattleAnimArgs[3]; sprite->data[3] = gBattleAnimArgs[4]; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); - sprite->callback = sub_80A62EC; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = TranslateSpriteInCircleOverDuration; } static void sub_810A308(struct Sprite *sprite) { - u8 slot; + u8 battler; u32 matrixNum; s16 sineVal; switch (gBattleAnimArgs[4]) { case 0: - slot = gBattleAnimAttacker; + battler = gBattleAnimAttacker; break; case 1: default: - slot = gBattleAnimTarget; + battler = gBattleAnimTarget; break; case 2: - if (!IsBattlerSpriteVisible(gBattleAnimAttacker ^ 2)) - { - slot = gBattleAnimAttacker; - } + if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + battler = gBattleAnimAttacker; else - { - slot = gBattleAnimAttacker ^ 2; - } + battler = BATTLE_PARTNER(gBattleAnimAttacker); break; case 3: - if (IsBattlerSpriteVisible(gBattleAnimAttacker ^ 2)) - { - slot = gBattleAnimTarget ^ 2; - } + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + battler = BATTLE_PARTNER(gBattleAnimTarget); else - { - slot = gBattleAnimTarget; - } + battler = gBattleAnimTarget; break; } if (gBattleAnimArgs[5] == 0) { - sprite->pos1.x = GetBattlerSpriteCoord(slot, 0); - sprite->pos1.y = GetBattlerSpriteCoord(slot, 1); + sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X); + sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y); } else { - sprite->pos1.x = GetBattlerSpriteCoord(slot, 2); - sprite->pos1.y = GetBattlerSpriteCoord(slot, 3); + sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET); } sprite->pos2.x = (gSineTable[gBattleAnimArgs[0]] * gBattleAnimArgs[1]) >> 8; sprite->pos2.y = (gSineTable[gBattleAnimArgs[0] + 64] * gBattleAnimArgs[1]) >> 8; if (gBattleAnimArgs[6] & 1) - { - sprite->oam.priority = sub_80A8328(slot) + 1; - } + sprite->oam.priority = sub_80A8328(battler) + 1; matrixNum = sprite->oam.matrixNum; sineVal = gSineTable[gBattleAnimArgs[2]]; @@ -585,9 +574,9 @@ static void sub_810A46C(struct Sprite *sprite) InitAnimSpritePos(sprite, 1); sprite->data[0] = gBattleAnimArgs[3]; sprite->data[1] = sprite->pos1.x; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->pos1.y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslation(sprite); sprite->data[5] = gBattleAnimArgs[2]; sprite->data[6] = gBattleAnimArgs[5]; @@ -627,8 +616,8 @@ static void sub_810A5BC(struct Sprite *sprite) if (IsContest() || GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[1]; - sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[2]; + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; sprite->data[3] = gBattleAnimArgs[0]; sprite->data[4] = gBattleAnimArgs[3]; sprite->data[5] = gBattleAnimArgs[3]; @@ -637,19 +626,19 @@ static void sub_810A5BC(struct Sprite *sprite) static void sub_810A628(struct Sprite *sprite) { - u8 bank; + u8 battler; sprite->data[0] = gBattleAnimArgs[3]; if (gBattleAnimArgs[7] & 0x8000) - bank = gBattleAnimTarget; + battler = gBattleAnimTarget; else - bank = gBattleAnimAttacker; + battler = gBattleAnimAttacker; - if (IsContest() || GetBattlerSide(bank) == B_SIDE_PLAYER) + if (IsContest() || GetBattlerSide(battler) == B_SIDE_PLAYER) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; - sprite->pos1.x = GetBattlerSpriteCoord(bank, 2) + gBattleAnimArgs[0]; - sprite->pos1.y = GetBattlerSpriteCoord(bank, 3) + gBattleAnimArgs[1]; + sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; sprite->data[4] = gBattleAnimArgs[7] & 0x7FFF; sprite->data[5] = gBattleAnimArgs[2]; @@ -658,7 +647,7 @@ static void sub_810A628(struct Sprite *sprite) sprite->oam.tileNum += gBattleAnimArgs[6] * 4; sprite->callback = sub_810A6EC; - sub_810A6EC(sprite); + sprite->callback(sprite); } static void sub_810A6EC(struct Sprite *sprite) @@ -1015,13 +1004,13 @@ void sub_810AAFC(u8 taskId) if (!gBattleAnimArgs[0]) { - task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); } else { - task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); } task->data[6] = gBattleAnimArgs[1]; @@ -1061,7 +1050,7 @@ void sub_810AB78(u8 taskId) InitAnimLinearTranslation(sprite); StoreSpriteCallbackInData6(sprite, sub_810ACC0); - sprite->callback = sub_80A67D8; + sprite->callback = RunStoredCallbackWhenAnimEnds; if (++task->data[9] > 15) task->data[9] = 0; @@ -1101,43 +1090,43 @@ static void sub_810ACD8(struct Sprite *sprite) { if (!gBattleAnimArgs[0]) { - sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); } else { - sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); } - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); - sprite->callback = sub_80A67BC; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; } static void sub_810AD30(struct Sprite *sprite) { if (!gBattleAnimArgs[0]) { - sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); } else { - sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); } sprite->pos2.x = gBattleAnimArgs[1]; sprite->pos2.y = gBattleAnimArgs[2]; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = sub_80A67D8; + sprite->callback = RunStoredCallbackWhenAnimEnds; } static void sub_810AD98(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, 1); - sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[6] = GetAnimBattlerSpriteId(0); sprite->data[7] = 16; @@ -1159,7 +1148,7 @@ static void sub_810ADF8(struct Sprite *sprite) sprite->pos1.x += sprite->data[7]; gSprites[sprite->data[6]].pos2.x += sprite->data[7]; if ((u16)(sprite->pos1.x + 80) > 400) - move_anim_8074EE0(sprite); + DestroySpriteAndMatrix(sprite); } } @@ -1171,7 +1160,7 @@ void sub_810AE5C(u8 taskId) { case 0: task->data[15] = GetAnimBattlerSpriteId(0); - task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) { task->data[14] = -32; @@ -1230,14 +1219,14 @@ void sub_810AFCC(u8 taskId) switch (gBattleAnimArgs[0]) { case 0: - task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - task->data[5] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + task->data[5] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); task->data[4] = (task->data[1] * 128) + 120; break; case 4: task->data[3] = 120 - (task->data[1] * 128); - task->data[5] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); - task->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) - (task->data[1] * 32); + task->data[5] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + task->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - (task->data[1] * 32); break; default: if ((gBattleAnimArgs[0] & 1) != 0) @@ -1337,14 +1326,14 @@ static void sub_810B23C(struct Sprite *sprite) switch (sprite->data[0]) { case 0: - sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); StartSpriteAffineAnim(sprite, 2); sprite->data[0]++; break; case 1: if (sprite->affineAnimEnded) - move_anim_8074EE0(sprite); + DestroySpriteAndMatrix(sprite); } } @@ -1355,10 +1344,10 @@ void sub_810B29C(u8 taskId) switch (task->data[0]) { case 0: - task->data[6] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); - task->data[7] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + task->data[6] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + task->data[7] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); task->data[8] = 4; - task->data[10] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + task->data[10] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); task->data[9] = (task->data[10] - task->data[6]) / 5; task->data[4] = 7; task->data[5] = -1; @@ -1479,15 +1468,15 @@ void sub_810B55C(u8 taskId) switch (task->data[0]) { case 0: - task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 32; + task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 32; task->data[14] = task->data[15]; while (task->data[14] > 16) { task->data[14] -= 32; } - task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); - task->data[12] = GetBattlerSubpriority(gBattleAnimTarget) - 2; + task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + task->data[12] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2; task->data[0]++; break; case 1: diff --git a/src/fight.c b/src/fight.c index c9000fae4..fb1c01b78 100644 --- a/src/fight.c +++ b/src/fight.c @@ -828,7 +828,7 @@ static void sub_810D6A8(struct Sprite *sprite) sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], 3); InitAnimLinearTranslation(sprite); - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); sprite->callback = sub_80A6F98; } } @@ -839,7 +839,7 @@ void sub_810D714(struct Sprite *sprite) sprite->pos1.y = 120; sprite->data[0] = gBattleAnimArgs[3]; - sub_80A8048(&sprite->data[4], &sprite->data[5], (void *)(sprite->pos1.y << 8)); + StorePointerInVars(&sprite->data[4], &sprite->data[5], (void *)(sprite->pos1.y << 8)); sprite->data[6] = gBattleAnimArgs[1]; sprite->oam.tileNum += gBattleAnimArgs[2] * 4; @@ -853,9 +853,9 @@ static void sub_810D770(struct Sprite *sprite) if (sprite->data[0] != 0) { - var0 = sub_80A8050(sprite->data[4], sprite->data[5]); + var0 = LoadPointerFromVars(sprite->data[4], sprite->data[5]); var0 -= sprite->data[6]; - sub_80A8048(&sprite->data[4], &sprite->data[5], var0); + StorePointerInVars(&sprite->data[4], &sprite->data[5], var0); var0 = (void *)(((intptr_t)var0) >> 8); sprite->pos1.y = (intptr_t)var0; @@ -978,7 +978,7 @@ void sub_810DA10(struct Sprite *sprite) StartSpriteAnim(sprite, 1); } - sprite->callback = sub_80A67D8; + sprite->callback = RunStoredCallbackWhenAnimEnds; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } diff --git a/src/fire.c b/src/fire.c index 44ae9d320..18ec7b95c 100644 --- a/src/fire.c +++ b/src/fire.c @@ -466,7 +466,7 @@ static void sub_8108EC8(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = sub_80A634C; + sprite->callback = TranslateSpriteInGrowingCircleOverDuration; sprite->callback(sprite); } @@ -479,13 +479,13 @@ static void sub_8108F08(struct Sprite *sprite) sprite->data[1] = gBattleAnimArgs[2]; sprite->data[2] = gBattleAnimArgs[3]; - sprite->callback = sub_80A656C; + sprite->callback = TranslateAnimLinearSimple; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } static void sub_8108F4C(struct Sprite *sprite) { - sub_80A6838(sprite); + SetSpriteCoordsToAnimAttackerCoords(sprite); if (GetBattlerSide(gBattleAnimAttacker)) { @@ -538,12 +538,12 @@ static void sub_8109028(struct Sprite *sprite) } if (sprite->data[0] == sprite->data[1]) - move_anim_8074EE0(sprite); + DestroySpriteAndMatrix(sprite); } static void sub_8109064(struct Sprite *sprite) { - sub_80A6838(sprite); + SetSpriteCoordsToAnimAttackerCoords(sprite); if (GetBattlerSide(gBattleAnimAttacker)) { @@ -588,7 +588,7 @@ static void sub_81090D8(struct Sprite *sprite) } else { - move_anim_8074EE0(sprite); + DestroySpriteAndMatrix(sprite); } } @@ -779,7 +779,7 @@ void sub_8109460(u8 taskId) // initialize animation task for Move_ERUPTION? task->data[5] = GetBattlerSide(gBattleAnimAttacker); task->data[6] = 0; - sub_80A7270(task->data[15], 0); + PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL); task->func = sub_81094D0; } @@ -816,7 +816,7 @@ static void sub_81094D0(u8 taskId) // animate Move_ERUPTION? if(!sub_80A80C8(task)) { - sub_80A7E6C(task->data[15]); + SetBattlerSpriteYOffsetFromYScale(task->data[15]); gSprites[task->data[15]].pos2.x = 0; task->data[1] = 0; @@ -879,7 +879,7 @@ static void sub_81094D0(u8 taskId) // animate Move_ERUPTION? if (!sub_80A80C8(task)) { gSprites[task->data[15]].pos1.y = task->data[4]; - sub_80A7344(task->data[15]); + ResetSpriteRotScale(task->data[15]); task->data[2] = 0; task->data[0]++; diff --git a/src/ghost.c b/src/ghost.c index 3135004da..d4f6512a8 100644 --- a/src/ghost.c +++ b/src/ghost.c @@ -342,8 +342,8 @@ void sub_811188C(u8 taskId) SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10)); spriteId = GetAnimBattlerSpriteId(0); - sub_80A7270(spriteId, 1); - obj_id_set_rotscale(spriteId, 128, 128, 0); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND); + SetSpriteRotScale(spriteId, 128, 128, 0); gSprites[spriteId].invisible = FALSE; gTasks[taskId].data[0] = 128; gTasks[taskId].data[1] = *gBattleAnimArgs; @@ -381,11 +381,11 @@ static void sub_811196C(u8 taskId) gTasks[taskId].data[0] += 8; if (gTasks[taskId].data[0] <= 0xFF) { - obj_id_set_rotscale(spriteId, gTasks[taskId].data[0], gTasks[taskId].data[0], 0); + SetSpriteRotScale(spriteId, gTasks[taskId].data[0], gTasks[taskId].data[0], 0); } else { - sub_80A7344(spriteId); + ResetSpriteRotScale(spriteId); DestroyAnimVisualTask(taskId); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); @@ -454,7 +454,7 @@ static void AnimShadowBallStep(struct Sprite *sprite) sprite->data[0] += 1; break; case 3: - move_anim_8074EE0(sprite); + DestroySpriteAndMatrix(sprite); break; } } @@ -510,7 +510,7 @@ void sub_8111C50(u8 taskId) struct Task *task; task = &gTasks[taskId]; - task->data[0] = duplicate_obj_of_side_rel2move_in_transparent_mode(1); + task->data[0] = CloneBattlerSpriteWithBlend(1); if (task->data[0] < 0) { DestroyAnimVisualTask(taskId); @@ -536,7 +536,7 @@ void sub_8111C50(u8 taskId) gSprites[task->data[0]].data[3] = 0; gSprites[task->data[0]].data[4] = 0; StoreSpriteCallbackInData6(&gSprites[task->data[0]], SpriteCallbackDummy); - gSprites[task->data[0]].callback = sub_80A656C; + gSprites[task->data[0]].callback = TranslateAnimLinearSimple; task->func = sub_8111D78; } @@ -602,7 +602,7 @@ static void sub_8111E78(u8 taskId) } else { - task->data[0] = duplicate_obj_of_side_rel2move_in_transparent_mode(1); + task->data[0] = CloneBattlerSpriteWithBlend(1); if (task->data[0] < 0) { FreeSpritePaletteByTag(0x2771); @@ -1171,7 +1171,7 @@ void sub_8112C6C(u8 taskId) task->data[11] = (sub_80A861C(gBattleAnimAttacker, 1) / 2) + 8; task->data[7] = 0; task->data[5] = sub_80A8328(gBattleAnimAttacker); - task->data[6] = GetBattlerSubpriority(gBattleAnimAttacker) - 2; + task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 2; task->data[3] = 0; task->data[4] = 16; SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); @@ -1322,6 +1322,6 @@ static void sub_8112FB8(struct Sprite *sprite) gSprites[sprite->data[5]].pos2.x = 0; gSprites[sprite->data[5]].pos2.y = 0; gSprites[sprite->data[5]].pos1.y -= 8; - sprite->callback = move_anim_8074EE0; + sprite->callback = DestroySpriteAndMatrix; } } diff --git a/src/graphics.c b/src/graphics.c index b2de074bc..c0deb2883 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -897,9 +897,9 @@ const u32 gBattleStatMask6_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat6 const u32 gBattleStatMask7_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat7.gbapal.lz"); const u32 gBattleStatMask8_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat8.gbapal.lz"); -const u32 gUnknown_08C2DC68[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.4bpp.lz"); -const u32 gUnknown_08C2DDA4[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.gbapal.lz"); -const u32 gUnknown_08C2DDC4[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.bin.lz"); +const u8 gUnknown_08C2DC68[] = INCBIN_U8("graphics/battle_anims/masks/cure_bubbles.4bpp.lz"); +const u16 gUnknown_08C2DDA4[] = INCBIN_U16("graphics/battle_anims/masks/cure_bubbles.gbapal.lz"); +const u8 gUnknown_08C2DDC4[] = INCBIN_U8("graphics/battle_anims/masks/cure_bubbles.bin.lz"); const u32 gBattleAnimSpritePalette_245[] = INCBIN_U32("graphics/battle_anims/sprites/245.gbapal.lz"); const u32 gBattleAnimSpriteSheet_245[] = INCBIN_U32("graphics/battle_anims/sprites/245.4bpp.lz"); diff --git a/src/ground.c b/src/ground.c index 6cb7b8557..77acd3919 100644 --- a/src/ground.c +++ b/src/ground.c @@ -221,7 +221,7 @@ void AnimDirtScatter(struct Sprite *sprite) sprite->data[2] = targetXPos + xOffset; sprite->data[4] = targetYPos + yOffset; sprite->callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); } // Moves a particle of dirt in the Mud Sport animation. diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index ad5673036..f7792e935 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -497,7 +497,7 @@ static void Task_Hof_InitTeamSaveData(u8 taskId) for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, lastSavedTeam++) { - if (lastSavedTeam->mon[0].species == 0) + if (lastSavedTeam->mon[0].species == SPECIES_NONE) break; } if (i >= HALL_OF_FAME_MAX_TEAMS) diff --git a/src/normal.c b/src/normal.c index 3de8b1157..e20f74588 100644 --- a/src/normal.c +++ b/src/normal.c @@ -410,8 +410,8 @@ void sub_81159B4(struct Sprite *sprite) sprite->data[3] = 40; sprite->data[4] = 112; sprite->data[5] = 0; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); - sprite->callback = sub_80A634C; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = TranslateSpriteInGrowingCircleOverDuration; sprite->callback(sprite); } @@ -884,7 +884,7 @@ void sub_8116388(struct Sprite *sprite) else sub_80A6980(sprite, TRUE); - sprite->callback = sub_80A67BC; + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } @@ -897,7 +897,7 @@ static void sub_81163D0(struct Sprite *sprite) sub_80A6980(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[4]; - sprite->callback = sub_80A67BC; + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; StoreSpriteCallbackInData6(sprite, sub_810E2C8); } @@ -923,8 +923,8 @@ void sub_8116458(struct Sprite *sprite) sprite->pos2.x += (Random2() % 48) - 24; sprite->pos2.y += (Random2() % 24) - 12; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); - sprite->callback = sub_80A67BC; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; } void sub_81164F0(struct Sprite *sprite) @@ -935,8 +935,8 @@ void sub_81164F0(struct Sprite *sprite) sprite->pos2.x = gBattleAnimArgs[1]; sprite->pos2.y = gBattleAnimArgs[2]; StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); - sprite->callback = sub_80A67BC; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; } void sub_8116560(struct Sprite *sprite) diff --git a/src/poison.c b/src/poison.c index efa89ec13..c52299e3a 100644 --- a/src/poison.c +++ b/src/poison.c @@ -258,7 +258,7 @@ void sub_810DCD0(struct Sprite *sprite) static void sub_810DD24(struct Sprite *sprite) { - sub_80A656C(sprite); + TranslateAnimLinearSimple(sprite); sprite->data[1] -= sprite->data[5]; sprite->data[2] -= sprite->data[6]; diff --git a/src/pokemon.c b/src/pokemon.c index 14b4ea388..640d70776 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5929,13 +5929,13 @@ u16 HoennToNationalOrder(u16 hoennNum) u16 SpeciesToCryId(u16 species) { - if (species <= 250) + if (species <= SPECIES_CELEBI - 1) return species; - if (species < 276) - return 200; + if (species < SPECIES_TREECKO - 1) + return SPECIES_UNOWN - 1; - return gSpeciesIdToCryId[species - 276]; + return gSpeciesIdToCryId[species - (SPECIES_TREECKO - 1)]; } void sub_806D544(u16 species, u32 personality, u8 *dest) diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index 1a5221616..06d2af5b7 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -226,7 +226,7 @@ static void CreateBattlerSprite(u8 battler) return; SetMultiuseSpriteTemplateToPokemon(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler)); - gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSubpriority(battler)); + gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler)); gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].data[0] = battler; @@ -241,7 +241,7 @@ static void CreateBattlerSprite(u8 battler) SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(B_POSITION_PLAYER_LEFT)); gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 0x50, (8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].coords) * 4 + 80, - GetBattlerSubpriority(0)); + GetBattlerSpriteSubpriority(0)); gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].data[0] = battler; @@ -251,7 +251,7 @@ static void CreateBattlerSprite(u8 battler) SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_WALLY, GetBattlerPosition(0)); gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 0x50, (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_WALLY].coords) * 4 + 80, - GetBattlerSubpriority(0)); + GetBattlerSpriteSubpriority(0)); gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].data[0] = battler; @@ -262,7 +262,7 @@ static void CreateBattlerSprite(u8 battler) return; SetMultiuseSpriteTemplateToPokemon(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler)); - gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSubpriority(battler)); + gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler)); gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].data[0] = battler; diff --git a/src/rock.c b/src/rock.c index 3b8e505d8..20d4ea738 100644 --- a/src/rock.c +++ b/src/rock.c @@ -340,7 +340,7 @@ static void sub_8110A70(struct Sprite *sprite) sprite->data[3] = 32; sprite->data[4] = -24; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); sprite->callback = sub_80A6450; sprite->callback(sprite); } @@ -367,8 +367,8 @@ void sub_8110AB4(struct Sprite *sprite) sprite->data[3] = 0; sprite->data[4] = 0; - sprite->callback = sub_80A656C; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + sprite->callback = TranslateAnimLinearSimple; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); } void sub_8110B38(struct Sprite *sprite) @@ -3231,7 +3231,7 @@ u16 TV_GetSomeOtherSpeciesAlreadySeenByPlayer(u16 passedSpecies) initSpecies = species; while (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_SEEN) != TRUE || species == passedSpecies) { - if (species == 1) + if (species == SPECIES_NONE + 1) { species = NUM_SPECIES - 1; } |