summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-10-06 23:07:15 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2018-10-06 23:07:15 -0400
commitea0d662b645afc4ece62d6e5643e938e8909f14f (patch)
tree2e0bbb15e82afee1e6edb4bb870ce11601742302
parentb09d7508d0064ec1d2fe490923d5acc8b272ed27 (diff)
sub_810CB90
-rw-r--r--asm/vs_seeker.s131
-rw-r--r--src/vs_seeker.c42
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;
+ }
+ }
+ }
+}