summaryrefslogtreecommitdiff
path: root/src/battle_anim_special.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle_anim_special.c')
-rw-r--r--src/battle_anim_special.c68
1 files changed, 40 insertions, 28 deletions
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)