decompile sub_8046FBC - sub_80470C4

This commit is contained in:
camthesaxman 2017-06-18 18:25:37 -05:00 committed by Marijn van der Werf
parent 829371c3e0
commit 5041f91c4b
3 changed files with 99 additions and 309 deletions

View File

@ -6,311 +6,6 @@
.text
thumb_func_start sub_8046FBC
sub_8046FBC: @ 8046FBC
push {r4-r7,lr}
adds r6, r0, 0
ldrh r0, [r6, 0x3A]
lsls r0, 24
lsrs r7, r0, 24
ldrh r0, [r6, 0x36]
adds r0, 0x1
strh r0, [r6, 0x36]
lsls r0, 16
asrs r1, r0, 16
cmp r1, 0x28
beq _08047056
cmp r1, 0x5F
bne _08046FF4
ldr r0, _08046FEC @ =gDoingBattleAnim
movs r1, 0
strb r1, [r0]
bl m4aMPlayAllStop
ldr r0, _08046FF0 @ =0x00000173
bl PlaySE
b _08047056
.align 2, 0
_08046FEC: .4byte gDoingBattleAnim
_08046FF0: .4byte 0x00000173
_08046FF4:
ldr r0, _0804705C @ =0x0000013b
cmp r1, r0
bne _08047056
ldr r5, _08047060 @ =gSprites
ldr r4, _08047064 @ =gObjectBankIDs
movs r1, 0x3A
ldrsh r0, [r6, r1]
adds r0, r4
ldrb r1, [r0]
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
adds r0, r5
ldrb r0, [r0, 0x3]
lsls r0, 26
lsrs r0, 27
bl FreeOamMatrix
movs r1, 0x3A
ldrsh r0, [r6, r1]
adds r0, r4
ldrb r1, [r0]
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
adds r0, r5
bl DestroySprite
adds r0, r6, 0
bl DestroySpriteAndFreeResources
ldr r0, _08047068 @ =gMain
ldr r1, _0804706C @ =0x0000043d
adds r0, r1
ldrb r1, [r0]
movs r0, 0x2
ands r0, r1
cmp r0, 0
beq _08047056
lsls r1, r7, 1
adds r1, r7
lsls r1, 2
ldr r0, _08047070 @ =0x02017810
adds r1, r0
ldrb r2, [r1]
movs r0, 0x9
negs r0, r0
ands r0, r2
strb r0, [r1]
_08047056:
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0804705C: .4byte 0x0000013b
_08047060: .4byte gSprites
_08047064: .4byte gObjectBankIDs
_08047068: .4byte gMain
_0804706C: .4byte 0x0000043d
_08047070: .4byte 0x02017810
thumb_func_end sub_8046FBC
thumb_func_start sub_8047074
sub_8047074: @ 8047074
push {r4,lr}
adds r4, r0, 0
movs r0, 0x19
strh r0, [r4, 0x2E]
ldrh r0, [r4, 0x3A]
lsls r0, 24
lsrs r0, 24
movs r1, 0x2
bl sub_8077ABC
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x32]
ldrh r0, [r4, 0x3A]
lsls r0, 24
lsrs r0, 24
movs r1, 0x3
bl sub_8077ABC
lsls r0, 24
lsrs r0, 24
adds r0, 0x18
strh r0, [r4, 0x36]
ldr r0, _080470BC @ =0x0000ffe2
strh r0, [r4, 0x38]
ldrh r0, [r4, 0x3A]
strh r0, [r4, 0x6]
adds r0, r4, 0
bl sub_80786EC
ldr r0, _080470C0 @ =sub_80470C4
str r0, [r4, 0x1C]
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080470BC: .4byte 0x0000ffe2
_080470C0: .4byte sub_80470C4
thumb_func_end sub_8047074
thumb_func_start sub_80470C4
sub_80470C4: @ 80470C4
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r5, r0, 0
ldrh r0, [r5, 0x3C]
movs r1, 0xFF
mov r8, r1
lsrs r0, 8
subs r0, 0x23
lsls r0, 16
lsrs r0, 16
cmp r0, 0x2C
bhi _080471B8
ldrh r1, [r5, 0x6]
movs r0, 0xFF
lsls r0, 8
ands r0, r1
cmp r0, 0
bne _08047126
ldrh r0, [r5, 0x30]
movs r1, 0x1
adds r6, r1, 0
ands r6, r0
ldrh r0, [r5, 0x32]
adds r7, r1, 0
ands r7, r0
movs r2, 0x30
ldrsh r0, [r5, r2]
movs r1, 0x3
bl __divsi3
movs r1, 0x2
negs r1, r1
adds r4, r1, 0
ands r0, r4
orrs r6, r0
strh r6, [r5, 0x30]
movs r2, 0x32
ldrsh r0, [r5, r2]
movs r1, 0x3
bl __divsi3
ands r0, r4
orrs r7, r0
strh r7, [r5, 0x32]
adds r0, r5, 0
movs r1, 0x4
bl StartSpriteAffineAnim
_08047126:
ldrh r4, [r5, 0x2E]
adds r0, r5, 0
bl sub_8078B5C
movs r1, 0x3A
ldrsh r0, [r5, r1]
movs r1, 0x3
bl __divsi3
adds r1, r0, 0
ldrh r0, [r5, 0x3C]
adds r0, r1
strh r0, [r5, 0x3C]
lsls r0, 16
asrs r0, 24
mov r2, r8
ands r0, r2
movs r2, 0x38
ldrsh r1, [r5, r2]
bl Sin
ldrh r1, [r5, 0x26]
adds r0, r1
strh r0, [r5, 0x26]
movs r2, 0x80
lsls r2, 1
adds r0, r2, 0
ldrh r1, [r5, 0x6]
adds r0, r1
strh r0, [r5, 0x6]
lsls r0, 16
lsrs r0, 24
movs r1, 0x3
bl __umodsi3
lsls r0, 16
cmp r0, 0
beq _08047176
strh r4, [r5, 0x2E]
b _0804717E
_08047176:
lsls r0, r4, 16
asrs r0, 16
subs r0, 0x1
strh r0, [r5, 0x2E]
_0804717E:
ldrh r0, [r5, 0x3C]
lsrs r0, 8
cmp r0, 0x4F
ble _08047220
ldrh r0, [r5, 0x30]
movs r1, 0x1
adds r6, r1, 0
ands r6, r0
ldrh r0, [r5, 0x32]
adds r7, r1, 0
ands r7, r0
movs r2, 0x30
ldrsh r1, [r5, r2]
lsls r0, r1, 1
adds r0, r1
movs r1, 0x2
negs r1, r1
adds r2, r1, 0
ands r0, r2
orrs r0, r6
strh r0, [r5, 0x30]
movs r0, 0x32
ldrsh r1, [r5, r0]
lsls r0, r1, 1
adds r0, r1
ands r0, r2
orrs r0, r7
strh r0, [r5, 0x32]
b _08047220
_080471B8:
adds r0, r5, 0
bl sub_8078718
lsls r0, 24
cmp r0, 0
beq _08047220
ldrh r0, [r5, 0x24]
ldrh r1, [r5, 0x20]
adds r0, r1
movs r1, 0
strh r0, [r5, 0x20]
ldrh r0, [r5, 0x26]
ldrh r2, [r5, 0x22]
adds r0, r2
strh r0, [r5, 0x22]
strh r1, [r5, 0x26]
strh r1, [r5, 0x24]
ldrb r0, [r5, 0x6]
strh r0, [r5, 0x3A]
strh r1, [r5, 0x2E]
bl IsDoubleBattle
lsls r0, 24
cmp r0, 0
beq _08047214
ldr r0, _0804720C @ =0x02017840
ldrb r1, [r0, 0x9]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _08047214
movs r0, 0x3A
ldrsh r4, [r5, r0]
movs r0, 0x2
bl GetBankByPlayerAI
lsls r0, 24
lsrs r0, 24
cmp r4, r0
bne _08047214
ldr r0, _08047210 @ =sub_8047230
b _08047216
.align 2, 0
_0804720C: .4byte 0x02017840
_08047210: .4byte sub_8047230
_08047214:
ldr r0, _0804722C @ =sub_8046C78
_08047216:
str r0, [r5, 0x1C]
adds r0, r5, 0
movs r1, 0
bl StartSpriteAffineAnim
_08047220:
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0804722C: .4byte sub_8046C78
thumb_func_end sub_80470C4
thumb_func_start sub_8047230
sub_8047230: @ 8047230
push {lr}

