diff options
-rw-r--r-- | asm/battle_anim_80CA710.s | 400 | ||||
-rwxr-xr-x | src/battle_anim_80CA710.c | 119 |
2 files changed, 119 insertions, 400 deletions
diff --git a/asm/battle_anim_80CA710.s b/asm/battle_anim_80CA710.s index 074153a75..37345f41a 100644 --- a/asm/battle_anim_80CA710.s +++ b/asm/battle_anim_80CA710.s @@ -6,398 +6,6 @@ .text - thumb_func_start sub_80CF814 -sub_80CF814: @ 80CF814 - push {r4,lr} - adds r2, r0, 0 - movs r0, 0x3C - ldrsh r1, [r2, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _080CF844 @ =gTasks - adds r4, r0, r1 - movs r3, 0x2E - ldrsh r1, [r2, r3] - movs r3, 0x12 - ldrsh r0, [r4, r3] - cmp r1, r0 - ble _080CF848 - ldrh r0, [r2, 0x34] - ldrh r1, [r2, 0x38] - adds r0, r1 - strh r0, [r2, 0x38] - ldrh r0, [r2, 0x36] - ldrh r3, [r2, 0x3A] - adds r0, r3 - b _080CF856 - .align 2, 0 -_080CF844: .4byte gTasks -_080CF848: - ldrh r0, [r2, 0x38] - ldrh r1, [r2, 0x34] - subs r0, r1 - strh r0, [r2, 0x38] - ldrh r0, [r2, 0x3A] - ldrh r1, [r2, 0x36] - subs r0, r1 -_080CF856: - strh r0, [r2, 0x3A] - ldrh r0, [r2, 0x38] - ldrh r1, [r2, 0x30] - adds r3, r0, r1 - strh r3, [r2, 0x30] - ldrh r0, [r2, 0x3A] - ldrh r1, [r2, 0x32] - adds r0, r1 - strh r0, [r2, 0x32] - ldrh r1, [r4, 0x16] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080CF87A - lsls r0, r3, 16 - lsrs r0, 24 - negs r0, r0 - b _080CF87E -_080CF87A: - lsls r0, r3, 16 - lsrs r0, 24 -_080CF87E: - strh r0, [r2, 0x24] - ldrh r1, [r4, 0x18] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080CF892 - ldrh r0, [r2, 0x32] - lsrs r0, 8 - negs r0, r0 - b _080CF896 -_080CF892: - ldrh r0, [r2, 0x32] - lsrs r0, 8 -_080CF896: - strh r0, [r2, 0x26] - ldrh r0, [r2, 0x2E] - subs r1, r0, 0x1 - strh r1, [r2, 0x2E] - lsls r0, 16 - cmp r0, 0 - bgt _080CF8AC - movs r0, 0x1E - strh r0, [r2, 0x2E] - ldr r0, _080CF8B4 @ =sub_80CF7E0 - str r0, [r2, 0x1C] -_080CF8AC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CF8B4: .4byte sub_80CF7E0 - thumb_func_end sub_80CF814 - - thumb_func_start sub_80CF8B8 -sub_80CF8B8: @ 80CF8B8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r0, 0 - movs r0, 0x3C - ldrsh r1, [r7, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _080CF8FC @ =gTasks - adds r6, r0, r1 - ldrh r2, [r6, 0x16] - movs r1, 0x2 - negs r1, r1 - adds r0, r1, 0 - ands r0, r2 - ldrh r3, [r7, 0x30] - adds r2, r0, r3 - strh r2, [r7, 0x30] - ldrh r0, [r6, 0x18] - ands r1, r0 - ldrh r0, [r7, 0x32] - adds r1, r0 - strh r1, [r7, 0x32] - ldrh r1, [r6, 0x16] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080CF900 - lsls r0, r2, 16 - lsrs r0, 24 - negs r0, r0 - b _080CF904 - .align 2, 0 -_080CF8FC: .4byte gTasks -_080CF900: - lsls r0, r2, 16 - lsrs r0, 24 -_080CF904: - strh r0, [r7, 0x24] - ldrh r1, [r6, 0x18] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080CF918 - ldrh r0, [r7, 0x32] - lsrs r0, 8 - negs r0, r0 - b _080CF91C -_080CF918: - ldrh r0, [r7, 0x32] - lsrs r0, 8 -_080CF91C: - strh r0, [r7, 0x26] - ldrh r0, [r7, 0x2E] - subs r1, r0, 0x1 - strh r1, [r7, 0x2E] - lsls r0, 16 - cmp r0, 0 - bgt _080CF9E8 - movs r4, 0 - movs r0, 0x8 - strh r0, [r7, 0x2E] - movs r0, 0x4 - strh r0, [r6, 0x12] - movs r0, 0x80 - lsls r0, 5 - bl sub_81174E0 - lsls r0, 16 - lsrs r5, r0, 16 - ldrh r0, [r7, 0x24] - ldrh r1, [r7, 0x20] - adds r2, r0, r1 - strh r2, [r7, 0x20] - ldrh r0, [r7, 0x26] - ldrh r3, [r7, 0x22] - adds r0, r3 - strh r0, [r7, 0x22] - strh r4, [r7, 0x26] - strh r4, [r7, 0x24] - ldrh r3, [r6, 0x1E] - movs r0, 0x1E - ldrsh r1, [r6, r0] - lsls r0, r2, 16 - asrs r0, 16 - cmp r1, r0 - blt _080CF966 - subs r0, r3, r2 - b _080CF968 -_080CF966: - subs r0, r2, r3 -_080CF968: - lsls r0, 24 - lsrs r4, r0, 16 - ldrh r3, [r6, 0x20] - movs r0, 0x20 - ldrsh r1, [r6, r0] - ldrh r2, [r7, 0x22] - movs r6, 0x22 - ldrsh r0, [r7, r6] - cmp r1, r0 - blt _080CF980 - subs r0, r3, r2 - b _080CF982 -_080CF980: - subs r0, r2, r3 -_080CF982: - lsls r0, 24 - lsrs r0, 16 - mov r8, r0 - movs r0, 0 - strh r0, [r7, 0x32] - strh r0, [r7, 0x30] - strh r0, [r7, 0x3A] - strh r0, [r7, 0x38] - lsls r0, r4, 16 - asrs r0, 16 - lsls r5, 16 - asrs r5, 16 - adds r1, r5, 0 - bl sub_81174C4 - adds r4, r0, 0 - lsls r4, 16 - asrs r4, 16 - movs r6, 0xE0 - lsls r6, 1 - adds r0, r6, 0 - bl sub_81174E0 - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - bl sub_81174C4 - strh r0, [r7, 0x34] - mov r1, r8 - lsls r0, r1, 16 - asrs r0, 16 - adds r1, r5, 0 - bl sub_81174C4 - adds r4, r0, 0 - lsls r4, 16 - asrs r4, 16 - adds r0, r6, 0 - bl sub_81174E0 - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - bl sub_81174C4 - strh r0, [r7, 0x36] - ldr r0, _080CF9F4 @ =sub_80CF814 - str r0, [r7, 0x1C] -_080CF9E8: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080CF9F4: .4byte sub_80CF814 - thumb_func_end sub_80CF8B8 - - thumb_func_start sub_80CF9F8 -sub_80CF9F8: @ 80CF9F8 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _080CFA1C @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - movs r1, 0xA - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080CFA16 - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080CFA16: - pop {r0} - bx r0 - .align 2, 0 -_080CFA1C: .4byte gTasks - thumb_func_end sub_80CF9F8 - - thumb_func_start sub_80CFA20 -sub_80CFA20: @ 80CFA20 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r1, _080CFA74 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r5, r0, r1 - ldrh r0, [r5, 0x8] - subs r1, r0, 0x1 - strh r1, [r5, 0x8] - lsls r0, 16 - cmp r0, 0 - bgt _080CFAF4 - ldr r0, _080CFA78 @ =gSpriteTemplate_83D74BC - movs r2, 0x1A - ldrsh r1, [r5, r2] - movs r3, 0x1C - ldrsh r2, [r5, r3] - ldrb r3, [r5, 0xC] - ldrb r4, [r5, 0xA] - subs r3, r4 - lsls r3, 24 - lsrs r3, 24 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - lsls r0, 4 - add r0, r12 - lsls r0, 2 - ldr r1, _080CFA7C @ =gSprites - adds r6, r0, r1 - movs r1, 0x10 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _080CFA80 - cmp r0, 0x2 - beq _080CFA96 - b _080CFAA4 - .align 2, 0 -_080CFA74: .4byte gTasks -_080CFA78: .4byte gSpriteTemplate_83D74BC -_080CFA7C: .4byte gSprites -_080CFA80: - ldrb r2, [r6, 0x3] - lsls r1, r2, 26 - lsrs r1, 27 - movs r0, 0x18 - orrs r1, r0 - lsls r1, 1 - subs r0, 0x57 - ands r0, r2 - orrs r0, r1 - strb r0, [r6, 0x3] - b _080CFAA4 -_080CFA96: - ldrb r0, [r6, 0x3] - movs r1, 0x3F - negs r1, r1 - ands r1, r0 - movs r0, 0x10 - orrs r1, r0 - strb r1, [r6, 0x3] -_080CFAA4: - ldr r3, _080CFAFC @ =gTasks - lsls r2, r7, 2 - adds r2, r7 - lsls r2, 3 - adds r4, r2, r3 - ldrh r0, [r4, 0x12] - ldrh r1, [r4, 0x14] - subs r0, r1 - strh r0, [r6, 0x2E] - strh r7, [r6, 0x3C] - movs r1, 0xA - ldrsh r0, [r4, r1] - adds r0, 0xD - lsls r0, 1 - adds r0, r2 - adds r3, 0x8 - adds r0, r3 - mov r2, r12 - strh r2, [r0] - ldrh r0, [r4, 0xE] - strh r0, [r4, 0x8] - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - movs r0, 0x3F - negs r0, r0 - bl sub_8076F98 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0x9A - bl PlaySE12WithPanning - movs r3, 0xA - ldrsh r0, [r4, r3] - cmp r0, 0x2 - ble _080CFAF4 - ldr r0, _080CFB00 @ =sub_80CF9F8 - str r0, [r4] -_080CFAF4: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080CFAFC: .4byte gTasks -_080CFB00: .4byte sub_80CF9F8 - thumb_func_end sub_80CFA20 - thumb_func_start sub_80CFB04 sub_80CFB04: @ 80CFB04 push {r4-r7,lr} @@ -580,9 +188,9 @@ _080CFC56: mov r1, r10 strh r0, [r1] mov r0, sp - ldrh r2, [r0] + ldrh r2, [r0] @loads sp1 into r2 movs r3, 0 - ldrsh r0, [r0, r3] + ldrsh r0, [r0, r3] @loads sp1 into r0 as well adds r1, r6, 0 cmp r0, r1 blt _080CFC9C @@ -626,9 +234,9 @@ _080CFC9E: ldrh r0, [r5, 0x4] strh r0, [r6, 0x16] mov r2, r10 - ldrh r1, [r2] + ldrh r1, [r2] @loads sp2 into r1 movs r3, 0 - ldrsh r0, [r2, r3] + ldrsh r0, [r2, r3] @and into r0 mov r4, r9 cmp r0, r4 blt _080CFD1C diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 15c67e09f..74f28c83e 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -15,11 +15,13 @@ struct __attribute__((packed)) Some3ByteStruct { u8 unkArr[3]; }; +extern u8 gBanksBySide[]; extern s16 gBattleAnimArgs[8]; extern u8 gBattleAnimPlayerMonIndex; extern u8 gBattleAnimEnemyMonIndex; extern struct SpriteTemplate gSpriteTemplate_83D631C; extern struct SpriteTemplate gSpriteTemplate_83D6884; +extern struct SpriteTemplate gSpriteTemplate_83D74BC; extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8; extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8; extern s16 gUnknown_03000728[]; @@ -30,6 +32,7 @@ extern u8 gObjectBankIDs[]; extern u8 gNoOfAllBanks; extern u8 gHealthboxIDs[]; extern u16 gUnknown_083D712C[4][6]; +extern u16 gBattleTypeFlags; void sub_80CA768(struct Sprite* sprite); void sub_80CA8B4(struct Sprite* sprite); @@ -130,6 +133,8 @@ 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 move_anim_8074EE0(struct Sprite *sprite); bool8 sub_8078718(struct Sprite *sprite); @@ -4260,11 +4265,117 @@ _080CF7DC: .4byte move_anim_8072740\n\ void sub_80CF7E0(struct Sprite* sprite) { - s16 a = sprite->data0; - sprite->data0--; - if (a <= 0) + if (sprite->data0-- <= 0) { gTasks[sprite->data7].data[1]--; DestroySprite(sprite); } -}
\ No newline at end of file +} + +void sub_80CF814(struct Sprite* sprite) +{ + struct Task* task = &gTasks[sprite->data7]; + if (sprite->data0 > task->data[5]) + { + sprite->data5 += sprite->data3; + sprite->data6 += sprite->data4; + } + else + { + 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; + sprite->callback = sub_80CF7E0; + } +} + +//air cutter +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]); + 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 = 8; + task->data[5] = 4; + a = sub_81174E0(0x1000); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + if (task->data[11] >= sprite->pos1.x) + 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; + sprite->data5 = 0; + sprite->data3 = sub_81174C4(sub_81174C4(b, a), sub_81174E0(0x1C0)); + sprite->data4 = sub_81174C4(sub_81174C4(c, a), sub_81174E0(0x1C0)); + sprite->callback = sub_80CF814; + } +} + +void sub_80CF9F8(u8 taskId) +{ + if (gTasks[taskId].data[1] == 0) + DestroyAnimVisualTask(taskId); +} + +void sub_80CFA20(u8 taskId) +{ + if (gTasks[taskId].data[0]-- <= 0) + { + u8 spriteId; + struct Sprite* sprite; + spriteId = CreateSprite(&gSpriteTemplate_83D74BC, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]); + sprite = &gSprites[spriteId]; + switch (gTasks[taskId].data[4]) + { + 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; + gTasks[taskId].data[0] = gTasks[taskId].data[3]; + gTasks[taskId].data[1]++; + PlaySE12WithPanning(0x9A, sub_8076F98(-0x3F)); + if (gTasks[taskId].data[1] > 2) + gTasks[taskId].func = sub_80CF9F8; + } +} |