battle_anim_mon_movement: through sub_80991B4

This commit is contained in:
PikalaxALT
2019-06-21 16:53:47 -04:00
parent 9217a26399
commit 95b5a2753e
3 changed files with 88 additions and 252 deletions
-249
View File
@@ -5,255 +5,6 @@
.text
thumb_func_start sub_809907C
sub_809907C: @ 809907C
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
ldr r0, _080990A4 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
beq _08099098
ldr r1, _080990A8 @ =gBattleAnimArgs
ldrh r0, [r1, 0x2]
negs r0, r0
strh r0, [r1, 0x2]
_08099098:
adds r0, r4, 0
bl sub_8098F84
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080990A4: .4byte gBattleAnimAttacker
_080990A8: .4byte gBattleAnimArgs
thumb_func_end sub_809907C
thumb_func_start sub_80990AC
sub_80990AC: @ 80990AC
push {r4,lr}
adds r4, r0, 0
adds r2, r4, 0
adds r2, 0x3E
ldrb r0, [r2]
movs r1, 0x4
orrs r0, r1
strb r0, [r2]
ldr r0, _080990D4 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
beq _080990DC
ldr r1, _080990D8 @ =gBattleAnimArgs
ldrh r0, [r1, 0x2]
negs r0, r0
b _080990E0
.align 2, 0
_080990D4: .4byte gBattleAnimAttacker
_080990D8: .4byte gBattleAnimArgs
_080990DC:
ldr r1, _0809910C @ =gBattleAnimArgs
ldrh r0, [r1, 0x2]
_080990E0:
strh r0, [r4, 0x30]
ldrh r2, [r1]
movs r0, 0
strh r2, [r4, 0x2E]
strh r0, [r4, 0x32]
ldr r1, _08099110 @ =gBattlerSpriteIds
ldr r0, _08099114 @ =gBattleAnimAttacker
ldrb r0, [r0]
adds r0, r1
ldrb r0, [r0]
strh r0, [r4, 0x34]
strh r2, [r4, 0x36]
ldr r1, _08099118 @ =sub_8099120
adds r0, r4, 0
bl StoreSpriteCallbackInData6
ldr r0, _0809911C @ =sub_8074DC4
str r0, [r4, 0x1C]
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0809910C: .4byte gBattleAnimArgs
_08099110: .4byte gBattlerSpriteIds
_08099114: .4byte gBattleAnimAttacker
_08099118: .4byte sub_8099120
_0809911C: .4byte sub_8074DC4
thumb_func_end sub_80990AC
thumb_func_start sub_8099120
sub_8099120: @ 8099120
push {lr}
ldrh r1, [r0, 0x36]
strh r1, [r0, 0x2E]
ldrh r1, [r0, 0x30]
negs r1, r1
strh r1, [r0, 0x30]
ldr r1, _0809913C @ =sub_8074DC4
str r1, [r0, 0x1C]
ldr r1, _08099140 @ =DestroyAnimSprite
bl StoreSpriteCallbackInData6
pop {r0}
bx r0
.align 2, 0
_0809913C: .4byte sub_8074DC4
_08099140: .4byte DestroyAnimSprite
thumb_func_end sub_8099120
thumb_func_start sub_8099144
sub_8099144: @ 8099144
push {r4,r5,lr}
adds r4, r0, 0
adds r2, r4, 0
adds r2, 0x3E
ldrb r0, [r2]
movs r1, 0x4
orrs r0, r1
strb r0, [r2]
ldr r5, _08099184 @ =gBattleAnimArgs
ldrb r0, [r5, 0x4]
bl GetAnimBankSpriteId
lsls r0, 24
lsrs r0, 24
ldrh r2, [r5]
movs r1, 0
strh r2, [r4, 0x2E]
strh r1, [r4, 0x30]
ldrh r1, [r5, 0x2]
strh r1, [r4, 0x32]
strh r0, [r4, 0x34]
strh r2, [r4, 0x36]
ldr r1, _08099188 @ =sub_8099190
adds r0, r4, 0
bl StoreSpriteCallbackInData6
ldr r0, _0809918C @ =sub_8074DC4
str r0, [r4, 0x1C]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_08099184: .4byte gBattleAnimArgs
_08099188: .4byte sub_8099190
_0809918C: .4byte sub_8074DC4
thumb_func_end sub_8099144
thumb_func_start sub_8099190
sub_8099190: @ 8099190
push {lr}
ldrh r1, [r0, 0x36]
strh r1, [r0, 0x2E]
ldrh r1, [r0, 0x32]
negs r1, r1
strh r1, [r0, 0x32]
ldr r1, _080991AC @ =sub_8074DC4
str r1, [r0, 0x1C]
ldr r1, _080991B0 @ =DestroyAnimSprite
bl StoreSpriteCallbackInData6
pop {r0}
bx r0
.align 2, 0
_080991AC: .4byte sub_8074DC4
_080991B0: .4byte DestroyAnimSprite
thumb_func_end sub_8099190
thumb_func_start sub_80991B4
sub_80991B4: @ 80991B4
push {r4-r7,lr}
sub sp, 0x4
adds r6, r0, 0
ldr r0, _080991CC @ =gBattleAnimArgs
movs r1, 0
ldrsh r0, [r0, r1]
cmp r0, 0
bne _080991D8
ldr r1, _080991D0 @ =gBattlerSpriteIds
ldr r0, _080991D4 @ =gBattleAnimAttacker
b _080991DC
.align 2, 0
_080991CC: .4byte gBattleAnimArgs
_080991D0: .4byte gBattlerSpriteIds
_080991D4: .4byte gBattleAnimAttacker
_080991D8:
ldr r1, _0809923C @ =gBattlerSpriteIds
ldr r0, _08099240 @ =gBattleAnimTarget
_080991DC:
ldrb r0, [r0]
adds r0, r1
ldrb r7, [r0]
ldr r5, _08099244 @ =gBattleAnimArgs
ldrh r0, [r5, 0x4]
movs r3, 0
strh r0, [r6, 0x2E]
ldr r0, _08099248 @ =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 r0, [r4, 0x20]
strh r0, [r6, 0x32]
ldrh r0, [r4, 0x26]
ldrh r1, [r4, 0x22]
adds r0, r1
strh r0, [r6, 0x34]
ldrh r0, [r4, 0x22]
strh r0, [r6, 0x36]
adds r0, r6, 0
str r3, [sp]
bl sub_80754B8
ldr r3, [sp]
strh r3, [r6, 0x34]
strh r3, [r6, 0x36]
ldrh r0, [r4, 0x24]
strh r0, [r6, 0x38]
ldrh r0, [r4, 0x26]
strh r0, [r6, 0x3A]
adds r2, r6, 0
adds r2, 0x3E
ldrb r0, [r2]
movs r1, 0x4
orrs r0, r1
strb r0, [r2]
movs r1, 0x2
ldrsh r0, [r5, r1]
cmp r0, 0x1
bne _0809924C
strh r3, [r6, 0x32]
b _08099252
.align 2, 0
_0809923C: .4byte gBattlerSpriteIds
_08099240: .4byte gBattleAnimTarget
_08099244: .4byte gBattleAnimArgs
_08099248: .4byte gSprites
_0809924C:
cmp r0, 0x2
bne _08099252
strh r3, [r6, 0x30]
_08099252:
ldr r0, _08099268 @ =gBattleAnimArgs
ldrh r1, [r0, 0x2]
lsls r0, r7, 8
orrs r0, r1
strh r0, [r6, 0x3C]
ldr r0, _0809926C @ =sub_8099270
str r0, [r6, 0x1C]
add sp, 0x4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08099268: .4byte gBattleAnimArgs
_0809926C: .4byte sub_8099270
thumb_func_end sub_80991B4
thumb_func_start sub_8099270
sub_8099270: @ 8099270
push {r4-r6,lr}
+6 -3
View File
@@ -59,12 +59,11 @@ extern u8 gAnimFriendship;
extern u16 gWeatherMoveAnim;
extern s16 gBattleAnimArgs[ANIM_ARGS_COUNT];
extern u8 gAnimMoveTurn;
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u16 gAnimSpeciesByBanks[BATTLE_BANKS_COUNT];
extern u8 gUnknown_02038440;
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
extern u8 gBattleAnimAttacker;
void ClearBattleAnimationVars(void);
void DoMoveAnim(u16 move);
@@ -124,4 +123,8 @@ u8 ItemIdToBallId(u16 itemId);
u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId);
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 bank, u32 arg2, u8 ballId);
// battle_anim_mons.s
void sub_8074DC4(struct Sprite * sprite);
void sub_80754B8(struct Sprite * sprite);
#endif // GUARD_BATTLE_ANIM_H
+82
View File
@@ -10,8 +10,11 @@ void sub_8098D54(u8 taskId);
void sub_8098EF0(u8 taskId);
void sub_8099004(u8 taskId);
void sub_80990AC(struct Sprite * sprite);
void sub_8099120(struct Sprite * sprite);
void sub_8099144(struct Sprite * sprite);
void sub_8099190(struct Sprite * sprite);
void sub_80991B4(struct Sprite * sprite);
void sub_8099270(struct Sprite * sprite);
void sub_80992E0(struct Sprite * sprite);
void sub_8099394(struct Sprite * sprite);
@@ -273,3 +276,82 @@ void sub_8099004(u8 taskId)
DestroyAnimVisualTask(taskId);
}
}
void sub_809907C(u8 taskId)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
sub_8098F84(taskId);
}
void sub_80990AC(struct Sprite * sprite)
{
sprite->invisible = TRUE;
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
sprite->data[1] = -gBattleAnimArgs[1];
else
sprite->data[1] = gBattleAnimArgs[1];
sprite->data[0] = gBattleAnimArgs[0];
sprite->data[2] = 0;
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
sprite->data[4] = gBattleAnimArgs[0];
StoreSpriteCallbackInData6(sprite, sub_8099120);
sprite->callback = sub_8074DC4;
}
void sub_8099120(struct Sprite * sprite)
{
sprite->data[0] = sprite->data[4];
sprite->data[1] = -sprite->data[1];
sprite->callback = sub_8074DC4;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
void sub_8099144(struct Sprite * sprite)
{
u8 spriteId;
sprite->invisible = TRUE;
spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]);
sprite->data[0] = gBattleAnimArgs[0];
sprite->data[1] = 0;
sprite->data[2] = gBattleAnimArgs[1];
sprite->data[3] = spriteId;
sprite->data[4] = gBattleAnimArgs[0];
StoreSpriteCallbackInData6(sprite, sub_8099190);
sprite->callback = sub_8074DC4;
}
void sub_8099190(struct Sprite * sprite)
{
sprite->data[0] = sprite->data[4];
sprite->data[2] = -sprite->data[2];
sprite->callback = sub_8074DC4;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
void sub_80991B4(struct Sprite * sprite)
{
u8 spriteId;
if (gBattleAnimArgs[0] == 0)
spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
else
spriteId = gBattlerSpriteIds[gBattleAnimTarget];
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x;
sprite->data[2] = gSprites[spriteId].pos1.x;
sprite->data[3] = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y;
sprite->data[4] = gSprites[spriteId].pos1.y;
sub_80754B8(sprite);
sprite->data[3] = 0;
sprite->data[4] = 0;
sprite->data[5] = gSprites[spriteId].pos2.x;
sprite->data[6] = gSprites[spriteId].pos2.y;
sprite->invisible = TRUE;
if (gBattleAnimArgs[1] == 1)
sprite->data[2] = 0;
else if (gBattleAnimArgs[1] == 2)
sprite->data[1] = 0;
sprite->data[7] = gBattleAnimArgs[1];
sprite->data[7] |= spriteId << 8;
sprite->callback = sub_8099270;
}