summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/field/secret_base.c547
1 files changed, 369 insertions, 178 deletions
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;
+}