summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorU-Maria-PC\Maria <throwawaygolem@gmail.com>2017-08-05 16:47:38 -0400
committerU-Maria-PC\Maria <throwawaygolem@gmail.com>2017-08-05 16:47:38 -0400
commit02384ce88a28fd1e55a0d1d55fc1468e884560f3 (patch)
tree5d5167bf1fffb941fb478f2a791d3d44df7698e8 /src
parent9f625c9ec3129d9908d7a9498df58542bd66676a (diff)
decompiled up to sub_80CB7EC
Diffstat (limited to 'src')
-rwxr-xr-xsrc/battle_anim_80CA710.c233
1 files changed, 232 insertions, 1 deletions
diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c
index 191280e7b..50bdb3005 100755
--- a/src/battle_anim_80CA710.c
+++ b/src/battle_anim_80CA710.c
@@ -14,6 +14,7 @@ extern s16 gBattleAnimArgs[8];
extern u8 gBattleAnimPlayerMonIndex;
extern u8 gBattleAnimEnemyMonIndex;
extern struct SpriteTemplate gSpriteTemplate_83D631C;
+extern s16 gUnknown_03000728[];
void sub_80CA768(struct Sprite* sprite);
void sub_80CA8B4(struct Sprite* sprite);
@@ -30,6 +31,7 @@ void sub_80CB09C(struct Sprite* sprite);
void sub_80CB1A4(struct Sprite* sprite);
void sub_80CB298(struct Sprite* sprite);
void sub_80CB2D4(struct Sprite* sprite);
+void sub_80CB710(struct Sprite* sprite);
void sub_80787B0(struct Sprite *sprite, u8 a2);
void sub_8078764(struct Sprite *sprite, u8 a2);
@@ -37,6 +39,7 @@ void sub_8078B34(struct Sprite *sprite);
void sub_8078D60(struct Sprite *sprite);
void sub_80786EC(struct Sprite *sprite);
void sub_80782D8(struct Sprite *sprite);
+void sub_8078CC0(struct Sprite *sprite);
void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4);
u8 sub_8079ED4(u8 slot);
@@ -828,4 +831,232 @@ _080CB4C2:\n\
_080CB4C8: .4byte gTasks\n\
.syntax divided\n");
}
-#endif \ No newline at end of file
+#endif
+
+void sub_80CB4CC(struct Sprite* sprite)
+{
+ switch(sprite->data0)
+ {
+ case 0:
+ {
+ if(GetBankSide(gBattleAnimEnemyMonIndex) == 0)
+ {
+ s16 a = gBattleAnimArgs[0];
+ gBattleAnimArgs[0] = -a;
+ }
+ sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 0) + gBattleAnimArgs[0];
+ sprite->pos1.y = sub_8077ABC(gBattleAnimEnemyMonIndex, 1) + gBattleAnimArgs[1];
+ sprite->invisible = 1;
+ sprite->data0++;
+ break;
+ }
+ case 1:
+ {
+ sprite->invisible = 0;
+ if(sprite->affineAnimEnded)
+ {
+ ChangeSpriteAffineAnim(sprite, 1);
+ sprite->data0 = 25;
+ sprite->data2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2);
+ sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3);
+ sprite->callback = sub_8078CC0;
+ oamt_set_x3A_32(sprite, move_anim_8072740);
+ break;
+ }
+ }
+ }
+}
+
+void sub_80CB59C(struct Sprite* sprite)
+{
+ if(!sprite->data0)
+ {
+ sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2);
+ sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 1);
+ sprite->pos2.x = gBattleAnimArgs[0];
+ sprite->pos2.y = gBattleAnimArgs[1];
+ sprite->subpriority = gBattleAnimArgs[2] + 30;
+ StartSpriteAnim(sprite, gBattleAnimArgs[3]);
+ sprite->data2 = gBattleAnimArgs[4];
+ sprite->data0++;
+ if((sprite->pos1.y + sprite->pos2.y) > 120)
+ {
+ sprite->pos1.y += -120 + (sprite->pos2.y + sprite->pos1.y);
+ }
+ }
+ sprite->callback = sub_80CB710;
+}
+
+#ifdef NONMATCHING
+void sub_80CB620(struct Sprite* sprite)
+{
+ u8 p1 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2);
+ u8 p2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3);
+ u8 e1 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2);
+ u8 e2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3);
+ e1 -= p1;
+ e2 -= p2;
+ sprite->pos1.x = p1 + ((gBattleAnimArgs[0] * e1) / 100);
+ sprite->pos1.y = p2 + ((gBattleAnimArgs[0] * e2) / 100);
+ sprite->pos2.x = gBattleAnimArgs[1];
+ sprite->pos2.y = gBattleAnimArgs[2];
+ sprite->subpriority = gBattleAnimArgs[3] + 30;
+ StartSpriteAnim(sprite, gBattleAnimArgs[4]);
+ sprite->data2 = gBattleAnimArgs[5];
+ sprite->callback = sub_80CB710;
+ gUnknown_03000728[0] = sprite->pos1.x;
+ gUnknown_03000728[1] = sprite->pos1.y;
+ gUnknown_03000728[2] = e1;
+ gUnknown_03000728[3] = e2;
+}
+#else
+__attribute__((naked))
+void sub_80CB620(struct Sprite* sprite)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ mov r6, r10\n\
+ mov r5, r9\n\
+ mov r4, r8\n\
+ push {r4-r6}\n\
+ sub sp, 0x4\n\
+ mov r9, r0\n\
+ ldr r4, _080CB6FC @ =gBattleAnimPlayerMonIndex\n\
+ ldrb r0, [r4]\n\
+ movs r1, 0x2\n\
+ bl sub_8077ABC\n\
+ adds r5, r0, 0\n\
+ lsls r5, 24\n\
+ lsrs r5, 24\n\
+ ldrb r0, [r4]\n\
+ movs r1, 0x3\n\
+ bl sub_8077ABC\n\
+ mov r8, r0\n\
+ mov r0, r8\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ ldr r6, _080CB700 @ =gBattleAnimEnemyMonIndex\n\
+ ldrb r0, [r6]\n\
+ movs r1, 0x2\n\
+ bl sub_8077ABC\n\
+ adds r4, r0, 0\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ ldrb r0, [r6]\n\
+ movs r1, 0x3\n\
+ bl sub_8077ABC\n\
+ adds r2, r0, 0\n\
+ lsls r2, 24\n\
+ subs r4, r5\n\
+ lsls r4, 16\n\
+ lsrs r2, 24\n\
+ mov r1, r8\n\
+ subs r2, r1\n\
+ lsls r2, 16\n\
+ lsrs r2, 16\n\
+ lsrs r3, r4, 16\n\
+ mov r10, r3\n\
+ asrs r4, 16\n\
+ ldr r6, _080CB704 @ =gBattleAnimArgs\n\
+ movs r1, 0\n\
+ ldrsh r0, [r6, r1]\n\
+ muls r0, r4\n\
+ movs r1, 0x64\n\
+ str r2, [sp]\n\
+ bl __divsi3\n\
+ adds r5, r0\n\
+ mov r3, r9\n\
+ strh r5, [r3, 0x20]\n\
+ ldr r2, [sp]\n\
+ lsls r0, r2, 16\n\
+ asrs r0, 16\n\
+ movs r3, 0\n\
+ ldrsh r1, [r6, r3]\n\
+ muls r0, r1\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ add r8, r0\n\
+ mov r1, r8\n\
+ mov r0, r9\n\
+ strh r1, [r0, 0x22]\n\
+ ldrh r0, [r6, 0x2]\n\
+ mov r3, r9\n\
+ strh r0, [r3, 0x24]\n\
+ ldrh r0, [r6, 0x4]\n\
+ strh r0, [r3, 0x26]\n\
+ ldrb r0, [r6, 0x6]\n\
+ adds r0, 0x1E\n\
+ mov r1, r9\n\
+ adds r1, 0x43\n\
+ strb r0, [r1]\n\
+ ldrb r1, [r6, 0x8]\n\
+ mov r0, r9\n\
+ bl StartSpriteAnim\n\
+ ldrh r0, [r6, 0xA]\n\
+ mov r1, r9\n\
+ strh r0, [r1, 0x32]\n\
+ ldr r0, _080CB708 @ =sub_80CB710\n\
+ str r0, [r1, 0x1C]\n\
+ ldr r1, _080CB70C @ =gUnknown_03000728\n\
+ mov r3, r9\n\
+ ldrh r0, [r3, 0x20]\n\
+ strh r0, [r1]\n\
+ ldrh r0, [r3, 0x22]\n\
+ strh r0, [r1, 0x2]\n\
+ mov r0, r10\n\
+ strh r0, [r1, 0x4]\n\
+ ldr r2, [sp]\n\
+ strh r2, [r1, 0x6]\n\
+ add sp, 0x4\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080CB6FC: .4byte gBattleAnimPlayerMonIndex\n\
+_080CB700: .4byte gBattleAnimEnemyMonIndex\n\
+_080CB704: .4byte gBattleAnimArgs\n\
+_080CB708: .4byte sub_80CB710\n\
+_080CB70C: .4byte gUnknown_03000728\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_80CB710(struct Sprite* sprite)
+{
+ if(++sprite->data0 > (sprite->data2 - 10))
+ {
+ sprite->invisible = sprite->data0 % 2;
+ }
+ if(sprite->data0 > sprite->data2) move_anim_8072740(sprite);
+}
+
+void sub_80CB768(struct Sprite* sprite)
+{
+ if(!sprite->data0)
+ {
+ sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2) + gBattleAnimArgs[0];
+ sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 1) + gBattleAnimArgs[1];
+ sprite->data1 = gBattleAnimArgs[2];
+ sprite->data2 = gBattleAnimArgs[3];
+ sprite->data3 = gBattleAnimArgs[4];
+ }
+ sprite->data0++;
+ sprite->pos2.x = sprite->data1 * sprite->data0;
+ sprite->pos2.y = Sin((sprite->data0 * 20) & 0xFF, sprite->data2);
+ if(sprite->data0 > sprite->data3) move_anim_8072740(sprite);
+}
+
+void sub_80CB7EC(struct Sprite* sprite, s16 c)
+{
+ s32 a = (sprite->pos1.x * 256) | sprite->pos1.y;
+ s32 b = (sprite->data6 * 256) | sprite->data7;
+ c *= 256;
+ sprite->data5 = a;
+ sprite->data6 = b;
+ sprite->data7 = c;
+} \ No newline at end of file