summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/secret_base.s601
-rw-r--r--include/field_specials.h1
-rw-r--r--include/global.h2
-rw-r--r--src/field/secret_base.c195
4 files changed, 197 insertions, 602 deletions
diff --git a/asm/secret_base.s b/asm/secret_base.s
index a7596f85b..9033e0765 100644
--- a/asm/secret_base.s
+++ b/asm/secret_base.s
@@ -6,607 +6,6 @@
.section .text_80BC1D0
- thumb_func_start unref_sub_80BCD7C
-unref_sub_80BCD7C: @ 80BCD7C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- movs r5, 0
- ldr r7, _080BCDFC @ =gSaveBlock1
- lsls r1, r0, 2
- adds r1, r0
- lsls r6, r1, 5
- ldr r0, _080BCE00 @ =0x00001a3c
- adds r0, r7
- mov r10, r0
- ldr r1, _080BCE04 @ =0x00001a54
- adds r1, r7
- mov r9, r1
- ldr r2, _080BCE08 @ =0x00001a84
- adds r2, r7
- mov r8, r2
- ldr r0, _080BCE0C @ =0x00000115
- mov r12, r0
-_080BCDAA:
- lsls r4, r5, 2
- adds r0, r4, r6
- add r0, r10
- adds r3, r5, 0x1
- str r3, [r0]
- lsls r0, r5, 3
- adds r0, r6
- add r0, r9
- strh r3, [r0]
- lsls r1, r5, 1
- adds r1, r6
- mov r2, r8
- adds r0, r1, r2
- mov r2, r12
- strh r2, [r0]
- ldr r2, _080BCE10 @ =0x00001a90
- adds r0, r7, r2
- adds r1, r0
- strh r3, [r1]
- adds r2, r5, r6
- ldr r1, _080BCE14 @ =0x00001a9c
- adds r0, r7, r1
- adds r0, r2, r0
- adds r1, r5, 0x5
- strb r1, [r0]
- ldr r1, _080BCE18 @ =0x00001aa2
- adds r0, r7, r1
- adds r2, r0
- adds r4, r5
- strb r4, [r2]
- lsls r3, 16
- lsrs r5, r3, 16
- cmp r5, 0
- beq _080BCDAA
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080BCDFC: .4byte gSaveBlock1
-_080BCE00: .4byte 0x00001a3c
-_080BCE04: .4byte 0x00001a54
-_080BCE08: .4byte 0x00001a84
-_080BCE0C: .4byte 0x00000115
-_080BCE10: .4byte 0x00001a90
-_080BCE14: .4byte 0x00001a9c
-_080BCE18: .4byte 0x00001aa2
- thumb_func_end unref_sub_80BCD7C
-
- thumb_func_start sub_80BCE1C
-sub_80BCE1C: @ 80BCE1C
- push {r4,lr}
- ldr r0, _080BCE44 @ =0x00004054
- bl VarGet
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0x1
- bl sub_810FB10
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 5
- ldr r1, _080BCE48 @ =gSaveBlock1 + 0x1A08
- adds r0, r1
- bl CreateSecretBaseEnemyParty
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080BCE44: .4byte 0x00004054
-_080BCE48: .4byte gSaveBlock1 + 0x1A08
- thumb_func_end sub_80BCE1C
-
- thumb_func_start sub_80BCE4C
-sub_80BCE4C: @ 80BCE4C
- push {lr}
- ldr r0, _080BCE80 @ =0x00004054
- bl VarGet
- ldr r2, _080BCE84 @ =gSaveBlock1
- lsls r0, 16
- lsrs r0, 16
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 5
- adds r1, r2
- ldr r0, _080BCE88 @ =gScriptResult
- ldrb r0, [r0]
- ldr r2, _080BCE8C @ =0x00001a09
- adds r1, r2
- movs r2, 0x1
- ands r2, r0
- lsls r2, 5
- ldrb r3, [r1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080BCE80: .4byte 0x00004054
-_080BCE84: .4byte gSaveBlock1
-_080BCE88: .4byte gScriptResult
-_080BCE8C: .4byte 0x00001a09
- thumb_func_end sub_80BCE4C
-
- thumb_func_start sub_80BCE90
-sub_80BCE90: @ 80BCE90
- push {r4-r7,lr}
- ldr r0, _080BCF04 @ =0x00004054
- bl VarGet
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, _080BCF08 @ =0x000008c2
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _080BCED4
- movs r3, 0
- ldr r7, _080BCF0C @ =gSaveBlock1
- ldr r4, _080BCF10 @ =0x00001a09
- movs r6, 0x21
- negs r6, r6
-_080BCEB2:
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 5
- adds r1, r7
- adds r1, r4
- ldrb r2, [r1]
- adds r0, r6, 0
- ands r0, r2
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x13
- bls _080BCEB2
- ldr r0, _080BCF08 @ =0x000008c2
- bl FlagSet
-_080BCED4:
- ldr r4, _080BCF14 @ =gSpecialVar_0x8004
- lsls r0, r5, 24
- lsrs r0, 24
- bl sub_80BCCA4
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
- ldr r2, _080BCF18 @ =gScriptResult
- ldr r1, _080BCF0C @ =gSaveBlock1
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 5
- adds r0, r1
- ldr r1, _080BCF10 @ =0x00001a09
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r0, 31
- strh r0, [r2]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080BCF04: .4byte 0x00004054
-_080BCF08: .4byte 0x000008c2
-_080BCF0C: .4byte gSaveBlock1
-_080BCF10: .4byte 0x00001a09
-_080BCF14: .4byte gSpecialVar_0x8004
-_080BCF18: .4byte gScriptResult
- thumb_func_end sub_80BCE90
-
- thumb_func_start sub_80BCF1C
-sub_80BCF1C: @ 80BCF1C
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080BCF40 @ =gTasks + 0x8
- adds r4, r1, r0
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _080BCF54
- cmp r0, 0x1
- bgt _080BCF44
- cmp r0, 0
- beq _080BCF4A
- b _080BD02C
- .align 2, 0
-_080BCF40: .4byte gTasks + 0x8
-_080BCF44:
- cmp r0, 0x2
- beq _080BD01C
- b _080BD02C
-_080BCF4A:
- adds r0, r4, 0x4
- adds r1, r4, 0x6
- bl PlayerGetDestCoords
- b _080BD028
-_080BCF54:
- mov r5, sp
- adds r5, 0x2
- mov r0, sp
- adds r1, r5, 0
- bl PlayerGetDestCoords
- mov r0, sp
- ldrh r2, [r0]
- movs r3, 0
- ldrsh r1, [r0, r3]
- movs r3, 0x4
- ldrsh r0, [r4, r3]
- cmp r1, r0
- bne _080BCF7C
- movs r0, 0
- ldrsh r1, [r5, r0]
- movs r3, 0x6
- ldrsh r0, [r4, r3]
- cmp r1, r0
- beq _080BD02C
-_080BCF7C:
- strh r2, [r4, 0x4]
- ldrh r0, [r5]
- strh r0, [r4, 0x6]
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl sub_8057350
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080BCFA8
- bl DoYellowCave4Sparkle
- b _080BD02C
-_080BCFA8:
- adds r0, r4, 0
- bl sub_8057314
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080BCFD8
- mov r0, sp
- movs r3, 0
- ldrsh r0, [r0, r3]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileIdAt
- lsls r0, 16
- asrs r0, 16
- mov r1, sp
- movs r3, 0
- ldrsh r1, [r1, r3]
- movs r3, 0
- ldrsh r2, [r5, r3]
- bl sub_80C68A4
- b _080BD02C
-_080BCFD8:
- adds r0, r4, 0
- bl sub_8057328
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080BCFF6
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl sub_80C6A54
- b _080BD02C
-_080BCFF6:
- adds r0, r4, 0
- bl sub_805733C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080BD02C
- mov r0, sp
- movs r3, 0
- ldrsh r0, [r0, r3]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileIdAt
- lsls r0, 16
- asrs r0, 16
- bl DoDecorationSoundEffect
- b _080BD02C
-_080BD01C:
- ldrb r0, [r4, 0x8]
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _080BD02C
-_080BD028:
- movs r0, 0x1
- strh r0, [r4, 0x2]
-_080BD02C:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80BCF1C
-
- thumb_func_start sub_80BD034
-sub_80BD034: @ 80BD034
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080BD064 @ =gSaveBlock1
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 5
- adds r4, r2
- ldr r2, _080BD068 @ =0x00001a08
- adds r0, r4, r2
- movs r2, 0xA0
- bl memcpy
- ldr r0, _080BD06C @ =0x00001a09
- adds r4, r0
- ldrb r1, [r4]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080BD064: .4byte gSaveBlock1
-_080BD068: .4byte 0x00001a08
-_080BD06C: .4byte 0x00001a09
- thumb_func_end sub_80BD034
-
- thumb_func_start sub_80BD070
-sub_80BD070: @ 80BD070
- push {r4,lr}
- movs r2, 0
- adds r4, r0, 0
- adds r4, 0x9
- adds r3, r1, 0
- adds r3, 0x9
-_080BD07C:
- adds r0, r4, r2
- adds r1, r3, r2
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- beq _080BD08C
- movs r0, 0
- b _080BD098
-_080BD08C:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _080BD07C
- movs r0, 0x1
-_080BD098:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80BD070
-
- thumb_func_start sub_80BD0A0
-sub_80BD0A0: @ 80BD0A0
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r5, r1, 0
- movs r3, 0
- ldrb r0, [r6, 0x2]
- cmp r0, 0xFF
- bne _080BD0B4
- ldrb r0, [r5, 0x2]
- cmp r0, 0xFF
- beq _080BD0E2
-_080BD0B4:
- adds r2, r6, 0x2
- adds r0, r2, r3
- adds r4, r5, 0x2
- adds r1, r4, r3
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- beq _080BD0C8
- movs r0, 0
- b _080BD0E4
-_080BD0C8:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x6
- bhi _080BD0E2
- adds r0, r2, r3
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _080BD0B4
- adds r0, r4, r3
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _080BD0B4
-_080BD0E2:
- movs r0, 0x1
-_080BD0E4:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80BD0A0
-
- thumb_func_start sub_80BD0EC
-sub_80BD0EC: @ 80BD0EC
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r2, [r4, 0x1]
- movs r0, 0x10
- adds r1, r0, 0
- ands r1, r2
- ldrb r2, [r5, 0x1]
- ands r0, r2
- cmp r1, r0
- bne _080BD122
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_80BD070
- lsls r0, 24
- cmp r0, 0
- beq _080BD122
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_80BD0A0
- lsls r0, 24
- cmp r0, 0
- beq _080BD122
- movs r0, 0x1
- b _080BD124
-_080BD122:
- movs r0, 0
-_080BD124:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80BD0EC
-
- thumb_func_start sub_80BD12C
-sub_80BD12C: @ 80BD12C
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- movs r1, 0
- ldr r4, _080BD150 @ =gSaveBlock1
- ldr r3, _080BD154 @ =0x00001a08
-_080BD138:
- lsls r0, r1, 16
- asrs r1, r0, 16
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 5
- adds r0, r4
- adds r0, r3
- ldrb r0, [r0]
- cmp r0, r2
- bne _080BD158
- adds r0, r1, 0
- b _080BD168
- .align 2, 0
-_080BD150: .4byte gSaveBlock1
-_080BD154: .4byte 0x00001a08
-_080BD158:
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _080BD138
- movs r0, 0x1
- negs r0, r0
-_080BD168:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80BD12C
-
- thumb_func_start sub_80BD170
-sub_80BD170: @ 80BD170
- push {r4,lr}
- movs r2, 0x1
- ldr r4, _080BD194 @ =gSaveBlock1
- ldr r3, _080BD198 @ =0x00001a08
-_080BD178:
- lsls r0, r2, 16
- asrs r1, r0, 16
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 5
- adds r0, r4
- adds r0, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _080BD19C
- lsls r0, r2, 24
- lsrs r0, 24
- b _080BD1AA
- .align 2, 0
-_080BD194: .4byte gSaveBlock1
-_080BD198: .4byte 0x00001a08
-_080BD19C:
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _080BD178
- movs r0, 0
-_080BD1AA:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80BD170
-
- thumb_func_start sub_80BD1B0
-sub_80BD1B0: @ 80BD1B0
- push {r4,lr}
- movs r3, 0x1
- ldr r4, _080BD1DC @ =gSaveBlock1
-_080BD1B6:
- lsls r2, r3, 16
- asrs r1, r2, 16
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 5
- adds r0, r4
- ldr r1, _080BD1E0 @ =0x00001a09
- adds r0, r1
- ldrb r1, [r0]
- lsrs r0, r1, 6
- cmp r0, 0
- bne _080BD1E4
- lsls r0, r1, 28
- cmp r0, 0
- bne _080BD1E4
- lsls r0, r3, 24
- lsrs r0, 24
- b _080BD1F4
- .align 2, 0
-_080BD1DC: .4byte gSaveBlock1
-_080BD1E0: .4byte 0x00001a09
-_080BD1E4:
- movs r1, 0x80
- lsls r1, 9
- adds r0, r2, r1
- lsrs r3, r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _080BD1B6
- movs r0, 0
-_080BD1F4:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80BD1B0
-
thumb_func_start sub_80BD1FC
sub_80BD1FC: @ 80BD1FC
push {r4,r5,lr}
diff --git a/include/field_specials.h b/include/field_specials.h
index d61aa3b20..52325879c 100644
--- a/include/field_specials.h
+++ b/include/field_specials.h
@@ -25,5 +25,6 @@ void ScriptShowElevatorMenu(void);
void SetShoalItemFlag(u16);
u8 GetLeadMonIndex(void);
void ResetFanClub(void);
+u8 sub_810FB10(u8 a0);
#endif // GUARD_FIELD_SPECIALS_H
diff --git a/include/global.h b/include/global.h
index 51c599a73..e6a073aa5 100644
--- a/include/global.h
+++ b/include/global.h
@@ -136,7 +136,7 @@ struct SecretBaseRecord
/*0x1A09*/ u8 sbr_field_1_5:1;
/*0x1A09*/ u8 sbr_field_1_6:2;
/*0x1A0A*/ u8 sbr_field_2[7]; // 0xFF bytes?
- /*0x1A12*/ u8 trainerId[4]; // byte 0 is used for determining trainer class
+ /*0x1A11*/ u8 trainerId[4]; // byte 0 is used for determining trainer class
/*0x1A16*/ u16 sbr_field_e;
/*0x1A18*/ u8 sbr_field_10;
/*0x1A19*/ u8 sbr_field_11;
diff --git a/src/field/secret_base.c b/src/field/secret_base.c
index d60938d1b..339b8a104 100644
--- a/src/field/secret_base.c
+++ b/src/field/secret_base.c
@@ -3,8 +3,10 @@
#include "decoration.h"
#include "event_data.h"
#include "field_camera.h"
+#include "field_effect.h"
#include "field_fadetransition.h"
#include "field_player_avatar.h"
+#include "field_specials.h"
#include "field_weather.h"
#include "fieldmap.h"
#include "main.h"
@@ -18,12 +20,18 @@
#include "overworld.h"
#include "script.h"
#include "sound.h"
+#include "species.h"
#include "string_util.h"
#include "strings.h"
#include "task.h"
#include "text.h"
#include "vars.h"
+
+extern void DoDecorationSoundEffect(s16 metatileId);
+extern void sub_80C6A54(s16 x, s16 y);
+extern void sub_80C68A4(s16 metatileId, s16 x, s16 y);
+extern void DoYellowCave4Sparkle(void);
extern void sub_80BCBF8(u8 taskId);
extern void sub_80BCC54(u8 taskId);
extern void sub_80BC824(u8 taskId);
@@ -1731,3 +1739,190 @@ u8 *sub_80BCCE8(void)
return UnknownString_81A2B2A;
}
}
+
+// Debugging function to test secret base battles.
+void unref_sub_80BCD7C(u8 secretBaseIndex)
+{
+ u16 i;
+ for (i = 0; i == 0; i++)
+ {
+ gSaveBlock1.secretBases[secretBaseIndex].partyPersonality[i] = i + 1;
+ gSaveBlock1.secretBases[secretBaseIndex].partyMoves[i * 4] = i + 1;
+ gSaveBlock1.secretBases[secretBaseIndex].partySpecies[i] = SPECIES_TREECKO;
+ gSaveBlock1.secretBases[secretBaseIndex].partyHeldItems[i] = i + 1;
+ gSaveBlock1.secretBases[secretBaseIndex].partyLevels[i] = i + 5;
+ gSaveBlock1.secretBases[secretBaseIndex].partyEVs[i] = i * 5;
+ }
+}
+
+void sub_80BCE1C(void)
+{
+ u16 curBaseIndex = VarGet(VAR_0x4054);
+ sub_810FB10(1);
+
+ CreateSecretBaseEnemyParty(&gSaveBlock1.secretBases[curBaseIndex]);
+}
+
+void sub_80BCE4C()
+{
+ gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_1_5 = gScriptResult;
+}
+
+void sub_80BCE90()
+{
+ u16 curBaseIndex = VarGet(VAR_0x4054);
+
+ if (!FlagGet(0x8C2))
+ {
+ u8 i;
+
+ for (i = 0; i < 20; i++)
+ {
+ gSaveBlock1.secretBases[i].sbr_field_1_5 = 0;
+ }
+
+ FlagSet(0x8C2);
+ }
+
+ gSpecialVar_0x8004 = sub_80BCCA4(curBaseIndex);
+ gScriptResult = gSaveBlock1.secretBases[curBaseIndex].sbr_field_1_5;
+}
+
+void sub_80BCF1C(u8 taskId)
+{
+ s16 x, y;
+ u32 behavior;
+ s16 *taskData = gTasks[taskId].data;
+
+ switch (taskData[1])
+ {
+ case 0:
+ PlayerGetDestCoords(&taskData[2], &taskData[3]);
+ taskData[1] = 1;
+ break;
+ case 1:
+ PlayerGetDestCoords(&x, &y);
+ if (x != taskData[2] || y != taskData[3])
+ {
+ taskData[2] = x;
+ taskData[3] = y;
+
+ behavior = MapGridGetMetatileBehaviorAt(x, y);
+ if (sub_8057350(behavior) == TRUE)
+ {
+ DoYellowCave4Sparkle();
+ }
+ else if (sub_8057314(behavior) == TRUE)
+ {
+ sub_80C68A4(MapGridGetMetatileIdAt(x, y), x, y);
+ }
+ else if (sub_8057328(behavior) == TRUE)
+ {
+ sub_80C6A54(x, y);
+ }
+ else if (sub_805733C(behavior) == TRUE)
+ {
+ DoDecorationSoundEffect(MapGridGetMetatileIdAt(x, y));
+ }
+ }
+ break;
+ case 2:
+ if (!FieldEffectActiveListContains(taskData[4]))
+ {
+ taskData[1] = 1;
+ }
+ break;
+ }
+}
+
+void sub_80BD034(u8 i, struct SecretBaseRecord *secretBase)
+{
+ gSaveBlock1.secretBases[i] = *secretBase;
+ gSaveBlock1.secretBases[i].sbr_field_1_6 = 2;
+}
+
+bool8 sub_80BD070(struct SecretBaseRecord *baseA, struct SecretBaseRecord *baseB)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (baseA->trainerId[i] != baseB->trainerId[i])
+ {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+bool8 sub_80BD0A0(struct SecretBaseRecord *baseA, struct SecretBaseRecord *baseB)
+{
+ u8 i;
+
+ for (i = 0; i < 7 && (baseA->sbr_field_2[i] != 0xFF || baseB->sbr_field_2[i] != 0xFF); i++)
+ {
+ if (baseA->sbr_field_2[i] != baseB->sbr_field_2[i])
+ {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+bool8 sub_80BD0EC(struct SecretBaseRecord *baseA, struct SecretBaseRecord *baseB)
+{
+ if (baseA->gender == baseB->gender && sub_80BD070(baseA, baseB) && sub_80BD0A0(baseA, baseB))
+ {
+ return TRUE;
+ }
+
+
+ return FALSE;
+}
+
+s16 sub_80BD12C(u8 secretBaseId)
+{
+ s16 i;
+
+ for (i = 0; i < 20; i++)
+ {
+ if (gSaveBlock1.secretBases[i].secretBaseId == secretBaseId)
+ {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+u8 sub_80BD170(void)
+{
+ s16 i;
+
+ for (i = 1; i < 20; i++)
+ {
+ if (gSaveBlock1.secretBases[i].secretBaseId == 0)
+ {
+ return i;
+ }
+ }
+
+ return 0;
+}
+
+u8 sub_80BD1B0(void)
+{
+ s16 i;
+
+ for (i = 1; i < 20; i++)
+ {
+ if (gSaveBlock1.secretBases[i].sbr_field_1_6 == 0 && gSaveBlock1.secretBases[i].sbr_field_1_0 == 0)
+ {
+ return i;
+ }
+ }
+
+ return 0;
+}