summaryrefslogtreecommitdiff
path: root/src/battle/anim/thrashing.c
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2017-11-26 21:18:19 -0800
committerGitHub <noreply@github.com>2017-11-26 21:18:19 -0800
commite6500d12a21e9833e08ad25cc6a76b075cff42dd (patch)
treeebd886d19c3a3257b21590d558ec724ca7d6e849 /src/battle/anim/thrashing.c
parent0793afb9e8eeb508375344ca683f97bbc797771a (diff)
parent85dc553b949b05ec4fdc0e223c29161465a132b7 (diff)
Merge pull request #473 from ProjectRevoTPP/split_80C
split battle_anim_80CA710
Diffstat (limited to 'src/battle/anim/thrashing.c')
-rwxr-xr-xsrc/battle/anim/thrashing.c111
1 files changed, 111 insertions, 0 deletions
diff --git a/src/battle/anim/thrashing.c b/src/battle/anim/thrashing.c
new file mode 100755
index 000000000..9811c546a
--- /dev/null
+++ b/src/battle/anim/thrashing.c
@@ -0,0 +1,111 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "battle_anim.h"
+#include "sound.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
+
+extern struct AffineAnimFrameCmd gUnknown_083D77B0;
+
+static void sub_80D0A8C(u8 taskId);
+static void sub_80D0B3C(u8 taskId);
+
+// thrashing (the movement of the Pokemon left/right repeatedly, with up/down movements below.)
+// Used by Thrash.
+
+// left/right movements
+void sub_80D0A4C(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = GetAnimBankSpriteId(0);
+ task->data[0] = spriteId;
+ task->data[1] = 0;
+ sub_80798F4(task, spriteId, &gUnknown_083D77B0);
+ task->func = sub_80D0A8C;
+}
+
+void sub_80D0A8C(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (!sub_807992C(task))
+ DestroyAnimVisualTask(taskId);
+}
+
+// up/down movements
+void sub_80D0AB8(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ task->data[0] = GetAnimBankSpriteId(0);
+ 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 (GetBankSide(gBattleAnimBankAttacker) == 1)
+ task->data[2] *= -1;
+
+ task->func = sub_80D0B3C;
+}
+
+void sub_80D0B3C(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (++task->data[7] > 2)
+ {
+ task->data[7] = 0;
+ task->data[8]++;
+ if ((task->data[8] & 1) != 0)
+ {
+ 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;
+ }
+}