diff options
author | U-User-PC\User <golemgalvanize@github.com> | 2017-08-28 12:37:37 -0400 |
---|---|---|
committer | U-User-PC\User <golemgalvanize@github.com> | 2017-08-28 12:37:37 -0400 |
commit | 863afd9ed825d0f401b2c6441c5f1ac54c41540a (patch) | |
tree | eff0df2e8e28832c1804bc95b4fe630811a5a534 /src | |
parent | 0c03f535e144d9b43f03826fb337afa3b83e7ebb (diff) |
decompiled up to sub_80D0E30
Diffstat (limited to 'src')
-rwxr-xr-x | src/battle_anim_80CA710.c | 447 |
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; +} |