diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-05-05 19:03:19 -0700 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-05-05 19:03:19 -0700 |
commit | e2ea3d44cad21c699e9958586d3282c5e66ecfe1 (patch) | |
tree | 2146caaa2140fcb773b46278b6aeec6903f92ea9 | |
parent | f2b6948bb2ddfa2781290e3ca75ab5de93caccba (diff) |
Start decompiling battle_anim_812C144
-rw-r--r-- | asm/battle_anim_812C144.s | 295 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rwxr-xr-x | src/battle/battle_anim_812C144.c | 110 |
3 files changed, 111 insertions, 295 deletions
diff --git a/asm/battle_anim_812C144.s b/asm/battle_anim_812C144.s index e49873ee6..46eeab67c 100644 --- a/asm/battle_anim_812C144.s +++ b/asm/battle_anim_812C144.s @@ -4,301 +4,6 @@ .syntax unified .text - - thumb_func_start sub_812C144 -sub_812C144: @ 812C144 - push {lr} - adds r2, r0, 0 - ldr r1, _0812C168 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r3, [r2, 0x20] - adds r0, r3 - strh r0, [r2, 0x20] - ldrh r0, [r1, 0x2] - ldrh r3, [r2, 0x22] - adds r0, r3 - strh r0, [r2, 0x22] - movs r3, 0x6 - ldrsh r0, [r1, r3] - cmp r0, 0 - bne _0812C16C - ldrh r0, [r1, 0x4] - b _0812C170 - .align 2, 0 -_0812C168: .4byte gBattleAnimArgs -_0812C16C: - ldrh r0, [r1, 0x4] - negs r0, r0 -_0812C170: - strh r0, [r2, 0x2E] - ldrh r0, [r1, 0x8] - strh r0, [r2, 0x30] - ldr r0, _0812C180 @ =sub_812C184 - str r0, [r2, 0x1C] - pop {r0} - bx r0 - .align 2, 0 -_0812C180: .4byte sub_812C184 - thumb_func_end sub_812C144 - - thumb_func_start sub_812C184 -sub_812C184: @ 812C184 - push {lr} - adds r3, r0, 0 - movs r1, 0x30 - ldrsh r0, [r3, r1] - cmp r0, 0 - ble _0812C1C4 - ldrh r1, [r3, 0x32] - lsls r0, r1, 16 - asrs r0, 24 - strh r0, [r3, 0x24] - ldrh r0, [r3, 0x2E] - adds r1, r0 - strh r1, [r3, 0x32] - movs r0, 0x3E - adds r0, r3 - mov r12, r0 - ldrb r2, [r0] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - ldrh r0, [r3, 0x30] - subs r0, 0x1 - strh r0, [r3, 0x30] - b _0812C1CA -_0812C1C4: - adds r0, r3, 0 - bl DestroyAnimSprite -_0812C1CA: - pop {r0} - bx r0 - thumb_func_end sub_812C184 - - thumb_func_start sub_812C1D0 -sub_812C1D0: @ 812C1D0 - push {r4-r6,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r6, _0812C21C @ =gAnimBankTarget - ldrb r0, [r6] - movs r1, 0x2 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 8 - movs r0, 0x80 - lsls r0, 12 - adds r4, r0 - asrs r4, 16 - ldrb r0, [r6] - movs r1, 0x3 - bl GetBattlerSpriteCoord - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 8 - movs r0, 0x80 - lsls r0, 12 - adds r1, r0 - asrs r1, 16 - adds r0, r4, 0 - movs r2, 0 - bl sub_8046234 - adds r0, r5, 0 - bl DestroyAnimVisualTask - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0812C21C: .4byte gAnimBankTarget - thumb_func_end sub_812C1D0 - - thumb_func_start sub_812C220 -sub_812C220: @ 812C220 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x5A - strh r0, [r4, 0x2E] - ldr r0, _0812C258 @ =WaitAnimForDuration - str r0, [r4, 0x1C] - movs r0, 0x7 - strh r0, [r4, 0x30] - ldr r1, _0812C25C @ =sub_812C268 - adds r0, r4, 0 - bl StoreSpriteCallbackInData - ldr r1, _0812C260 @ =REG_BLDCNT - movs r2, 0xFD - lsls r2, 6 - adds r0, r2, 0 - strh r0, [r1] - ldr r2, _0812C264 @ =REG_BLDALPHA - ldrh r1, [r4, 0x30] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r0, r1 - strh r0, [r2] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812C258: .4byte WaitAnimForDuration -_0812C25C: .4byte sub_812C268 -_0812C260: .4byte REG_BLDCNT -_0812C264: .4byte REG_BLDALPHA - thumb_func_end sub_812C220 - - thumb_func_start sub_812C268 -sub_812C268: @ 812C268 - push {lr} - adds r3, r0, 0 - ldr r2, _0812C29C @ =REG_BLDALPHA - ldrh r1, [r3, 0x30] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r0, r1 - strh r0, [r2] - ldrh r0, [r3, 0x30] - subs r0, 0x1 - strh r0, [r3, 0x30] - lsls r0, 16 - cmp r0, 0 - bge _0812C296 - adds r2, r3, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _0812C2A0 @ =sub_812C2A4 - str r0, [r3, 0x1C] -_0812C296: - pop {r0} - bx r0 - .align 2, 0 -_0812C29C: .4byte REG_BLDALPHA -_0812C2A0: .4byte sub_812C2A4 - thumb_func_end sub_812C268 - - thumb_func_start sub_812C2A4 -sub_812C2A4: @ 812C2A4 - push {lr} - ldr r1, _0812C2B8 @ =REG_BLDCNT - movs r2, 0 - strh r2, [r1] - adds r1, 0x2 - strh r2, [r1] - bl DestroyAnimSprite - pop {r0} - bx r0 - .align 2, 0 -_0812C2B8: .4byte REG_BLDCNT - thumb_func_end sub_812C2A4 - - thumb_func_start sub_812C2BC -sub_812C2BC: @ 812C2BC - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - ldr r4, _0812C348 @ =gAnimBankTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r7, r0, 0 - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r6, r0, 0 - adds r0, r5, 0 - movs r1, 0x1 - bl sub_8078764 - ldrh r0, [r5, 0x20] - subs r0, r7 - lsls r0, 16 - asrs r0, 16 - ldrh r1, [r5, 0x22] - subs r1, r6 - lsls r1, 16 - asrs r1, 16 - bl ArcTan2Neg - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 23 - adds r0, r1 - lsrs r4, r0, 16 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _0812C31A - movs r1, 0x80 - lsls r1, 7 - adds r0, r4, r1 - lsls r0, 16 - lsrs r4, r0, 16 -_0812C31A: - movs r3, 0x80 - lsls r3, 1 - str r4, [sp] - adds r0, r5, 0 - movs r1, 0 - adds r2, r3, 0 - bl sub_8078FDC - ldr r0, _0812C34C @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - strh r0, [r5, 0x2E] - strh r7, [r5, 0x32] - strh r6, [r5, 0x36] - ldr r0, _0812C350 @ =StartTranslateAnimSpriteByDeltas - str r0, [r5, 0x1C] - ldr r1, _0812C354 @ =DestroyAnimSprite - adds r0, r5, 0 - bl StoreSpriteCallbackInData - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812C348: .4byte gAnimBankTarget -_0812C34C: .4byte gBattleAnimArgs -_0812C350: .4byte StartTranslateAnimSpriteByDeltas -_0812C354: .4byte DestroyAnimSprite - thumb_func_end sub_812C2BC - - thumb_func_start sub_812C358 -sub_812C358: @ 812C358 - ldr r2, _0812C378 @ =REG_BLDCNT - movs r3, 0xFD - lsls r3, 6 - adds r1, r3, 0 - strh r1, [r2] - adds r2, 0x2 - movs r3, 0x80 - lsls r3, 5 - adds r1, r3, 0 - strh r1, [r2] - movs r1, 0x4 - strh r1, [r0, 0x2E] - ldr r1, _0812C37C @ =sub_812C380 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_0812C378: .4byte REG_BLDCNT -_0812C37C: .4byte sub_812C380 - thumb_func_end sub_812C358 thumb_func_start sub_812C380 sub_812C380: @ 812C380 diff --git a/ld_script.txt b/ld_script.txt index 52f66c537..869e61e5b 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -354,6 +354,7 @@ SECTIONS { src/battle/anim/sfx.o(.text); src/battle/battle_controller_safari.o(.text); src/fldeff_sweetscent.o(.text); + src/battle/battle_anim_812C144.o(.text); asm/battle_anim_812C144.o(.text); src/learn_move.o(.text); src/fldeff_softboiled.o(.text); diff --git a/src/battle/battle_anim_812C144.c b/src/battle/battle_anim_812C144.c new file mode 100755 index 000000000..4714f5b09 --- /dev/null +++ b/src/battle/battle_anim_812C144.c @@ -0,0 +1,110 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +extern u8 sub_8046234(s16 x, s16 y, u8 a3); + +static void sub_812C184(struct Sprite *sprite); +static void sub_812C268(struct Sprite *sprite); +static void sub_812C2A4(struct Sprite *sprite); +extern void sub_812C380(struct Sprite *sprite); + +void sub_812C144(struct Sprite *sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + + if (gBattleAnimArgs[3] == 0) + sprite->data[0] = gBattleAnimArgs[2]; + else + sprite->data[0] = -gBattleAnimArgs[2]; + + sprite->data[1] = gBattleAnimArgs[4]; + sprite->callback = sub_812C184; +} + +static void sub_812C184(struct Sprite *sprite) +{ + if (sprite->data[1] > 0) + { + sprite->pos2.x = sprite->data[2] >> 8; + sprite->data[2] += sprite->data[0]; + sprite->invisible ^= 1; + sprite->data[1]--; + } + else + { + DestroyAnimSprite(sprite); + } +} + +void sub_812C1D0(u8 taskId) +{ + sub_8046234( + GetBattlerSpriteCoord(gAnimBankTarget, 2) + 8, + GetBattlerSpriteCoord(gAnimBankTarget, 3) + 8, + 0); + DestroyAnimVisualTask(taskId); + +} + +void sub_812C220(struct Sprite *sprite) +{ + sprite->data[0] = 90; + sprite->callback = WaitAnimForDuration; + sprite->data[1] = 7; + StoreSpriteCallbackInData(sprite, sub_812C268); + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = ((16 - sprite->data[1]) << 8) | sprite->data[1]; +} + +static void sub_812C268(struct Sprite *sprite) +{ + REG_BLDALPHA = ((16 - sprite->data[1]) << 8) | sprite->data[1]; + if (--sprite->data[1] < 0) + { + sprite->invisible = 1; + sprite->callback = sub_812C2A4; + } +} + +static void sub_812C2A4(struct Sprite *sprite) +{ + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimSprite(sprite); +} + +void sub_812C2BC(struct Sprite *sprite) +{ + u16 rotation; + u8 x = GetBattlerSpriteCoord(gAnimBankTarget, 2); + u8 y = GetBattlerSpriteCoord(gAnimBankTarget, 3); + + sub_8078764(sprite, 1); + + rotation = ArcTan2Neg(sprite->pos1.x - x, sprite->pos1.y - y); + rotation += 0x6000; + if (IsContest()) + rotation += 0x4000; + + sub_8078FDC(sprite, 0, 0x100, 0x100, rotation); + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = x; + sprite->data[4] = y; + sprite->callback = StartTranslateAnimSpriteByDeltas; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +void sub_812C358(struct Sprite *sprite) +{ + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = 0x1000; + sprite->data[0] = 4; + sprite->callback = sub_812C380; +} |