diff options
-rw-r--r-- | asm/battle_anim_80CA710.s | 500 | ||||
-rwxr-xr-x | src/battle_anim_80CA710.c | 168 |
2 files changed, 168 insertions, 500 deletions
diff --git a/asm/battle_anim_80CA710.s b/asm/battle_anim_80CA710.s index 1cdc8865c..2a3ef3754 100644 --- a/asm/battle_anim_80CA710.s +++ b/asm/battle_anim_80CA710.s @@ -6,506 +6,6 @@ .text - thumb_func_start sub_80CE108 -sub_80CE108: @ 80CE108 - push {r4,lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _080CE128 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r4, r0, r1 - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _080CE134 - ldr r1, _080CE12C @ =gBattleAnimArgs - ldr r0, _080CE130 @ =0x0000ffff - strh r0, [r1, 0xE] - b _080CE16C - .align 2, 0 -_080CE128: .4byte gTasks -_080CE12C: .4byte gBattleAnimArgs -_080CE130: .4byte 0x0000ffff -_080CE134: - cmp r0, 0x2 - bne _080CE140 - adds r0, r2, 0 - bl DestroyAnimVisualTask - b _080CE172 -_080CE140: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _080CE172 - movs r0, 0 - strh r0, [r4, 0x8] - ldrh r1, [r4, 0xA] - adds r1, 0x1 - strh r1, [r4, 0xA] - ldr r3, _080CE178 @ =REG_BLDALPHA - lsls r2, r1, 8 - movs r0, 0x10 - subs r0, r1 - orrs r2, r0 - strh r2, [r3] - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0x10 - bne _080CE172 -_080CE16C: - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] -_080CE172: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CE178: .4byte REG_BLDALPHA - thumb_func_end sub_80CE108 - - thumb_func_start sub_80CE17C -sub_80CE17C: @ 80CE17C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0 - bl sub_8078764 - adds r2, r4, 0 - adds r2, 0x2C - ldrb r0, [r2] - movs r1, 0x40 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080CE1A4 @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - strh r0, [r4, 0x2E] - ldr r0, _080CE1A8 @ =sub_80CE1AC - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CE1A4: .4byte gBattleAnimArgs -_080CE1A8: .4byte sub_80CE1AC - thumb_func_end sub_80CE17C - - thumb_func_start sub_80CE1AC -sub_80CE1AC: @ 80CE1AC - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r1, [r5, 0x2E] - movs r2, 0x2E - ldrsh r0, [r5, r2] - cmp r0, 0 - beq _080CE1C0 - subs r0, r1, 0x1 - strh r0, [r5, 0x2E] - b _080CE1FC -_080CE1C0: - adds r2, r5, 0 - adds r2, 0x2C - ldrb r1, [r2] - movs r0, 0x41 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - movs r0, 0x1E - strh r0, [r5, 0x2E] - ldr r4, _080CE204 @ =gBattleAnimPlayerMonIndex - ldrb r0, [r4] - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - ldr r0, _080CE208 @ =sub_8078B34 - str r0, [r5, 0x1C] - ldr r1, _080CE20C @ =move_anim_8072740 - adds r0, r5, 0 - bl oamt_set_x3A_32 -_080CE1FC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080CE204: .4byte gBattleAnimPlayerMonIndex -_080CE208: .4byte sub_8078B34 -_080CE20C: .4byte move_anim_8072740 - thumb_func_end sub_80CE1AC - - thumb_func_start sub_80CE210 -sub_80CE210: @ 80CE210 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _080CE258 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r3, r0, r1 - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _080CE252 - movs r0, 0 - strh r0, [r3, 0x8] - ldrh r1, [r3, 0xA] - adds r1, 0x1 - strh r1, [r3, 0xA] - ldr r2, _080CE25C @ =REG_BLDALPHA - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - strh r1, [r2] - movs r1, 0xA - ldrsh r0, [r3, r1] - cmp r0, 0x10 - bne _080CE252 - adds r0, r4, 0 - bl DestroyAnimVisualTask -_080CE252: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CE258: .4byte gTasks -_080CE25C: .4byte REG_BLDALPHA - thumb_func_end sub_80CE210 - - thumb_func_start unref_sub_80CE260 -unref_sub_80CE260: @ 80CE260 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - movs r4, 0 - ldr r0, _080CE2C8 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r4, r0 - bcs _080CE2BC - ldr r6, _080CE2CC @ =gBattleAnimArgs - ldr r5, _080CE2D0 @ =gHealthboxIDs -_080CE274: - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0x1 - bne _080CE290 - adds r0, r4, 0 - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _080CE290 - adds r0, r4, r5 - ldrb r0, [r0] - bl sub_8043DB0 -_080CE290: - movs r1, 0x2 - ldrsh r0, [r6, r1] - cmp r0, 0x1 - bne _080CE2AE - adds r0, r4, 0 - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080CE2AE - adds r0, r4, r5 - ldrb r0, [r0] - bl sub_8043DB0 -_080CE2AE: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080CE2C8 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r4, r0 - bcc _080CE274 -_080CE2BC: - adds r0, r7, 0 - bl DestroyAnimVisualTask - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080CE2C8: .4byte gNoOfAllBanks -_080CE2CC: .4byte gBattleAnimArgs -_080CE2D0: .4byte gHealthboxIDs - thumb_func_end unref_sub_80CE260 - - thumb_func_start unref_sub_80CE2D4 -unref_sub_80CE2D4: @ 80CE2D4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - b _080CE2EE -_080CE2DE: - ldr r0, _080CE304 @ =gHealthboxIDs - adds r0, r4, r0 - ldrb r0, [r0] - bl sub_8043DFC - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_080CE2EE: - ldr r0, _080CE308 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r4, r0 - bcc _080CE2DE - adds r0, r5, 0 - bl DestroyAnimVisualTask - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080CE304: .4byte gHealthboxIDs -_080CE308: .4byte gNoOfAllBanks - thumb_func_end unref_sub_80CE2D4 - - thumb_func_start sub_80CE30C -sub_80CE30C: @ 80CE30C - push {r4,lr} - adds r4, r0, 0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080CE322 - movs r0, 0x30 - strh r0, [r4, 0x20] - movs r0, 0x28 - b _080CE32A -_080CE322: - ldr r0, _080CE34C @ =gBattleAnimArgs - ldrh r1, [r0] - strh r1, [r4, 0x20] - ldrh r0, [r0, 0x2] -_080CE32A: - strh r0, [r4, 0x22] - ldrb r1, [r4, 0x1] - movs r0, 0x3F - ands r0, r1 - strb r0, [r4, 0x1] - ldrb r0, [r4, 0x3] - movs r1, 0xC0 - orrs r0, r1 - strb r0, [r4, 0x3] - movs r0, 0 - strh r0, [r4, 0x2E] - ldr r0, _080CE350 @ =sub_80CE354 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CE34C: .4byte gBattleAnimArgs -_080CE350: .4byte sub_80CE354 - thumb_func_end sub_80CE30C - - thumb_func_start sub_80CE354 -sub_80CE354: @ 80CE354 - push {lr} - adds r1, r0, 0 - movs r2, 0x2E - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _080CE366 - adds r0, r1, 0 - bl move_anim_8072740 -_080CE366: - pop {r0} - bx r0 - thumb_func_end sub_80CE354 - - thumb_func_start sub_80CE36C -sub_80CE36C: @ 80CE36C - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080CE3A4 @ =gBattleAnimPlayerMonIndex - ldrb r0, [r0] - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - ldr r2, _080CE3A8 @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r1, [r2] - adds r0, r1 - movs r1, 0 - strh r0, [r4, 0x20] - ldrh r0, [r2, 0x2] - strh r0, [r4, 0x22] - strh r1, [r4, 0x2E] - strh r1, [r4, 0x30] - strh r1, [r4, 0x32] - strh r1, [r4, 0x34] - movs r0, 0x1 - strh r0, [r4, 0x36] - ldr r0, _080CE3AC @ =sub_80CE3B0 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CE3A4: .4byte gBattleAnimPlayerMonIndex -_080CE3A8: .4byte gBattleAnimArgs -_080CE3AC: .4byte sub_80CE3B0 - thumb_func_end sub_80CE36C - - thumb_func_start sub_80CE3B0 -sub_80CE3B0: @ 80CE3B0 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x30] - adds r0, 0x1 - strh r0, [r1, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080CE3DA - movs r0, 0 - strh r0, [r1, 0x30] - ldrh r2, [r1, 0x32] - movs r3, 0x32 - ldrsh r0, [r1, r3] - cmp r0, 0x77 - bgt _080CE3DA - ldrh r0, [r1, 0x22] - adds r0, 0x1 - strh r0, [r1, 0x22] - adds r0, r2, 0x1 - strh r0, [r1, 0x32] -_080CE3DA: - movs r2, 0x2E - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _080CE3E8 - adds r0, r1, 0 - bl move_anim_8072740 -_080CE3E8: - pop {r0} - bx r0 - thumb_func_end sub_80CE3B0 - - thumb_func_start sub_80CE3EC -sub_80CE3EC: @ 80CE3EC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - lsls r0, 24 - lsrs r7, r0, 24 - movs r4, 0 - str r4, [sp] - str r4, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_80791A8 - mov r8, r0 - ldr r0, _080CE4BC @ =0x0000ffff - mov r1, r8 - ands r1, r0 - mov r8, r1 - ldr r0, _080CE4C0 @ =gTasks - mov r9, r0 - lsls r5, r7, 2 - adds r5, r7 - lsls r5, 3 - adds r6, r5, r0 - strh r4, [r6, 0x8] - strh r4, [r6, 0xA] - strh r4, [r6, 0xC] - strh r1, [r6, 0xE] - strh r4, [r6, 0x10] - strh r4, [r6, 0x12] - strh r4, [r6, 0x14] - movs r0, 0xD - strh r0, [r6, 0x16] - movs r0, 0xE - strh r0, [r6, 0x18] - movs r0, 0xF - strh r0, [r6, 0x1A] - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0x1 - movs r3, 0x1 - bl sub_80792C0 - mov r10, r0 - mov r1, r8 - orrs r1, r0 - mov r8, r1 - movs r0, 0x8 - add r9, r0 - add r5, r9 - adds r0, r5, 0 - adds r0, 0x1C - adds r5, 0x1E - adds r1, r5, 0 - mov r2, r8 - bl sub_8079BF4 - ldr r0, _080CE4C4 @ =0x000027d2 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - movs r4, 0x80 - lsls r4, 9 - adds r1, r4, 0 - lsls r1, r0 - mov r0, r10 - orrs r0, r1 - mov r10, r0 - ldr r0, _080CE4C8 @ =0x000027d3 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0 - mov r1, r10 - orrs r4, r1 - ldr r0, _080CE4CC @ =0x00007fbb - str r0, [sp] - adds r0, r4, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _080CE4D0 @ =sub_80CE4D4 - str r1, [r6] - adds r0, r7, 0 - bl _call_via_r1 - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080CE4BC: .4byte 0x0000ffff -_080CE4C0: .4byte gTasks -_080CE4C4: .4byte 0x000027d2 -_080CE4C8: .4byte 0x000027d3 -_080CE4CC: .4byte 0x00007fbb -_080CE4D0: .4byte sub_80CE4D4 - thumb_func_end sub_80CE3EC - thumb_func_start sub_80CE4D4 sub_80CE4D4: @ 80CE4D4 push {r4-r7,lr} diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 77bcff3e9..0146a551d 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -25,6 +25,8 @@ extern s8 gUnknown_083D680C[11][3]; extern u16 gUnknown_083D6984[]; extern s8 gUnknown_083D6DDC[4][2]; extern u8 gObjectBankIDs[]; +extern u8 gNoOfAllBanks; +extern u8 gHealthboxIDs[]; void sub_80CA768(struct Sprite* sprite); void sub_80CA8B4(struct Sprite* sprite); @@ -74,6 +76,9 @@ 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); s16 sub_80CC338(struct Sprite* sprite); @@ -90,6 +95,9 @@ void sub_807861C(struct Sprite *sprite); void sub_8078650(struct Sprite *sprite); void sub_8078394(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); @@ -99,6 +107,7 @@ void sub_8078FDC(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 ro 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); void move_anim_8074EE0(struct Sprite *sprite); bool8 sub_8078718(struct Sprite *sprite); @@ -109,6 +118,7 @@ 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_80CC358(struct Task* task, u8 taskId); @@ -3049,4 +3059,162 @@ void sub_80CE09C(struct Sprite* sprite) } if ((u16)gBattleAnimArgs[7] == 0xFFFF) move_anim_8072740(sprite); +} + +void sub_80CE108(u8 taskId) +{ + if (gTasks[taskId].data[2] == 1) + { + gBattleAnimArgs[7] = 0xFFFF; + gTasks[taskId].data[2]++; + } + else if (gTasks[taskId].data[2] == 2) + { + DestroyAnimVisualTask(taskId); + } + else + { + if (++gTasks[taskId].data[0] == 4) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1]++; + REG_BLDALPHA = (gTasks[taskId].data[1] << 8) | (16 - gTasks[taskId].data[1]); + if (gTasks[taskId].data[1] == 16) + gTasks[taskId].data[2]++; + } + } +} + +void sub_80CE17C(struct Sprite* sprite) +{ + sub_8078764(sprite, 0); + sprite->animPaused = 1; + sprite->data0 = gBattleAnimArgs[2]; + sprite->callback = sub_80CE1AC; +} + +void sub_80CE1AC(struct Sprite* sprite) +{ + if (sprite->data0) + sprite->data0--; + else + { + sprite->animPaused = 0; + sprite->data0 = 30; + sprite->data2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, move_anim_8072740); + } +} + +void sub_80CE210(u8 taskId) +{ + if (++gTasks[taskId].data[0] == 4) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1]++; + REG_BLDALPHA = gTasks[taskId].data[1] | ((16 - gTasks[taskId].data[1]) << 8); + if (gTasks[taskId].data[1] == 16) + DestroyAnimVisualTask(taskId); + } +} + +void unref_sub_80CE260(u8 taskId) +{ + u8 i; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleAnimArgs[0] == 1 && GetBankSide(i) == 0) + sub_8043DB0(gHealthboxIDs[i]); + if (gBattleAnimArgs[1] == 1 && GetBankSide(i) == 1) + sub_8043DB0(gHealthboxIDs[i]); + } + DestroyAnimVisualTask(taskId); +} + +void unref_sub_80CE2D4(u8 taskId) +{ + u8 i; + for (i = 0; i < gNoOfAllBanks; i++) + sub_8043DFC(gHealthboxIDs[i]); + DestroyAnimVisualTask(taskId); +} + +void sub_80CE30C(struct Sprite* sprite) +{ + if (IsContest()) + { + sprite->pos1.x = 0x30; + sprite->pos1.y = 0x28; + } + else + { + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1]; + } + sprite->oam.shape = 0; + sprite->oam.size = 3; + sprite->data0 = 0; + sprite->callback = sub_80CE354; +} + +void sub_80CE354(struct Sprite* sprite) +{ + if (sprite->data0) + move_anim_8072740(sprite); +} + +void sub_80CE36C(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1]; + sprite->data0 = 0; + sprite->data1 = 0; + sprite->data2 = 0; + sprite->data3 = 0; + sprite->data4 = 1; + sprite->callback = sub_80CE3B0; +} + +void sub_80CE3B0(struct Sprite* sprite) +{ + if (++sprite->data1 > 1) + { + sprite->data1 = 0; + if (sprite->data2 <= 0x77) + { + sprite->pos1.y++; + sprite->data2++; + } + } + if (sprite->data0) + move_anim_8072740(sprite); +} + +void sub_80CE3EC(u8 taskId) +{ + int a = sub_80791A8(1, 0, 0, 0, 0, 0, 0) & 0xFFFF; + int b; + int c; + int d; + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = a; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[6] = 0; + gTasks[taskId].data[7] = 13; + gTasks[taskId].data[8] = 14; + gTasks[taskId].data[9] = 15; + b = sub_80792C0(1, 1, 1, 1); + c = a | b; + sub_8079BF4(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c); + b = b | (0x10000 << IndexOfSpritePaletteTag(0x27D2)); + d = IndexOfSpritePaletteTag(0x27D3); + BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 0x10, 32699); + gTasks[taskId].func = sub_80CE4D4; + sub_80CE4D4(taskId); + }
\ No newline at end of file |