summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2017-05-12 01:57:52 -0400
committerProjectRevoTPP <projectrevotpp@hotmail.com>2017-05-12 01:57:52 -0400
commitde67e7cf5fbe55bdfcb4dcd069e7ffa64187c72a (patch)
tree7cb13c4e6d90c1f1ec03e4e16dbb26b20c9610e6
parent0354f2cc5ae9771d745e6ffadd4715bdc8ff5221 (diff)
parent184436635fdca28399d03e805814a0deda67d200 (diff)
Merge branch 'master' of https://github.com/pret/pokeruby
-rw-r--r--INSTALL.md2
-rw-r--r--asm/battle_1.s2
-rw-r--r--asm/battle_2.s2602
-rw-r--r--asm/field_specials.s6
-rw-r--r--asm/field_weather.s6
-rw-r--r--include/battle.h2
-rw-r--r--include/berry.h2
-rw-r--r--include/dewford_trend.h2
-rw-r--r--include/flags.h1
-rw-r--r--include/global.berry.h10
-rw-r--r--ld_script.txt1
-rw-r--r--src/battle_2.c977
-rw-r--r--src/battle_interface.c4
-rw-r--r--src/berry.c22
-rw-r--r--src/clock.c32
-rw-r--r--src/dewford_trend.c237
-rw-r--r--src/new_game.c2
-rw-r--r--src/rom3.c6
-rw-r--r--src/rom_800D42C.c4
-rw-r--r--src/sound.c2
-rw-r--r--src/tv.c2
21 files changed, 1060 insertions, 2864 deletions
diff --git a/INSTALL.md b/INSTALL.md
index 72b3da12a..1d50d778e 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -4,7 +4,7 @@ Install [**devkitARM**](http://devkitpro.org/wiki/Getting_Started/devkitARM).
Make sure that there is an environment variable called DEVKITARM with the path of the directory before the "bin" directory containing "arm-none-eabi-as", "arm-none-eabi-cpp", "arm-none-eabi-ld" and "arm-none-eabi-objcopy".
-Then get the compiler from https://github.com/YamaArashi/agbcc and run the following commands.
+Then get the compiler from https://github.com/pret/agbcc and run the following commands.
build.sh
install.sh PATH_OF_POKERUBY_DIRECTORY
diff --git a/asm/battle_1.s b/asm/battle_1.s
index 5fe4672d9..44d0b245f 100644
--- a/asm/battle_1.s
+++ b/asm/battle_1.s
@@ -1358,7 +1358,7 @@ _0800E148:
ldrsh r0, [r1, r5]
cmp r0, 0
beq _0800E154
- bl sub_800DC24
+ bl PrintLinkBattleWinLossTie
_0800E154:
movs r0, 0x78
bl PlaySE
diff --git a/asm/battle_2.s b/asm/battle_2.s
index 56923c83f..7d199fff2 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -6,2608 +6,6 @@
.text
- thumb_func_start sub_800E7C4
-sub_800E7C4: @ 800E7C4
- push {lr}
- ldr r0, _0800E7E4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0800E7F0
- bl sub_800B858
- ldr r0, _0800E7E8 @ =sub_800F104
- bl SetMainCallback2
- ldr r1, _0800E7EC @ =gUnknown_02024D1E
- movs r0, 0
- strb r0, [r1]
- b _0800E7F4
- .align 2, 0
-_0800E7E4: .4byte gBattleTypeFlags
-_0800E7E8: .4byte sub_800F104
-_0800E7EC: .4byte gUnknown_02024D1E
-_0800E7F0:
- bl sub_800E7F8
-_0800E7F4:
- pop {r0}
- bx r0
- thumb_func_end sub_800E7C4
-
- thumb_func_start sub_800E7F8
-sub_800E7F8: @ 800E7F8
- push {r4,r5,lr}
- sub sp, 0x4
- movs r0, 0
- bl SetHBlankCallback
- movs r0, 0
- bl SetVBlankCallback
- movs r4, 0
- str r4, [sp]
- movs r1, 0xC0
- lsls r1, 19
- ldr r2, _0800E90C @ =0x05006000
- mov r0, sp
- bl CpuSet
- ldr r0, _0800E910 @ =REG_MOSAIC
- strh r4, [r0]
- subs r0, 0xC
- movs r2, 0xF0
- strh r2, [r0]
- adds r0, 0x4
- ldr r3, _0800E914 @ =0x00005051
- adds r1, r3, 0
- strh r1, [r0]
- adds r0, 0x4
- strh r4, [r0]
- adds r0, 0x2
- strh r4, [r0]
- ldr r0, _0800E918 @ =gUnknown_030042C4
- strh r2, [r0]
- ldr r0, _0800E91C @ =gUnknown_03004240
- strh r1, [r0]
- bl dp12_8087EA4
- ldr r0, _0800E920 @ =gUnknown_03004DE0
- movs r3, 0xF0
- movs r5, 0xF0
- lsls r5, 3
- adds r2, r0, r5
- movs r1, 0x4F
-_0800E84A:
- strh r3, [r0]
- strh r3, [r2]
- adds r2, 0x2
- adds r0, 0x2
- subs r1, 0x1
- cmp r1, 0
- bge _0800E84A
- movs r1, 0x50
- ldr r4, _0800E924 @ =gUnknown_081F9674
- ldr r0, _0800E920 @ =gUnknown_03004DE0
- ldr r3, _0800E928 @ =0x0000ff10
- movs r5, 0x82
- lsls r5, 4
- adds r2, r0, r5
- adds r0, 0xA0
-_0800E868:
- strh r3, [r0]
- strh r3, [r2]
- adds r2, 0x2
- adds r0, 0x2
- adds r1, 0x1
- cmp r1, 0x9F
- ble _0800E868
- ldr r0, [r4]
- ldr r1, [r4, 0x4]
- ldr r2, [r4, 0x8]
- bl sub_80895F8
- ldr r4, _0800E92C @ =gWindowConfig_81E6C58
- adds r0, r4, 0
- bl SetUpWindowConfig
- bl ResetPaletteFade
- ldr r0, _0800E930 @ =gUnknown_030042A4
- movs r1, 0
- strh r1, [r0]
- ldr r0, _0800E934 @ =gUnknown_030042A0
- strh r1, [r0]
- ldr r0, _0800E938 @ =gUnknown_030042C0
- strh r1, [r0]
- ldr r0, _0800E93C @ =gUnknown_030041B4
- strh r1, [r0]
- ldr r0, _0800E940 @ =gUnknown_03004288
- strh r1, [r0]
- ldr r0, _0800E944 @ =gUnknown_03004280
- strh r1, [r0]
- ldr r0, _0800E948 @ =gUnknown_030041B0
- strh r1, [r0]
- ldr r0, _0800E94C @ =gUnknown_030041B8
- strh r1, [r0]
- bl GetBattleTerrain
- ldr r1, _0800E950 @ =gBattleTerrain
- strb r0, [r1]
- ldr r0, _0800E954 @ =gUnknown_03004210
- adds r1, r4, 0
- bl InitWindowFromConfig
- ldr r0, _0800E958 @ =gUnknown_030041D0
- ldr r1, _0800E95C @ =gWindowConfig_81E71D0
- bl InitWindowFromConfig
- ldr r0, _0800E960 @ =gUnknown_03004250
- ldr r1, _0800E964 @ =gWindowConfig_81E71EC
- bl InitWindowFromConfig
- bl sub_800D6D4
- bl sub_800DAB8
- bl ResetSpriteData
- bl ResetTasks
- bl sub_800E23C
- bl FreeAllSpritePalettes
- ldr r1, _0800E968 @ =gReservedSpritePaletteCount
- movs r0, 0x4
- strb r0, [r1]
- ldr r0, _0800E96C @ =sub_800FCFC
- bl SetVBlankCallback
- bl setup_poochyena_battle
- ldr r0, _0800E970 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0800E978
- ldr r0, _0800E974 @ =sub_800F298
- bl SetMainCallback2
- b _0800E97E
- .align 2, 0
-_0800E90C: .4byte 0x05006000
-_0800E910: .4byte REG_MOSAIC
-_0800E914: .4byte 0x00005051
-_0800E918: .4byte gUnknown_030042C4
-_0800E91C: .4byte gUnknown_03004240
-_0800E920: .4byte gUnknown_03004DE0
-_0800E924: .4byte gUnknown_081F9674
-_0800E928: .4byte 0x0000ff10
-_0800E92C: .4byte gWindowConfig_81E6C58
-_0800E930: .4byte gUnknown_030042A4
-_0800E934: .4byte gUnknown_030042A0
-_0800E938: .4byte gUnknown_030042C0
-_0800E93C: .4byte gUnknown_030041B4
-_0800E940: .4byte gUnknown_03004288
-_0800E944: .4byte gUnknown_03004280
-_0800E948: .4byte gUnknown_030041B0
-_0800E94C: .4byte gUnknown_030041B8
-_0800E950: .4byte gBattleTerrain
-_0800E954: .4byte gUnknown_03004210
-_0800E958: .4byte gUnknown_030041D0
-_0800E95C: .4byte gWindowConfig_81E71D0
-_0800E960: .4byte gUnknown_03004250
-_0800E964: .4byte gWindowConfig_81E71EC
-_0800E968: .4byte gReservedSpritePaletteCount
-_0800E96C: .4byte sub_800FCFC
-_0800E970: .4byte gBattleTypeFlags
-_0800E974: .4byte sub_800F298
-_0800E978:
- ldr r0, _0800E9CC @ =sub_800EC9C
- bl SetMainCallback2
-_0800E97E:
- ldr r0, _0800E9D0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0800E998
- ldr r0, _0800E9D4 @ =gEnemyParty
- ldr r1, _0800E9D8 @ =gTrainerBattleOpponent
- ldrh r1, [r1]
- bl sub_800F8E8
- bl SetWildMonHeldItem
-_0800E998:
- ldr r0, _0800E9DC @ =gMain
- ldr r1, _0800E9E0 @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r0]
- ldr r4, _0800E9E4 @ =gPlayerParty
- movs r3, 0xFA
- lsls r3, 1
- adds r5, r4, r3
-_0800E9AE:
- adds r0, r4, 0
- movs r1, 0x3
- bl AdjustFriendship
- adds r4, 0x64
- cmp r4, r5
- ble _0800E9AE
- movs r1, 0
- ldr r0, _0800E9E8 @ =gUnknown_02024D1E
- strb r1, [r0]
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0800E9CC: .4byte sub_800EC9C
-_0800E9D0: .4byte gBattleTypeFlags
-_0800E9D4: .4byte gEnemyParty
-_0800E9D8: .4byte gTrainerBattleOpponent
-_0800E9DC: .4byte gMain
-_0800E9E0: .4byte 0x0000043d
-_0800E9E4: .4byte gPlayerParty
-_0800E9E8: .4byte gUnknown_02024D1E
- thumb_func_end sub_800E7F8
-
- thumb_func_start sub_800E9EC
-sub_800E9EC: @ 800E9EC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r6, 0
- mov r9, r6
- movs r0, 0xCE
- lsls r0, 1
- mov r10, r0
- mov r8, r6
-_0800EA02:
- movs r0, 0x64
- mov r4, r9
- muls r4, r0
- ldr r0, _0800EAA4 @ =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- lsls r0, 16
- lsrs r7, r0, 16
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
- adds r1, r0, 0
- cmp r5, 0
- beq _0800EA7E
- cmp r5, r10
- beq _0800EA4A
- cmp r7, 0
- beq _0800EA4A
- cmp r1, 0
- bne _0800EA4A
- movs r0, 0x1
- mov r2, r8
- lsls r0, r2
- orrs r6, r0
- lsls r0, r6, 16
- lsrs r6, r0, 16
-_0800EA4A:
- cmp r5, 0
- beq _0800EA7E
- cmp r7, 0
- beq _0800EA66
- cmp r5, r10
- beq _0800EA5A
- cmp r1, 0
- beq _0800EA66
-_0800EA5A:
- movs r0, 0x2
- mov r1, r8
- lsls r0, r1
- orrs r6, r0
- lsls r0, r6, 16
- lsrs r6, r0, 16
-_0800EA66:
- cmp r5, 0
- beq _0800EA7E
- cmp r5, r10
- beq _0800EA7E
- cmp r7, 0
- bne _0800EA7E
- movs r0, 0x3
- mov r2, r8
- lsls r0, r2
- orrs r6, r0
- lsls r0, r6, 16
- lsrs r6, r0, 16
-_0800EA7E:
- movs r0, 0x2
- add r8, r0
- movs r1, 0x1
- add r9, r1
- mov r2, r9
- cmp r2, 0x5
- ble _0800EA02
- ldr r1, _0800EAA8 @ =0x02000000
- strb r6, [r1, 0x2]
- lsrs r0, r6, 8
- strb r0, [r1, 0x3]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800EAA4: .4byte gPlayerParty
-_0800EAA8: .4byte 0x02000000
- thumb_func_end sub_800E9EC
-
- thumb_func_start sub_800EAAC
-sub_800EAAC: @ 800EAAC
- push {r4-r6,lr}
- ldr r4, _0800EAF4 @ =0x02000004
- movs r2, 0
- ldr r6, _0800EAF8 @ =gSaveBlock1
- ldr r0, _0800EAFC @ =0x00003160
- adds r3, r6, r0
-_0800EAB8:
- adds r0, r4, r2
- adds r1, r2, r3
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x6
- ble _0800EAB8
- movs r2, 0
- adds r3, r4, 0
- adds r3, 0x8
- ldr r5, _0800EB00 @ =gSaveBlock1 + 0x3676
-_0800EACE:
- adds r0, r3, r2
- adds r1, r2, r5
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x11
- ble _0800EACE
- ldr r1, _0800EB04 @ =0x00003688
- adds r0, r6, r1
- ldrb r0, [r0]
- strb r0, [r4, 0x7]
- adds r1, 0x1
- adds r0, r6, r1
- ldrb r0, [r0]
- strb r0, [r4, 0x1A]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800EAF4: .4byte 0x02000004
-_0800EAF8: .4byte gSaveBlock1
-_0800EAFC: .4byte 0x00003160
-_0800EB00: .4byte gSaveBlock1 + 0x3676
-_0800EB04: .4byte 0x00003688
- thumb_func_end sub_800EAAC
-
- thumb_func_start sub_800EB08
-sub_800EB08: @ 800EB08
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _0800EB84 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0800EBA4
- movs r3, 0
- ldr r5, _0800EB88 @ =gEnigmaBerries
- ldr r0, _0800EB8C @ =gSaveBlock1
- mov r12, r0
- adds r7, r5, 0
- ldr r6, _0800EB90 @ =0x00003160
- add r6, r12
- adds r4, r5, 0
- adds r4, 0x38
-_0800EB30:
- adds r1, r3, r7
- adds r2, r3, r6
- ldrb r0, [r2]
- strb r0, [r1]
- adds r1, r3, r4
- ldrb r0, [r2]
- strb r0, [r1]
- adds r3, 0x1
- cmp r3, 0x6
- ble _0800EB30
- movs r3, 0
- ldr r4, _0800EB94 @ =gUnknown_02024DF8
- ldr r7, _0800EB98 @ =gSaveBlock1 + 0x3676
- adds r6, r4, 0
- adds r6, 0x38
-_0800EB4E:
- adds r1, r3, r4
- adds r2, r3, r7
- ldrb r0, [r2]
- strb r0, [r1]
- adds r1, r3, r6
- ldrb r0, [r2]
- strb r0, [r1]
- adds r3, 0x1
- cmp r3, 0x11
- ble _0800EB4E
- ldr r1, _0800EB9C @ =0x00003688
- add r1, r12
- ldrb r0, [r1]
- strb r0, [r5, 0x7]
- ldrb r0, [r1]
- adds r1, r5, 0
- adds r1, 0x3F
- strb r0, [r1]
- ldr r1, _0800EBA0 @ =0x00003689
- add r1, r12
- ldrb r0, [r1]
- strb r0, [r5, 0x1A]
- ldrb r1, [r1]
- adds r0, r5, 0
- adds r0, 0x52
- strb r1, [r0]
- b _0800EC28
- .align 2, 0
-_0800EB84: .4byte gBattleTypeFlags
-_0800EB88: .4byte gEnigmaBerries
-_0800EB8C: .4byte gSaveBlock1
-_0800EB90: .4byte 0x00003160
-_0800EB94: .4byte gUnknown_02024DF8
-_0800EB98: .4byte gSaveBlock1 + 0x3676
-_0800EB9C: .4byte 0x00003688
-_0800EBA0: .4byte 0x00003689
-_0800EBA4:
- movs r0, 0x40
- ands r0, r1
- movs r1, 0x2
- mov r8, r1
- cmp r0, 0
- beq _0800EBB4
- movs r0, 0x4
- mov r8, r0
-_0800EBB4:
- movs r3, 0
- cmp r3, r8
- bge _0800EC28
- ldr r1, _0800EC38 @ =gEnigmaBerries
- mov r12, r1
- ldr r0, _0800EC3C @ =gBlockRecvBuffer + 0x4
- mov r10, r0
- movs r1, 0x8
- add r1, r12
- mov r9, r1
-_0800EBC8:
- lsls r0, r3, 8
- mov r1, r10
- adds r5, r0, r1
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- ldr r1, _0800EC40 @ =gLinkPlayers
- adds r0, r1
- ldrb r4, [r0, 0x18]
- movs r2, 0
- adds r7, r3, 0x1
- lsls r1, r4, 3
- subs r0, r1, r4
- adds r6, r1, 0
- lsls r0, 2
- mov r1, r12
- adds r3, r0, r1
-_0800EBEA:
- adds r0, r5, r2
- ldrb r0, [r0]
- strb r0, [r3]
- adds r3, 0x1
- adds r2, 0x1
- cmp r2, 0x6
- ble _0800EBEA
- movs r2, 0
- subs r0, r6, r4
- lsls r0, 2
- mov r1, r9
- adds r3, r0, r1
- adds r1, r5, 0
- adds r1, 0x8
-_0800EC06:
- adds r0, r1, r2
- ldrb r0, [r0]
- strb r0, [r3]
- adds r3, 0x1
- adds r2, 0x1
- cmp r2, 0x11
- ble _0800EC06
- subs r0, r6, r4
- lsls r0, 2
- add r0, r12
- ldrb r1, [r5, 0x7]
- strb r1, [r0, 0x7]
- ldrb r1, [r5, 0x1A]
- strb r1, [r0, 0x1A]
- adds r3, r7, 0
- cmp r3, r8
- blt _0800EBC8
-_0800EC28:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800EC38: .4byte gEnigmaBerries
-_0800EC3C: .4byte gBlockRecvBuffer + 0x4
-_0800EC40: .4byte gLinkPlayers
- thumb_func_end sub_800EB08
-
- thumb_func_start shedinja_something
-shedinja_something: @ 800EC44
- push {r4,r5,lr}
- sub sp, 0x10
- adds r4, r0, 0
- add r5, sp, 0xC
- movs r0, 0x1
- strb r0, [r5]
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- ldr r1, _0800EC94 @ =0x0000012f
- cmp r0, r1
- bne _0800EC8C
- adds r0, r4, 0
- movs r1, 0x3
- bl GetMonData
- ldrb r1, [r5]
- cmp r0, r1
- beq _0800EC8C
- adds r0, r4, 0
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- ldr r1, _0800EC98 @ =gUnknown_081F96C8
- mov r0, sp
- bl StringCompareWithoutExtCtrlCodes
- cmp r0, 0
- bne _0800EC8C
- adds r0, r4, 0
- movs r1, 0x3
- adds r2, r5, 0
- bl SetMonData
-_0800EC8C:
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0800EC94: .4byte 0x0000012f
-_0800EC98: .4byte gUnknown_081F96C8
- thumb_func_end shedinja_something
-
- thumb_func_start sub_800EC9C
-sub_800EC9C: @ 800EC9C
- push {r4-r7,lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0800ECD4 @ =0x02000000
- ldr r1, _0800ECD8 @ =0x000160cb
- adds r0, r1
- strb r4, [r0]
- movs r0, 0x1
- adds r5, r4, 0
- eors r5, r0
- ldr r0, _0800ECDC @ =gUnknown_02024D1E
- ldrb r0, [r0]
- cmp r0, 0x9
- bls _0800ECCA
- b _0800F008
-_0800ECCA:
- lsls r0, 2
- ldr r1, _0800ECE0 @ =_0800ECE4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0800ECD4: .4byte 0x02000000
-_0800ECD8: .4byte 0x000160cb
-_0800ECDC: .4byte gUnknown_02024D1E
-_0800ECE0: .4byte _0800ECE4
- .align 2, 0
-_0800ECE4:
- .4byte _0800ED0C
- .4byte _0800ED7C
- .4byte _0800EE88
- .4byte _0800EEAC
- .4byte _0800EED8
- .4byte _0800EEFC
- .4byte _0800EF28
- .4byte _0800EF48
- .4byte _0800EFB4
- .4byte _0800EFCC
-_0800ED0C:
- ldr r2, _0800ED54 @ =gBattleTypeFlags
- ldrh r1, [r2]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0800ED64
- ldr r0, _0800ED58 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800ED22
- b _0800F008
-_0800ED22:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- bne _0800ED2E
- b _0800F008
-_0800ED2E:
- ldr r4, _0800ED5C @ =0x02000000
- movs r5, 0x1
- strb r5, [r4]
- strb r5, [r4, 0x1]
- bl sub_800E9EC
- bl sub_800EAAC
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- movs r2, 0x20
- bl SendBlock
- ldr r0, _0800ED60 @ =gUnknown_02024D1E
- strb r5, [r0]
- b _0800F008
- .align 2, 0
-_0800ED54: .4byte gBattleTypeFlags
-_0800ED58: .4byte gReceivedRemoteLinkPlayers
-_0800ED5C: .4byte 0x02000000
-_0800ED60: .4byte gUnknown_02024D1E
-_0800ED64:
- movs r0, 0x4
- orrs r0, r1
- strh r0, [r2]
- ldr r1, _0800ED78 @ =gUnknown_02024D1E
- movs r0, 0x8
- strb r0, [r1]
- bl sub_800EB08
- b _0800F008
- .align 2, 0
-_0800ED78: .4byte gUnknown_02024D1E
-_0800ED7C:
- bl GetBlockReceivedStatus
- movs r1, 0x3
- ands r1, r0
- cmp r1, 0x3
- beq _0800ED8A
- b _0800F008
-_0800ED8A:
- bl ResetBlockReceivedFlags
- movs r3, 0
- ldr r0, _0800EDA8 @ =gBlockRecvBuffer
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- cmp r1, r0
- bne _0800EDBC
- cmp r4, 0
- bne _0800EDB0
- ldr r0, _0800EDAC @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0xC
- b _0800EDB6
- .align 2, 0
-_0800EDA8: .4byte gBlockRecvBuffer
-_0800EDAC: .4byte gBattleTypeFlags
-_0800EDB0:
- ldr r0, _0800EDE0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0x8
-_0800EDB6:
- orrs r1, r2
- strh r1, [r0]
- adds r3, 0x1
-_0800EDBC:
- lsls r7, r5, 8
- cmp r3, 0
- bne _0800EE38
- ldr r0, _0800EDE4 @ =gBlockRecvBuffer
- movs r1, 0x80
- lsls r1, 1
- adds r2, r0, r1
- ldrh r1, [r0]
- adds r6, r0, 0
- ldrh r2, [r2]
- cmp r1, r2
- bne _0800EDF4
- cmp r4, 0
- bne _0800EDE8
- ldr r0, _0800EDE0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0xC
- b _0800EDEE
- .align 2, 0
-_0800EDE0: .4byte gBattleTypeFlags
-_0800EDE4: .4byte gBlockRecvBuffer
-_0800EDE8:
- ldr r0, _0800EE04 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0x8
-_0800EDEE:
- orrs r1, r2
- strh r1, [r0]
- adds r3, 0x1
-_0800EDF4:
- lsls r7, r5, 8
- cmp r3, 0
- bne _0800EE38
- ldrh r1, [r6]
- ldr r0, _0800EE08 @ =0x00000101
- ldr r2, _0800EE04 @ =gBattleTypeFlags
- b _0800EE1A
- .align 2, 0
-_0800EE04: .4byte gBattleTypeFlags
-_0800EE08: .4byte 0x00000101
-_0800EE0C:
- adds r3, 0x1
- cmp r3, 0x1
- bgt _0800EE22
- lsls r0, r3, 8
- adds r0, r6
- ldrh r1, [r0]
- ldr r0, _0800EE2C @ =0x00000101
-_0800EE1A:
- cmp r1, r0
- bls _0800EE0C
- cmp r3, r4
- beq _0800EE0C
-_0800EE22:
- cmp r3, 0x2
- bne _0800EE30
- ldrh r0, [r2]
- movs r1, 0xC
- b _0800EE34
- .align 2, 0
-_0800EE2C: .4byte 0x00000101
-_0800EE30:
- ldrh r0, [r2]
- movs r1, 0x8
-_0800EE34:
- orrs r0, r1
- strh r0, [r2]
-_0800EE38:
- bl sub_800EB08
- ldr r0, _0800EE78 @ =sub_800DE30
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EE7C @ =gTasks
- lsls r2, r0, 2
- adds r2, r0
- lsls r2, 3
- adds r2, r1
- movs r1, 0
- movs r0, 0x87
- lsls r0, 1
- strh r0, [r2, 0xA]
- movs r0, 0x5A
- strh r0, [r2, 0xC]
- strh r1, [r2, 0x12]
- ldr r0, _0800EE80 @ =0x02000000
- ldrb r1, [r0, 0x2]
- ldrb r0, [r0, 0x3]
- lsls r0, 8
- orrs r1, r0
- strh r1, [r2, 0xE]
- ldr r0, _0800EE84 @ =gBlockRecvBuffer
- adds r0, 0x2
- adds r0, r7, r0
- ldrh r0, [r0]
- strh r0, [r2, 0x10]
- b _0800EF96
- .align 2, 0
-_0800EE78: .4byte sub_800DE30
-_0800EE7C: .4byte gTasks
-_0800EE80: .4byte 0x02000000
-_0800EE84: .4byte gBlockRecvBuffer
-_0800EE88:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- bne _0800EE94
- b _0800F008
-_0800EE94:
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EEA8 @ =gPlayerParty
- movs r2, 0xC8
- bl SendBlock
- b _0800EF96
- .align 2, 0
-_0800EEA8: .4byte gPlayerParty
-_0800EEAC:
- bl GetBlockReceivedStatus
- movs r1, 0x3
- ands r1, r0
- cmp r1, 0x3
- beq _0800EEBA
- b _0800F008
-_0800EEBA:
- bl ResetBlockReceivedFlags
- ldr r0, _0800EED0 @ =gEnemyParty
- lsls r1, r5, 8
- ldr r2, _0800EED4 @ =gBlockRecvBuffer
- adds r1, r2
- movs r2, 0xC8
- bl memcpy
- b _0800EF96
- .align 2, 0
-_0800EED0: .4byte gEnemyParty
-_0800EED4: .4byte gBlockRecvBuffer
-_0800EED8:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- bne _0800EEE4
- b _0800F008
-_0800EEE4:
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EEF8 @ =gPlayerParty + 2 * 0x64
- movs r2, 0xC8
- bl SendBlock
- b _0800EF96
- .align 2, 0
-_0800EEF8: .4byte gPlayerParty + 2 * 0x64
-_0800EEFC:
- bl GetBlockReceivedStatus
- movs r1, 0x3
- ands r1, r0
- cmp r1, 0x3
- beq _0800EF0A
- b _0800F008
-_0800EF0A:
- bl ResetBlockReceivedFlags
- ldr r0, _0800EF20 @ =gEnemyParty + 2 * 0x64
- lsls r1, r5, 8
- ldr r2, _0800EF24 @ =gBlockRecvBuffer
- adds r1, r2
- movs r2, 0xC8
- bl memcpy
- b _0800EF96
- .align 2, 0
-_0800EF20: .4byte gEnemyParty + 2 * 0x64
-_0800EF24: .4byte gBlockRecvBuffer
-_0800EF28:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- beq _0800F008
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EF44 @ =gPlayerParty + 4 * 0x64
- movs r2, 0xC8
- bl SendBlock
- b _0800EF96
- .align 2, 0
-_0800EF44: .4byte gPlayerParty + 4 * 0x64
-_0800EF48:
- bl GetBlockReceivedStatus
- movs r1, 0x3
- ands r1, r0
- cmp r1, 0x3
- bne _0800F008
- bl ResetBlockReceivedFlags
- ldr r4, _0800EFA0 @ =gEnemyParty + 4 * 0x64
- lsls r1, r5, 8
- ldr r0, _0800EFA4 @ =gBlockRecvBuffer
- adds r1, r0
- adds r0, r4, 0
- movs r2, 0xC8
- bl memcpy
- ldr r1, _0800EFA8 @ =0xfffffe70
- adds r0, r4, r1
- bl shedinja_something
- ldr r1, _0800EFAC @ =0xfffffed4
- adds r0, r4, r1
- bl shedinja_something
- adds r0, r4, 0
- subs r0, 0xC8
- bl shedinja_something
- adds r0, r4, 0
- subs r0, 0x64
- bl shedinja_something
- adds r0, r4, 0
- bl shedinja_something
- adds r0, r4, 0
- adds r0, 0x64
- bl shedinja_something
-_0800EF96:
- ldr r1, _0800EFB0 @ =gUnknown_02024D1E
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0800F008
- .align 2, 0
-_0800EFA0: .4byte gEnemyParty + 4 * 0x64
-_0800EFA4: .4byte gBlockRecvBuffer
-_0800EFA8: .4byte 0xfffffe70
-_0800EFAC: .4byte 0xfffffed4
-_0800EFB0: .4byte gUnknown_02024D1E
-_0800EFB4:
- bl sub_800B950
- ldr r0, _0800EFC8 @ =gUnknown_02024D1E
- ldrb r1, [r0]
- adds r1, 0x1
- movs r2, 0
- strb r1, [r0]
- strb r2, [r0, 0x1]
- strb r2, [r0, 0x2]
- b _0800F008
- .align 2, 0
-_0800EFC8: .4byte gUnknown_02024D1E
-_0800EFCC:
- ldr r0, _0800F010 @ =gUnknown_02024D1F
- adds r1, r0, 0x1
- bl battle_load_something
- lsls r0, 24
- cmp r0, 0
- beq _0800F008
- ldr r2, _0800F014 @ =gUnknown_030042D0
- ldr r1, _0800F018 @ =gMain
- ldr r0, [r1]
- str r0, [r2]
- ldr r0, _0800F01C @ =sub_8010824
- str r0, [r1]
- ldr r0, _0800F020 @ =sub_800F808
- bl SetMainCallback2
- ldr r3, _0800F024 @ =gBattleTypeFlags
- ldrh r2, [r3]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- beq _0800F008
- ldr r1, _0800F028 @ =gTrainerBattleOpponent
- movs r4, 0x80
- lsls r4, 4
- adds r0, r4, 0
- strh r0, [r1]
- movs r0, 0x20
- orrs r0, r2
- strh r0, [r3]
-_0800F008:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800F010: .4byte gUnknown_02024D1F
-_0800F014: .4byte gUnknown_030042D0
-_0800F018: .4byte gMain
-_0800F01C: .4byte sub_8010824
-_0800F020: .4byte sub_800F808
-_0800F024: .4byte gBattleTypeFlags
-_0800F028: .4byte gTrainerBattleOpponent
- thumb_func_end sub_800EC9C
-
- thumb_func_start sub_800F02C
-sub_800F02C: @ 800F02C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r0, 0
- mov r8, r0
- ldr r7, _0800F0F8 @ =gUnknown_02023A04
- mov r10, r7
-_0800F03E:
- mov r1, r8
- lsls r6, r1, 5
- movs r0, 0x64
- mov r4, r8
- muls r4, r0
- ldr r0, _0800F0FC @ =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- movs r1, 0x4
- negs r1, r1
- add r1, r10
- mov r9, r1
- adds r5, r6, r1
- strh r0, [r5]
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
- strh r0, [r5, 0x2]
- adds r0, r4, 0
- movs r1, 0x2
- adds r2, r7, 0
- bl GetMonData
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- strb r0, [r5, 0xF]
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- strh r0, [r5, 0x10]
- adds r0, r4, 0
- movs r1, 0x3A
- bl GetMonData
- strh r0, [r5, 0x12]
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
- mov r1, r10
- adds r1, 0x10
- adds r6, r1
- str r0, [r6]
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- str r0, [r7, 0x14]
- adds r0, r4, 0
- bl GetMonGender
- strb r0, [r5, 0x1C]
- adds r0, r7, 0
- bl StripExtCtrlCodes
- adds r0, r4, 0
- movs r1, 0x3
- bl GetMonData
- strb r0, [r5, 0x1D]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0800F0D4
- adds r0, r7, 0
- movs r1, 0
- bl PadNameString
-_0800F0D4:
- adds r7, 0x20
- movs r0, 0x1
- add r8, r0
- mov r1, r8
- cmp r1, 0x2
- ble _0800F03E
- ldr r0, _0800F100 @ =0x02000000
- mov r1, r9
- movs r2, 0x60
- bl memcpy
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800F0F8: .4byte gUnknown_02023A04
-_0800F0FC: .4byte gPlayerParty
-_0800F100: .4byte 0x02000000
- thumb_func_end sub_800F02C
-
- thumb_func_start sub_800F104
-sub_800F104: @ 800F104
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r4, _0800F148 @ =0x02000000
- ldr r1, _0800F14C @ =0x000160cb
- adds r0, r4, r1
- strb r6, [r0]
- ldr r2, _0800F150 @ =0x000160c4
- adds r2, r4
- mov r9, r2
- ldr r0, _0800F154 @ =0x000160c2
- adds r0, r4
- mov r8, r0
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- ldr r5, _0800F158 @ =gUnknown_02024D1E
- ldrb r0, [r5]
- cmp r0, 0x1
- beq _0800F1A0
- cmp r0, 0x1
- bgt _0800F15C
- cmp r0, 0
- beq _0800F168
- b _0800F27A
- .align 2, 0
-_0800F148: .4byte 0x02000000
-_0800F14C: .4byte 0x000160cb
-_0800F150: .4byte 0x000160c4
-_0800F154: .4byte 0x000160c2
-_0800F158: .4byte gUnknown_02024D1E
-_0800F15C:
- cmp r0, 0x2
- beq _0800F240
- cmp r0, 0x3
- bne _0800F166
- b _0800F25C
-_0800F166:
- b _0800F27A
-_0800F168:
- ldr r0, _0800F19C @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800F172
- b _0800F27A
-_0800F172:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- bne _0800F17E
- b _0800F27A
-_0800F17E:
- bl sub_800F02C
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- movs r2, 0x60
- bl SendBlock
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- b _0800F27A
- .align 2, 0
-_0800F19C: .4byte gReceivedRemoteLinkPlayers
-_0800F1A0:
- bl GetBlockReceivedStatus
- movs r1, 0xF
- ands r1, r0
- cmp r1, 0xF
- bne _0800F27A
- bl ResetBlockReceivedFlags
- movs r4, 0
- lsls r0, r6, 3
- subs r0, r6
- lsls r5, r0, 2
- movs r7, 0
-_0800F1BA:
- cmp r4, r6
- beq _0800F1FA
- ldr r2, _0800F1DC @ =gLinkPlayers
- adds r0, r7, r2
- ldrh r1, [r0, 0x18]
- movs r3, 0x1
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- bne _0800F1E0
- adds r0, r5, r2
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800F1EC
- b _0800F1FA
- .align 2, 0
-_0800F1DC: .4byte gLinkPlayers
-_0800F1E0:
- adds r0, r5, r2
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800F1FA
-_0800F1EC:
- lsls r1, r4, 8
- ldr r0, _0800F228 @ =gBlockRecvBuffer
- adds r1, r0
- ldr r0, _0800F22C @ =gUnknown_02023A00
- movs r2, 0x60
- bl memcpy
-_0800F1FA:
- adds r7, 0x1C
- adds r4, 0x1
- cmp r4, 0x3
- ble _0800F1BA
- ldr r1, _0800F230 @ =gUnknown_02024D1E
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r1, _0800F234 @ =gMain
- ldr r0, [r1, 0x8]
- mov r2, r9
- str r0, [r2]
- ldr r0, _0800F238 @ =gBattleTypeFlags
- ldrh r0, [r0]
- mov r2, r8
- strh r0, [r2]
- ldr r0, _0800F23C @ =sub_800F104
- str r0, [r1, 0x8]
- movs r0, 0x5
- movs r1, 0
- bl OpenPartyMenu
- b _0800F27A
- .align 2, 0
-_0800F228: .4byte gBlockRecvBuffer
-_0800F22C: .4byte gUnknown_02023A00
-_0800F230: .4byte gUnknown_02024D1E
-_0800F234: .4byte gMain
-_0800F238: .4byte gBattleTypeFlags
-_0800F23C: .4byte sub_800F104
-_0800F240:
- ldr r0, _0800F258 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0800F27A
- movs r0, 0x3
- strb r0, [r5]
- bl sub_800832C
- b _0800F27A
- .align 2, 0
-_0800F258: .4byte gPaletteFade
-_0800F25C:
- ldr r0, _0800F288 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800F27A
- ldr r1, _0800F28C @ =gBattleTypeFlags
- mov r2, r8
- ldrh r0, [r2]
- strh r0, [r1]
- ldr r1, _0800F290 @ =gMain
- mov r2, r9
- ldr r0, [r2]
- str r0, [r1, 0x8]
- ldr r0, _0800F294 @ =sub_800E7F8
- bl SetMainCallback2
-_0800F27A:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800F288: .4byte gReceivedRemoteLinkPlayers
-_0800F28C: .4byte gBattleTypeFlags
-_0800F290: .4byte gMain
-_0800F294: .4byte sub_800E7F8
- thumb_func_end sub_800F104
-
- thumb_func_start sub_800F298
-sub_800F298: @ 800F298
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _0800F2D0 @ =0x02000000
- ldr r1, _0800F2D4 @ =0x000160cb
- adds r0, r1
- strb r6, [r0]
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- ldr r0, _0800F2D8 @ =gUnknown_02024D1E
- ldrb r0, [r0]
- cmp r0, 0x7
- bls _0800F2C4
- b _0800F7E0
-_0800F2C4:
- lsls r0, 2
- ldr r1, _0800F2DC @ =_0800F2E0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0800F2D0: .4byte 0x02000000
-_0800F2D4: .4byte 0x000160cb
-_0800F2D8: .4byte gUnknown_02024D1E
-_0800F2DC: .4byte _0800F2E0
- .align 2, 0
-_0800F2E0:
- .4byte _0800F300
- .4byte _0800F340
- .4byte _0800F4DE
- .4byte _0800F504
- .4byte _0800F5F8
- .4byte _0800F61C
- .4byte _0800F78C
- .4byte _0800F7A4
-_0800F300:
- ldr r0, _0800F338 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800F30A
- b _0800F7E0
-_0800F30A:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- bne _0800F316
- b _0800F7E0
-_0800F316:
- ldr r4, _0800F33C @ =0x02000000
- movs r0, 0x1
- strb r0, [r4]
- strb r0, [r4, 0x1]
- bl sub_800E9EC
- bl sub_800EAAC
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- movs r2, 0x20
- bl SendBlock
- b _0800F770
- .align 2, 0
-_0800F338: .4byte gReceivedRemoteLinkPlayers
-_0800F33C: .4byte 0x02000000
-_0800F340:
- bl GetBlockReceivedStatus
- movs r1, 0xF
- ands r1, r0
- cmp r1, 0xF
- beq _0800F34E
- b _0800F7E0
-_0800F34E:
- bl ResetBlockReceivedFlags
- movs r4, 0
- ldr r0, _0800F36C @ =gBlockRecvBuffer
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- cmp r1, r0
- bne _0800F380
- cmp r6, 0
- bne _0800F374
- ldr r0, _0800F370 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0xC
- b _0800F37A
- .align 2, 0
-_0800F36C: .4byte gBlockRecvBuffer
-_0800F370: .4byte gBattleTypeFlags
-_0800F374:
- ldr r0, _0800F3B0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0x8
-_0800F37A:
- orrs r1, r2
- strh r1, [r0]
- adds r4, 0x1
-_0800F380:
- cmp r4, 0
- bne _0800F41C
- movs r2, 0
- ldr r1, _0800F3B4 @ =gBlockRecvBuffer
- adds r5, r1, 0
- movs r3, 0x80
- lsls r3, 1
-_0800F38E:
- adds r1, r3
- adds r2, 0x1
- cmp r2, 0x3
- bgt _0800F39E
- ldrh r0, [r5]
- ldrh r7, [r1]
- cmp r0, r7
- beq _0800F38E
-_0800F39E:
- cmp r2, 0x4
- bne _0800F3C4
- cmp r6, 0
- bne _0800F3B8
- ldr r0, _0800F3B0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0xC
- b _0800F3BE
- .align 2, 0
-_0800F3B0: .4byte gBattleTypeFlags
-_0800F3B4: .4byte gBlockRecvBuffer
-_0800F3B8:
- ldr r0, _0800F408 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0x8
-_0800F3BE:
- orrs r1, r2
- strh r1, [r0]
- adds r4, 0x1
-_0800F3C4:
- cmp r4, 0
- bne _0800F41C
- ldr r0, _0800F40C @ =gBlockRecvBuffer
- ldrh r2, [r0]
- ldr r1, _0800F410 @ =0x00000101
- adds r3, r0, 0
- ldr r5, _0800F408 @ =gBattleTypeFlags
- cmp r2, r1
- beq _0800F3F6
-_0800F3D6:
- lsls r0, r4, 8
- adds r0, r3
- ldrh r0, [r0]
- ldr r1, _0800F410 @ =0x00000101
- cmp r0, r1
- bls _0800F3E6
- cmp r4, r6
- bne _0800F3FE
-_0800F3E6:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _0800F3FE
- lsls r0, r4, 8
- adds r0, r3
- ldrh r0, [r0]
- cmp r0, r1
- bne _0800F3D6
-_0800F3F6:
- cmp r4, r6
- beq _0800F3D6
- cmp r4, r6
- bge _0800F3D6
-_0800F3FE:
- cmp r4, 0x4
- bne _0800F414
- ldrh r0, [r5]
- movs r1, 0xC
- b _0800F418
- .align 2, 0
-_0800F408: .4byte gBattleTypeFlags
-_0800F40C: .4byte gBlockRecvBuffer
-_0800F410: .4byte 0x00000101
-_0800F414:
- ldrh r0, [r5]
- movs r1, 0x8
-_0800F418:
- orrs r0, r1
- strh r0, [r5]
-_0800F41C:
- bl sub_800EB08
- ldr r0, _0800F474 @ =0x0201d000
- ldr r1, _0800F478 @ =gPlayerParty
- movs r2, 0x96
- lsls r2, 1
- bl memcpy
- ldr r0, _0800F47C @ =sub_800DE30
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0800F480 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r2, 0
- movs r0, 0x87
- lsls r0, 1
- strh r0, [r1, 0xA]
- movs r0, 0x5A
- strh r0, [r1, 0xC]
- strh r2, [r1, 0x12]
- strh r2, [r1, 0xE]
- strh r2, [r1, 0x10]
- adds r2, r1, 0
- ldr r0, _0800F484 @ =gBlockRecvBuffer
- adds r3, r0, 0x2
- ldr r6, _0800F488 @ =gLinkPlayers
- movs r5, 0x3F
- movs r7, 0x80
- lsls r7, 1
- movs r4, 0x3
-_0800F464:
- ldrh r0, [r6, 0x18]
- cmp r0, 0x1
- beq _0800F49E
- cmp r0, 0x1
- bgt _0800F48C
- cmp r0, 0
- beq _0800F496
- b _0800F4C4
- .align 2, 0
-_0800F474: .4byte 0x0201d000
-_0800F478: .4byte gPlayerParty
-_0800F47C: .4byte sub_800DE30
-_0800F480: .4byte gTasks
-_0800F484: .4byte gBlockRecvBuffer
-_0800F488: .4byte gLinkPlayers
-_0800F48C:
- cmp r0, 0x2
- beq _0800F4A6
- cmp r0, 0x3
- beq _0800F4B6
- b _0800F4C4
-_0800F496:
- ldrh r0, [r3]
- adds r1, r5, 0
- ands r1, r0
- b _0800F4AE
-_0800F49E:
- ldrh r0, [r3]
- adds r1, r5, 0
- ands r1, r0
- b _0800F4BE
-_0800F4A6:
- ldrh r0, [r3]
- adds r1, r5, 0
- ands r1, r0
- lsls r1, 6
-_0800F4AE:
- ldrh r0, [r2, 0xE]
- orrs r1, r0
- strh r1, [r2, 0xE]
- b _0800F4C4
-_0800F4B6:
- ldrh r0, [r3]
- adds r1, r5, 0
- ands r1, r0
- lsls r1, 6
-_0800F4BE:
- ldrh r0, [r2, 0x10]
- orrs r1, r0
- strh r1, [r2, 0x10]
-_0800F4C4:
- adds r3, r7
- adds r6, 0x1C
- subs r4, 0x1
- cmp r4, 0
- bge _0800F464
- bl ZeroPlayerPartyMons
- bl ZeroEnemyPartyMons
- ldr r1, _0800F4FC @ =gUnknown_02024D1E
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_0800F4DE:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- bne _0800F4EA
- b _0800F7E0
-_0800F4EA:
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800F500 @ =0x0201d000
- movs r2, 0xC8
- bl SendBlock
- b _0800F770
- .align 2, 0
-_0800F4FC: .4byte gUnknown_02024D1E
-_0800F500: .4byte 0x0201d000
-_0800F504:
- bl GetBlockReceivedStatus
- movs r1, 0xF
- ands r1, r0
- cmp r1, 0xF
- beq _0800F512
- b _0800F7E0
-_0800F512:
- bl ResetBlockReceivedFlags
- movs r4, 0
- lsls r0, r6, 3
- subs r0, r6
- lsls r0, 2
- mov r8, r0
- ldr r5, _0800F53C @ =gBlockRecvBuffer
- movs r7, 0
-_0800F524:
- cmp r4, r6
- bne _0800F558
- ldr r0, _0800F540 @ =gLinkPlayers
- adds r0, r7, r0
- ldrh r0, [r0, 0x18]
- cmp r0, 0x2
- bgt _0800F544
- cmp r0, 0x1
- bge _0800F550
- cmp r0, 0
- beq _0800F548
- b _0800F5E2
- .align 2, 0
-_0800F53C: .4byte gBlockRecvBuffer
-_0800F540: .4byte gLinkPlayers
-_0800F544:
- cmp r0, 0x3
- bne _0800F5E2
-_0800F548:
- ldr r0, _0800F54C @ =gPlayerParty
- b _0800F5C8
- .align 2, 0
-_0800F54C: .4byte gPlayerParty
-_0800F550:
- ldr r0, _0800F554 @ =gPlayerParty + 3 * 0x64
- b _0800F5C8
- .align 2, 0
-_0800F554: .4byte gPlayerParty + 3 * 0x64
-_0800F558:
- ldr r2, _0800F578 @ =gLinkPlayers
- adds r0, r7, r2
- ldrh r1, [r0, 0x18]
- movs r3, 0x1
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- bne _0800F57C
- mov r1, r8
- adds r0, r1, r2
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800F58A
- b _0800F5B0
- .align 2, 0
-_0800F578: .4byte gLinkPlayers
-_0800F57C:
- mov r1, r8
- adds r0, r1, r2
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800F5B0
-_0800F58A:
- adds r0, r7, r2
- ldrh r2, [r0, 0x18]
- cmp r2, 0x2
- bgt _0800F59C
- cmp r2, 0x1
- bge _0800F5A8
- cmp r2, 0
- beq _0800F5A0
- b _0800F5E2
-_0800F59C:
- cmp r2, 0x3
- bne _0800F5E2
-_0800F5A0:
- ldr r0, _0800F5A4 @ =gPlayerParty
- b _0800F5C8
- .align 2, 0
-_0800F5A4: .4byte gPlayerParty
-_0800F5A8:
- ldr r0, _0800F5AC @ =gPlayerParty + 3 * 0x64
- b _0800F5C8
- .align 2, 0
-_0800F5AC: .4byte gPlayerParty + 3 * 0x64
-_0800F5B0:
- adds r0, r7, r2
- ldrh r2, [r0, 0x18]
- cmp r2, 0x2
- bgt _0800F5C2
- cmp r2, 0x1
- bge _0800F5D8
- cmp r2, 0
- beq _0800F5C6
- b _0800F5E2
-_0800F5C2:
- cmp r2, 0x3
- bne _0800F5E2
-_0800F5C6:
- ldr r0, _0800F5D4 @ =gEnemyParty
-_0800F5C8:
- adds r1, r5, 0
- movs r2, 0xC8
- bl memcpy
- b _0800F5E2
- .align 2, 0
-_0800F5D4: .4byte gEnemyParty
-_0800F5D8:
- ldr r0, _0800F5F4 @ =gEnemyParty + 3 * 0x64
- adds r1, r5, 0
- movs r2, 0xC8
- bl memcpy
-_0800F5E2:
- movs r0, 0x80
- lsls r0, 1
- adds r5, r0
- adds r7, 0x1C
- adds r4, 0x1
- cmp r4, 0x3
- ble _0800F524
- b _0800F770
- .align 2, 0
-_0800F5F4: .4byte gEnemyParty + 3 * 0x64
-_0800F5F8:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- bne _0800F604
- b _0800F7E0
-_0800F604:
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800F618 @ =0x0201d0c8
- movs r2, 0x64
- bl SendBlock
- b _0800F770
- .align 2, 0
-_0800F618: .4byte 0x0201d0c8
-_0800F61C:
- bl GetBlockReceivedStatus
- movs r1, 0xF
- ands r1, r0
- cmp r1, 0xF
- beq _0800F62A
- b _0800F7E0
-_0800F62A:
- bl ResetBlockReceivedFlags
- movs r4, 0
- lsls r0, r6, 3
- subs r0, r6
- lsls r0, 2
- mov r8, r0
- ldr r5, _0800F654 @ =gBlockRecvBuffer
- movs r7, 0
-_0800F63C:
- cmp r4, r6
- bne _0800F670
- ldr r0, _0800F658 @ =gLinkPlayers
- adds r0, r7, r0
- ldrh r0, [r0, 0x18]
- cmp r0, 0x2
- bgt _0800F65C
- cmp r0, 0x1
- bge _0800F668
- cmp r0, 0
- beq _0800F660
- b _0800F6FA
- .align 2, 0
-_0800F654: .4byte gBlockRecvBuffer
-_0800F658: .4byte gLinkPlayers
-_0800F65C:
- cmp r0, 0x3
- bne _0800F6FA
-_0800F660:
- ldr r0, _0800F664 @ =gPlayerParty + 2 * 0x64
- b _0800F6E0
- .align 2, 0
-_0800F664: .4byte gPlayerParty + 2 * 0x64
-_0800F668:
- ldr r0, _0800F66C @ =gPlayerParty + 5 * 0x64
- b _0800F6E0
- .align 2, 0
-_0800F66C: .4byte gPlayerParty + 5 * 0x64
-_0800F670:
- ldr r2, _0800F690 @ =gLinkPlayers
- adds r0, r7, r2
- ldrh r1, [r0, 0x18]
- movs r3, 0x1
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- bne _0800F694
- mov r1, r8
- adds r0, r1, r2
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800F6A2
- b _0800F6C8
- .align 2, 0
-_0800F690: .4byte gLinkPlayers
-_0800F694:
- mov r1, r8
- adds r0, r1, r2
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800F6C8
-_0800F6A2:
- adds r0, r7, r2
- ldrh r2, [r0, 0x18]
- cmp r2, 0x2
- bgt _0800F6B4
- cmp r2, 0x1
- bge _0800F6C0
- cmp r2, 0
- beq _0800F6B8
- b _0800F6FA
-_0800F6B4:
- cmp r2, 0x3
- bne _0800F6FA
-_0800F6B8:
- ldr r0, _0800F6BC @ =gPlayerParty + 2 * 0x64
- b _0800F6E0
- .align 2, 0
-_0800F6BC: .4byte gPlayerParty + 2 * 0x64
-_0800F6C0:
- ldr r0, _0800F6C4 @ =gPlayerParty + 5 * 0x64
- b _0800F6E0
- .align 2, 0
-_0800F6C4: .4byte gPlayerParty + 5 * 0x64
-_0800F6C8:
- adds r0, r7, r2
- ldrh r2, [r0, 0x18]
- cmp r2, 0x2
- bgt _0800F6DA
- cmp r2, 0x1
- bge _0800F6F0
- cmp r2, 0
- beq _0800F6DE
- b _0800F6FA
-_0800F6DA:
- cmp r2, 0x3
- bne _0800F6FA
-_0800F6DE:
- ldr r0, _0800F6EC @ =gEnemyParty + 2 * 0x64
-_0800F6E0:
- adds r1, r5, 0
- movs r2, 0x64
- bl memcpy
- b _0800F6FA
- .align 2, 0
-_0800F6EC: .4byte gEnemyParty + 2 * 0x64
-_0800F6F0:
- ldr r0, _0800F77C @ =gEnemyParty + 5 * 0x64
- adds r1, r5, 0
- movs r2, 0x64
- bl memcpy
-_0800F6FA:
- movs r0, 0x80
- lsls r0, 1
- adds r5, r0
- adds r7, 0x1C
- adds r4, 0x1
- cmp r4, 0x3
- ble _0800F63C
- ldr r4, _0800F780 @ =gPlayerParty
- adds r0, r4, 0
- bl shedinja_something
- adds r0, r4, 0
- adds r0, 0x64
- bl shedinja_something
- adds r0, r4, 0
- adds r0, 0xC8
- bl shedinja_something
- movs r1, 0x96
- lsls r1, 1
- adds r0, r4, r1
- bl shedinja_something
- movs r7, 0xC8
- lsls r7, 1
- adds r0, r4, r7
- bl shedinja_something
- movs r1, 0xFA
- lsls r1, 1
- adds r0, r4, r1
- bl shedinja_something
- ldr r4, _0800F784 @ =gEnemyParty
- adds r0, r4, 0
- bl shedinja_something
- adds r0, r4, 0
- adds r0, 0x64
- bl shedinja_something
- adds r0, r4, 0
- adds r0, 0xC8
- bl shedinja_something
- subs r7, 0x64
- adds r0, r4, r7
- bl shedinja_something
- movs r1, 0xC8
- lsls r1, 1
- adds r0, r4, r1
- bl shedinja_something
- adds r7, 0xC8
- adds r0, r4, r7
- bl shedinja_something
-_0800F770:
- ldr r1, _0800F788 @ =gUnknown_02024D1E
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0800F7E0
- .align 2, 0
-_0800F77C: .4byte gEnemyParty + 5 * 0x64
-_0800F780: .4byte gPlayerParty
-_0800F784: .4byte gEnemyParty
-_0800F788: .4byte gUnknown_02024D1E
-_0800F78C:
- bl sub_800B950
- ldr r0, _0800F7A0 @ =gUnknown_02024D1E
- ldrb r1, [r0]
- adds r1, 0x1
- movs r2, 0
- strb r1, [r0]
- strb r2, [r0, 0x1]
- strb r2, [r0, 0x2]
- b _0800F7E0
- .align 2, 0
-_0800F7A0: .4byte gUnknown_02024D1E
-_0800F7A4:
- ldr r0, _0800F7EC @ =gUnknown_02024D1F
- adds r1, r0, 0x1
- bl battle_load_something
- lsls r0, 24
- cmp r0, 0
- beq _0800F7E0
- ldr r2, _0800F7F0 @ =gUnknown_030042D0
- ldr r1, _0800F7F4 @ =gMain
- ldr r0, [r1]
- str r0, [r2]
- ldr r0, _0800F7F8 @ =sub_8010824
- str r0, [r1]
- ldr r0, _0800F7FC @ =sub_800F808
- bl SetMainCallback2
- ldr r3, _0800F800 @ =gBattleTypeFlags
- ldrh r2, [r3]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- beq _0800F7E0
- ldr r1, _0800F804 @ =gTrainerBattleOpponent
- movs r4, 0x80
- lsls r4, 4
- adds r0, r4, 0
- strh r0, [r1]
- movs r0, 0x20
- orrs r0, r2
- strh r0, [r3]
-_0800F7E0:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800F7EC: .4byte gUnknown_02024D1F
-_0800F7F0: .4byte gUnknown_030042D0
-_0800F7F4: .4byte gMain
-_0800F7F8: .4byte sub_8010824
-_0800F7FC: .4byte sub_800F808
-_0800F800: .4byte gBattleTypeFlags
-_0800F804: .4byte gTrainerBattleOpponent
- thumb_func_end sub_800F298
-
- thumb_func_start sub_800F808
-sub_800F808: @ 800F808
- push {lr}
- bl AnimateSprites
- bl BuildOamBuffer
- ldr r0, _0800F824 @ =gUnknown_03004210
- bl sub_800374C
- bl UpdatePaletteFade
- bl RunTasks
- pop {r0}
- bx r0
- .align 2, 0
-_0800F824: .4byte gUnknown_03004210
- thumb_func_end sub_800F808
-
- thumb_func_start sub_800F828
-sub_800F828: @ 800F828
- movs r1, 0
- strh r1, [r0, 0x2E]
- ldr r1, _0800F834 @ =sub_800F838
- str r1, [r0, 0x1C]
- bx lr
- .align 2, 0
-_0800F834: .4byte sub_800F838
- thumb_func_end sub_800F828
-
- thumb_func_start sub_800F838
-sub_800F838: @ 800F838
- push {r4,r5,lr}
- adds r3, r0, 0
- ldr r5, _0800F850 @ =0x02000000
- movs r0, 0x2E
- ldrsh r1, [r3, r0]
- cmp r1, 0x1
- beq _0800F86C
- cmp r1, 0x1
- bgt _0800F854
- cmp r1, 0
- beq _0800F85A
- b _0800F8DC
- .align 2, 0
-_0800F850: .4byte 0x02000000
-_0800F854:
- cmp r1, 0x2
- beq _0800F8C8
- b _0800F8DC
-_0800F85A:
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
- strh r1, [r3, 0x30]
- ldr r0, _0800F8C4 @ =0x00000281
- strh r0, [r3, 0x32]
- strh r1, [r3, 0x34]
- movs r0, 0x1
- strh r0, [r3, 0x36]
-_0800F86C:
- ldrh r0, [r3, 0x36]
- subs r0, 0x1
- strh r0, [r3, 0x36]
- lsls r0, 16
- cmp r0, 0
- bne _0800F8DC
- movs r0, 0x2
- strh r0, [r3, 0x36]
- movs r4, 0x30
- ldrsh r2, [r3, r4]
- movs r0, 0x34
- ldrsh r1, [r3, r0]
- lsls r1, 5
- adds r2, r1
- movs r4, 0x32
- ldrsh r0, [r3, r4]
- subs r0, r1
- movs r4, 0x3D
- lsls r0, 1
- adds r0, r5
- lsls r2, 1
- adds r2, r5
- movs r1, 0x1C
-_0800F89A:
- strh r4, [r2]
- strh r4, [r0]
- adds r0, 0x4
- adds r2, 0x4
- subs r1, 0x2
- cmp r1, 0
- bge _0800F89A
- ldrh r0, [r3, 0x34]
- adds r0, 0x1
- strh r0, [r3, 0x34]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x15
- bne _0800F8DC
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
- movs r0, 0x20
- strh r0, [r3, 0x30]
- b _0800F8DC
- .align 2, 0
-_0800F8C4: .4byte 0x00000281
-_0800F8C8:
- ldrh r0, [r3, 0x30]
- subs r0, 0x1
- strh r0, [r3, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- bne _0800F8DC
- ldr r0, _0800F8E4 @ =sub_800E7C4
- bl SetMainCallback2
-_0800F8DC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0800F8E4: .4byte sub_800E7C4
- thumb_func_end sub_800F838
-
- thumb_func_start sub_800F8E8
-sub_800F8E8: @ 800F8E8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x24
- str r0, [sp, 0x10]
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp, 0x14]
- movs r0, 0
- mov r9, r0
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- bne _0800F90C
- movs r0, 0
- b _0800FCB4
-_0800F90C:
- ldr r0, _0800F93C @ =gBattleTypeFlags
- ldrh r1, [r0]
- ldr r0, _0800F940 @ =0x00000908
- ands r0, r1
- ldr r1, [sp, 0x14]
- lsls r1, 2
- str r1, [sp, 0x20]
- cmp r0, 0x8
- beq _0800F920
- b _0800FCA4
-_0800F920:
- bl ZeroEnemyPartyMons
- movs r2, 0
- str r2, [sp, 0x18]
- ldr r2, _0800F944 @ =gTrainers
- ldr r1, [sp, 0x20]
- ldr r3, [sp, 0x14]
- adds r0, r1, r3
- lsls r0, 3
- adds r0, r2
- adds r0, 0x20
- ldr r4, [sp, 0x18]
- b _0800FC86
- .align 2, 0
-_0800F93C: .4byte gBattleTypeFlags
-_0800F940: .4byte 0x00000908
-_0800F944: .4byte gTrainers
-_0800F948:
- ldr r3, [sp, 0x14]
- adds r0, r1, r3
- lsls r0, 3
- adds r1, r0, r2
- ldrb r0, [r1, 0x18]
- cmp r0, 0x1
- bne _0800F95C
- movs r4, 0x80
- mov r10, r4
- b _0800F96E
-_0800F95C:
- ldrb r1, [r1, 0x2]
- movs r0, 0x80
- ands r0, r1
- movs r1, 0x88
- mov r10, r1
- cmp r0, 0
- beq _0800F96E
- movs r2, 0x78
- mov r10, r2
-_0800F96E:
- movs r6, 0
- ldr r0, _0800F9C4 @ =gTrainers
- ldr r2, [sp, 0x20]
- ldr r3, [sp, 0x14]
- adds r1, r2, r3
- lsls r1, 3
- adds r3, r0, 0x4
- adds r1, r3
- ldrb r1, [r1]
- adds r4, r0, 0
- ldr r0, [sp, 0x18]
- adds r0, 0x1
- str r0, [sp, 0x1C]
- cmp r1, 0xFF
- beq _0800F9A6
-_0800F98C:
- ldr r0, [sp, 0x14]
- adds r1, r2, r0
- lsls r1, 3
- adds r0, r6, r1
- adds r0, r3
- ldrb r0, [r0]
- add r9, r0
- adds r6, 0x1
- adds r1, r6, r1
- adds r1, r3
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _0800F98C
-_0800F9A6:
- adds r2, r4, 0
- ldr r1, [sp, 0x20]
- ldr r3, [sp, 0x14]
- adds r0, r1, r3
- lsls r1, r0, 3
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0800FA5C
- cmp r0, 0x1
- bgt _0800F9C8
- cmp r0, 0
- beq _0800F9D6
- b _0800FC74
- .align 2, 0
-_0800F9C4: .4byte gTrainers
-_0800F9C8:
- cmp r0, 0x2
- bne _0800F9CE
- b _0800FB1C
-_0800F9CE:
- cmp r0, 0x3
- bne _0800F9D4
- b _0800FBB0
-_0800F9D4:
- b _0800FC74
-_0800F9D6:
- adds r0, r2, 0
- adds r0, 0x24
- adds r0, r1, r0
- ldr r4, [r0]
- movs r6, 0
- ldr r0, [sp, 0x18]
- lsls r2, r0, 3
- adds r0, r2, r4
- ldrh r1, [r0, 0x4]
- movs r0, 0xB
- muls r0, r1
- ldr r1, _0800FA58 @ =gSpeciesNames
- adds r0, r1
- ldrb r0, [r0]
- adds r5, r2, 0
- cmp r0, 0xFF
- beq _0800FA18
- adds r3, r1, 0
- movs r7, 0xB
-_0800F9FC:
- adds r0, r2, r4
- ldrh r0, [r0, 0x4]
- adds r1, r0, 0
- muls r1, r7
- adds r0, r6, r1
- adds r0, r3
- ldrb r0, [r0]
- add r9, r0
- adds r6, 0x1
- adds r1, r6, r1
- adds r1, r3
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _0800F9FC
-_0800FA18:
- mov r2, r9
- lsls r0, r2, 8
- add r10, r0
- adds r4, r5, r4
- ldrh r1, [r4]
- lsls r0, r1, 5
- subs r0, r1
- movs r1, 0xFF
- bl __divsi3
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r3, [sp, 0x18]
- movs r1, 0x64
- adds r0, r3, 0
- muls r0, r1
- ldr r2, [sp, 0x10]
- adds r0, r2, r0
- ldrh r1, [r4, 0x4]
- ldrb r2, [r4, 0x2]
- movs r3, 0x1
- str r3, [sp]
- mov r3, r10
- str r3, [sp, 0x4]
- movs r3, 0x2
- str r3, [sp, 0x8]
- movs r3, 0
- str r3, [sp, 0xC]
- adds r3, r6, 0
- bl CreateMon
- b _0800FC74
- .align 2, 0
-_0800FA58: .4byte gSpeciesNames
-_0800FA5C:
- adds r0, r2, 0
- adds r0, 0x24
- adds r0, r1, r0
- ldr r7, [r0]
- movs r6, 0
- ldr r4, [sp, 0x18]
- lsls r2, r4, 4
- adds r0, r2, r7
- ldrh r1, [r0, 0x4]
- movs r0, 0xB
- muls r0, r1
- ldr r1, _0800FB14 @ =gSpeciesNames
- adds r0, r1
- ldrb r0, [r0]
- mov r8, r2
- cmp r0, 0xFF
- beq _0800FA9E
- adds r3, r1, 0
- movs r4, 0xB
-_0800FA82:
- adds r0, r2, r7
- ldrh r0, [r0, 0x4]
- adds r1, r0, 0
- muls r1, r4
- adds r0, r6, r1
- adds r0, r3
- ldrb r0, [r0]
- add r9, r0
- adds r6, 0x1
- adds r1, r6, r1
- adds r1, r3
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _0800FA82
-_0800FA9E:
- mov r2, r9
- lsls r0, r2, 8
- add r10, r0
- mov r3, r8
- adds r4, r3, r7
- ldrh r1, [r4]
- lsls r0, r1, 5
- subs r0, r1
- movs r1, 0xFF
- bl __divsi3
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, [sp, 0x18]
- movs r1, 0x64
- adds r5, r0, 0
- muls r5, r1
- ldr r2, [sp, 0x10]
- adds r5, r2, r5
- ldrh r1, [r4, 0x4]
- ldrb r2, [r4, 0x2]
- movs r0, 0x1
- str r0, [sp]
- mov r3, r10
- str r3, [sp, 0x4]
- movs r0, 0x2
- str r0, [sp, 0x8]
- movs r0, 0
- str r0, [sp, 0xC]
- adds r0, r5, 0
- adds r3, r6, 0
- bl CreateMon
- movs r6, 0
- mov r0, r8
- adds r0, 0x6
- adds r4, r7, r0
-_0800FAE8:
- adds r1, r6, 0
- adds r1, 0xD
- adds r0, r5, 0
- adds r2, r4, 0
- bl SetMonData
- adds r1, r6, 0
- adds r1, 0x11
- ldrh r0, [r4]
- lsls r2, r0, 1
- adds r2, r0
- lsls r2, 2
- ldr r0, _0800FB18 @ =gBattleMoves + 0x4 @ PP offset
- adds r2, r0
- adds r0, r5, 0
- bl SetMonData
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0800FAE8
- b _0800FC74
- .align 2, 0
-_0800FB14: .4byte gSpeciesNames
-_0800FB18: .4byte gBattleMoves + 0x4 @ PP offset
-_0800FB1C:
- adds r0, r2, 0
- adds r0, 0x24
- adds r0, r1, r0
- ldr r4, [r0]
- movs r6, 0
- ldr r0, [sp, 0x18]
- lsls r2, r0, 3
- adds r0, r2, r4
- ldrh r1, [r0, 0x4]
- movs r0, 0xB
- muls r0, r1
- ldr r1, _0800FBAC @ =gSpeciesNames
- adds r0, r1
- ldrb r0, [r0]
- adds r5, r2, 0
- cmp r0, 0xFF
- beq _0800FB5E
- adds r3, r1, 0
- movs r7, 0xB
-_0800FB42:
- adds r0, r2, r4
- ldrh r0, [r0, 0x4]
- adds r1, r0, 0
- muls r1, r7
- adds r0, r6, r1
- adds r0, r3
- ldrb r0, [r0]
- add r9, r0
- adds r6, 0x1
- adds r1, r6, r1
- adds r1, r3
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _0800FB42
-_0800FB5E:
- mov r2, r9
- lsls r0, r2, 8
- add r10, r0
- adds r5, r4
- ldrh r1, [r5]
- lsls r0, r1, 5
- subs r0, r1
- movs r1, 0xFF
- bl __divsi3
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r3, [sp, 0x18]
- movs r0, 0x64
- adds r4, r3, 0
- muls r4, r0
- ldr r1, [sp, 0x10]
- adds r4, r1, r4
- ldrh r1, [r5, 0x4]
- ldrb r2, [r5, 0x2]
- movs r0, 0x1
- str r0, [sp]
- mov r3, r10
- str r3, [sp, 0x4]
- movs r0, 0x2
- str r0, [sp, 0x8]
- movs r0, 0
- str r0, [sp, 0xC]
- adds r0, r4, 0
- adds r3, r6, 0
- bl CreateMon
- adds r5, 0x6
- adds r0, r4, 0
- movs r1, 0xC
- adds r2, r5, 0
- bl SetMonData
- b _0800FC74
- .align 2, 0
-_0800FBAC: .4byte gSpeciesNames
-_0800FBB0:
- adds r0, r4, 0
- adds r0, 0x24
- adds r0, r1, r0
- ldr r7, [r0]
- movs r6, 0
- ldr r4, [sp, 0x18]
- lsls r2, r4, 4
- adds r0, r2, r7
- ldrh r1, [r0, 0x4]
- movs r0, 0xB
- muls r0, r1
- ldr r1, _0800FCC4 @ =gSpeciesNames
- adds r0, r1
- ldrb r0, [r0]
- mov r8, r2
- cmp r0, 0xFF
- beq _0800FBF2
- adds r3, r1, 0
- movs r4, 0xB
-_0800FBD6:
- adds r0, r2, r7
- ldrh r0, [r0, 0x4]
- adds r1, r0, 0
- muls r1, r4
- adds r0, r6, r1
- adds r0, r3
- ldrb r0, [r0]
- add r9, r0
- adds r6, 0x1
- adds r1, r6, r1
- adds r1, r3
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _0800FBD6
-_0800FBF2:
- mov r2, r9
- lsls r0, r2, 8
- add r10, r0
- mov r3, r8
- adds r5, r3, r7
- ldrh r1, [r5]
- lsls r0, r1, 5
- subs r0, r1
- movs r1, 0xFF
- bl __divsi3
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, [sp, 0x18]
- movs r1, 0x64
- adds r4, r0, 0
- muls r4, r1
- ldr r2, [sp, 0x10]
- adds r4, r2, r4
- ldrh r1, [r5, 0x4]
- ldrb r2, [r5, 0x2]
- movs r0, 0x1
- str r0, [sp]
- mov r3, r10
- str r3, [sp, 0x4]
- movs r0, 0x2
- str r0, [sp, 0x8]
- movs r0, 0
- str r0, [sp, 0xC]
- adds r0, r4, 0
- adds r3, r6, 0
- bl CreateMon
- adds r5, 0x6
- adds r0, r4, 0
- movs r1, 0xC
- adds r2, r5, 0
- bl SetMonData
- movs r6, 0
- adds r5, r4, 0
- mov r0, r8
- adds r0, 0x8
- adds r4, r7, r0
-_0800FC4A:
- adds r1, r6, 0
- adds r1, 0xD
- adds r0, r5, 0
- adds r2, r4, 0
- bl SetMonData
- adds r1, r6, 0
- adds r1, 0x11
- ldrh r0, [r4]
- lsls r2, r0, 1
- adds r2, r0
- lsls r2, 2
- ldr r0, _0800FCC8 @ =gBattleMoves + 0x4 @ PP offset
- adds r2, r0
- adds r0, r5, 0
- bl SetMonData
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0800FC4A
-_0800FC74:
- ldr r4, [sp, 0x1C]
- str r4, [sp, 0x18]
- ldr r2, _0800FCCC @ =gTrainers
- ldr r1, [sp, 0x20]
- ldr r3, [sp, 0x14]
- adds r0, r1, r3
- lsls r0, 3
- adds r0, r2
- adds r0, 0x20
-_0800FC86:
- ldrb r0, [r0]
- cmp r4, r0
- bge _0800FC8E
- b _0800F948
-_0800FC8E:
- ldr r2, _0800FCD0 @ =gBattleTypeFlags
- ldr r1, _0800FCCC @ =gTrainers
- ldr r4, [sp, 0x20]
- ldr r3, [sp, 0x14]
- adds r0, r4, r3
- lsls r0, 3
- adds r0, r1
- ldrb r0, [r0, 0x18]
- ldrh r1, [r2]
- orrs r0, r1
- strh r0, [r2]
-_0800FCA4:
- ldr r0, _0800FCCC @ =gTrainers
- ldr r4, [sp, 0x20]
- ldr r2, [sp, 0x14]
- adds r1, r4, r2
- lsls r1, 3
- adds r1, r0
- adds r1, 0x20
- ldrb r0, [r1]
-_0800FCB4:
- add sp, 0x24
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0800FCC4: .4byte gSpeciesNames
-_0800FCC8: .4byte gBattleMoves + 0x4 @ PP offset
-_0800FCCC: .4byte gTrainers
-_0800FCD0: .4byte gBattleTypeFlags
- thumb_func_end sub_800F8E8
-
thumb_func_start sub_800FCD4
sub_800FCD4: @ 800FCD4
push {lr}
diff --git a/asm/field_specials.s b/asm/field_specials.s
index 269f45a33..63677b6a0 100644
--- a/asm/field_specials.s
+++ b/asm/field_specials.s
@@ -3695,8 +3695,8 @@ _0810F612:
bx r1
thumb_func_end sub_810F5BC
- thumb_func_start sub_810F618
-sub_810F618: @ 810F618
+ thumb_func_start SetShoalItemFlag
+SetShoalItemFlag: @ 810F618
push {lr}
ldr r0, _0810F624 @ =0x0000085f
bl FlagSet
@@ -3704,7 +3704,7 @@ sub_810F618: @ 810F618
bx r0
.align 2, 0
_0810F624: .4byte 0x0000085f
- thumb_func_end sub_810F618
+ thumb_func_end SetShoalItemFlag
thumb_func_start PutZigzagoonInPlayerParty
PutZigzagoonInPlayerParty: @ 810F628
diff --git a/asm/field_weather.s b/asm/field_weather.s
index 01190c75e..92d2ffab2 100644
--- a/asm/field_weather.s
+++ b/asm/field_weather.s
@@ -7537,8 +7537,8 @@ _0808082E:
bx r1
thumb_func_end TranslateWeatherNum
- thumb_func_start sub_8080834
-sub_8080834: @ 8080834
+ thumb_func_start UpdateWeatherPerDay
+UpdateWeatherPerDay: @ 8080834
lsls r0, 16
ldr r2, _08080850 @ =gSaveBlock1
adds r2, 0x2F
@@ -7554,7 +7554,7 @@ sub_8080834: @ 8080834
bx lr
.align 2, 0
_08080850: .4byte gSaveBlock1
- thumb_func_end sub_8080834
+ thumb_func_end UpdateWeatherPerDay
thumb_func_start UpdateRainCounter
UpdateRainCounter: @ 8080854
diff --git a/include/battle.h b/include/battle.h
index 8f7141803..f05c7369d 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -7,7 +7,7 @@
#define BATTLE_TYPE_TRAINER 0x0008
#define BATTLE_TYPE_FIRST_BATTLE 0x0010
#define BATTLE_TYPE_20 0x0020
-#define BATTLE_TYPE_40 0x0040
+#define BATTLE_TYPE_MULTI 0x0040
#define BATTLE_TYPE_SAFARI 0x0080
#define BATTLE_TYPE_BATTLE_TOWER 0x0100
#define BATTLE_TYPE_WALLY_TUTORIAL 0x0200
diff --git a/include/berry.h b/include/berry.h
index 0013b4dba..f0acbe0ad 100644
--- a/include/berry.h
+++ b/include/berry.h
@@ -22,7 +22,7 @@ bool8 IsPlayerFacingPlantedBerryTree(void);
bool8 TryToWaterBerryTree(void);
void ClearBerryTrees(void);
bool32 BerryTreeGrow(struct BerryTree *tree);
-void BerryTreeTimeUpdate(int time);
+void BerryTreeTimeUpdate(s32 minutes);
void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle);
void RemoveBerryTree(u8 id);
u8 GetBerryTypeByBerryTreeId(u8 id);
diff --git a/include/dewford_trend.h b/include/dewford_trend.h
index af1b61363..a37de3389 100644
--- a/include/dewford_trend.h
+++ b/include/dewford_trend.h
@@ -4,7 +4,7 @@
#define ARRAY_2007800 ((struct EasyChatPair *)(unk_2000000 + 0x7800))
#define ARRAY_2007900 ((struct EasyChatPair *)(unk_2000000 + 0x7900))
-void InitDewfordTrends(void);
+void InitDewfordTrend(void);
void sub_80FA4E4(void *, u32, u8);
#endif
diff --git a/include/flags.h b/include/flags.h
index 0c0cebc5f..56325dea6 100644
--- a/include/flags.h
+++ b/include/flags.h
@@ -51,6 +51,7 @@
#define SYS_BRAILLE_WAIT 0x851
#define SYS_BRAILLE_FLY 0x852
+#define SYS_SHOAL_ITEM 0x85F
#define SYS_B_DASH 0x860 // got Running Shoes
#define SYS_CTRL_OBJ_DELETE 0x861
#define SYS_RESET_RTC_ENABLE 0x862
diff --git a/include/global.berry.h b/include/global.berry.h
index b7938868d..6632e55e2 100644
--- a/include/global.berry.h
+++ b/include/global.berry.h
@@ -34,10 +34,10 @@ struct EnigmaBerry
struct BattleEnigmaBerry
{
- u8 name[7];
- u8 holdEffect;
- u8 itemEffect[18];
- u8 holdEffectParam;
+ /*0x00*/ u8 name[7];
+ /*0x07*/ u8 holdEffect;
+ /*0x08*/ u8 itemEffect[18];
+ /*0x1A*/ u8 holdEffectParam;
};
struct BerryTree
@@ -45,7 +45,7 @@ struct BerryTree
u8 berry;
u8 stage:7;
u8 growthSparkle:1;
- u16 secondsUntilNextStage;
+ u16 minutesUntilNextStage;
u8 berryYield;
u8 regrowthCount:4;
u8 watered1:1;
diff --git a/ld_script.txt b/ld_script.txt
index 7d92e2f7a..0cc6ef0f0 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -51,6 +51,7 @@ SECTIONS {
asm/battle_1.o(.text);
src/rom_800D42C.o(.text);
asm/battle_1.o(.text_800DC24);
+ src/battle_2.o(.text);
asm/battle_2.o(.text);
asm/battle_3.o(.text);
asm/battle_4.o(.text);
diff --git a/src/battle_2.c b/src/battle_2.c
new file mode 100644
index 000000000..a9f0fd57a
--- /dev/null
+++ b/src/battle_2.c
@@ -0,0 +1,977 @@
+#include "global.h"
+#include "battle.h"
+#include "main.h"
+#include "text.h"
+#include "palette.h"
+#include "sprite.h"
+#include "task.h"
+#include "pokemon.h"
+#include "species.h"
+#include "link.h"
+#include "name_string_util.h"
+#include "battle_setup.h"
+
+struct UnknownStruct5
+{
+ u32 unk0;
+ u32 unk4;
+ u32 unk8;
+};
+
+struct UnknownStruct6
+{
+ u16 unk0[0xA0];
+ u8 fillerA0[0x640];
+ u16 unk780[0xA0];
+};
+
+struct UnknownStruct7
+{
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+};
+
+struct UnknownStruct8
+{
+ u8 unk0[7];
+ u8 unk7;
+ u8 unk8[18];
+ u8 unk1A;
+};
+
+struct UnknownPokemonStruct2
+{
+ /*0x00*/ u16 species;
+ /*0x02*/ u16 heldItem;
+ /*0x04*/ u8 nickname[11];
+ /*0x0F*/ u8 level;
+ /*0x10*/ u16 hp;
+ /*0x12*/ u16 maxhp;
+ /*0x14*/ u32 status;
+ /*0x18*/ u32 personality;
+ /*0x1C*/ u8 gender;
+ /*0x1D*/ u8 language;
+};
+
+extern const struct UnknownStruct5 gUnknown_081F9674;
+extern const u8 gUnknown_081F96C8[];
+extern const struct Trainer gTrainers[];
+extern const u8 gSpeciesNames[][11];
+extern const struct BattleMove gBattleMoves[];
+
+extern u8 ewram[];
+#define ewram0 (*(struct UnknownStruct7 *)(ewram + 0x0))
+#define ewram4 (*(struct UnknownStruct8 *)(ewram + 0x4))
+#define ewram160CB (ewram[0x160CB])
+#define ewram1D000 ((struct Pokemon *)(ewram + 0x1D000))
+
+extern struct UnknownPokemonStruct2 gUnknown_02023A00[];
+extern u8 gUnknown_02024D1E[];
+extern u8 gUnknown_02024D1F[]; // I don't actually know what type this is.
+extern u16 gUnknown_030041B0;
+extern u16 gUnknown_030041B4;
+extern u16 gUnknown_030041B8;
+extern struct Window gUnknown_030041D0;
+extern struct Window gUnknown_03004210;
+extern struct Window gUnknown_03004250;
+extern u16 gUnknown_03004240;
+extern u16 gUnknown_03004280;
+extern u16 gUnknown_03004288;
+extern u16 gUnknown_030042A0;
+extern u16 gUnknown_030042A4;
+extern u16 gUnknown_030042C0;
+extern u16 gUnknown_030042C4;
+extern MainCallback gUnknown_030042D0;
+extern struct UnknownStruct6 gUnknown_03004DE0;
+//extern u16 gUnknown_03004DE0[][0xA0]; // possibly?
+extern u16 gBattleTypeFlags;
+extern s8 gBattleTerrain; // I'm not sure if this is supposed to be s8 or u8. Regardless, it must have the same type as the return value of GetBattleTerrain.
+extern u8 gReservedSpritePaletteCount;
+extern u16 gTrainerBattleOpponent;
+extern struct BattleEnigmaBerry gEnigmaBerries[];
+extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2];
+
+extern void sub_800B858(void);
+extern void dp12_8087EA4(void);
+extern void sub_80895F8();
+extern void sub_800D6D4();
+extern void sub_800DAB8();
+extern void sub_800E23C();
+extern void setup_poochyena_battle();
+extern void SetWildMonHeldItem(void);
+extern void AdjustFriendship(struct Pokemon *, u8);
+extern void sub_800DE30(u8);
+extern void sub_800B950(void);
+extern u8 battle_load_something();
+extern void OpenPartyMenu();
+
+void sub_800E7F8(void);
+void sub_800EC9C(void);
+void sub_800F104(void);
+void sub_800F298(void);
+void sub_800F808(void);
+void sub_800F838(struct Sprite *);
+u8 CreateNPCTrainerParty(struct Pokemon *, u16);
+void sub_800FCFC(void);
+void sub_8010824(void);
+
+void sub_800E7C4(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ sub_800B858();
+ SetMainCallback2(sub_800F104);
+ gUnknown_02024D1E[0] = 0;
+ }
+ else
+ {
+ sub_800E7F8();
+ }
+}
+
+void sub_800E7F8(void)
+{
+ s32 i;
+
+ SetHBlankCallback(NULL);
+ SetVBlankCallback(NULL);
+
+ CpuFill32(0, (void *)VRAM, VRAM_SIZE);
+
+ REG_MOSAIC = 0;
+ REG_WIN0H = 0xF0;
+ REG_WIN0V = 0x5051;
+ REG_WININ = 0;
+ REG_WINOUT = 0;
+ gUnknown_030042C4 = 0xF0;
+ gUnknown_03004240 = 0x5051;
+ dp12_8087EA4();
+
+ for (i = 0; i < 80; i++)
+ {
+ gUnknown_03004DE0.unk0[i] = 0xF0;
+ gUnknown_03004DE0.unk780[i] = 0xF0;
+ }
+ for (i = 80; i < 160; i++)
+ {
+ asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter
+ gUnknown_03004DE0.unk0[i] = 0xFF10;
+ gUnknown_03004DE0.unk780[i] = 0xFF10;
+ }
+ sub_80895F8(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8);
+ SetUpWindowConfig(&gWindowConfig_81E6C58);
+ ResetPaletteFade();
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 0;
+ gUnknown_030042C0 = 0;
+ gUnknown_030041B4 = 0;
+ gUnknown_03004288 = 0;
+ gUnknown_03004280 = 0;
+ gUnknown_030041B0 = 0;
+ gUnknown_030041B8 = 0;
+ gBattleTerrain = GetBattleTerrain();
+ InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58);
+ InitWindowFromConfig(&gUnknown_030041D0, &gWindowConfig_81E71D0);
+ InitWindowFromConfig(&gUnknown_03004250, &gWindowConfig_81E71EC);
+ sub_800D6D4();
+ sub_800DAB8();
+ ResetSpriteData();
+ ResetTasks();
+ sub_800E23C();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 4;
+ SetVBlankCallback(sub_800FCFC);
+ setup_poochyena_battle();
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ SetMainCallback2(sub_800F298);
+ else
+ SetMainCallback2(sub_800EC9C);
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ {
+ CreateNPCTrainerParty(gEnemyParty, gTrainerBattleOpponent);
+ SetWildMonHeldItem();
+ }
+ gMain.inBattle = TRUE;
+ for (i = 0; i < 6; i++)
+ AdjustFriendship(&gPlayerParty[i], 3);
+ gUnknown_02024D1E[0] = 0;
+}
+
+void sub_800E9EC(void)
+{
+ u16 r6 = 0;
+ u16 species;
+ u16 hp;
+ u32 status;
+ s32 i;
+
+ for (i = 0; i < 6; i++)
+ {
+ species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
+ hp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
+ status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS);
+
+ if (species == 0)
+ continue;
+ if (species != SPECIES_EGG && hp != 0 && status == 0)
+ r6 |= 1 << i * 2;
+
+ if (species == 0)
+ continue;
+ if (hp != 0 && (species == SPECIES_EGG || status != 0))
+ r6 |= 2 << i * 2;
+
+ if (species == 0)
+ continue;
+ if (species != SPECIES_EGG && hp == 0)
+ r6 |= 3 << i * 2;
+ }
+ ewram0.unk2 = r6;
+ ewram0.unk3 = r6 >> 8;
+}
+
+void sub_800EAAC(void)
+{
+ s32 i;
+ struct UnknownStruct8 *_ewram4 = &ewram4;
+
+ for (i = 0; i < 7; i++)
+ _ewram4->unk0[i] = gSaveBlock1.enigmaBerry.berry.name[i];
+ for (i = 0; i < 18; i++)
+ _ewram4->unk8[i] = gSaveBlock1.enigmaBerry.itemEffect[i];
+ _ewram4->unk7 = gSaveBlock1.enigmaBerry.holdEffect;
+ _ewram4->unk1A = gSaveBlock1.enigmaBerry.holdEffectParam;
+}
+
+void sub_800EB08(void)
+{
+ s32 i;
+ s32 j;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ {
+ for (i = 0; i < 7; i++)
+ {
+ gEnigmaBerries[0].name[i] = gSaveBlock1.enigmaBerry.berry.name[i];
+ gEnigmaBerries[2].name[i] = gSaveBlock1.enigmaBerry.berry.name[i];
+ }
+ for (i = 0; i < 18; i++)
+ {
+ gEnigmaBerries[0].itemEffect[i] = gSaveBlock1.enigmaBerry.itemEffect[i];
+ gEnigmaBerries[2].itemEffect[i] = gSaveBlock1.enigmaBerry.itemEffect[i];
+ }
+ gEnigmaBerries[0].holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
+ gEnigmaBerries[2].holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
+ gEnigmaBerries[0].holdEffectParam = gSaveBlock1.enigmaBerry.holdEffectParam;
+ gEnigmaBerries[2].holdEffectParam = gSaveBlock1.enigmaBerry.holdEffectParam;
+ }
+ else
+ {
+ s32 numPlayers;
+ struct BattleEnigmaBerry *src;
+ u8 r4;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ numPlayers = 4;
+ else
+ numPlayers = 2;
+ for (i = 0; i < numPlayers; i++)
+ {
+ src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2);
+ r4 = gLinkPlayers[i].lp_field_18;
+
+ for (j = 0; j < 7; j++)
+ gEnigmaBerries[r4].name[j] = src->name[j];
+ for (j = 0; j < 18; j++)
+ gEnigmaBerries[r4].itemEffect[j] = src->itemEffect[j];
+ gEnigmaBerries[r4].holdEffect = src->holdEffect;
+ gEnigmaBerries[r4].holdEffectParam = src->holdEffectParam;
+ }
+ }
+}
+
+void shedinja_something(struct Pokemon *pkmn)
+{
+ u8 nickname[POKEMON_NAME_LENGTH + 1];
+ u8 language = 1;
+
+ if (GetMonData(pkmn, MON_DATA_SPECIES) == SPECIES_SHEDINJA
+ && GetMonData(pkmn, MON_DATA_LANGUAGE) != language)
+ {
+ GetMonData(pkmn, MON_DATA_NICKNAME, nickname);
+ if (StringCompareWithoutExtCtrlCodes(nickname, gUnknown_081F96C8) == 0)
+ SetMonData(pkmn, MON_DATA_LANGUAGE, &language);
+ }
+}
+
+void sub_800EC9C(void)
+{
+ u8 playerId;
+ u8 enemyId;
+
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ playerId = GetMultiplayerId();
+ ewram160CB = playerId;
+ enemyId = playerId ^ 1;
+
+ switch (gUnknown_02024D1E[0])
+ {
+ case 0:
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC())
+ {
+ ewram0.unk0 = 1;
+ ewram0.unk1 = 1;
+ sub_800E9EC();
+ sub_800EAAC();
+ SendBlock(bitmask_all_link_players_but_self(), &ewram0, 32);
+ gUnknown_02024D1E[0] = 1;
+ }
+ }
+ else
+ {
+ gBattleTypeFlags |= BATTLE_TYPE_WILD;
+ gUnknown_02024D1E[0] = 8;
+ sub_800EB08();
+ }
+ break;
+ case 1:
+ if ((GetBlockReceivedStatus() & 3) == 3)
+ {
+ s32 id;
+ u8 taskId;
+
+ ResetBlockReceivedFlags();
+ id = 0;
+ if (gBlockRecvBuffer[0][0] == 0x100)
+ {
+ if (playerId == 0)
+ gBattleTypeFlags |= 12;
+ else
+ gBattleTypeFlags |= 8;
+ id++;
+ }
+ if (id == 0)
+ {
+ if (gBlockRecvBuffer[0][0] == gBlockRecvBuffer[1][0])
+ {
+ if (playerId == 0)
+ gBattleTypeFlags |= 12;
+ else
+ gBattleTypeFlags |= 8;
+ id++;
+ }
+ if (id == 0)
+ {
+ while (id < 2)
+ {
+ if (gBlockRecvBuffer[id][0] > 0x0101 && id != playerId)
+ break;
+ id++;
+ }
+ if (id == 2)
+ gBattleTypeFlags |= 12;
+ else
+ gBattleTypeFlags |= 8;
+ }
+ }
+ sub_800EB08();
+ taskId = CreateTask(sub_800DE30, 0);
+ gTasks[taskId].data[1] = 0x10E;
+ gTasks[taskId].data[2] = 0x5A;
+ gTasks[taskId].data[5] = 0;
+ gTasks[taskId].data[3] = ewram0.unk2 | (ewram0.unk3 << 8);
+ gTasks[taskId].data[4] = gBlockRecvBuffer[enemyId][1];
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 2:
+ if (sub_8007ECC())
+ {
+ SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(*gPlayerParty) * 2);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 3:
+ if ((GetBlockReceivedStatus() & 3) == 3)
+ {
+ ResetBlockReceivedFlags();
+ memcpy(gEnemyParty, gBlockRecvBuffer[enemyId], sizeof(*gEnemyParty) * 2);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 4:
+ if (sub_8007ECC())
+ {
+ SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(*gPlayerParty) * 2);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 5:
+ if ((GetBlockReceivedStatus() & 3) == 3)
+ {
+ ResetBlockReceivedFlags();
+ memcpy(gEnemyParty + 2, gBlockRecvBuffer[enemyId], sizeof(*gEnemyParty) * 2);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 6:
+ if (sub_8007ECC())
+ {
+ SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 4, sizeof(*gPlayerParty) * 2);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 7:
+ if ((GetBlockReceivedStatus() & 3) == 3)
+ {
+ ResetBlockReceivedFlags();
+ memcpy(gEnemyParty + 4, gBlockRecvBuffer[enemyId], sizeof(*gEnemyParty) * 2);
+ shedinja_something(&gEnemyParty[0]);
+ shedinja_something(&gEnemyParty[1]);
+ shedinja_something(&gEnemyParty[2]);
+ shedinja_something(&gEnemyParty[3]);
+ shedinja_something(&gEnemyParty[4]);
+ shedinja_something(&gEnemyParty[5]);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 8:
+ sub_800B950();
+ gUnknown_02024D1E[0]++;
+ gUnknown_02024D1E[1] = 0;
+ gUnknown_02024D1E[2] = 0;
+ break;
+ case 9:
+ if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0)
+ {
+ gUnknown_030042D0 = gMain.callback1;
+ gMain.callback1 = sub_8010824;
+ SetMainCallback2(sub_800F808);
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ gTrainerBattleOpponent = 0x800;
+ gBattleTypeFlags |= BATTLE_TYPE_20;
+ }
+ }
+ break;
+ }
+}
+
+void sub_800F02C(void)
+{
+ s32 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ u8 *nickname = gUnknown_02023A00[i].nickname;
+
+ gUnknown_02023A00[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES);
+ gUnknown_02023A00[i].heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nickname);
+ gUnknown_02023A00[i].level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
+ gUnknown_02023A00[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
+ gUnknown_02023A00[i].maxhp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
+ gUnknown_02023A00[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS);
+ gUnknown_02023A00[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY);
+ gUnknown_02023A00[i].gender = GetMonGender(&gPlayerParty[i]);
+ StripExtCtrlCodes(nickname);
+ gUnknown_02023A00[i].language = GetMonData(&gPlayerParty[i], MON_DATA_LANGUAGE);
+ if (gUnknown_02023A00[i].language != 1)
+ PadNameString(nickname, 0);
+ }
+ memcpy(ewram, gUnknown_02023A00, 0x60);
+}
+
+void sub_800F104(void)
+{
+ u8 playerId;
+ MainCallback *pSavedCallback;
+ u16 *pSavedBattleTypeFlags;
+
+ playerId = GetMultiplayerId();
+ ewram160CB = playerId;
+ // Seriously, Game Freak?
+ pSavedCallback = (MainCallback *)(ewram + 0x160C4);
+ pSavedBattleTypeFlags = (u16 *)(ewram + 0x160C2);
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+
+ switch (gUnknown_02024D1E[0])
+ {
+ case 0:
+ if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC())
+ {
+ sub_800F02C();
+ SendBlock(bitmask_all_link_players_but_self(), ewram, 0x60);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 1:
+ if ((GetBlockReceivedStatus() & 0xF) == 0xF)
+ {
+ s32 i;
+
+ ResetBlockReceivedFlags();
+ for (i = 0; i < 4; i++)
+ {
+ if (i != playerId)
+ {
+ if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1))
+ || ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1)))
+ memcpy(gUnknown_02023A00, gBlockRecvBuffer[i], 0x60);
+ }
+ }
+ gUnknown_02024D1E[0]++;
+ *pSavedCallback = gMain.savedCallback;
+ *pSavedBattleTypeFlags = gBattleTypeFlags;
+ gMain.savedCallback = sub_800F104;
+ OpenPartyMenu(5, 0);
+ }
+ break;
+ case 2:
+ if (!gPaletteFade.active)
+ {
+ gUnknown_02024D1E[0] = 3;
+ sub_800832C();
+ }
+ break;
+ case 3:
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ gBattleTypeFlags = *pSavedBattleTypeFlags;
+ gMain.savedCallback = *pSavedCallback;
+ SetMainCallback2(sub_800E7F8);
+ }
+ break;
+ }
+}
+
+void sub_800F298(void)
+{
+ u8 playerId;
+ s32 id;
+
+ playerId = GetMultiplayerId();
+ ewram160CB = playerId;
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ switch (gUnknown_02024D1E[0])
+ {
+ case 0:
+ if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC())
+ {
+ ewram0.unk0 = 1;
+ ewram0.unk1 = 1;
+ sub_800E9EC();
+ sub_800EAAC();
+ SendBlock(bitmask_all_link_players_but_self(), ewram, 0x20);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 1:
+ if ((GetBlockReceivedStatus() & 0xF) == 0xF)
+ {
+ u8 taskId;
+
+ ResetBlockReceivedFlags();
+ id = 0;
+ if (gBlockRecvBuffer[0][0] == 0x100)
+ {
+ if (playerId == 0)
+ gBattleTypeFlags |= 12;
+ else
+ gBattleTypeFlags |= 8;
+ id++;
+ }
+ if (id == 0)
+ {
+ s32 i;
+
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ if (gBlockRecvBuffer[0][0] != gBlockRecvBuffer[i][0])
+ break;
+ }
+ if (i == MAX_LINK_PLAYERS)
+ {
+ if (playerId == 0)
+ gBattleTypeFlags |= 12;
+ else
+ gBattleTypeFlags |= 8;
+ id++;
+ }
+ if (id == 0)
+ {
+ while (id < MAX_LINK_PLAYERS)
+ {
+ if (gBlockRecvBuffer[id][0] == 0x0101 && id != playerId)
+ if (id < playerId)
+ break;
+ if (gBlockRecvBuffer[id][0] > 0x0101 && id != playerId)
+ break;
+ id++;
+ }
+ if (id == MAX_LINK_PLAYERS)
+ gBattleTypeFlags |= 12;
+ else
+ gBattleTypeFlags |= 8;
+ }
+ }
+ sub_800EB08();
+ memcpy(ewram1D000, gPlayerParty, sizeof(struct Pokemon) * 3);
+ taskId = CreateTask(sub_800DE30, 0);
+ gTasks[taskId].data[1] = 0x10E;
+ gTasks[taskId].data[2] = 0x5A;
+ gTasks[taskId].data[5] = 0;
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[4] = 0;
+ for (id = 0; id < MAX_LINK_PLAYERS; id++)
+ {
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ gTasks[taskId].data[3] |= gBlockRecvBuffer[id][1] & 0x3F;
+ break;
+ case 1:
+ gTasks[taskId].data[4] |= gBlockRecvBuffer[id][1] & 0x3F;
+ break;
+ case 2:
+ gTasks[taskId].data[3] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6;
+ break;
+ case 3:
+ gTasks[taskId].data[4] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6;
+ break;
+ }
+ }
+ ZeroPlayerPartyMons();
+ ZeroEnemyPartyMons();
+ gUnknown_02024D1E[0]++;
+ goto step_2;
+ }
+ break;
+ case 2:
+ step_2:
+ if (sub_8007ECC())
+ {
+ SendBlock(bitmask_all_link_players_but_self(), ewram1D000, sizeof(struct Pokemon) * 2);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 3:
+ if ((GetBlockReceivedStatus() & 0xF) == 0xF)
+ {
+ ResetBlockReceivedFlags();
+ for (id = 0; id < MAX_LINK_PLAYERS; id++)
+ {
+ if (id == playerId)
+ {
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ case 3:
+ memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
+ break;
+ case 1:
+ case 2:
+ memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
+ break;
+ }
+ }
+ else
+ {
+ if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1))
+ || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1)))
+ {
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ case 3:
+ memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
+ break;
+ case 1:
+ case 2:
+ memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
+ break;
+ }
+ }
+ else
+ {
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ case 3:
+ memcpy(gEnemyParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
+ break;
+ case 1:
+ case 2:
+ memcpy(gEnemyParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
+ break;
+ }
+ }
+ }
+ }
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 4:
+ if (sub_8007ECC())
+ {
+ SendBlock(bitmask_all_link_players_but_self(), ewram1D000 + 2, sizeof(struct Pokemon));
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 5:
+ if ((GetBlockReceivedStatus() & 0xF) == 0xF)
+ {
+ ResetBlockReceivedFlags();
+ for (id = 0; id < MAX_LINK_PLAYERS; id++)
+ {
+ if (id == playerId)
+ {
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ case 3:
+ memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon));
+ break;
+ case 1:
+ case 2:
+ memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon));
+ break;
+ }
+ }
+ else
+ {
+ if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1))
+ || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1)))
+ {
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ case 3:
+ memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon));
+ break;
+ case 1:
+ case 2:
+ memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon));
+ break;
+ }
+ }
+ else
+ {
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ case 3:
+ memcpy(gEnemyParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon));
+ break;
+ case 1:
+ case 2:
+ memcpy(gEnemyParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon));
+ break;
+ }
+ }
+ }
+ }
+
+ shedinja_something(&gPlayerParty[0]);
+ shedinja_something(&gPlayerParty[1]);
+ shedinja_something(&gPlayerParty[2]);
+ shedinja_something(&gPlayerParty[3]);
+ shedinja_something(&gPlayerParty[4]);
+ shedinja_something(&gPlayerParty[5]);
+
+ shedinja_something(&gEnemyParty[0]);
+ shedinja_something(&gEnemyParty[1]);
+ shedinja_something(&gEnemyParty[2]);
+ shedinja_something(&gEnemyParty[3]);
+ shedinja_something(&gEnemyParty[4]);
+ shedinja_something(&gEnemyParty[5]);
+
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 6:
+ sub_800B950();
+ gUnknown_02024D1E[0]++;
+ gUnknown_02024D1E[1] = 0;
+ gUnknown_02024D1E[2] = 0;
+ break;
+ case 7:
+ if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0)
+ {
+ gUnknown_030042D0 = gMain.callback1;
+ gMain.callback1 = sub_8010824;
+ SetMainCallback2(sub_800F808);
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ gTrainerBattleOpponent = 0x800;
+ gBattleTypeFlags |= BATTLE_TYPE_20;
+ }
+ }
+ break;
+ }
+}
+
+void sub_800F808(void)
+{
+ AnimateSprites();
+ BuildOamBuffer();
+ sub_800374C(&gUnknown_03004210);
+ UpdatePaletteFade();
+ RunTasks();
+}
+
+void sub_800F828(struct Sprite *sprite)
+{
+ sprite->data0 = 0;
+ sprite->callback = sub_800F838;
+}
+
+void sub_800F838(struct Sprite *sprite)
+{
+ u16 *arr = (u16 *)ewram;
+
+ switch (sprite->data0)
+ {
+ case 0:
+ sprite->data0++;
+ sprite->data1 = 0;
+ sprite->data2 = 0x281;
+ sprite->data3 = 0;
+ sprite->data4 = 1;
+ // fall through
+ case 1:
+ sprite->data4--;
+ if (sprite->data4 == 0)
+ {
+ s32 i;
+ s32 r2;
+ s32 r0;
+
+ sprite->data4 = 2;
+ r2 = sprite->data1 + sprite->data3 * 32;
+ r0 = sprite->data2 - sprite->data3 * 32;
+ for (i = 0; i < 29; i += 2)
+ {
+ arr[r2 + i] = 0x3D;
+ arr[r0 + i] = 0x3D;
+ }
+ sprite->data3++;
+ if (sprite->data3 == 21)
+ {
+ sprite->data0++;
+ sprite->data1 = 32;
+ }
+ }
+ break;
+ case 2:
+ sprite->data1--;
+ if (sprite->data1 == 20)
+ SetMainCallback2(sub_800E7C4);
+ break;
+ }
+}
+
+u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum)
+{
+ u32 nameHash = 0;
+ s32 i;
+
+ if (trainerNum == 0x400)
+ return 0;
+
+ if ((gBattleTypeFlags & 0x908) == 8)
+ {
+ ZeroEnemyPartyMons();
+ for (i = 0; i < gTrainers[trainerNum].partySize; i++)
+ {
+ u32 personalityValue;
+ s32 j;
+ u8 fixedIV;
+
+ if (gTrainers[trainerNum].doubleBattle == TRUE)
+ personalityValue = 0x80;
+ else if (gTrainers[trainerNum].encounterMusic_gender & 0x80)
+ personalityValue = 0x78;
+ else
+ personalityValue = 0x88;
+
+ for (j = 0; gTrainers[trainerNum].trainerName[j] != 0xFF; j++)
+ nameHash += gTrainers[trainerNum].trainerName[j];
+
+ switch (gTrainers[trainerNum].partyFlags)
+ {
+ case 0:
+ {
+ struct TrainerPartyMember0 *partyData = gTrainers[trainerNum].party;
+
+ for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++)
+ nameHash += gSpeciesNames[partyData[i].species][j];
+ personalityValue += nameHash << 8;
+ fixedIV = partyData[i].iv * 31 / 255;
+ CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0);
+ break;
+ }
+ case 1:
+ {
+ struct TrainerPartyMember1 *partyData = gTrainers[trainerNum].party;
+
+ for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++)
+ nameHash += gSpeciesNames[partyData[i].species][j];
+ personalityValue += nameHash << 8;
+ fixedIV = partyData[i].iv * 31 / 255;
+ CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0);
+
+ for (j = 0; j < 4; j++)
+ {
+ SetMonData(&party[i], MON_DATA_MOVE1 + j, (u8 *)&partyData[i].moves[j]);
+ SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp);
+ }
+ break;
+ }
+ case 2:
+ {
+ struct TrainerPartyMember2 *partyData = gTrainers[trainerNum].party;
+
+ for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++)
+ nameHash += gSpeciesNames[partyData[i].species][j];
+ personalityValue += nameHash << 8;
+ fixedIV = partyData[i].iv * 31 / 255;
+ CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0);
+
+ SetMonData(&party[i], MON_DATA_HELD_ITEM, (u8 *)&partyData[i].heldItem);
+ break;
+ }
+ case 3:
+ {
+ struct TrainerPartyMember3 *partyData = gTrainers[trainerNum].party;
+
+ for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++)
+ nameHash += gSpeciesNames[partyData[i].species][j];
+ personalityValue += nameHash << 8;
+ fixedIV = partyData[i].iv * 31 / 255;
+ CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0);
+
+ SetMonData(&party[i], MON_DATA_HELD_ITEM, (u8 *)&partyData[i].heldItem);
+ for (j = 0; j < 4; j++)
+ {
+ SetMonData(&party[i], MON_DATA_MOVE1 + j, (u8 *)&partyData[i].moves[j]);
+ SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp);
+ }
+ break;
+ }
+ }
+ }
+ gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle;
+ }
+ return gTrainers[trainerNum].partySize;
+} \ No newline at end of file
diff --git a/src/battle_interface.c b/src/battle_interface.c
index d4a9f9cce..a9175ac10 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -1498,7 +1498,7 @@ u8 sub_8044804(u8 a, const struct UnknownStruct8 *b, u8 c, u8 d)
{
for (i = 0; i < 6; i++) //_08044A9A
{
- if (gBattleTypeFlags & BATTLE_TYPE_40) // && b[i] != 0xFFFF && b[i]
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI) // && b[i] != 0xFFFF && b[i]
{
if (b[i].unk0 == 0xFFFF)
{
@@ -1546,7 +1546,7 @@ u8 sub_8044804(u8 a, const struct UnknownStruct8 *b, u8 c, u8 d)
// Mismatch occurrs in this loop initialization
for (i = 0; i < 6; i++)
{
- if (gBattleTypeFlags & BATTLE_TYPE_40)
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
if (b[i].unk0 == 0xFFFF)
{
diff --git a/src/berry.c b/src/berry.c
index 6c12af053..257248e5c 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -1130,7 +1130,7 @@ bool32 BerryTreeGrow(struct BerryTree *tree)
return TRUE;
}
-void BerryTreeTimeUpdate(int time)
+void BerryTreeTimeUpdate(s32 minutes)
{
int i;
struct BerryTree *tree;
@@ -1141,27 +1141,27 @@ void BerryTreeTimeUpdate(int time)
if (tree->berry && tree->stage && !tree->growthSparkle)
{
- if (time >= GetStageDurationByBerryType(tree->berry) * 71)
+ if (minutes >= GetStageDurationByBerryType(tree->berry) * 71)
{
*tree = gBlankBerryTree;
}
else
{
- int time2 = time;
+ s32 time = minutes;
- while (time2 != 0)
+ while (time != 0)
{
- if (tree->secondsUntilNextStage > time2)
+ if (tree->minutesUntilNextStage > time)
{
- tree->secondsUntilNextStage -= time2;
+ tree->minutesUntilNextStage -= time;
break;
}
- time2 -= tree->secondsUntilNextStage;
- tree->secondsUntilNextStage = GetStageDurationByBerryType(tree->berry);
+ time -= tree->minutesUntilNextStage;
+ tree->minutesUntilNextStage = GetStageDurationByBerryType(tree->berry);
if (!BerryTreeGrow(tree))
break;
if (tree->stage == 5)
- tree->secondsUntilNextStage *= 4;
+ tree->minutesUntilNextStage *= 4;
}
}
}
@@ -1174,12 +1174,12 @@ void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle)
*tree = gBlankBerryTree;
tree->berry = berry;
- tree->secondsUntilNextStage = GetStageDurationByBerryType(berry);
+ tree->minutesUntilNextStage = GetStageDurationByBerryType(berry);
tree->stage = stage;
if (stage == 5)
{
tree->berryYield = CalcBerryYield(tree);
- tree->secondsUntilNextStage *= 4;
+ tree->minutesUntilNextStage *= 4;
}
if (!sparkle)
{
diff --git a/src/clock.c b/src/clock.c
index 4ec49807c..b263e99ae 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -8,17 +8,17 @@
#include "rtc.h"
#include "wallclock.h"
-extern void sub_80FA220(u16);
-extern void sub_80BE8C4(u16);
-extern void sub_8080834(u16);
+extern void UpdateDewfordTrendPerDay(u16);
+extern void UpdateTVShowsPerDay(u16);
+extern void UpdateWeatherPerDay(u16);
extern void UpdatePartyPokerusTime(u16);
extern void UpdateMirageRnd(u16);
extern void UpdateBirchState(u16);
-extern void sub_810F618(u16);
+extern void SetShoalItemFlag(u16);
static void InitTimeBasedEvents(void);
static void UpdatePerDay(struct Time *time);
-static void UpdatePerSecond(struct Time *time);
+static void UpdatePerMinute(struct Time *time);
static void ReturnFromStartWallClock(void);
static void InitTimeBasedEvents(void)
@@ -35,7 +35,7 @@ void DoTimeBasedEvents(void)
{
RtcCalcLocalTime();
UpdatePerDay(&gLocalTime);
- UpdatePerSecond(&gLocalTime);
+ UpdatePerMinute(&gLocalTime);
}
}
@@ -49,32 +49,32 @@ static void UpdatePerDay(struct Time *time)
{
newDays = time->days - days;
ClearUpperFlags();
- sub_80FA220(newDays);
- sub_80BE8C4(newDays);
- sub_8080834(newDays);
+ UpdateDewfordTrendPerDay(newDays);
+ UpdateTVShowsPerDay(newDays);
+ UpdateWeatherPerDay(newDays);
UpdatePartyPokerusTime(newDays);
UpdateMirageRnd(newDays);
UpdateBirchState(newDays);
- sub_810F618(newDays);
+ SetShoalItemFlag(newDays);
SetRandomLotteryNumber(newDays);
*varPtr = time->days;
}
}
-static void UpdatePerSecond(struct Time *time)
+static void UpdatePerMinute(struct Time *time)
{
struct Time newTime;
- s32 totalSeconds;
+ s32 minutes;
CalcTimeDifference(&newTime, &gSaveBlock2.lastBerryTreeUpdate, time);
- totalSeconds = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes;
+ minutes = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes;
// there's no way to get the correct assembly other than with this nested if check. so dumb.
- if (totalSeconds != 0)
+ if (minutes != 0)
{
- if (totalSeconds >= 0)
+ if (minutes >= 0)
{
- BerryTreeTimeUpdate(totalSeconds);
+ BerryTreeTimeUpdate(minutes);
gSaveBlock2.lastBerryTreeUpdate = *time;
}
}
diff --git a/src/dewford_trend.c b/src/dewford_trend.c
index fe9311655..e4ce0c0c7 100644
--- a/src/dewford_trend.c
+++ b/src/dewford_trend.c
@@ -19,7 +19,7 @@ static bool8 SB1ContainsWords(u16 *a);
static bool8 IsEasyChatPairEqual(u16 *words1, u16 *words2);
static s16 sub_80FA828(struct EasyChatPair *a, u16 b);
-void InitDewfordTrends(void)
+void InitDewfordTrend(void)
{
u16 i;
@@ -38,244 +38,63 @@ void InitDewfordTrends(void)
sub_80FA46C(gSaveBlock1.easyChatPairs, 5, 0);
}
-#ifdef NONMATCHING
-void sub_80FA220(u16 a)
+void UpdateDewfordTrendPerDay(u16 a)
{
u16 i;
- u32 sp0;
- u32 sp4;
if (a != 0)
{
- sp0 = a * 5;
+ u32 sp0 = a * 5;
for (i = 0; i < 5; i++)
{
//_080FA24A
- u32 r2 = sp0;
u32 r4;
+ u32 r2 = sp0;
+ struct EasyChatPair *r5 = &gSaveBlock1.easyChatPairs[i];
- if (gSaveBlock1.easyChatPairs[i].unk1_6 == 0)
+ if (r5->unk1_6 == 0)
{
- if (gSaveBlock1.easyChatPairs[i].unk0_0 >= r2)
+ if (r5->unk0_0 >= (u16)r2)
{
- gSaveBlock1.easyChatPairs[i].unk0_0 -= r2;
- if (gSaveBlock1.easyChatPairs[i].unk0_0 == 0)
- gSaveBlock1.easyChatPairs[i].unk1_6 = 1;
+ r5->unk0_0 -= r2;
+ if (r5->unk0_0 == 0)
+ r5->unk1_6 = 1;
continue;
}
//_080FA290
- r2 -= gSaveBlock1.easyChatPairs[i].unk0_0;
- gSaveBlock1.easyChatPairs[i].unk1_6 = 1;
+ r2 -= r5->unk0_0;
+ r5->unk0_0 = 0;
+ r5->unk1_6 = 1;
}
//_080FA2A0
- r4 = gSaveBlock1.easyChatPairs[i].unk0_0 + r2;
- if (r4 > gSaveBlock1.easyChatPairs[i].unk0_7)
+ r4 = r5->unk0_0 + r2;
+ if ((u16)r4 > r5->unk0_7)
{
- sp4 = r4 % gSaveBlock1.easyChatPairs[i].unk0_7;
- r4 = r4 / gSaveBlock1.easyChatPairs[i].unk0_7;
+ u32 sp4 = r4 % r5->unk0_7;
+ r4 = r4 / r5->unk0_7;
- if (r4 == 0)
- gSaveBlock1.easyChatPairs[i].unk1_6 = 1;
+ r5->unk1_6 = r4 ^ 1;
+ if (r5->unk1_6)
+ r5->unk0_0 = sp4;
else
- gSaveBlock1.easyChatPairs[i].unk1_6 = 0;
-
-
- if (gSaveBlock1.easyChatPairs[i].unk1_6)
- {
- gSaveBlock1.easyChatPairs[i].unk0_0 += sp4;
- continue;
- }
//_080FA2FA
- gSaveBlock1.easyChatPairs[i].unk0_7 -= sp4;
- continue;
+ r5->unk0_0 = r5->unk0_7 - sp4;
}
- //_080FA310
- gSaveBlock1.easyChatPairs[i].unk0_0 = r4;
+ else
+ {
+ //_080FA310
+ r5->unk0_0 = r4;
- if (gSaveBlock1.easyChatPairs[i].unk0_0 == gSaveBlock1.easyChatPairs[i].unk0_7)
- gSaveBlock1.easyChatPairs[i].unk1_6 = 0;
+ if (r5->unk0_0 == r5->unk0_7)
+ r5->unk1_6 = 0;
+ }
}
sub_80FA46C(gSaveBlock1.easyChatPairs, 5, 0);
}
//_080FA34E
}
-#else
-__attribute__((naked))
-void sub_80FA220(u16 a)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x8\n\
- lsls r0, 16\n\
- lsrs r1, r0, 16\n\
- cmp r1, 0\n\
- bne _080FA236\n\
- b _080FA34E\n\
-_080FA236:\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- str r0, [sp]\n\
- movs r0, 0\n\
- mov r10, r0\n\
- movs r1, 0x7F\n\
- mov r9, r1\n\
- movs r2, 0x80\n\
- negs r2, r2\n\
- mov r8, r2\n\
-_080FA24A:\n\
- ldr r2, [sp]\n\
- mov r4, r10\n\
- lsls r0, r4, 3\n\
- ldr r1, _080FA28C @ =gSaveBlock1 + 0x2DD4\n\
- adds r5, r0, r1\n\
- ldrb r6, [r5, 0x1]\n\
- movs r0, 0x40\n\
- ands r0, r6\n\
- cmp r0, 0\n\
- bne _080FA2A0\n\
- ldrb r4, [r5]\n\
- lsls r3, r4, 25\n\
- lsrs r1, r3, 25\n\
- lsls r0, r2, 16\n\
- lsrs r0, 16\n\
- cmp r1, r0\n\
- bcc _080FA290\n\
- adds r0, r1, 0\n\
- subs r0, r2\n\
- mov r2, r9\n\
- ands r0, r2\n\
- mov r1, r8\n\
- ands r1, r4\n\
- orrs r1, r0\n\
- strb r1, [r5]\n\
- movs r0, 0x7F\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- bne _080FA336\n\
- movs r0, 0x40\n\
- orrs r0, r6\n\
- b _080FA334\n\
- .align 2, 0\n\
-_080FA28C: .4byte gSaveBlock1 + 0x2DD4\n\
-_080FA290:\n\
- lsrs r0, r3, 25\n\
- subs r2, r0\n\
- mov r0, r8\n\
- ands r0, r4\n\
- strb r0, [r5]\n\
- movs r0, 0x40\n\
- orrs r0, r6\n\
- strb r0, [r5, 0x1]\n\
-_080FA2A0:\n\
- ldrb r7, [r5]\n\
- lsls r0, r7, 25\n\
- lsrs r0, 25\n\
- adds r4, r0, r2\n\
- ldrh r0, [r5]\n\
- lsls r6, r0, 18\n\
- lsls r0, r4, 16\n\
- lsrs r0, 16\n\
- lsrs r1, r6, 25\n\
- cmp r0, r1\n\
- bls _080FA310\n\
- adds r0, r4, 0\n\
- bl __umodsi3\n\
- adds r3, r0, 0\n\
- lsrs r1, r6, 25\n\
- adds r0, r4, 0\n\
- str r3, [sp, 0x4]\n\
- bl __udivsi3\n\
- adds r4, r0, 0\n\
- movs r0, 0x1\n\
- eors r4, r0\n\
- ands r4, r0\n\
- lsls r2, r4, 6\n\
- ldrb r0, [r5, 0x1]\n\
- movs r4, 0x41\n\
- negs r4, r4\n\
- adds r1, r4, 0\n\
- ands r0, r1\n\
- orrs r0, r2\n\
- strb r0, [r5, 0x1]\n\
- movs r1, 0x40\n\
- ands r0, r1\n\
- ldr r3, [sp, 0x4]\n\
- cmp r0, 0\n\
- beq _080FA2FA\n\
- adds r1, r3, 0\n\
- mov r0, r9\n\
- ands r1, r0\n\
- mov r0, r8\n\
- ands r0, r7\n\
- orrs r0, r1\n\
- strb r0, [r5]\n\
- b _080FA336\n\
-_080FA2FA:\n\
- ldrh r0, [r5]\n\
- lsls r0, 18\n\
- lsrs r0, 25\n\
- subs r0, r3\n\
- mov r1, r9\n\
- ands r0, r1\n\
- mov r1, r8\n\
- ands r1, r7\n\
- orrs r1, r0\n\
- strb r1, [r5]\n\
- b _080FA336\n\
-_080FA310:\n\
- mov r2, r9\n\
- ands r4, r2\n\
- mov r0, r8\n\
- ands r0, r7\n\
- orrs r0, r4\n\
- strb r0, [r5]\n\
- lsls r0, 25\n\
- ldrh r1, [r5]\n\
- lsls r1, 18\n\
- lsrs r0, 25\n\
- lsrs r1, 25\n\
- cmp r0, r1\n\
- bne _080FA336\n\
- ldrb r0, [r5, 0x1]\n\
- movs r4, 0x41\n\
- negs r4, r4\n\
- adds r1, r4, 0\n\
- ands r0, r1\n\
-_080FA334:\n\
- strb r0, [r5, 0x1]\n\
-_080FA336:\n\
- mov r0, r10\n\
- adds r0, 0x1\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r10, r0\n\
- cmp r0, 0x4\n\
- bls _080FA24A\n\
- ldr r0, _080FA360 @ =gSaveBlock1 + 0x2DD4\n\
- movs r1, 0x5\n\
- movs r2, 0\n\
- bl sub_80FA46C\n\
-_080FA34E:\n\
- add sp, 0x8\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080FA360: .4byte gSaveBlock1 + 0x2DD4\n\
- .syntax divided\n");
-}
-#endif
-
bool8 sub_80FA364(u16 *a)
{
struct EasyChatPair s = {0};
diff --git a/src/new_game.c b/src/new_game.c
index 6d2722c44..12e04a4ef 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -145,7 +145,7 @@ void NewGameInitData(void)
ClearDecorationInventories();
InitEasyChatPhrases();
SetMauvilleOldMan();
- InitDewfordTrends();
+ InitDewfordTrend();
ResetFanClub();
ResetLotteryCorner();
WarpToTruck();
diff --git a/src/rom3.c b/src/rom3.c
index 126248705..0169128cb 100644
--- a/src/rom3.c
+++ b/src/rom3.c
@@ -123,7 +123,7 @@ void sub_800B950(void)
else
sub_800B9A8();
sub_800BD54();
- if (!(gBattleTypeFlags & BATTLE_TYPE_40))
+ if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
for (i = 0; i < gUnknown_02024A68; i++)
sub_8094978(i, 0);
@@ -187,7 +187,7 @@ void sub_800BA78(void)
}
return;
}
- if ((gBattleTypeFlags & (BATTLE_TYPE_40 | BATTLE_TYPE_DOUBLE)) == BATTLE_TYPE_DOUBLE)
+ if ((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) == BATTLE_TYPE_DOUBLE)
{
if (gBattleTypeFlags & BATTLE_TYPE_WILD)
{
@@ -298,7 +298,7 @@ void sub_800BD54(void)
int i;
int j;
- if (!(gBattleTypeFlags & BATTLE_TYPE_40))
+ if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
for (i = 0; i < gUnknown_02024A68; i++)
{
diff --git a/src/rom_800D42C.c b/src/rom_800D42C.c
index 93fbce556..6f153c340 100644
--- a/src/rom_800D42C.c
+++ b/src/rom_800D42C.c
@@ -34,7 +34,7 @@ extern u8 BattleText_Tie[];
#define PRINT_MESSAGE_LEFT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, LEFT_MESSAGE_X)
#define PRINT_MESSAGE_RIGHT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, RIGHT_MESSAGE_X)
-void sub_800DC24(void)
+void PrintLinkBattleWinLossTie(void)
{
if (gUnknown_02024D26 == 3)
@@ -43,7 +43,7 @@ void sub_800DC24(void)
return;
}
- if (gBattleTypeFlags & BATTLE_TYPE_40)
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
// Double battle?
diff --git a/src/sound.c b/src/sound.c
index 3256c4d67..ed69ca01d 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -339,7 +339,7 @@ void PlayCry4(u16 species, s8 pan, u8 mode)
}
else
{
- if (!(gBattleTypeFlags & BATTLE_TYPE_40))
+ if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 85);
PlayCryInternal(species, pan, 125, 10, mode);
}
diff --git a/src/tv.c b/src/tv.c
index dd523594d..c0d4bde4d 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -256,7 +256,7 @@ void EndMassOutbreak(void)
gSaveBlock1.outbreakUnk5 = 0;
}
-void sub_80BE8C4(u16 arg0)
+void UpdateTVShowsPerDay(u16 arg0)
{
sub_80BE8EC(arg0);
UpdateMassOutbreakTimeLeft(arg0);