summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorU-User-PC\User <golemgalvanize@github.com>2017-08-28 12:37:37 -0400
committerU-User-PC\User <golemgalvanize@github.com>2017-08-28 12:37:37 -0400
commit863afd9ed825d0f401b2c6441c5f1ac54c41540a (patch)
treeeff0df2e8e28832c1804bc95b4fe630811a5a534 /src
parent0c03f535e144d9b43f03826fb337afa3b83e7ebb (diff)
decompiled up to sub_80D0E30
Diffstat (limited to 'src')
-rwxr-xr-xsrc/battle_anim_80CA710.c447
1 files changed, 446 insertions, 1 deletions
diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c
index 76c74c89a..2c2c40ff1 100755
--- a/src/battle_anim_80CA710.c
+++ b/src/battle_anim_80CA710.c
@@ -16,6 +16,35 @@ struct __attribute__((packed)) Some3ByteStruct {
u8 unkArr[3];
};
+struct UnknownStruct_1
+{
+ void *src[2];
+ void *dest;
+ u32 unkC;
+ void (*unk10)(void);
+ u8 srcBank;
+ u8 unk15;
+ u8 unk16;
+ u8 unk17;
+ u8 taskId;
+ u8 filler19[0x7];
+};
+
+struct UnknownStruct_2
+{
+ const void *dest;
+ u32 control;
+ u8 unk8;
+ u8 unk9;
+};
+
+struct UnknownStruct6
+{
+ u16 unk0[0xA0];
+ u8 fillerA0[0x640];
+ u16 unk780[0xA0];
+};
+
extern u8 gBanksBySide[];
extern s16 gBattleAnimArgs[8];
extern u8 gBattleAnimPlayerMonIndex;
@@ -27,6 +56,8 @@ extern struct SpriteTemplate gSpriteTemplate_83D75AC;
extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8;
extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8;
extern struct AffineAnimFrameCmd gUnknown_083D76F4;
+extern struct AffineAnimFrameCmd gUnknown_083D7714;
+extern struct AffineAnimFrameCmd gUnknown_083D77B0;
extern s16 gUnknown_03000728[];
extern s8 gUnknown_083D680C[11][3];
extern u16 gUnknown_083D6984[];
@@ -36,6 +67,10 @@ extern u8 gNoOfAllBanks;
extern u8 gHealthboxIDs[];
extern u16 gUnknown_083D712C[4][6];
extern u16 gBattleTypeFlags;
+extern u16 gUnknown_030042C0;
+extern u16 gUnknown_03004288;
+extern struct UnknownStruct6 gUnknown_03004DE0;
+extern struct UnknownStruct_1 gUnknown_03004DC0;
void sub_80CA768(struct Sprite* sprite);
void sub_80CA8B4(struct Sprite* sprite);
@@ -112,6 +147,7 @@ void sub_80D02D0(struct Sprite* sprite);
void sub_80D0344(struct Sprite* sprite);
void sub_80D03A8(struct Sprite* sprite);
void sub_80D0704(struct Sprite* sprite);
+void sub_80D0E8C(struct Sprite* sprite);
s16 sub_80CC338(struct Sprite* sprite);
@@ -152,6 +188,9 @@ s16 sub_81174E0(s16 a);
s16 sub_81174C4(s16 a, s16 b);
void sub_8079108(u16 a1, bool8 a2);
void sub_80798F4(struct Task *task, u8 a2, void *a3);
+bool8 sub_807992C(struct Task *task);
+u8 sub_8077FC0(u8 slot);
+void sub_80895F8(struct UnknownStruct_2 unk);
void move_anim_8074EE0(struct Sprite *sprite);
bool8 sub_8078718(struct Sprite *sprite);
@@ -168,6 +207,10 @@ void sub_80CF514(u8 taskId);
void sub_80D0428(u8 taskId);
void sub_80D04E0(u8 taskId);
void sub_80D07AC(u8 taskId);
+void sub_80D0904(u8 taskId);
+void sub_80D0A8C(u8 taskId);
+void sub_80D0B3C(u8 taskId);
+void sub_80D0D68(u8 taskId);
void sub_80CC358(struct Task* task, u8 taskId);
void sub_80D0614(struct Task* task, u8 taskId);
@@ -4494,5 +4537,407 @@ void sub_80D074C(u8 taskId)
}
}
+void sub_80D07AC(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ switch (task->data[1])
+ {
+ case 0:
+ sub_807992C(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:
+ sub_807992C(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 (!sub_807992C(task))
+ {
+ if (--task->data[2] == 0)
+ {
+ gSprites[task->data[0]].pos2.y = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ sub_80798F4(task, task->data[0], &gUnknown_083D76F4);
+ task->data[1] = 0;
+ }
+ }
+ break;
+ }
+}
- \ No newline at end of file
+void sub_80D08C8(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = obj_id_for_side_relative_to_move(0);
+ sub_80798F4(task, spriteId, &gUnknown_083D7714);
+ task->func = sub_80D0904;
+}
+
+void sub_80D0904(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (!sub_807992C(task))
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_80D0930(struct Sprite* sprite)
+{
+ if (GetBankSide(gBattleAnimPlayerMonIndex) == 0)
+ {
+ StartSpriteAnim(sprite, 0);
+ sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2) + 32;
+ sprite->data1 = 0x40;
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2) - 32;
+ sprite->data1 = -0x40;
+ }
+ sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3);
+ sprite->data0 = 0x34;
+ sprite->data2 = 0;
+ sprite->data3 = 0;
+ sprite->data4 = 0;
+ oamt_set_x3A_32(sprite, move_anim_8072740);
+ sprite->callback = sub_8078394;
+}
+
+void sub_80D09C0(struct Sprite* sprite)
+{
+ u8 bank;
+ if (gBattleAnimArgs[0] == 0)
+ bank = gBattleAnimPlayerMonIndex;
+ else
+ bank = gBattleAnimEnemyMonIndex;
+ if (GetBankSide(bank) == 1)
+ {
+ gBattleAnimArgs[1] *= -1;
+ }
+ sprite->pos1.x = sub_8077ABC(bank, 2) + gBattleAnimArgs[1];
+ sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[2];
+ if (sprite->pos1.y <= 7)
+ sprite->pos1.y = 8;
+ oamt_set_x3A_32(sprite, move_anim_8074EE0);
+ sprite->callback = sub_80785E4;
+}
+
+void sub_80D0A4C(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = obj_id_for_side_relative_to_move(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);
+}
+
+void sub_80D0AB8(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ task->data[0] = obj_id_for_side_relative_to_move(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(gBattleAnimPlayerMonIndex) == 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;
+ }
+}
+
+void sub_80D0C88(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ struct UnknownStruct_2 sp;
+ s16 i;
+ task->data[0] = sub_8077FC0(gBattleAnimEnemyMonIndex) + 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_807A100(gBattleAnimEnemyMonIndex, 0);
+ if (GetBankIdentity_permutated(gBattleAnimEnemyMonIndex) == 1)
+ {
+ task->data[6] = gUnknown_030042C0;
+ sp.dest = (u16 *)REG_ADDR_BG1HOFS;
+ }
+ else
+ {
+ task->data[6] = gUnknown_03004288;
+ sp.dest = (u16 *)REG_ADDR_BG2HOFS;
+ }
+ for (i = task->data[0] - 0x40; i <= task->data[0];i++)
+ {
+ if (i >= 0)
+ {
+ gUnknown_03004DE0.unk0[i] = task->data[6] + 0xF0;
+ gUnknown_03004DE0.unk780[i] = task->data[6] + 0xF0;
+ }
+ }
+ sp.control = 0xa2600001;
+ sp.unk8 = 1;
+ sp.unk9 = 0;
+ sub_80895F8(sp);
+ task->func = sub_80D0D68;
+}
+
+#ifdef NONMATCHING
+void sub_80D0D68(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] = 3 & task->data[3];
+ task->data[5] = task->data[0] - task->data[3];
+ switch (task->data[2])
+ {
+ case 1:
+ task->data[5] -= 2;
+ default:
+ case 0:
+ break;
+ case 2:
+ case 3:
+ task->data[5]++;
+ break;
+ }
+ if (task->data[5] >= 0)
+ {
+ gUnknown_03004DE0.unk0[task->data[5]] = task->data[6];
+ gUnknown_03004DE0.unk780[task->data[5]] = task->data[6];
+ }
+ if (++task->data[3] >= task->data[15])
+ {
+ gUnknown_03004DC0.unk15 = 3;
+ DestroyAnimVisualTask(taskId);
+ }
+
+ }
+ break;
+ }
+}
+#else
+__attribute__((naked))
+void sub_80D0D68(u8 taskId)
+{
+ asm(".syntax unified\n\
+ push {r4,lr}\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ lsls r0, r4, 2\n\
+ adds r0, r4\n\
+ lsls r0, 3\n\
+ ldr r1, _080D0D88 @ =gTasks\n\
+ adds r3, r0, r1\n\
+ movs r1, 0x10\n\
+ ldrsh r0, [r3, r1]\n\
+ cmp r0, 0\n\
+ beq _080D0D8C\n\
+ cmp r0, 0x1\n\
+ beq _080D0DA2\n\
+ b _080D0E22\n\
+ .align 2, 0\n\
+_080D0D88: .4byte gTasks\n\
+_080D0D8C:\n\
+ ldrh r0, [r3, 0x12]\n\
+ adds r0, 0x1\n\
+ strh r0, [r3, 0x12]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x14\n\
+ ble _080D0E22\n\
+ ldrh r0, [r3, 0x10]\n\
+ adds r0, 0x1\n\
+ strh r0, [r3, 0x10]\n\
+ b _080D0E22\n\
+_080D0DA2:\n\
+ ldrh r0, [r3, 0xA]\n\
+ adds r0, 0x1\n\
+ strh r0, [r3, 0xA]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x3\n\
+ ble _080D0E22\n\
+ movs r0, 0\n\
+ strh r0, [r3, 0xA]\n\
+ ldrh r1, [r3, 0xE]\n\
+ movs r0, 0x3\n\
+ ands r0, r1\n\
+ strh r0, [r3, 0xC]\n\
+ ldrh r0, [r3, 0x8]\n\
+ subs r0, r1\n\
+ strh r0, [r3, 0x12]\n\
+ movs r2, 0xC\n\
+ ldrsh r1, [r3, r2]\n\
+ cmp r1, 0x1\n\
+ beq _080D0DD8\n\
+ cmp r1, 0x1\n\
+ ble _080D0DE0\n\
+ cmp r1, 0x2\n\
+ beq _080D0DDC\n\
+ cmp r1, 0x3\n\
+ beq _080D0DDC\n\
+ b _080D0DE0\n\
+_080D0DD8:\n\
+ subs r0, 0x2\n\
+ b _080D0DDE\n\
+_080D0DDC:\n\
+ adds r0, 0x1\n\
+_080D0DDE:\n\
+ strh r0, [r3, 0x12]\n\
+_080D0DE0:\n\
+ movs r1, 0x12\n\
+ ldrsh r0, [r3, r1]\n\
+ cmp r0, 0\n\
+ blt _080D0E04\n\
+ ldr r2, _080D0E28 @ =gUnknown_03004DE0\n\
+ lsls r0, 1\n\
+ adds r0, r2\n\
+ ldrh r1, [r3, 0x14]\n\
+ strh r1, [r0]\n\
+ movs r1, 0x12\n\
+ ldrsh r0, [r3, r1]\n\
+ lsls r0, 1\n\
+ movs r1, 0xF0\n\
+ lsls r1, 3\n\
+ adds r2, r1\n\
+ adds r0, r2\n\
+ ldrh r1, [r3, 0x14]\n\
+ strh r1, [r0]\n\
+_080D0E04:\n\
+ ldrh r0, [r3, 0xE]\n\
+ adds r0, 0x1\n\
+ strh r0, [r3, 0xE]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ movs r2, 0x26\n\
+ ldrsh r1, [r3, r2]\n\
+ cmp r0, r1\n\
+ blt _080D0E22\n\
+ ldr r1, _080D0E2C @ =gUnknown_03004DC0\n\
+ movs r0, 0x3\n\
+ strb r0, [r1, 0x15]\n\
+ adds r0, r4, 0\n\
+ bl DestroyAnimVisualTask\n\
+_080D0E22:\n\
+ pop {r4}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080D0E28: .4byte gUnknown_03004DE0\n\
+_080D0E2C: .4byte gUnknown_03004DC0\n\
+.syntax divided\n");
+}
+#endif
+
+void sub_80D0E30(struct Sprite* sprite)
+{
+ sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 0) - 16;
+ sprite->pos1.y = sub_8077FC0(gBattleAnimEnemyMonIndex) + 16;
+ sprite->data0 = 0;
+ sprite->data1 = 0;
+ sprite->data2 = 0;
+ sprite->data3 = 16;
+ sprite->data4 = 0;
+ sprite->data5 = sub_807A100(gBattleAnimEnemyMonIndex, 0) + 2;
+ sprite->data6 = sub_8076F98(0x3F);
+ sprite->callback = sub_80D0E8C;
+}