diff options
-rw-r--r-- | data/battle_anim_scripts.s | 2 | ||||
-rw-r--r-- | include/battle.h | 4 | ||||
-rw-r--r-- | include/sprite.h | 2 | ||||
-rw-r--r-- | src/battle_anim.c | 97 | ||||
-rw-r--r-- | src/battle_anim_effects_1.c | 16 | ||||
-rw-r--r-- | src/battle_anim_effects_2.c | 18 | ||||
-rw-r--r-- | src/battle_anim_effects_3.c | 72 | ||||
-rw-r--r-- | src/battle_anim_special.c | 68 |
8 files changed, 141 insertions, 138 deletions
diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index dd2cbea55..4cc93f85e 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -11051,7 +11051,7 @@ Special_BallThrow:: @ 81D64F9 delay 0 playsewithpan SE_NAGERU, 0 createvisualtask sub_80EF5AC, 2, - createvisualtask AnimTask_IsBallBlockedByTrainer, 2, + createvisualtask AnimTask_IsBallBlockedByTrainerOrDodged, 2, jumpargeq 7, 65535, gUnknown_81D652D jumpargeq 7, 65534, gUnknown_81D6555 diff --git a/include/battle.h b/include/battle.h index 54aef5106..18a24a761 100644 --- a/include/battle.h +++ b/include/battle.h @@ -546,8 +546,8 @@ struct BattleAnimationInfo u8 field_9_x80 : 1; u8 field_A; u8 field_B; - u8 field_C; - u8 field_D; + s16 field_C; + //u8 field_D; u8 field_E; u8 field_F; }; diff --git a/include/sprite.h b/include/sprite.h index 7432306a4..84b3ee123 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -210,7 +210,7 @@ struct Sprite /*0x2D*/ u8 animLoopCounter; // general purpose data fields - /*0x2E*/ s16 data[8]; + /*0x2E*/ s16 data[8]; //2e, 30, 32, 34, 36, /*0x3E*/ u16 inUse:1; //1 u16 coordOffsetEnabled:1; //2 diff --git a/src/battle_anim.c b/src/battle_anim.c index 6510003e0..16cf56920 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -65,6 +65,7 @@ static void LoadDefaultBg(void); static void Task_LoopAndPlaySE(u8 taskId); static void Task_WaitAndPlaySE(u8 taskId); static void sub_807331C(u8 taskId); +static bool8 sub_807378C(u16 a); static void ScriptCmd_loadspritegfx(void); static void ScriptCmd_unloadspritegfx(void); @@ -2316,9 +2317,8 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2) void sub_80730C0(u16 a, u16 *b, s32 c, u8 d) { - s32 i, j; - s32 var; - s32 x; + u8 i, j; + u32 var; if (d == 0) var = 32; @@ -2330,7 +2330,7 @@ void sub_80730C0(u16 a, u16 *b, s32 c, u8 d) { for (j = 0; j < 32; j++) { - b[j + i * 32] = ((b[j + i * 32] & 0xFFF) | a) + c; + b[32 * i + j] = ((b[32 * i + j] & 0xFFF) | a) + c; } } } @@ -2398,13 +2398,12 @@ static void ScriptCmd_clearmonbg(void) sBattleAnimScriptPtr++; animBattlerId = sBattleAnimScriptPtr[0]; + if (animBattlerId == 0) + animBattlerId = 2; + else if (animBattlerId == 1) + animBattlerId = 3; - if (animBattlerId == ANIM_ATTACKER) - animBattlerId = ANIM_ATK_PARTNER; - else if (animBattlerId == ANIM_TARGET) - animBattlerId = ANIM_DEF_PARTNER; - - if (animBattlerId == ANIM_ATTACKER || animBattlerId == ANIM_ATK_PARTNER) + if (animBattlerId == 0 || animBattlerId == 2) battlerId = gBattleAnimAttacker; else battlerId = gBattleAnimTarget; @@ -2425,24 +2424,27 @@ static void ScriptCmd_clearmonbg(void) static void sub_807331C(u8 taskId) { - gTasks[taskId].data[1]++; + u8 toBG_2; + u8 position; + + gTasks[taskId].data[1]++; if (gTasks[taskId].data[1] != 1) { - u8 to_BG2; - u8 position = GetBattlerPosition(gTasks[taskId].data[2]); - to_BG2 = TRUE; - if (position < B_POSITION_OPPONENT_LEFT) - to_BG2 = FALSE; + position = ((GetBattlerPosition((u8)gTasks[taskId].data[2]) << 0x18) + 0xFF000000) >> 0x18; //make human code + if (position <= B_POSITION_OPPONENT_LEFT) + toBG_2 = FALSE; + else + toBG_2 = TRUE; if (sMonAnimTaskIdArray[0] != 0xFF) { - sub_8073128(to_BG2); + sub_8073128(toBG_2); DestroyTask(sMonAnimTaskIdArray[0]); sMonAnimTaskIdArray[0] = 0xFF; } if (gTasks[taskId].data[0] > 1) { - sub_8073128(to_BG2 ^ 1); + sub_8073128(toBG_2 ^ 1); DestroyTask(sMonAnimTaskIdArray[1]); sMonAnimTaskIdArray[1] = 0xFF; } @@ -2455,40 +2457,43 @@ static void ScriptCmd_monbg_22(void) bool8 toBG_2; u8 battlerId; u8 animBattlerId; + u8 position; sBattleAnimScriptPtr++; - animBattlerId = sBattleAnimScriptPtr[0]; + if (animBattlerId == 0) + animBattlerId = 2; + else if (animBattlerId == 1) + animBattlerId = 3; - if (animBattlerId == ANIM_ATTACKER) - animBattlerId = ANIM_ATK_PARTNER; - else if (animBattlerId == ANIM_TARGET) - animBattlerId = ANIM_DEF_PARTNER; - - if (animBattlerId == ANIM_ATTACKER || animBattlerId == ANIM_ATK_PARTNER) + if (animBattlerId == 0 || animBattlerId == 2) battlerId = gBattleAnimAttacker; else battlerId = gBattleAnimTarget; if (IsBattlerSpriteVisible(battlerId)) { - u8 position = GetBattlerPosition(battlerId); - toBG_2 = TRUE; - if (position < B_POSITION_OPPONENT_LEFT) + position = ((GetBattlerPosition(battlerId) << 0x18) + 0xFF000000) >> 0x18; //make human code + if (position <= B_POSITION_OPPONENT_LEFT) toBG_2 = FALSE; - + else + toBG_2 = TRUE; + MoveBattlerSpriteToBG(battlerId, toBG_2); + gSprites[gBattlerSpriteIds[battlerId]].invisible = FALSE; } battlerId ^= BIT_FLANK; if (animBattlerId > 1 && IsBattlerSpriteVisible(battlerId)) { - u8 position = GetBattlerPosition(battlerId); - toBG_2 = TRUE; - if (position < B_POSITION_OPPONENT_LEFT) + position = ((GetBattlerPosition(battlerId) << 0x18) + 0xFF000000) >> 0x18; //make human code + if (position <= B_POSITION_OPPONENT_LEFT) toBG_2 = FALSE; + else + toBG_2 = TRUE; MoveBattlerSpriteToBG(battlerId, toBG_2); + gSprites[gBattlerSpriteIds[battlerId]].invisible = FALSE; } sBattleAnimScriptPtr++; @@ -2530,16 +2535,19 @@ static void ScriptCmd_clearmonbg_23(void) static void sub_8073558(u8 taskId) { bool8 to_BG2; + u8 position; + u8 battlerId; gTasks[taskId].data[1]++; if (gTasks[taskId].data[1] != 1) { bool8 toBG_2; - u8 battlerId = gTasks[taskId].data[2]; - u8 position = GetBattlerPosition(battlerId); - to_BG2 = TRUE; - if (position < B_POSITION_OPPONENT_LEFT) - to_BG2 = FALSE; + battlerId = gTasks[taskId].data[2]; + position = ((GetBattlerPosition(battlerId) << 0x18) + 0xFF000000) >> 0x18; //make human code + if (position <= B_POSITION_OPPONENT_LEFT) + toBG_2 = FALSE; + else + toBG_2 = TRUE; if (IsBattlerSpriteVisible(battlerId)) sub_8073128(toBG_2); @@ -2625,6 +2633,7 @@ static void ScriptCmd_choosetwoturnanim(void) static void ScriptCmd_jumpifmoveturn(void) { u8 toCheck; + sBattleAnimScriptPtr++; toCheck = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; @@ -2641,13 +2650,18 @@ static void ScriptCmd_goto(void) sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); } -//unused bool8 IsContest(void) { - if (!gMain.inBattle) - return TRUE; - else + return FALSE; +} + +// Unused +static bool8 sub_807378C(u16 a) +{ + if (a == 0xC9) return FALSE; + else + return TRUE; } #define tBackgroundId data[0] @@ -3192,7 +3206,6 @@ static void ScriptCmd_jumpargeq(void) static void ScriptCmd_jumpifcontest(void) { - sBattleAnimScriptPtr++; sBattleAnimScriptPtr += 5; } diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 093d2b345..2f92515c1 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -2215,6 +2215,7 @@ const struct SpriteTemplate gTauntFingerSpriteTemplate = //gUnknown_83E3AC4 .callback = AnimTauntFinger, }; +// Functions // Animates the falling particles that horizontally wave back and forth. // Used by Sleep Powder, Stun Spore, and Poison Powder. // arg 0: initial x pixel offset @@ -2734,7 +2735,7 @@ static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite) // arg 4: speedup frame (particles move faster at the end of the animation) void AnimMoveTwisterParticle(struct Sprite* sprite) { - if (IsDoubleBattle() == TRUE) + if (!IsContest() && IsDoubleBattle() == TRUE) SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->pos1.x, &sprite->pos1.y); sprite->pos1.y += 32; @@ -2836,11 +2837,6 @@ void sub_80A2F0C(u8 taskId) else { PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND); - gTasks[taskId].data[14] = gSprites[spriteId].oam.priority; - gSprites[spriteId].oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget); - spriteId = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER); - gTasks[taskId].data[15] = gSprites[spriteId].oam.priority; - gSprites[spriteId].oam.priority = GetBattlerSpriteBGPriority(BATTLE_PARTNER(gBattleAnimTarget)); gTasks[taskId].data[0] = gBattleAnimArgs[0]; gTasks[taskId].data[1] = gBattleAnimArgs[1]; gTasks[taskId].data[11] = 0x100; @@ -2874,12 +2870,8 @@ static void AnimTask_DuplicateAndShrinkToPosStep2(u8 taskId) { u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); ResetSpriteRotScale(spriteId); - gSprites[spriteId].pos2.x = 0; - gSprites[spriteId].pos2.y = 0; - gSprites[spriteId].oam.priority = gTasks[taskId].data[14]; - spriteId = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER); - gSprites[spriteId].oam.priority = gTasks[taskId].data[15]; - gTasks[taskId].data[0]++; + gSprites[spriteId].pos2.y = gSprites[spriteId].pos2.x = 0; + gTasks[taskId].data[0]++; return; } } diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 215b7d869..1fe43b78c 100644 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -51,7 +51,7 @@ void AnimAngel(struct Sprite *); void AnimPinkHeart(struct Sprite *); void AnimDevil(struct Sprite *); void AnimFurySwipes(struct Sprite *); -void AnimMovmentWaves(struct Sprite *); +void AnimMovementWaves(struct Sprite *); void AnimJaggedMusicNote(struct Sprite *); void AnimPerishSongMusicNote2(struct Sprite *); void AnimPerishSongMusicNote(struct Sprite *); @@ -98,7 +98,7 @@ static void HeartsBackground_Step(u8); static void ScaryFace_Step(u8); static void AnimOrbitFastStep(struct Sprite *); static void AnimOrbitScatterStep(struct Sprite *); -static void AnimMovmentWaves_Step(struct Sprite *); +static void AnimMovementWaves_Step(struct Sprite *); static void UproarDistortion_Step(u8); static void AnimJaggedMusicNote_Step(struct Sprite *); static void AnimPerishSongMusicNote_Step1(struct Sprite *); @@ -1152,7 +1152,7 @@ const struct SpriteTemplate gMovementWavesSpriteTemplate = //gUnknown_83E43F8 .anims = gMovementWavesAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimMovmentWaves, + .callback = AnimMovementWaves, }; const union AffineAnimCmd gUnknown_08593B98[] = @@ -3241,6 +3241,9 @@ void AnimTask_HeartsBackground(u8 taskId) AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimBg_AttractTilemap); AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBg_AttractGfx, animBg.tilesOffset); LoadCompressedPalette(gBattleAnimBg_AttractPal, animBg.paletteId * 16, 32); + if (IsContest()) + sub_80730C0(animBg.paletteId, animBg.bgTilemap, 0, 0); + gTasks[taskId].func = HeartsBackground_Step; } @@ -3326,6 +3329,9 @@ void AnimTask_ScaryFace(u8 taskId) AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnim_ScaryFaceGfx, animBg.tilesOffset); LoadCompressedPalette(gBattleAnim_ScaryFacePal, animBg.paletteId * 16, 32); + if (IsContest()) + sub_80730C0(animBg.paletteId, animBg.bgTilemap, 0, 0); + gTasks[taskId].func = ScaryFace_Step; } @@ -3596,7 +3602,7 @@ void AnimFurySwipes(struct Sprite *sprite) } } -void AnimMovmentWaves(struct Sprite *sprite) +void AnimMovementWaves(struct Sprite *sprite) { if (!gBattleAnimArgs[2]) { @@ -3623,11 +3629,11 @@ void AnimMovmentWaves(struct Sprite *sprite) sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gBattleAnimArgs[1]; StartSpriteAnim(sprite, sprite->data[1]); - sprite->callback = AnimMovmentWaves_Step; + sprite->callback = AnimMovementWaves_Step; } } -static void AnimMovmentWaves_Step(struct Sprite *sprite) +static void AnimMovementWaves_Step(struct Sprite *sprite) { if (sprite->animEnded) { diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 4b2a3f310..ec99a9f95 100644 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -2365,6 +2365,7 @@ void AnimTask_MorningSunLightBeam(u8 taskId) { sub_80730C0(animBg.paletteId, animBg.bgTilemap, 0, 0); gBattle_BG1_X = -56; + gBattle_BG1_Y = 0; } else { @@ -2372,15 +2373,17 @@ void AnimTask_MorningSunLightBeam(u8 taskId) gBattle_BG1_X = -135; else gBattle_BG1_X = -10; + + gBattle_BG1_Y = 0; } - - gBattle_BG1_Y = 0; + gTasks[taskId].data[10] = gBattle_BG1_X; gTasks[taskId].data[11] = gBattle_BG1_Y; gTasks[taskId].data[0]++; PlaySE12WithPanning(SE_W234, BattleAnimAdjustPanning(-64)); break; + break; case 1: if (gTasks[taskId].data[4]++ > 0) { @@ -3890,18 +3893,9 @@ void AnimTask_GlareEyeDots(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; - } + task->data[5] = 12; + task->data[6] = 3; + task->data[7] = 0; if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4; @@ -4379,29 +4373,22 @@ void AnimTask_HelpingHandAttackerMovement(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; - } + 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; + } task->func = AnimTask_HelpingHandAttackerMovementStep; } @@ -4641,7 +4628,7 @@ void AnimMeteorMashStar(struct Sprite *sprite) s16 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); // unused local variable s16 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); // unused local variable - if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER || IsContest()) + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) { sprite->data[0] = sprite->pos1.x - gBattleAnimArgs[0]; sprite->data[2] = sprite->pos1.x - gBattleAnimArgs[2]; @@ -4831,12 +4818,6 @@ void AnimTask_OdorSleuthMovement(u8 taskId) { s16 spriteId1, spriteId2; - if (IsContest()) - { - DestroyAnimVisualTask(taskId); - return; - } - spriteId1 = CloneBattlerSpriteWithBlend(ANIM_TARGET); if (spriteId1 < 0) { @@ -5095,7 +5076,7 @@ void sub_80E3E84(struct Sprite *sprite) sprite->data[0] = -32; sprite->data[7]++; sprite->invisible = 0; - if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT && !IsContest()) + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) sprite->subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority - 1; } else @@ -5239,7 +5220,6 @@ static void AnimTask_TeeterDanceMovementStep(u8 taskId) static void AnimKnockOffStrikeStep(struct Sprite *sprite) { - // These two cases are identical. if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) { sprite->data[1] += sprite->data[0]; diff --git a/src/battle_anim_special.c b/src/battle_anim_special.c index 108e6c196..0ee1eee2e 100644 --- a/src/battle_anim_special.c +++ b/src/battle_anim_special.c @@ -40,13 +40,13 @@ #define LOHALF(n) ((n) & 0xFFFF) // IWRAM -//EWRAM_DATA int gUnknown_3005424 = 0; -//EWRAM_DATA u16 gUnknown_3005428 = 0; -//EWRAM_DATA u16 gUnknown_300542C = 0; +EWRAM_DATA u16 gUnknown_3005424 = 0; +EWRAM_DATA u16 gUnknown_3005428 = 0; +EWRAM_DATA u16 gUnknown_300542C = 0; -extern u32 gUnknown_3005424; -extern u32 gUnknown_3005428; -extern u32 gUnknown_300542C; +//extern u32 gUnknown_3005424; +//extern u32 gUnknown_3005428; +//extern u32 gUnknown_300542C; // Function Declarations static void sub_80EEDF4(u8); @@ -704,12 +704,20 @@ void sub_80EF4B8(u8 taskId) DestroyAnimVisualTask(taskId); } -void AnimTask_IsBallBlockedByTrainer(u8 taskId) +void AnimTask_IsBallBlockedByTrainerOrDodged(u8 taskId) { - if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_TRAINER_BLOCK) - gBattleAnimArgs[ARG_RET_ID] = -1; - else - gBattleAnimArgs[ARG_RET_ID] = 0; + switch (gBattleSpritesDataPtr->animationData->ballThrowCaseId) + { + case BALL_TRAINER_BLOCK: + gBattleAnimArgs[ARG_RET_ID] = -1; + break; + case BALL_GHOST_DODGE: + gBattleAnimArgs[ARG_RET_ID] = -2; + break; + default: + gBattleAnimArgs[ARG_RET_ID] = 0; + break; + } DestroyAnimVisualTask(taskId); } @@ -902,8 +910,8 @@ static void sub_80EFA0C(struct Sprite *sprite) PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); gTasks[taskId].data[10] = 256; gUnknown_3005424 = 28; - gUnknown_300542C = (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) - (sprite->pos1.y + sprite->pos2.y); - gUnknown_3005428 = (u32)(gUnknown_300542C * 256) / 28; + gUnknown_300542C = (gSprites[spriteId].pos2.y + gSprites[spriteId].pos1.y) - (sprite->pos2.y + sprite->pos1.y); + gUnknown_3005428 = (gUnknown_300542C * 256) / 28; gTasks[taskId].data[2] = gUnknown_3005428; gTasks[taskId].data[0]++; break; @@ -1209,7 +1217,7 @@ static void sub_80EFFC4(struct Sprite *sprite) } else if (sprite->data[4] == 95) { - gDoingBattleAnim = 0; + gDoingBattleAnim = FALSE; UpdateOamPriorityInAllHealthboxes(1); m4aMPlayAllStop(); PlaySE(MUS_FAN6); @@ -1364,7 +1372,7 @@ static void sub_80F0378(struct Sprite *sprite) gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = gBattleSpritesDataPtr->animationData->field_9_x2; sprite->data[0] = 0; sprite->callback = sub_80F018C; - gDoingBattleAnim = 0; + gDoingBattleAnim = FALSE; UpdateOamPriorityInAllHealthboxes(1); } } @@ -1397,7 +1405,7 @@ static void sub_80F04B4(struct Sprite *sprite) { sprite->data[0] = 0; sprite->callback = sub_80F018C; - gDoingBattleAnim = 0; + gDoingBattleAnim = FALSE; UpdateOamPriorityInAllHealthboxes(1); } } @@ -1405,18 +1413,13 @@ static void sub_80F04B4(struct Sprite *sprite) // GhostBallDodge static void sub_80F052C(struct Sprite *sprite) { - s16 x; - s16 y; - - x = sprite->pos1.x + sprite->pos2.x; - sprite->pos1.x = x; - y = sprite->pos1.y + sprite->pos2.y; - sprite->pos1.y = y; - sprite->pos2.x = sprite->pos2.y = 0; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = sprite->pos2.y = 0; sprite->data[0] = 0x22; - sprite->data[1] = x; - sprite->data[2] = x - 8; - sprite->data[3] = y; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x - 8; + sprite->data[3] = sprite->pos1.y; sprite->data[4] = 0x90; sprite->data[5] = 0x20; InitAnimArcTranslation(sprite); @@ -1426,7 +1429,16 @@ static void sub_80F052C(struct Sprite *sprite) static void sub_80F0574(struct Sprite *sprite) { - //to do + if (!TranslateAnimVerticalArc(sprite)) + { + if ((sprite->pos1.y + sprite->pos2.y) < 65) + return; + } + + sprite->data[0] = 0; + sprite->callback = sub_80F018C; + gDoingBattleAnim = FALSE; + UpdateOamPriorityInAllHealthboxes(1); } static void sub_80F05B4(u8 ballId) |