diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-11-08 08:53:27 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-08 08:53:27 -0600 |
commit | be4624024c16293356c3e10f61ea301d5c86d9ed (patch) | |
tree | a4ae4b6b5a0e28a7ce8866ff0aabef5f9118535a | |
parent | c0a9d620919bd6403772c4e5a236d47cd40ae861 (diff) | |
parent | aa6e1a91fc89d01ad65eb532d6832767c936807a (diff) |
Merge pull request #17 from PikalaxALT/vs_seeker
Vs seeker
-rw-r--r-- | asm/item_use.s | 4 | ||||
-rw-r--r-- | asm/macros/movement.inc | 4 | ||||
-rw-r--r-- | asm/vs_seeker.s | 1767 | ||||
-rw-r--r-- | data/data_83FECCC.s | 19 | ||||
-rw-r--r-- | include/battle_setup.h | 1 | ||||
-rw-r--r-- | include/constants/flags.h | 2 | ||||
-rw-r--r-- | include/constants/movement_commands.h | 117 | ||||
-rw-r--r-- | include/event_scripts.h | 5 | ||||
-rw-r--r-- | include/field_effect.h | 4 | ||||
-rw-r--r-- | include/field_map_obj.h | 3 | ||||
-rw-r--r-- | include/field_specials.h | 1 | ||||
-rw-r--r-- | include/item_menu.h | 8 | ||||
-rw-r--r-- | include/item_use.h | 9 | ||||
-rw-r--r-- | include/map_obj_lock.h | 1 | ||||
-rw-r--r-- | include/new_menu_helpers.h | 4 | ||||
-rw-r--r-- | include/unk_810c3a4.h | 7 | ||||
-rw-r--r-- | include/vs_seeker.h | 14 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/menews_jisan.c | 4 | ||||
-rw-r--r-- | src/vs_seeker.c | 1379 | ||||
-rw-r--r-- | sym_ewram.txt | 3 |
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 |