summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/contest.s2
-rw-r--r--asm/rom3.s619
-rw-r--r--asm/rom_800D42C.s2
-rw-r--r--include/link.h6
-rw-r--r--ld_script.txt1
-rw-r--r--src/battle_anim.c2
-rw-r--r--src/rom3.c257
7 files changed, 264 insertions, 625 deletions
diff --git a/asm/contest.s b/asm/contest.s
index c98f5db0d..8a8a65edb 100644
--- a/asm/contest.s
+++ b/asm/contest.s
@@ -15034,7 +15034,7 @@ sub_80B2790: @ 80B2790
movs r1, 0
movs r2, 0x14
bl memset
- bl sub_8075624
+ bl battle_anim_clear_some_data
ldr r1, _080B27F8 @ =gUnknown_02024E84
movs r2, 0
adds r0, r1, 0x3
diff --git a/asm/rom3.s b/asm/rom3.s
index 94862459b..1717e3688 100644
--- a/asm/rom3.s
+++ b/asm/rom3.s
@@ -6,625 +6,6 @@
.text
- thumb_func_start sub_800B858
-sub_800B858: @ 800B858
- push {lr}
- ldr r0, _0800B87C @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0800B876
- bl OpenLink
- ldr r0, _0800B880 @ =sub_8083C50
- movs r1, 0
- bl CreateTask
- bl sub_800BF28
-_0800B876:
- pop {r0}
- bx r0
- .align 2, 0
-_0800B87C: .4byte gBattleTypeFlags
-_0800B880: .4byte sub_8083C50
- thumb_func_end sub_800B858
-
- thumb_func_start sub_800B884
-sub_800B884: @ 800B884
- push {r4-r7,lr}
- sub sp, 0x14
- ldr r0, _0800B920 @ =gUnknown_030042D4
- ldr r1, _0800B924 @ =nullsub_41
- str r1, [r0]
- movs r0, 0
- str r0, [sp, 0x10]
- movs r1, 0
- ldr r7, _0800B928 @ =gUnknown_03004330
- ldr r6, _0800B92C @ =gUnknown_02024E60
- movs r2, 0
- ldr r5, _0800B930 @ =gUnknown_02024E64
- ldr r4, _0800B934 @ =nullsub_91
- ldr r3, _0800B938 @ =gUnknown_02024A72
-_0800B8A0:
- lsls r0, r1, 2
- adds r0, r7
- str r4, [r0]
- adds r1, r3
- movs r0, 0xFF
- strb r0, [r1]
- ldr r0, [sp, 0x10]
- adds r0, r6
- strb r2, [r0]
- ldr r0, [sp, 0x10]
- adds r0, r5
- strb r2, [r0]
- ldr r0, [sp, 0x10]
- adds r0, 0x1
- str r0, [sp, 0x10]
- adds r1, r0, 0
- cmp r1, 0x3
- ble _0800B8A0
- bl sub_800B858
- ldr r0, _0800B93C @ =gUnknown_02024A64
- movs r5, 0
- str r5, [r0]
- bl sub_8075624
- bl sub_8040710
- bl BattleAI_HandleItemUseBeforeAISetup
- ldr r0, _0800B940 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0800B90E
- bl ZeroEnemyPartyMons
- ldr r4, _0800B944 @ =gEnemyParty
- movs r1, 0x8F
- lsls r1, 1
- str r5, [sp]
- str r5, [sp, 0x4]
- str r5, [sp, 0x8]
- str r5, [sp, 0xC]
- adds r0, r4, 0
- movs r2, 0x2
- movs r3, 0x20
- bl CreateMon
- str r5, [sp, 0x10]
- adds r0, r4, 0
- movs r1, 0xC
- add r2, sp, 0x10
- bl SetMonData
-_0800B90E:
- ldr r0, _0800B948 @ =gUnknown_020239FC
- str r5, [r0]
- ldr r0, _0800B94C @ =gUnknown_02024C78
- strb r5, [r0]
- add sp, 0x14
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800B920: .4byte gUnknown_030042D4
-_0800B924: .4byte nullsub_41
-_0800B928: .4byte gUnknown_03004330
-_0800B92C: .4byte gUnknown_02024E60
-_0800B930: .4byte gUnknown_02024E64
-_0800B934: .4byte nullsub_91
-_0800B938: .4byte gUnknown_02024A72
-_0800B93C: .4byte gUnknown_02024A64
-_0800B940: .4byte gBattleTypeFlags
-_0800B944: .4byte gEnemyParty
-_0800B948: .4byte gUnknown_020239FC
-_0800B94C: .4byte gUnknown_02024C78
- thumb_func_end sub_800B884
-
- thumb_func_start sub_800B950
-sub_800B950: @ 800B950
- push {r4,r5,lr}
- ldr r0, _0800B964 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0800B968
- bl sub_800BA78
- b _0800B96C
- .align 2, 0
-_0800B964: .4byte gBattleTypeFlags
-_0800B968:
- bl sub_800B9A8
-_0800B96C:
- bl sub_800BD54
- ldr r0, _0800B9A0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0800B99A
- movs r4, 0
- ldr r0, _0800B9A4 @ =gUnknown_02024A68
- ldrb r1, [r0]
- cmp r4, r1
- bge _0800B99A
- adds r5, r0, 0
-_0800B988:
- lsls r0, r4, 24
- lsrs r0, 24
- movs r1, 0
- bl sub_8094978
- adds r4, 0x1
- ldrb r0, [r5]
- cmp r4, r0
- blt _0800B988
-_0800B99A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0800B9A0: .4byte gBattleTypeFlags
-_0800B9A4: .4byte gUnknown_02024A68
- thumb_func_end sub_800B950
-
- thumb_func_start sub_800B9A8
-sub_800B9A8: @ 800B9A8
- push {r4,lr}
- ldr r0, _0800B9CC @ =gBattleTypeFlags
- ldrh r2, [r0]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- bne _0800BA28
- ldr r1, _0800B9D0 @ =gUnknown_030042D4
- ldr r0, _0800B9D4 @ =sub_8010800
- str r0, [r1]
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _0800B9E0
- ldr r1, _0800B9D8 @ =gUnknown_03004330
- ldr r0, _0800B9DC @ =sub_812B468
- b _0800B9FC
- .align 2, 0
-_0800B9CC: .4byte gBattleTypeFlags
-_0800B9D0: .4byte gUnknown_030042D4
-_0800B9D4: .4byte sub_8010800
-_0800B9D8: .4byte gUnknown_03004330
-_0800B9DC: .4byte sub_812B468
-_0800B9E0:
- movs r0, 0x80
- lsls r0, 2
- ands r0, r2
- cmp r0, 0
- beq _0800B9F8
- ldr r1, _0800B9F0 @ =gUnknown_03004330
- ldr r0, _0800B9F4 @ =sub_8137224
- b _0800B9FC
- .align 2, 0
-_0800B9F0: .4byte gUnknown_03004330
-_0800B9F4: .4byte sub_8137224
-_0800B9F8:
- ldr r1, _0800BA14 @ =gUnknown_03004330
- ldr r0, _0800BA18 @ =sub_802BF74
-_0800B9FC:
- str r0, [r1]
- adds r2, r1, 0
- ldr r1, _0800BA1C @ =gUnknown_02024A72
- movs r0, 0
- strb r0, [r1]
- ldr r0, _0800BA20 @ =sub_8032AE0
- str r0, [r2, 0x4]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- ldr r1, _0800BA24 @ =gUnknown_02024A68
- movs r0, 0x2
- b _0800BA52
- .align 2, 0
-_0800BA14: .4byte gUnknown_03004330
-_0800BA18: .4byte sub_802BF74
-_0800BA1C: .4byte gUnknown_02024A72
-_0800BA20: .4byte sub_8032AE0
-_0800BA24: .4byte gUnknown_02024A68
-_0800BA28:
- ldr r1, _0800BA5C @ =gUnknown_030042D4
- ldr r0, _0800BA60 @ =sub_8010800
- str r0, [r1]
- ldr r2, _0800BA64 @ =gUnknown_03004330
- ldr r4, _0800BA68 @ =sub_802BF74
- str r4, [r2]
- ldr r1, _0800BA6C @ =gUnknown_02024A72
- movs r0, 0
- strb r0, [r1]
- ldr r3, _0800BA70 @ =sub_8032AE0
- str r3, [r2, 0x4]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- str r4, [r2, 0x8]
- movs r0, 0x2
- strb r0, [r1, 0x2]
- str r3, [r2, 0xC]
- movs r0, 0x3
- strb r0, [r1, 0x3]
- ldr r1, _0800BA74 @ =gUnknown_02024A68
- movs r0, 0x4
-_0800BA52:
- strb r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0800BA5C: .4byte gUnknown_030042D4
-_0800BA60: .4byte sub_8010800
-_0800BA64: .4byte gUnknown_03004330
-_0800BA68: .4byte sub_802BF74
-_0800BA6C: .4byte gUnknown_02024A72
-_0800BA70: .4byte sub_8032AE0
-_0800BA74: .4byte gUnknown_02024A68
- thumb_func_end sub_800B9A8
-
- thumb_func_start sub_800BA78
-sub_800BA78: @ 800BA78
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r6, _0800BAB8 @ =gBattleTypeFlags
- ldrh r1, [r6]
- movs r5, 0x1
- movs r4, 0x1
- ands r4, r1
- cmp r4, 0
- bne _0800BB04
- movs r0, 0x4
- ands r0, r1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0
- beq _0800BAD8
- ldr r1, _0800BABC @ =gUnknown_030042D4
- ldr r0, _0800BAC0 @ =sub_8010800
- str r0, [r1]
- ldr r2, _0800BAC4 @ =gUnknown_03004330
- ldr r0, _0800BAC8 @ =sub_802BF74
- str r0, [r2]
- ldr r1, _0800BACC @ =gUnknown_02024A72
- strb r4, [r1]
- ldr r0, _0800BAD0 @ =sub_8037510
- str r0, [r2, 0x4]
- strb r5, [r1, 0x1]
- ldr r1, _0800BAD4 @ =gUnknown_02024A68
- movs r0, 0x2
- b _0800BD3E
- .align 2, 0
-_0800BAB8: .4byte gBattleTypeFlags
-_0800BABC: .4byte gUnknown_030042D4
-_0800BAC0: .4byte sub_8010800
-_0800BAC4: .4byte gUnknown_03004330
-_0800BAC8: .4byte sub_802BF74
-_0800BACC: .4byte gUnknown_02024A72
-_0800BAD0: .4byte sub_8037510
-_0800BAD4: .4byte gUnknown_02024A68
-_0800BAD8:
- ldr r2, _0800BAF0 @ =gUnknown_03004330
- ldr r0, _0800BAF4 @ =sub_802BF74
- str r0, [r2, 0x4]
- ldr r1, _0800BAF8 @ =gUnknown_02024A72
- strb r3, [r1, 0x1]
- ldr r0, _0800BAFC @ =sub_8037510
- str r0, [r2]
- strb r5, [r1]
- ldr r1, _0800BB00 @ =gUnknown_02024A68
- movs r0, 0x2
- b _0800BD3E
- .align 2, 0
-_0800BAF0: .4byte gUnknown_03004330
-_0800BAF4: .4byte sub_802BF74
-_0800BAF8: .4byte gUnknown_02024A72
-_0800BAFC: .4byte sub_8037510
-_0800BB00: .4byte gUnknown_02024A68
-_0800BB04:
- movs r0, 0x41
- ands r0, r1
- cmp r0, 0x1
- bne _0800BB90
- movs r6, 0x4
- movs r0, 0x4
- ands r0, r1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0
- beq _0800BB58
- ldr r1, _0800BB40 @ =gUnknown_030042D4
- ldr r0, _0800BB44 @ =sub_8010800
- str r0, [r1]
- ldr r2, _0800BB48 @ =gUnknown_03004330
- ldr r4, _0800BB4C @ =sub_802BF74
- str r4, [r2]
- ldr r1, _0800BB50 @ =gUnknown_02024A72
- movs r0, 0
- strb r0, [r1]
- ldr r3, _0800BB54 @ =sub_8037510
- str r3, [r2, 0x4]
- strb r5, [r1, 0x1]
- str r4, [r2, 0x8]
- movs r0, 0x2
- strb r0, [r1, 0x2]
- str r3, [r2, 0xC]
- movs r0, 0x3
- strb r0, [r1, 0x3]
- b _0800BB74
- .align 2, 0
-_0800BB40: .4byte gUnknown_030042D4
-_0800BB44: .4byte sub_8010800
-_0800BB48: .4byte gUnknown_03004330
-_0800BB4C: .4byte sub_802BF74
-_0800BB50: .4byte gUnknown_02024A72
-_0800BB54: .4byte sub_8037510
-_0800BB58:
- ldr r2, _0800BB7C @ =gUnknown_03004330
- ldr r0, _0800BB80 @ =sub_802BF74
- str r0, [r2, 0x4]
- ldr r1, _0800BB84 @ =gUnknown_02024A72
- strb r3, [r1, 0x1]
- ldr r3, _0800BB88 @ =sub_8037510
- str r3, [r2]
- strb r5, [r1]
- str r0, [r2, 0xC]
- movs r0, 0x2
- strb r0, [r1, 0x3]
- str r3, [r2, 0x8]
- movs r0, 0x3
- strb r0, [r1, 0x2]
-_0800BB74:
- ldr r0, _0800BB8C @ =gUnknown_02024A68
- strb r6, [r0]
- b _0800BD40
- .align 2, 0
-_0800BB7C: .4byte gUnknown_03004330
-_0800BB80: .4byte sub_802BF74
-_0800BB84: .4byte gUnknown_02024A72
-_0800BB88: .4byte sub_8037510
-_0800BB8C: .4byte gUnknown_02024A68
-_0800BB90:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r5, r0, 24
- ldrh r1, [r6]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0800BBA8
- ldr r1, _0800BBD0 @ =gUnknown_030042D4
- ldr r0, _0800BBD4 @ =sub_8010800
- str r0, [r1]
-_0800BBA8:
- movs r0, 0
- mov r10, r0
- ldr r1, _0800BBD8 @ =gLinkPlayers
- mov r12, r1
- ldr r7, _0800BBDC @ =gUnknown_02024A72
- mov r8, r0
- ldr r6, _0800BBE0 @ =gUnknown_02024A6A
- movs r4, 0
- movs r2, 0x3
- mov r9, r2
-_0800BBBC:
- mov r1, r12
- adds r0, r4, r1
- ldrh r0, [r0, 0x18]
- cmp r0, 0x2
- bgt _0800BBE4
- cmp r0, 0x1
- bge _0800BBFC
- cmp r0, 0
- beq _0800BBE8
- b _0800BC06
- .align 2, 0
-_0800BBD0: .4byte gUnknown_030042D4
-_0800BBD4: .4byte sub_8010800
-_0800BBD8: .4byte gLinkPlayers
-_0800BBDC: .4byte gUnknown_02024A72
-_0800BBE0: .4byte gUnknown_02024A6A
-_0800BBE4:
- cmp r0, 0x3
- bne _0800BC06
-_0800BBE8:
- ldr r0, _0800BBF8 @ =gLinkPlayers
- adds r0, r4, r0
- ldrb r0, [r0, 0x18]
- movs r1, 0
- bl sub_8094978
- b _0800BC06
- .align 2, 0
-_0800BBF8: .4byte gLinkPlayers
-_0800BBFC:
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_8094978
-_0800BC06:
- cmp r10, r5
- bne _0800BC56
- ldr r0, _0800BC2C @ =gLinkPlayers
- adds r3, r4, r0
- ldrh r1, [r3, 0x18]
- lsls r1, 2
- ldr r2, _0800BC30 @ =gUnknown_03004330
- adds r1, r2
- ldr r2, _0800BC34 @ =sub_802BF74
- str r2, [r1]
- ldrh r1, [r3, 0x18]
- mov r12, r0
- cmp r1, 0x2
- bgt _0800BC38
- cmp r1, 0x1
- bge _0800BC4C
- cmp r1, 0
- beq _0800BC3C
- b _0800BD2C
- .align 2, 0
-_0800BC2C: .4byte gLinkPlayers
-_0800BC30: .4byte gUnknown_03004330
-_0800BC34: .4byte sub_802BF74
-_0800BC38:
- cmp r1, 0x3
- bne _0800BD2C
-_0800BC3C:
- mov r1, r12
- adds r0, r4, r1
- ldrh r1, [r0, 0x18]
- adds r1, r7
- mov r2, r8
- strb r2, [r1]
- ldrh r0, [r0, 0x18]
- b _0800BD12
-_0800BC4C:
- adds r1, r7
- movs r0, 0x2
- strb r0, [r1]
- ldrh r0, [r3, 0x18]
- b _0800BD24
-_0800BC56:
- ldr r2, _0800BC7C @ =gLinkPlayers
- adds r0, r4, r2
- ldrh r1, [r0, 0x18]
- movs r3, 0x1
- adds r0, r3, 0
- ands r0, r1
- mov r12, r2
- cmp r0, 0
- bne _0800BC80
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- add r0, r12
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800BC92
- b _0800BCD8
- .align 2, 0
-_0800BC7C: .4byte gLinkPlayers
-_0800BC80:
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- add r0, r12
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800BCD8
-_0800BC92:
- mov r0, r12
- adds r2, r4, r0
- ldrh r0, [r2, 0x18]
- lsls r0, 2
- ldr r1, _0800BCB4 @ =gUnknown_03004330
- adds r0, r1
- ldr r1, _0800BCB8 @ =sub_811DA78
- str r1, [r0]
- ldrh r1, [r2, 0x18]
- cmp r1, 0x2
- bgt _0800BCBC
- cmp r1, 0x1
- bge _0800BCD0
- cmp r1, 0
- beq _0800BCC0
- b _0800BD2C
- .align 2, 0
-_0800BCB4: .4byte gUnknown_03004330
-_0800BCB8: .4byte sub_811DA78
-_0800BCBC:
- cmp r1, 0x3
- bne _0800BD2C
-_0800BCC0:
- mov r2, r12
- adds r0, r4, r2
- ldrh r1, [r0, 0x18]
- adds r1, r7
- mov r2, r8
- strb r2, [r1]
- ldrh r0, [r0, 0x18]
- b _0800BD12
-_0800BCD0:
- adds r1, r7
- movs r0, 0x2
- strb r0, [r1]
- b _0800BD22
-_0800BCD8:
- mov r0, r12
- adds r2, r4, r0
- ldrh r0, [r2, 0x18]
- lsls r0, 2
- ldr r1, _0800BCF8 @ =gUnknown_03004330
- adds r0, r1
- ldr r1, _0800BCFC @ =sub_8037510
- str r1, [r0]
- ldrh r0, [r2, 0x18]
- cmp r0, 0x2
- bgt _0800BD00
- cmp r0, 0x1
- bge _0800BD1C
- cmp r0, 0
- beq _0800BD04
- b _0800BD2C
- .align 2, 0
-_0800BCF8: .4byte gUnknown_03004330
-_0800BCFC: .4byte sub_8037510
-_0800BD00:
- cmp r0, 0x3
- bne _0800BD2C
-_0800BD04:
- mov r0, r12
- adds r2, r4, r0
- ldrh r0, [r2, 0x18]
- adds r0, r7
- movs r1, 0x1
- strb r1, [r0]
- ldrh r0, [r2, 0x18]
-_0800BD12:
- lsls r0, 1
- adds r0, r6
- mov r1, r8
- strh r1, [r0]
- b _0800BD2C
-_0800BD1C:
- adds r0, r7
- mov r1, r9
- strb r1, [r0]
-_0800BD22:
- ldrh r0, [r2, 0x18]
-_0800BD24:
- lsls r0, 1
- adds r0, r6
- mov r2, r9
- strh r2, [r0]
-_0800BD2C:
- adds r4, 0x1C
- movs r0, 0x1
- add r10, r0
- mov r1, r10
- cmp r1, 0x3
- bgt _0800BD3A
- b _0800BBBC
-_0800BD3A:
- ldr r1, _0800BD50 @ =gUnknown_02024A68
- movs r0, 0x4
-_0800BD3E:
- strb r0, [r1]
-_0800BD40:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800BD50: .4byte gUnknown_02024A68
- thumb_func_end sub_800BA78
-
thumb_func_start sub_800BD54
sub_800BD54: @ 800BD54
push {r4-r7,lr}
diff --git a/asm/rom_800D42C.s b/asm/rom_800D42C.s
index 57beffdbd..24e845abb 100644
--- a/asm/rom_800D42C.s
+++ b/asm/rom_800D42C.s
@@ -2271,7 +2271,7 @@ _0800E868:
strb r0, [r1]
ldr r0, _0800E96C @ =sub_800FCFC
bl SetVBlankCallback
- bl sub_800B884
+ bl setup_poochyena_battle
ldr r0, _0800E970 @ =gBattleTypeFlags
ldrh r1, [r0]
movs r0, 0x40
diff --git a/include/link.h b/include/link.h
index 49dff6547..f88cf8f5a 100644
--- a/include/link.h
+++ b/include/link.h
@@ -65,11 +65,11 @@ struct LinkPlayer
/* 0x00 */ u16 version;
/* 0x02 */ u16 lp_field_2;
/* 0x04 */ u32 trainerId;
- /* 0x05 */ u8 name[11];
- /* 0x10 */ u8 gender;
+ /* 0x08 */ u8 name[11];
+ /* 0x13 */ u8 gender;
/* 0x14 */ u32 linkType;
/* 0x18 */ u16 lp_field_18;
- /* 0x20 */ u16 language;
+ /* 0x1A */ u16 language;
};
struct LinkPlayerBlock
diff --git a/ld_script.txt b/ld_script.txt
index f379dc74d..8367bc1d6 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -46,6 +46,7 @@ SECTIONS {
src/link.o(.text);
src/rtc.o(.text);
src/main_menu.o(.text);
+ src/rom3.o(.text);
asm/rom3.o(.text);
src/decompress.o(.text);
asm/rom_800D42C.o(.text);
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 90a53a412..264a1dd9e 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -232,7 +232,7 @@ static void (*const sScriptCmdTable[])(void) = {
ScriptCmd_stopsound,
};
-void sub_8075624(void)
+void battle_anim_clear_some_data(void)
{
s32 i;
diff --git a/src/rom3.c b/src/rom3.c
new file mode 100644
index 000000000..9bd2674c5
--- /dev/null
+++ b/src/rom3.c
@@ -0,0 +1,257 @@
+#include "global.h"
+#include "asm.h"
+#include "battle.h"
+#include "items.h"
+#include "link.h"
+#include "pokemon.h"
+#include "species.h"
+#include "task.h"
+
+extern u16 gBattleTypeFlags;
+
+extern u32 gUnknown_020239FC;
+extern u32 gUnknown_02024A64;
+extern u8 gUnknown_02024A68;
+extern u16 gUnknown_02024A6A[];
+extern u8 gUnknown_02024A72[];
+extern u8 gUnknown_02024C78;
+extern u8 gUnknown_02024E60[];
+extern u8 gUnknown_02024E64[];
+extern void (*gUnknown_030042D4)(void);
+extern void (*gUnknown_03004330[])(void);
+
+extern void sub_800BF28(void);
+extern void sub_8083C50(u8);
+extern void nullsub_41(void);
+extern void nullsub_91(void);
+extern void battle_anim_clear_some_data(void);
+extern void sub_8040710(void);
+extern void BattleAI_HandleItemUseBeforeAISetup(void);
+extern void sub_8094978(u8, int);
+extern void sub_800BA78(void);
+extern void sub_800B9A8(void);
+extern void sub_800BD54(void);
+extern void sub_8010800(void);
+extern void sub_812B468(void);
+extern void sub_8137224(void);
+extern void sub_802BF74(void);
+extern void sub_8032AE0(void);
+extern void sub_8037510(void);
+extern void sub_811DA78(void);
+
+void sub_800B858(void)
+{
+ if (gBattleTypeFlags & 2)
+ {
+ OpenLink();
+ CreateTask(sub_8083C50, 0);
+ sub_800BF28();
+ }
+}
+
+void setup_poochyena_battle(void)
+{
+ s32 i;
+
+ gUnknown_030042D4 = nullsub_41;
+ for (i = 0; i < 4; i++)
+ {
+ gUnknown_03004330[i] = nullsub_91;
+ gUnknown_02024A72[i] = 0xFF;
+ gUnknown_02024E60[i] = 0;
+ gUnknown_02024E64[i] = 0;
+ }
+ sub_800B858();
+ gUnknown_02024A64 = 0;
+ battle_anim_clear_some_data();
+ sub_8040710();
+ BattleAI_HandleItemUseBeforeAISetup();
+ if (gBattleTypeFlags & 0x10)
+ {
+ ZeroEnemyPartyMons();
+ CreateMon(&gEnemyParty[0], SPECIES_POOCHYENA, 2, 32, 0, 0, 0, 0);
+ i = ITEM_NONE;
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&i);
+ }
+ gUnknown_020239FC = 0;
+ gUnknown_02024C78 = 0;
+}
+
+void sub_800B950(void)
+{
+ s32 i;
+
+ if (gBattleTypeFlags & 2)
+ sub_800BA78();
+ else
+ sub_800B9A8();
+ sub_800BD54();
+ if (!(gBattleTypeFlags & 0x40))
+ {
+ for (i = 0; i < gUnknown_02024A68; i++)
+ sub_8094978(i, 0);
+ }
+}
+
+void sub_800B9A8(void)
+{
+ if (!(gBattleTypeFlags & 1))
+ {
+ gUnknown_030042D4 = sub_8010800;
+ if (gBattleTypeFlags & 0x80)
+ gUnknown_03004330[0] = sub_812B468;
+ else if (gBattleTypeFlags & 0x200)
+ gUnknown_03004330[0] = sub_8137224;
+ else
+ gUnknown_03004330[0] = sub_802BF74;
+ gUnknown_02024A72[0] = 0;
+ gUnknown_03004330[1] = sub_8032AE0;
+ gUnknown_02024A72[1] = 1;
+ gUnknown_02024A68 = 2;
+ }
+ else
+ {
+ gUnknown_030042D4 = sub_8010800;
+ gUnknown_03004330[0] = sub_802BF74;
+ gUnknown_02024A72[0] = 0;
+ gUnknown_03004330[1] = sub_8032AE0;
+ gUnknown_02024A72[1] = 1;
+ gUnknown_03004330[2] = sub_802BF74;
+ gUnknown_02024A72[2] = 2;
+ gUnknown_03004330[3] = sub_8032AE0;
+ gUnknown_02024A72[3] = 3;
+ gUnknown_02024A68 = 4;
+ }
+}
+
+void sub_800BA78(void)
+{
+ u8 multiplayerId;
+ int i;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_WILD)
+ {
+ gUnknown_030042D4 = sub_8010800;
+ gUnknown_03004330[0] = sub_802BF74;
+ gUnknown_02024A72[0] = 0;
+ gUnknown_03004330[1] = sub_8037510;
+ gUnknown_02024A72[1] = 1;
+ gUnknown_02024A68 = 2;
+ }
+ else
+ {
+ gUnknown_03004330[1] = sub_802BF74;
+ gUnknown_02024A72[1] = 0;
+ gUnknown_03004330[0] = sub_8037510;
+ gUnknown_02024A72[0] = 1;
+ gUnknown_02024A68 = 2;
+ }
+ return;
+ }
+ if ((gBattleTypeFlags & (BATTLE_TYPE_40 | BATTLE_TYPE_DOUBLE)) == BATTLE_TYPE_DOUBLE)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_WILD)
+ {
+ gUnknown_030042D4 = sub_8010800;
+ gUnknown_03004330[0] = sub_802BF74;
+ gUnknown_02024A72[0] = 0;
+ gUnknown_03004330[1] = sub_8037510;
+ gUnknown_02024A72[1] = 1;
+ gUnknown_03004330[2] = sub_802BF74;
+ gUnknown_02024A72[2] = 2;
+ gUnknown_03004330[3] = sub_8037510;
+ gUnknown_02024A72[3] = 3;
+ gUnknown_02024A68 = 4;
+ }
+ else
+ {
+ gUnknown_03004330[1] = sub_802BF74;
+ gUnknown_02024A72[1] = 0;
+ gUnknown_03004330[0] = sub_8037510;
+ gUnknown_02024A72[0] = 1;
+ gUnknown_03004330[3] = sub_802BF74;
+ gUnknown_02024A72[3] = 2;
+ gUnknown_03004330[2] = sub_8037510;
+ gUnknown_02024A72[2] = 3;
+ gUnknown_02024A68 = 4;
+
+ }
+ return;
+ }
+ multiplayerId = GetMultiplayerId();
+ if (gBattleTypeFlags & BATTLE_TYPE_WILD)
+ gUnknown_030042D4 = sub_8010800;
+ for (i = 0; i < 4; i++)
+ {
+ switch (gLinkPlayers[i].lp_field_18)
+ {
+ case 0:
+ case 3:
+ sub_8094978(gLinkPlayers[i].lp_field_18, 0);
+ break;
+ case 1:
+ case 2:
+ sub_8094978(gLinkPlayers[i].lp_field_18, 1);
+ break;
+ }
+
+ if (i == multiplayerId)
+ {
+ gUnknown_03004330[gLinkPlayers[i].lp_field_18] = sub_802BF74;
+ switch (gLinkPlayers[i].lp_field_18)
+ {
+ case 0:
+ case 3:
+ gUnknown_02024A72[gLinkPlayers[i].lp_field_18] = 0;
+ gUnknown_02024A6A[gLinkPlayers[i].lp_field_18] = 0;
+ break;
+ case 1:
+ case 2:
+ gUnknown_02024A72[gLinkPlayers[i].lp_field_18] = 2;
+ gUnknown_02024A6A[gLinkPlayers[i].lp_field_18] = 3;
+ break;
+ }
+ }
+ else
+ {
+ if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[multiplayerId].lp_field_18 & 1))
+ || ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[multiplayerId].lp_field_18 & 1)))
+ {
+ gUnknown_03004330[gLinkPlayers[i].lp_field_18] = sub_811DA78;
+ switch (gLinkPlayers[i].lp_field_18)
+ {
+ case 0:
+ case 3:
+ gUnknown_02024A72[gLinkPlayers[i].lp_field_18] = 0;
+ gUnknown_02024A6A[gLinkPlayers[i].lp_field_18] = 0;
+ break;
+ case 1:
+ case 2:
+ gUnknown_02024A72[gLinkPlayers[i].lp_field_18] = 2;
+ gUnknown_02024A6A[gLinkPlayers[i].lp_field_18] = 3;
+ break;
+ }
+ }
+ else
+ {
+ gUnknown_03004330[gLinkPlayers[i].lp_field_18] = sub_8037510;
+ switch (gLinkPlayers[i].lp_field_18)
+ {
+ case 0:
+ case 3:
+ gUnknown_02024A72[gLinkPlayers[i].lp_field_18] = 1;
+ gUnknown_02024A6A[gLinkPlayers[i].lp_field_18] = 0;
+ break;
+ case 1:
+ case 2:
+ gUnknown_02024A72[gLinkPlayers[i].lp_field_18] = 3;
+ gUnknown_02024A6A[gLinkPlayers[i].lp_field_18] = 3;
+ break;
+ }
+ }
+ }
+ }
+ gUnknown_02024A68 = 4;
+}