diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/field/secret_base.c | 547 |
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; +} |