summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2019-04-09 19:37:54 -0500
committerhuderlem <huderlem@gmail.com>2019-04-09 19:48:21 -0500
commit8a617c3d94b52f496585f7c5e132618a2e8ea0f8 (patch)
tree25225ca96dc776fa716c5e140e988930eab16de5
parent382a29ad40b19956ae696461cc88a50097c85587 (diff)
Decompile more pokemon_jump.c
-rwxr-xr-xasm/pokemon_jump.s570
-rwxr-xr-xsrc/pokemon_jump.c288
2 files changed, 260 insertions, 598 deletions
diff --git a/asm/pokemon_jump.s b/asm/pokemon_jump.s
index 8a705e32e..108c3dbf1 100755
--- a/asm/pokemon_jump.s
+++ b/asm/pokemon_jump.s
@@ -5,576 +5,6 @@
.text
- thumb_func_start sub_802BD84
-sub_802BD84: @ 802BD84
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- lsls r0, 2
- add r0, r10
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r6, r0, r1
- mov r0, r10
- movs r1, 0xE
- bl GetWordTaskArg
- mov r8, r0
- movs r1, 0
- ldrsh r0, [r6, r1]
- cmp r0, 0
- beq _0802BDC8
- cmp r0, 0x1
- beq _0802BDDC
- b _0802BE48
- .pool
-_0802BDBC:
- bl sub_802AB20
- mov r0, r10
- bl DestroyTask
- b _0802BE48
-_0802BDC8:
- movs r1, 0
- adds r0, r6, 0
- adds r0, 0x8
-_0802BDCE:
- strh r1, [r0, 0x4]
- subs r0, 0x2
- cmp r0, r6
- bge _0802BDCE
- ldrh r0, [r6]
- adds r0, 0x1
- strh r0, [r6]
-_0802BDDC:
- mov r3, r8
- ldrb r1, [r3, 0x6]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r4, =0x000082a8
- adds r0, r4
- add r0, r8
- bl sub_802E0AC
- movs r2, 0
- adds r5, r6, 0x4
- mov r9, r2
- movs r7, 0x83
- lsls r7, 8
- add r7, r8
- add r4, r8
-_0802BDFE:
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0802BE38
- adds r0, r2, 0
- adds r1, r4, 0
- str r2, [sp]
- bl sub_802E0D0
- ldr r2, [sp]
- cmp r0, 0
- beq _0802BE38
- ldr r1, =gLinkPlayers + 8
- add r1, r9
- adds r0, r7, 0
- bl StringCopy
- movs r0, 0x1
- strh r0, [r5]
- ldrh r0, [r6, 0x2]
- adds r0, 0x1
- strh r0, [r6, 0x2]
- movs r3, 0x2
- ldrsh r0, [r6, r3]
- ldr r2, [sp]
- mov r1, r8
- ldrb r1, [r1, 0x5]
- cmp r0, r1
- beq _0802BDBC
-_0802BE38:
- adds r5, 0x2
- movs r3, 0x1C
- add r9, r3
- adds r7, 0x28
- adds r4, 0xC
- adds r2, 0x1
- cmp r2, 0x4
- ble _0802BDFE
-_0802BE48:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_802BD84
-
- thumb_func_start sub_802BE60
-sub_802BE60: @ 802BE60
- push {lr}
- lsls r1, 24
- lsrs r1, 24
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gUnknown_02022CFC
- ldr r2, [r1]
- movs r1, 0xE
- bl SetWordTaskArg
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_802BE60
-
- thumb_func_start sub_802BE80
-sub_802BE80: @ 802BE80
- ldr r0, =gUnknown_02022CFC
- ldr r2, [r0]
- adds r0, r2, 0
- adds r0, 0x4A
- movs r1, 0
- strh r1, [r0]
- movs r0, 0x6
- str r0, [r2, 0x14]
- strh r1, [r2, 0x34]
- str r1, [r2, 0x1C]
- strh r1, [r2, 0x36]
- str r1, [r2, 0x10]
- bx lr
- .pool
- thumb_func_end sub_802BE80
-
- thumb_func_start sub_802BEA0
-sub_802BEA0: @ 802BEA0
- push {r4,lr}
- ldr r3, =gUnknown_02022CFC
- ldr r0, [r3]
- adds r1, r0, 0
- adds r1, 0x4A
- movs r4, 0
- movs r2, 0
- strh r2, [r1]
- ldr r1, =0x000006ff
- strh r1, [r0, 0x34]
- movs r1, 0x7
- str r1, [r0, 0x14]
- strh r2, [r0, 0x36]
- str r2, [r0, 0x10]
- adds r0, 0x51
- strb r4, [r0]
- ldr r0, [r3]
- adds r0, 0x50
- strb r4, [r0]
- ldr r0, [r3]
- str r2, [r0, 0x20]
- adds r1, r0, 0
- adds r1, 0x4E
- strh r2, [r1]
- str r2, [r0, 0x6C]
- bl sub_802BF7C
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_802BEA0
-
- thumb_func_start sub_802BEE4
-sub_802BEE4: @ 802BEE4
- push {r4,lr}
- ldr r4, =gUnknown_02022CFC
- ldr r1, [r4]
- adds r0, r1, 0
- adds r0, 0x46
- ldrb r0, [r0]
- cmp r0, 0
- beq _0802BF34
- adds r1, 0x4A
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- bl sub_802BF48
- ldr r3, [r4]
- ldrh r1, [r3, 0x34]
- adds r2, r1, r0
- strh r2, [r3, 0x34]
- lsls r1, r2, 16
- ldr r0, =0x09fe0000
- cmp r1, r0
- bls _0802BF16
- ldr r1, =0xfffff601
- adds r0, r2, r1
- strh r0, [r3, 0x34]
-_0802BF16:
- ldr r1, [r4]
- ldr r2, [r1, 0x14]
- str r2, [r1, 0x18]
- ldrh r0, [r1, 0x34]
- lsrs r0, 8
- str r0, [r1, 0x14]
- cmp r0, 0x6
- bls _0802BF34
- cmp r2, 0x6
- bhi _0802BF34
- ldrh r0, [r1, 0x36]
- adds r0, 0x1
- strh r0, [r1, 0x36]
- bl sub_802BF7C
-_0802BF34:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_802BEE4
-
- thumb_func_start sub_802BF48
-sub_802BF48: @ 802BF48
- push {lr}
- ldr r0, =gUnknown_02022CFC
- ldr r2, [r0]
- ldr r0, [r2, 0x10]
- cmp r0, 0
- beq _0802BF5C
- movs r0, 0
- b _0802BF72
- .pool
-_0802BF5C:
- ldr r3, [r2, 0x1C]
- ldrh r1, [r2, 0x34]
- ldr r0, =0x000005ff
- cmp r1, r0
- bhi _0802BF70
- ldr r0, [r2, 0x20]
- adds r0, 0x50
- str r0, [r2, 0x20]
- lsrs r0, 8
- adds r3, r0
-_0802BF70:
- adds r0, r3, 0
-_0802BF72:
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_802BF48
-
- thumb_func_start sub_802BF7C
-sub_802BF7C: @ 802BF7C
- push {r4,lr}
- ldr r4, =gUnknown_02022CFC
- ldr r3, [r4]
- movs r0, 0
- str r0, [r3, 0x20]
- adds r1, r3, 0
- adds r1, 0x4E
- ldrh r0, [r1]
- cmp r0, 0
- beq _0802BFC0
- subs r0, 0x1
- strh r0, [r1]
- ldr r0, [r3, 0x6C]
- cmp r0, 0
- beq _0802C08A
- bl sub_802C098
- movs r1, 0x3
- ands r1, r0
- cmp r1, 0
- beq _0802BFB0
- ldr r1, [r4]
- b _0802C086
- .pool
-_0802BFB0:
- ldr r1, [r4]
- ldr r0, [r1, 0x28]
- cmp r0, 0x36
- bls _0802BFBC
- movs r0, 0x1E
- b _0802C088
-_0802BFBC:
- movs r0, 0x52
- b _0802C088
-_0802BFC0:
- adds r2, r3, 0
- adds r2, 0x50
- ldrb r1, [r2]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _0802C014
- ldr r0, =gUnknown_082FB63C
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- adds r0, r3, 0
- adds r0, 0x51
- ldrb r2, [r0]
- lsls r0, r2, 3
- subs r0, r2
- ldrh r1, [r1]
- adds r0, r1
- str r0, [r3, 0x28]
- bl sub_802C098
- ldr r2, [r4]
- ldr r3, =gUnknown_082FB64C
- movs r1, 0x3
- ands r1, r0
- lsls r1, 1
- adds r1, r3
- ldrh r0, [r1]
- adds r0, 0x2
- adds r1, r2, 0
- adds r1, 0x4E
- strh r0, [r1]
- adds r2, 0x50
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
- b _0802C082
- .pool
-_0802C014:
- lsls r0, r1, 24
- lsrs r0, 24
- cmp r0, 0x8
- bne _0802C030
- adds r1, r3, 0
- adds r1, 0x51
- ldrb r0, [r1]
- cmp r0, 0x2
- bhi _0802C02C
- adds r0, 0x1
- strb r0, [r1]
- b _0802C030
-_0802C02C:
- movs r0, 0x1
- str r0, [r3, 0x6C]
-_0802C030:
- ldr r2, =gUnknown_082FB63C
- ldr r4, =gUnknown_02022CFC
- ldr r0, [r4]
- mov r12, r0
- mov r3, r12
- adds r3, 0x50
- ldrb r0, [r3]
- movs r1, 0xF
- subs r1, r0
- lsls r1, 1
- adds r1, r2
- mov r0, r12
- adds r0, 0x51
- ldrb r2, [r0]
- lsls r0, r2, 3
- subs r0, r2
- ldrh r1, [r1]
- adds r0, r1
- mov r1, r12
- str r0, [r1, 0x28]
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xF
- bls _0802C082
- bl sub_802C098
- movs r1, 0x3
- ands r1, r0
- cmp r1, 0
- bne _0802C07A
- ldr r1, [r4]
- ldr r0, [r1, 0x28]
- subs r0, 0x5
- str r0, [r1, 0x28]
-_0802C07A:
- ldr r0, [r4]
- adds r0, 0x50
- movs r1, 0
- strb r1, [r0]
-_0802C082:
- ldr r0, =gUnknown_02022CFC
- ldr r1, [r0]
-_0802C086:
- ldr r0, [r1, 0x28]
-_0802C088:
- str r0, [r1, 0x1C]
-_0802C08A:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_802BF7C
-
- thumb_func_start sub_802C098
-sub_802C098: @ 802C098
- ldr r0, =gUnknown_02022CFC
- ldr r2, [r0]
- ldr r1, [r2, 0x24]
- ldr r0, =0x41c64e6d
- muls r0, r1
- ldr r1, =0x00006073
- adds r0, r1
- str r0, [r2, 0x24]
- lsrs r0, 16
- bx lr
- .pool
- thumb_func_end sub_802C098
-
- thumb_func_start sub_802C0B8
-sub_802C0B8: @ 802C0B8
- push {lr}
- ldr r0, =gUnknown_02022CFC
- ldr r1, [r0]
- movs r0, 0x1
- str r0, [r1, 0x10]
- movs r0, 0x6
- str r0, [r1, 0x14]
- ldr r0, =0x000005ff
- strh r0, [r1, 0x34]
- bl sub_802C270
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_802C0B8
-
- thumb_func_start sub_802C0DC
-sub_802C0DC: @ 802C0DC
- ldr r0, =gUnknown_02022CFC
- ldr r0, [r0]
- ldr r0, [r0, 0x10]
- bx lr
- .pool
- thumb_func_end sub_802C0DC
-
- thumb_func_start sub_802C0E8
-sub_802C0E8: @ 802C0E8
- push {r4,r5,lr}
- ldr r5, =gUnknown_02022CFC
- ldr r4, =0x000082f8
- movs r3, 0
- movs r2, 0
- movs r1, 0x4
-_0802C0F4:
- ldr r0, [r5]
- adds r0, r4
- adds r0, r2
- str r3, [r0]
- adds r2, 0x28
- subs r1, 0x1
- cmp r1, 0
- bge _0802C0F4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_802C0E8
-
- thumb_func_start sub_802C114
-sub_802C114: @ 802C114
- ldr r0, =gUnknown_02022CFC
- ldr r0, [r0]
- ldr r1, =0x000083ac
- adds r0, r1
- ldr r1, [r0]
- movs r2, 0
- strh r2, [r1, 0x10]
- ldr r0, [r0]
- strh r2, [r0, 0x12]
- bx lr
- .pool
- thumb_func_end sub_802C114
-
- thumb_func_start sub_802C130
-sub_802C130: @ 802C130
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =gUnknown_02022CFC
- ldr r2, [r1]
- ldrb r3, [r2, 0x6]
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 3
- adds r2, r1
- ldr r1, =0x000082f4
- adds r2, r1
- ldrh r1, [r2]
- cmp r1, r0
- beq _0802C15C
- movs r0, 0
- b _0802C15E
- .pool
-_0802C15C:
- movs r0, 0x1
-_0802C15E:
- pop {r1}
- bx r1
- thumb_func_end sub_802C130
-
- thumb_func_start sub_802C164
-sub_802C164: @ 802C164
- ldr r0, =gUnknown_02022CFC
- ldr r0, [r0]
- ldr r1, =0x000083ac
- adds r2, r0, r1
- ldr r1, [r2]
- adds r0, 0x4A
- ldrh r0, [r0]
- strh r0, [r1, 0xE]
- ldr r1, [r2]
- ldrh r0, [r1, 0x10]
- strh r0, [r1, 0x12]
- ldr r1, [r2]
- movs r0, 0x1
- strh r0, [r1, 0x10]
- bx lr
- .pool
- thumb_func_end sub_802C164
-
- thumb_func_start sub_802C18C
-sub_802C18C: @ 802C18C
- push {r4,lr}
- ldr r0, =gUnknown_02022CFC
- ldr r2, [r0]
- ldr r0, =0x000083ac
- adds r3, r2, r0
- ldr r1, [r3]
- ldrh r0, [r1, 0x10]
- strh r0, [r1, 0x12]
- ldr r0, [r3]
- movs r4, 0x2
- strh r4, [r0, 0x10]
- ldr r1, [r3]
- adds r2, 0x4A
- ldrh r0, [r2]
- strh r0, [r1, 0xE]
- ldr r0, [r3]
- str r4, [r0, 0x14]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_802C18C
-
- thumb_func_start sub_802C1BC
-sub_802C1BC: @ 802C1BC
- ldr r0, =gUnknown_02022CFC
- ldr r0, [r0]
- ldr r1, =0x000083ac
- adds r0, r1
- ldr r1, [r0]
- ldrh r2, [r1, 0x10]
- movs r3, 0
- strh r2, [r1, 0x12]
- ldr r0, [r0]
- strh r3, [r0, 0x10]
- bx lr
- .pool
- thumb_func_end sub_802C1BC
-
thumb_func_start sub_802C1DC
sub_802C1DC: @ 802C1DC
push {r4,r5,lr}
diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c
index 2ef81bd19..d893768f9 100755
--- a/src/pokemon_jump.c
+++ b/src/pokemon_jump.c
@@ -9,6 +9,7 @@
#include "save.h"
#include "sound.h"
#include "sprite.h"
+#include "string_util.h"
#include "task.h"
#include "pokemon.h"
#include "pokemon_jump.h"
@@ -34,7 +35,7 @@ struct PokemonJump1_82E4
u16 unk12;
int unk14;
int unk18;
- u8 filler1C[0xC];
+ u8 unk1C[11];
};
struct PokemonJump1
@@ -48,16 +49,16 @@ struct PokemonJump1
u16 unkA;
u16 unkC;
u16 unkE;
- u8 filler10[0x4];
- int unk14;
- int unk18;
+ int unk10;
+ u32 unk14;
+ u32 unk18;
int unk1C;
- u8 filler20[0x4];
- int unk24;
- u8 filler28[0x4];
+ u32 unk20;
+ u32 unk24;
+ u32 unk28;
int unk2C;
u32 unk30;
- u8 filler34[0x2];
+ u16 unk34;
u16 unk36;
u8 filler38[0x2];
u16 unk3A;
@@ -74,7 +75,10 @@ struct PokemonJump1
u16 unk4A;
u8 unk4C;
u8 unk4D;
- u8 filler4E[0x6];
+ u16 unk4E;
+ u8 unk50;
+ u8 unk51;
+ u8 filler52[0x2];
int unk54;
int unk58;
int unk5C;
@@ -87,15 +91,15 @@ struct PokemonJump1
u16 unk72;
u16 unk74;
int unk78;
- u8 unk7C[5];
+ u8 unk7C[MAX_RFU_PLAYERS];
u8 filler81[0xA];
- u8 unk8B[5];
- u16 unk90[5];
- u16 unk9A[5];
+ u8 unk8B[MAX_RFU_PLAYERS];
+ u16 unk90[MAX_RFU_PLAYERS];
+ u16 unk9A[MAX_RFU_PLAYERS];
void **unkA4;
u8 fillerA8[0x8200];
- struct PokemonJump1_MonInfo unk82A8[5];
- struct PokemonJump1_82E4 unk82E4[5];
+ struct PokemonJump1_MonInfo unk82A8[MAX_RFU_PLAYERS];
+ struct PokemonJump1_82E4 unk82E4[MAX_RFU_PLAYERS];
struct PokemonJump1_82E4 *unk83AC;
};
@@ -150,17 +154,20 @@ static bool32 sub_802BA58(void);
static bool32 sub_802BB84(void);
static bool32 sub_802BC60(void);
static bool32 sub_802BD30(void);
-void sub_802BD84(u8 taskId);
-void sub_802BE60(TaskFunc func, u8 taskPriority);
-void sub_802BE80(void);
-void sub_802BEA0(void);
-void sub_802BEE4(void);
-void sub_802C0B8(void);
-void sub_802C0E8(void);
-void sub_802C114(void);
-void sub_802C164(void);
+static void sub_802BD84(u8 taskId);
+static void sub_802BE60(TaskFunc func, u8 taskPriority);
+static void sub_802BE80(void);
+static void sub_802BEA0(void);
+static void sub_802BEE4(void);
+static int sub_802BF48(void);
+static void sub_802BF7C(void);
+static int sub_802C098(void);
+static void sub_802C0B8(void);
+static void sub_802C0E8(void);
+static void sub_802C114(void);
+static bool32 sub_802C130(u16);
+static void sub_802C164(void);
void sub_802C1DC(void);
-bool32 sub_802C130(u16);
void sub_802C260(void);
void sub_802C270(void);
void sub_802C43C(void);
@@ -192,6 +199,8 @@ void sub_802DDCC(void);
void sub_802DDE0(void);
void sub_802DDF4(int);
int sub_802DE08(void);
+void sub_802E0AC(struct PokemonJump1_MonInfo *);
+bool32 sub_802E0D0(int, struct PokemonJump1_MonInfo *);
void sub_802E138(struct PokemonJump1_82E4 *, u8 *);
bool32 sub_802E1BC(struct PokemonJump1_82E4 *, struct Unk802B078 *);
void sub_802E234(struct PokemonJump1_82E4 *, u8 , u16);
@@ -332,6 +341,9 @@ bool32 (* const gUnknown_082FB618[])(void) =
sub_802B720,
};
+extern const u16 gUnknown_082FB63C[];
+extern const u16 gUnknown_082FB64C[4];
+
void sub_802A9A8(u16 partyIndex, MainCallback callback)
{
u8 taskId;
@@ -408,7 +420,7 @@ void sub_802AA94(struct PokemonJump1 *arg0)
sub_802AB98();
sub_802C0E8();
- for (i = 0; i < 5; i++)
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
arg0->unk7C[i] = 0;
arg0->unk9A[i] = 0;
@@ -421,7 +433,7 @@ void sub_802AB20(void)
int i;
s16 index;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
index = sub_802AC00(gUnknown_02022CFC->unk82A8[i].species);
gUnknown_02022CFC->unk82E4[i].unkC = gPkmnJumpSpecies[index].unk2;
@@ -489,7 +501,7 @@ static void sub_802AB98(void)
{
int i;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
gUnknown_02022CFC->unk82E4[i].unkE = 0;
gUnknown_02022CFC->unk82E4[i].unk10 = 0;
@@ -1464,3 +1476,223 @@ static bool32 sub_802BD30(void)
return TRUE;
}
+
+static void sub_802BD84(u8 taskId)
+{
+ int i;
+ s16 *taskData = gTasks[taskId].data;
+ struct PokemonJump1 *ptr = (struct PokemonJump1 *)GetWordTaskArg(taskId, 14);
+
+ switch (taskData[0])
+ {
+ case 0:
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ taskData[i + 2] = 0;
+
+ taskData[0]++;
+ // fall through
+ case 1:
+ sub_802E0AC(&ptr->unk82A8[ptr->unk6]);
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ {
+ if (!taskData[i + 2] && sub_802E0D0(i, &ptr->unk82A8[i]))
+ {
+ StringCopy(ptr->unk82E4[i].unk1C, gLinkPlayers[i].name);
+ taskData[i + 2] = 1;
+ taskData[1]++;
+ if (taskData[1] == ptr->unk5)
+ {
+ sub_802AB20();
+ DestroyTask(taskId);
+ break;
+ }
+ }
+ }
+ break;
+ }
+}
+
+static void sub_802BE60(TaskFunc func, u8 taskPriority)
+{
+ u8 taskId = CreateTask(func, taskPriority);
+ SetWordTaskArg(taskId, 14, (u32)gUnknown_02022CFC);
+}
+
+static void sub_802BE80(void)
+{
+ gUnknown_02022CFC->unk4A = 0;
+ gUnknown_02022CFC->unk14 = 6;
+ gUnknown_02022CFC->unk34 = 0;
+ gUnknown_02022CFC->unk1C = 0;
+ gUnknown_02022CFC->unk36 = 0;
+ gUnknown_02022CFC->unk10 = 0;
+}
+
+static void sub_802BEA0(void)
+{
+ gUnknown_02022CFC->unk4A = 0;
+ gUnknown_02022CFC->unk34 = 0x6FF;
+ gUnknown_02022CFC->unk14 = 7;
+ gUnknown_02022CFC->unk36 = 0;
+ gUnknown_02022CFC->unk10 = 0;
+ gUnknown_02022CFC->unk51 = 0;
+ gUnknown_02022CFC->unk50 = 0;
+ gUnknown_02022CFC->unk20 = 0;
+ gUnknown_02022CFC->unk4E = 0;
+ gUnknown_02022CFC->unk6C = 0;
+ sub_802BF7C();
+}
+
+static void sub_802BEE4(void)
+{
+ if (gUnknown_02022CFC->unk46)
+ {
+ gUnknown_02022CFC->unk4A++;
+ gUnknown_02022CFC->unk34 += sub_802BF48();
+ if (gUnknown_02022CFC->unk34 >= 0x9FF)
+ gUnknown_02022CFC->unk34 -= 0x9FF;
+
+ gUnknown_02022CFC->unk18 = gUnknown_02022CFC->unk14;
+ gUnknown_02022CFC->unk14 = gUnknown_02022CFC->unk34 >> 8;
+ if (gUnknown_02022CFC->unk14 > 6 && gUnknown_02022CFC->unk18 < 7)
+ {
+ gUnknown_02022CFC->unk36++;
+ sub_802BF7C();
+ }
+ }
+}
+
+static int sub_802BF48(void)
+{
+ int result;
+
+ if (gUnknown_02022CFC->unk10)
+ return 0;
+
+ result = gUnknown_02022CFC->unk1C;
+ if (gUnknown_02022CFC->unk34 <= 0x5FF)
+ {
+ gUnknown_02022CFC->unk20 += 80;
+ result += gUnknown_02022CFC->unk20 >> 8;
+ }
+
+ return result;
+}
+
+static void sub_802BF7C(void)
+{
+ int var0;
+
+ gUnknown_02022CFC->unk20 = 0;
+ if (gUnknown_02022CFC->unk4E)
+ {
+ gUnknown_02022CFC->unk4E--;
+ if (gUnknown_02022CFC->unk6C)
+ {
+ if (sub_802C098() % 4 != 0)
+ {
+ gUnknown_02022CFC->unk1C = gUnknown_02022CFC->unk28;
+ }
+ else
+ {
+ if (gUnknown_02022CFC->unk28 > 54)
+ gUnknown_02022CFC->unk1C = 30;
+ else
+ gUnknown_02022CFC->unk1C = 82;
+ }
+ }
+ }
+ else
+ {
+ if (!(gUnknown_02022CFC->unk50 & 8))
+ {
+ gUnknown_02022CFC->unk28 = gUnknown_082FB63C[gUnknown_02022CFC->unk50] + (gUnknown_02022CFC->unk51 * 7);
+ gUnknown_02022CFC->unk4E = gUnknown_082FB64C[sub_802C098() % ARRAY_COUNT(gUnknown_082FB64C)] + 2;
+ gUnknown_02022CFC->unk50++;
+ }
+ else
+ {
+ if (gUnknown_02022CFC->unk50 == 8)
+ {
+ if (gUnknown_02022CFC->unk51 < 3)
+ gUnknown_02022CFC->unk51++;
+ else
+ gUnknown_02022CFC->unk6C = 1;
+ }
+
+ var0 = gUnknown_082FB63C[15 - gUnknown_02022CFC->unk50];
+ gUnknown_02022CFC->unk28 = var0 + (gUnknown_02022CFC->unk51 * 7);
+ if (++gUnknown_02022CFC->unk50 > 15)
+ {
+ if (sub_802C098() % 4 == 0)
+ gUnknown_02022CFC->unk28 -= 5;
+
+ gUnknown_02022CFC->unk50 = 0;
+ }
+ }
+
+ gUnknown_02022CFC->unk1C = gUnknown_02022CFC->unk28;
+ }
+}
+
+static int sub_802C098(void)
+{
+ // The number 1103515245 comes from the example implementation of rand and srand
+ gUnknown_02022CFC->unk24 = gUnknown_02022CFC->unk24 * 1103515245 + 24691;
+ return gUnknown_02022CFC->unk24 >> 16;
+}
+
+static void sub_802C0B8(void)
+{
+ gUnknown_02022CFC->unk10 = 1;
+ gUnknown_02022CFC->unk14 = 6;
+ gUnknown_02022CFC->unk34 = 0x5FF;
+ sub_802C270();
+}
+
+int sub_802C0DC(void)
+{
+ return gUnknown_02022CFC->unk10;
+}
+
+static void sub_802C0E8(void)
+{
+ int i;
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ gUnknown_02022CFC->unk82E4[i].unk14 = 0;
+}
+
+static void sub_802C114(void)
+{
+ gUnknown_02022CFC->unk83AC->unk10 = 0;
+ gUnknown_02022CFC->unk83AC->unk12 = 0;
+}
+
+static bool32 sub_802C130(u16 arg0)
+{
+ if (gUnknown_02022CFC->unk82E4[gUnknown_02022CFC->unk6].unk10 == arg0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void sub_802C164(void)
+{
+ gUnknown_02022CFC->unk83AC->unkE = gUnknown_02022CFC->unk4A;
+ gUnknown_02022CFC->unk83AC->unk12 = gUnknown_02022CFC->unk83AC->unk10;
+ gUnknown_02022CFC->unk83AC->unk10 = 1;
+}
+
+void sub_802C18C(void)
+{
+ gUnknown_02022CFC->unk83AC->unk12 = gUnknown_02022CFC->unk83AC->unk10;
+ gUnknown_02022CFC->unk83AC->unk10 = 2;
+ gUnknown_02022CFC->unk83AC->unkE = gUnknown_02022CFC->unk4A;
+ gUnknown_02022CFC->unk83AC->unk14 = 2;
+}
+
+void sub_802C1BC(void)
+{
+ gUnknown_02022CFC->unk83AC->unk12 = gUnknown_02022CFC->unk83AC->unk10;
+ gUnknown_02022CFC->unk83AC->unk10 = 0;
+}