summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_811DA74.s176
-rw-r--r--include/battle.h4
-rw-r--r--src/battle_2.c2
-rw-r--r--src/battle_811DA74.c130
4 files changed, 100 insertions, 212 deletions
diff --git a/asm/battle_811DA74.s b/asm/battle_811DA74.s
index fa26110e4..3d452712f 100644
--- a/asm/battle_811DA74.s
+++ b/asm/battle_811DA74.s
@@ -6,182 +6,6 @@
.text
- thumb_func_start sub_811FF30
-sub_811FF30: @ 811FF30
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r2, _0811FF74 @ =gUnknown_02023A60
- ldr r5, _0811FF78 @ =gUnknown_02024A60
- ldrb r3, [r5]
- lsls r1, r3, 9
- adds r0, r2, 0x1
- mov r9, r0
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r6, r2, 0x2
- mov r8, r6
- adds r0, r1, r6
- ldrb r0, [r0]
- lsls r0, 8
- orrs r4, r0
- adds r2, 0xB
- adds r1, r2
- ldrb r7, [r1]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- ldr r6, _0811FF7C @ =0x02017810
- adds r0, r6
- ldrb r2, [r0, 0x4]
- cmp r2, 0x1
- beq _0811FFBE
- cmp r2, 0x1
- bgt _0811FF80
- cmp r2, 0
- beq _0811FF8A
- b _08120088
- .align 2, 0
-_0811FF74: .4byte gUnknown_02023A60
-_0811FF78: .4byte gUnknown_02024A60
-_0811FF7C: .4byte 0x02017810
-_0811FF80:
- cmp r2, 0x2
- beq _0811FFE4
- cmp r2, 0x3
- beq _08120050
- b _08120088
-_0811FF8A:
- lsls r1, r3, 2
- adds r0, r6, 0
- subs r0, 0x10
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0xC
- ands r0, r2
- cmp r0, 0x4
- bne _0811FFAE
- movs r0, 0x8
- orrs r0, r2
- strb r0, [r1]
- ldrb r2, [r5]
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x5
- bl move_anim_start_t4
-_0811FFAE:
- ldrb r0, [r5]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- movs r0, 0x1
- strb r0, [r1, 0x4]
- b _08120088
-_0811FFBE:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08120088
- movs r0, 0
- bl sub_80326EC
- adds r0, r4, 0
- bl ExecuteMoveAnim
- ldrb r0, [r5]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- movs r0, 0x2
- strb r0, [r1, 0x4]
- b _08120088
-_0811FFE4:
- ldr r0, _08120040 @ =gAnimScriptCallback
- ldr r0, [r0]
- bl _call_via_r0
- ldr r0, _08120044 @ =gAnimScriptActive
- ldrb r0, [r0]
- cmp r0, 0
- bne _08120088
- movs r0, 0x1
- bl sub_80326EC
- ldrb r2, [r5]
- lsls r0, r2, 2
- adds r4, r6, 0
- subs r4, 0x10
- adds r0, r4
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0812002C
- cmp r7, 0x1
- bhi _0812002C
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x6
- bl move_anim_start_t4
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r4
- ldrb r2, [r0]
- movs r1, 0x9
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
-_0812002C:
- ldr r0, _08120048 @ =gUnknown_02024A60
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _0812004C @ =0x02017810
- adds r0, r1
- movs r1, 0x3
- strb r1, [r0, 0x4]
- b _08120088
- .align 2, 0
-_08120040: .4byte gAnimScriptCallback
-_08120044: .4byte gAnimScriptActive
-_08120048: .4byte gUnknown_02024A60
-_0812004C: .4byte 0x02017810
-_08120050:
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _08120088
- bl sub_8031F24
- ldrb r0, [r5]
- lsls r2, r0, 9
- mov r3, r9
- adds r1, r2, r3
- ldrb r1, [r1]
- add r2, r8
- ldrb r2, [r2]
- lsls r2, 8
- orrs r1, r2
- bl sub_80324BC
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strb r4, [r0, 0x4]
- bl dp01_tbl3_exec_completed
-_08120088:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_811FF30
-
thumb_func_start sub_8120094
sub_8120094: @ 8120094
push {r4,lr}
diff --git a/include/battle.h b/include/battle.h
index f72333a9d..3b4771869 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -122,7 +122,7 @@ struct BattleStruct /* 0x2000000 */
/* 0x16A00 */ struct UnkBattleStruct1 unk_2016A00_2;
};
-struct UnknownStruct4
+struct UnkBattleStruct4
{
/*0x00*/ u8 filler0[0x3];
/*0x04*/ u16 unk4;
@@ -143,7 +143,7 @@ struct UnknownStruct4
};
extern struct UnknownStruct1 unk_2016A00;
-extern struct UnknownStruct4 gUnknown_02024CA8[];
+extern struct UnkBattleStruct4 gUnknown_02024CA8[];
extern struct AI_ThinkingStruct gAIThinkingSpace;
#endif // GUARD_BATTLE_H
diff --git a/src/battle_2.c b/src/battle_2.c
index e5091bd08..79d62ce69 100644
--- a/src/battle_2.c
+++ b/src/battle_2.c
@@ -1821,7 +1821,7 @@ void sub_8010874(void)
void sub_8010B88(void)
{
- struct UnknownStruct4 sp0 = gUnknown_02024CA8[gUnknown_02024A60];
+ struct UnkBattleStruct4 sp0 = gUnknown_02024CA8[gUnknown_02024A60];
s32 i;
u8 *ptr;
u32 *ptr2;
diff --git a/src/battle_811DA74.c b/src/battle_811DA74.c
index 8152645bc..a1b41d7bb 100644
--- a/src/battle_811DA74.c
+++ b/src/battle_811DA74.c
@@ -39,6 +39,13 @@ struct UnknownStruct3
u8 ppBonuses;
};
+struct UnknownStruct4
+{
+ u8 unk0_0:2;
+ u8 unk0_2:1;
+ u8 unk0_3:1;
+};
+
extern u32 gBitTable[];
extern u16 gBattleTypeFlags;
@@ -62,13 +69,19 @@ extern void (*gUnknown_03004330[])(void);
extern u8 gUnknown_03004340[];
extern u8 gUnknown_0300434C[];
extern u8 gBattleMonForms[];
+extern u8 gAnimScriptActive;
+extern void (*gAnimScriptCallback)(void);
extern void (*const gUnknown_083FE4F4[])(void);
-extern u8 unk_2000000[];
+extern u8 ewram[];
-#define EWRAM_17800 ((u8 *)(unk_2000000 + 0x17800))
-#define EWRAM_17810 ((struct UnknownStruct2 *)(unk_2000000 + 0x17810))
+#define ewram17800 ((struct UnknownStruct4 *)(ewram + 0x17800))
+#define ewram17810 ((struct UnknownStruct2 *)(ewram + 0x17810))
+extern void sub_8031F24(void);
+extern void sub_80326EC();
+extern void ExecuteMoveAnim();
+extern void sub_80324BC();
extern u8 sub_8031720();
extern u8 mplay_80342A4();
extern void oamt_add_pos2_onto_pos1();
@@ -150,9 +163,9 @@ void sub_811DB1C(void)
void sub_811DB84(void)
{
- if ((--EWRAM_17810[gUnknown_02024A60].unk9) == 0xFF)
+ if ((--ewram17810[gUnknown_02024A60].unk9) == 0xFF)
{
- EWRAM_17810[gUnknown_02024A60].unk9 = 0;
+ ewram17810[gUnknown_02024A60].unk9 = 0;
dp01_tbl3_exec_completed();
}
}
@@ -176,7 +189,7 @@ void sub_811DBC0(void)
r6 = FALSE;
if (r6)
{
- EWRAM_17810[gUnknown_02024A60].unk9 = 3;
+ ewram17810[gUnknown_02024A60].unk9 = 3;
gUnknown_03004330[gUnknown_02024A60] = sub_811DB84;
}
}
@@ -185,12 +198,12 @@ void sub_811DCA0(void)
{
u8 r2;
- if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 8))
+ if (!(ewram17810[gUnknown_02024A60].unk0 & 8))
{
- r2 = EWRAM_17810[gUnknown_02024A60 ^ 2].unk0 & 8;
- if (!r2 && (++EWRAM_17810[gUnknown_02024A60].unk9) != 1)
+ r2 = ewram17810[gUnknown_02024A60 ^ 2].unk0 & 8;
+ if (!r2 && (++ewram17810[gUnknown_02024A60].unk9) != 1)
{
- EWRAM_17810[gUnknown_02024A60].unk9 = r2;
+ ewram17810[gUnknown_02024A60].unk9 = r2;
if (IsDoubleBattle() && !(gBattleTypeFlags & 0x40))
{
DestroySprite(&gSprites[gUnknown_0300434C[gUnknown_02024A60 ^ 2]]);
@@ -202,7 +215,7 @@ void sub_811DCA0(void)
sub_8045A5C(gUnknown_03004340[gUnknown_02024A60], &gPlayerParty[gUnknown_02024A6A[gUnknown_02024A60]], 0);
sub_804777C(gUnknown_02024A60);
sub_8043DFC(gUnknown_03004340[gUnknown_02024A60]);
- (s8)EWRAM_17810[4].unk9 &= ~1;
+ (s8)ewram17810[4].unk9 &= ~1;
gUnknown_03004330[gUnknown_02024A60] = sub_811DBC0;
}
}
@@ -246,7 +259,7 @@ void sub_811DE98(void)
void sub_811DF34(void)
{
- if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 0x40))
+ if (!(ewram17810[gUnknown_02024A60].unk0 & 0x40))
{
FreeSpriteOamMatrix(&gSprites[gUnknown_02024BE0[gUnknown_02024A60]]);
DestroySprite(&gSprites[gUnknown_02024BE0[gUnknown_02024A60]]);
@@ -285,7 +298,7 @@ void sub_811E034(void)
{
if (gSprites[gUnknown_03004340[gUnknown_02024A60]].callback == SpriteCallbackDummy)
{
- if (EWRAM_17800[gUnknown_02024A60 * 4] & 4)
+ if (ewram17800[gUnknown_02024A60].unk0_2)
move_anim_start_t4(gUnknown_02024A60, gUnknown_02024A60, gUnknown_02024A60, 6);
gUnknown_03004330[gUnknown_02024A60] = sub_811E0A0;
}
@@ -293,16 +306,16 @@ void sub_811E034(void)
void sub_811E0A0(void)
{
- if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 0x40))
+ if (!(ewram17810[gUnknown_02024A60].unk0 & 0x40))
dp01_tbl3_exec_completed();
}
void sub_811E0CC(void)
{
- if (EWRAM_17810[gUnknown_02024A60].unk1 & 1)
+ if (ewram17810[gUnknown_02024A60].unk1 & 1)
{
- EWRAM_17810[gUnknown_02024A60].unk0 &= 0x7F;
- (s8)EWRAM_17810[gUnknown_02024A60].unk1 &= ~1;
+ ewram17810[gUnknown_02024A60].unk0 &= 0x7F;
+ (s8)ewram17810[gUnknown_02024A60].unk1 &= ~1;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
CreateTask(c3_0802FDF4, 10);
@@ -318,10 +331,10 @@ void sub_811E0CC(void)
void sub_811E1BC(void)
{
- if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 0x88))
+ if (!(ewram17810[gUnknown_02024A60].unk0 & 0x88))
sub_8141828(gUnknown_02024A60, &gPlayerParty[gUnknown_02024A6A[gUnknown_02024A60]]);
if (gSprites[gUnknown_0300434C[gUnknown_02024A60]].callback == SpriteCallbackDummy
- && !(EWRAM_17810[gUnknown_02024A60].unk0 & 8))
+ && !(ewram17810[gUnknown_02024A60].unk0 & 8))
{
DestroySprite(&gSprites[gUnknown_0300434C[gUnknown_02024A60]]);
gUnknown_03004330[gUnknown_02024A60] = sub_811E0CC;
@@ -377,13 +390,13 @@ void dp01_tbl3_exec_completed(void)
void sub_811E38C(void)
{
- if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 0x10))
+ if (!(ewram17810[gUnknown_02024A60].unk0 & 0x10))
dp01_tbl3_exec_completed();
}
void sub_811E3B8(void)
{
- if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 0x20))
+ if (!(ewram17810[gUnknown_02024A60].unk0 & 0x20))
dp01_tbl3_exec_completed();
}
@@ -1027,7 +1040,7 @@ void sub_811F9D0(void)
{
if (gUnknown_02023A60[gUnknown_02024A60][1] == 0)
{
- EWRAM_17810[gUnknown_02024A60].unk4 = 0;
+ ewram17810[gUnknown_02024A60].unk4 = 0;
gUnknown_03004330[gUnknown_02024A60] = sub_811FA5C;
}
else
@@ -1041,17 +1054,17 @@ void sub_811F9D0(void)
void sub_811FA5C(void)
{
- switch (EWRAM_17810[gUnknown_02024A60].unk4)
+ switch (ewram17810[gUnknown_02024A60].unk4)
{
case 0:
- if (EWRAM_17800[gUnknown_02024A60 * 4] & 4)
+ if (ewram17800[gUnknown_02024A60].unk0_2)
move_anim_start_t4(gUnknown_02024A60, gUnknown_02024A60, gUnknown_02024A60, 5);
- EWRAM_17810[gUnknown_02024A60].unk4 = 1;
+ ewram17810[gUnknown_02024A60].unk4 = 1;
break;
case 1:
- if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 0x40))
+ if (!(ewram17810[gUnknown_02024A60].unk0 & 0x40))
{
- EWRAM_17810[gUnknown_02024A60].unk4 = 0;
+ ewram17810[gUnknown_02024A60].unk4 = 0;
move_anim_start_t4(gUnknown_02024A60, gUnknown_02024A60, gUnknown_02024A60, 1);
gUnknown_03004330[gUnknown_02024A60] = sub_811DF34;
}
@@ -1108,15 +1121,15 @@ void sub_811FC3C(void)
void sub_811FCE8(void)
{
- if (EWRAM_17810[gUnknown_02024A60].unk4 == 0)
+ if (ewram17810[gUnknown_02024A60].unk4 == 0)
{
- if (EWRAM_17800[gUnknown_02024A60 * 4] & 4)
+ if (ewram17800[gUnknown_02024A60].unk0_2)
move_anim_start_t4(gUnknown_02024A60, gUnknown_02024A60, gUnknown_02024A60, 5);
- EWRAM_17810[gUnknown_02024A60].unk4++;
+ ewram17810[gUnknown_02024A60].unk4++;
}
- else if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 0x40))
+ else if (!(ewram17810[gUnknown_02024A60].unk0 & 0x40))
{
- EWRAM_17810[gUnknown_02024A60].unk4 = 0;
+ ewram17810[gUnknown_02024A60].unk4 = 0;
sub_80324F8(&gPlayerParty[gUnknown_02024A6A[gUnknown_02024A60]], gUnknown_02024A60);
PlaySE12WithPanning(SE_POKE_DEAD, -64);
gSprites[gUnknown_02024BE0[gUnknown_02024A60]].data1 = 0;
@@ -1170,8 +1183,59 @@ void sub_811FDFC(void)
dp01_tbl3_exec_completed();
else
{
- EWRAM_17810[gUnknown_02024A60].unk4 = 0;
+ ewram17810[gUnknown_02024A60].unk4 = 0;
gUnknown_03004330[gUnknown_02024A60] = sub_811FF30;
}
}
}
+
+void sub_811FF30(void)
+{
+ u16 r4 = gUnknown_02023A60[gUnknown_02024A60][1]
+ | (gUnknown_02023A60[gUnknown_02024A60][2] << 8);
+ u8 r7 = gUnknown_02023A60[gUnknown_02024A60][11];
+
+ switch (ewram17810[gUnknown_02024A60].unk4)
+ {
+ case 0:
+ if (ewram17800[gUnknown_02024A60].unk0_2 && !ewram17800[gUnknown_02024A60].unk0_3)
+ {
+ ewram17800[gUnknown_02024A60].unk0_3 = 1;
+ move_anim_start_t4(gUnknown_02024A60, gUnknown_02024A60, gUnknown_02024A60, 5);
+ }
+ ewram17810[gUnknown_02024A60].unk4 = 1;
+ break;
+ case 1:
+ if (!(ewram17810[gUnknown_02024A60].unk0 & 0x40))
+ {
+ sub_80326EC(0);
+ ExecuteMoveAnim(r4);
+ ewram17810[gUnknown_02024A60].unk4 = 2;
+ }
+ break;
+ case 2:
+ gAnimScriptCallback();
+ if (!gAnimScriptActive)
+ {
+ sub_80326EC(1);
+ if ((ewram17800[gUnknown_02024A60].unk0_2) && r7 <= 1)
+ {
+ move_anim_start_t4(gUnknown_02024A60, gUnknown_02024A60, gUnknown_02024A60, 6);
+ ewram17800[gUnknown_02024A60].unk0_3 = 0;
+ }
+ ewram17810[gUnknown_02024A60].unk4 = 3;
+ }
+ break;
+ case 3:
+ if (!(ewram17810[gUnknown_02024A60].unk0 & 0x40))
+ {
+ sub_8031F24();
+ sub_80324BC(
+ gUnknown_02024A60,
+ gUnknown_02023A60[gUnknown_02024A60][1] | (gUnknown_02023A60[gUnknown_02024A60][2] << 8));
+ ewram17810[gUnknown_02024A60].unk4 = 0;
+ dp01_tbl3_exec_completed();
+ }
+ break;
+ }
+}