diff options
author | U-Maria-PC\Maria <throwawaygolem@gmail.com> | 2017-08-17 17:37:40 -0400 |
---|---|---|
committer | U-Maria-PC\Maria <throwawaygolem@gmail.com> | 2017-08-17 17:37:40 -0400 |
commit | ed37dbec0e603f775c579fc092125f1b3df2b73f (patch) | |
tree | 4a432729694794866a9696ea5e385a8f26b8b0bc /src | |
parent | 94af636b20601dd4e1088ca345c472eddb321579 (diff) |
decompiled up to sub_80CDD20
Diffstat (limited to 'src')
-rwxr-xr-x | src/battle_anim_80CA710.c | 602 |
1 files changed, 172 insertions, 430 deletions
diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index b7a45e37c..b037fd347 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -69,6 +69,7 @@ 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_80CDEC0(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -531,127 +532,36 @@ void sub_80CAFD0(struct Sprite* sprite) sprite->callback = sub_80CB09C; } -#ifdef NONMATCHING void sub_80CB09C(struct Sprite* sprite) { - s16 c = 0; + bool8 c = FALSE; s16 a = sprite->data0; s16 b = sprite->data7; + s16 r0; + sprite->data0 = 1; sub_8078718(sprite); + r0 = sprite->data7; sprite->data0 = a; - if (b > 0xC8 && sprite->data7 <= 0x37 && sprite->oam.affineParam == 0) - sprite->oam.affineParam++; + if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0) + sprite->oam.affineParam++; if (sprite->oam.affineParam != 0 && sprite->data0 != 0) { sprite->invisible ^= 1; sprite->oam.affineParam++; - if(sprite->oam.affineParam == 0x1E) - { - c = 1; - } - } - if((sprite->pos1.x + sprite->pos2.x + 16) <= 0x110 && (sprite->pos1.y + sprite->pos2.y) <= 0xA0 && (sprite->pos1.y + sprite->pos2.y) < -16) - { - c = 1; + if (sprite->oam.affineParam == 0x1E) + c = TRUE; } - if (!c) move_anim_8072740(sprite); -} -#else -__attribute__((naked)) -void sub_80CB09C(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - adds r6, r0, 0\n\ - movs r7, 0\n\ - ldrh r5, [r6, 0x2E]\n\ - ldrh r4, [r6, 0x3C]\n\ - movs r0, 0x1\n\ - strh r0, [r6, 0x2E]\n\ - adds r0, r6, 0\n\ - bl sub_8078718\n\ - ldrh r0, [r6, 0x3C]\n\ - strh r5, [r6, 0x2E]\n\ - lsls r4, 16\n\ - asrs r4, 16\n\ - cmp r4, 0xC8\n\ - ble _080CB0CE\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x37\n\ - bgt _080CB0CE\n\ - ldrh r0, [r6, 0x6]\n\ - cmp r0, 0\n\ - bne _080CB0D4\n\ - adds r0, 0x1\n\ - strh r0, [r6, 0x6]\n\ -_080CB0CE:\n\ - ldrh r0, [r6, 0x6]\n\ - cmp r0, 0\n\ - beq _080CB106\n\ -_080CB0D4:\n\ - movs r1, 0x2E\n\ - ldrsh r0, [r6, r1]\n\ - cmp r0, 0\n\ - beq _080CB106\n\ - adds r3, r6, 0\n\ - adds r3, 0x3E\n\ - ldrb r2, [r3]\n\ - lsls r0, r2, 29\n\ - lsrs r0, 31\n\ - movs r1, 0x1\n\ - eors r1, r0\n\ - lsls r1, 2\n\ - movs r0, 0x5\n\ - negs r0, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r3]\n\ - ldrh r0, [r6, 0x6]\n\ - adds r0, 0x1\n\ - strh r0, [r6, 0x6]\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x1E\n\ - bne _080CB106\n\ - movs r7, 0x1\n\ -_080CB106:\n\ - movs r2, 0x20\n\ - ldrsh r0, [r6, r2]\n\ - movs r2, 0x24\n\ - ldrsh r1, [r6, r2]\n\ - adds r0, r1\n\ - adds r0, 0x10\n\ - movs r1, 0x88\n\ - lsls r1, 1\n\ - cmp r0, r1\n\ - bhi _080CB130\n\ - movs r0, 0x22\n\ - ldrsh r1, [r6, r0]\n\ - movs r2, 0x26\n\ - ldrsh r0, [r6, r2]\n\ - adds r1, r0\n\ - cmp r1, 0xA0\n\ - bgt _080CB130\n\ - movs r0, 0x10\n\ - negs r0, r0\n\ - cmp r1, r0\n\ - bge _080CB132\n\ -_080CB130:\n\ - movs r7, 0x1\n\ -_080CB132:\n\ - cmp r7, 0\n\ - beq _080CB13C\n\ - adds r0, r6, 0\n\ - bl move_anim_8072740\n\ -_080CB13C:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); + + if (sprite->pos1.x + sprite->pos2.x > 0x100 + || sprite->pos1.x + sprite->pos2.x < -16 + || sprite->pos1.y + sprite->pos2.y > 0xA0 + || sprite->pos1.y + sprite->pos2.y < -16) + c = TRUE; + + if (c) + move_anim_8072740(sprite); } -#endif void sub_80CB144(struct Sprite* sprite) { @@ -785,110 +695,29 @@ void sub_80CB3A8(u8 taskId) } } -#ifdef NONMATCHING void sub_80CB438(u8 taskId) { - if((u16)gBattleAnimArgs[7] == 0xFFFF) + if ((u16)gBattleAnimArgs[7] == 0xFFFF) { - if(!gTasks[taskId].data[0]) + if (gTasks[taskId].data[0] == 0) { u8 spriteId = obj_id_for_side_relative_to_move(1); sub_8078F40(spriteId); gSprites[spriteId].pos2.x = 0; gSprites[spriteId].pos2.y = 0; gTasks[taskId].data[0]++; - } - else - { - gTasks[taskId].data[0]++; - + return; } } - else if(gTasks[taskId].data[0]) + else { - gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] == 0) + return; } - if(gTasks[taskId].data[0] == 3) DestroyAnimVisualTask(taskId); -} -#else -__attribute__((naked)) -void sub_80CB438(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - ldr r0, _080CB484 @ =gBattleAnimArgs\n\ - ldrh r1, [r0, 0xE]\n\ - ldr r0, _080CB488 @ =0x0000ffff\n\ - cmp r1, r0\n\ - bne _080CB494\n\ - ldr r0, _080CB48C @ =gTasks\n\ - lsls r2, r3, 2\n\ - adds r1, r2, r3\n\ - lsls r1, 3\n\ - adds r6, r1, r0\n\ - movs r1, 0x8\n\ - ldrsh r5, [r6, r1]\n\ - adds r4, r0, 0\n\ - cmp r5, 0\n\ - bne _080CB4A8\n\ - movs r0, 0x1\n\ - bl obj_id_for_side_relative_to_move\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - adds r0, r4, 0\n\ - bl sub_8078F40\n\ - ldr r1, _080CB490 @ =gSprites\n\ - lsls r0, r4, 4\n\ - adds r0, r4\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - strh r5, [r0, 0x24]\n\ - strh r5, [r0, 0x26]\n\ - ldrh r0, [r6, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r6, 0x8]\n\ - b _080CB4C2\n\ - .align 2, 0\n\ -_080CB484: .4byte gBattleAnimArgs\n\ -_080CB488: .4byte 0x0000ffff\n\ -_080CB48C: .4byte gTasks\n\ -_080CB490: .4byte gSprites\n\ -_080CB494:\n\ - ldr r1, _080CB4C8 @ =gTasks\n\ - lsls r2, r3, 2\n\ - adds r0, r2, r3\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - movs r4, 0x8\n\ - ldrsh r0, [r0, r4]\n\ - adds r4, r1, 0\n\ - cmp r0, 0\n\ - beq _080CB4C2\n\ -_080CB4A8:\n\ - adds r1, r2, r3\n\ - lsls r1, 3\n\ - adds r1, r4\n\ - ldrh r0, [r1, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r1, 0x8]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x3\n\ - bne _080CB4C2\n\ - adds r0, r3, 0\n\ - bl DestroyAnimVisualTask\n\ -_080CB4C2:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CB4C8: .4byte gTasks\n\ - .syntax divided\n"); + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] == 3) + DestroyAnimVisualTask(taskId); } -#endif void sub_80CB4CC(struct Sprite* sprite) { @@ -944,17 +773,17 @@ void sub_80CB59C(struct Sprite* sprite) sprite->callback = sub_80CB710; } -#ifdef NONMATCHING -void sub_80CB620(struct Sprite* sprite) +void sub_80CB620(struct Sprite *sprite) { - u8 p1 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); - u8 p2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); - u8 e1 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); - u8 e2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + s16 p1 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + s16 p2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + s16 e1 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + s16 e2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + e1 -= p1; e2 -= p2; - sprite->pos1.x = p1 + ((gBattleAnimArgs[0] * e1) / 100); - sprite->pos1.y = p2 + ((gBattleAnimArgs[0] * e2) / 100); + sprite->pos1.x = p1 + e1 * gBattleAnimArgs[0] / 100; + sprite->pos1.y = p2 + e2 * gBattleAnimArgs[0] / 100; sprite->pos2.x = gBattleAnimArgs[1]; sprite->pos2.y = gBattleAnimArgs[2]; sprite->subpriority = gBattleAnimArgs[3] + 30; @@ -966,122 +795,6 @@ void sub_80CB620(struct Sprite* sprite) gUnknown_03000728[2] = e1; gUnknown_03000728[3] = e2; } -#else -__attribute__((naked)) -void sub_80CB620(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - mov r6, r10\n\ - mov r5, r9\n\ - mov r4, r8\n\ - push {r4-r6}\n\ - sub sp, 0x4\n\ - mov r9, r0\n\ - ldr r4, _080CB6FC @ =gBattleAnimPlayerMonIndex\n\ - ldrb r0, [r4]\n\ - movs r1, 0x2\n\ - bl sub_8077ABC\n\ - adds r5, r0, 0\n\ - lsls r5, 24\n\ - lsrs r5, 24\n\ - ldrb r0, [r4]\n\ - movs r1, 0x3\n\ - bl sub_8077ABC\n\ - mov r8, r0\n\ - mov r0, r8\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - ldr r6, _080CB700 @ =gBattleAnimEnemyMonIndex\n\ - ldrb r0, [r6]\n\ - movs r1, 0x2\n\ - bl sub_8077ABC\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - ldrb r0, [r6]\n\ - movs r1, 0x3\n\ - bl sub_8077ABC\n\ - adds r2, r0, 0\n\ - lsls r2, 24\n\ - subs r4, r5\n\ - lsls r4, 16\n\ - lsrs r2, 24\n\ - mov r1, r8\n\ - subs r2, r1\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - lsrs r3, r4, 16\n\ - mov r10, r3\n\ - asrs r4, 16\n\ - ldr r6, _080CB704 @ =gBattleAnimArgs\n\ - movs r1, 0\n\ - ldrsh r0, [r6, r1]\n\ - muls r0, r4\n\ - movs r1, 0x64\n\ - str r2, [sp]\n\ - bl __divsi3\n\ - adds r5, r0\n\ - mov r3, r9\n\ - strh r5, [r3, 0x20]\n\ - ldr r2, [sp]\n\ - lsls r0, r2, 16\n\ - asrs r0, 16\n\ - movs r3, 0\n\ - ldrsh r1, [r6, r3]\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - add r8, r0\n\ - mov r1, r8\n\ - mov r0, r9\n\ - strh r1, [r0, 0x22]\n\ - ldrh r0, [r6, 0x2]\n\ - mov r3, r9\n\ - strh r0, [r3, 0x24]\n\ - ldrh r0, [r6, 0x4]\n\ - strh r0, [r3, 0x26]\n\ - ldrb r0, [r6, 0x6]\n\ - adds r0, 0x1E\n\ - mov r1, r9\n\ - adds r1, 0x43\n\ - strb r0, [r1]\n\ - ldrb r1, [r6, 0x8]\n\ - mov r0, r9\n\ - bl StartSpriteAnim\n\ - ldrh r0, [r6, 0xA]\n\ - mov r1, r9\n\ - strh r0, [r1, 0x32]\n\ - ldr r0, _080CB708 @ =sub_80CB710\n\ - str r0, [r1, 0x1C]\n\ - ldr r1, _080CB70C @ =gUnknown_03000728\n\ - mov r3, r9\n\ - ldrh r0, [r3, 0x20]\n\ - strh r0, [r1]\n\ - ldrh r0, [r3, 0x22]\n\ - strh r0, [r1, 0x2]\n\ - mov r0, r10\n\ - strh r0, [r1, 0x4]\n\ - ldr r2, [sp]\n\ - strh r2, [r1, 0x6]\n\ - add sp, 0x4\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CB6FC: .4byte gBattleAnimPlayerMonIndex\n\ -_080CB700: .4byte gBattleAnimEnemyMonIndex\n\ -_080CB704: .4byte gBattleAnimArgs\n\ -_080CB708: .4byte sub_80CB710\n\ -_080CB70C: .4byte gUnknown_03000728\n\ - .syntax divided\n"); -} -#endif void sub_80CB710(struct Sprite* sprite) { @@ -1121,29 +834,30 @@ void sub_80CB7EC(struct Sprite* sprite, s16 c) #ifdef NONMATCHING bool8 sub_80CB814(struct Sprite* sprite) { - s32 a = sprite->data5 >> 8; - s16 d = sprite->data5; - s16 b = sprite->data6 >> 8; - s16 e = sprite->data6; - s16 c = sprite->data7 >> 8; - s16 f = c & 0xFF; - if(!b) - { - b = ~32; - } - else if(b == 255) - { - b = 0x110; - } - sprite->pos1.x = ((b - a) * f / a ) + (((e - d) * f) / a); - sprite->pos2.y = d; - f++; - if(f != a) - { - sprite->data7 = (f << 8) | c; - return FALSE; - } - return TRUE; + s32 r10 = (u8)(sprite->data5 >> 8); + s32 r9 = (u8)sprite->data5; + s32 r2 = (u8)(sprite->data6 >> 8); + s16 r4 = (u8)sprite->data6; + u16 r6 = sprite->data7 >> 8; + s16 r3 = sprite->data7 & 0xFF; + s32 var1; + s32 var2; + + if (r2 == 0) + r2 = -32; + else if (r2 == 255) + r2 = 0x110; + + r4 -= r9; + var1 = (r2 - r10) * r3 / r6; + var2 = r4 * r3 / r6; + sprite->pos1.x = var1 + r10; + sprite->pos2.y = var2 + r9; + r3++; + if ((u16)r3 == r6) + return TRUE; + sprite->data7 = r3 | (r6 << 8); + return FALSE; } #else __attribute__((naked)) @@ -2195,7 +1909,6 @@ void sub_80CC474(struct Sprite* sprite) sprite->callback = sub_80CC580; } -// why did you make me use gotos WHY void sub_80CC580(struct Sprite* sprite) { int a = sprite->data7; @@ -2205,18 +1918,15 @@ void sub_80CC580(struct Sprite* sprite) sprite->data0 = (sprite->data3 * a) & 0xFF; if (sprite->data4 == 0) { - if (sprite->pos2.x + sprite->pos1.x <= 0xF7) return; - else goto END; + if (sprite->pos2.x + sprite->pos1.x <= 0xF7) + return; } - else if (sprite->data4 != 0 && sprite->pos2.x + sprite->pos1.x <= -16) + else { - goto END; + if (sprite->pos2.x + sprite->pos1.x > -16) + return; } - else - return; - - END: - move_anim_8074EE0(sprite); + move_anim_8074EE0(sprite); } void sub_80CC5F8(u8 taskId) @@ -3275,92 +2985,124 @@ void sub_80CDAC8(u8 taskId) } } -/* void sub_80CDB60(u8 taskId) +void sub_80CDB60(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; switch(task->data[2]) { - case 0: - if(task->data[3]) - { - task->data[4] += task->data[5]; - gSprites[task->data[0]].pos2.x = task->data[4]; - task->data[3]--; - } - else - { - task->data[3] = 8; - task->data[4] = 0; - task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0; - sub_8078E70(task->data[0], 0); - task->data[2]++; - } - break; - case 1: - if (task->data[3]) + case 0: + if(task->data[3]) + { + task->data[4] += task->data[5]; + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3]--; + } + else + { + task->data[3] = 8; + task->data[4] = 0; + task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0; + sub_8078E70(task->data[0], 0); + task->data[2]++; + } + break; + case 1: + if (task->data[3]) + { + task->data[4] += task->data[5]; + obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); + sub_8078F9C(task->data[0]); + task->data[3]--; + } + else + { + task->data[3] = 8; + task->data[4] = gSprites[task->data[0]].pos2.x; + task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2; + task->data[6] = 1; + task->data[2]++; + } + break; + case 2: + if (task->data[3]) + { + if (task->data[6]) { - task->data[4] += task->data[5]; - obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); - sub_8078F9C(task->data[0]); - task->data[3]--; + task->data[6]--; } else { - task->data[3] = 8; - task->data[4] = gSprites[task->data[0]].pos2.x; - task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2; - task->data[6] = 1; - task->data[2]++; - } - break; - case 2: - if (task->data[3]) - { - - if (task->data[6]) - { - task->data[6]--; - } - else if (task->data[3] & 1) - { + if (task->data[3] & 1) gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5]; - task->data[6] = 1; - task->data[3]--; - } else - { gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5]; - task->data[6] = 1; - task->data[3]--; - } - } - else - { - gSprites[task->data[0]].pos2.x = task->data[4]; - task->data[3] = 12; - task->data[2]++; - } - break; - case 3: - if (task->data[3]) - task->data[3]--; - else - { - task->data[3] = 3; - task->data[4] = gSprites[task->data[0]].pos2.x; - task->data[5] = (task->data[1]) ? 8 : -8; - task->data[2]++; - } - break; - case 4: - if (task->data[3]) - { - task->data[4] += task->data[5]; - gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[6] = 1; task->data[3]--; } - else - DestroyAnimVisualTask(taskId); - break; + } + else + { + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3] = 12; + task->data[2]++; + } + break; + case 3: + if (task->data[3]) + { + task->data[3]--; + } + else + { + task->data[3] = 3; + task->data[4] = gSprites[task->data[0]].pos2.x; + task->data[5] = (task->data[1] == 0) ? 8 : -8; + task->data[2]++; + } + break; + case 4: + if (task->data[3]) + { + task->data[4] += task->data[5]; + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3]--; + } + else + { + DestroyAnimVisualTask(taskId); + } + break; } +} + +void sub_80CDD20(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (task->data[3]) + { + task->data[4] -= task->data[5]; + obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); + sub_8078F9C(task->data[0]); + task->data[3]--; + } + else + { + sub_8078F40(task->data[0]); + DestroyAnimVisualTask(taskId); + } +} + +/* void sub_80CDD74(struct Sprite* sprite) +{ + u8 bank; + if (!gBattleAnimArgs[0]) + bank = gBattleAnimPlayerMonIndex; + else + bank = gBattleAnimEnemyMonIndex; + sprite->pos1.x = sub_8077ABC(bank, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[2]; + sprite->data0 = 0; + sprite->data1 = 0; + oamt_set_x3A_32(sprite, sub_80CDEC0); + sprite->callback = sub_8078600; } */ |