summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_7.s300
-rw-r--r--src/battle_7.c115
2 files changed, 112 insertions, 303 deletions
diff --git a/asm/battle_7.s b/asm/battle_7.s
index 7ad55215d..1e4e2013a 100644
--- a/asm/battle_7.s
+++ b/asm/battle_7.s
@@ -6,306 +6,6 @@
.text
- thumb_func_start battle_load_something
-battle_load_something: @ 8031D70
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- movs r6, 0
- ldrb r0, [r5]
- cmp r0, 0x6
- bls _08031D80
- b _08031EDE
-_08031D80:
- lsls r0, 2
- ldr r1, _08031D8C @ =_08031D90
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08031D8C: .4byte _08031D90
- .align 2, 0
-_08031D90:
- .4byte _08031DAC
- .4byte _08031DB2
- .4byte _08031EBC
- .4byte _08031DC8
- .4byte _08031DF8
- .4byte _08031E34
- .4byte _08031ED4
-_08031DAC:
- bl sub_8031F0C
- b _08031EBC
-_08031DB2:
- ldrb r0, [r4]
- bl sub_8031C30
- lsls r0, 24
- cmp r0, 0
- beq _08031DC0
- b _08031EB8
-_08031DC0:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _08031EDE
-_08031DC8:
- ldr r0, _08031DE0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08031DE4
- ldrb r0, [r4]
- cmp r0, 0
- bne _08031DE4
- bl battle_make_oam_safari_battle
- b _08031DEA
- .align 2, 0
-_08031DE0: .4byte gBattleTypeFlags
-_08031DE4:
- ldrb r0, [r4]
- bl battle_make_oam_normal_battle
-_08031DEA:
- ldr r2, _08031DF4 @ =gUnknown_03004340
- ldrb r1, [r4]
- adds r1, r2
- strb r0, [r1]
- b _08031EA6
- .align 2, 0
-_08031DF4: .4byte gUnknown_03004340
-_08031DF8:
- ldrb r0, [r4]
- bl sub_8043F44
- ldr r0, _08031E18 @ =gUnknown_02024A72
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0x1
- bhi _08031E20
- ldr r0, _08031E1C @ =gUnknown_03004340
- adds r0, r1, r0
- ldrb r0, [r0]
- movs r1, 0
- bl nullsub_11
- b _08031EA6
- .align 2, 0
-_08031E18: .4byte gUnknown_02024A72
-_08031E1C: .4byte gUnknown_03004340
-_08031E20:
- ldr r0, _08031E30 @ =gUnknown_03004340
- adds r0, r1, r0
- ldrb r0, [r0]
- movs r1, 0x1
- bl nullsub_11
- b _08031EA6
- .align 2, 0
-_08031E30: .4byte gUnknown_03004340
-_08031E34:
- ldrb r0, [r4]
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _08031E7C
- ldr r0, _08031E6C @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08031E9A
- ldr r0, _08031E70 @ =gUnknown_03004340
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, _08031E74 @ =gUnknown_02024A6A
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _08031E78 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl sub_8045A5C
- b _08031E9A
- .align 2, 0
-_08031E6C: .4byte gBattleTypeFlags
-_08031E70: .4byte gUnknown_03004340
-_08031E74: .4byte gUnknown_02024A6A
-_08031E78: .4byte gPlayerParty
-_08031E7C:
- ldr r0, _08031EC4 @ =gUnknown_03004340
- ldrb r1, [r4]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, _08031EC8 @ =gUnknown_02024A6A
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _08031ECC @ =gEnemyParty
- adds r1, r2
- movs r2, 0
- bl sub_8045A5C
-_08031E9A:
- ldr r1, _08031EC4 @ =gUnknown_03004340
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- bl sub_8043DB0
-_08031EA6:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- ldr r1, _08031ED0 @ =gUnknown_02024A68
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bne _08031EDE
-_08031EB8:
- movs r0, 0
- strb r0, [r4]
-_08031EBC:
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- b _08031EDE
- .align 2, 0
-_08031EC4: .4byte gUnknown_03004340
-_08031EC8: .4byte gUnknown_02024A6A
-_08031ECC: .4byte gEnemyParty
-_08031ED0: .4byte gUnknown_02024A68
-_08031ED4:
- bl sub_80327CC
- bl sub_8094958
- movs r6, 0x1
-_08031EDE:
- adds r0, r6, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end battle_load_something
-
- thumb_func_start sub_8031EE8
-sub_8031EE8: @ 8031EE8
- push {r4,lr}
- ldr r4, _08031F08 @ =0x02017810
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0x30
- bl memset
- adds r4, 0x30
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0x10
- bl memset
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08031F08: .4byte 0x02017810
- thumb_func_end sub_8031EE8
-
- thumb_func_start sub_8031F0C
-sub_8031F0C: @ 8031F0C
- push {lr}
- bl sub_8031EE8
- ldr r0, _08031F20 @ =0x02017800
- movs r1, 0
- movs r2, 0x10
- bl memset
- pop {r0}
- bx r0
- .align 2, 0
-_08031F20: .4byte 0x02017800
- thumb_func_end sub_8031F0C
-
- thumb_func_start sub_8031F24
-sub_8031F24: @ 8031F24
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r4, 0
- ldr r5, _08031F78 @ =gUnknown_02024A68
- ldrb r0, [r5]
- cmp r4, r0
- bge _08031F6E
- ldr r0, _08031F7C @ =gSprites
- mov r8, r0
- movs r7, 0x1
- movs r0, 0x2
- negs r0, r0
- mov r12, r0
- ldr r6, _08031F80 @ =gUnknown_02024BE0
- ldr r3, _08031F84 @ =0x02017800
-_08031F44:
- adds r0, r4, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r8
- adds r0, 0x3E
- ldrb r1, [r0]
- lsls r1, 29
- lsrs r1, 31
- ands r1, r7
- ldrb r2, [r3]
- mov r0, r12
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- adds r3, 0x4
- adds r4, 0x1
- ldrb r0, [r5]
- cmp r4, r0
- blt _08031F44
-_08031F6E:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08031F78: .4byte gUnknown_02024A68
-_08031F7C: .4byte gSprites
-_08031F80: .4byte gUnknown_02024BE0
-_08031F84: .4byte 0x02017800
- thumb_func_end sub_8031F24
-
- thumb_func_start sub_8031F88
-sub_8031F88: @ 8031F88
- lsls r0, 24
- lsrs r0, 24
- lsls r3, r0, 2
- ldr r1, _08031FB8 @ =0x02017800
- adds r3, r1
- ldr r2, _08031FBC @ =gSprites
- ldr r1, _08031FC0 @ =gUnknown_02024BE0
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r1, [r0]
- lsls r1, 29
- lsrs r1, 31
- ldrb r2, [r3]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- bx lr
- .align 2, 0
-_08031FB8: .4byte 0x02017800
-_08031FBC: .4byte gSprites
-_08031FC0: .4byte gUnknown_02024BE0
- thumb_func_end sub_8031F88
-
thumb_func_start sub_8031FC4
sub_8031FC4: @ 8031FC4
push {r4-r7,lr}
diff --git a/src/battle_7.c b/src/battle_7.c
index 0e77ec71a..9b73eb573 100644
--- a/src/battle_7.c
+++ b/src/battle_7.c
@@ -2,6 +2,7 @@
#include "asm.h"
// Include this when my other PR gets merged
//#include "battle.h"
+#include "battle_interface.h"
#include "battle_anim.h"
#include "blend_palette.h"
#include "data2.h"
@@ -34,9 +35,10 @@ struct UnknownStruct2_
u8 fillerA[2];
};
-struct UnknownStruct4
+struct UnknownStruct4_
{
- u8 unk0_0:2;
+ u8 unk0_0:1;
+ u8 unk0_1:1;
u8 unk0_2:1;
u8 unk0_3:1;
u16 unk2;
@@ -51,17 +53,20 @@ struct UnknownStruct6
extern u8 ewram[];
-#define ewram17800 ((struct UnknownStruct4 *)(ewram + 0x17800))
+#define ewram17800 ((struct UnknownStruct4_ *)(ewram + 0x17800))
#define ewram17810 ((struct UnknownStruct2_ *)(ewram + 0x17810))
#define ewram17840 (*(struct UnknownStruct6 *)(ewram + 0x17840))
extern struct MusicPlayerInfo gMPlay_SE1;
extern struct MusicPlayerInfo gMPlay_SE2;
extern u8 gUnknown_02024A60;
+extern u8 gUnknown_02024A68;
+extern u16 gUnknown_02024A6A[];
extern u8 gUnknown_02024A72[];
extern u8 gUnknown_02024BE0[];
extern u16 gUnknown_02024DE8;
extern u32 gUnknown_02024E70[];
+extern u8 gUnknown_03004340[];
extern u16 gBattleTypeFlags;
extern u8 gBattleMonForms[];
extern u8 gBattleAnimPlayerMonIndex;
@@ -82,6 +87,7 @@ extern const struct SpriteSheet gUnknown_0820A4B4[];
extern const struct SpritePalette gUnknown_0820A4D4[];
extern const u8 gUnknown_08D09C48[];
+extern void sub_8094958(void);
extern const u16 *pokemon_get_pal(struct Pokemon *);
extern void sub_80105DC(struct Sprite *);
extern void move_anim_start_t2();
@@ -92,6 +98,8 @@ extern const u16 *species_and_otid_get_pal();
void sub_80315E8(u8);
u8 sub_803163C(u8);
void sub_80316CC(u8);
+void sub_8031F0C(void);
+void sub_80327CC(void);
void sub_80312F0(struct Sprite *sprite)
{
@@ -506,3 +514,104 @@ void load_gfxc_health_bar(void)
{
sub_800D238(gUnknown_08D09C48, (void *)0x02000000);
}
+
+u8 battle_load_something(u8 *pState, u8 *b)
+{
+ bool8 retVal = FALSE;
+
+ switch (*pState)
+ {
+ case 0:
+ sub_8031F0C();
+ (*pState)++;
+ break;
+ case 1:
+ if (sub_8031C30(*b) == 0)
+ {
+ (*b)++;
+ }
+ else
+ {
+ *b = 0;
+ (*pState)++;
+ }
+ break;
+ case 2:
+ (*pState)++;
+ break;
+ case 3:
+ if ((gBattleTypeFlags & 0x80) && *b == 0)
+ gUnknown_03004340[*b] = battle_make_oam_safari_battle();
+ else
+ gUnknown_03004340[*b] = battle_make_oam_normal_battle(*b);
+ (*b)++;
+ if (*b == gUnknown_02024A68)
+ {
+ *b = 0;
+ (*pState)++;
+ }
+ break;
+ case 4:
+ sub_8043F44(*b);
+ if (gUnknown_02024A72[*b] <= 1)
+ nullsub_11(gUnknown_03004340[*b], 0);
+ else
+ nullsub_11(gUnknown_03004340[*b], 1);
+ (*b)++;
+ if (*b == gUnknown_02024A68)
+ {
+ *b = 0;
+ (*pState)++;
+ }
+ break;
+ case 5:
+ if (battle_side_get_owner(*b) == 0)
+ {
+ if (!(gBattleTypeFlags & 0x80))
+ sub_8045A5C(gUnknown_03004340[*b], &gPlayerParty[gUnknown_02024A6A[*b]], 0);
+ }
+ else
+ {
+ sub_8045A5C(gUnknown_03004340[*b], &gEnemyParty[gUnknown_02024A6A[*b]], 0);
+ }
+ sub_8043DB0(gUnknown_03004340[*b]);
+ (*b)++;
+ if (*b == gUnknown_02024A68)
+ {
+ *b = 0;
+ (*pState)++;
+ }
+ break;
+ case 6:
+ sub_80327CC();
+ sub_8094958();
+ retVal = TRUE;
+ break;
+ }
+ return retVal;
+}
+
+void sub_8031EE8(void)
+{
+ memset(ewram17810, 0, 0x30);
+ memset(&ewram17840, 0, 0x10);
+}
+
+void sub_8031F0C(void)
+{
+ sub_8031EE8();
+ memset(ewram17800, 0, 0x10);
+}
+
+void sub_8031F24(void)
+{
+ s32 i;
+
+ for (i = 0; i < gUnknown_02024A68; i++)
+ ewram17800[i].unk0_0 = gSprites[gUnknown_02024BE0[i]].invisible;
+}
+
+void sub_8031F88(u8 a)
+{
+ ewram17800[a].unk0_0 = gSprites[gUnknown_02024BE0[a]].invisible;
+}