diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-10-06 23:07:15 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-10-06 23:07:15 -0400 |
commit | ea0d662b645afc4ece62d6e5643e938e8909f14f (patch) | |
tree | 2e0bbb15e82afee1e6edb4bb870ce11601742302 | |
parent | b09d7508d0064ec1d2fe490923d5acc8b272ed27 (diff) |
sub_810CB90
-rw-r--r-- | asm/vs_seeker.s | 131 | ||||
-rw-r--r-- | src/vs_seeker.c | 42 |
2 files changed, 39 insertions, 134 deletions
diff --git a/asm/vs_seeker.s b/asm/vs_seeker.s index c112cb841..5a94c3f11 100644 --- a/asm/vs_seeker.s +++ b/asm/vs_seeker.s @@ -5,137 +5,6 @@ .text - 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 @ =gUnknown_2036E38 - 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 gUnknown_2036E38 -_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} diff --git a/src/vs_seeker.c b/src/vs_seeker.c index eace914f4..4370b3555 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -14,6 +14,7 @@ #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" @@ -26,6 +27,7 @@ struct UnkStruct_845318C }; extern struct MapObject gUnknown_2036E38[MAP_OBJECTS_COUNT]; +extern u8 gUnknown_3005074; // static declarations EWRAM_DATA struct VsSeekerStruct *gUnknown_203ADB8; @@ -36,15 +38,18 @@ void sub_810C8EC(u8 taskId); void sub_810D304(void); bool8 sub_810C96C(void); void sub_810C604(void); -u8 sub_810C9A8(const void *); +u8 sub_810C9A8(const struct UnkStruct_845318C *); bool8 sub_810D0FC(struct VsSeekerSubstruct *); u16 sub_810D074(const u8 *); u8 sub_810D1CC(void); void sub_810D24C(struct VsSeekerSubstruct *, const u8 *); +int sub_810CE10(const struct UnkStruct_845318C *, u16); bool8 sub_810D164(const void *, u16, u8 *); u8 sub_810D280(int, u16); u8 sub_810CF90(u8); void sub_810C640(void); +void sub_810CF54(struct MapObjectTemplate *); +void sub_805FE7C(struct MapObject *, u8); // rodata extern const struct UnkStruct_845318C gUnknown_845318C[]; @@ -52,6 +57,7 @@ extern const u8 gUnknown_8453F5C[]; extern const u8 gUnknown_8453F60[]; extern const u8 gUnknown_8453F62[]; extern const u8 gUnknown_8453F64[]; +extern const u8 gUnknown_8453F67[]; // text void sub_810C670(u8 taskId) @@ -180,7 +186,7 @@ u8 sub_810C96C(void) // Nonmatching due to register roulette #ifdef NONMATCHING -u8 sub_810C9A8(const void * a0) +u8 sub_810C9A8(const struct UnkStruct_845318C * a0) { u16 r8 = 0; u8 sp0 = 0; @@ -245,7 +251,7 @@ u8 sub_810C9A8(const void * a0) } #else NAKED -u8 sub_810C9A8(const void * a0) +u8 sub_810C9A8(const struct UnkStruct_845318C * a0) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r10\n" @@ -479,3 +485,33 @@ u8 sub_810C9A8(const void * a0) "\tbx r1"); } #endif + +void sub_810CB90(void) +{ + u8 sp0 = 0; + struct MapObjectTemplate *r4 = gSaveBlock1Ptr->mapObjectTemplates; + int r9 = sub_810CE10(gUnknown_845318C, gTrainerBattleOpponent_A); + + if (r9 != -1) + { + int r8; + + for (r8 = 0; r8 < gMapHeader.events->mapObjectCount; r8++) + { + if ((r4[r8].unkC == 1 || r4[r8].unkC == 3) && r9 == sub_810CE10(gUnknown_845318C, sub_810D074(r4[r8].script))) + { + struct MapObject *r4_2; + + TryGetFieldObjectIdByLocalIdAndMap(r4[r8].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &sp0); + r4_2 = &gUnknown_2036E38[sp0]; + sub_810CF54(&r4[r8]); + 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; + } + } + } +} |