diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-10-07 20:37:08 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-10-07 20:37:08 -0400 |
commit | ce33bbe84fedf7fd10552bd920ae18ed3c9775f3 (patch) | |
tree | 7567e05a602d404c22c4e805d6173c3317843beb | |
parent | ea0d662b645afc4ece62d6e5643e938e8909f14f (diff) |
through sub_810CDE8
-rw-r--r-- | asm/vs_seeker.s | 204 | ||||
-rw-r--r-- | include/battle_setup.h | 1 | ||||
-rw-r--r-- | src/vs_seeker.c | 93 |
3 files changed, 91 insertions, 207 deletions
diff --git a/asm/vs_seeker.s b/asm/vs_seeker.s index 5a94c3f11..108e75c37 100644 --- a/asm/vs_seeker.s +++ b/asm/vs_seeker.s @@ -5,210 +5,6 @@ .text - 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} 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/src/vs_seeker.c b/src/vs_seeker.c index 4370b3555..d6b0b14bb 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -23,9 +23,11 @@ // static types struct UnkStruct_845318C { - // TODO: populate + u16 unk_0; + u8 filler_2[14]; }; +extern u16 gUnknown_20370D2; extern struct MapObject gUnknown_2036E38[MAP_OBJECTS_COUNT]; extern u8 gUnknown_3005074; @@ -35,10 +37,15 @@ void sub_810C730(u8 taskId); void sub_810C760(u8 taskId); void sub_810C808(void); void sub_810C8EC(u8 taskId); -void sub_810D304(void); bool8 sub_810C96C(void); -void sub_810C604(void); u8 sub_810C9A8(const struct UnkStruct_845318C *); +u8 sub_810CD14(const u16 *, u8); +u8 sub_810CD80(const struct UnkStruct_845318C *, u16); +bool32 sub_810D0A8(u16); +u8 sub_810CDB4(const struct UnkStruct_845318C *, u16); +int sub_810D084(const struct UnkStruct_845318C *, u16); +void sub_810D304(void); +void sub_810C604(void); bool8 sub_810D0FC(struct VsSeekerSubstruct *); u16 sub_810D074(const u8 *); u8 sub_810D1CC(void); @@ -515,3 +522,83 @@ void sub_810CB90(void) } } } + +void sub_810CCA0(const u16 * a0, u8 * a1) +{ + switch (*a1) + { + case 0: + break; + case 1: + if (!FlagGet(0x292)) + *a1 = sub_810CD14(a0, *a1); + break; + case 2: + if (!FlagGet(0x896)) + *a1 = sub_810CD14(a0, *a1); + break; + case 3: + if (!FlagGet(0x897)) + *a1 = sub_810CD14(a0, *a1); + break; + case 4: + if (!FlagGet(0x82c)) + *a1 = sub_810CD14(a0, *a1); + break; + case 5: + if (!FlagGet(0x844)) + *a1 = sub_810CD14(a0, *a1); + break; + } +} + +u8 sub_810CD14(const u16 * a0, u8 a1) +{ + while (--a1 != 0) + { + const u16 *r0 = a0 + a1; + if (*r0 != 0xFFFF) + return a1; + } + return 0; +} + +u8 sub_810CD4C(void) +{ + if (sub_810CD80(gUnknown_845318C, gTrainerBattleOpponent_A)) + { + return 1; + } + return sub_810CDB4(gUnknown_845318C, gTrainerBattleOpponent_A); +} + +bool8 sub_810CD80(const struct UnkStruct_845318C *a0, u16 a1) +{ + int r1 = sub_810D084(a0, a1); + + if (r1 == -1) + return FALSE; + if (r1 >= 0 && r1 < 0xdd) + { + if (sub_810D0A8(gUnknown_20370D2)) + return TRUE; + } + return FALSE; +} + +bool8 sub_810CDB4(const struct UnkStruct_845318C *a0, u16 a1) +{ + int r1 = sub_810D084(a0, a1); + + if (r1 == -1) + return FALSE; + if (!HasTrainerAlreadyBeenFought(a0[r1].unk_0)) + return FALSE; + return TRUE; +} + +void sub_810CDE8(void) +{ + gSaveBlock1Ptr->trainerRematches[gUnknown_20370D2] = 0; + sub_80803FC(); +} |