summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/secret_base.s601
-rw-r--r--include/decoration.h1
-rw-r--r--include/field_specials.h1
-rw-r--r--include/global.fieldmap.h10
-rw-r--r--include/global.h2
-rw-r--r--include/secret_base.h1
-rw-r--r--src/field/secret_base.c547
7 files changed, 378 insertions, 785 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/decoration.h b/include/decoration.h
index 1b83964d9..70abc29bf 100644
--- a/include/decoration.h
+++ b/include/decoration.h
@@ -293,6 +293,7 @@ extern void sub_8109DAC(u8); // src/trader
extern void ReshowPlayerPC(u8); // src/player_pc
void Task_SecretBasePC_Decoration(u8);
+void Task_SecretBasePC_Decoration(u8 taskId);
void sub_80FE2B4(void);
void Task_DecorationPCProcessMenuInput(u8);
void sub_80FE394(void);
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.fieldmap.h b/include/global.fieldmap.h
index 5c93eb8ab..7a8cc4592 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -111,11 +111,11 @@ struct CoordEvent
struct BgEvent
{
- u16 x, y;
- u8 unk4;
- u8 kind;
- // 0x2 padding for the union beginning.
- union { // carried over from diego's FR/LG work, seems to be the same struct
+ /*0x00*/u16 x;
+ /*0x02*/u16 y;
+ /*0x04*/u8 unk4;
+ /*0x05*/u8 kind;
+ /*0x08*/union { // carried over from diego's FR/LG work, seems to be the same struct
// in gen 3, "kind" (0x3 in BgEvent struct) determines the method to read the union.
u8 *script;
diff --git a/include/global.h b/include/global.h
index 6b0a0cb01..e6a073aa5 100644
--- a/include/global.h
+++ b/include/global.h
@@ -130,7 +130,7 @@ struct UCoords16
struct SecretBaseRecord
{
- /*ID?*/ /*0x1A08*/ u8 sbr_field_0;
+ /*ID?*/ /*0x1A08*/ u8 secretBaseId;
/*0x1A09*/ u8 sbr_field_1_0:4;
/*0x1A09*/ u8 gender:1;
/*0x1A09*/ u8 sbr_field_1_5:1;
diff --git a/include/secret_base.h b/include/secret_base.h
index 0844cff26..0c4ae6694 100644
--- a/include/secret_base.h
+++ b/include/secret_base.h
@@ -9,6 +9,7 @@ void sub_80BC038(struct MapPosition *, struct MapEvents *);
u8 sub_80BC050();
u8 *GetSecretBaseMapName(u8 *);
void sub_80BC300();
+u8 sub_80BCCA4(u8);
const u8 *sub_80BCCE8(void);
void sub_80BCF1C(u8);
void sub_80BD674(void *, u32, u8);
diff --git a/src/field/secret_base.c b/src/field/secret_base.c
index 949fae704..be73f04bf 100644
--- a/src/field/secret_base.c
+++ b/src/field/secret_base.c
@@ -6,8 +6,10 @@
#include "moves.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"
@@ -22,39 +24,37 @@
#include "pokemon.h"
#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"
+
+static u8 sub_80BC948(u8 a);
+
extern u8 gUnknown_0815F399[];
extern u8 gUnknown_0815F49A[];
-extern const u8 UnknownString_81A1BB2[];
-extern const u8 UnknownString_81A1F67[];
-extern const u8 UnknownString_81A2254[];
-extern const u8 UnknownString_81A25C3[];
-extern const u8 UnknownString_81A2925[];
-extern const u8 UnknownString_81A1D74[];
-extern const u8 UnknownString_81A20C9[];
-extern const u8 UnknownString_81A2439[];
-extern const u8 UnknownString_81A2754[];
-extern const u8 UnknownString_81A2B2A[];
+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);
void sub_80BCA84(u8);
-void sub_80BCBF8(u8);
+void sub_80BCBF8(u8 taskId);
void sub_80BCB90(u8);
void sub_80BCBC0(u8);
-void Task_SecretBasePC_Registry(u8);
-void sub_80BC7D8(u8);
-void sub_80BC824(u8);
-void sub_80BCC54(u8);
-u8 sub_80BC948(u8);
-void sub_80BC980(u8);
-void sub_80BC9E4(u8);
-void sub_80BCAEC(u8);
+void Task_SecretBasePC_Registry(u8 taskId);
+void sub_80BC7D8(u8 taskId);
+void sub_80BC824(u8 taskId);
+void sub_80BCC54(u8 taskId);
+void sub_80BC980(u8 taskId);
+void sub_80BC9E4(u8 taskId);
+void sub_80BCAEC(u8 taskId);
u8 sub_80BCCA4(u8);
const struct
@@ -140,13 +140,23 @@ const u8 gUnknown_083D13EC[] = {
extern void *gUnknown_0300485C;
extern u8 gUnknown_081A2E14[];
+extern u8 UnknownString_81A1BB2[];
+extern u8 UnknownString_81A1F67[];
+extern u8 UnknownString_81A2254[];
+extern u8 UnknownString_81A25C3[];
+extern u8 UnknownString_81A2925[];
+extern u8 UnknownString_81A1D74[];
+extern u8 UnknownString_81A20C9[];
+extern u8 UnknownString_81A2439[];
+extern u8 UnknownString_81A2B2A[];
+extern u8 UnknownString_81A2754[];
void sub_80BB4AC(struct SecretBaseRecord *record) // 080bb4ac
{
u16 i;
u16 j;
- record->sbr_field_0 = 0;
+ record->secretBaseId = 0;
for (i=0; i<7; i++)
record->sbr_field_2[i] = 0xff;
for (i=0; i<4; i++)
@@ -196,7 +206,7 @@ void sub_80BB5E4(void) // 80bb5e4
u16 idx;
gScriptResult = 0;
for (idx=0; idx<20; idx++) {
- if (gUnknown_020387DC != gSaveBlock1.secretBases[idx].sbr_field_0)
+ if (gUnknown_020387DC != gSaveBlock1.secretBases[idx].secretBaseId)
continue;
gScriptResult = 1;
VarSet(VAR_0x4054, idx);
@@ -206,7 +216,7 @@ void sub_80BB5E4(void) // 80bb5e4
void sub_80BB63C(void) // 80bb63c
{
- if (gSaveBlock1.secretBases[0].sbr_field_0)
+ if (gSaveBlock1.secretBases[0].secretBaseId)
gScriptResult = 1;
else
gScriptResult = 0;
@@ -299,7 +309,7 @@ void sub_80BB8CC(void)
{
u8 nameLength;
u16 idx;
- gSaveBlock1.secretBases[0].sbr_field_0 = gUnknown_020387DC;
+ gSaveBlock1.secretBases[0].secretBaseId = gUnknown_020387DC;
for (idx=0; idx<4; idx++) {
gSaveBlock1.secretBases[0].trainerId[idx] = gSaveBlock2.playerTrainerId[idx];
}
@@ -318,7 +328,7 @@ void sub_80BB970(struct MapEvents *events)
for (bgevidx=0; bgevidx<events->bgEventCount; bgevidx++) {
if (events->bgEvents[bgevidx].kind == 8) {
for (jdx=0; jdx<20; jdx++) {
- if (gSaveBlock1.secretBases[jdx].sbr_field_0 == events->bgEvents[bgevidx].bgUnion.secretBaseId) {
+ if (gSaveBlock1.secretBases[jdx].secretBaseId == events->bgEvents[bgevidx].bgUnion.secretBaseId) {
tile_id = MapGridGetMetatileIdAt(events->bgEvents[bgevidx].x + 7, events->bgEvents[bgevidx].y + 7);
for (idx=0; idx<7; idx++) {
if (gUnknown_083D1358[idx].unk_083D1358_0 == tile_id) {
@@ -789,7 +799,7 @@ void sub_80BC0F8(void) {
}
void sub_80BC114(void) {
- if (gSaveBlock1.secretBases[0].sbr_field_0 != gUnknown_020387DC)
+ if (gSaveBlock1.secretBases[0].secretBaseId != gUnknown_020387DC)
gScriptResult = 1;
else
gScriptResult = 0;
@@ -799,7 +809,7 @@ u8 sub_80BC14C(u8 sbid)
{
s16 idx;
for (idx=0; idx<20; idx++) {
- if (gSaveBlock1.secretBases[idx].sbr_field_0 == sbid)
+ if (gSaveBlock1.secretBases[idx].secretBaseId == sbid)
return idx;
}
return 0;
@@ -822,7 +832,7 @@ u8 *sub_80BC190(u8 *dest, u8 arg1) { // 80bc190
}
u8 *GetSecretBaseMapName(u8 *dest) {
- gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_0;
+ gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_0x4054)].secretBaseId;
return sub_80BC190(dest, VarGet(VAR_0x4054));
}
@@ -834,10 +844,10 @@ void sub_80BC224(void) {
*var3 = EOS;
}
-u8 sub_80BC268(u8 foo) { // 80bc268
- if (gSaveBlock1.secretBases[foo].sbr_field_1_6)
- return 1;
- return 0;
+bool8 sub_80BC268(u8 i) { // 80bc268
+ if (gSaveBlock1.secretBases[i].sbr_field_1_6)
+ return TRUE;
+ return FALSE;
}
u8 sub_80BC298(struct Pokemon *mon) { // 80bc298
@@ -1047,28 +1057,34 @@ void sub_80BC440(void)
void SecretBasePC_PackUp(void)
{
- IncrementGameStat(20);
+ IncrementGameStat(GAME_STAT_MOVED_SECRET_BASE);
sub_80BC440();
}
void sub_80BC474(void)
{
- u16 i, j;
- s16 metatileId;
+ u16 eventId;
struct MapEvents *mapEvents = gMapHeader.events;
- for (i=0; i<mapEvents->bgEventCount; i++)
+ for (eventId = 0; eventId < mapEvents->bgEventCount; eventId++)
{
- if (mapEvents->bgEvents[i].kind == 8 && gSaveBlock1.secretBases[0].sbr_field_0 == mapEvents->bgEvents[i].bgUnion.secretBaseId)
+ if (mapEvents->bgEvents[eventId].kind == 8
+ && gSaveBlock1.secretBases[0].secretBaseId == mapEvents->bgEvents[eventId].bgUnion.secretBaseId)
{
- metatileId = MapGridGetMetatileIdAt(mapEvents->bgEvents[i].x + 7, mapEvents->bgEvents[i].y + 7);
- for (j=0; j<7; j++)
+ u16 i;
+ s16 tileId = MapGridGetMetatileIdAt(mapEvents->bgEvents[eventId].x + 7, mapEvents->bgEvents[eventId].y + 7);
+
+ for (i = 0; i < 7; i++)
{
- if (gUnknown_083D1358[j].unk_083D1358_1 == metatileId)
+ if (gUnknown_083D1358[i].unk_083D1358_1 == tileId)
{
- MapGridSetMetatileIdAt(mapEvents->bgEvents[i].x + 7, mapEvents->bgEvents[i].y + 7, gUnknown_083D1358[j].unk_083D1358_0 | 0xc00);
+ MapGridSetMetatileIdAt(
+ mapEvents->bgEvents[eventId].x + 7,
+ mapEvents->bgEvents[eventId].y + 7,
+ gUnknown_083D1358[i].unk_083D1358_0 | 0xc00);
break;
}
}
+
DrawWholeMapView();
break;
}
@@ -1077,40 +1093,52 @@ void sub_80BC474(void)
void sub_80BC50C(void)
{
- u16 backup_sbr_field_e;
+ u16 backupValue;
sub_80BC474();
IncrementGameStat(GAME_STAT_MOVED_SECRET_BASE);
- backup_sbr_field_e = gSaveBlock1.secretBases[0].sbr_field_e;
+
+ backupValue = gSaveBlock1.secretBases[0].sbr_field_e;
ResetSecretBase(0);
- gSaveBlock1.secretBases[0].sbr_field_e = backup_sbr_field_e;
+ gSaveBlock1.secretBases[0].sbr_field_e = backupValue;
}
u8 sub_80BC538(void)
{
- s16 i;
- u8 count = 0;
- for (i=1; i<20; i++)
+ s16 secretBaseIndex;
+ u8 retVal = 0;
+
+ for (secretBaseIndex = 1; secretBaseIndex < 20; secretBaseIndex++)
{
- if (sub_80BC268(i) == TRUE)
- count++;
+ if (sub_80BC268(secretBaseIndex) == TRUE)
+ {
+ retVal++;
+ }
}
- return count;
+
+ return retVal;
}
void sub_80BC56C(void)
{
- if (sub_80BC268(sub_80BC14C(gUnknown_020387DC)) == TRUE)
+ u8 secretBaseIndex = sub_80BC14C(gUnknown_020387DC);
+ if (sub_80BC268(secretBaseIndex) == TRUE)
+ {
gScriptResult = 1;
+ }
else if (sub_80BC538() > 9)
+ {
gScriptResult = 2;
+ }
else
+ {
gScriptResult = 0;
+ }
}
void sub_80BC5BC(void)
{
gSaveBlock1.secretBases[sub_80BC14C(gUnknown_020387DC)].sbr_field_1_6 ^= 1;
- FlagSet(0x10c);
+ FlagSet(0x10C);
}
void SecretBasePC_Decoration(void)
@@ -1123,22 +1151,32 @@ void SecretBasePC_Registry(void)
CreateTask(Task_SecretBasePC_Registry, 0);
}
-// This function tries to keep gTasks + 8 in a register. It should not.
-#ifdef NONMATCHING
void Task_SecretBasePC_Registry(u8 taskId)
{
- s16 *data;
+ s16 *taskData;
+
ScriptContext2_Enable();
sub_80F944C();
LoadScrollIndicatorPalette();
- data = gTasks[taskId].data;
- if ((data[0] = sub_80BC538()) != 0)
+
+ taskData = &gTasks[taskId].data[0];
+ taskData[0] = sub_80BC538();
+ if (taskData[0] != 0)
{
- data[3] = max(data[0], 7);
- data[1] = 0;
- data[2] = 0;
+ if (taskData[0] > 7) {
+ taskData[3] = 7;
+ }
+ else
+ {
+ taskData[3] = taskData[0];
+ }
+
+ taskData[1] = 0;
+ taskData[2] = 0;
+
MenuZeroFillWindowRect(0, 0, 29, 19);
sub_80BC7D8(taskId);
+
gTasks[taskId].func = sub_80BC824;
}
else
@@ -1146,88 +1184,27 @@ void Task_SecretBasePC_Registry(u8 taskId)
DisplayItemMessageOnField(taskId, gSecretBaseText_NoRegistry, sub_80BCC54, 0);
}
}
-#else
-__attribute__((naked))
-void Task_SecretBasePC_Registry(u8 taskId)
-{
- asm_unified("\tpush {r4,r5,lr}\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tbl ScriptContext2_Enable\n"
- "\tbl sub_80F944C\n"
- "\tbl LoadScrollIndicatorPalette\n"
- "\tlsls r0, r5, 2\n"
- "\tadds r0, r5\n"
- "\tlsls r0, 3\n"
- "\tldr r1, _080BC688 @ =gTasks + 0x8\n"
- "\tadds r4, r0, r1\n"
- "\tbl sub_80BC538\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tstrh r0, [r4]\n"
- "\tadds r1, r0, 0\n"
- "\tcmp r1, 0\n"
- "\tbeq _080BC694\n"
- "\tcmp r1, 0x7\n"
- "\tble _080BC65E\n"
- "\tmovs r0, 0x7\n"
- "_080BC65E:\n"
- "\tstrh r0, [r4, 0x6]\n"
- "\tmovs r0, 0\n"
- "\tstrh r0, [r4, 0x2]\n"
- "\tstrh r0, [r4, 0x4]\n"
- "\tmovs r0, 0\n"
- "\tmovs r1, 0\n"
- "\tmovs r2, 0x1D\n"
- "\tmovs r3, 0x13\n"
- "\tbl MenuZeroFillWindowRect\n"
- "\tadds r0, r5, 0\n"
- "\tbl sub_80BC7D8\n"
- "\tldr r1, _080BC68C @ =gTasks\n"
- "\tlsls r0, r5, 2\n"
- "\tadds r0, r5\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r1\n"
- "\tldr r1, _080BC690 @ =sub_80BC824\n"
- "\tstr r1, [r0]\n"
- "\tb _080BC6A0\n"
- "\t.align 2, 0\n"
- "_080BC688: .4byte gTasks + 0x8\n"
- "_080BC68C: .4byte gTasks\n"
- "_080BC690: .4byte sub_80BC824\n"
- "_080BC694:\n"
- "\tldr r1, _080BC6A8 @ =gSecretBaseText_NoRegistry\n"
- "\tldr r2, _080BC6AC @ =sub_80BCC54\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r3, 0\n"
- "\tbl DisplayItemMessageOnField\n"
- "_080BC6A0:\n"
- "\tpop {r4,r5}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_080BC6A8: .4byte gSecretBaseText_NoRegistry\n"
- "_080BC6AC: .4byte sub_80BCC54");
-}
-#endif
void sub_80BC6B0(u8 taskId)
{
u8 i;
- s16 *data = gTasks[taskId].data;
+ s16 *taskData = gTasks[taskId].data;
u8 m = 0;
u8 n = 0;
- for (i=1; i<20; i++)
+
+ for (i = 1; i < 20; i++)
{
- if (m == data[2])
+ if (m == taskData[2])
{
m = i;
break;
}
+
if (sub_80BC268(i) == TRUE)
- m ++;
+ m++;
}
- for (i=m; i<20; i++)
+
+ for (i = m; i < 20; i++)
{
if (sub_80BC268(i) == TRUE)
{
@@ -1238,17 +1215,19 @@ void sub_80BC6B0(u8 taskId)
break;
}
}
+
if (n < 8)
{
MenuFillWindowRectWithBlankTile(18, 2 * n + 2, 28, 2 * n + 3);
MenuPrint(gUnknownText_Exit, 18, 2 * n + 2);
DestroyVerticalScrollIndicator(1);
if (n != 7)
- MenuFillWindowRectWithBlankTile(18, ((n << 25) + (1 << 26)) >> 24, 28, 18); // needed to match
+ MenuFillWindowRectWithBlankTile(18, ((n << 25) + (1 << 26)) >> 24, 28, 18); // the shifts are needed to match
}
else
CreateVerticalScrollIndicators(1, 0xbc, 0x98);
- if (data[2] == 0)
+
+ if (taskData[2] == 0)
DestroyVerticalScrollIndicator(0);
else
CreateVerticalScrollIndicators(0, 0xbc, 0x08);
@@ -1256,50 +1235,52 @@ void sub_80BC6B0(u8 taskId)
void sub_80BC7D8(u8 taskId)
{
- s16 *data = gTasks[taskId].data;
+ u16 *taskData = gTasks[taskId].data;
MenuDrawTextWindow(17, 0, 29, 19);
- InitMenu(0, 18, 2, data[3] + 1, data[1], 11);
+ InitMenu(0, 18, 2, taskData[3] + 1, taskData[1], 11);
+
sub_80BC6B0(taskId);
}
void sub_80BC824(u8 taskId)
{
- s16 *data = gTasks[taskId].data;
+ s16 *taskData = gTasks[taskId].data;
+
if (gMain.newAndRepeatedKeys & DPAD_UP)
{
- if (data[1] != 0)
+ if (taskData[1])
{
- PlaySE(SE_SELECT);
- data[1] = MoveMenuCursor(-1);
+ PlaySE(5);
+ taskData[1] = MoveMenuCursor(-1);
}
- else if (data[2] != 0)
+ else if (taskData[2])
{
- PlaySE(SE_SELECT);
- data[2]--;
+ PlaySE(5);
+ taskData[2]--;
sub_80BC6B0(taskId);
}
}
else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
{
- if (data[1] == data[3])
+ if (taskData[1] == taskData[3])
{
- if (data[2] + data[1] != data[0])
+ if (taskData[2] + taskData[1] != taskData[0])
{
- PlaySE(SE_SELECT);
- data[2]++;
+ PlaySE(5);
+ taskData[2]++;
sub_80BC6B0(taskId);
}
}
else
{
- PlaySE(SE_SELECT);
- data[1] = MoveMenuCursor(+1);
+ PlaySE(5);
+ taskData[1] = MoveMenuCursor(1);
}
}
else if (gMain.newKeys & A_BUTTON)
{
- PlaySE(SE_SELECT);
- if (data[1] + data[2] == data[0])
+ PlaySE(5);
+ if (taskData[1] + taskData[2] == taskData[0])
{
HandleDestroyMenuCursors();
MenuZeroFillWindowRect(0, 0, 29, 19);
@@ -1308,32 +1289,37 @@ void sub_80BC824(u8 taskId)
else
{
HandleDestroyMenuCursors();
- data[4] = sub_80BC948(data[1] + data[2]);
+ taskData[4] = sub_80BC948(taskData[1] + taskData[2]);
sub_80BC980(taskId);
}
}
else if (gMain.newKeys & B_BUTTON)
{
- PlaySE(SE_SELECT);
+ PlaySE(5);
HandleDestroyMenuCursors();
MenuZeroFillWindowRect(0, 0, 29, 19);
sub_80BCC54(taskId);
}
}
-u8 sub_80BC948(u8 a0)
+u8 sub_80BC948(u8 a)
{
- u8 n = 0;
- u8 i;
- for (i=1; i<20; i++)
+ u8 secretBaseIndex;
+ u8 count = 0;
+
+ for (secretBaseIndex = 1; secretBaseIndex < 20; secretBaseIndex++)
{
- if (sub_80BC268(i) == TRUE)
+ if (sub_80BC268(secretBaseIndex) == TRUE)
{
- if (a0 == n)
- return i;
- n++;
+ if (a == count)
+ {
+ return secretBaseIndex;
+ }
+
+ count++;
}
}
+
return 0;
}
@@ -1351,9 +1337,9 @@ void sub_80BC9E4(u8 taskId)
{
if (gMain.newAndRepeatedKeys & DPAD_UP)
{
- if (GetMenuCursorPos() != 0)
+ if (GetMenuCursorPos())
{
- PlaySE(SE_SELECT);
+ PlaySE(5);
MoveMenuCursor(-1);
}
}
@@ -1361,30 +1347,32 @@ void sub_80BC9E4(u8 taskId)
{
if (GetMenuCursorPos() != 1)
{
- PlaySE(SE_SELECT);
- MoveMenuCursor(+1);
+ PlaySE(5);
+ MoveMenuCursor(1);
}
}
else if (gMain.newKeys & A_BUTTON)
{
- PlaySE(SE_SELECT);
+ PlaySE(5);
gUnknown_083D13D4[GetMenuCursorPos()].func(taskId);
}
else if (gMain.newKeys & B_BUTTON)
{
- PlaySE(SE_SELECT);
+ PlaySE(5);
sub_80BCBF8(taskId);
}
}
void sub_80BCA84(u8 taskId)
{
- s16 *data = gTasks[taskId].data;
+ s16 *taskData = gTasks[taskId].data;
+
DestroyVerticalScrollIndicator(0);
DestroyVerticalScrollIndicator(1);
HandleDestroyMenuCursors();
MenuZeroFillWindowRect(0, 0, 29, 19);
- sub_80BC190(gStringVar1, data[4]);
+
+ sub_80BC190(gStringVar1, taskData[4]);
StringExpandPlaceholders(gStringVar4, gOtherText_OkayToDeleteFromRegistry);
DisplayItemMessageOnField(taskId, gStringVar4, sub_80BCAEC, 0);
}
@@ -1397,14 +1385,23 @@ void sub_80BCAEC(u8 taskId)
void sub_80BCB10(u8 taskId)
{
- s16 *data = gTasks[taskId].data;
+ s16 *taskData = gTasks[taskId].data;
+
MenuZeroFillWindowRect(0, 0, 29, 19);
- gSaveBlock1.secretBases[data[4]].sbr_field_1_6 = 0;
- data[0]--;
- if (data[2] > 0)
- data[2]--;
- if (data[0] < 8)
- data[3]--;
+
+ gSaveBlock1.secretBases[taskData[4]].sbr_field_1_6 = 0;
+ taskData[0]--;
+
+ if (taskData[2] > 0)
+ {
+ taskData[2]--;
+ }
+
+ if (taskData[0] < 8)
+ {
+ taskData[3]--;
+ }
+
sub_80BC7D8(taskId);
gTasks[taskId].func = sub_80BC824;
}
@@ -1418,27 +1415,32 @@ void sub_80BCB90(u8 taskId)
void sub_80BCBC0(u8 taskId)
{
MenuZeroFillWindowRect(0, 0, 29, 19);
+
sub_80BC7D8(taskId);
gTasks[taskId].func = sub_80BC824;
}
void sub_80BCBF8(u8 taskId)
{
- s16 *data = gTasks[taskId].data;
- InitMenu(0, 18, 2, data[3] + 1, data[1], 11);
+ s16 *taskData = gTasks[taskId].data;
+
+ InitMenu(0, 18, 2, taskData[3] + 1, taskData[1], 11);
MenuZeroFillWindowRect(1, 0, 12, 5);
StartVerticalScrollIndicators(0);
StartVerticalScrollIndicators(1);
+
gTasks[taskId].func = sub_80BC824;
}
void sub_80BCC54(u8 taskId)
{
- u16 var54 = VarGet(VAR_0x4054);
+ u16 curBaseIndex = VarGet(VAR_0x4054);
+
BuyMenuFreeMemory();
DestroyVerticalScrollIndicator(0);
DestroyVerticalScrollIndicator(1);
- if (var54 == 0)
+
+ if (curBaseIndex == 0)
{
ScriptContext1_SetupScript(gUnknown_0815F399);
}
@@ -1446,12 +1448,14 @@ void sub_80BCC54(u8 taskId)
{
ScriptContext1_SetupScript(gUnknown_0815F49A);
}
+
DestroyTask(taskId);
}
-u8 sub_80BCCA4(u8 sbid)
+u8 sub_80BCCA4(u8 secretBaseIndex)
{
- return (gSaveBlock1.secretBases[sbid].trainerId[0] % 5) + gSaveBlock1.secretBases[sbid].gender * 5;
+ return (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_2[7] % 5)
+ + gSaveBlock1.secretBases[secretBaseIndex].gender * 5;
}
const u8 *sub_80BCCE8(void)
@@ -1468,3 +1472,190 @@ const u8 *sub_80BCCE8(void)
if (param == 8) return UnknownString_81A2754;
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;
+}