View File

@ -270,10 +270,10 @@ enum
BGM_NAMINORI,
BGM_DAN01,
/*0x16F*/ BGM_FANFA1,
BGM_ME_ASA,
BGM_ME_BACHI,
BGM_FANFA4,
BGM_FANFA5,
/*0x170*/ BGM_ME_ASA,
/*0x171*/ BGM_ME_BACHI,
/*0x172*/ BGM_FANFA4,
/*0x173*/ BGM_FANFA5,
BGM_ME_WAZA,
BGM_BIJYUTU,
BGM_DOORO_X4,

View File

@ -1,6 +1,7 @@
#include "global.h"
#include "gba/m4a_internal.h"
#include "battle.h"
#include "m4a.h"
#include "main.h"
#include "pokemon.h"
#include "rom_8077ABC.h"
@ -39,6 +40,8 @@ void sub_8046E7C(struct Sprite *);
void sub_8046E9C(struct Sprite *);
void sub_8046FBC(struct Sprite *);
void sub_8047074(struct Sprite *);
void sub_80470C4(struct Sprite *);
void sub_8047230(struct Sprite *);
void sub_8047254(struct Sprite *);
void sub_80478DC();
void sub_804794C(u8);
@ -517,3 +520,95 @@ void sub_8046E9C(struct Sprite *sprite)
}
}
}
void sub_8046FBC(struct Sprite *sprite)
{
u8 r7 = sprite->data6;
sprite->data4++;
if (sprite->data4 == 40)
{
return;
}
else if (sprite->data4 == 95)
{
gDoingBattleAnim = 0;
m4aMPlayAllStop();
PlaySE(BGM_FANFA5);
}
else if (sprite->data4 == 315)
{
FreeOamMatrix(gSprites[gObjectBankIDs[sprite->data6]].oam.matrixNum);
DestroySprite(&gSprites[gObjectBankIDs[sprite->data6]]);
DestroySpriteAndFreeResources(sprite);
if (gMain.inBattle)
ewram17810[r7].unk0_3 = 0;
}
}
void sub_8047074(struct Sprite *sprite)
{
sprite->data0 = 25;
sprite->data2 = sub_8077ABC(sprite->data6, 2);
sprite->data4 = sub_8077ABC(sprite->data6, 3) + 0x18;
sprite->data5 = -30;
sprite->oam.affineParam = sprite->data6;
sub_80786EC(sprite);
sprite->callback = sub_80470C4;
}
#define HIBYTE(x) (((x) >> 8) & 0xFF)
void sub_80470C4(struct Sprite *sprite)
{
u32 r6;
u32 r7;
if (HIBYTE(sprite->data7) >= 35 && HIBYTE(sprite->data7) < 80)
{
s16 r4;
if ((sprite->oam.affineParam & 0xFF00) == 0)
{
r6 = sprite->data1 & 1;
r7 = sprite->data2 & 1;
sprite->data1 = ((sprite->data1 / 3) & ~1) | r6;
sprite->data2 = ((sprite->data2 / 3) & ~1) | r7;
StartSpriteAffineAnim(sprite, 4);
}
r4 = sprite->data0;
sub_8078B5C(sprite);
sprite->data7 += sprite->data6 / 3;
sprite->pos2.y += Sin(HIBYTE(sprite->data7), sprite->data5);
sprite->oam.affineParam += 0x100;
if ((sprite->oam.affineParam >> 8) % 3 != 0)
sprite->data0 = r4;
else
sprite->data0 = r4 - 1;
if (HIBYTE(sprite->data7) >= 80)
{
r6 = sprite->data1 & 1;
r7 = sprite->data2 & 1;
sprite->data1 = ((sprite->data1 * 3) & ~1) | r6;
sprite->data2 = ((sprite->data2 * 3) & ~1) | r7;
}
}
else
{
if (sub_8078718(sprite))
{
sprite->pos1.x += sprite->pos2.x;
sprite->pos1.y += sprite->pos2.y;
sprite->pos2.y = 0;
sprite->pos2.x = 0;
sprite->data6 = sprite->oam.affineParam & 0xFF;
sprite->data0 = 0;
if (IsDoubleBattle() && ewram17840.unk9_0
&& sprite->data6 == GetBankByPlayerAI(2))
sprite->callback = sub_8047230;
else
sprite->callback = sub_8046C78;
StartSpriteAffineAnim(sprite, 0);
}
}
}