diff options
| -rwxr-xr-x | asm/pokemon_jump.s | 570 | ||||
| -rwxr-xr-x | src/pokemon_jump.c | 288 | 
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; +} | 
