summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-06-21 21:19:45 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-06-21 21:19:45 -0400
commit374ea9ec6261281ce86327cbcd543ca7d8283bdf (patch)
tree2123739f9fb7b602ac891c59f3242097738b1510
parentd7b5abb2c8ed62aabf8fe57c6ef03c17640f1144 (diff)
battle_anim_mon_movement: through sub_809946C
-rw-r--r--asm/battle_anim_mon_movement.s283
-rw-r--r--include/battle_anim.h1
-rw-r--r--src/battle_anim_mon_movement.c92
3 files changed, 93 insertions, 283 deletions
diff --git a/asm/battle_anim_mon_movement.s b/asm/battle_anim_mon_movement.s
index 352f34682..d067e1ff9 100644
--- a/asm/battle_anim_mon_movement.s
+++ b/asm/battle_anim_mon_movement.s
@@ -5,289 +5,6 @@
.text
- thumb_func_start sub_8099270
-sub_8099270: @ 8099270
- push {r4-r6,lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x3C]
- lsls r1, r0, 24
- lsrs r4, r1, 24
- adds r5, r4, 0
- lsls r0, 16
- asrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _080992AC @ =gSprites
- adds r3, r1, r0
- ldrh r0, [r2, 0x2E]
- movs r6, 0x2E
- ldrsh r1, [r2, r6]
- cmp r1, 0
- bne _080992B0
- cmp r4, 0x1
- bhi _0809929A
- strh r1, [r3, 0x24]
-_0809929A:
- cmp r5, 0x2
- beq _080992A2
- cmp r5, 0
- bne _080992A4
-_080992A2:
- strh r1, [r3, 0x26]
-_080992A4:
- adds r0, r2, 0
- bl DestroyAnimSprite
- b _080992DA
- .align 2, 0
-_080992AC: .4byte gSprites
-_080992B0:
- subs r0, 0x1
- strh r0, [r2, 0x2E]
- ldrh r1, [r2, 0x30]
- ldrh r0, [r2, 0x34]
- adds r1, r0
- strh r1, [r2, 0x34]
- ldrh r0, [r2, 0x32]
- ldrh r4, [r2, 0x36]
- adds r0, r4
- strh r0, [r2, 0x36]
- lsls r1, 16
- asrs r1, 24
- ldrh r6, [r2, 0x38]
- adds r1, r6
- strh r1, [r3, 0x24]
- ldrh r0, [r2, 0x36]
- lsls r0, 16
- asrs r0, 24
- ldrh r2, [r2, 0x3A]
- adds r0, r2
- strh r0, [r3, 0x26]
-_080992DA:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8099270
-
- thumb_func_start sub_80992E0
-sub_80992E0: @ 80992E0
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r0, _080992F4 @ =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080992FC
- ldr r0, _080992F8 @ =gBattleAnimAttacker
- b _080992FE
- .align 2, 0
-_080992F4: .4byte gBattleAnimArgs
-_080992F8: .4byte gBattleAnimAttacker
-_080992FC:
- ldr r0, _0809937C @ =gBattleAnimTarget
-_080992FE:
- ldrb r2, [r0]
- ldr r0, _08099380 @ =gBattlerSpriteIds
- adds r0, r2, r0
- ldrb r6, [r0]
- adds r0, r2, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _08099328
- ldr r1, _08099384 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x2]
- negs r0, r0
- strh r0, [r1, 0x2]
- movs r2, 0x6
- ldrsh r0, [r1, r2]
- cmp r0, 0x1
- bne _08099328
- ldrh r0, [r1, 0x4]
- negs r0, r0
- strh r0, [r1, 0x4]
-_08099328:
- ldr r2, _08099384 @ =gBattleAnimArgs
- ldrh r0, [r2, 0x8]
- movs r4, 0
- strh r0, [r5, 0x2E]
- ldr r0, _08099388 @ =gSprites
- lsls r1, r6, 4
- adds r1, r6
- lsls r1, 2
- adds r1, r0
- ldrh r0, [r1, 0x20]
- strh r0, [r5, 0x30]
- ldrh r0, [r2, 0x2]
- ldrh r3, [r1, 0x20]
- adds r0, r3
- strh r0, [r5, 0x32]
- ldrh r0, [r1, 0x22]
- strh r0, [r5, 0x34]
- ldrh r0, [r2, 0x4]
- ldrh r1, [r1, 0x22]
- adds r0, r1
- strh r0, [r5, 0x36]
- adds r0, r5, 0
- bl sub_80754B8
- strh r4, [r5, 0x34]
- strh r4, [r5, 0x36]
- strh r6, [r5, 0x38]
- adds r2, r5, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0809938C @ =DestroyAnimSprite
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- ldr r0, _08099390 @ =sub_8074E14
- str r0, [r5, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0809937C: .4byte gBattleAnimTarget
-_08099380: .4byte gBattlerSpriteIds
-_08099384: .4byte gBattleAnimArgs
-_08099388: .4byte gSprites
-_0809938C: .4byte DestroyAnimSprite
-_08099390: .4byte sub_8074E14
- thumb_func_end sub_80992E0
-
- thumb_func_start sub_8099394
-sub_8099394: @ 8099394
- push {r4-r7,lr}
- adds r6, r0, 0
- adds r2, r6, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _080993B4 @ =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080993BC
- ldr r0, _080993B8 @ =gBattleAnimAttacker
- b _080993BE
- .align 2, 0
-_080993B4: .4byte gBattleAnimArgs
-_080993B8: .4byte gBattleAnimAttacker
-_080993BC:
- ldr r0, _0809943C @ =gBattleAnimTarget
-_080993BE:
- ldrb r1, [r0]
- ldr r0, _08099440 @ =gBattlerSpriteIds
- adds r0, r1, r0
- ldrb r7, [r0]
- adds r0, r1, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080993E8
- ldr r1, _08099444 @ =gBattleAnimArgs
- ldrh r0, [r1, 0x2]
- negs r0, r0
- strh r0, [r1, 0x2]
- movs r2, 0x6
- ldrsh r0, [r1, r2]
- cmp r0, 0x1
- bne _080993E8
- ldrh r0, [r1, 0x4]
- negs r0, r0
- strh r0, [r1, 0x4]
-_080993E8:
- ldr r5, _08099444 @ =gBattleAnimArgs
- ldrh r0, [r5, 0x8]
- strh r0, [r6, 0x2E]
- ldr r0, _08099448 @ =gSprites
- lsls r4, r7, 4
- adds r4, r7
- lsls r4, 2
- adds r4, r0
- ldrh r0, [r4, 0x24]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r6, 0x30]
- ldrh r1, [r5, 0x2]
- adds r0, r1
- strh r0, [r6, 0x32]
- ldrh r0, [r4, 0x26]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- strh r0, [r6, 0x34]
- ldrh r1, [r5, 0x4]
- adds r0, r1
- strh r0, [r6, 0x36]
- adds r0, r6, 0
- bl sub_80754B8
- ldrh r0, [r4, 0x24]
- lsls r0, 8
- strh r0, [r6, 0x34]
- ldrh r0, [r4, 0x26]
- lsls r0, 8
- strh r0, [r6, 0x36]
- strh r7, [r6, 0x38]
- ldrh r0, [r5, 0xA]
- strh r0, [r6, 0x3A]
- lsls r0, 16
- cmp r0, 0
- bne _08099450
- ldr r1, _0809944C @ =DestroyAnimSprite
- adds r0, r6, 0
- bl StoreSpriteCallbackInData6
- b _08099458
- .align 2, 0
-_0809943C: .4byte gBattleAnimTarget
-_08099440: .4byte gBattlerSpriteIds
-_08099444: .4byte gBattleAnimArgs
-_08099448: .4byte gSprites
-_0809944C: .4byte DestroyAnimSprite
-_08099450:
- ldr r1, _08099464 @ =sub_809946C
- adds r0, r6, 0
- bl StoreSpriteCallbackInData6
-_08099458:
- ldr r0, _08099468 @ =sub_8074E14
- str r0, [r6, 0x1C]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08099464: .4byte sub_809946C
-_08099468: .4byte sub_8074E14
- thumb_func_end sub_8099394
-
- thumb_func_start sub_809946C
-sub_809946C: @ 809946C
- push {r4,lr}
- ldr r4, _08099498 @ =gSprites
- movs r1, 0x38
- ldrsh r2, [r0, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- movs r3, 0
- strh r3, [r1, 0x24]
- movs r1, 0x38
- ldrsh r2, [r0, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- strh r3, [r1, 0x26]
- bl DestroyAnimSprite
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08099498: .4byte gSprites
- thumb_func_end sub_809946C
-
thumb_func_start sub_809949C
sub_809949C: @ 809949C
push {r4-r7,lr}
diff --git a/include/battle_anim.h b/include/battle_anim.h
index 15e40c9f0..60e66e085 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -125,6 +125,7 @@ u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 bank, u32 arg2, u8 ballId);
// battle_anim_mons.s
void sub_8074DC4(struct Sprite * sprite);
+void sub_8074E14(struct Sprite * sprite);
void sub_80754B8(struct Sprite * sprite);
#endif // GUARD_BATTLE_ANIM_H
diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c
index 57f4c32c2..84e7395af 100644
--- a/src/battle_anim_mon_movement.c
+++ b/src/battle_anim_mon_movement.c
@@ -17,6 +17,7 @@ void sub_80991B4(struct Sprite * sprite);
void sub_8099270(struct Sprite * sprite);
void sub_80992E0(struct Sprite * sprite);
void sub_8099394(struct Sprite * sprite);
+void sub_809946C(struct Sprite * sprite);
const struct SpriteTemplate gUnknown_83D4E4C[] = {
{
@@ -355,3 +356,94 @@ void sub_80991B4(struct Sprite * sprite)
sprite->data[7] |= spriteId << 8;
sprite->callback = sub_8099270;
}
+
+void sub_8099270(struct Sprite * sprite)
+{
+ u8 data7 = sprite->data[7];
+ struct Sprite *otherSprite = &gSprites[sprite->data[7] >> 8];
+ if (sprite->data[0] == 0)
+ {
+ if (data7 == 1 || data7 == 0)
+ otherSprite->pos2.x = 0;
+ if (data7 == 2 || data7 == 0)
+ otherSprite->pos2.y = 0;
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ sprite->data[0]--;
+ sprite->data[3] += sprite->data[1];
+ sprite->data[4] += sprite->data[2];
+ otherSprite->pos2.x = (sprite->data[3] >> 8) + sprite->data[5];
+ otherSprite->pos2.y = (sprite->data[4] >> 8) + sprite->data[6];
+ }
+}
+
+void sub_80992E0(struct Sprite * sprite)
+{
+ u8 battlerId;
+ u8 spriteId;
+ if (gBattleAnimArgs[0] == 0)
+ battlerId = gBattleAnimAttacker;
+ else
+ battlerId = gBattleAnimTarget;
+ spriteId = gBattlerSpriteIds[battlerId];
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+ {
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ if (gBattleAnimArgs[3] == 1)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ }
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = gSprites[spriteId].pos1.x;
+ sprite->data[2] = gSprites[spriteId].pos1.x + gBattleAnimArgs[1];
+ sprite->data[3] = gSprites[spriteId].pos1.y;
+ sprite->data[4] = gSprites[spriteId].pos1.y + gBattleAnimArgs[2];
+ sub_80754B8(sprite);
+ sprite->data[3] = 0;
+ sprite->data[4] = 0;
+ sprite->data[5] = spriteId;
+ sprite->invisible = TRUE;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = sub_8074E14;
+}
+
+void sub_8099394(struct Sprite * sprite)
+{
+ u8 battlerId;
+ u8 spriteId;
+ sprite->invisible = TRUE;
+ if (gBattleAnimArgs[0] == 0)
+ battlerId = gBattleAnimAttacker;
+ else
+ battlerId = gBattleAnimTarget;
+ spriteId = gBattlerSpriteIds[battlerId];
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+ {
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ if (gBattleAnimArgs[3] == 1)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ }
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x;
+ sprite->data[2] = sprite->data[1] + gBattleAnimArgs[1];
+ sprite->data[3] = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y;
+ sprite->data[4] = sprite->data[3] + gBattleAnimArgs[2];
+ sub_80754B8(sprite);
+ sprite->data[3] = gSprites[spriteId].pos2.x << 8;
+ sprite->data[4] = gSprites[spriteId].pos2.y << 8;
+ sprite->data[5] = spriteId;
+ sprite->data[6] = gBattleAnimArgs[5];
+ if (gBattleAnimArgs[5] == 0)
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ else
+ StoreSpriteCallbackInData6(sprite, sub_809946C);
+ sprite->callback = sub_8074E14;
+}
+
+void sub_809946C(struct Sprite * sprite)
+{
+ gSprites[sprite->data[5]].pos2.x = 0;
+ gSprites[sprite->data[5]].pos2.y = 0;
+ DestroyAnimSprite(sprite);
+}