summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-11-08 08:53:27 -0600
committerGitHub <noreply@github.com>2018-11-08 08:53:27 -0600
commitbe4624024c16293356c3e10f61ea301d5c86d9ed (patch)
treea4ae4b6b5a0e28a7ce8866ff0aabef5f9118535a
parentc0a9d620919bd6403772c4e5a236d47cd40ae861 (diff)
parentaa6e1a91fc89d01ad65eb532d6832767c936807a (diff)
Merge pull request #17 from PikalaxALT/vs_seeker
Vs seeker
-rw-r--r--asm/item_use.s4
-rw-r--r--asm/macros/movement.inc4
-rw-r--r--asm/vs_seeker.s1767
-rw-r--r--data/data_83FECCC.s19
-rw-r--r--include/battle_setup.h1
-rw-r--r--include/constants/flags.h2
-rw-r--r--include/constants/movement_commands.h117
-rw-r--r--include/event_scripts.h5
-rw-r--r--include/field_effect.h4
-rw-r--r--include/field_map_obj.h3
-rw-r--r--include/field_specials.h1
-rw-r--r--include/item_menu.h8
-rw-r--r--include/item_use.h9
-rw-r--r--include/map_obj_lock.h1
-rw-r--r--include/new_menu_helpers.h4
-rw-r--r--include/unk_810c3a4.h7
-rw-r--r--include/vs_seeker.h14
-rw-r--r--ld_script.txt4
-rw-r--r--src/menews_jisan.c4
-rw-r--r--src/vs_seeker.c1379
-rw-r--r--sym_ewram.txt3
21 files changed, 1564 insertions, 1796 deletions
diff --git a/asm/item_use.s b/asm/item_use.s
index 96e04d4df..638418602 100644
--- a/asm/item_use.s
+++ b/asm/item_use.s
@@ -1810,7 +1810,7 @@ _080A1DEC: .4byte gSaveBlock1Ptr
_080A1DF0: .4byte gTasks
_080A1DF4:
ldr r1, _080A1E04 @ =gUnknown_2039998
- ldr r0, _080A1E08 @ =sub_810C670
+ ldr r0, _080A1E08 @ =Task_VsSeeker_0
str r0, [r1]
adds r0, r2, 0
bl sub_80A103C
@@ -1819,7 +1819,7 @@ _080A1E00:
bx r0
.align 2, 0
_080A1E04: .4byte gUnknown_2039998
-_080A1E08: .4byte sub_810C670
+_080A1E08: .4byte Task_VsSeeker_0
thumb_func_end sub_80A1D9C
thumb_func_start sub_80A1E0C
diff --git a/asm/macros/movement.inc b/asm/macros/movement.inc
index 674ce7169..909b24916 100644
--- a/asm/macros/movement.inc
+++ b/asm/macros/movement.inc
@@ -104,6 +104,10 @@
create_movement step_5f
create_movement step_60
create_movement step_61
+ create_movement step_62
+ create_movement step_63
+ create_movement step_64
+ create_movement step_65
enum_start 0x91
create_movement step_91
diff --git a/asm/vs_seeker.s b/asm/vs_seeker.s
deleted file mode 100644
index 8e66877fa..000000000
--- a/asm/vs_seeker.s
+++ /dev/null
@@ -1,1767 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_810C670
-sub_810C670: @ 810C670
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r2, 0
- ldr r7, _0810C6C0 @ =gUnknown_203ADB8
- lsls r1, r4, 2
- adds r0, r1, r4
- lsls r3, r0, 3
- ldr r5, _0810C6C4 @ =gTasks+0x8
- adds r6, r1, 0
- movs r1, 0
-_0810C686:
- lsls r0, r2, 1
- adds r0, r3
- adds r0, r5
- strh r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xF
- bls _0810C686
- adds r5, r7, 0
- ldr r0, _0810C6C8 @ =0x00000434
- bl AllocZeroed
- str r0, [r5]
- bl sub_810C808
- bl sub_810C96C
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- cmp r0, 0
- bne _0810C6D0
- ldr r0, [r5]
- bl Free
- ldr r2, _0810C6CC @ =gUnknown_81C137C
- b _0810C6DC
- .align 2, 0
-_0810C6C0: .4byte gUnknown_203ADB8
-_0810C6C4: .4byte gTasks+0x8
-_0810C6C8: .4byte 0x00000434
-_0810C6CC: .4byte gUnknown_81C137C
-_0810C6D0:
- cmp r0, 0x1
- bne _0810C6F0
- ldr r0, [r7]
- bl Free
- ldr r2, _0810C6E8 @ =gUnknown_81C13D6
-_0810C6DC:
- ldr r3, _0810C6EC @ =sub_80A1E0C
- adds r0, r4, 0
- movs r1, 0x2
- bl DisplayItemMessageOnField
- b _0810C718
- .align 2, 0
-_0810C6E8: .4byte gUnknown_81C13D6
-_0810C6EC: .4byte sub_80A1E0C
-_0810C6F0:
- cmp r1, 0x2
- bne _0810C718
- ldr r0, _0810C720 @ =gUnknown_203AD30
- ldrh r2, [r0]
- ldr r3, _0810C724 @ =0x0000ffff
- movs r0, 0x4
- movs r1, 0
- bl sub_80A2294
- movs r0, 0x41
- bl FieldEffectStart
- ldr r1, _0810C728 @ =gTasks
- adds r0, r6, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0810C72C @ =sub_810C730
- str r1, [r0]
- movs r1, 0xF
- strh r1, [r0, 0x8]
-_0810C718:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0810C720: .4byte gUnknown_203AD30
-_0810C724: .4byte 0x0000ffff
-_0810C728: .4byte gTasks
-_0810C72C: .4byte sub_810C730
- thumb_func_end sub_810C670
-
- thumb_func_start sub_810C730
-sub_810C730: @ 810C730
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0810C758 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldrh r0, [r1, 0x8]
- subs r0, 0x1
- strh r0, [r1, 0x8]
- lsls r0, 16
- cmp r0, 0
- bne _0810C754
- ldr r0, _0810C75C @ =sub_810C760
- str r0, [r1]
- movs r0, 0x10
- strh r0, [r1, 0xA]
-_0810C754:
- pop {r0}
- bx r0
- .align 2, 0
-_0810C758: .4byte gTasks
-_0810C75C: .4byte sub_810C760
- thumb_func_end sub_810C730
-
- thumb_func_start sub_810C760
-sub_810C760: @ 810C760
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _0810C7E8 @ =gTasks+0x8
- adds r4, r0, r1
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- cmp r0, 0x2
- beq _0810C794
- ldrh r0, [r4, 0x2]
- subs r0, 0x1
- strh r0, [r4, 0x2]
- lsls r0, 16
- cmp r0, 0
- bne _0810C794
- movs r0, 0x5E
- bl PlaySE
- movs r0, 0xB
- strh r0, [r4, 0x2]
- ldrh r0, [r4, 0x4]
- adds r0, 0x1
- strh r0, [r4, 0x4]
-_0810C794:
- movs r0, 0x41
- bl FieldEffectActiveListContains
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0810C7E2
- strh r0, [r4, 0x2]
- strh r0, [r4, 0x4]
- bl sub_810C604
- ldr r0, _0810C7EC @ =gUnknown_845318C
- bl sub_810C9A8
- ldr r1, _0810C7F0 @ =gUnknown_203ADB8
- ldr r2, [r1]
- ldr r1, _0810C7F4 @ =0x00000431
- adds r2, r1
- lsls r0, 3
- ldrb r3, [r2]
- movs r1, 0x7
- ands r1, r3
- orrs r1, r0
- strb r1, [r2]
- ldr r0, _0810C7F8 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrb r1, [r0, 0x5]
- ldrb r2, [r0, 0x4]
- ldr r3, _0810C7FC @ =gUnknown_8453F5C
- movs r0, 0xFF
- bl ScriptMovement_StartObjectMovementScript
- ldr r1, _0810C800 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _0810C804 @ =sub_810C8EC
- str r1, [r0]
-_0810C7E2:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0810C7E8: .4byte gTasks+0x8
-_0810C7EC: .4byte gUnknown_845318C
-_0810C7F0: .4byte gUnknown_203ADB8
-_0810C7F4: .4byte 0x00000431
-_0810C7F8: .4byte gSaveBlock1Ptr
-_0810C7FC: .4byte gUnknown_8453F5C
-_0810C800: .4byte gTasks
-_0810C804: .4byte sub_810C8EC
- thumb_func_end sub_810C760
-
- thumb_func_start sub_810C808
-sub_810C808: @ 810C808
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r0, _0810C8DC @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0x8E
- lsls r1, 4
- adds r2, r0, r1
- movs r1, 0
- mov r0, sp
- strb r1, [r0]
- mov r8, r1
- mov r9, r1
- ldr r0, _0810C8E0 @ =gMapHeader
- ldr r0, [r0, 0x4]
- ldrb r0, [r0]
- cmp r8, r0
- bge _0810C8BC
- ldr r7, _0810C8E4 @ =gUnknown_203ADB8
- mov r6, sp
- ldr r0, _0810C8E8 @ =gMapObjects
- mov r10, r0
- adds r5, r2, 0
-_0810C83C:
- ldrh r0, [r5, 0xC]
- cmp r0, 0x1
- beq _0810C846
- cmp r0, 0x3
- bne _0810C8AC
-_0810C846:
- ldr r1, [r7]
- mov r2, r8
- lsls r4, r2, 4
- adds r1, r4
- ldr r0, [r5, 0x10]
- str r0, [r1]
- ldr r0, [r5, 0x10]
- bl sub_810D074
- ldr r1, [r7]
- adds r1, r4
- strh r0, [r1, 0x4]
- ldrb r0, [r5]
- strb r0, [r1, 0x6]
- ldrb r0, [r5]
- ldr r1, _0810C8DC @ =gSaveBlock1Ptr
- ldr r2, [r1]
- ldrb r1, [r2, 0x5]
- ldrb r2, [r2, 0x4]
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- ldr r0, [r7]
- adds r0, r4
- ldrb r1, [r6]
- strb r1, [r0, 0x7]
- ldr r2, [r7]
- adds r2, r4
- ldrb r1, [r6]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- add r0, r10
- ldrh r0, [r0, 0x10]
- subs r0, 0x7
- strh r0, [r2, 0x8]
- ldrb r1, [r6]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- add r0, r10
- ldrh r0, [r0, 0x12]
- subs r0, 0x7
- strh r0, [r2, 0xA]
- ldrb r0, [r5, 0x1]
- strb r0, [r2, 0xC]
- mov r0, r8
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
-_0810C8AC:
- adds r5, 0x18
- movs r0, 0x1
- add r9, r0
- ldr r0, _0810C8E0 @ =gMapHeader
- ldr r0, [r0, 0x4]
- ldrb r0, [r0]
- cmp r9, r0
- blt _0810C83C
-_0810C8BC:
- ldr r0, _0810C8E4 @ =gUnknown_203ADB8
- ldr r0, [r0]
- mov r2, r8
- lsls r1, r2, 4
- adds r0, r1
- movs r1, 0xFF
- strb r1, [r0, 0x6]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0810C8DC: .4byte gSaveBlock1Ptr
-_0810C8E0: .4byte gMapHeader
-_0810C8E4: .4byte gUnknown_203ADB8
-_0810C8E8: .4byte gMapObjects
- thumb_func_end sub_810C808
-
- thumb_func_start sub_810C8EC
-sub_810C8EC: @ 810C8EC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- ldr r0, _0810C928 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrb r1, [r0, 0x5]
- ldrb r2, [r0, 0x4]
- movs r0, 0xFF
- bl ScriptMovement_IsObjectMovementFinished
- lsls r0, 24
- cmp r0, 0
- beq _0810C962
- ldr r0, _0810C92C @ =gUnknown_203ADB8
- ldr r0, [r0]
- ldr r1, _0810C930 @ =0x00000431
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0xF8
- ands r1, r0
- cmp r1, 0
- bne _0810C93C
- ldr r2, _0810C934 @ =gUnknown_81C1429
- ldr r3, _0810C938 @ =sub_80A1E0C
- adds r0, r4, 0
- movs r1, 0x2
- bl DisplayItemMessageOnField
- b _0810C95A
- .align 2, 0
-_0810C928: .4byte gSaveBlock1Ptr
-_0810C92C: .4byte gUnknown_203ADB8
-_0810C930: .4byte 0x00000431
-_0810C934: .4byte gUnknown_81C1429
-_0810C938: .4byte sub_80A1E0C
-_0810C93C:
- cmp r1, 0x10
- bne _0810C944
- bl sub_810D304
-_0810C944:
- movs r0, 0
- movs r1, 0x1
- bl sub_80F6F54
- bl sub_80696C0
- bl ScriptContext2_Disable
- adds r0, r5, 0
- bl DestroyTask
-_0810C95A:
- ldr r0, _0810C968 @ =gUnknown_203ADB8
- ldr r0, [r0]
- bl Free
-_0810C962:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0810C968: .4byte gUnknown_203ADB8
- thumb_func_end sub_810C8EC
-
- thumb_func_start sub_810C96C
-sub_810C96C: @ 810C96C
- push {lr}
- ldr r0, _0810C990 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xC7
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x64
- bne _0810C998
- bl sub_810D1CC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _0810C994
- movs r0, 0x1
- b _0810C9A4
- .align 2, 0
-_0810C990: .4byte gSaveBlock1Ptr
-_0810C994:
- movs r0, 0x2
- b _0810C9A4
-_0810C998:
- movs r1, 0x64
- subs r1, r0
- movs r0, 0
- bl TV_PrintIntToStringVar
- movs r0, 0
-_0810C9A4:
- pop {r1}
- bx r1
- thumb_func_end sub_810C96C
-
- thumb_func_start sub_810C9A8
-sub_810C9A8: @ 810C9A8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- str r0, [sp, 0x4]
- movs r0, 0
- mov r8, r0
- mov r0, sp
- mov r1, r8
- strb r1, [r0]
- movs r2, 0
- mov r9, r2
- ldr r4, _0810CA14 @ =gUnknown_203ADB8
- ldr r0, [r4]
- ldrb r0, [r0, 0x6]
- cmp r0, 0xFF
- bne _0810C9D0
- b _0810CB2C
-_0810C9D0:
- adds r6, r4, 0
- movs r3, 0x86
- lsls r3, 3
- mov r10, r3
- movs r5, 0
-_0810C9DA:
- ldr r0, [r6]
- adds r0, r5
- bl sub_810D0FC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0810C9EC
- b _0810CB18
-_0810C9EC:
- ldr r0, [r4]
- adds r0, r5
- ldrh r0, [r0, 0x4]
- mov r8, r0
- bl HasTrainerAlreadyBeenFought
- lsls r0, 24
- cmp r0, 0
- bne _0810CA20
- ldr r0, [r6]
- adds r0, r5
- ldr r1, _0810CA18 @ =gUnknown_8453F60
- bl sub_810D24C
- ldr r2, [r6]
- ldr r0, _0810CA1C @ =0x00000431
- adds r2, r0
- ldrb r0, [r2]
- movs r1, 0x1
- b _0810CB14
- .align 2, 0
-_0810CA14: .4byte gUnknown_203ADB8
-_0810CA18: .4byte gUnknown_8453F60
-_0810CA1C: .4byte 0x00000431
-_0810CA20:
- ldr r0, [sp, 0x4]
- mov r1, r8
- mov r2, sp
- bl sub_810D164
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0
- bne _0810CA50
- ldr r0, [r6]
- adds r0, r5
- ldr r1, _0810CA48 @ =gUnknown_8453F62
- bl sub_810D24C
- ldr r2, [r6]
- ldr r3, _0810CA4C @ =0x00000431
- adds r2, r3
- ldrb r0, [r2]
- movs r1, 0x2
- b _0810CB14
- .align 2, 0
-_0810CA48: .4byte gUnknown_8453F62
-_0810CA4C: .4byte 0x00000431
-_0810CA50:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r4, r0, 16
- mov r0, r9
- mov r1, r8
- bl sub_810D280
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0810CA76
- movs r4, 0x64
- b _0810CA7C
-_0810CA76:
- cmp r0, 0x1
- bne _0810CA7C
- movs r4, 0
-_0810CA7C:
- cmp r4, 0x1D
- bhi _0810CAA0
- ldr r0, [r6]
- adds r0, r5
- ldr r1, _0810CA98 @ =gUnknown_8453F62
- bl sub_810D24C
- ldr r2, [r6]
- ldr r0, _0810CA9C @ =0x00000431
- adds r2, r0
- ldrb r0, [r2]
- movs r1, 0x2
- b _0810CB14
- .align 2, 0
-_0810CA98: .4byte gUnknown_8453F62
-_0810CA9C: .4byte 0x00000431
-_0810CAA0:
- ldr r0, _0810CB54 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r0, [r6]
- adds r0, r5
- ldr r2, _0810CB58 @ =0x0000063a
- adds r1, r2
- ldrb r0, [r0, 0x6]
- adds r1, r0
- strb r7, [r1]
- ldr r0, [r6]
- adds r0, r5
- ldrb r1, [r0, 0x7]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0810CB5C @ =gMapObjects
- adds r0, r1
- bl npc_coords_shift_still
- ldr r0, [r6]
- adds r0, r5
- ldr r1, _0810CB60 @ =gUnknown_8453F64
- bl sub_810D24C
- ldr r2, [r6]
- mov r3, r10
- adds r0, r2, r3
- ldrb r1, [r0]
- lsls r1, 1
- movs r3, 0x80
- lsls r3, 3
- adds r0, r2, r3
- adds r0, r1
- mov r1, r8
- strh r1, [r0]
- adds r2, r5
- ldrb r0, [r2, 0xC]
- bl sub_810CF90
- ldr r1, [r6]
- mov r3, r10
- adds r2, r1, r3
- movs r3, 0x84
- lsls r3, 3
- adds r1, r3
- ldrb r2, [r2]
- adds r1, r2
- strb r0, [r1]
- ldr r1, [r6]
- add r1, r10
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r2, [r6]
- ldr r0, _0810CB64 @ =0x00000431
- adds r2, r0
- ldrb r0, [r2]
- movs r1, 0x4
-_0810CB14:
- orrs r0, r1
- strb r0, [r2]
-_0810CB18:
- adds r5, 0x10
- movs r1, 0x1
- add r9, r1
- ldr r4, _0810CB68 @ =gUnknown_203ADB8
- ldr r0, [r4]
- adds r0, r5
- ldrb r0, [r0, 0x6]
- cmp r0, 0xFF
- beq _0810CB2C
- b _0810C9DA
-_0810CB2C:
- ldr r2, _0810CB68 @ =gUnknown_203ADB8
- ldr r0, [r2]
- ldr r3, _0810CB64 @ =0x00000431
- adds r0, r3
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0810CB70
- movs r0, 0x15
- bl PlaySE
- ldr r0, _0810CB6C @ =0x00000801
- bl FlagSet
- bl sub_810C640
- movs r0, 0x2
- b _0810CB7E
- .align 2, 0
-_0810CB54: .4byte gSaveBlock1Ptr
-_0810CB58: .4byte 0x0000063a
-_0810CB5C: .4byte gMapObjects
-_0810CB60: .4byte gUnknown_8453F64
-_0810CB64: .4byte 0x00000431
-_0810CB68: .4byte gUnknown_203ADB8
-_0810CB6C: .4byte 0x00000801
-_0810CB70:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0810CB7C
- movs r0, 0
- b _0810CB7E
-_0810CB7C:
- movs r0, 0x1
-_0810CB7E:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_810C9A8
-
- thumb_func_start sub_810CB90
-sub_810CB90: @ 810CB90
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r1, 0
- mov r0, sp
- strb r1, [r0]
- ldr r5, _0810CC54 @ =gSaveBlock1Ptr
- ldr r0, [r5]
- movs r1, 0x8E
- lsls r1, 4
- adds r4, r0, r1
- ldr r0, _0810CC58 @ =gUnknown_845318C
- ldr r1, _0810CC5C @ =gTrainerBattleOpponent_A
- ldrh r1, [r1]
- bl sub_810CE10
- mov r9, r0
- movs r0, 0x1
- negs r0, r0
- cmp r9, r0
- beq _0810CC8A
- movs r0, 0
- mov r8, r0
- ldr r0, _0810CC60 @ =gMapHeader
- ldr r0, [r0, 0x4]
- ldrb r0, [r0]
- cmp r8, r0
- bge _0810CC8A
- mov r10, r5
- adds r6, r4, 0
- adds r5, r6, 0
-_0810CBD4:
- ldrh r0, [r5, 0xC]
- cmp r0, 0x1
- beq _0810CBDE
- cmp r0, 0x3
- bne _0810CC78
-_0810CBDE:
- ldr r0, [r5, 0x10]
- bl sub_810D074
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r0, _0810CC58 @ =gUnknown_845318C
- bl sub_810CE10
- cmp r9, r0
- bne _0810CC78
- ldrb r0, [r5]
- mov r1, r10
- ldr r2, [r1]
- ldrb r1, [r2, 0x5]
- ldrb r2, [r2, 0x4]
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0810CC64 @ =gMapObjects
- adds r4, r0, r1
- adds r0, r6, 0
- bl sub_810CF54
- ldr r7, _0810CC68 @ =gUnknown_8453F67
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- adds r0, r7
- ldrb r1, [r0]
- adds r0, r4, 0
- bl sub_805FE7C
- mov r1, r10
- ldr r0, [r1]
- ldr r1, _0810CC6C @ =0x0000063a
- adds r0, r1
- ldrb r1, [r5]
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r0, _0810CC70 @ =gUnknown_3005074
- mov r1, sp
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- bne _0810CC74
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- adds r0, r7
- ldrb r0, [r0]
- b _0810CC76
- .align 2, 0
-_0810CC54: .4byte gSaveBlock1Ptr
-_0810CC58: .4byte gUnknown_845318C
-_0810CC5C: .4byte gTrainerBattleOpponent_A
-_0810CC60: .4byte gMapHeader
-_0810CC64: .4byte gMapObjects
-_0810CC68: .4byte gUnknown_8453F67
-_0810CC6C: .4byte 0x0000063a
-_0810CC70: .4byte gUnknown_3005074
-_0810CC74:
- movs r0, 0x8
-_0810CC76:
- strb r0, [r4, 0x6]
-_0810CC78:
- adds r5, 0x18
- adds r6, 0x18
- movs r0, 0x1
- add r8, r0
- ldr r0, _0810CC9C @ =gMapHeader
- ldr r0, [r0, 0x4]
- ldrb r0, [r0]
- cmp r8, r0
- blt _0810CBD4
-_0810CC8A:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0810CC9C: .4byte gMapHeader
- thumb_func_end sub_810CB90
-
- thumb_func_start sub_810CCA0
-sub_810CCA0: @ 810CCA0
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- ldrb r0, [r4]
- cmp r0, 0x5
- bhi _0810CD0A
- lsls r0, 2
- ldr r1, _0810CCB8 @ =_0810CCBC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0810CCB8: .4byte _0810CCBC
- .align 2, 0
-_0810CCBC:
- .4byte _0810CD0A
- .4byte _0810CCD4
- .4byte _0810CCDC
- .4byte _0810CCE4
- .4byte _0810CCEC
- .4byte _0810CCF4
-_0810CCD4:
- ldr r0, _0810CCD8 @ =0x00000292
- b _0810CCF6
- .align 2, 0
-_0810CCD8: .4byte 0x00000292
-_0810CCDC:
- ldr r0, _0810CCE0 @ =0x00000896
- b _0810CCF6
- .align 2, 0
-_0810CCE0: .4byte 0x00000896
-_0810CCE4:
- ldr r0, _0810CCE8 @ =0x00000897
- b _0810CCF6
- .align 2, 0
-_0810CCE8: .4byte 0x00000897
-_0810CCEC:
- ldr r0, _0810CCF0 @ =0x0000082c
- b _0810CCF6
- .align 2, 0
-_0810CCF0: .4byte 0x0000082c
-_0810CCF4:
- ldr r0, _0810CD10 @ =0x00000844
-_0810CCF6:
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _0810CD0A
- ldrb r1, [r4]
- adds r0, r5, 0
- bl sub_810CD14
- strb r0, [r4]
-_0810CD0A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0810CD10: .4byte 0x00000844
- thumb_func_end sub_810CCA0
-
- thumb_func_start sub_810CD14
-sub_810CD14: @ 810CD14
- push {lr}
- adds r2, r0, 0
- lsls r1, 24
- movs r0, 0xFF
- lsls r0, 24
- adds r1, r0
- lsrs r1, 24
- cmp r1, 0
- beq _0810CD46
- ldr r3, _0810CD38 @ =0x0000ffff
-_0810CD28:
- lsls r0, r1, 1
- adds r0, r2, r0
- ldrh r0, [r0]
- cmp r0, r3
- beq _0810CD3C
- adds r0, r1, 0
- b _0810CD48
- .align 2, 0
-_0810CD38: .4byte 0x0000ffff
-_0810CD3C:
- subs r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _0810CD28
-_0810CD46:
- movs r0, 0
-_0810CD48:
- pop {r1}
- bx r1
- thumb_func_end sub_810CD14
-
- thumb_func_start sub_810CD4C
-sub_810CD4C: @ 810CD4C
- push {r4,r5,lr}
- ldr r5, _0810CD70 @ =gUnknown_845318C
- ldr r4, _0810CD74 @ =gTrainerBattleOpponent_A
- ldrh r1, [r4]
- adds r0, r5, 0
- bl sub_810CD80
- lsls r0, 24
- cmp r0, 0
- bne _0810CD78
- ldrh r1, [r4]
- adds r0, r5, 0
- bl sub_810CDB4
- lsls r0, 24
- lsrs r0, 24
- b _0810CD7A
- .align 2, 0
-_0810CD70: .4byte gUnknown_845318C
-_0810CD74: .4byte gTrainerBattleOpponent_A
-_0810CD78:
- movs r0, 0x1
-_0810CD7A:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_810CD4C
-
- thumb_func_start sub_810CD80
-sub_810CD80: @ 810CD80
- push {lr}
- lsls r1, 16
- lsrs r1, 16
- bl sub_810D084
- adds r1, r0, 0
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0810CDAC
- cmp r1, 0xDC
- bhi _0810CDAC
- ldr r0, _0810CDA8 @ =gUnknown_20370D2
- ldrh r0, [r0]
- bl sub_810D0A8
- cmp r0, 0
- beq _0810CDAC
- movs r0, 0x1
- b _0810CDAE
- .align 2, 0
-_0810CDA8: .4byte gUnknown_20370D2
-_0810CDAC:
- movs r0, 0
-_0810CDAE:
- pop {r1}
- bx r1
- thumb_func_end sub_810CD80
-
- thumb_func_start sub_810CDB4
-sub_810CDB4: @ 810CDB4
- push {r4,lr}
- adds r4, r0, 0
- lsls r1, 16
- lsrs r1, 16
- bl sub_810D084
- adds r1, r0, 0
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0810CDDE
- lsls r0, r1, 4
- adds r0, r4
- ldrh r0, [r0]
- bl HasTrainerAlreadyBeenFought
- lsls r0, 24
- cmp r0, 0
- beq _0810CDDE
- movs r0, 0x1
- b _0810CDE0
-_0810CDDE:
- movs r0, 0
-_0810CDE0:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_810CDB4
-
- thumb_func_start sub_810CDE8
-sub_810CDE8: @ 810CDE8
- push {lr}
- ldr r0, _0810CE04 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, _0810CE08 @ =gUnknown_20370D2
- ldr r2, _0810CE0C @ =0x0000063a
- adds r0, r2
- ldrh r1, [r1]
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- bl sub_80803FC
- pop {r0}
- bx r0
- .align 2, 0
-_0810CE04: .4byte gSaveBlock1Ptr
-_0810CE08: .4byte gUnknown_20370D2
-_0810CE0C: .4byte 0x0000063a
- thumb_func_end sub_810CDE8
-
- thumb_func_start sub_810CE10
-sub_810CE10: @ 810CE10
- push {r4-r7,lr}
- mov r12, r0
- lsls r1, 16
- lsrs r6, r1, 16
- movs r1, 0
- mov r4, r12
- movs r7, 0
-_0810CE1E:
- movs r3, 0
- ldrh r0, [r4]
- cmp r0, 0
- beq _0810CE4E
- ldr r5, _0810CE3C @ =0x0000ffff
- mov r0, r12
- adds r2, r7, r0
-_0810CE2C:
- ldrh r0, [r2]
- cmp r0, r5
- beq _0810CE40
- cmp r0, r6
- bne _0810CE40
- adds r0, r1, 0
- b _0810CE5C
- .align 2, 0
-_0810CE3C: .4byte 0x0000ffff
-_0810CE40:
- adds r2, 0x2
- adds r3, 0x1
- cmp r3, 0x5
- bgt _0810CE4E
- ldrh r0, [r2]
- cmp r0, 0
- bne _0810CE2C
-_0810CE4E:
- adds r4, 0x10
- adds r7, 0x10
- adds r1, 0x1
- cmp r1, 0xDC
- bls _0810CE1E
- movs r0, 0x1
- negs r0, r0
-_0810CE5C:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_810CE10
-
- thumb_func_start sub_810CE64
-sub_810CE64: @ 810CE64
- push {r4,r5,lr}
- sub sp, 0x4
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r5, _0810CEA4 @ =gUnknown_845318C
- adds r0, r5, 0
- mov r2, sp
- bl sub_810D164
- mov r4, sp
- adds r4, 0x1
- strb r0, [r4]
- ldrb r0, [r4]
- cmp r0, 0
- beq _0810CEA8
- mov r0, sp
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r5
- adds r1, r4, 0
- bl sub_810CCA0
- ldrb r1, [r4]
- lsls r1, 1
- mov r0, sp
- ldrb r0, [r0]
- lsls r0, 4
- adds r1, r0
- adds r1, r5
- ldrh r0, [r1]
- b _0810CEAA
- .align 2, 0
-_0810CEA4: .4byte gUnknown_845318C
-_0810CEA8:
- movs r0, 0
-_0810CEAA:
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_810CE64
-
- thumb_func_start sub_810CEB4
-sub_810CEB4: @ 810CEB4
- push {lr}
- ldr r0, _0810CEC8 @ =gUnknown_845318C
- ldr r1, _0810CECC @ =gTrainerBattleOpponent_A
- ldrh r1, [r1]
- bl sub_810CED0
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0810CEC8: .4byte gUnknown_845318C
-_0810CECC: .4byte gTrainerBattleOpponent_A
- thumb_func_end sub_810CEB4
-
- thumb_func_start sub_810CED0
-sub_810CED0: @ 810CED0
- push {lr}
- lsls r1, 16
- lsrs r1, 16
- bl sub_810CE10
- adds r1, r0, 0
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0810CEFC
- cmp r1, 0xDC
- bhi _0810CEFC
- ldr r0, _0810CEF8 @ =gUnknown_20370D2
- ldrh r0, [r0]
- bl sub_810D0A8
- cmp r0, 0
- beq _0810CEFC
- movs r0, 0x1
- b _0810CEFE
- .align 2, 0
-_0810CEF8: .4byte gUnknown_20370D2
-_0810CEFC:
- movs r0, 0
-_0810CEFE:
- pop {r1}
- bx r1
- thumb_func_end sub_810CED0
-
- thumb_func_start sub_810CF04
-sub_810CF04: @ 810CF04
- push {lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 3
- adds r0, r3
- lsls r0, 2
- ldr r1, _0810CF40 @ =gMapObjects
- adds r1, r0, r1
- ldrb r0, [r1]
- lsls r0, 31
- cmp r0, 0
- beq _0810CF4C
- ldr r0, _0810CF44 @ =gMapHeader
- ldr r0, [r0, 0x4]
- ldrb r0, [r0]
- ldrb r2, [r1, 0x8]
- cmp r0, r2
- bcc _0810CF4C
- ldr r2, _0810CF48 @ =gSprites
- ldrb r1, [r1, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2E
- ldrsh r0, [r0, r1]
- cmp r0, r3
- bne _0810CF4C
- movs r0, 0x1
- b _0810CF4E
- .align 2, 0
-_0810CF40: .4byte gMapObjects
-_0810CF44: .4byte gMapHeader
-_0810CF48: .4byte gSprites
-_0810CF4C:
- movs r0, 0
-_0810CF4E:
- pop {r1}
- bx r1
- thumb_func_end sub_810CF04
-
- thumb_func_start sub_810CF54
-sub_810CF54: @ 810CF54
- push {lr}
- bl Random
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r0
- lsrs r1, 16
- adds r0, r1, 0
- cmp r1, 0x1
- beq _0810CF8A
- cmp r1, 0x1
- bgt _0810CF74
- cmp r1, 0
- beq _0810CF7E
- b _0810CF8A
-_0810CF74:
- cmp r0, 0x2
- beq _0810CF82
- cmp r0, 0x3
- beq _0810CF86
- b _0810CF8A
-_0810CF7E:
- movs r0, 0x7
- b _0810CF8C
-_0810CF82:
- movs r0, 0x9
- b _0810CF8C
-_0810CF86:
- movs r0, 0xA
- b _0810CF8C
-_0810CF8A:
- movs r0, 0x8
-_0810CF8C:
- pop {r1}
- bx r1
- thumb_func_end sub_810CF54
-
- thumb_func_start sub_810CF90
-sub_810CF90: @ 810CF90
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x11
- cmp r0, 0x2D
- bhi _0810D06C
- lsls r0, 2
- ldr r1, _0810CFA8 @ =_0810CFAC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0810CFA8: .4byte _0810CFAC
- .align 2, 0
-_0810CFAC:
- .4byte _0810D064
- .4byte _0810D064
- .4byte _0810D064
- .4byte _0810D064
- .4byte _0810D06C
- .4byte _0810D064
- .4byte _0810D064
- .4byte _0810D064
- .4byte _0810D064
- .4byte _0810D064
- .4byte _0810D06C
- .4byte _0810D064
- .4byte _0810D064
- .4byte _0810D064
- .4byte _0810D06C
- .4byte _0810D06C
- .4byte _0810D06C
- .4byte _0810D06C
- .4byte _0810D06C
- .4byte _0810D068
- .4byte _0810D064
- .4byte _0810D06C
- .4byte _0810D064
- .4byte _0810D064
- .4byte _0810D064
- .4byte _0810D064
- .4byte _0810D068
- .4byte _0810D068
- .4byte _0810D064
- .4byte _0810D064
- .4byte _0810D06C
- .4byte _0810D06C
- .4byte _0810D06C
- .4byte _0810D06C
- .4byte _0810D06C
- .4byte _0810D06C
- .4byte _0810D06C
- .4byte _0810D064
- .4byte _0810D06C
- .4byte _0810D064
- .4byte _0810D06C
- .4byte _0810D06C
- .4byte _0810D06C
- .4byte _0810D06C
- .4byte _0810D06C
- .4byte _0810D064
-_0810D064:
- movs r0, 0x4E
- b _0810D06E
-_0810D068:
- movs r0, 0x4F
- b _0810D06E
-_0810D06C:
- movs r0, 0x4D
-_0810D06E:
- pop {r1}
- bx r1
- thumb_func_end sub_810CF90
-
- thumb_func_start sub_810D074
-sub_810D074: @ 810D074
- adds r0, 0x2
- ldrb r1, [r0]
- ldrb r0, [r0, 0x1]
- lsls r0, 8
- orrs r1, r0
- adds r0, r1, 0
- bx lr
- thumb_func_end sub_810D074
-
- thumb_func_start sub_810D084
-sub_810D084: @ 810D084
- push {lr}
- lsls r1, 16
- lsrs r1, 16
- movs r3, 0
- adds r2, r0, 0
-_0810D08E:
- ldrh r0, [r2]
- cmp r0, r1
- bne _0810D098
- adds r0, r3, 0
- b _0810D0A4
-_0810D098:
- adds r2, 0x10
- adds r3, 0x1
- cmp r3, 0xDC
- bls _0810D08E
- movs r0, 0x1
- negs r0, r0
-_0810D0A4:
- pop {r1}
- bx r1
- thumb_func_end sub_810D084
-
- thumb_func_start sub_810D0A8
-sub_810D0A8: @ 810D0A8
- push {lr}
- ldr r1, _0810D0C0 @ =gSaveBlock1Ptr
- ldr r1, [r1]
- ldr r2, _0810D0C4 @ =0x0000063a
- adds r1, r2
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0
- beq _0810D0C8
- movs r0, 0x1
- b _0810D0CA
- .align 2, 0
-_0810D0C0: .4byte gSaveBlock1Ptr
-_0810D0C4: .4byte 0x0000063a
-_0810D0C8:
- movs r0, 0
-_0810D0CA:
- pop {r1}
- bx r1
- thumb_func_end sub_810D0A8
-
- thumb_func_start sub_810D0D0
-sub_810D0D0: @ 810D0D0
- push {r4,lr}
- movs r1, 0
- ldr r4, _0810D0F4 @ =gSaveBlock1Ptr
- ldr r3, _0810D0F8 @ =0x0000063a
- movs r2, 0
-_0810D0DA:
- ldr r0, [r4]
- adds r0, r3
- adds r0, r1
- strb r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x63
- bls _0810D0DA
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0810D0F4: .4byte gSaveBlock1Ptr
-_0810D0F8: .4byte 0x0000063a
- thumb_func_end sub_810D0D0
-
- thumb_func_start sub_810D0FC
-sub_810D0FC: @ 810D0FC
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- mov r1, sp
- mov r0, sp
- ldrh r0, [r0]
- subs r0, 0x7
- strh r0, [r1]
- ldrh r0, [r4]
- subs r0, 0x7
- strh r0, [r4]
- mov r0, sp
- movs r1, 0
- ldrsh r2, [r0, r1]
- subs r0, r2, 0x7
- movs r3, 0x8
- ldrsh r1, [r5, r3]
- cmp r0, r1
- bgt _0810D15A
- adds r0, r2, 0x7
- cmp r0, r1
- blt _0810D15A
- movs r0, 0
- ldrsh r1, [r4, r0]
- subs r0, r1, 0x5
- movs r3, 0xA
- ldrsh r2, [r5, r3]
- cmp r0, r2
- bgt _0810D15A
- adds r0, r1, 0x5
- cmp r0, r2
- blt _0810D15A
- ldrb r0, [r5, 0x7]
- bl sub_810CF04
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0810D15A
- movs r0, 0x1
- b _0810D15C
-_0810D15A:
- movs r0, 0
-_0810D15C:
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_810D0FC
-
- thumb_func_start sub_810D164
-sub_810D164: @ 810D164
- push {r4-r7,lr}
- lsls r1, 16
- lsrs r1, 16
- movs r4, 0
- adds r3, r0, 0
-_0810D16E:
- ldrh r0, [r3]
- cmp r0, r1
- bne _0810D1B8
- strb r4, [r2]
- movs r5, 0x1
- ldr r7, _0810D188 @ =0x0000ffff
- adds r4, r3, 0x2
- movs r6, 0
-_0810D17E:
- ldrh r0, [r4]
- cmp r0, 0
- bne _0810D18C
- lsrs r0, r6, 24
- b _0810D1C6
- .align 2, 0
-_0810D188: .4byte 0x0000ffff
-_0810D18C:
- cmp r0, r7
- beq _0810D1A2
- ldrh r0, [r4]
- bl HasTrainerAlreadyBeenFought
- lsls r0, 24
- cmp r0, 0
- bne _0810D1A2
- lsls r0, r5, 24
- lsrs r0, 24
- b _0810D1C6
-_0810D1A2:
- adds r4, 0x2
- movs r0, 0x80
- lsls r0, 17
- adds r6, r0
- adds r5, 0x1
- cmp r5, 0x5
- ble _0810D17E
- subs r0, r5, 0x1
- lsls r0, 24
- lsrs r0, 24
- b _0810D1C6
-_0810D1B8:
- adds r3, 0x10
- adds r4, 0x1
- cmp r4, 0xDC
- bls _0810D16E
- movs r0, 0
- strb r0, [r2]
- movs r0, 0
-_0810D1C6:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_810D164
-
- thumb_func_start sub_810D1CC
-sub_810D1CC: @ 810D1CC
- push {r4-r7,lr}
- sub sp, 0x4
- movs r5, 0
- ldr r6, _0810D220 @ =gUnknown_203ADB8
- ldr r0, [r6]
- ldrb r0, [r0, 0x6]
- cmp r0, 0xFF
- beq _0810D23C
- adds r7, r6, 0
-_0810D1DE:
- lsls r4, r5, 4
- ldr r0, [r7]
- adds r0, r4
- bl sub_810D0FC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0810D228
- ldr r0, [r6]
- adds r0, r4
- ldrh r0, [r0, 0x4]
- bl HasTrainerAlreadyBeenFought
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0810D216
- ldr r0, [r7]
- adds r0, r4
- ldrh r1, [r0, 0x4]
- ldr r0, _0810D224 @ =gUnknown_845318C
- mov r2, sp
- bl sub_810D164
- lsls r0, 24
- cmp r0, 0
- beq _0810D228
-_0810D216:
- ldr r0, [r7]
- adds r0, r4
- ldrb r0, [r0, 0x6]
- b _0810D23E
- .align 2, 0
-_0810D220: .4byte gUnknown_203ADB8
-_0810D224: .4byte gUnknown_845318C
-_0810D228:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r6, _0810D248 @ =gUnknown_203ADB8
- ldr r0, [r6]
- lsls r1, r5, 4
- adds r0, r1
- ldrb r0, [r0, 0x6]
- cmp r0, 0xFF
- bne _0810D1DE
-_0810D23C:
- movs r0, 0xFF
-_0810D23E:
- add sp, 0x4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0810D248: .4byte gUnknown_203ADB8
- thumb_func_end sub_810D1CC
-
- thumb_func_start sub_810D24C
-sub_810D24C: @ 810D24C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r1, [r4, 0x7]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0810D278 @ =gMapObjects
- adds r0, r1
- bl npc_sync_anim_pause_bits
- ldrb r0, [r4, 0x6]
- ldr r1, _0810D27C @ =gSaveBlock1Ptr
- ldr r2, [r1]
- ldrb r1, [r2, 0x5]
- ldrb r2, [r2, 0x4]
- adds r3, r5, 0
- bl ScriptMovement_StartObjectMovementScript
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0810D278: .4byte gMapObjects
-_0810D27C: .4byte gSaveBlock1Ptr
- thumb_func_end sub_810D24C
-
- thumb_func_start sub_810D280
-sub_810D280: @ 810D280
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- movs r5, 0
- cmp r5, r6
- bge _0810D2F8
- ldr r7, _0810D2E0 @ =gUnknown_203ADB8
- movs r4, 0
-_0810D298:
- ldr r0, [r7]
- adds r0, r4
- bl sub_810D0FC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0810D2F0
- ldr r1, [r7]
- adds r0, r1, r4
- ldrh r0, [r0, 0x4]
- cmp r0, r8
- bne _0810D2F0
- movs r3, 0
- movs r2, 0x86
- lsls r2, 3
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r3, r0
- bge _0810D2EC
- ldr r0, _0810D2E0 @ =gUnknown_203ADB8
- ldr r1, [r0]
- adds r0, r1, r4
- ldrh r4, [r0, 0x4]
- movs r0, 0x80
- lsls r0, 3
- adds r2, r1, r0
- adds r0, 0x30
- adds r1, r0
- ldrb r1, [r1]
-_0810D2D4:
- ldrh r0, [r2]
- cmp r0, r4
- bne _0810D2E4
- movs r0, 0x2
- b _0810D2FA
- .align 2, 0
-_0810D2E0: .4byte gUnknown_203ADB8
-_0810D2E4:
- adds r2, 0x2
- adds r3, 0x1
- cmp r3, r1
- blt _0810D2D4
-_0810D2EC:
- movs r0, 0x1
- b _0810D2FA
-_0810D2F0:
- adds r4, 0x10
- adds r5, 0x1
- cmp r5, r6
- blt _0810D298
-_0810D2F8:
- movs r0, 0
-_0810D2FA:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_810D280
-
- thumb_func_start sub_810D304
-sub_810D304: @ 810D304
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r1, 0
- mov r0, sp
- strb r1, [r0]
- movs r7, 0
- ldr r2, _0810D328 @ =gUnknown_203ADB8
- ldr r0, [r2]
- movs r1, 0x86
- lsls r1, 3
- adds r0, r1
- mov r10, r2
- b _0810D3CC
- .align 2, 0
-_0810D328: .4byte gUnknown_203ADB8
-_0810D32C:
- ldr r0, [r2]
- ldrb r0, [r0, 0x6]
- adds r3, r7, 0x1
- mov r8, r3
- cmp r0, 0xFF
- beq _0810D3C0
- adds r5, r2, 0
- mov r10, r5
- movs r6, 0
- mov r9, r5
-_0810D340:
- ldr r0, [r5]
- adds r2, r0, r6
- lsls r1, r7, 1
- movs r3, 0x80
- lsls r3, 3
- adds r0, r3
- adds r0, r1
- ldrh r1, [r2, 0x4]
- ldrh r0, [r0]
- cmp r1, r0
- bne _0810D3B2
- ldrb r0, [r2, 0x7]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r2, _0810D3E4 @ =gMapObjects
- adds r4, r1, r2
- bl sub_810CF04
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0810D380
- ldr r0, [r5]
- movs r1, 0x84
- lsls r1, 3
- adds r0, r1
- adds r0, r7
- ldrb r1, [r0]
- adds r0, r4, 0
- bl npc_set_running_behaviour_etc
-_0810D380:
- ldr r0, [r5]
- movs r3, 0x84
- lsls r3, 3
- adds r0, r3
- adds r0, r7
- ldrb r1, [r0]
- adds r0, r4, 0
- bl sub_805FE7C
- ldr r0, [r5]
- adds r0, r6
- ldrh r1, [r0, 0x4]
- ldr r0, _0810D3E8 @ =gUnknown_845318C
- mov r2, sp
- bl sub_810D164
- ldr r1, _0810D3EC @ =gSaveBlock1Ptr
- ldr r1, [r1]
- ldr r2, [r5]
- adds r2, r6
- ldr r3, _0810D3F0 @ =0x0000063a
- adds r1, r3
- ldrb r2, [r2, 0x6]
- adds r1, r2
- strb r0, [r1]
-_0810D3B2:
- adds r6, 0x10
- mov r1, r9
- ldr r0, [r1]
- adds r0, r6
- ldrb r0, [r0, 0x6]
- cmp r0, 0xFF
- bne _0810D340
-_0810D3C0:
- mov r7, r8
- mov r2, r10
- ldr r0, [r2]
- movs r3, 0x86
- lsls r3, 3
- adds r0, r3
-_0810D3CC:
- ldrb r0, [r0]
- cmp r7, r0
- blt _0810D32C
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0810D3E4: .4byte gMapObjects
-_0810D3E8: .4byte gUnknown_845318C
-_0810D3EC: .4byte gSaveBlock1Ptr
-_0810D3F0: .4byte 0x0000063a
- thumb_func_end sub_810D304
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s
index 7cbb2f5d8..292842f27 100644
--- a/data/data_83FECCC.s
+++ b/data/data_83FECCC.s
@@ -2709,24 +2709,9 @@ gUnknown_8453178:: @ 8453178
gUnknown_8453184:: @ 8453184
.incbin "baserom.gba", 0x453184, 0x8
-gUnknown_845318C:: @ 845318C
- .incbin "baserom.gba", 0x45318C, 0xDD0
-
-gUnknown_8453F5C:: @ 8453F5C
- .incbin "baserom.gba", 0x453F5C, 0x4
-
-gUnknown_8453F60:: @ 8453F60
- .incbin "baserom.gba", 0x453F60, 0x2
-
-gUnknown_8453F62:: @ 8453F62
- .incbin "baserom.gba", 0x453F62, 0x2
-
-gUnknown_8453F64:: @ 8453F64
- .incbin "baserom.gba", 0x453F64, 0x3
-
-gUnknown_8453F67:: @ 8453F67
- .incbin "baserom.gba", 0x453F67, 0x5
+ .section .rodata.8453F6C
+// item_pc.o
gUnknown_8453F6C:: @ 8453F6C
.incbin "baserom.gba", 0x453F6C, 0x8
diff --git a/include/battle_setup.h b/include/battle_setup.h
index 0168022cc..9b9ad2e15 100644
--- a/include/battle_setup.h
+++ b/include/battle_setup.h
@@ -14,5 +14,6 @@ void trainer_flag_clear(u16);
void BattleSetup_StartTrainerBattle(void);
u8 *BattleSetup_GetScriptAddrAfterBattle(void);
u8 *BattleSetup_GetTrainerPostBattleScript(void);
+void sub_80803FC(void);
#endif // GUARD_BATTLE_SETUP_H
diff --git a/include/constants/flags.h b/include/constants/flags.h
index 04c20b2f2..ea2d7d8bc 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -1,6 +1,8 @@
#ifndef GUARD_CONSTANTS_FLAGS_H
#define GUARD_CONSTANTS_FLAGS_H
+// TODO: Get correct names and numbers
+
#define FLAG_0x001 0x1
#define FLAG_0x002 0x2
#define FLAG_0x003 0x3
diff --git a/include/constants/movement_commands.h b/include/constants/movement_commands.h
new file mode 100644
index 000000000..0451e16b7
--- /dev/null
+++ b/include/constants/movement_commands.h
@@ -0,0 +1,117 @@
+#ifndef GUARD_CONSTANTS_MOVEMENT_COMMANDS_H
+#define GUARD_CONSTANTS_MOVEMENT_COMMANDS_H
+
+enum
+{
+ step_00,
+ step_01,
+ step_02,
+ step_03,
+ slow_step_down,
+ slow_step_up,
+ slow_step_left,
+ slow_step_right,
+ step_down,
+ step_up,
+ step_left,
+ step_right,
+ fast_step_down,
+ fast_step_up,
+ fast_step_left,
+ fast_step_right,
+ step_10,
+ step_11,
+ step_12,
+ step_13,
+ step_14,
+ step_15,
+ step_16,
+ step_17,
+ step_18,
+ step_19,
+ step_1a,
+ step_1b,
+ step_1c,
+ step_1d,
+ step_1e,
+ step_1f,
+ step_20,
+ step_21,
+ step_22,
+ step_23,
+ step_24,
+ step_25,
+ step_26,
+ step_27,
+ step_28,
+ step_29,
+ step_2a,
+ step_2b,
+ step_2c,
+ step_2d,
+ step_2e,
+ step_2f,
+ step_30,
+ step_31,
+ step_32,
+ step_33,
+ step_34,
+ step_35,
+ step_36,
+ step_37,
+ step_38,
+ step_39,
+ step_3a,
+ step_3b,
+ step_3c,
+ step_3d,
+ step_3e,
+ step_3f,
+ step_40,
+ step_41,
+ step_42,
+ step_43,
+ step_44,
+ step_45,
+ step_46,
+ step_47,
+ step_48,
+ step_49,
+ step_4a,
+ step_4b,
+ step_4c,
+ step_4d,
+ step_4e,
+ step_4f,
+ step_50,
+ step_51,
+ step_52,
+ step_53,
+ step_54,
+ step_55,
+ step_56,
+ step_57,
+ step_58,
+ step_59,
+ step_5a,
+ step_5b,
+ step_5c,
+ step_5d,
+ step_5e,
+ step_5f,
+ step_60,
+ step_61,
+ step_62,
+ step_63,
+ step_64,
+ step_65,
+
+ step_91 = 0x91,
+ step_92,
+
+ step_96 = 0x96,
+
+ step_end = 0xfe,
+};
+
+#endif //GUARD_CONSTANTS_MOVEMENT_COMMANDS_H
diff --git a/include/event_scripts.h b/include/event_scripts.h
index 844f1052a..03329ba34 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -372,4 +372,9 @@ extern const u8 SecretBase_RedCave1_Text_274E75[];
extern const u8 SecretBase_RedCave1_Text_2751E1[];
extern const u8 SecretBase_RedCave1_Text_2754F6[];
extern const u8 SecretBase_RedCave1_Text_2758CC[];
+
+// vs_seeker
+extern const u8 gUnknown_81C137C[];
+extern const u8 gUnknown_81C13D6[];
+extern const u8 gUnknown_81C1429[];
#endif //GUARD_EVENT_SCRIPTS_H
diff --git a/include/field_effect.h b/include/field_effect.h
index 629ae07c7..9404e3959 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -66,7 +66,9 @@ enum FieldEffectScriptIdx
FLDEFF_USE_FLY_ANCIENT_TOMB,
FLDEFF_PCTURN_ON,
FLDEFF_HALL_OF_FAME_RECORD,
- FLDEFF_USE_TELEPORT
+ FLDEFF_USE_TELEPORT,
+ FLDEFF_UNK_40,
+ FLDEFF_UNK_41 // TODO: related to vs_seeker
};
extern u32 gFieldEffectArguments[8];
diff --git a/include/field_map_obj.h b/include/field_map_obj.h
index 0107fa10f..304dcb825 100644
--- a/include/field_map_obj.h
+++ b/include/field_map_obj.h
@@ -76,6 +76,9 @@ void MoveCoords(u8, s16 *, s16 *);
bool8 FieldObjectIsSpecialAnimActive(struct MapObject *);
u8 FieldObjectClearAnimIfSpecialAnimFinished(struct MapObject *);
u8 GetFieldObjectIdByXYZ(u16 x, u16 y, u8 z);
+void npc_coords_shift_still(struct MapObject *);
+void sub_805FE7C(struct MapObject *, u8);
+void npc_set_running_behaviour_etc(struct MapObject *, u8);
// Exported data declarations
diff --git a/include/field_specials.h b/include/field_specials.h
index 1f8fbf147..8c0e69c2c 100644
--- a/include/field_specials.h
+++ b/include/field_specials.h
@@ -2,5 +2,6 @@
#define GUARD_FIELD_SPECIALS_H
u8 GetLeadMonIndex(void);
+void TV_PrintIntToStringVar(u8, int);
#endif // GUARD_FIELD_SPECIALS_H
diff --git a/include/item_menu.h b/include/item_menu.h
index 85655e9d5..0e1f20588 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -1,12 +1,14 @@
-#ifndef GUARD_item_menu_H
-#define GUARD_item_menu_H
+#ifndef GUARD_ITEM_MENU_H
+#define GUARD_ITEM_MENU_H
// Exported type declarations
// Exported RAM declarations
+extern u16 gUnknown_203AD30;
+
// Exported ROM declarations
void sub_81AAC50(void);
void sub_81AAC70(void);
-#endif //GUARD_item_menu_H
+#endif //GUARD_ITEM_MENU_H
diff --git a/include/item_use.h b/include/item_use.h
new file mode 100644
index 000000000..5ec5f2b33
--- /dev/null
+++ b/include/item_use.h
@@ -0,0 +1,9 @@
+#ifndef GUARD_ITEM_USE_H
+#define GUARD_ITEM_USE_H
+
+#include "global.h"
+
+void sub_80A1E0C(u8);
+void sub_80A2294(u8, u8, u16, u16);
+
+#endif //GUARD_ITEM_USE_H
diff --git a/include/map_obj_lock.h b/include/map_obj_lock.h
index a10648f2f..cf1f714d7 100644
--- a/include/map_obj_lock.h
+++ b/include/map_obj_lock.h
@@ -7,5 +7,6 @@ bool8 sub_809847C(void);
void LockSelectedMapObject(void);
void sub_8098630(void);
bool8 sub_8098734(void);
+void sub_80696C0(void);
#endif // GUARD_MAP_OBJ_LOCK_H
diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h
index c52184972..639395941 100644
--- a/include/new_menu_helpers.h
+++ b/include/new_menu_helpers.h
@@ -1,6 +1,7 @@
#ifndef GUARD_NEW_MENU_HELPERS_H
#define GUARD_NEW_MENU_HELPERS_H
+#include "global.h"
#include "text.h"
#include "task.h"
@@ -9,10 +10,11 @@ void sub_81973C4(u8, u8);
void sub_819746C(u8 windowId, bool8 copyToVram);
void sub_81973FC(u8, u8);
u16 AddTextPrinterParametrized(u8 windowId, u8 fontId, const u8 *str, u8 speed, void ( *callback)(u16, struct TextPrinter *), u8 fgColor, u8 bgColor, u8 shadowColor);
-void DisplayItemMessageOnField(u8 taskId, const u8 *src, TaskFunc callback);
+void DisplayItemMessageOnField(u8 taskId, u8 bgId, const u8 *src, TaskFunc callback);
void sub_8197434(u8 a0, u8 a1);
void SetStandardWindowBorderStyle(u8 a0, u8 a1);
void sub_8197930(void);
u8 GetPlayerTextSpeed(void);
+void sub_80F6F54(u8, u8);
#endif // GUARD_NEW_MENU_HELPERS_H
diff --git a/include/unk_810c3a4.h b/include/unk_810c3a4.h
new file mode 100644
index 000000000..3f85ab00f
--- /dev/null
+++ b/include/unk_810c3a4.h
@@ -0,0 +1,7 @@
+#ifndef GUARD_UNK_810C3A4_H
+#define GUARD_UNK_810C3A4_H
+
+void sub_810C604(void);
+void sub_810C640(void);
+
+#endif //GUARD_UNK_810C3A4_H
diff --git a/include/vs_seeker.h b/include/vs_seeker.h
new file mode 100644
index 000000000..efc014a4a
--- /dev/null
+++ b/include/vs_seeker.h
@@ -0,0 +1,14 @@
+#ifndef GUARD_VS_SEEKER_H
+#define GUARD_VS_SEEKER_H
+
+#include "global.h"
+
+void Task_VsSeeker_0(u8 taskId);
+void sub_810CB90(void);
+void sub_810CDE8(void);
+int sub_810CE64(u16 a0);
+bool8 sub_810CF04(u8 a0);
+u8 sub_810CF54();
+void sub_810D0D0(void);
+
+#endif //GUARD_VS_SEEKER_H
diff --git a/ld_script.txt b/ld_script.txt
index 462b36717..f445feaf7 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -215,7 +215,7 @@ SECTIONS {
asm/bag.o(.text);
asm/battle_dome_cards.o(.text);
asm/unk_810C3A4.o(.text);
- asm/vs_seeker.o(.text);
+ src/vs_seeker.o(.text);
asm/item_pc.o(.text);
asm/mailbox_pc.o(.text);
asm/menu.o(.text);
@@ -368,6 +368,8 @@ SECTIONS {
data/data_83F5738.o(.rodata);
src/save.o(.rodata);
data/data_83FECCC.o(.rodata);
+ src/vs_seeker.o(.rodata);
+ data/data_83FECCC.o(.rodata.8453F6C);
src/menews_jisan.o(.rodata);
data/data_8468C98.o(.rodata);
src/m4a_tables.o(.rodata);
diff --git a/src/menews_jisan.c b/src/menews_jisan.c
index 7dfcee939..450009318 100644
--- a/src/menews_jisan.c
+++ b/src/menews_jisan.c
@@ -89,12 +89,12 @@ void sub_8146C88(void)
r5->unk_0_2 = 0;
r5->unk_0_5 = 0;
r5->unk_1 = 0;
- VarSet(0x4028, 0);
+ VarSet(VAR_0x4028, 0);
}
void sub_8146CA4(void)
{
- u16 *r4 = sub_806E454(0x4028);
+ u16 *r4 = sub_806E454(VAR_0x4028);
struct MysteryEventStruct *r2 = sub_8143D94();
struct MysteryEventStruct r0 = *r2;
diff --git a/src/vs_seeker.c b/src/vs_seeker.c
new file mode 100644
index 000000000..17a13ab01
--- /dev/null
+++ b/src/vs_seeker.c
@@ -0,0 +1,1379 @@
+#include "global.h"
+#include "songs.h"
+#include "sound.h"
+#include "task.h"
+#include "malloc.h"
+#include "field_map_obj.h"
+#include "new_menu_helpers.h"
+#include "item_use.h"
+#include "event_scripts.h"
+#include "event_data.h"
+#include "script.h"
+#include "map_obj_lock.h"
+#include "field_specials.h"
+#include "item_menu.h"
+#include "field_effect.h"
+#include "script_movement.h"
+#include "battle.h"
+#include "battle_setup.h"
+#include "random.h"
+#include "field_map_obj.h"
+#include "field_player_avatar.h"
+#include "map_obj_8097404.h"
+#include "unk_810c3a4.h"
+#include "constants/movement_commands.h"
+#include "vs_seeker.h"
+
+typedef enum
+{
+ VSSEEKER_RESPONSE_NO_RESPONSE,
+ VSSEEKER_RESPONSE_UNFOUGHT_TRAINERS,
+ VSSEEKER_RESPONSE_FOUND_REMATCHES
+} VsSeekerResponseCode;
+
+// static types
+typedef struct VsSeekerData
+{
+ u16 trainerIdxs[6];
+ u16 unk_c; // unused
+ u16 unk_e; // unused
+} VsSeekerData;
+
+struct VsSeekerTrainerInfo
+{
+ const u8 *script;
+ u16 trainerIdx;
+ u8 localId;
+ u8 fieldObjectId;
+ s16 xCoord;
+ s16 yCoord;
+ u8 graphicsId;
+};
+
+struct VsSeekerStruct
+{
+ /*0x000*/ struct VsSeekerTrainerInfo trainerInfo[MAP_OBJECTS_COUNT];
+ /*0x100*/ u8 filler_100[0x300];
+ /*0x400*/ u16 trainerIdxArray[MAP_OBJECTS_COUNT];
+ /*0x420*/ u8 runningBehaviourEtcArray[MAP_OBJECTS_COUNT];
+ /*0x430*/ u8 numRematchableTrainers;
+ /*0x431*/ u8 trainerHasNotYetBeenFought:1;
+ /*0x431*/ u8 trainerDoesNotWantRematch:1;
+ /*0x431*/ u8 trainerWantsRematch:1;
+ u8 responseCode:5;
+};
+
+extern u16 gUnknown_20370D2;
+extern struct MapObject gMapObjects[MAP_OBJECTS_COUNT];
+extern u8 gUnknown_3005074;
+
+// static declarations
+static EWRAM_DATA struct VsSeekerStruct *sVsSeeker = NULL;
+
+static void Task_VsSeeker_1(u8 taskId);
+static void Task_VsSeeker_2(u8 taskId);
+static void GatherNearbyTrainerInfo(void);
+static void Task_VsSeeker_3(u8 taskId);
+static bool8 CanUseVsSeeker(void);
+static u8 GetVsSeekerResponseInArea(const VsSeekerData *);
+static u8 GetRematchTrainerIdGivenGameState(const u16 *, u8);
+static u8 sub_810CD80(const VsSeekerData *, u16);
+static u8 HasRematchTrainerAlreadyBeenFought(const VsSeekerData *, u16);
+static s32 sub_810CE10(const VsSeekerData * a0, u16 a1);
+static bool8 sub_810CED0(const VsSeekerData *, u16);
+static u8 GetRunningBehaviorFromGraphicsId(u8);
+static u16 GetTrainerFlagFromScript(const u8 *);
+static s32 GetRematchIdx(const VsSeekerData *, u16);
+static bool32 IsThisTrainerRematchable(u32);
+static bool8 IsTrainerVisibleOnScreen(struct VsSeekerTrainerInfo *);
+static u8 GetNextAvailableRematchTrainer(const VsSeekerData *, u16, u8 *);
+static u8 GetRematchableTrainerLocalId(void);
+static void StartTrainerObjectMovementScript(struct VsSeekerTrainerInfo *, const u8 *);
+static u8 GetCurVsSeekerResponse(s32, u16);
+static void StartAllRespondantIdleMovements(void);
+
+// rodata
+static const VsSeekerData sVsSeekerData[] = {
+ { {0x0059, 0x0065, 0xffff, 0x01f2, 0x01f3, 0x0000},
+ 0x0003, 0x0015 },
+ { {0x005a, 0x005a, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0015 },
+ { {0x0069, 0x02d9, 0xffff, 0x02da, 0xffff, 0x02db},
+ 0x0003, 0x0015 },
+ { {0x006a, 0x006a, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0015 },
+ { {0x006b, 0x006b, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0015 },
+ { {0x0074, 0x01fb, 0xffff, 0x01fc, 0x0000, 0x0000},
+ 0x0003, 0x0015 },
+ { {0x0075, 0x0075, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0015 },
+ { {0x0076, 0x0076, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0015 },
+ { {0x0077, 0x0077, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0016 },
+ { {0x005c, 0x01f7, 0xffff, 0x01f8, 0xffff, 0x01f9},
+ 0x0003, 0x002b },
+ { {0x006e, 0x006e, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002b },
+ { {0x007a, 0x01f5, 0xffff, 0x01f6, 0x0000, 0x0000},
+ 0x0003, 0x002b },
+ { {0x007b, 0x007b, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002b },
+ { {0x008f, 0x008f, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002b },
+ { {0x0090, 0x0090, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002b },
+ { {0x005d, 0x005d, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002c },
+ { {0x005e, 0x005e, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002c },
+ { {0x005f, 0x01f4, 0xffff, 0x01fa, 0x01fd, 0x0000},
+ 0x0003, 0x002c },
+ { {0x0099, 0x026d, 0xffff, 0x026e, 0x026f, 0x0000},
+ 0x0003, 0x002c },
+ { {0x007d, 0x007d, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002c },
+ { {0x00b6, 0xffff, 0x01fe, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002c },
+ { {0x00b7, 0x00b7, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002c },
+ { {0x00b8, 0x00b8, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002c },
+ { {0x01d7, 0x01d7, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002c },
+ { {0x006f, 0x006f, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0018 },
+ { {0x0070, 0x0070, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0018 },
+ { {0x0091, 0x0270, 0xffff, 0x0271, 0xffff, 0x0272},
+ 0x0003, 0x0018 },
+ { {0x0092, 0x0273, 0xffff, 0x0274, 0xffff, 0x0275},
+ 0x0003, 0x0018 },
+ { {0x0097, 0x0097, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0018 },
+ { {0x0098, 0x0276, 0xffff, 0x0277, 0x0278, 0x0000},
+ 0x0003, 0x0018 },
+ { {0x0061, 0x0061, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001d },
+ { {0x0062, 0x0062, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001d },
+ { {0x0063, 0xffff, 0x0279, 0xffff, 0x027a, 0x0000},
+ 0x0003, 0x001d },
+ { {0x0064, 0x0064, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001d },
+ { {0x00dd, 0x00dd, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001d },
+ { {0x00de, 0xffff, 0xffff, 0x027b, 0x0000, 0x0000},
+ 0x0003, 0x001d },
+ { {0x0102, 0x0102, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001d },
+ { {0x0103, 0x0103, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001d },
+ { {0x0104, 0x0104, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001d },
+ { {0x0105, 0xffff, 0xffff, 0x027c, 0x0000, 0x0000},
+ 0x0003, 0x001d },
+ { {0x0072, 0x0072, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001b },
+ { {0x0073, 0x0073, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001b },
+ { {0x0094, 0xffff, 0x027d, 0x027e, 0xffff, 0x027f},
+ 0x0003, 0x001b },
+ { {0x0095, 0x0095, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001b },
+ { {0x009a, 0xffff, 0x0280, 0x0281, 0xffff, 0x0282},
+ 0x0003, 0x001b },
+ { {0x009b, 0x009b, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001b },
+ { {0x00b9, 0x00b9, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001b },
+ { {0x00ba, 0x00ba, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001b },
+ { {0x01d1, 0xffff, 0xffff, 0x0283, 0x0000, 0x0000},
+ 0x0003, 0x001b },
+ { {0x009c, 0x009c, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001c },
+ { {0x009d, 0x009d, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001c },
+ { {0x00a2, 0xffff, 0xffff, 0x0252, 0xffff, 0x0284},
+ 0x0003, 0x001c },
+ { {0x00a3, 0xffff, 0xffff, 0x0285, 0xffff, 0x0286},
+ 0x0003, 0x001c },
+ { {0x00bb, 0x00bb, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001c },
+ { {0x00bc, 0xffff, 0xffff, 0x0287, 0x0000, 0x0000},
+ 0x0003, 0x001c },
+ { {0x0080, 0x0080, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001a },
+ { {0x0081, 0x0081, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001a },
+ { {0x0082, 0xffff, 0x0288, 0xffff, 0x0289, 0x0000},
+ 0x0003, 0x001a },
+ { {0x0083, 0x0083, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001a },
+ { {0x00ab, 0x00ab, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001a },
+ { {0x00ac, 0xffff, 0xffff, 0x028a, 0x0000, 0x0000},
+ 0x0003, 0x001a },
+ { {0x00ad, 0x00ad, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001a },
+ { {0x0106, 0x0106, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001a },
+ { {0x0108, 0xffff, 0xffff, 0x028b, 0x0000, 0x0000},
+ 0x0003, 0x001a },
+ { {0x01e4, 0xffff, 0xffff, 0x0215, 0x0000, 0x0000},
+ 0x0003, 0x001a },
+ { {0x0217, 0x0217, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001a },
+ { {0x0218, 0xffff, 0xffff, 0x028c, 0x0000, 0x0000},
+ 0x0003, 0x001a },
+ { {0x00e1, 0x00e1, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001e },
+ { {0x00e2, 0x00e2, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001e },
+ { {0x00e3, 0x00e3, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001e },
+ { {0x00e4, 0xffff, 0xffff, 0x028d, 0x0000, 0x0000},
+ 0x0003, 0x001e },
+ { {0x00e9, 0x00e9, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001e },
+ { {0x011d, 0xffff, 0xffff, 0x028e, 0x0000, 0x0000},
+ 0x0003, 0x001e },
+ { {0x01dd, 0x01dd, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001e },
+ { {0x01e6, 0xffff, 0xffff, 0x02c2, 0xffff, 0x02c3},
+ 0x0003, 0x001e },
+ { {0x00c3, 0x00c3, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001f },
+ { {0x010c, 0x010c, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001f },
+ { {0x010d, 0xffff, 0xffff, 0xffff, 0x028f, 0x0000},
+ 0x0003, 0x001f },
+ { {0x012c, 0x012c, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001f },
+ { {0x012d, 0x012d, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001f },
+ { {0x012e, 0xffff, 0xffff, 0x0290, 0x0291, 0x0000},
+ 0x0003, 0x001f },
+ { {0x01d2, 0x01d2, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001f },
+ { {0x01d3, 0xffff, 0xffff, 0x0292, 0x0293, 0x0294},
+ 0x0003, 0x001f },
+ { {0x01d4, 0x01d4, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001f },
+ { {0x01d5, 0x01d5, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x001f },
+ { {0x00c4, 0x00c4, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0020 },
+ { {0x00cf, 0xffff, 0xffff, 0xffff, 0x0295, 0x0000},
+ 0x0003, 0x0020 },
+ { {0x00d0, 0x00d0, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0020 },
+ { {0x00d1, 0x00d1, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0020 },
+ { {0x012f, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0020 },
+ { {0x0130, 0xffff, 0xffff, 0x0296, 0x0297, 0x0000},
+ 0x0003, 0x0020 },
+ { {0x0139, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0020 },
+ { {0x013a, 0x013a, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0020 },
+ { {0x013b, 0x013b, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0020 },
+ { {0x013c, 0xffff, 0xffff, 0x0298, 0x0299, 0x0000},
+ 0x0003, 0x0020 },
+ { {0x01e7, 0x01e7, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0020 },
+ { {0x00c5, 0x00c5, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0021 },
+ { {0x00c6, 0x00c6, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0021 },
+ { {0x0111, 0xffff, 0xffff, 0xffff, 0x029a, 0x0000},
+ 0x0003, 0x0021 },
+ { {0x0112, 0x0112, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0021 },
+ { {0x0131, 0x0131, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0021 },
+ { {0x0132, 0xffff, 0xffff, 0x029b, 0x029c, 0x0000},
+ 0x0003, 0x0021 },
+ { {0x01de, 0x01de, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0021 },
+ { {0x01df, 0x01df, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0021 },
+ { {0x01e0, 0xffff, 0xffff, 0x029d, 0x029e, 0x029f},
+ 0x0003, 0x0021 },
+ { {0x01e1, 0x01e1, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0021 },
+ { {0x01e8, 0xffff, 0xffff, 0x02a0, 0x02a1, 0x02a2},
+ 0x0003, 0x0021 },
+ { {0x00c7, 0x00c7, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0022 },
+ { {0x00c9, 0x00c9, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0022 },
+ { {0x00ca, 0xffff, 0xffff, 0xffff, 0x02a3, 0x0000},
+ 0x0003, 0x0022 },
+ { {0x00f9, 0x00f9, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0022 },
+ { {0x00fa, 0x00fa, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0022 },
+ { {0x00fb, 0xffff, 0xffff, 0xffff, 0x02a4, 0x0000},
+ 0x0003, 0x0022 },
+ { {0x01e9, 0x01e9, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0022 },
+ { {0x00cb, 0x00cb, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0023 },
+ { {0x00cc, 0x00cc, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0023 },
+ { {0x00cd, 0xffff, 0xffff, 0xffff, 0x02a5, 0x0000},
+ 0x0003, 0x0023 },
+ { {0x00ce, 0x00ce, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0023 },
+ { {0x00fc, 0x00fc, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0023 },
+ { {0x00fd, 0xffff, 0xffff, 0xffff, 0x02a6, 0x0000},
+ 0x0003, 0x0023 },
+ { {0x00fe, 0x00fe, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0023 },
+ { {0x00ff, 0x00ff, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0023 },
+ { {0x0100, 0xffff, 0xffff, 0xffff, 0x02a7, 0x0000},
+ 0x0003, 0x0023 },
+ { {0x01d6, 0x01d6, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0023 },
+ { {0x0133, 0x0133, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0024 },
+ { {0x0134, 0x0134, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0024 },
+ { {0x0135, 0xffff, 0xffff, 0x02a8, 0x02a9, 0x0000},
+ 0x0003, 0x0024 },
+ { {0x00eb, 0x00eb, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0025 },
+ { {0x00ec, 0x00ec, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0025 },
+ { {0x00ed, 0xffff, 0xffff, 0xffff, 0x02dc, 0x0000},
+ 0x0003, 0x0025 },
+ { {0x00ee, 0x00ee, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0025 },
+ { {0x00ef, 0x00ef, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0025 },
+ { {0x00f0, 0xffff, 0xffff, 0xffff, 0x02dd, 0x0000},
+ 0x0003, 0x0025 },
+ { {0x00f1, 0x00f1, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0025 },
+ { {0x0114, 0x0114, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0025 },
+ { {0x0115, 0xffff, 0xffff, 0xffff, 0x02aa, 0x0000},
+ 0x0003, 0x0025 },
+ { {0x0116, 0x0116, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0025 },
+ { {0x01ea, 0x01ea, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0025 },
+ { {0x00f2, 0x00f2, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0026 },
+ { {0x00f3, 0x00f3, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0026 },
+ { {0x00f4, 0xffff, 0xffff, 0xffff, 0xffff, 0x02ab},
+ 0x0003, 0x0026 },
+ { {0x010e, 0x010e, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0026 },
+ { {0x010f, 0x010f, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0026 },
+ { {0x0110, 0xffff, 0xffff, 0xffff, 0x02de, 0x0000},
+ 0x0003, 0x0026 },
+ { {0x0117, 0x0117, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0026 },
+ { {0x0136, 0x0136, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0026 },
+ { {0x01d8, 0xffff, 0xffff, 0xffff, 0x02ac, 0x02ad},
+ 0x0003, 0x0026 },
+ { {0x01d9, 0x01d9, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0026 },
+ { {0x00e5, 0x00e5, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0027 },
+ { {0x00e6, 0x00e6, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0027 },
+ { {0x00e7, 0xffff, 0xffff, 0xffff, 0x02ae, 0x0000},
+ 0x0003, 0x0027 },
+ { {0x00e8, 0x00e8, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0027 },
+ { {0x00f5, 0x00f5, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0027 },
+ { {0x00f6, 0xffff, 0xffff, 0xffff, 0x02af, 0x0000},
+ 0x0003, 0x0027 },
+ { {0x00f7, 0x00f7, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0027 },
+ { {0x00f8, 0x00f8, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0027 },
+ { {0x01eb, 0xffff, 0xffff, 0xffff, 0x02b0, 0x02b1},
+ 0x0003, 0x0027 },
+ { {0x0223, 0x0223, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002d },
+ { {0x0224, 0x0224, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002d },
+ { {0x0225, 0xffff, 0xffff, 0xffff, 0x02b2, 0x0000},
+ 0x0003, 0x002d },
+ { {0x0226, 0x0226, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002d },
+ { {0x0227, 0x0227, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002d },
+ { {0x0206, 0xffff, 0xffff, 0xffff, 0x02b3, 0x02b4},
+ 0x0003, 0x002d },
+ { {0x0228, 0xffff, 0xffff, 0xffff, 0x02b5, 0x02b6},
+ 0x0003, 0x002d },
+ { {0x0229, 0xffff, 0xffff, 0xffff, 0x02b7, 0x02b8},
+ 0x0003, 0x002d },
+ { {0x022a, 0xffff, 0xffff, 0xffff, 0x02b9, 0x02ba},
+ 0x0003, 0x002d },
+ { {0x022b, 0x022b, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002d },
+ { {0x022c, 0x022c, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002d },
+ { {0x022d, 0xffff, 0xffff, 0xffff, 0x02bb, 0x02bc},
+ 0x0003, 0x002d },
+ { {0x0222, 0x0222, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x002e },
+ { {0x020b, 0x020b, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0030 },
+ { {0x022e, 0x022e, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0030 },
+ { {0x0207, 0xffff, 0xffff, 0xffff, 0x02bd, 0x0000},
+ 0x0003, 0x0030 },
+ { {0x022f, 0x022f, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0030 },
+ { {0x0231, 0x0231, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0030 },
+ { {0x0230, 0xffff, 0xffff, 0xffff, 0x02be, 0x0000},
+ 0x0003, 0x0030 },
+ { {0x020e, 0x020e, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0036 },
+ { {0x0232, 0x0232, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0036 },
+ { {0x0233, 0xffff, 0xffff, 0xffff, 0xffff, 0x02bf},
+ 0x0003, 0x0036 },
+ { {0x020d, 0x020d, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0036 },
+ { {0x0234, 0x0234, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0036 },
+ { {0x0235, 0xffff, 0xffff, 0xffff, 0xffff, 0x02c0},
+ 0x0003, 0x0036 },
+ { {0x0236, 0x0236, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0036 },
+ { {0x0208, 0xffff, 0xffff, 0xffff, 0xffff, 0x02c1},
+ 0x0003, 0x0037 },
+ { {0x023a, 0xffff, 0xffff, 0xffff, 0xffff, 0x02c4},
+ 0x0003, 0x0039 },
+ { {0x023b, 0xffff, 0xffff, 0xffff, 0xffff, 0x02c5},
+ 0x0003, 0x0039 },
+ { {0x023c, 0xffff, 0xffff, 0xffff, 0xffff, 0x02c6},
+ 0x0003, 0x0039 },
+ { {0x023d, 0x023d, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x003a },
+ { {0x023e, 0x023e, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x003a },
+ { {0x023f, 0xffff, 0xffff, 0xffff, 0xffff, 0x02c7},
+ 0x0003, 0x003a },
+ { {0x0240, 0x0240, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x003a },
+ { {0x0205, 0xffff, 0xffff, 0xffff, 0xffff, 0x02c8},
+ 0x0003, 0x003b },
+ { {0x0241, 0x0241, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x003c },
+ { {0x0123, 0x0123, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x003c },
+ { {0x0242, 0xffff, 0xffff, 0xffff, 0xffff, 0x02c9},
+ 0x0003, 0x003c },
+ { {0x0243, 0x0243, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x003c },
+ { {0x0244, 0x0244, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x003c },
+ { {0x0245, 0xffff, 0xffff, 0xffff, 0xffff, 0x02ca},
+ 0x0003, 0x003c },
+ { {0x020c, 0x020c, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x003d },
+ { {0x0246, 0x0246, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x003d },
+ { {0x0247, 0xffff, 0xffff, 0xffff, 0xffff, 0x02cb},
+ 0x0003, 0x003d },
+ { {0x0248, 0x0248, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x003d },
+ { {0x0249, 0xffff, 0xffff, 0xffff, 0xffff, 0x02cc},
+ 0x0003, 0x003d },
+ { {0x024a, 0xffff, 0xffff, 0xffff, 0xffff, 0x02cd},
+ 0x0003, 0x003e },
+ { {0x024b, 0xffff, 0xffff, 0xffff, 0xffff, 0x02ce},
+ 0x0003, 0x003e },
+ { {0x024c, 0x024c, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x003f },
+ { {0x024d, 0x024d, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x003f },
+ { {0x024e, 0xffff, 0xffff, 0xffff, 0xffff, 0x02cf},
+ 0x0003, 0x003f },
+ { {0x0209, 0xffff, 0xffff, 0xffff, 0xffff, 0x02d0},
+ 0x0003, 0x003f },
+ { {0x020a, 0xffff, 0xffff, 0xffff, 0xffff, 0x02d1},
+ 0x0003, 0x003f },
+ { {0x024f, 0xffff, 0xffff, 0xffff, 0xffff, 0x02d2},
+ 0x0003, 0x0040 },
+ { {0x0251, 0xffff, 0xffff, 0xffff, 0xffff, 0x02d3},
+ 0x0003, 0x0040 },
+ { {0x0254, 0xffff, 0xffff, 0xffff, 0xffff, 0x02d4},
+ 0x0003, 0x0040 },
+ { {0x0256, 0xffff, 0xffff, 0xffff, 0xffff, 0x02d5},
+ 0x0003, 0x0040 },
+ { {0x0257, 0xffff, 0xffff, 0xffff, 0xffff, 0x02d6},
+ 0x0003, 0x0040 },
+ { {0x0258, 0xffff, 0xffff, 0xffff, 0xffff, 0x02d7},
+ 0x0003, 0x0040 },
+ { {0x0259, 0xffff, 0xffff, 0xffff, 0xffff, 0x02d8},
+ 0x0003, 0x0040 },
+ { {0x025a, 0x025a, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0041 },
+ { {0x025b, 0x025b, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0041 },
+ { {0x025c, 0x025c, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0041 },
+ { {0x025d, 0x025d, 0x0000, 0x0000, 0x0000, 0x0000},
+ 0x0003, 0x0041 }
+};
+
+static const u8 gUnknown_8453F5C[] = {
+ step_1c,
+ step_1c,
+ step_1c,
+ step_end
+};
+
+static const u8 gUnknown_8453F60[] = {
+ step_62,
+ step_end
+};
+
+static const u8 sMovementScript_TrainerNoRematch[] = {
+ step_64,
+ step_end
+};
+
+static const u8 gUnknown_8453F64[] = {
+ step_2d,
+ step_65,
+ step_end
+};
+
+static const u8 gUnknown_8453F67[] = { 0x08, 0x08, 0x07, 0x09, 0x0a };
+
+
+// text
+void Task_VsSeeker_0(u8 taskId)
+{
+ u8 i;
+ u8 respval;
+
+ for (i = 0; i < 16; i++)
+ gTasks[taskId].data[i] = 0;
+
+ sVsSeeker = AllocZeroed(sizeof(struct VsSeekerStruct));
+ GatherNearbyTrainerInfo();
+ respval = CanUseVsSeeker();
+ if (respval == 0)
+ {
+ Free(sVsSeeker);
+ DisplayItemMessageOnField(taskId, 2, gUnknown_81C137C, sub_80A1E0C);
+ }
+ else if (respval == 1)
+ {
+ Free(sVsSeeker);
+ DisplayItemMessageOnField(taskId, 2, gUnknown_81C13D6, sub_80A1E0C);
+ }
+ else if (respval == 2)
+ {
+ sub_80A2294(4, 0, gUnknown_203AD30, 0xffff);
+ FieldEffectStart(FLDEFF_UNK_41); // TODO: name this enum
+ gTasks[taskId].func = Task_VsSeeker_1;
+ gTasks[taskId].data[0] = 15;
+ }
+}
+
+static void Task_VsSeeker_1(u8 taskId)
+{
+ if (--gTasks[taskId].data[0] == 0)
+ {
+ gTasks[taskId].func = Task_VsSeeker_2;
+ gTasks[taskId].data[1] = 16;
+ }
+}
+
+static void Task_VsSeeker_2(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ if (data[2] != 2 && --data[1] == 0)
+ {
+ PlaySE(SE_BASABASA);
+ data[1] = 11;
+ data[2]++;
+ }
+
+ if (!FieldEffectActiveListContains(FLDEFF_UNK_41))
+ {
+ data[1] = 0;
+ data[2] = 0;
+ sub_810C604();
+ sVsSeeker->responseCode = GetVsSeekerResponseInArea(sVsSeekerData);
+ ScriptMovement_StartObjectMovementScript(0xFF, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, gUnknown_8453F5C);
+ gTasks[taskId].func = Task_VsSeeker_3;
+ }
+}
+
+static void GatherNearbyTrainerInfo(void)
+{
+ struct MapObjectTemplate *templates = gSaveBlock1Ptr->mapObjectTemplates;
+ u8 fieldObjectId = 0;
+ u8 vsSeekerObjectIdx = 0;
+ s32 mapObjectIdx;
+
+ for (mapObjectIdx = 0; mapObjectIdx < gMapHeader.events->mapObjectCount; mapObjectIdx++)
+ {
+ if (templates[mapObjectIdx].unkC == 1 || templates[mapObjectIdx].unkC == 3)
+ {
+ sVsSeeker->trainerInfo[vsSeekerObjectIdx].script = templates[mapObjectIdx].script;
+ sVsSeeker->trainerInfo[vsSeekerObjectIdx].trainerIdx = GetTrainerFlagFromScript(templates[mapObjectIdx].script);
+ sVsSeeker->trainerInfo[vsSeekerObjectIdx].localId = templates[mapObjectIdx].localId;
+ TryGetFieldObjectIdByLocalIdAndMap(templates[mapObjectIdx].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &fieldObjectId);
+ sVsSeeker->trainerInfo[vsSeekerObjectIdx].fieldObjectId = fieldObjectId;
+ sVsSeeker->trainerInfo[vsSeekerObjectIdx].xCoord = gMapObjects[fieldObjectId].coords2.x - 7;
+ sVsSeeker->trainerInfo[vsSeekerObjectIdx].yCoord = gMapObjects[fieldObjectId].coords2.y - 7;
+ sVsSeeker->trainerInfo[vsSeekerObjectIdx].graphicsId = templates[mapObjectIdx].graphicsId;
+ vsSeekerObjectIdx++;
+ }
+ }
+ sVsSeeker->trainerInfo[vsSeekerObjectIdx].localId = 0xFF;
+}
+
+static void Task_VsSeeker_3(u8 taskId)
+{
+ if (ScriptMovement_IsObjectMovementFinished(0xFF, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup))
+ {
+ if (sVsSeeker->responseCode == 0)
+ {
+ DisplayItemMessageOnField(taskId, 2, gUnknown_81C1429, sub_80A1E0C);
+ }
+ else
+ {
+ if (sVsSeeker->responseCode == 2)
+ StartAllRespondantIdleMovements();
+ sub_80F6F54(0, 1);
+ sub_80696C0();
+ ScriptContext2_Disable();
+ DestroyTask(taskId);
+ }
+ Free(sVsSeeker);
+ }
+}
+
+u8 CanUseVsSeeker(void)
+{
+ u8 vsSeekerChargeSteps = gSaveBlock1Ptr->trainerRematchStepCounter;
+ if (vsSeekerChargeSteps == 100)
+ {
+ if (GetRematchableTrainerLocalId() == 0xFF)
+ return 1;
+ else
+ return 2;
+ }
+ else
+ {
+ TV_PrintIntToStringVar(0, 100 - vsSeekerChargeSteps);
+ return 0;
+ }
+}
+
+// Nonmatching due to register roulette
+#ifdef NONMATCHING
+static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0)
+{
+ u16 r8 = 0;
+ u8 sp0 = 0;
+ s32 vsSeekerIdx;
+
+ for (vsSeekerIdx = 0; sVsSeeker->trainerInfo[vsSeekerIdx].localId != 0xFF; vsSeekerIdx++)
+ {
+ if (IsTrainerVisibleOnScreen(&sVsSeeker->trainerInfo[vsSeekerIdx]) == 1)
+ {
+ r8 = sVsSeeker->trainerInfo[vsSeekerIdx].trainerIdx;
+ if (!HasTrainerAlreadyBeenFought(r8))
+ {
+ StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], gUnknown_8453F60);
+ sVsSeeker->trainerHasNotYetBeenFought = 1;
+ }
+ else
+ {
+ u8 r7 = GetNextAvailableRematchTrainer(a0, r8, &sp0);
+ if (r7 == 0)
+ {
+ StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerNoRematch);
+ sVsSeeker->trainerDoesNotWantRematch = 1;
+ }
+ else
+ {
+ u16 rval = Random() % 100;
+ u8 r0 = GetCurVsSeekerResponse(vsSeekerIdx, r8);
+ if (r0 == 2)
+ rval = 100;
+ else if (r0 == 1)
+ rval = 0;
+ if (rval < 30)
+ {
+ StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerNoRematch);
+ sVsSeeker->trainerDoesNotWantRematch = 1;
+ }
+ else
+ {
+ gSaveBlock1Ptr->trainerRematches[sVsSeeker->trainerInfo[vsSeekerIdx].localId] = r7;
+ npc_coords_shift_still(&gMapObjects[sVsSeeker->trainerInfo[vsSeekerIdx].fieldObjectId]);
+ StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], gUnknown_8453F64);
+ sVsSeeker->trainerIdxArray[sVsSeeker->numRematchableTrainers] = r8;
+ sVsSeeker->runningBehaviourEtcArray[sVsSeeker->numRematchableTrainers] = GetRunningBehaviorFromGraphicsId(sVsSeeker->trainerInfo[vsSeekerIdx].graphicsId);
+ sVsSeeker->numRematchableTrainers++;
+ sVsSeeker->trainerWantsRematch = 1;
+ }
+ }
+ }
+ }
+ }
+
+ if (sVsSeeker->trainerWantsRematch)
+ {
+ PlaySE(SE_PIN);
+ FlagSet(0x801); // TODO: make this an enum
+ sub_810C640();
+ return 2;
+ }
+ if (sVsSeeker->trainerHasNotYetBeenFought)
+ return 1;
+ return 0;
+}
+#else
+NAKED
+static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0x8\n"
+ "\tstr r0, [sp, 0x4]\n"
+ "\tmovs r0, 0\n"
+ "\tmov r8, r0\n"
+ "\tmov r0, sp\n"
+ "\tmov r1, r8\n"
+ "\tstrb r1, [r0]\n"
+ "\tmovs r2, 0\n"
+ "\tmov r9, r2\n"
+ "\tldr r4, _0810CA14 @ =sVsSeeker\n"
+ "\tldr r0, [r4]\n"
+ "\tldrb r0, [r0, 0x6]\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbne _0810C9D0\n"
+ "\tb _0810CB2C\n"
+ "_0810C9D0:\n"
+ "\tadds r6, r4, 0\n"
+ "\tmovs r3, 0x86\n"
+ "\tlsls r3, 3\n"
+ "\tmov r10, r3\n"
+ "\tmovs r5, 0\n"
+ "_0810C9DA:\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, r5\n"
+ "\tbl IsTrainerVisibleOnScreen\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x1\n"
+ "\tbeq _0810C9EC\n"
+ "\tb _0810CB18\n"
+ "_0810C9EC:\n"
+ "\tldr r0, [r4]\n"
+ "\tadds r0, r5\n"
+ "\tldrh r0, [r0, 0x4]\n"
+ "\tmov r8, r0\n"
+ "\tbl HasTrainerAlreadyBeenFought\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0810CA20\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, r5\n"
+ "\tldr r1, _0810CA18 @ =gUnknown_8453F60\n"
+ "\tbl StartTrainerObjectMovementScript\n"
+ "\tldr r2, [r6]\n"
+ "\tldr r0, _0810CA1C @ =0x00000431\n"
+ "\tadds r2, r0\n"
+ "\tldrb r0, [r2]\n"
+ "\tmovs r1, 0x1\n"
+ "\tb _0810CB14\n"
+ "\t.align 2, 0\n"
+ "_0810CA14: .4byte sVsSeeker\n"
+ "_0810CA18: .4byte gUnknown_8453F60\n"
+ "_0810CA1C: .4byte 0x00000431\n"
+ "_0810CA20:\n"
+ "\tldr r0, [sp, 0x4]\n"
+ "\tmov r1, r8\n"
+ "\tmov r2, sp\n"
+ "\tbl GetNextAvailableRematchTrainer\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r7, r0, 24\n"
+ "\tcmp r7, 0\n"
+ "\tbne _0810CA50\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, r5\n"
+ "\tldr r1, _0810CA48 @ =sMovementScript_TrainerNoRematch\n"
+ "\tbl StartTrainerObjectMovementScript\n"
+ "\tldr r2, [r6]\n"
+ "\tldr r3, _0810CA4C @ =0x00000431\n"
+ "\tadds r2, r3\n"
+ "\tldrb r0, [r2]\n"
+ "\tmovs r1, 0x2\n"
+ "\tb _0810CB14\n"
+ "\t.align 2, 0\n"
+ "_0810CA48: .4byte sMovementScript_TrainerNoRematch\n"
+ "_0810CA4C: .4byte 0x00000431\n"
+ "_0810CA50:\n"
+ "\tbl Random\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tmovs r1, 0x64\n"
+ "\tbl __umodsi3\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r4, r0, 16\n"
+ "\tmov r0, r9\n"
+ "\tmov r1, r8\n"
+ "\tbl GetCurVsSeekerResponse\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x2\n"
+ "\tbne _0810CA76\n"
+ "\tmovs r4, 0x64\n"
+ "\tb _0810CA7C\n"
+ "_0810CA76:\n"
+ "\tcmp r0, 0x1\n"
+ "\tbne _0810CA7C\n"
+ "\tmovs r4, 0\n"
+ "_0810CA7C:\n"
+ "\tcmp r4, 0x1D\n"
+ "\tbhi _0810CAA0\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, r5\n"
+ "\tldr r1, _0810CA98 @ =sMovementScript_TrainerNoRematch\n"
+ "\tbl StartTrainerObjectMovementScript\n"
+ "\tldr r2, [r6]\n"
+ "\tldr r0, _0810CA9C @ =0x00000431\n"
+ "\tadds r2, r0\n"
+ "\tldrb r0, [r2]\n"
+ "\tmovs r1, 0x2\n"
+ "\tb _0810CB14\n"
+ "\t.align 2, 0\n"
+ "_0810CA98: .4byte sMovementScript_TrainerNoRematch\n"
+ "_0810CA9C: .4byte 0x00000431\n"
+ "_0810CAA0:\n"
+ "\tldr r0, _0810CB54 @ =gSaveBlock1Ptr\n"
+ "\tldr r1, [r0]\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, r5\n"
+ "\tldr r2, _0810CB58 @ =0x0000063a\n"
+ "\tadds r1, r2\n"
+ "\tldrb r0, [r0, 0x6]\n"
+ "\tadds r1, r0\n"
+ "\tstrb r7, [r1]\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, r5\n"
+ "\tldrb r1, [r0, 0x7]\n"
+ "\tlsls r0, r1, 3\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tldr r1, _0810CB5C @ =gMapObjects\n"
+ "\tadds r0, r1\n"
+ "\tbl npc_coords_shift_still\n"
+ "\tldr r0, [r6]\n"
+ "\tadds r0, r5\n"
+ "\tldr r1, _0810CB60 @ =gUnknown_8453F64\n"
+ "\tbl StartTrainerObjectMovementScript\n"
+ "\tldr r2, [r6]\n"
+ "\tmov r3, r10\n"
+ "\tadds r0, r2, r3\n"
+ "\tldrb r1, [r0]\n"
+ "\tlsls r1, 1\n"
+ "\tmovs r3, 0x80\n"
+ "\tlsls r3, 3\n"
+ "\tadds r0, r2, r3\n"
+ "\tadds r0, r1\n"
+ "\tmov r1, r8\n"
+ "\tstrh r1, [r0]\n"
+ "\tadds r2, r5\n"
+ "\tldrb r0, [r2, 0xC]\n"
+ "\tbl GetRunningBehaviorFromGraphicsId\n"
+ "\tldr r1, [r6]\n"
+ "\tmov r3, r10\n"
+ "\tadds r2, r1, r3\n"
+ "\tmovs r3, 0x84\n"
+ "\tlsls r3, 3\n"
+ "\tadds r1, r3\n"
+ "\tldrb r2, [r2]\n"
+ "\tadds r1, r2\n"
+ "\tstrb r0, [r1]\n"
+ "\tldr r1, [r6]\n"
+ "\tadd r1, r10\n"
+ "\tldrb r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ "\tldr r2, [r6]\n"
+ "\tldr r0, _0810CB64 @ =0x00000431\n"
+ "\tadds r2, r0\n"
+ "\tldrb r0, [r2]\n"
+ "\tmovs r1, 0x4\n"
+ "_0810CB14:\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r2]\n"
+ "_0810CB18:\n"
+ "\tadds r5, 0x10\n"
+ "\tmovs r1, 0x1\n"
+ "\tadd r9, r1\n"
+ "\tldr r4, _0810CB68 @ =sVsSeeker\n"
+ "\tldr r0, [r4]\n"
+ "\tadds r0, r5\n"
+ "\tldrb r0, [r0, 0x6]\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbeq _0810CB2C\n"
+ "\tb _0810C9DA\n"
+ "_0810CB2C:\n"
+ "\tldr r2, _0810CB68 @ =sVsSeeker\n"
+ "\tldr r0, [r2]\n"
+ "\tldr r3, _0810CB64 @ =0x00000431\n"
+ "\tadds r0, r3\n"
+ "\tldrb r1, [r0]\n"
+ "\tmovs r0, 0x4\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0810CB70\n"
+ "\tmovs r0, 0x15\n"
+ "\tbl PlaySE\n"
+ "\tldr r0, _0810CB6C @ =0x00000801\n"
+ "\tbl FlagSet\n"
+ "\tbl sub_810C640\n"
+ "\tmovs r0, 0x2\n"
+ "\tb _0810CB7E\n"
+ "\t.align 2, 0\n"
+ "_0810CB54: .4byte gSaveBlock1Ptr\n"
+ "_0810CB58: .4byte 0x0000063a\n"
+ "_0810CB5C: .4byte gMapObjects\n"
+ "_0810CB60: .4byte gUnknown_8453F64\n"
+ "_0810CB64: .4byte 0x00000431\n"
+ "_0810CB68: .4byte sVsSeeker\n"
+ "_0810CB6C: .4byte 0x00000801\n"
+ "_0810CB70:\n"
+ "\tmovs r0, 0x1\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0810CB7C\n"
+ "\tmovs r0, 0\n"
+ "\tb _0810CB7E\n"
+ "_0810CB7C:\n"
+ "\tmovs r0, 0x1\n"
+ "_0810CB7E:\n"
+ "\tadd sp, 0x8\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+}
+#endif
+
+void sub_810CB90(void)
+{
+ u8 sp0 = 0;
+ struct MapObjectTemplate *r4 = gSaveBlock1Ptr->mapObjectTemplates;
+ s32 r9 = sub_810CE10(sVsSeekerData, gTrainerBattleOpponent_A);
+
+ if (r9 != -1)
+ {
+ s32 r8;
+
+ for (r8 = 0; r8 < gMapHeader.events->mapObjectCount; r8++)
+ {
+ if ((r4[r8].unkC == 1 || r4[r8].unkC == 3) && r9 == sub_810CE10(sVsSeekerData, GetTrainerFlagFromScript(r4[r8].script)))
+ {
+ struct MapObject *r4_2;
+
+ TryGetFieldObjectIdByLocalIdAndMap(r4[r8].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &sp0);
+ r4_2 = &gMapObjects[sp0];
+ sub_810CF54(&r4[r8]); // You are using this function incorrectly. Please consult the manual.
+ sub_805FE7C(r4_2, gUnknown_8453F67[r4_2->mapobj_unk_18]);
+ gSaveBlock1Ptr->trainerRematches[r4[r8].localId] = 0;
+ if (gUnknown_3005074 == sp0)
+ r4_2->animPattern = gUnknown_8453F67[r4_2->mapobj_unk_18];
+ else
+ r4_2->animPattern = 0x08;
+ }
+ }
+ }
+}
+
+static void TryGetRematchTrainerIdGivenGameState(const u16 * a0, u8 * a1)
+{
+ switch (*a1)
+ {
+ case 0:
+ break;
+ case 1:
+ if (!FlagGet(FLAG_0x292))
+ *a1 = GetRematchTrainerIdGivenGameState(a0, *a1);
+ break;
+ case 2:
+ if (!FlagGet(FLAG_SYS_NATIONAL_DEX))
+ *a1 = GetRematchTrainerIdGivenGameState(a0, *a1);
+ break;
+ case 3:
+ if (!FlagGet(FLAG_SYS_CAVE_SHIP))
+ *a1 = GetRematchTrainerIdGivenGameState(a0, *a1);
+ break;
+ case 4:
+ if (!FlagGet(FLAG_TRAINER_FLAG_START + 0x32c))
+ *a1 = GetRematchTrainerIdGivenGameState(a0, *a1);
+ break;
+ case 5:
+ if (!FlagGet(FLAG_TRAINER_FLAG_START + 0x344))
+ *a1 = GetRematchTrainerIdGivenGameState(a0, *a1);
+ break;
+ }
+}
+
+static u8 GetRematchTrainerIdGivenGameState(const u16 * a0, u8 a1)
+{
+ while (--a1 != 0)
+ {
+ const u16 *r0 = a0 + a1;
+ if (*r0 != 0xFFFF)
+ return a1;
+ }
+ return 0;
+}
+
+u8 sub_810CD4C(void) // unreferenced, or reference not disassembled
+{
+ if (sub_810CD80(sVsSeekerData, gTrainerBattleOpponent_A))
+ {
+ return 1;
+ }
+ return HasRematchTrainerAlreadyBeenFought(sVsSeekerData, gTrainerBattleOpponent_A);
+}
+
+static bool8 sub_810CD80(const VsSeekerData *vsSeekerData, u16 trainerBattleOpponent)
+{
+ s32 rematchIdx = GetRematchIdx(vsSeekerData, trainerBattleOpponent);
+
+ if (rematchIdx == -1)
+ return FALSE;
+ if (rematchIdx >= 0 && rematchIdx < ARRAY_COUNT(sVsSeekerData))
+ {
+ if (IsThisTrainerRematchable(gUnknown_20370D2))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static bool8 HasRematchTrainerAlreadyBeenFought(const VsSeekerData *vsSeekerData, u16 trainerBattleOpponent)
+{
+ s32 rematchIdx = GetRematchIdx(vsSeekerData, trainerBattleOpponent);
+
+ if (rematchIdx == -1)
+ return FALSE;
+ if (!HasTrainerAlreadyBeenFought(vsSeekerData[rematchIdx].trainerIdxs[0]))
+ return FALSE;
+ return TRUE;
+}
+
+void sub_810CDE8(void)
+{
+ gSaveBlock1Ptr->trainerRematches[gUnknown_20370D2] = 0;
+ sub_80803FC();
+}
+
+static s32 sub_810CE10(const VsSeekerData * a0, u16 a1)
+{
+ u32 r1;
+ s32 r3;
+
+ for (r1 = 0; r1 < ARRAY_COUNT(sVsSeekerData); r1++)
+ {
+ for (r3 = 0; r3 < 6; r3++)
+ {
+ u16 r0;
+ if (a0[r1].trainerIdxs[r3] == 0)
+ break;
+ r0 = a0[r1].trainerIdxs[r3];
+ if (r0 == 0xFFFF)
+ continue;
+ if (r0 == a1)
+ return r1;
+ }
+ }
+
+ return -1;
+}
+
+s32 sub_810CE64(u16 a0)
+{
+ u8 i;
+ u8 j;
+ j = GetNextAvailableRematchTrainer(sVsSeekerData, a0, &i);
+ if (!j)
+ return 0;
+ TryGetRematchTrainerIdGivenGameState(sVsSeekerData[i].trainerIdxs, &j);
+ return sVsSeekerData[i].trainerIdxs[j];
+}
+
+u8 sub_810CEB4(void) // unreferenced, or reference not disassembled
+{
+ return sub_810CED0(sVsSeekerData, gTrainerBattleOpponent_A);
+}
+
+static bool8 sub_810CED0(const VsSeekerData * a0, u16 a1)
+{
+ s32 r1 = sub_810CE10(a0, a1);
+
+ if (r1 == -1)
+ return FALSE;
+ if ((u32)r1 >= ARRAY_COUNT(sVsSeekerData))
+ return FALSE;
+ if (!IsThisTrainerRematchable(gUnknown_20370D2))
+ return FALSE;
+ return TRUE;
+}
+
+bool8 sub_810CF04(u8 a0)
+{
+ struct MapObject *r1 = &gMapObjects[a0];
+
+ if (r1->active && gMapHeader.events->mapObjectCount >= r1->localId && gSprites[r1->spriteId].data[0] == a0)
+ return TRUE;
+ return FALSE;
+}
+
+u8 sub_810CF54()
+{
+ u16 r1 = Random() % 4;
+
+ switch (r1)
+ {
+ case 0:
+ return 7;
+ case 1:
+ return 8;
+ case 2:
+ return 9;
+ case 3:
+ return 10;
+ default:
+ return 8;
+ }
+}
+
+static u8 GetRunningBehaviorFromGraphicsId(u8 graphicsId)
+{
+ switch (graphicsId)
+ {
+ case 0x11:
+ case 0x12:
+ case 0x13:
+ case 0x14:
+ case 0x16:
+ case 0x17:
+ case 0x18:
+ case 0x19:
+ case 0x1a:
+ case 0x1c:
+ case 0x1d:
+ case 0x1e:
+ case 0x25:
+ case 0x27:
+ case 0x28:
+ case 0x29:
+ case 0x2a:
+ case 0x2d:
+ case 0x2e:
+ case 0x36:
+ case 0x38:
+ case 0x3e:
+ return 0x4e;
+ case 0x24:
+ case 0x2b:
+ case 0x2c:
+ return 0x4f;
+ default:
+ return 0x4d;
+ }
+}
+
+static u16 GetTrainerFlagFromScript(const u8 *script)
+/*
+ * The trainer flag is a little-endian short located +2 from
+ * the script pointer, assuming the trainerbattle command is
+ * first in the script. Because scripts are unaligned, and
+ * because the ARM processor requires shorts to be 16-bit
+ * aligned, this function needs to perform explicit bitwise
+ * operations to get the correct flag.
+ *
+ * 5c XX YY ZZ ...
+ * -- --
+ */
+{
+ u16 trainerFlag;
+
+ script += 2;
+ trainerFlag = script[0];
+ trainerFlag |= script[1] << 8;
+ return trainerFlag;
+}
+
+static s32 GetRematchIdx(const VsSeekerData * vsSeekerData, u16 trainerFlagIdx)
+{
+ u32 i;
+
+ for (i = 0; i < ARRAY_COUNT(sVsSeekerData); i++)
+ {
+ if (vsSeekerData[i].trainerIdxs[0] == trainerFlagIdx)
+ return i;
+ }
+
+ return -1;
+}
+
+static bool32 IsThisTrainerRematchable(u32 a0)
+{
+ if (!gSaveBlock1Ptr->trainerRematches[a0])
+ return FALSE;
+ return TRUE;
+}
+
+void sub_810D0D0(void)
+{
+ u8 i;
+
+ for (i = 0; i < 100; i++)
+ gSaveBlock1Ptr->trainerRematches[i] = 0;
+}
+
+static bool8 IsTrainerVisibleOnScreen(struct VsSeekerTrainerInfo * trainerInfo)
+{
+ s16 x;
+ s16 y;
+
+ PlayerGetDestCoords(&x, &y);
+ x -= 7;
+ y -= 7;
+
+ if ( x - 7 <= trainerInfo->xCoord
+ && x + 7 >= trainerInfo->xCoord
+ && y - 5 <= trainerInfo->yCoord
+ && y + 5 >= trainerInfo->yCoord
+ && sub_810CF04(trainerInfo->fieldObjectId) == 1)
+ return TRUE;
+ return FALSE;
+}
+
+static u8 GetNextAvailableRematchTrainer(const VsSeekerData * vsSeekerData, u16 trainerFlagNo, u8 * idxPtr)
+{
+ u32 i;
+ s32 j;
+
+ for (i = 0; i < ARRAY_COUNT(sVsSeekerData); i++)
+ {
+ if (vsSeekerData[i].trainerIdxs[0] == trainerFlagNo)
+ {
+ *idxPtr = i;
+ for (j = 1; j < 6; j++)
+ {
+ if (vsSeekerData[i].trainerIdxs[j] == 0)
+ return j - 1;
+ if (vsSeekerData[i].trainerIdxs[j] == 0xffff)
+ continue;
+ if (HasTrainerAlreadyBeenFought(vsSeekerData[i].trainerIdxs[j]))
+ continue;
+ return j;
+ }
+ return j - 1;
+ }
+ }
+
+ *idxPtr = 0;
+ return 0;
+}
+
+static u8 GetRematchableTrainerLocalId(void)
+{
+ u8 idx;
+ u8 i;
+
+ for (i = 0; sVsSeeker->trainerInfo[i].localId != 0xFF; i++)
+ {
+ if (IsTrainerVisibleOnScreen(&sVsSeeker->trainerInfo[i]) == 1)
+ {
+ if (HasTrainerAlreadyBeenFought(sVsSeeker->trainerInfo[i].trainerIdx) != 1 || GetNextAvailableRematchTrainer(sVsSeekerData, sVsSeeker->trainerInfo[i].trainerIdx, &idx))
+ return sVsSeeker->trainerInfo[i].localId;
+ }
+ }
+
+ return 0xFF;
+}
+
+static void StartTrainerObjectMovementScript(struct VsSeekerTrainerInfo * trainerInfo, const u8 * script)
+{
+ npc_sync_anim_pause_bits(&gMapObjects[trainerInfo->fieldObjectId]);
+ ScriptMovement_StartObjectMovementScript(trainerInfo->localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, script);
+}
+
+static u8 GetCurVsSeekerResponse(s32 a0, u16 a1)
+{
+ s32 i;
+ s32 j;
+
+ for (i = 0; i < a0; i++)
+ {
+ if (IsTrainerVisibleOnScreen(&sVsSeeker->trainerInfo[i]) == 1 && sVsSeeker->trainerInfo[i].trainerIdx == a1)
+ {
+ for (j = 0; j < sVsSeeker->numRematchableTrainers; j++)
+ {
+ if (sVsSeeker->trainerIdxArray[j] == sVsSeeker->trainerInfo[i].trainerIdx)
+ return 2;
+ }
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static void StartAllRespondantIdleMovements(void)
+{
+ u8 dummy = 0;
+ s32 i;
+ s32 j;
+
+ for (i = 0; i < sVsSeeker->numRematchableTrainers; i++)
+ {
+ for (j = 0; sVsSeeker->trainerInfo[j].localId != 0xFF; j++)
+ {
+ if (sVsSeeker->trainerInfo[j].trainerIdx == sVsSeeker->trainerIdxArray[i])
+ {
+ struct MapObject *r4 = &gMapObjects[sVsSeeker->trainerInfo[j].fieldObjectId];
+
+ if (sub_810CF04(sVsSeeker->trainerInfo[j].fieldObjectId) == 1)
+ npc_set_running_behaviour_etc(r4, sVsSeeker->runningBehaviourEtcArray[i]);
+ sub_805FE7C(r4, sVsSeeker->runningBehaviourEtcArray[i]);
+ gSaveBlock1Ptr->trainerRematches[sVsSeeker->trainerInfo[j].localId] = GetNextAvailableRematchTrainer(sVsSeekerData, sVsSeeker->trainerInfo[j].trainerIdx, &dummy);
+ }
+ }
+ }
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 5ee29a4f6..5681f9f26 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -1448,8 +1448,7 @@ gUnknown_203AD40: @ 203AD40
gUnknown_203AD58: @ 203AD58
.space 0x60
-gUnknown_203ADB8: @ 203ADB8
- .space 0x4
+ .include "src/vs_seeker.o"
gUnknown_203ADBC: @ 203ADBC
.space 0x4