diff options
author | U-Maria-PC\Maria <throwawaygolem@gmail.com> | 2017-08-05 16:47:38 -0400 |
---|---|---|
committer | U-Maria-PC\Maria <throwawaygolem@gmail.com> | 2017-08-05 16:47:38 -0400 |
commit | 02384ce88a28fd1e55a0d1d55fc1468e884560f3 (patch) | |
tree | 5d5167bf1fffb941fb478f2a791d3d44df7698e8 /src | |
parent | 9f625c9ec3129d9908d7a9498df58542bd66676a (diff) |
decompiled up to sub_80CB7EC
Diffstat (limited to 'src')
-rwxr-xr-x | src/battle_anim_80CA710.c | 233 |
1 files changed, 232 insertions, 1 deletions
diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 191280e7b..50bdb3005 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -14,6 +14,7 @@ extern s16 gBattleAnimArgs[8]; extern u8 gBattleAnimPlayerMonIndex; extern u8 gBattleAnimEnemyMonIndex; extern struct SpriteTemplate gSpriteTemplate_83D631C; +extern s16 gUnknown_03000728[]; void sub_80CA768(struct Sprite* sprite); void sub_80CA8B4(struct Sprite* sprite); @@ -30,6 +31,7 @@ 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_80787B0(struct Sprite *sprite, u8 a2); void sub_8078764(struct Sprite *sprite, u8 a2); @@ -37,6 +39,7 @@ 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_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4); u8 sub_8079ED4(u8 slot); @@ -828,4 +831,232 @@ _080CB4C2:\n\ _080CB4C8: .4byte gTasks\n\ .syntax divided\n"); } -#endif
\ No newline at end of file +#endif + +void sub_80CB4CC(struct Sprite* sprite) +{ + switch(sprite->data0) + { + case 0: + { + if(GetBankSide(gBattleAnimEnemyMonIndex) == 0) + { + s16 a = gBattleAnimArgs[0]; + gBattleAnimArgs[0] = -a; + } + sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimEnemyMonIndex, 1) + gBattleAnimArgs[1]; + sprite->invisible = 1; + sprite->data0++; + break; + } + case 1: + { + sprite->invisible = 0; + if(sprite->affineAnimEnded) + { + ChangeSpriteAffineAnim(sprite, 1); + sprite->data0 = 25; + sprite->data2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + sprite->callback = sub_8078CC0; + oamt_set_x3A_32(sprite, move_anim_8072740); + break; + } + } + } +} + +void sub_80CB59C(struct Sprite* sprite) +{ + if(!sprite->data0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 1); + sprite->pos2.x = gBattleAnimArgs[0]; + sprite->pos2.y = gBattleAnimArgs[1]; + sprite->subpriority = gBattleAnimArgs[2] + 30; + StartSpriteAnim(sprite, gBattleAnimArgs[3]); + sprite->data2 = gBattleAnimArgs[4]; + sprite->data0++; + if((sprite->pos1.y + sprite->pos2.y) > 120) + { + sprite->pos1.y += -120 + (sprite->pos2.y + sprite->pos1.y); + } + } + sprite->callback = sub_80CB710; +} + +#ifdef NONMATCHING +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); + e1 -= p1; + e2 -= p2; + sprite->pos1.x = p1 + ((gBattleAnimArgs[0] * e1) / 100); + sprite->pos1.y = p2 + ((gBattleAnimArgs[0] * e2) / 100); + sprite->pos2.x = gBattleAnimArgs[1]; + sprite->pos2.y = gBattleAnimArgs[2]; + sprite->subpriority = gBattleAnimArgs[3] + 30; + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + sprite->data2 = gBattleAnimArgs[5]; + sprite->callback = sub_80CB710; + gUnknown_03000728[0] = sprite->pos1.x; + gUnknown_03000728[1] = sprite->pos1.y; + 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) +{ + if(++sprite->data0 > (sprite->data2 - 10)) + { + sprite->invisible = sprite->data0 % 2; + } + if(sprite->data0 > sprite->data2) move_anim_8072740(sprite); +} + +void sub_80CB768(struct Sprite* sprite) +{ + if(!sprite->data0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 1) + gBattleAnimArgs[1]; + sprite->data1 = gBattleAnimArgs[2]; + 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); +} + +void sub_80CB7EC(struct Sprite* sprite, s16 c) +{ + s32 a = (sprite->pos1.x * 256) | sprite->pos1.y; + s32 b = (sprite->data6 * 256) | sprite->data7; + c *= 256; + sprite->data5 = a; + sprite->data6 = b; + sprite->data7 = c; +}
\ No newline at end of file |