diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/battle_anim_80CA710.c | 2324 |
1 files changed, 1235 insertions, 1089 deletions
diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index b4f94fbde..7a191e2d1 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -1,6 +1,8 @@ #include "global.h" #include "battle.h" #include "battle_anim.h" +#include "battle_anim_80CA710.h" +#include "battle_interface.h" #include "blend_palette.h" #include "decompress.h" #include "ewram.h" @@ -13,32 +15,7 @@ #include "sprite.h" #include "task.h" #include "trig.h" - -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; -}; +#include "unknown_task.h" struct UnknownStruct6 { @@ -98,173 +75,122 @@ extern u16 gUnknown_083D7A5C[5]; extern struct UnknownStruct6 gUnknown_03004DE0; extern struct UnknownStruct_1 gUnknown_03004DC0; -void sub_80CA768(struct Sprite* sprite); -void sub_80CA8B4(struct Sprite* sprite); -void sub_80CA9F8(struct Sprite* sprite); -void sub_80CAACC(struct Sprite* sprite); -void sub_80CAB88(struct Sprite* sprite); -void sub_80CABC0(struct Sprite* sprite); -void sub_80CAC44(struct Sprite* sprite); -void sub_80CADA8(struct Sprite* sprite); -void sub_80CAE74(struct Sprite* sprite); -void sub_80CAF20(struct Sprite* sprite); -void sub_80CAF6C(struct Sprite* sprite); -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_80CBB60(struct Sprite* sprite); -void sub_80CBC8C(struct Sprite* sprite); -void sub_80CBCF8(struct Sprite* sprite); -void sub_80CBDB0(struct Sprite* sprite); -void sub_80CC408(struct Sprite* sprite); -void sub_80CC580(struct Sprite* sprite); -void sub_80CC7D4(struct Sprite* sprite); -void sub_80CCB00(struct Sprite* sprite); -void sub_80CCCB4(struct Sprite* sprite); -void sub_80CCE0C(struct Sprite* sprite); -void sub_80CCF70(struct Sprite* sprite); -void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2); -void sub_80CD2D4(struct Sprite* sprite); -void sub_80CD394(struct Sprite* sprite); -void sub_80CD408(struct Sprite* sprite); -void sub_80CD4B8(struct Sprite* sprite); -void sub_80CD4EC(struct Sprite* sprite); -void sub_80CD5A8(struct Sprite* sprite); -void sub_80CD654(struct Sprite* sprite); -void sub_80CD67C(struct Sprite* sprite); -void sub_80CD7CC(struct Sprite* sprite); -void sub_80CD81C(struct Sprite* sprite); -void sub_80CD8A8(struct Sprite* sprite); -void sub_80CD8F8(struct Sprite* sprite); -void sub_80CD91C(struct Sprite* sprite); -void sub_80CD9B8(struct Sprite* sprite); -void sub_80CD9D4(struct Sprite* sprite); -void sub_80CDE78(struct Sprite* sprite); -void sub_80CDEB0(struct Sprite* sprite); -void sub_80CDEC0(struct Sprite* sprite); -void sub_80CDF70(struct Sprite* sprite); -void sub_80CE000(struct Sprite* sprite); -void sub_80CE1AC(struct Sprite* sprite); -void sub_80CE354(struct Sprite* sprite); -void sub_80CE3B0(struct Sprite* sprite); -void sub_80CE798(struct Sprite* sprite); -void sub_80CE974(struct Sprite* sprite); -void sub_80CEC1C(struct Sprite* sprite); -void sub_80CED78(struct Sprite* sprite); -void sub_80CEEE8(struct Sprite* sprite); -void sub_80CF008(struct Sprite* sprite); -void sub_80CF088(struct Sprite* sprite); -void sub_80CF138(struct Sprite* sprite); -void sub_80CF158(struct Sprite* sprite); -void sub_80CF228(struct Sprite* sprite); -void sub_80CF264(struct Sprite* sprite); -void sub_80CF310(struct Sprite* sprite); -void sub_80CF490(struct Sprite* sprite); -void sub_80CF4B8(struct Sprite* sprite); -void sub_80CF6B4(struct Sprite* sprite); -void sub_80CFE2C(struct Sprite* sprite); -void sub_80CFF68(struct Sprite* sprite); -void sub_80D0030(struct Sprite* sprite); -void sub_80D00B4(struct Sprite* sprite); -void sub_80D020C(struct Sprite* sprite); -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); -void sub_80D1098(struct Sprite* sprite); -void sub_80D13AC(struct Sprite* sprite); -void sub_80D1424(struct Sprite* sprite); -void sub_80D144C(struct Sprite* sprite); -void sub_80D14C4(struct Sprite* sprite); -void sub_80D1504(struct Sprite* sprite); -void sub_80D154C(struct Sprite* sprite); -void sub_80D158C(struct Sprite* sprite); -void sub_80D1FA4(struct Sprite* sprite); -void sub_80D2094(struct Sprite* sprite); -void sub_80D2704(struct Sprite* sprite); -void sub_80D2834(struct Sprite* sprite); - - -s16 sub_80CC338(struct Sprite* sprite); - -void sub_80787B0(struct Sprite *sprite, u8 a2); -void sub_8078764(struct Sprite *sprite, u8 a2); -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_8078600(struct Sprite *sprite); -void sub_8078504(struct Sprite *sprite); -void sub_807861C(struct Sprite *sprite); -void sub_8078650(struct Sprite *sprite); -void sub_8078394(struct Sprite *sprite); -void sub_80785E4(struct Sprite *sprite); -void sub_8078278(struct Sprite *sprite); -void sub_8078C00(struct Sprite *sprite); -void sub_8078114(struct Sprite *sprite); -void sub_80793C4(struct Sprite *sprite); - -extern void sub_8043DB0(); -extern void sub_8043DFC(); - -void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4); -u8 sub_8079ED4(u8 slot); -s8 sub_8076F98(s8 a); -int sub_807A100(u8 slot, u8 a2); -u16 sub_80790F0(s16 a, s16 b); -void sub_8078FDC(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation); -void sub_807867C(struct Sprite *sprite, s16 a2); -u8 sub_8077EE4(u8 slot, u8 a2); -u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7); -u32 sub_80792C0(u8 a1, u8 a2, u8 a3, u8 a4); -s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 a1); -void obj_delete_but_dont_free_vram(struct Sprite *sprite); -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 sub_80763FC(u16 a, u16 *b, u32 c, u8 d); - -void move_anim_8074EE0(struct Sprite *sprite); -bool8 sub_8078718(struct Sprite *sprite); -bool8 sub_8078CE8(struct Sprite *sprite); - -void sub_80CB3A8(u8 taskId); -void sub_80CB438(u8 taskId); -void sub_80CBF5C(u8 taskId); -void sub_80CDB60(u8 taskId); -void sub_80CDD20(u8 taskId); -void sub_80CE4D4(u8 taskId); -void sub_80CE910(u8 taskId); -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_80D15E0(u8 taskId); -void sub_80D16A0(u8 taskId); -void sub_80D1808(u8 taskId); -void sub_80D1930(u8 taskId); -void sub_80D1D48(u8 taskId); -void sub_80D1D9C(u8 taskId); -void sub_80D21F0(u8 taskId); -void sub_80D24E0(u8 taskId); - - -void sub_80CC358(struct Task* task, u8 taskId); -void sub_80D0614(struct Task* task, u8 taskId); - -void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e); +static void sub_80CA768(struct Sprite* sprite); +static void sub_80CA8B4(struct Sprite* sprite); +static void sub_80CA9F8(struct Sprite* sprite); +static void sub_80CAACC(struct Sprite* sprite); +static void sub_80CAB88(struct Sprite* sprite); +static void sub_80CABC0(struct Sprite* sprite); +static void sub_80CAC44(struct Sprite* sprite); +static void sub_80CADA8(struct Sprite* sprite); +static void sub_80CAE74(struct Sprite* sprite); +static void sub_80CAF20(struct Sprite* sprite); +static void sub_80CAF6C(struct Sprite* sprite); +static void sub_80CB09C(struct Sprite* sprite); +static void sub_80CB1A4(struct Sprite* sprite); +static void sub_80CB298(struct Sprite* sprite); +static void sub_80CB2D4(struct Sprite* sprite); +static void sub_80CB710(struct Sprite* sprite); +static void sub_80CBB60(struct Sprite* sprite); +static void sub_80CBC8C(struct Sprite* sprite); +static void sub_80CBCF8(struct Sprite* sprite); +static void sub_80CBDB0(struct Sprite* sprite); +static void sub_80CC408(struct Sprite* sprite); +static void sub_80CC580(struct Sprite* sprite); +static void sub_80CC7D4(struct Sprite* sprite); +static void sub_80CCB00(struct Sprite* sprite); +static void sub_80CCCB4(struct Sprite* sprite); +static void sub_80CCE0C(struct Sprite* sprite); +static void sub_80CCF70(struct Sprite* sprite); +static void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2); +static void sub_80CD2D4(struct Sprite* sprite); +static void sub_80CD394(struct Sprite* sprite); +static void sub_80CD408(struct Sprite* sprite); +static void sub_80CD4B8(struct Sprite* sprite); +static void sub_80CD4EC(struct Sprite* sprite); +static void sub_80CD5A8(struct Sprite* sprite); +static void sub_80CD654(struct Sprite* sprite); +static void sub_80CD67C(struct Sprite* sprite); +static void sub_80CD7CC(struct Sprite* sprite); +static void sub_80CD81C(struct Sprite* sprite); +static void sub_80CD8A8(struct Sprite* sprite); +static void sub_80CD8F8(struct Sprite* sprite); +static void sub_80CD91C(struct Sprite* sprite); +static void sub_80CD9B8(struct Sprite* sprite); +static void sub_80CD9D4(struct Sprite* sprite); +static void sub_80CDE78(struct Sprite* sprite); +static void sub_80CDEB0(struct Sprite* sprite); +static void sub_80CDEC0(struct Sprite* sprite); +static void sub_80CDF70(struct Sprite* sprite); +static void sub_80CE000(struct Sprite* sprite); +static void sub_80CE1AC(struct Sprite* sprite); +static void sub_80CE354(struct Sprite* sprite); +static void sub_80CE3B0(struct Sprite* sprite); +static void sub_80CE798(struct Sprite* sprite); +static void sub_80CE974(struct Sprite* sprite); +static void sub_80CEC1C(struct Sprite* sprite); +static void sub_80CED78(struct Sprite* sprite); +static void sub_80CEEE8(struct Sprite* sprite); +static void sub_80CF008(struct Sprite* sprite); +static void sub_80CF088(struct Sprite* sprite); +static void sub_80CF138(struct Sprite* sprite); +static void sub_80CF158(struct Sprite* sprite); +static void sub_80CF228(struct Sprite* sprite); +static void sub_80CF264(struct Sprite* sprite); +static void sub_80CF310(struct Sprite* sprite); +static void sub_80CF490(struct Sprite* sprite); +static void sub_80CF4B8(struct Sprite* sprite); +static void sub_80CF6B4(struct Sprite* sprite); +static void sub_80CFE2C(struct Sprite* sprite); +static void sub_80CFF68(struct Sprite* sprite); +static void sub_80D0030(struct Sprite* sprite); +static void sub_80D00B4(struct Sprite* sprite); +static void sub_80D020C(struct Sprite* sprite); +static void sub_80D02D0(struct Sprite* sprite); +static void sub_80D0344(struct Sprite* sprite); +static void sub_80D03A8(struct Sprite* sprite); +extern void sub_80D0704(struct Sprite* sprite); +static void sub_80D0E8C(struct Sprite* sprite); +static void sub_80D1098(struct Sprite* sprite); +static void sub_80D13AC(struct Sprite* sprite); +static void sub_80D1424(struct Sprite* sprite); +static void sub_80D144C(struct Sprite* sprite); +static void sub_80D14C4(struct Sprite* sprite); +static void sub_80D1504(struct Sprite* sprite); +static void sub_80D154C(struct Sprite* sprite); +static void sub_80D158C(struct Sprite* sprite); +static void sub_80D1FA4(struct Sprite* sprite); +static void sub_80D2094(struct Sprite* sprite); +static void sub_80D2704(struct Sprite* sprite); +static void sub_80D2834(struct Sprite* sprite); +static s16 sub_80CC338(struct Sprite* sprite); +static void sub_80CB3A8(u8 taskId); +static void sub_80CB438(u8 taskId); +static void sub_80CBF5C(u8 taskId); +static void sub_80CDB60(u8 taskId); +static void sub_80CDD20(u8 taskId); +static void sub_80CE4D4(u8 taskId); +static void sub_80CE910(u8 taskId); +static void sub_80CF514(u8 taskId); +static void sub_80D0428(u8 taskId); +static void sub_80D04E0(u8 taskId); +static void sub_80D07AC(u8 taskId); +static void sub_80D0904(u8 taskId); +static void sub_80D0A8C(u8 taskId); +static void sub_80D0B3C(u8 taskId); +static void sub_80D0D68(u8 taskId); +static void sub_80D15E0(u8 taskId); +static void sub_80D16A0(u8 taskId); +static void sub_80D1808(u8 taskId); +static void sub_80D1930(u8 taskId); +static void sub_80D1D48(u8 taskId); +static void sub_80D1D9C(u8 taskId); +static void sub_80D21F0(u8 taskId); +static void sub_80D24E0(u8 taskId); +static void sub_80CC358(struct Task* task, u8 taskId); +extern void sub_80D0614(struct Task* task, u8 taskId); +static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e); + void sub_80CA710(struct Sprite* sprite) { @@ -272,6 +198,7 @@ void sub_80CA710(struct Sprite* sprite) sprite->pos1.y += gBattleAnimArgs[1]; sprite->data0 = gBattleAnimArgs[2]; sprite->data1 = gBattleAnimArgs[3]; + if (GetBankSide(gBattleAnimBankAttacker)) { sprite->data3 = -gBattleAnimArgs[4]; @@ -280,6 +207,7 @@ void sub_80CA710(struct Sprite* sprite) { sprite->data3 = gBattleAnimArgs[4]; } + sprite->data4 = gBattleAnimArgs[5]; sprite->callback = sub_80CA768; } @@ -337,13 +265,13 @@ void sub_80CA858(struct Sprite* sprite) void sub_80CA8B4(struct Sprite* sprite) { - if(sub_8078B5C(sprite)) + if (sub_8078B5C(sprite)) { DestroySprite(sprite); } else { - if(sprite->data5 > 0x7F) + if (sprite->data5 > 0x7F) { sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) + 1; } @@ -370,7 +298,9 @@ void sub_80CA928(u8 taskId) gBattleAnimArgs[3] = 0; CreateSpriteAndAnimate(&gSpriteTemplate_83D631C, 0, 0, sub_8079E90(gBattleAnimBankTarget) + 1); } - if (gTasks[taskId].data[1] == 15) DestroyAnimVisualTask(taskId); + + if (gTasks[taskId].data[1] == 15) + DestroyAnimVisualTask(taskId); } void sub_80CA9A8(struct Sprite* sprite) @@ -386,7 +316,8 @@ void sub_80CA9A8(struct Sprite* sprite) void sub_80CA9F8(struct Sprite* sprite) { - if (sub_8078718(sprite)) move_anim_8072740(sprite); + if (sub_8078718(sprite)) + move_anim_8072740(sprite); } void sub_80CAA14(struct Sprite* sprite) @@ -405,6 +336,7 @@ void sub_80CAA14(struct Sprite* sprite) { sprite->pos1.x += 20; } + b = Random(); sprite->data0 = (b & 31) + 64; sprite->data1 = sprite->pos1.x; @@ -435,6 +367,7 @@ void sub_80CAACC(struct Sprite* sprite) { sprite->subpriority = sprite->data6 + 1; } + sprite->data5 = (sprite->data5 + 24) & 0xFF; } } @@ -442,10 +375,11 @@ void sub_80CAACC(struct Sprite* sprite) void sub_80CAB18(struct Sprite* sprite) { sub_80787B0(sprite, 1); - if(GetBankSide(gBattleAnimBankAttacker)) + if (GetBankSide(gBattleAnimBankAttacker)) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } + sprite->data0 = gBattleAnimArgs[4]; sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[2]; sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[3]; @@ -456,7 +390,7 @@ void sub_80CAB18(struct Sprite* sprite) void sub_80CAB88(struct Sprite* sprite) { - if(sub_8078718(sprite)) + if (sub_8078718(sprite)) { sprite->invisible = 1; sprite->data0 = 10; @@ -482,6 +416,7 @@ void sub_80CABF8(struct Sprite* sprite) { sprite->oam.objMode = 1; } + sprite->data0 = gBattleAnimArgs[3]; sprite->data1 = gBattleAnimArgs[2]; sprite->callback = sub_80CAC44; @@ -490,8 +425,7 @@ void sub_80CABF8(struct Sprite* sprite) void sub_80CAC44(struct Sprite* sprite) { - - u8 b; + u8 var1; sprite->pos2.x = Sin(sprite->data1, 32); sprite->pos2.y = Cos(sprite->data1, -3) + ((sprite->data2 += 24) >> 8); @@ -501,21 +435,24 @@ void sub_80CAC44(struct Sprite* sprite) } else { - b = sub_8079ED4(gBattleAnimBankTarget) + 1; - if ( b > 3) + var1 = sub_8079ED4(gBattleAnimBankTarget) + 1; + if (var1 > 3) { - b = 3; + var1 = 3; } - sprite->oam.priority = b; + + sprite->oam.priority = var1; } + sprite->data1 = (sprite->data1 + 2) & 0xFF; sprite->data0--; - if (sprite->data0 == -1) move_anim_8072740(sprite); + if (sprite->data0 == -1) + move_anim_8072740(sprite); } void sub_80CACEC(u8 taskId) { - if(NotInBattle() || !IsDoubleBattle()) + if (NotInBattle() || !IsDoubleBattle()) { DestroyAnimVisualTask(taskId); } @@ -529,6 +466,7 @@ void sub_80CACEC(u8 taskId) { REG_BG1CNT_BITFIELD.priority = 1; } + DestroyAnimVisualTask(taskId); } } @@ -549,7 +487,7 @@ void sub_80CAD54(struct Sprite* sprite) void sub_80CADA8(struct Sprite* sprite) { - if(!sub_8078B5C(sprite)) + if (!sub_8078B5C(sprite)) { sprite->pos2.x += Sin(sprite->data5, 32); sprite->pos2.y += Cos(sprite->data5, -5); @@ -561,6 +499,7 @@ void sub_80CADA8(struct Sprite* sprite) { sprite->subpriority = sub_8079E90(gBattleAnimBankAttacker) + 1; } + sprite->data5 = (sprite->data5 + 5) & 0xFF; } else @@ -585,13 +524,14 @@ void sub_80CAE20(struct Sprite* sprite) void sub_80CAE74(struct Sprite* sprite) { - if(!sub_8078B5C(sprite)) + if (!sub_8078B5C(sprite)) { sprite->pos2.x += Sin(sprite->data5, 8); if ((u16)(sprite->data5 - 0x3B) < 5 || (u16)(sprite->data5 - 0xBB) < 5) { sprite->oam.matrixNum ^= 8; } + sprite->data5 = (sprite->data5 + 5) & 0xFF; } else @@ -612,9 +552,9 @@ void sub_80CAED8(struct Sprite* sprite) void sub_80CAF20(struct Sprite* sprite) { - if(!sprite->data2) + if (!sprite->data2) { - if(sprite->data1 & 1) + if (sprite->data1 & 1) { sprite->data0 = 0x80; sprite->data1 = 0; @@ -638,7 +578,7 @@ void sub_80CAF20(struct Sprite* sprite) void sub_80CAF6C(struct Sprite* sprite) { - if(GetBankSide(gBattleAnimBankAttacker)) + if (GetBankSide(gBattleAnimBankAttacker)) { sprite->pos2.x = -Sin(sprite->data0, 0x19); } @@ -646,13 +586,15 @@ void sub_80CAF6C(struct Sprite* sprite) { sprite->pos2.x = Sin(sprite->data0, 0x19); } + sprite->data0 = (sprite->data0 + 2) & 0xFF; sprite->data1++; - if(!(sprite->data1 & 1)) + if (!(sprite->data1 & 1)) { sprite->pos2.y++; } - if(sprite->data1 > 0x50) + + if (sprite->data1 > 0x50) { move_anim_8072740(sprite); } @@ -661,12 +603,13 @@ void sub_80CAF6C(struct Sprite* sprite) void sub_80CAFD0(struct Sprite* sprite) { sub_80787B0(sprite, 1); - if(GetBankSide(gBattleAnimBankAttacker)) + if (GetBankSide(gBattleAnimBankAttacker)) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } + sprite->data0 = gBattleAnimArgs[4]; - if(!(gBattleAnimArgs[6])) + if (!(gBattleAnimArgs[6])) { sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; @@ -677,9 +620,10 @@ void sub_80CAFD0(struct Sprite* sprite) sprite->data2 += gBattleAnimArgs[2]; sprite->data4 += gBattleAnimArgs[3]; } + sprite->data5 = gBattleAnimArgs[5]; sub_80786EC(sprite); - if(GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) + if (GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) { sprite->data0 = 1; } @@ -687,6 +631,7 @@ void sub_80CAFD0(struct Sprite* sprite) { sprite->data0 = 0; } + sprite->callback = sub_80CB09C; } @@ -703,6 +648,7 @@ void sub_80CB09C(struct Sprite* sprite) sprite->data0 = a; if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0) sprite->oam.affineParam++; + if (sprite->oam.affineParam != 0 && sprite->data0 != 0) { sprite->invisible ^= 1; @@ -723,10 +669,11 @@ void sub_80CB09C(struct Sprite* sprite) void sub_80CB144(struct Sprite* sprite) { - if(!NotInBattle() && IsDoubleBattle() == TRUE) + if (!NotInBattle() && IsDoubleBattle() == TRUE) { sub_807A3FC(gBattleAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y); } + sprite->pos1.y += 32; sprite->data0 = gBattleAnimArgs[0]; sprite->data1 = gBattleAnimArgs[1]; @@ -738,21 +685,24 @@ void sub_80CB144(struct Sprite* sprite) void sub_80CB1A4(struct Sprite* sprite) { - if(sprite->data1 == 0xFF) + if (sprite->data1 == 0xFF) { sprite->pos1.y -= 2; } - else if(sprite->data1 > 0) + else if (sprite->data1 > 0) { sprite->pos1.y -= 2; sprite->data1 -= 2; } + sprite->data5 += sprite->data2; - if(sprite->data0 < sprite->data4) sprite->data5 += sprite->data2; + if (sprite->data0 < sprite->data4) + sprite->data5 += sprite->data2; + sprite->data5 &= 0xFF; sprite->pos2.x = Cos(sprite->data5, sprite->data3); sprite->pos2.y = Sin(sprite->data5, 5); - if(sprite->data5 <= 0x7F) + if (sprite->data5 <= 0x7F) { sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget) - 1; } @@ -760,8 +710,10 @@ void sub_80CB1A4(struct Sprite* sprite) { sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget) + 1; } + sprite->data0--; - if(!sprite->data0) move_anim_8072740(sprite); + if (!sprite->data0) + move_anim_8072740(sprite); } void sub_80CB25C(struct Sprite* sprite) @@ -776,7 +728,7 @@ void sub_80CB25C(struct Sprite* sprite) void sub_80CB298(struct Sprite* sprite) { - if((u16)gBattleAnimArgs[7] == 0xFFFF) + if ((u16)gBattleAnimArgs[7] == 0xFFFF) { sprite->affineAnimPaused = 0; GetAnimBankSpriteId(1); @@ -788,7 +740,7 @@ void sub_80CB298(struct Sprite* sprite) void sub_80CB2D4(struct Sprite* sprite) { GetAnimBankSpriteId(1); - if(!sprite->data2) + if (!sprite->data2) { sprite->data0 += 11; } @@ -797,15 +749,16 @@ void sub_80CB2D4(struct Sprite* sprite) sprite->data0 -= 11; } sprite->data1++; - if(sprite->data1 == 6) + if (sprite->data1 == 6) { sprite->data1 = 0; sprite->data2 ^= 1; } - if(sprite->affineAnimEnded) + + if (sprite->affineAnimEnded) { sprite->data7--; - if(sprite->data7 > 0) + if (sprite->data7 > 0) { StartSpriteAffineAnim(sprite, sprite->data6); } @@ -819,7 +772,7 @@ void sub_80CB2D4(struct Sprite* sprite) void sub_80CB340(u8 taskId) { u8 spriteId = GetAnimBankSpriteId(1); - if(gSprites[spriteId].invisible) + if (gSprites[spriteId].invisible) { DestroyAnimVisualTask(taskId); } @@ -838,15 +791,16 @@ void sub_80CB3A8(u8 taskId) u8 spriteId = GetAnimBankSpriteId(1); gTasks[taskId].data[10] += gTasks[taskId].data[0]; gSprites[spriteId].pos2.x = gTasks[taskId].data[10] >> 8; - if(GetBankSide(gBattleAnimBankTarget)) + if (GetBankSide(gBattleAnimBankTarget)) { gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; } + gTasks[taskId].data[11] += 16; obj_id_set_rotscale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0); sub_8079A64(spriteId); gTasks[taskId].data[1]--; - if(!gTasks[taskId].data[1]) + if (!gTasks[taskId].data[1]) { gTasks[taskId].data[0] = 0; gTasks[taskId].func = sub_80CB438; @@ -872,6 +826,7 @@ void sub_80CB438(u8 taskId) if (gTasks[taskId].data[0] == 0) return; } + gTasks[taskId].data[0]++; if (gTasks[taskId].data[0] == 3) DestroyAnimVisualTask(taskId); @@ -879,41 +834,42 @@ void sub_80CB438(u8 taskId) void sub_80CB4CC(struct Sprite* sprite) { - switch(sprite->data0) + switch (sprite->data0) { - case 0: + case 0: + { + if (GetBankSide(gBattleAnimBankTarget) == 0) { - if(GetBankSide(gBattleAnimBankTarget) == 0) - { - s16 a = gBattleAnimArgs[0]; - gBattleAnimArgs[0] = -a; - } - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[1]; - sprite->invisible = 1; - sprite->data0++; - break; + s16 a = gBattleAnimArgs[0]; + gBattleAnimArgs[0] = -a; } - case 1: + + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[1]; + sprite->invisible = 1; + sprite->data0++; + break; + } + case 1: + { + sprite->invisible = 0; + if (sprite->affineAnimEnded) { - sprite->invisible = 0; - if(sprite->affineAnimEnded) - { - ChangeSpriteAffineAnim(sprite, 1); - sprite->data0 = 25; - sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->callback = sub_8078CC0; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); - break; - } + ChangeSpriteAffineAnim(sprite, 1); + sprite->data0 = 25; + sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->callback = sub_8078CC0; + StoreSpriteCallbackInData6(sprite, move_anim_8072740); + break; } } + } } void sub_80CB59C(struct Sprite* sprite) { - if(!sprite->data0) + if (!sprite->data0) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1); @@ -923,7 +879,7 @@ void sub_80CB59C(struct Sprite* sprite) StartSpriteAnim(sprite, gBattleAnimArgs[3]); sprite->data2 = gBattleAnimArgs[4]; sprite->data0++; - if((sprite->pos1.y + sprite->pos2.y) > 120) + if ((sprite->pos1.y + sprite->pos2.y) > 120) { sprite->pos1.y += -120 + (sprite->pos2.y + sprite->pos1.y); } @@ -956,16 +912,16 @@ void sub_80CB620(struct Sprite *sprite) void sub_80CB710(struct Sprite* sprite) { - if(++sprite->data0 > (sprite->data2 - 10)) - { + if (++sprite->data0 > (sprite->data2 - 10)) sprite->invisible = sprite->data0 % 2; - } - if(sprite->data0 > sprite->data2) move_anim_8072740(sprite); + + if (sprite->data0 > sprite->data2) + move_anim_8072740(sprite); } void sub_80CB768(struct Sprite* sprite) { - if(!sprite->data0) + if (!sprite->data0) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[0]; sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; @@ -973,10 +929,12 @@ void sub_80CB768(struct Sprite* sprite) 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); + if (sprite->data0 > sprite->data3) + move_anim_8072740(sprite); } void sub_80CB7EC(struct Sprite* sprite, s16 c) @@ -1003,9 +961,14 @@ bool8 sub_80CB814(struct Sprite* sprite) s32 var2; if (r2 == 0) + { r2 = -32; + } else if (r2 == 255) + { r2 = 0x110; + } + r4_2 = r4 - r9; r0 = r2 - r10; var1 = r0 * r3 / r6; @@ -1014,18 +977,23 @@ bool8 sub_80CB814(struct Sprite* sprite) sprite->pos1.y = var2 + r9; if (++r3 == r6) return TRUE; + sprite->data7 = (r6 << 8) | r3; return FALSE; } void sub_80CB8B8(struct Sprite* sprite) { - if(sprite->data0 == 10) + if (sprite->data0 == 10) { StartSpriteAffineAnim(sprite, 1); } + sprite->data0++; - if(sprite->data0 > 50) move_anim_8072740(sprite); + if (sprite->data0 > 50) + { + move_anim_8072740(sprite); + } } void sub_80CB8E8(struct Sprite* sprite) @@ -1036,6 +1004,7 @@ void sub_80CB8E8(struct Sprite* sprite) sprite->data1++; sprite->data0 = 0; } + sprite->pos2.y = Sin(sprite->data0 + 128, 30 - sprite->data1 * 8); if (sub_80CB814(sprite)) { @@ -1052,7 +1021,7 @@ void sub_80CB94C(struct Sprite* sprite) sub_80787B0(sprite, 0); e1 = sub_8077ABC(gBattleAnimBankTarget, 0); e2 = sub_8077ABC(gBattleAnimBankTarget, 1); - if((gBattleAnimBankAttacker ^ 2) == gBattleAnimBankTarget) + if ((gBattleAnimBankAttacker ^ 2) == gBattleAnimBankTarget) { sprite->data6 = e1; sprite->data7 = e2 + 10; @@ -1066,6 +1035,7 @@ void sub_80CB94C(struct Sprite* sprite) sub_80CB7EC(sprite, 0x3C); sprite->data3 = 3; } + sprite->data4 = 0x3C; sprite->callback = sub_80CB8E8; } @@ -1075,13 +1045,14 @@ void sub_80CB9C4(struct Sprite* sprite) int zero; sprite->data0 += ((sprite->data3 * 128) / sprite->data4); zero = 0; - if(sprite->data0 > 0x7F) + if (sprite->data0 > 0x7F) { sprite->data1++; sprite->data0 = zero; } + sprite->pos2.y = Sin(sprite->data0 + 0x80, 30 - sprite->data1 * 8); - if(sub_80CB814(sprite)) + if (sub_80CB814(sprite)) { sprite->pos2.y = zero; sprite->data0 = zero; @@ -1092,7 +1063,7 @@ void sub_80CB9C4(struct Sprite* sprite) void sub_80CBA28(struct Sprite* sprite) { s16 e = sub_8077ABC(gBattleAnimBankTarget, 1); - if(GetBankSide(gBattleAnimBankTarget) == 0) + if (GetBankSide(gBattleAnimBankTarget) == 0) { sprite->data6 = 0; sprite->data7 = e + 10; @@ -1105,7 +1076,9 @@ void sub_80CBA28(struct Sprite* sprite) { sprite->data6 = 255; sprite->data7 = e + 10; - if(NotInBattle()) sprite->data6 = 0; + if (NotInBattle()) + sprite->data6 = 0; + sub_80CB7EC(sprite, 0x28); sprite->data3 = 3; sprite->data4 = 0x3C; @@ -1115,14 +1088,18 @@ void sub_80CBA28(struct Sprite* sprite) void sub_80CBAA4(struct Sprite* sprite) { - if(sprite->data0 == 0) + if (sprite->data0 == 0) { sub_8078764(sprite, 0); sprite->data1 = gBattleAnimArgs[2]; } + sprite->data0++; sprite->pos2.y = sprite->data1 * sprite->data0; - if(sprite->animEnded) move_anim_8072740(sprite); + if (sprite->animEnded) + { + move_anim_8072740(sprite); + } } void sub_80CBAE8(struct Sprite* sprite) @@ -1132,7 +1109,7 @@ void sub_80CBAE8(struct Sprite* sprite) sub_8078764(sprite, 0); p1 = sub_8077ABC(gBattleAnimBankAttacker, 0); p2 = sub_8077ABC(gBattleAnimBankAttacker, 1); - if((gBattleAnimBankTarget ^ 2) == gBattleAnimBankAttacker) + if ((gBattleAnimBankTarget ^ 2) == gBattleAnimBankAttacker) { sprite->data6 = p1; sprite->data7 = p2 + 10; @@ -1146,6 +1123,7 @@ void sub_80CBAE8(struct Sprite* sprite) sub_80CB7EC(sprite, 0x3c); sprite->data3 = 3; } + sprite->data4 = 0x3C; sprite->callback = sub_80CBB60; } @@ -1155,17 +1133,19 @@ void sub_80CBB60(struct Sprite* sprite) int zero; sprite->data0 += ((sprite->data3 * 128) / sprite->data4); zero = 0; - if(sprite->data0 > 0x7F) + if (sprite->data0 > 0x7F) { sprite->data1++; sprite->data0 = zero; } + sprite->pos2.y = Sin(sprite->data0 + 0x80, 30 - sprite->data1 * 8); - if(sprite->pos2.y == 0) + if (sprite->pos2.y == 0) { PlaySE12WithPanning(0x7D, sub_8076F98(0x3F)); } - if(sub_80CB814(sprite)) + + if (sub_80CB814(sprite)) { sprite->pos2.y = 0; sprite->data0 = 0; @@ -1193,10 +1173,11 @@ void sub_80CBBF0(struct Sprite* sprite) b = gBattleAnimArgs[1] + 0xDF; else b = a; + sprite->data1 = a - ((b >> 8) << 8); sprite->pos1.x = 0x46; - } + sprite->pos1.y = gBattleAnimArgs[0]; sprite->data2 = gBattleAnimArgs[0]; sprite->data4 = 20; @@ -1212,34 +1193,31 @@ void sub_80CBBF0(struct Sprite* sprite) void sub_80CBC8C(struct Sprite* sprite) { - switch(sprite->data3) + switch (sprite->data3) { - case 0: + case 0: + if (sprite->data2 > 0x4E) { - if(sprite->data2 > 0x4E) - { - sprite->data3 = 1; - StartSpriteAffineAnim(sprite, 1); - break; - } - else - { - sprite->data2 += sprite->data4 / 10; - sprite->data4 += 3; - sprite->pos1.y = sprite->data2; - break; - } + sprite->data3 = 1; + StartSpriteAffineAnim(sprite, 1); + break; } - case 1: + else { - if(sprite->data3 && sprite->affineAnimEnded) - { - sprite->data0 = 0; - sprite->data2 = 0; - sprite->callback = sub_80CBCF8; - } + sprite->data2 += sprite->data4 / 10; + sprite->data4 += 3; + sprite->pos1.y = sprite->data2; break; } + break; + case 1: + if (sprite->data3 && sprite->affineAnimEnded) + { + sprite->data0 = 0; + sprite->data2 = 0; + sprite->callback = sub_80CBCF8; + } + break; } } @@ -1247,13 +1225,14 @@ void sub_80CBC8C(struct Sprite* sprite) void sub_80CBCF8(struct Sprite* sprite) { - if(sprite->data2 == gUnknown_083D680C[sprite->data0][1]) + if (sprite->data2 == gUnknown_083D680C[sprite->data0][1]) { - if(gUnknown_083D680C[sprite->data0][2] == 0x7F) + if (gUnknown_083D680C[sprite->data0][2] == 0x7F) { sprite->data0 = 0; sprite->callback = sub_80CBDB0; } + sprite->data2 = 0; sprite->data0++; } @@ -1263,7 +1242,7 @@ void sub_80CBCF8(struct Sprite* sprite) sprite->data1 = (gUnknown_083D680C[sprite->data0][0] * gUnknown_083D680C[sprite->data0][2] + sprite->data1) & 0xFF; if (!NotInBattle()) { - if((u16)(sprite->data1 - 1) <= 0xBE) + if ((u16)(sprite->data1 - 1) <= 0xBE) { sprite->subpriority = 31; } @@ -1272,6 +1251,7 @@ void sub_80CBCF8(struct Sprite* sprite) sprite->subpriority = 29; } } + sprite->pos2.x = Cos(sprite->data1, 0x3C); sprite->pos2.y = Sin(sprite->data1, 20); } @@ -1279,7 +1259,9 @@ void sub_80CBCF8(struct Sprite* sprite) void sub_80CBDB0(struct Sprite* sprite) { - if(sprite->data0 > 20) move_anim_8072740(sprite); + if (sprite->data0 > 20) + move_anim_8072740(sprite); + sprite->invisible = sprite->data0 % 2; sprite->data0++; } @@ -1299,6 +1281,7 @@ void sub_80CBDF4(u8 taskId) task->data[2] = CreateSprite(&gSpriteTemplate_83D6884, task->data[8], task->data[9], task->data[4]); if (task->data[2] == 0x40) DestroyAnimVisualTask(taskId); + gSprites[task->data[2]].data0 = 10; gSprites[task->data[2]].data1 = task->data[8]; gSprites[task->data[2]].data2 = task->data[6] - (task->data[10] / 2 + 10) * task->data[5]; @@ -1314,243 +1297,214 @@ void sub_80CBF5C(u8 taskId) struct Task* task = &gTasks[taskId]; struct Sprite* sprite = &gSprites[task->data[2]]; int a = task->data[0]; - switch(a) + switch (a) { - case 4: - { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - else - { - task->data[15] = 5; - task->data[0] = 0xFF; - break; - } - } - case 8: + case 4: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - else - { - task->data[15] = 9; - task->data[0] = 0xFF; break; - } } - case 0: + else { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - task->data[15] = 1; + task->data[15] = 5; task->data[0] = 0xFF; - break; } - case 1: + break; + case 8: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7]; - sprite->data5 = sub_80CC338(sprite); - task->data[4] += 2; - task->data[3] = a; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; break; } - case 2: + else { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - task->data[15] = 3; + task->data[15] = 9; task->data[0] = 0xFF; - break; - } - case 3: - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data5 = sub_80CC338(sprite); - task->data[3] = 2; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; } - case 5: - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data5 = sub_80CC338(sprite); - task->data[4] -= 2; - task->data[3] = 3; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; + break; + case 0: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) break; - } - case 6: - { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - task->data[15] = 7; - task->data[0] = 0xFF; + + task->data[15] = 1; + task->data[0] = 0xFF; + break; + case 1: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[6]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[7]; + sprite->data5 = sub_80CC338(sprite); + task->data[4] += 2; + task->data[3] = a; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 2: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) break; - } - case 7: - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7]; - sprite->data5 = sub_80CC338(sprite); - task->data[4] += 2; - task->data[3] = 4; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; + + task->data[15] = 3; + task->data[0] = 0xFF; + break; + case 3: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data5 = sub_80CC338(sprite); + task->data[3] = 2; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 5: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data5 = sub_80CC338(sprite); + task->data[4] -= 2; + task->data[3] = 3; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 6: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) break; - } - case 9: + + task->data[15] = 7; + task->data[0] = 0xFF; + break; + case 7: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[6]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[7]; + sprite->data5 = sub_80CC338(sprite); + task->data[4] += 2; + task->data[3] = 4; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 9: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data5 = sub_80CC338(sprite); + task->data[3] = 5; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 10: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data5 = sub_80CC338(sprite); - task->data[3] = 5; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; break; } - case 10: + else { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - else - { - task->data[15] = 11; - task->data[0] = 0xFF; - break; - } + task->data[15] = 11; + task->data[0] = 0xFF; } - case 11: + break; + case 11: + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[8]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[9]; + sprite->data5 = sub_80CC338(sprite); + task->data[4] -= 2; + task->data[3] = 6; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + } + case 12: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) != 0) { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[8]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[9]; - sprite->data5 = sub_80CC338(sprite); - task->data[4] -= 2; - task->data[3] = 6; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); + DestroySprite(sprite); task->data[0]++; - break; } - case 12: - { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) != 0) - { - DestroySprite(sprite); - task->data[0]++; - } - break; - } - case 13: + break; + case 13: + if (task->data[12] == 0) { - if(task->data[12] == 0) - { - DestroyAnimVisualTask(taskId); - break; - } - break; + DestroyAnimVisualTask(taskId); } - case 255: + break; + case 255: + task->data[1]++; + if (task->data[1] > 5) { - task->data[1]++; - if(task->data[1] > 5) - { - task->data[1] = 0; - task->data[0] = task->data[15]; - } + task->data[1] = 0; + task->data[0] = task->data[15]; } + break; } } s16 sub_80CC338(struct Sprite* sprite) { s16 var = 8; - if(sprite->data4 < sprite->pos1.y) var = -var; + if (sprite->data4 < sprite->pos1.y) + var = -var; + return var; } void sub_80CC358(struct Task* task, u8 taskId) { task->data[14]++; - if(task->data[14] > 0) + if (task->data[14] > 0) { u8 spriteId; s16 spriteX; @@ -1581,7 +1535,7 @@ void sub_80CC408(struct Sprite* sprite) sprite->data0 = 0; sprite->invisible ^= 1; sprite->data1++; - if(sprite->data1 > 8) + if (sprite->data1 > 8) { gTasks[sprite->data6].data[sprite->data7]--; DestroySprite(sprite); @@ -1596,6 +1550,7 @@ void sub_80CC474(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + if (GetBankSide(bank) != 0) { sprite->data4 = 0; @@ -1608,37 +1563,31 @@ void sub_80CC474(struct Sprite* sprite) sprite->data2 = -gBattleAnimArgs[3]; sprite->pos1.x = 0x100; } + sprite->data1 = gBattleAnimArgs[1]; sprite->data0 = gBattleAnimArgs[2]; sprite->data3 = gBattleAnimArgs[4]; - switch(gBattleAnimArgs[5]) + switch (gBattleAnimArgs[5]) { - case 0: - { - sprite->pos1.y = gBattleAnimArgs[0]; - sprite->oam.priority = sub_8079ED4(bank); - break; - } - case 1: - { - sprite->pos1.y = gBattleAnimArgs[0]; - sprite->oam.priority = sub_8079ED4(bank) + 1; - break; - } - case 2: - { - sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[0]; - sprite->oam.priority = sub_8079ED4(bank); - break; - } - case 3: - { - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[0]; - GetAnimBankSpriteId(1); - sprite->oam.priority = sub_8079ED4(bank) + 1; - break; - } + case 0: + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->oam.priority = sub_8079ED4(bank); + break; + case 1: + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->oam.priority = sub_8079ED4(bank) + 1; + break; + case 2: + sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[0]; + sprite->oam.priority = sub_8079ED4(bank); + break; + case 3: + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[0]; + GetAnimBankSpriteId(1); + sprite->oam.priority = sub_8079ED4(bank) + 1; + break; } + sprite->callback = sub_80CC580; } @@ -1659,41 +1608,41 @@ void sub_80CC580(struct Sprite* sprite) if (sprite->pos2.x + sprite->pos1.x > -16) return; } + move_anim_8074EE0(sprite); } void sub_80CC5F8(u8 taskId) { struct Task* task = &gTasks[taskId]; - switch(task->data[0]) + switch (task->data[0]) { - case 0: - { - task->data[8] = IndexOfSpritePaletteTag(0x274f) * 16 + 256; - task->data[12] = IndexOfSpritePaletteTag(0x27b0) * 16 + 256; - task->data[0]++; - break; - } - case 1: + case 0: + task->data[8] = IndexOfSpritePaletteTag(0x274f) * 16 + 256; + task->data[12] = IndexOfSpritePaletteTag(0x27b0) * 16 + 256; + task->data[0]++; + break; + case 1: + task->data[9]++; + if (task->data[9] >= 0) { - task->data[9]++; - if(task->data[9] >= 0) + task->data[9] = 0; + BlendPalette(task->data[8], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); + BlendPalette(task->data[12], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); + task->data[10]++; + if (task->data[10] == 17) { - task->data[9] = 0; - BlendPalette(task->data[8], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); - BlendPalette(task->data[12], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); - task->data[10]++; - if(task->data[10] == 17) - { - task->data[10] = 0; - task->data[11]++; - if(task->data[11] == 7) task->data[11] = 0; - } + task->data[10] = 0; + task->data[11]++; + if (task->data[11] == 7) + task->data[11] = 0; } - break; } + break; } - if(gBattleAnimArgs[7] == -1) DestroyAnimVisualTask(taskId); + + if (gBattleAnimArgs[7] == -1) + DestroyAnimVisualTask(taskId); } void sub_80CC6CC(struct Sprite* sprite) @@ -1710,7 +1659,6 @@ void sub_80CC6CC(struct Sprite* sprite) } else { - if (gBattleAnimArgs[0] == 0) { a = sub_8077ABC(gBattleAnimBankAttacker, 2); @@ -1721,6 +1669,7 @@ void sub_80CC6CC(struct Sprite* sprite) a = sub_8077ABC(gBattleAnimBankTarget, 2); b = sub_8077ABC(gBattleAnimBankTarget, 3); } + sprite->data0 = gBattleAnimArgs[4]; if (gBattleAnimArgs[1] == 0) { @@ -1736,6 +1685,7 @@ void sub_80CC6CC(struct Sprite* sprite) sprite->data5 = gBattleAnimArgs[2] + a; sprite->data6 = gBattleAnimArgs[3] + b; } + x = sprite->pos1.x; sprite->data1 = x * 16; y = sprite->pos1.y; @@ -1745,6 +1695,7 @@ void sub_80CC6CC(struct Sprite* sprite) c = sub_80790F0(sprite->data5 - x, sprite->data6 - y); if (NotInBattle()) c -= 0x8000; + sub_8078FDC(sprite, 0, 0x100, 0x100, c); sprite->callback = sub_80CC7D4; } @@ -1752,7 +1703,7 @@ void sub_80CC6CC(struct Sprite* sprite) void sub_80CC7D4(struct Sprite* sprite) { - if(sprite->data0) + if (sprite->data0) { sprite->data1 += sprite->data3; sprite->data2 += sprite->data4; @@ -1761,18 +1712,20 @@ void sub_80CC7D4(struct Sprite* sprite) sprite->data0--; } else + { move_anim_8074EE0(sprite); + } } void sub_80CC810(struct Sprite* sprite) { - if(sprite->animEnded) + if (sprite->animEnded) move_anim_8072740(sprite); } void sub_80CC82C(struct Sprite* sprite) { - if(GetBankSide(gBattleAnimBankAttacker) != 0) + if (GetBankSide(gBattleAnimBankAttacker) != 0) { sprite->pos1.x -= gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; @@ -1782,14 +1735,16 @@ void sub_80CC82C(struct Sprite* sprite) sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; } + sprite->callback = sub_8078600; StoreSpriteCallbackInData6(sprite, move_anim_8072740); } void sub_80CC884(struct Sprite* sprite) { - if(GetBankSide(gBattleAnimBankAttacker) == 0) + if (GetBankSide(gBattleAnimBankAttacker) == 0) StartSpriteAnim(sprite, 1); + sprite->callback = sub_80CC810; sub_807867C(sprite, gBattleAnimArgs[0]); sprite->pos1.y += gBattleAnimArgs[1]; @@ -1812,21 +1767,25 @@ void sub_80CC914(struct Sprite* sprite) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0); sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1); - if(GetBankSide(gBattleAnimBankTarget) == 0) + if (GetBankSide(gBattleAnimBankTarget) == 0) sprite->pos1.y += 8; + sprite->callback = sub_80CCB00; - if(gBattleAnimArgs[2] == 0) + if (gBattleAnimArgs[2] == 0) + { sprite->pos1.x += gBattleAnimArgs[0]; + } else { sprite->pos1.x -= gBattleAnimArgs[0]; sprite->hFlip = 1; } + sprite->pos1.y += gBattleAnimArgs[1]; sprite->data1 -= 0x400; sprite->data2 += 0x400; sprite->data5 = gBattleAnimArgs[2]; - if(sprite->data5 == 1) + if (sprite->data5 == 1) sprite->data1 = -sprite->data1; } @@ -1834,50 +1793,49 @@ void sub_80CC9BC(struct Sprite* sprite) { u8 a; u8 b; - switch(gBattleAnimArgs[3]) + switch (gBattleAnimArgs[3]) { - case 1: - { - a = sub_8077ABC(gBattleAnimBankTarget ^ 2, 0); - b = sub_8077ABC(gBattleAnimBankTarget ^ 2, 1); - break; - } - case 2: - { - a = sub_8077ABC(gBattleAnimBankTarget, 0); - b = sub_8077ABC(gBattleAnimBankTarget, 1); - if(IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) - { - a = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 0) + a) / 2; - b = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 1) + b) / 2; - } - break; - } - case 0: - default: + case 1: + a = sub_8077ABC(gBattleAnimBankTarget ^ 2, 0); + b = sub_8077ABC(gBattleAnimBankTarget ^ 2, 1); + break; + case 2: + a = sub_8077ABC(gBattleAnimBankTarget, 0); + b = sub_8077ABC(gBattleAnimBankTarget, 1); + if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) { - a = sub_8077ABC(gBattleAnimBankTarget, 0); - b = sub_8077ABC(gBattleAnimBankTarget, 1); - break; + a = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 0) + a) / 2; + b = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 1) + b) / 2; } + break; + case 0: + default: + a = sub_8077ABC(gBattleAnimBankTarget, 0); + b = sub_8077ABC(gBattleAnimBankTarget, 1); + break; } + sprite->pos1.x = a; sprite->pos1.y = b; - if(GetBankSide(gBattleAnimBankTarget) == 0) + if (GetBankSide(gBattleAnimBankTarget) == 0) sprite->pos1.y += 8; + sprite->callback = sub_80CCB00; - if(gBattleAnimArgs[2] == 0) + if (gBattleAnimArgs[2] == 0) + { sprite->pos1.x += gBattleAnimArgs[0]; + } else { sprite->pos1.x -= gBattleAnimArgs[0]; sprite->hFlip = 1; } + sprite->pos1.y += gBattleAnimArgs[1]; sprite->data1 -= 0x400; sprite->data2 += 0x400; sprite->data5 = gBattleAnimArgs[2]; - if(sprite->data5 == 1) + if (sprite->data5 == 1) sprite->data1 = -sprite->data1; } @@ -1885,15 +1843,16 @@ void sub_80CCB00(struct Sprite* sprite) { sprite->data3 += sprite->data1; sprite->data4 += sprite->data2; - if(sprite->data5 == 0) + if (sprite->data5 == 0) sprite->data1 += 0x18; else sprite->data1 -= 0x18; + sprite->data2 -= 0x18; sprite->pos2.x = sprite->data3 >> 8; sprite->pos2.y = sprite->data4 >> 8; sprite->data0++; - if(sprite->data0 == 20) + if (sprite->data0 == 20) { StoreSpriteCallbackInData6(sprite, move_anim_8072740); sprite->data0 = 3; @@ -1903,9 +1862,9 @@ void sub_80CCB00(struct Sprite* sprite) void unref_sub_80CCB6C(struct Sprite* sprite) { - if(sprite->data2 > 1) + if (sprite->data2 > 1) { - if(sprite->data3 & 1) + if (sprite->data3 & 1) { sprite->invisible = 0; gSprites[sprite->data0].invisible = 0; @@ -1917,6 +1876,7 @@ void unref_sub_80CCB6C(struct Sprite* sprite) gSprites[sprite->data0].invisible = 1; gSprites[sprite->data1].invisible = 1; } + sprite->data2 = 0; sprite->data3++; } @@ -1924,7 +1884,8 @@ void unref_sub_80CCB6C(struct Sprite* sprite) { sprite->data2++; } - if(sprite->data3 == 10) + + if (sprite->data3 == 10) { DestroySprite(&gSprites[sprite->data0]); DestroySprite(&gSprites[sprite->data1]); @@ -1935,10 +1896,11 @@ void unref_sub_80CCB6C(struct Sprite* sprite) void sub_80CCC50(struct Sprite* sprite) { sprite->data0 = gBattleAnimArgs[2]; - if(GetBankSide(gBattleAnimBankAttacker) != 0) + if (GetBankSide(gBattleAnimBankAttacker) != 0) sprite->pos1.x -= gBattleAnimArgs[0]; else sprite->pos1.x += gBattleAnimArgs[0]; + StartSpriteAnim(sprite, gBattleAnimArgs[5]); sprite->data1 = -gBattleAnimArgs[3]; sprite->pos1.y += gBattleAnimArgs[1]; @@ -1951,30 +1913,33 @@ void sub_80CCCB4(struct Sprite* sprite) { sprite->pos2.x = Cos(sprite->data0, 100); sprite->pos2.y = Sin(sprite->data0, 20); - if(sprite->data0 <= 0x7F) + if (sprite->data0 <= 0x7F) sprite->subpriority = 0; else sprite->subpriority = 14; + sprite->data0 = (sprite->data0 + sprite->data1) & 0xFF; sprite->data5 += 0x82; sprite->pos2.y += sprite->data5 >> 8; sprite->data2++; - if(sprite->data2 == sprite->data3) + if (sprite->data2 == sprite->data3) move_anim_8072740(sprite); } void sub_80CCD24(struct Sprite* sprite) { - if(NotInBattle() != 0) + if (NotInBattle() != 0) { gBattleAnimArgs[1] += 8; } + sprite->pos1.x = sub_8077EE4(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[0]; sprite->pos1.y = sub_8077EE4(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; if (GetBankSide(gBattleAnimBankAttacker) == 0 || NotInBattle()) sprite->oam.priority = sub_8079ED4(gBattleAnimBankAttacker) + 1; else sprite->oam.priority = sub_8079ED4(gBattleAnimBankAttacker); + sprite->data0 = gBattleAnimArgs[2]; sprite->data2 = (IndexOfSpritePaletteTag(0x2828) << 4) + 0x100; sprite->data7 = 16; @@ -1990,24 +1955,26 @@ void sub_80CCE0C(struct Sprite* sprite) sprite->data5 += 0x60; sprite->pos2.x = -(sprite->data5 >> 8); sprite->data1++; - if(sprite->data1 > 1) + if (sprite->data1 > 1) { sprite->data1 = 0; a = gPlttBufferFaded[sprite->data2 + 1]; i = 0; do - { - gPlttBufferFaded[sprite->data2 + ++i] = gPlttBufferFaded[sprite->data2 + i + 1]; - } - while ( i <= 5 ); + { + gPlttBufferFaded[sprite->data2 + ++i] = gPlttBufferFaded[sprite->data2 + i + 1]; + } while ( i <= 5 ); + gPlttBufferFaded[sprite->data2 + 7] = a; } + if (sprite->data7 > 6 && sprite->data0 >0 && ++sprite->data6 > 1) { sprite->data6 = 0; sprite->data7 -= 1; REG_BLDALPHA = (sprite->data7 << 8) | (16 - sprite->data7);; } + if (sprite->data0 >0) { sprite->data0 -= 1; @@ -2017,7 +1984,7 @@ void sub_80CCE0C(struct Sprite* sprite) sprite->data6 = 0; sprite->data7++; REG_BLDALPHA = (sprite->data7 << 8) | (16 - sprite->data7); - if(sprite->data7 == 16) + if (sprite->data7 == 16) { sprite->invisible = 1; sprite->callback = sub_807861C; @@ -2043,98 +2010,95 @@ void sub_80CCF04(struct Sprite* sprite) void sub_80CCF70(struct Sprite* sprite) { - switch(sprite->data0) + switch (sprite->data0) { - case 0: - { - if(++sprite->data2 > 0) - { - sprite->data2 = 0; - if(((++sprite->data1) & 1) != 0) - { - if(sprite->data6 <= 15) - sprite->data6++; - } - else if (sprite->data7 > 0) - sprite->data7--; - REG_BLDALPHA = (sprite->data7 << 8) | sprite->data6; - if(sprite->data6 == 16 && sprite->data7 == 0) - { - sprite->data1 = 0; - sprite->data0++; - break; - } - } - break; - } - case 1: - { - if(++sprite->data1 > 8) - { - sprite->data1 = 0; - StartSpriteAffineAnim(sprite, 1); - sprite->data0++; - break; - } - break; - } - case 2: + case 0: + if (++sprite->data2 > 0) { - sub_80CD0CC(sprite, 16, 4); - if(++sprite->data1 > 2) - { - sprite->data1 = 0; - sprite->pos1.y++; - } - if(++sprite->data2 <= 29) - break; - if(sprite->data2 & 1) + sprite->data2 = 0; + if (((++sprite->data1) & 1) != 0) { - if(sprite->data6 > 0) - sprite->data6--; + if (sprite->data6 <= 15) + sprite->data6++; } - else if(sprite->data7 <= 15) - sprite->data7++; + else if (sprite->data7 > 0) + sprite->data7--; + REG_BLDALPHA = (sprite->data7 << 8) | sprite->data6; - if(sprite->data6 == 0 && sprite->data7 == 16) + if (sprite->data6 == 16 && sprite->data7 == 0) { sprite->data1 = 0; - sprite->data2 = 0; sprite->data0++; - break; } - else - break; } - case 3: + break; + case 1: + if (++sprite->data1 > 8) { - sprite->invisible = 1; + sprite->data1 = 0; + StartSpriteAffineAnim(sprite, 1); sprite->data0++; + } + break; + case 2: + sub_80CD0CC(sprite, 16, 4); + if (++sprite->data1 > 2) + { + sprite->data1 = 0; + sprite->pos1.y++; + } + + if (++sprite->data2 <= 29) break; + + if (sprite->data2 & 1) + { + if (sprite->data6 > 0) + sprite->data6--; } - case 4: + else if (sprite->data7 <= 15) { - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - move_anim_8072740(sprite); + sprite->data7++; + } + + REG_BLDALPHA = (sprite->data7 << 8) | sprite->data6; + if (sprite->data6 == 0 && sprite->data7 == 16) + { + sprite->data1 = 0; + sprite->data2 = 0; + sprite->data0++; } + break; + case 3: + sprite->invisible = 1; + sprite->data0++; + break; + case 4: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + move_anim_8072740(sprite); + break; } } void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2) { - if(sprite->data3 <= 11) + if (sprite->data3 <= 11) sprite->data4 += 2; - if((u16)(sprite->data3 - 0x12) <= 0x17) + + if ((u16)(sprite->data3 - 0x12) <= 0x17) sprite->data4 -= 2; - if((sprite->data3) > 0x2F) + + if ((sprite->data3) > 0x2F) sprite->data4 += 2; + sprite->pos2.x = sprite->data4 / 9; sprite->pos2.y = sprite->data4 / 14; - if(sprite->pos2.y < 0) + if (sprite->pos2.y < 0) sprite->pos2.y *= -1; + sprite->data3++; - if(sprite->data3 > 0x3B) + if (sprite->data3 > 0x3B) sprite->data3 = 0; } @@ -2142,6 +2106,7 @@ void sub_80CD140(struct Sprite* sprite) { if (!gBattleAnimArgs[2]) sub_8078650(sprite); + sub_807867C(sprite, gBattleAnimArgs[0]); sprite->pos1.y += gBattleAnimArgs[1]; sprite->data0 = gBattleAnimArgs[5]; @@ -2158,6 +2123,7 @@ void sub_80CD190(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + if (IsDoubleBattle() && IsAnimBankSpriteVisible(bank ^ 2)) { sub_807A3FC(bank, gBattleAnimArgs[6], &sprite->pos1.x, &sprite->pos1.y); @@ -2176,8 +2142,10 @@ void sub_80CD190(struct Sprite* sprite) sprite->pos1.x = sub_8077ABC(bank, 2); sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[1]; } + sub_807867C(sprite, gBattleAnimArgs[0]); } + sprite->data0 = gBattleAnimArgs[5]; sprite->data1 = gBattleAnimArgs[3]; sprite->data2 = gBattleAnimArgs[4]; @@ -2199,6 +2167,7 @@ void sub_80CD274(struct Sprite* sprite) sprite->pos1.y += gBattleAnimArgs[1]; StartSpriteAnim(sprite, 1); } + sprite->callback = sub_80CD2D4; } @@ -2210,7 +2179,8 @@ void sub_80CD2D4(struct Sprite* sprite) sprite->pos2.x = Sin(sprite->data1 * 4, 3); sprite->data1++; } - if(sprite->animEnded) + + if (sprite->animEnded) move_anim_8072740(sprite); } @@ -2230,6 +2200,7 @@ void sub_80CD328(struct Sprite* sprite) sprite->data3 = 0xFFFF; StartSpriteAffineAnim(sprite, 1); } + sprite->callback = sub_80CD394; } @@ -2254,27 +2225,28 @@ void sub_80CD3E0(struct Sprite* sprite) void sub_80CD408(struct Sprite* sprite) { - switch(sprite->data5 & 1) + switch (sprite->data5 & 1) { - case 0: - sprite->data0 = 1; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData6(sprite, sub_80CD408); - break; - case 1: - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - sprite->data0 = 8; - sprite->data2 = sprite->pos1.x + gUnknown_083D6DDC[sprite->data5 >> 8][0]; - sprite->data4 = sprite->pos1.y + gUnknown_083D6DDC[sprite->data5 >> 8][1]; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, sub_80CD4B8); - sprite->data5 += 0x100; - PlaySE12WithPanning(0xD2, sub_8076F98(0x3F)); - break; + case 0: + sprite->data0 = 1; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData6(sprite, sub_80CD408); + break; + case 1: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data0 = 8; + sprite->data2 = sprite->pos1.x + gUnknown_083D6DDC[sprite->data5 >> 8][0]; + sprite->data4 = sprite->pos1.y + gUnknown_083D6DDC[sprite->data5 >> 8][1]; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData6(sprite, sub_80CD4B8); + sprite->data5 += 0x100; + PlaySE12WithPanning(0xD2, sub_8076F98(0x3F)); + break; } + sprite->data5 ^= 1; } @@ -2287,14 +2259,16 @@ void sub_80CD4B8(struct Sprite* sprite) StoreSpriteCallbackInData6(sprite, sub_80CD4EC); } else + { sprite->callback = sub_80CD408; + } } void sub_80CD4EC(struct Sprite* sprite) { s16 a; s16 b; - if(sprite->oam.affineParam == 0) + if (sprite->oam.affineParam == 0) { sprite->data0 = 3; sprite->data1 = 0; @@ -2304,25 +2278,26 @@ void sub_80CD4EC(struct Sprite* sprite) } else { - switch(sprite->oam.affineParam) + switch (sprite->oam.affineParam) { - case 1: - a = -8; - b = -8; - break; - case 2: - a = -8; - b = 8; - break; - case 3: - a = 8; - b = -8; - break; - default: - a = 8; - b = 8; - break; + case 1: + a = -8; + b = -8; + break; + case 2: + a = -8; + b = 8; + break; + case 3: + a = 8; + b = -8; + break; + default: + a = 8; + b = 8; + break; } + sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; sprite->pos2.y = 0; @@ -2343,7 +2318,10 @@ void sub_80CD5A8(struct Sprite* sprite) sprite->data1 = 16; } else if ((sprite->data1 -= 3) < 0) - sprite->data1 = 0; + { + sprite->data1 = 0; + } + BlendPalettes(sub_80791A8(1, 1, 1, 1, 1, 0, 0), sprite->data1, 0x7FFF); if (sprite->data1 == 16) { @@ -2354,7 +2332,9 @@ void sub_80CD5A8(struct Sprite* sprite) PlaySE12WithPanning(0xC0, sub_8076F98(0x3F)); } else if (sprite->data1 == 0) + { sprite->callback = sub_80CD654; + } } void sub_80CD654(struct Sprite* sprite) @@ -2374,6 +2354,7 @@ void sub_80CD67C(struct Sprite* sprite) sprite->data1++; sprite->invisible ^= 1; } + sprite->data0++; if (sprite->data1 == 8) move_anim_8072740(sprite); @@ -2387,13 +2368,13 @@ void sub_80CD6CC(struct Sprite* sprite) sprite->pos1.x -= 0x18; sprite->pos1.y -= 0x18; } - else if((s16)sprite->oam.affineParam == 2) + else if ((s16)sprite->oam.affineParam == 2) { sprite->pos1.x -= 0x18; sprite->pos1.y += 0x18; sprite->oam.matrixNum = 16; } - else if((s16)sprite->oam.affineParam == 3) + else if ((s16)sprite->oam.affineParam == 3) { sprite->pos1.x += 0x18; sprite->pos1.y -= 0x18; @@ -2405,6 +2386,7 @@ void sub_80CD6CC(struct Sprite* sprite) sprite->pos1.y += 0x18; sprite->oam.matrixNum = 24; } + sprite->oam.tileNum = (sprite->oam.tileNum + 16); sprite->callback = sub_80CD3E0; sub_80CD3E0(sprite); @@ -2414,20 +2396,20 @@ void sub_80CD774(struct Sprite* sprite) { sprite->invisible = 1; sprite->data0 = 0; - switch(gBattleAnimArgs[0]) + switch (gBattleAnimArgs[0]) { - case 0: - sprite->callback = sub_80CD7CC; - break; - case 1: - sprite->callback = sub_80CD8A8; - break; - case 2: - sprite->callback = sub_80CD8F8; - break; - default: - sprite->callback = sub_80CD9B8; - break; + case 0: + sprite->callback = sub_80CD7CC; + break; + case 1: + sprite->callback = sub_80CD8A8; + break; + case 2: + sprite->callback = sub_80CD8F8; + break; + default: + sprite->callback = sub_80CD9B8; + break; } } @@ -2450,6 +2432,7 @@ void sub_80CD81C(struct Sprite* sprite) sprite->data4 = (sprite->data6 = GetBankSide(gBattleAnimBankAttacker)) ? 0x300 : 0xFFFFFD00; sprite->data5 = 0; } + sprite->data5 += sprite->data4; obj_id_set_rotscale(sprite->data3, 0x100, 0x100, sprite->data5); sub_8078F9C(sprite->data3); @@ -2472,7 +2455,7 @@ void sub_80CD8A8(struct Sprite* sprite) void sub_80CD8F8(struct Sprite* sprite) { - if(++sprite->data0 > 8) + if (++sprite->data0 > 8) { sprite->data0 = 0; sprite->callback = sub_80CD91C; @@ -2496,6 +2479,7 @@ void sub_80CD91C(struct Sprite* sprite) sprite->data5 = 0xF400; } } + sprite->data5 += sprite->data4; obj_id_set_rotscale(sprite->data3, 0x100, 0x100, sprite->data5); sub_8078F9C(sprite->data3); @@ -2519,37 +2503,37 @@ void sub_80CD9C4(struct Sprite* sprite) void sub_80CD9D4(struct Sprite* sprite) { - switch(sprite->data0) + switch (sprite->data0) { - case 0: + case 0: + sprite->data1 = 0; + sprite->data2 = gObjectBankIDs[gBattleAnimBankAttacker]; + sprite->data3 = GetBankSide(gBattleAnimBankAttacker); + sprite->data4 = (sprite->data3 != 0) ? 0x200 : -0x200; + sprite->data5 = 0; + sub_8078E70(sprite->data2, 0); + sprite->data0++; + case 1: + sprite->data5 += sprite->data4; + obj_id_set_rotscale(sprite->data2, 0x100, 0x100, sprite->data5); + sub_8078F9C(sprite->data2); + if (++sprite->data1 > 3) + { sprite->data1 = 0; - sprite->data2 = gObjectBankIDs[gBattleAnimBankAttacker]; - sprite->data3 = GetBankSide(gBattleAnimBankAttacker); - sprite->data4 = (sprite->data3 != 0) ? 0x200 : -0x200; - sprite->data5 = 0; - sub_8078E70(sprite->data2, 0); + sprite->data4 *= -1; sprite->data0++; - case 1: - sprite->data5 += sprite->data4; - obj_id_set_rotscale(sprite->data2, 0x100, 0x100, sprite->data5); - sub_8078F9C(sprite->data2); - if (++sprite->data1 > 3) - { - sprite->data1 = 0; - sprite->data4 *= -1; - sprite->data0++; - } - break; - case 2: - sprite->data5 += sprite->data4; - obj_id_set_rotscale(sprite->data2, 0x100, 0x100, sprite->data5); - sub_8078F9C(sprite->data2); - if (++sprite->data1 > 3) - { - sub_8078F40(sprite->data2); - move_anim_8072740(sprite); - } - break; + } + break; + case 2: + sprite->data5 += sprite->data4; + obj_id_set_rotscale(sprite->data2, 0x100, 0x100, sprite->data5); + sub_8078F9C(sprite->data2); + if (++sprite->data1 > 3) + { + sub_8078F40(sprite->data2); + move_anim_8072740(sprite); + } + break; } } @@ -2559,41 +2543,43 @@ void sub_80CDAC8(u8 taskId) a = GetBankSide(gBattleAnimBankAttacker); gTasks[taskId].data[1] = a; gTasks[taskId].data[2] = 0; - switch(gBattleAnimArgs[0]) + switch (gBattleAnimArgs[0]) { - default: - DestroyAnimVisualTask(taskId); - break; - case 0: - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 8; - gTasks[taskId].data[4] = 0; - gTasks[taskId].data[5] = 3; - if (a == 0) - gTasks[taskId].data[5] *= -1; - gTasks[taskId].func = sub_80CDB60; - break; - case 1: - gTasks[taskId].data[3] = 8; - gTasks[taskId].data[4] = 0x600; - gTasks[taskId].data[5] = 0xC0; - if (a == 0) - { - gTasks[taskId].data[4] = -gTasks[taskId].data[4]; - gTasks[taskId].data[5] = -gTasks[taskId].data[5]; - } - gTasks[taskId].func = sub_80CDD20; - break; + default: + DestroyAnimVisualTask(taskId); + break; + case 0: + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 8; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 3; + if (a == 0) + gTasks[taskId].data[5] *= -1; + + gTasks[taskId].func = sub_80CDB60; + break; + case 1: + gTasks[taskId].data[3] = 8; + gTasks[taskId].data[4] = 0x600; + gTasks[taskId].data[5] = 0xC0; + if (a == 0) + { + gTasks[taskId].data[4] = -gTasks[taskId].data[4]; + gTasks[taskId].data[5] = -gTasks[taskId].data[5]; + } + + gTasks[taskId].func = sub_80CDD20; + break; } } void sub_80CDB60(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch(task->data[2]) + switch (task->data[2]) { case 0: - if(task->data[3]) + if (task->data[3]) { task->data[4] += task->data[5]; gSprites[task->data[0]].pos2.x = task->data[4]; @@ -2638,6 +2624,7 @@ void sub_80CDB60(u8 taskId) gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5]; else gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5]; + task->data[6] = 1; task->data[3]--; } @@ -2706,6 +2693,7 @@ void sub_80CDD74(struct Sprite* sprite) sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[1]; sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[2]; } + sprite->data0 = 0; sprite->data1 = 0; StoreSpriteCallbackInData6(sprite, sub_80CDEC0); @@ -2751,11 +2739,11 @@ void sub_80CDEB0(struct Sprite* sprite) void sub_80CDEC0(struct Sprite* sprite) { - if(++sprite->data0 > 1) + if (++sprite->data0 > 1) { sprite->data0 = 0; sprite->invisible = !sprite->invisible; - if(++sprite->data1 > 8) + if (++sprite->data1 > 8) move_anim_8072740(sprite); } } @@ -2772,6 +2760,7 @@ void sub_80CDF0C(struct Sprite* sprite) sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[1]; sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[2]; } + sprite->data0 = 0; sprite->data1 = gBattleAnimArgs[3]; sprite->callback = sub_80CDF70; @@ -2784,6 +2773,7 @@ void sub_80CDF70(struct Sprite* sprite) sprite->data0 = 0; sprite->pos1.y--; } + sprite->pos1.y -= sprite->data0; if (sprite->animEnded) move_anim_8072740(sprite); @@ -2813,6 +2803,7 @@ void sub_80CE000(struct Sprite* sprite) if (!(sprite->data4 & 1)) PlaySE12WithPanning(SE_W207B, sprite->data5); } + sprite->data0 = 0; if (++sprite->data2 > 1) { @@ -2820,6 +2811,7 @@ void sub_80CE000(struct Sprite* sprite) sprite->data1++; } } + if (sprite->animEnded && sprite->data1 > 16 && sprite->invisible) move_anim_8072740(sprite); } @@ -2834,6 +2826,7 @@ void sub_80CE09C(struct Sprite* sprite) sprite->pos1.y += 10; sprite->data0++; } + if ((u16)gBattleAnimArgs[7] == 0xFFFF) move_anim_8072740(sprite); } @@ -2873,7 +2866,9 @@ void sub_80CE17C(struct Sprite* sprite) void sub_80CE1AC(struct Sprite* sprite) { if (sprite->data0) + { sprite->data0--; + } else { sprite->animPaused = 0; @@ -2904,9 +2899,11 @@ void unref_sub_80CE260(u8 taskId) { if (gBattleAnimArgs[0] == 1 && GetBankSide(i) == 0) sub_8043DB0(gHealthboxIDs[i]); + if (gBattleAnimArgs[1] == 1 && GetBankSide(i) == 1) sub_8043DB0(gHealthboxIDs[i]); } + DestroyAnimVisualTask(taskId); } @@ -2914,7 +2911,10 @@ void unref_sub_80CE2D4(u8 taskId) { u8 i; for (i = 0; i < gNoOfAllBanks; i++) + { sub_8043DFC(gHealthboxIDs[i]); + } + DestroyAnimVisualTask(taskId); } @@ -2930,6 +2930,7 @@ void sub_80CE30C(struct Sprite* sprite) sprite->pos1.x = gBattleAnimArgs[0]; sprite->pos1.y = gBattleAnimArgs[1]; } + sprite->oam.shape = 0; sprite->oam.size = 3; sprite->data0 = 0; @@ -2965,6 +2966,7 @@ void sub_80CE3B0(struct Sprite* sprite) sprite->data2++; } } + if (sprite->data0) move_anim_8072740(sprite); } @@ -2975,6 +2977,7 @@ void sub_80CE3EC(u8 taskId) int b; int c; int d; + gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 0; @@ -3000,71 +3003,76 @@ void sub_80CE4D4(u8 taskId) struct Task* task = &gTasks[taskId]; switch (task->data[0]) { - case 0: - if (++task->data[1] > 0) + case 0: + if (++task->data[1] > 0) + { + u16 color; + u16 bitmask; + u16 r3; + u16 i; + u16 j; + task->data[1] = 0; + if (++task->data[2] <= 15) { - u16 color; - u16 bitmask; - u16 r3; - u16 i; - u16 j; - task->data[1] = 0; - if (++task->data[2] <= 15) - { - u16 red; - u16 green; - u16 blue; - task->data[4] += task->data[7]; - task->data[5] += task->data[8]; - task->data[6] += task->data[9]; - red = task->data[4] >> 3; - green = task->data[5] >> 3; - blue = task->data[6] >> 3; - color = RGB(red, green, blue); - } - else - { - color = RGB(27, 29, 31); - task->data[0]++; - } - bitmask = 1; - r3 = 0; - for (i = 0; i <= 15; i++) - { - if (task->data[3] & bitmask) - { - for (j = 1; j <= 15; j++) - gPlttBufferFaded[r3 + j] = color; - } - bitmask <<= 1; - r3 += 16; - } + u16 red; + u16 green; + u16 blue; + task->data[4] += task->data[7]; + task->data[5] += task->data[8]; + task->data[6] += task->data[9]; + red = task->data[4] >> 3; + green = task->data[5] >> 3; + blue = task->data[6] >> 3; + color = RGB(red, green, blue); } - break; - case 1: - if (!gPaletteFade.active) + else { - u8 spriteId; - for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++) + color = RGB(27, 29, 31); + task->data[0]++; + } + + bitmask = 1; + r3 = 0; + for (i = 0; i <= 15; i++) + { + if (task->data[3] & bitmask) { - if (gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FC8 || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FF8) - gSprites[spriteId].data0 = 1; + for (j = 1; j <= 15; j++) + { + gPlttBufferFaded[r3 + j] = color; + } } - task->data[1] = 0; - task->data[0]++; + + bitmask <<= 1; + r3 += 16; } - break; - case 2: - if (++task->data[1] > 30) + } + break; + case 1: + if (!gPaletteFade.active) + { + u8 spriteId; + for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++) { - BeginNormalPaletteFade((u32)sub_8079BFC(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31)); - task->data[0]++; + if (gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FC8 || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FF8) + gSprites[spriteId].data0 = 1; } - break; - case 3: - if (!gPaletteFade.active) - DestroyAnimVisualTask(taskId); - break; + + task->data[1] = 0; + task->data[0]++; + } + break; + case 2: + if (++task->data[1] > 30) + { + BeginNormalPaletteFade((u32)sub_8079BFC(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31)); + task->data[0]++; + } + break; + case 3: + if (!gPaletteFade.active) + DestroyAnimVisualTask(taskId); + break; } } @@ -3072,8 +3080,10 @@ void sub_80CE670(struct Sprite* sprite) { if (gBattleAnimArgs[2] <= 1) gBattleAnimArgs[2] = 2; + if (gBattleAnimArgs[2] > 0x7F) gBattleAnimArgs[2] = 0x7F; + sprite->data0 = 0; sprite->data1 = gBattleAnimArgs[2]; sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[0]; @@ -3109,6 +3119,7 @@ void sub_80CE670(struct Sprite* sprite) sprite->data5 = 0xA00 / sprite->data1; sprite->oam.matrixNum = 24; } + sprite->callback = sub_80CE798; } @@ -3123,6 +3134,7 @@ void sub_80CE798(struct Sprite* sprite) sprite->pos1.x = sprite->data6; sprite->pos1.y = sprite->data7; } + if (sprite->data1 == 0) move_anim_8072740(sprite); } @@ -3143,6 +3155,7 @@ void sub_80CE7E0(u8 taskId) { gPlttBufferUnfaded[r3 + i] = gPlttBufferUnfaded[r4 + i]; } + BlendPalette(r3, 16, 11, 0); task->data[3] = 0; i = 0; @@ -3156,13 +3169,16 @@ void sub_80CE7E0(u8 taskId) task->data[3]++; i++; } + task->func = sub_80CE910; if (GetBankIdentity_permutated(gBattleAnimBankAttacker) == 1) { REG_DISPCNT &= 0xFDFF; } else + { REG_DISPCNT &= 0xFBFF; + } } void sub_80CE910(u8 taskId) @@ -3174,6 +3190,7 @@ void sub_80CE910(u8 taskId) REG_DISPCNT |= 0x200; else REG_DISPCNT |= 0x400; + FreeSpritePaletteByTag(0x2771); DestroyAnimVisualTask(taskId); } @@ -3186,6 +3203,7 @@ void sub_80CE974(struct Sprite* sprite) sprite->data3 = 0; sprite->data0++; } + if (sprite->data0 > 0x40) { gTasks[sprite->data2].data[3]--; @@ -3218,8 +3236,11 @@ void sub_80CEA20(u8 taskId) { index = (index << 4) + 0x100; for (i = 1; i < 6; i++) + { gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i]; + } } + for (j = 1; j < 4; j++) { index = AllocSpritePalette(gUnknown_083D712C[j][0]); @@ -3227,7 +3248,9 @@ void sub_80CEA20(u8 taskId) { index = (index << 4) + 0x100; for (i = 1; i < 6; i++) + { gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i]; + } } } DestroyAnimVisualTask(taskId); @@ -3237,7 +3260,10 @@ void sub_80CEAD8(u8 taskId) { u16 i; for (i = 1; i < 4; i++) + { FreeSpritePaletteByTag(gUnknown_083D712C[i][0]); + } + DestroyAnimVisualTask(taskId); } @@ -3250,6 +3276,7 @@ void sub_80CEB0C(struct Sprite* sprite) StartSpriteAnim(sprite, gBattleAnimArgs[0]); if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF) sprite->oam.paletteNum = index; + sprite->data1 = gBattleAnimArgs[1]; sprite->data2 = 0; sprite->data3 = gBattleAnimArgs[2]; @@ -3263,6 +3290,7 @@ void sub_80CEB0C(struct Sprite* sprite) a = sub_8077ABC(gBattleAnimBankTarget, 2); b = sub_8077ABC(gBattleAnimBankTarget, 3); } + sprite->data4 = sprite->pos1.x << 4; sprite->data5 = sprite->pos1.y << 4; sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data6, &sprite->data7, 0x28); @@ -3275,10 +3303,12 @@ void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e) int g; if (a < 0) e = -e; + f = a << 8; g = f / e; if (g == 0) g = 1; + *c = f / g; *d = (b << 8) / g; } @@ -3299,18 +3329,19 @@ void sub_80CEC1C(struct Sprite* sprite) sprite->pos2.y = Sin(b, 15); a = (u16)sprite->pos1.y; c = (u16)sprite->pos1.x; - //SOMEBODY CLEAN THIS UP THIS IS MESSY AS HELL AND I'M PRETTY SURE I DID IT IN SOME TACKY WAY + if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80) { move_anim_8074EE0(sprite); } else { - if(sprite->data3 && ++sprite->data2 > sprite->data3) + if (sprite->data3 && ++sprite->data2 > sprite->data3) { sprite->data2 = 0; if (++sprite->data1 > 3) sprite->data1 = 0; + index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data1][0]); if (index != 0xFF) sprite->oam.paletteNum = index; @@ -3326,6 +3357,7 @@ void sub_80CECE8(struct Sprite* sprite) a = gBattleAnimArgs[1]; (u16)gBattleAnimArgs[1] = -a; } + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[1]; sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; StartSpriteAnim(sprite, gBattleAnimArgs[0]); @@ -3352,6 +3384,7 @@ void sub_80CED78(struct Sprite* sprite) if (sprite->data2 == 0) sprite->data3 = 1; } + if (++sprite->data0 == 0x30) move_anim_8074EE0(sprite); } @@ -3365,7 +3398,10 @@ void sub_80CEDF0(struct Sprite* sprite) a = 16; } else + { a = -16; + } + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + a; sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + 8; sprite->data0 = 8; @@ -3383,6 +3419,7 @@ void sub_80CEE60(struct Sprite* sprite) index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[2]][0]); if (index != 0xFF) sprite->oam.paletteNum = index; + a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20; sprite->data0 = 40; sprite->data1 = sprite->pos1.x; @@ -3402,12 +3439,15 @@ void sub_80CEEE8(struct Sprite* sprite) a = Sin(sprite->data5, 8); if (sprite->pos2.x < 0) a = -a; + sprite->pos2.x += a; sprite->pos2.y += Sin(sprite->data5, 4); sprite->data5 = (sprite->data5 + 8) & 0xFF; } else + { move_anim_8072740(sprite); + } } void sub_80CEF44(u8 bank, struct Sprite* sprite) @@ -3416,6 +3456,7 @@ void sub_80CEF44(u8 bank, struct Sprite* sprite) sprite->pos1.x = sub_807A100(bank, 5) + 8; else sprite->pos1.x = sub_807A100(bank, 4) - 8; + sprite->pos1.y = sub_8077ABC(bank, 3) - (s16)sub_807A100(bank, 0) / 4; } @@ -3427,6 +3468,7 @@ void sub_80CEF9C(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + sub_80CEF44(bank, sprite); a = (GetBankSide(bank) == 0) ? 0 : 1; sprite->data0 = gBattleAnimArgs[1]; @@ -3453,6 +3495,7 @@ void sub_80CF040(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + sub_80CEF44(bank, sprite); sprite->data0 = 0; StoreSpriteCallbackInData6(sprite, sub_80CF088); @@ -3476,10 +3519,12 @@ void sub_80CF0BC(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + sprite->pos1.x = sub_8077ABC(bank, 0); sprite->pos1.y = sub_807A100(bank, 2); if (sprite->pos1.y <= 9) sprite->pos1.y = 10; + sprite->data0 = 1; sprite->data1 = 0; sprite->data2 = sprite->subpriority; @@ -3509,12 +3554,17 @@ void sub_80CF158(struct Sprite* sprite) return; } else + { sprite->data1 &= 0xFF; + } } + if (sprite->data1 > 0x4F) sprite->subpriority = sprite->data3; + if (sprite->data1 > 0x9F) sprite->subpriority = sprite->data2; + temp = gSineTable[sprite->data1]; sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1); } @@ -3526,6 +3576,7 @@ void sub_80CF1C8(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + sub_80CEF44(bank, sprite); if (GetBankSide(bank) == 0) { @@ -3537,6 +3588,7 @@ void sub_80CF1C8(struct Sprite* sprite) StartSpriteAnim(sprite, 1); sprite->data0 = 3; } + sprite->callback = sub_80CF228; } @@ -3578,6 +3630,7 @@ void sub_80CF2D0(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + sub_80CEF44(bank, sprite); sprite->data0 = 0; sprite->data1 = 0; @@ -3588,20 +3641,20 @@ void sub_80CF310(struct Sprite* sprite) { switch (sprite->data0) { - case 0: - sprite->pos2.y -= 3; - if (++sprite->data1 == 6) - sprite->data0++; - break; - case 1: - sprite->pos2.y += 3; - if (--sprite->data1 == 0) - sprite->data0++; - break; - case 2: - if (++sprite->data1 == 0x40) - move_anim_8072740(sprite); - break; + case 0: + sprite->pos2.y -= 3; + if (++sprite->data1 == 6) + sprite->data0++; + break; + case 1: + sprite->pos2.y += 3; + if (--sprite->data1 == 0) + sprite->data0++; + break; + case 2: + if (++sprite->data1 == 0x40) + move_anim_8072740(sprite); + break; } } @@ -3616,6 +3669,7 @@ void sub_80CF374(struct Sprite* sprite) gSprites[sprite->data2].pos2.x = 0; move_anim_8074EE0(sprite); } + sprite->data0--; } @@ -3633,6 +3687,7 @@ void sub_80CF3C4(struct Sprite* sprite) { sprite->pos1.x += gBattleAnimArgs[0]; } + sprite->pos1.y += gBattleAnimArgs[1]; sprite->data0 = gBattleAnimArgs[2]; sprite->data1 = gBattleAnimArgs[3]; @@ -3686,6 +3741,7 @@ void sub_80CF514(u8 taskId) { b = gTasks[taskId].data[0]; } + obj_id_set_rotscale(a, 0x100, 0x100, b); if (gTasks[taskId].data[1] == 0) { @@ -3696,6 +3752,7 @@ void sub_80CF514(u8 taskId) { if (++gTasks[taskId].data[3] == 0x1E) gTasks[taskId].data[1] = 2; + return; } else @@ -3703,6 +3760,7 @@ void sub_80CF514(u8 taskId) gTasks[taskId].data[0] -= 0xB0; gSprites[a].pos2.y--; } + sub_8078F9C(a); if (gTasks[taskId].data[0] == 0xF20 || gTasks[taskId].data[0] == 0) { @@ -3734,6 +3792,7 @@ void sub_80CF610(struct Sprite* sprite) if (gBattleAnimArgs[2] != 0) sprite->vFlip = 1; } + sprite->callback = sub_8078600; StoreSpriteCallbackInData6(sprite, move_anim_8072740); } @@ -3762,13 +3821,16 @@ void sub_80CF6DC(struct Sprite* sprite) u16 c; if (NotInBattle()) + { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } else if (GetBankSide(gBattleAnimBankAttacker) != 0) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; gBattleAnimArgs[1] = -gBattleAnimArgs[1]; gBattleAnimArgs[3] = -gBattleAnimArgs[3]; } + sub_80787B0(sprite, 1); a = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; b = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; @@ -3776,6 +3838,7 @@ void sub_80CF6DC(struct Sprite* sprite) c += 0xF000; if (NotInBattle()) c -= 0x6000; + sub_8078FDC(sprite, 0, 0x100, 0x100, c); sprite->data0 = gBattleAnimArgs[4]; sprite->data2 = a; @@ -3806,16 +3869,19 @@ void sub_80CF814(struct Sprite* sprite) sprite->data5 -= sprite->data3; sprite->data6 -= sprite->data4; } + sprite->data1 += sprite->data5; sprite->data2 += sprite->data6; if (1 & task->data[7]) sprite->pos2.x = ((u16)sprite->data1 >> 8) * -1; else sprite->pos2.x = (u16)sprite->data1 >> 8; + if (1 & task->data[8]) sprite->pos2.y = ((u16)sprite->data2 / 256u) * -1; else sprite->pos2.y = (u16)sprite->data2 / 256u; + if (sprite->data0-- <= 0) { sprite->data0 = 30; @@ -3829,6 +3895,7 @@ void sub_80CF8B8(struct Sprite* sprite) s16 a; s16 b; s16 c; + struct Task* task = &gTasks[sprite->data7]; sprite->data1 += (-2 & task->data[7]); sprite->data2 += (-2 & task->data[8]); @@ -3836,10 +3903,12 @@ void sub_80CF8B8(struct Sprite* sprite) sprite->pos2.x = ((u16)sprite->data1 >> 8) * -1; else sprite->pos2.x = (u16)sprite->data1 >> 8; + if (1 & task->data[8]) sprite->pos2.y = ((u16)sprite->data2 / 256u) * -1; else sprite->pos2.y = (u16)sprite->data2 / 256u; + if (sprite->data0-- <= 0) { sprite->data0 = 8; @@ -3853,10 +3922,12 @@ void sub_80CF8B8(struct Sprite* sprite) b = (task->data[11] - sprite->pos1.x) << 8; else b = (sprite->pos1.x - task->data[11]) << 8; + if (task->data[12] >= sprite->pos1.y) c = (task->data[12] - sprite->pos1.y) << 8; else c = (sprite->pos1.y - task->data[12]) << 8; + sprite->data2 = 0; sprite->data1 = 0; sprite->data6 = 0; @@ -3883,13 +3954,14 @@ void sub_80CFA20(u8 taskId) sprite = &gSprites[spriteId]; switch (gTasks[taskId].data[4]) { - case 1: - sprite->oam.matrixNum |= 24; - break; - case 2: - sprite->oam.matrixNum = 8; - break; + case 1: + sprite->oam.matrixNum |= 24; + break; + case 2: + sprite->oam.matrixNum = 8; + break; } + sprite->data0 = gTasks[taskId].data[5] - gTasks[taskId].data[6]; sprite->data7 = taskId; gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId; @@ -3934,7 +4006,7 @@ void sub_80CFB04(u8 taskId) r6 = gTasks[taskId].data[9] = sub_8077ABC(gBattleAnimBankAttacker, 0); r9 = gTasks[taskId].data[10] = sub_8077ABC(gBattleAnimBankAttacker, 1); if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - && IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) + && IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) { sub_807A3FC(gBattleAnimBankTarget, 0, &sp1, &sp2); } @@ -3943,12 +4015,14 @@ void sub_80CFB04(u8 taskId) sp1 = sub_8077ABC(gBattleAnimBankTarget, 0); sp2 = sub_8077ABC(gBattleAnimBankTarget, 1); } + sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0]; sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1]; if (sp1 >= r6) r4 = sp1 - r6; else r4 = r6 - sp1; + gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1)); gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80); gTasks[taskId].data[7] = gBattleAnimArgs[2]; @@ -3962,6 +4036,7 @@ void sub_80CFB04(u8 taskId) r4 = r9 - sp2; gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1; } + gTasks[taskId].data[3] = gBattleAnimArgs[3]; if (gBattleAnimArgs[4] & 0x80) { @@ -3990,8 +4065,10 @@ void sub_80CFB04(u8 taskId) gTasks[taskId].data[2] = var; } } + if (gTasks[taskId].data[2] < 3) gTasks[taskId].data[2] = 3; + gTasks[taskId].func = sub_80CFA20; } @@ -4021,6 +4098,7 @@ void sub_80CFE2C(struct Sprite* sprite) r1++; r2++; } + gPlttBufferFaded[sprite->data0 + 15] = r7; if (++sprite->data2 == 0x18) move_anim_8072740(sprite); @@ -4102,6 +4180,7 @@ void sub_80CFE9C(struct Sprite* sprite) r7 = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; if (GetBankSide(gBattleAnimBankAttacker) != 0) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + r6 += gBattleAnimArgs[2]; var = sub_80790F0(r6 - sprite->pos1.x, r7 - sprite->pos1.y); var += 0xC000; @@ -4126,6 +4205,7 @@ void sub_80CFF68(struct Sprite* sprite) sprite->pos2.x = sprite->data0 >> 8; if (GetBankSide(gBattleAnimBankAttacker) == 0) sprite->pos2.x = -sprite->pos2.x; + sprite->pos2.y = Sin(sprite->data1, sprite->data2); sprite->data1 += 5; if (sprite->data1 > 0x7E) @@ -4159,9 +4239,11 @@ void sub_80D0030(struct Sprite* sprite) sprite->pos2.y = 0; sprite->pos2.x = 0; ptr = &sprite->data7; - for (i = 0; i < 8; i++) { + for (i = 0; i < 8; i++) + { ptr[i - 7] = 0; } + rand = Random(); sprite->data6 = 0xFFF4 - (rand & 7); rand = Random(); @@ -4176,6 +4258,7 @@ void sub_80D00B4(struct Sprite* sprite) sprite->pos2.x = sprite->data0 >> 8; if (sprite->data7 & 1) sprite->pos2.x = -sprite->pos2.x; + sprite->pos2.y = Sin(sprite->data1, sprite->data6); sprite->data1 += 8; if (sprite->data1 > 0x7E) @@ -4192,6 +4275,7 @@ void sub_80D0118(struct Sprite* sprite) sub_80787B0(sprite, 0); if (GetBankSide(gBattleAnimBankAttacker) == 0) sprite->pos1.y += 16; + sprite->data0 = gBattleAnimArgs[4]; sprite->data1 = gBattleAnimArgs[2]; sprite->data2 = gBattleAnimArgs[5]; @@ -4216,6 +4300,7 @@ void sub_80D0178(struct Sprite* sprite) r6 = 16; StartSpriteAnim(sprite, 1); } + sprite->pos1.x += r7; sprite->pos1.y += r4; sprite->data0 = 6; @@ -4245,6 +4330,7 @@ void sub_80D0228(struct Sprite* sprite) r6 = 16; StartSpriteAnim(sprite, gBattleAnimArgs[0]); } + sprite->pos1.x += r8; sprite->pos1.y += r4; sprite->data0 = 6; @@ -4284,6 +4370,7 @@ void sub_80D0344(struct Sprite* sprite) sprite->pos2.x = -sprite->pos2.x; sprite->pos2.y = -sprite->pos2.y; } + sprite->data3 ^= 1; if (++sprite->data4 == 0x33) { @@ -4345,64 +4432,64 @@ void sub_80D04E0(u8 taskId) struct Task* task = &gTasks[taskId]; switch (task->data[1]) { - case 0: - if (task->data[2] == 0 || task->data[2] == 3 || task->data[2] == 6) - sub_80D0614(task, taskId); - task->data[2]++; - task->data[4] += 0x28; - obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); - sub_8079A64(task->data[0]); - if (task->data[2] == 32) - { - task->data[5]++; - task->data[1]++; - } - break; - case 1: - if (task->data[6] == 0) - { - if (task->data[5] == 3) - { - task->data[2] = 0; - task->data[1] = 3; - } - else - { - task->data[2] = 0; - task->data[3] = 0; - task->data[4] = 0x100; - obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); - sub_8079A64(task->data[0]); - task->data[1] = 2; - } - } - break; - case 2: - task->data[1] = 0; - break; - case 3: - if (++task->data[2] > 32) + case 0: + if (task->data[2] == 0 || task->data[2] == 3 || task->data[2] == 6) + sub_80D0614(task, taskId); + task->data[2]++; + task->data[4] += 0x28; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + if (task->data[2] == 32) + { + task->data[5]++; + task->data[1]++; + } + break; + case 1: + if (task->data[6] == 0) + { + if (task->data[5] == 3) { task->data[2] = 0; - task->data[1]++; + task->data[1] = 3; } - break; - case 4: - task->data[2] += 2; - task->data[4] -= 0x50; - obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); - sub_8079A64(task->data[0]); - if (task->data[2] == 32) + else { task->data[2] = 0; - task->data[1]++; + task->data[3] = 0; + task->data[4] = 0x100; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + task->data[1] = 2; } - break; - case 5: - sub_8078F40(task->data[0]); - gSprites[task->data[15]].pos2.y = 0; - DestroyAnimVisualTask(taskId); - break; + } + break; + case 2: + task->data[1] = 0; + break; + case 3: + if (++task->data[2] > 32) + { + task->data[2] = 0; + task->data[1]++; + } + break; + case 4: + task->data[2] += 2; + task->data[4] -= 0x50; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + if (task->data[2] == 32) + { + task->data[2] = 0; + task->data[1]++; + } + break; + case 5: + sub_8078F40(task->data[0]); + gSprites[task->data[15]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + break; } } @@ -4414,7 +4501,9 @@ void sub_80D0614(struct Task* task, u8 taskId) { u8 r6 = AllocOamMatrix(); if (r6 == 0xFF) + { obj_delete_but_dont_free_vram(&gSprites[r8]); + } else { gSprites[r8].oam.objMode = 1; @@ -4572,7 +4661,9 @@ void sub_80D074C(u8 taskId) { struct Task* task = &gTasks[taskId]; if (gBattleAnimArgs[1] == 0) + { DestroyAnimVisualTask(taskId); + } else { u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); @@ -4591,49 +4682,49 @@ 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) + 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 -= 2; - task->data[4] -= 2; + gSprites[task->data[0]].pos2.y = 0; + DestroyAnimVisualTask(taskId); } 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; - } + sub_80798F4(task, task->data[0], &gUnknown_083D76F4); + task->data[1] = 0; } - break; + } + break; } } @@ -4666,6 +4757,7 @@ void sub_80D0930(struct Sprite* sprite) sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) - 32; sprite->data1 = -0x40; } + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); sprite->data0 = 0x34; sprite->data2 = 0; @@ -4682,14 +4774,17 @@ void sub_80D09C0(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + 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; + StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); sprite->callback = sub_80785E4; } @@ -4726,6 +4821,7 @@ void sub_80D0AB8(u8 taskId) task->data[9] = 2; if (GetBankSide(gBattleAnimBankAttacker) == 1) task->data[2] *= -1; + task->func = sub_80D0B3C; } @@ -4741,44 +4837,46 @@ void sub_80D0B3C(u8 taskId) 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) + 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] = 2; + task->data[1] = 0; } - break; - case 2: - gSprites[task->data[0]].pos1.x += task->data[2]; - if (--task->data[3] == 0) + else { - if (--task->data[4] != 0) - { - task->data[3] = 7; - task->data[1] = 0; - } - else + if ((task->data[8] & 1) != 0) { - if ((task->data[8] & 1) != 0) - { - gSprites[task->data[0]].pos1.y -= task->data[9]; - } - DestroyAnimVisualTask(taskId); + gSprites[task->data[0]].pos1.y -= task->data[9]; } + DestroyAnimVisualTask(taskId); } + } break; } } @@ -4786,7 +4884,7 @@ void sub_80D0B3C(u8 taskId) void sub_80D0C88(u8 taskId) { struct Task* task = &gTasks[taskId]; - struct UnknownStruct_2 sp; + struct UnknownTaskStruct sp; s16 i; task->data[0] = sub_8077FC0(gBattleAnimBankTarget) + 32; task->data[1] = 4; @@ -4805,6 +4903,7 @@ void sub_80D0C88(u8 taskId) 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) @@ -4813,6 +4912,7 @@ void sub_80D0C88(u8 taskId) gUnknown_03004DE0.unk780[i] = task->data[6] + 0xF0; } } + sp.control = 0xa2600001; sp.unk8 = 1; sp.unk9 = 0; @@ -4851,11 +4951,13 @@ void sub_80D0D68(u8 taskId) task->data[5] += 1; 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; @@ -4997,58 +5099,58 @@ void sub_80D0E8C(struct Sprite* sprite) { switch (sprite->data0) { - case 0: - if (++sprite->data2 > 1) - { - sprite->data2 = 0; - sprite->invisible = !sprite->invisible; - } - if (++sprite->data1 > 16) - { - sprite->invisible = 0; - sprite->data0++; - } - break; - case 1: - if (++sprite->data1 > 3 && sprite->data2 < sprite->data5) - { - sprite->data1 = 0; - sprite->pos1.y -= 1; - sprite->data2++; - if (sprite->data2 % 10 == 0) - PlaySE12WithPanning(0xCD, sprite->data6); - } - sprite->data4 += sprite->data3; - if (sprite->data4 > 31) - { - sprite->data4 = 0x40 - sprite->data4; - sprite->data3 *= -1; - } - else if (sprite->data4 <= -32) - { - sprite->data4 = -0x40 - sprite->data4; - sprite->data3 *= -1; - } - sprite->pos2.x = sprite->data4; - if (sprite->data5 == sprite->data2) - { - sprite->data1 = 0; - sprite->data2 = 0; - sprite->data0++; - } - break; - case 2: - if (++sprite->data2 > 1) - { - sprite->data2 = 0; - sprite->invisible = !sprite->invisible; - } - if (++sprite->data1 > 16) - { - sprite->invisible = 0; - move_anim_8072740(sprite); - } - break; + case 0: + if (++sprite->data2 > 1) + { + sprite->data2 = 0; + sprite->invisible = !sprite->invisible; + } + if (++sprite->data1 > 16) + { + sprite->invisible = 0; + sprite->data0++; + } + break; + case 1: + if (++sprite->data1 > 3 && sprite->data2 < sprite->data5) + { + sprite->data1 = 0; + sprite->pos1.y -= 1; + sprite->data2++; + if (sprite->data2 % 10 == 0) + PlaySE12WithPanning(0xCD, sprite->data6); + } + sprite->data4 += sprite->data3; + if (sprite->data4 > 31) + { + sprite->data4 = 0x40 - sprite->data4; + sprite->data3 *= -1; + } + else if (sprite->data4 <= -32) + { + sprite->data4 = -0x40 - sprite->data4; + sprite->data3 *= -1; + } + sprite->pos2.x = sprite->data4; + if (sprite->data5 == sprite->data2) + { + sprite->data1 = 0; + sprite->data2 = 0; + sprite->data0++; + } + break; + case 2: + if (++sprite->data2 > 1) + { + sprite->data2 = 0; + sprite->invisible = !sprite->invisible; + } + if (++sprite->data1 > 16) + { + sprite->invisible = 0; + move_anim_8072740(sprite); + } + break; } } @@ -5063,6 +5165,7 @@ void sub_80D0FD8(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + r4 = gBattleAnimArgs[3] ^ 1; if (IsDoubleBattle() && IsAnimBankSpriteVisible(bank ^ 2)) { @@ -5071,11 +5174,13 @@ void sub_80D0FD8(struct Sprite* sprite) r4 = sub_8077ABC(bank, 0); else r4 = sub_8077ABC(bank, 2); + if (GetBankSide(bank) != 0) gBattleAnimArgs[0] -= (sp0 - r4) - gBattleAnimArgs[0]; // This is weird. else gBattleAnimArgs[0] = sp0 - r4; } + sprite->callback = sub_80793C4; sub_80793C4(sprite); } @@ -5181,6 +5286,7 @@ void sub_80D1318(struct Sprite* sprite) { BlendPalette(((index << 20) + 0x1010000) >> 16, 15, gBattleAnimArgs[5], gBattleAnimArgs[4]); } + StartSpriteAffineAnim(sprite, 1); sprite->callback = sub_80793C4; sub_80793C4(sprite); @@ -5326,6 +5432,7 @@ void sub_80D1638(u8 taskId) task->data[13] = 1; task->data[14] = -8; } + task->data[15] = GetAnimBankSpriteId(1); task->func = sub_80D16A0; } @@ -5352,10 +5459,12 @@ void sub_80D16A0(u8 taskId) gSprites[task->data[15]].pos2.x += 6; else gSprites[task->data[15]].pos2.x -= 6; + if (++task->data[3] > 4) { if (task->data[2] & 1) gSprites[task->data[15]].pos2.x -= 6; + task->data[0]++; } } @@ -5398,6 +5507,7 @@ void sub_80D1808(u8 taskId) gSprites[task->data[15]].invisible = 0; else gSprites[task->data[15]].invisible = 1; + if (++task->data[3] >= task->data[13]) { if (++task->data[4] < task->data[14]) @@ -5438,63 +5548,64 @@ void sub_80D1930(u8 taskId) struct Task* task = &gTasks[taskId]; switch (task->data[8]) { - case 0: - if (++task->data[4] > 1) + case 0: + if (++task->data[4] > 1) + { + task->data[4] = 0; + task->data[5] = (task->data[5] + 1) & 1; + if (++task->data[6] > 20) { - task->data[4] = 0; - task->data[5] = (task->data[5] + 1) & 1; - if (++task->data[6] > 20) + if (task->data[7] == 0) { - if (task->data[7] == 0) - { - task->data[6] = 0; - task->data[8] = 1; - } - else - task->data[8] = 2; + task->data[6] = 0; + task->data[8] = 1; } + else + task->data[8] = 2; } - break; - case 1: - task->data[5] = 0; - if (++task->data[4] > 20) - { - task->data[7] = 1; - task->data[8] = 0; - } - break; - case 2: - task->data[5] = 1; - break; + } + break; + case 1: + task->data[5] = 0; + if (++task->data[4] > 20) + { + task->data[7] = 1; + task->data[8] = 0; + } + break; + case 2: + task->data[5] = 1; + break; } + switch (task->data[0]) { - case 0: - if (++task->data[1] > 4) + case 0: + if (++task->data[1] > 4) + { + u8 spriteId; + task->data[1] = 0; + spriteId = CreateSprite(&gSpriteTemplate_83D79E8, task->data[14], task->data[15], 0); + if (spriteId != MAX_SPRITES) { - u8 spriteId; - task->data[1] = 0; - spriteId = CreateSprite(&gSpriteTemplate_83D79E8, task->data[14], task->data[15], 0); - if (spriteId != MAX_SPRITES) + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = 13; + gSprites[spriteId].pos2.x = gUnknown_083D7A00[task->data[2]][0]; + gSprites[spriteId].pos2.y = gUnknown_083D7A00[task->data[2]][1]; + task->data[13]++; + if (++task->data[2] > 3) { - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 13; - gSprites[spriteId].pos2.x = gUnknown_083D7A00[task->data[2]][0]; - gSprites[spriteId].pos2.y = gUnknown_083D7A00[task->data[2]][1]; - task->data[13]++; - if (++task->data[2] > 3) - { - task->data[2] = 0; - if (++task->data[3] > 5) - task->data[0]++; - } + task->data[2] = 0; + if (++task->data[3] > 5) + task->data[0]++; } } - break; - case 1: - if (task->data[13] == 0) - DestroyAnimVisualTask(taskId); - break; + } + break; + case 1: + if (task->data[13] == 0) + DestroyAnimVisualTask(taskId); + break; } } @@ -5517,7 +5628,10 @@ void sub_80D1ADC(u8 taskId) void* what; sp[0] = IndexOfSpritePaletteTag(0x27DE); for (i = 1; i <= 4; i++) + { sp[i] = AllocSpritePalette(0x2710 - i); + } + src = &gBattleAnimSpritePalette_206; dest = (NotInBattle()) ? gSharedMem + 0x18000 - 0x3800: gSharedMem + 0x18000; LZDecompressWram(src, dest); @@ -5526,6 +5640,7 @@ void sub_80D1ADC(u8 taskId) what = ((NotInBattle()) ? gSharedMem + 0x14800 : gSharedMem + 0x18000) + (i << 5); LoadPalette(what, (u16)((sp[i] << 4) + 0x100), 32); } + DestroyAnimVisualTask(taskId); } @@ -5533,7 +5648,10 @@ void sub_80D1B80(u8 taskId) { int i; for (i = 0; i < 5; i++) + { FreeSpritePaletteByTag(gUnknown_083D7A5C[i]); + } + DestroyAnimVisualTask(taskId); } @@ -5551,6 +5669,7 @@ void sub_80D1C08(struct Sprite* sprite) sub_80787B0(sprite, 0); if (GetBankSide(gBattleAnimBankAttacker) != 0) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->data0 = gBattleAnimArgs[4]; sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[2]; sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[3]; @@ -5563,6 +5682,7 @@ void sub_80D1C80(struct Sprite* sprite) { if (++sprite->data0 == 1) sub_80787B0(sprite, 0); + sprite->pos2.x = Sin(sprite->data1, 8); sprite->pos2.y = sprite->data2 >> 8; sprite->data1 = (sprite->data1 + 7) & 0xFF; @@ -5582,7 +5702,10 @@ void sub_80D1CD0(u8 taskId) zero = 0; } else + { zero = 0; + } + gUnknown_030042C4 = var; gUnknown_03004240 = 0xA0; REG_WIN0H = var; @@ -5606,7 +5729,9 @@ void sub_80D1D48(u8 taskId) gTasks[taskId].func = sub_80D1D9C; } else + { gUnknown_030042C4 = gTasks[taskId].data[1] | (gTasks[taskId].data[0] << 8); + } } void sub_80D1D9C(u8 taskId) @@ -5689,7 +5814,9 @@ void sub_80D1FA4(struct Sprite* sprite) sprite->data5 = (sprite->data5 + 4) & 0xFF; } else + { move_anim_8072740(sprite); + } } void sub_80D1FDC(struct Sprite* sprite) @@ -5710,8 +5837,11 @@ void sub_80D1FDC(struct Sprite* sprite) { sprite->invisible = sprite->data3 % 2; } + if (sprite->data3 > 0x78) + { move_anim_8072740(sprite); + } } } @@ -5751,6 +5881,7 @@ void sub_80D2100(u8 taskId) REG_BG1CNT_BITFIELD.screenSize = 0; if (!NotInBattle()) REG_BG1CNT_BITFIELD.charBaseBlock = 1; + gUnknown_030042C0 = 0; gUnknown_030041B4 = 0; REG_BG1HOFS = 0; @@ -5763,6 +5894,7 @@ void sub_80D2100(u8 taskId) LoadCompressedPalette(&gAttractPal, subStruct.field_8 << 4, 32); if (NotInBattle()) sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + gTasks[taskId].func = sub_80D21F0; } @@ -5825,6 +5957,7 @@ void sub_80D21F0(u8 taskId) DmaClear32(3, subStruct.field_4, 0x800); if (!NotInBattle()) REG_BG1CNT_BITFIELD.charBaseBlock = 0; + gTasks[taskId].data[12]++; // fall through case 4: @@ -5846,6 +5979,7 @@ void sub_80D23B4(u8 taskId) REG_BG1CNT_BITFIELD.screenSize = 0; if (!NotInBattle()) REG_BG1CNT_BITFIELD.charBaseBlock = 1; + gUnknown_030042C0 = 0; gUnknown_030041B4 = 0; REG_BG1HOFS = 0; @@ -5859,10 +5993,12 @@ void sub_80D23B4(u8 taskId) LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFacePlayer, subStruct.field_4); else LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFaceOpponent, subStruct.field_4); + LZDecompressVram(&gBattleAnimBackgroundImage_ScaryFace, subStruct.field_0); LoadCompressedPalette(&gBattleAnimBackgroundPalette_ScaryFace, subStruct.field_8 << 4, 32); if (NotInBattle()) sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + gTasks[taskId].func = sub_80D24E0; } @@ -5925,6 +6061,7 @@ void sub_80D24E0(u8 taskId) DmaClear32(3, subStruct.field_4, 0x800); if (!NotInBattle()) REG_BG1CNT_BITFIELD.charBaseBlock = 0; + gTasks[taskId].data[12]++; // fall through case 4: @@ -5954,30 +6091,32 @@ void sub_80D2704(struct Sprite* sprite) sprite->subpriority = sprite->data7 + 1; else sprite->subpriority = sprite->data7 - 1; + sprite->pos2.x = Sin(sprite->data1, sprite->data2 >> 8); sprite->pos2.y = Cos(sprite->data1, sprite->data3 >> 8); sprite->data1 = (sprite->data1 + 9) & 0xFF; switch (sprite->data5) { - case 1: - sprite->data2 -= 0x400; - sprite->data3 -= 0x100; - if (++sprite->data4 == sprite->data0) - { - sprite->data5 = 2; - return; - } - break; - case 0: - sprite->data2 += 0x400; - sprite->data3 += 0x100; - if (++sprite->data4 == sprite->data0) - { - sprite->data4 = 0; - sprite->data5 = 1; - } - break; + case 1: + sprite->data2 -= 0x400; + sprite->data3 -= 0x100; + if (++sprite->data4 == sprite->data0) + { + sprite->data5 = 2; + return; + } + break; + case 0: + sprite->data2 += 0x400; + sprite->data3 += 0x100; + if (++sprite->data4 == sprite->data0) + { + sprite->data4 = 0; + sprite->data5 = 1; + } + break; } + if ((u16)gBattleAnimArgs[7] == 0xFFFF) move_anim_8072740(sprite); } @@ -6037,16 +6176,19 @@ void sub_80D2938(struct Sprite* sprite) sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; } + sprite->data0++; r5 = (sprite->data0 * 10) & 0xFF; sprite->pos2.x = Sin(r5, 0x50) >> 8; if (sprite->data0 <= 0x4F) sprite->pos2.y = (sprite->data0 / 2) + (Cos(r5, 0x50) >> 8); + if (sprite->data0 > 0x5A) { sprite->data2++; sprite->pos2.x -= sprite->data2 / 2; } + if (sprite->data0 > 0x64) move_anim_8072740(sprite); } @@ -6059,6 +6201,7 @@ void sub_80D29CC(struct Sprite* sprite) sprite->data3 = (sprite->data3 + 3) & 0xFF; if (sprite->data5 > 20) sprite->invisible = sprite->data5 % 2; + if (sprite->data5 > 30) move_anim_8072740(sprite); } @@ -6102,13 +6245,16 @@ void sub_80D2A38(struct Sprite* sprite) sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) - 1; sprite->data2 = 1; } + sprite->data0 += sprite->data2; var = sprite->data0 * 4; if (var < 0) var += 0xFF; + sprite->data1 = (sprite->data0 * 4) -(((var) >> 8) << 8); if (sprite->data1 < 0) sprite->data1 = 0; + var3 = sprite->data1; var2 = sprite->data0; var2 /= 4; |