diff options
Diffstat (limited to 'src/field/secret_base.c')
-rw-r--r-- | src/field/secret_base.c | 1708 |
1 files changed, 0 insertions, 1708 deletions
diff --git a/src/field/secret_base.c b/src/field/secret_base.c deleted file mode 100644 index 2d02de004..000000000 --- a/src/field/secret_base.c +++ /dev/null @@ -1,1708 +0,0 @@ -#include "global.h" -#include "constants/decorations.h" -#include "secret_base.h" -#include "decoration.h" -#include "constants/species.h" -#include "constants/items.h" -#include "constants/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 "fldeff_decoration.h" -#include "link.h" -#include "main.h" -#include "sound.h" -#include "constants/songs.h" -#include "constants/maps.h" -#include "map_name_popup.h" -#include "menu.h" -#include "menu_helpers.h" -#include "metatile_behavior.h" -#include "palette.h" -#include "pokemon.h" -#include "overworld.h" -#include "script.h" -#include "sound.h" -#include "constants/species.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" -#include "text.h" -#include "constants/vars.h" - - -static void sub_80BC7D8(u8 taskId); -static void sub_80BC824(u8 taskId); -static u8 sub_80BC948(u8 a); -static void sub_80BC980(u8 taskId); -static void sub_80BC9E4(u8 taskId); -static void sub_80BCA84(u8); -static void sub_80BCAEC(u8 taskId); -static void sub_80BCB90(u8); -static void sub_80BCBC0(u8); -static void sub_80BCBF8(u8 taskId); -static void sub_80BCC54(u8 taskId); -static void Task_SecretBasePC_Registry(u8 taskId); - -extern u8 gUnknown_0815F399[]; -extern u8 gUnknown_0815F49A[]; -EWRAM_DATA u8 gUnknown_020387DC = 0; - -const struct -{ - u16 unk_083D1358_0; - u16 unk_083D1358_1; -} gUnknown_083D1358[] = { - {0x26, 0x36}, - {0x27, 0x37}, - {0x1a0, 0x1a1}, - {0x1a8, 0x1a9}, - {0x1b0, 0x1b1}, - {0x208, 0x210}, - {0x271, 0x278} -}; - - -const u8 gUnknown_083D1374[] = { - MAP_NUM(SECRET_BASE_RED_CAVE1), 0, 1, 3, - MAP_NUM(SECRET_BASE_RED_CAVE2), 0, 5, 9, - MAP_NUM(SECRET_BASE_RED_CAVE3), 0, 1, 3, - MAP_NUM(SECRET_BASE_RED_CAVE4), 0, 7, 13, - MAP_NUM(SECRET_BASE_BROWN_CAVE1), 0, 2, 3, - MAP_NUM(SECRET_BASE_BROWN_CAVE2), 0, 9, 2, - MAP_NUM(SECRET_BASE_BROWN_CAVE3), 0, 13, 4, - MAP_NUM(SECRET_BASE_BROWN_CAVE4), 0, 1, 2, - MAP_NUM(SECRET_BASE_BLUE_CAVE1), 0, 1, 3, - MAP_NUM(SECRET_BASE_BLUE_CAVE2), 0, 1, 2, - MAP_NUM(SECRET_BASE_BLUE_CAVE3), 0, 3, 15, - MAP_NUM(SECRET_BASE_BLUE_CAVE4), 0, 3, 14, - MAP_NUM(SECRET_BASE_YELLOW_CAVE1), 0, 9, 3, - MAP_NUM(SECRET_BASE_YELLOW_CAVE2), 0, 8, 7, - MAP_NUM(SECRET_BASE_YELLOW_CAVE3), 0, 3, 6, - MAP_NUM(SECRET_BASE_YELLOW_CAVE4), 0, 5, 9, - MAP_NUM(SECRET_BASE_TREE1), 0, 2, 3, - MAP_NUM(SECRET_BASE_TREE2), 0, 5, 6, - MAP_NUM(SECRET_BASE_TREE3), 0, 15, 3, - MAP_NUM(SECRET_BASE_TREE4), 0, 4, 10, - MAP_NUM(SECRET_BASE_SHRUB1), 0, 3, 3, - MAP_NUM(SECRET_BASE_SHRUB2), 0, 1, 2, - MAP_NUM(SECRET_BASE_SHRUB3), 0, 7, 8, - MAP_NUM(SECRET_BASE_SHRUB4), 0, 9, 6 -}; - -const struct MenuAction2 gUnknown_083D13D4[] = { - {SecretBaseText_DelRegist, sub_80BCA84}, - {gUnknownText_Exit, sub_80BCBF8} -}; - -const struct YesNoFuncTable gUnknown_083D13E4 = { - sub_80BCB90, - sub_80BCBC0 -}; - -const u8 gUnknown_083D13EC[] = { - 0x23,0x24,0xF,0x1F,0x21,0x2F,0xE,0x14,0x20,0x22,0x0,0x0 -}; - -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 ClearSecretBase(struct SecretBaseRecord *record) -{ - u16 i; - u16 j; - record->secretBaseId = 0; - for (i=0; i<OT_NAME_LENGTH; i++) - record->playerName[i] = 0xff; - for (i=0; i<4; i++) - record->trainerId[i] = 0x00; - record->sbr_field_e = 0; - record->sbr_field_10 = 0; - record->sbr_field_11 = 0; - record->sbr_field_1_0 = 0; - record->gender = 0; - record->sbr_field_1_5 = 0; - record->sbr_field_1_6 = 0; - for (i=0; i<16; i++) { - record->decorations[i] = 0; - record->decorationPos[i] = 0; - } - for (i=0; i<6; i++) { - for (j=0; j<4; j++) { - record->partyMoves[i * 4 + j] = 0; - } - record->partyPersonality[i] = 0; - record->partyEVs[i] = 0; - record->partySpecies[i] = 0; - record->partyHeldItems[i] = 0; - record->partyLevels[i] = 0; - } -} - -void ResetSecretBase(u8 idx) -{ - ClearSecretBase(&gSaveBlock1.secretBases[idx]); -} - -void ResetSecretBases(void) -{ - u16 i; - for (i = 0; i < MAX_SECRET_BASES; i++) - ResetSecretBase(i); -} - -void sub_80BB5D0(void) -{ - gUnknown_020387DC = gSpecialVar_0x8004; -} - -void sub_80BB5E4(void) -{ - u16 i; - gSpecialVar_Result = 0; - for (i = 0; i < MAX_SECRET_BASES; i++) { - if (gUnknown_020387DC != gSaveBlock1.secretBases[i].secretBaseId) - continue; - gSpecialVar_Result = 1; - VarSet(VAR_CURRENT_SECRET_BASE, i); - break; - } -} - -void sub_80BB63C(void) // 80bb63c -{ - if (gSaveBlock1.secretBases[0].secretBaseId) - gSpecialVar_Result = 1; - else - gSpecialVar_Result = 0; -} - -u8 sub_80BB66C(void) // 80bb66c -{ - s16 x, y; - s16 v0; - GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - v0 = MapGridGetMetatileBehaviorAt(x, y) & 0xFFF; - if (v0 == 0x90 || v0 == 0x91) - return 1; - else if (v0 == 0x92 || v0 == 0x93) - return 2; - else if (v0 == 0x9a || v0 == 0x9b) - return 3; - else if (v0 == 0x94 || v0 == 0x95) - return 4; - else if (v0 == 0x96 || v0 == 0x97 || v0 == 0x9c || v0 == 0x9d) - return 5; - else if (v0 == 0x98 || v0 == 0x99) - return 6; - return 0; -} - -void sub_80BB70C(void) // 80bb70c -{ - gSpecialVar_0x8007 = sub_80BB66C(); -} - -s16 unref_sub_80BB724(u16 *a0, u8 a1) -{ - u16 v2; - for (v2=0; v2<0x200; v2++) { - if ((a0[v2] & 0xFFF) == a1) - return (s16)v2; - } - return -1; -} - -void sub_80BB764(s16 *arg1, s16 *arg2, u16 arg3) -{ - s16 x, y; - for (y=0; y<gMapHeader.mapData->height; y++) { - for (x=0; x<gMapHeader.mapData->width; x++) { - if ((gMapHeader.mapData->map[y * gMapHeader.mapData->width + x] & 0x3ff) == arg3) { - *arg1 = x; - *arg2 = y; - return; - } - } - } -} - -void sub_80BB800(void) -{ - s16 x, y; - s16 tile_id; - u16 idx; - GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - tile_id = MapGridGetMetatileIdAt(x, y); - for (idx=0; idx<7; idx++) { - if (gUnknown_083D1358[idx].unk_083D1358_0 == tile_id) { - MapGridSetMetatileIdAt(x, y, gUnknown_083D1358[idx].unk_083D1358_1 | 0xc00); - CurrentMapDrawMetatileAt(x, y); - return; - } - } - for (idx=0; idx<7; idx++) { - if (gUnknown_083D1358[idx].unk_083D1358_1 == tile_id) { - MapGridSetMetatileIdAt(x, y, gUnknown_083D1358[idx].unk_083D1358_0 | 0xc00); - CurrentMapDrawMetatileAt(x, y); - return; - } - } -} - -u8 sub_80BB8A8(u8 *arg1) -{ - u8 idx; - for (idx=0; idx<7; idx++) { - if (arg1[idx] == EOS) - return idx; - } - return 7; -} - -void sub_80BB8CC(void) -{ - u8 nameLength; - u16 idx; - gSaveBlock1.secretBases[0].secretBaseId = gUnknown_020387DC; - for (idx=0; idx<4; idx++) { - gSaveBlock1.secretBases[0].trainerId[idx] = gSaveBlock2.playerTrainerId[idx]; - } - VarSet(VAR_CURRENT_SECRET_BASE, 0); - nameLength = sub_80BB8A8(gSaveBlock2.playerName); - memset(gSaveBlock1.secretBases[0].playerName, 0xFF, OT_NAME_LENGTH); - StringCopyN(gSaveBlock1.secretBases[0].playerName, gSaveBlock2.playerName, nameLength); - gSaveBlock1.secretBases[0].gender = gSaveBlock2.playerGender; - VarSet(VAR_SECRET_BASE_MAP, gMapHeader.regionMapSectionId); -} - -void sub_80BB970(struct MapEvents *events) -{ - u16 bgevidx, idx, jdx; - s16 tile_id; - for (bgevidx=0; bgevidx<events->bgEventCount; bgevidx++) { - if (events->bgEvents[bgevidx].kind == 8) { - for (jdx=0; jdx<MAX_SECRET_BASES; jdx++) { - 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) { - MapGridSetMetatileIdAt(events->bgEvents[bgevidx].x + 7, events->bgEvents[bgevidx].y + 7, gUnknown_083D1358[idx].unk_083D1358_1 | 0xc00); - break; - } - } - break; - } - } - } - } -} - -void sub_80BBA14(void) -{ - s8 idx = 4 * (gUnknown_020387DC / 10); - warp1_set_2(MAP_GROUP(SECRET_BASE_RED_CAVE1), gUnknown_083D1374[idx], gUnknown_083D1374[idx + 1]); -} - -void sub_80BBA48(u8 taskid) -{ - u16 curbaseid; - switch (gTasks[taskid].data[0]) { - case 0: - gTasks[taskid].data[0] = 1; - break; - case 1: - if (!gPaletteFade.active) { - gTasks[taskid].data[0] = 2; - } - break; - case 2: - curbaseid = VarGet(VAR_CURRENT_SECRET_BASE); - if (gSaveBlock1.secretBases[curbaseid].sbr_field_10 < 0xff) - gSaveBlock1.secretBases[curbaseid].sbr_field_10++; - sub_80BBA14(); - warp_in(); - gFieldCallback = sub_8080990; - SetMainCallback2(CB2_LoadMap); - DestroyTask(taskid); - break; - } -} - -void sub_80BBAF0(void) -{ - CreateTask(sub_80BBA48, 0); - FadeScreen(1, 0); - saved_warp2_set(0, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1); -} - -bool8 sub_80BBB24(void) -{ - if (gMapHeader.mapType == MAP_TYPE_SECRET_BASE && VarGet(VAR_0x4097) == 0) - return FALSE; - return TRUE; -} - -void sub_80BBB50(u8 taskid) -{ - FieldObjectTurn(&(gMapObjects[gPlayerAvatar.mapObjectId]), 2); - if (IsWeatherNotFadingIn() == 1) { - EnableBothScriptContexts(); - DestroyTask(taskid); - } -} - -void sub_80BBB90(void) -{ - s16 x, y; - ScriptContext2_Enable(); - HideMapNamePopup(); - sub_80BB764(&x, &y, 0x220); - MapGridSetMetatileIdAt(x + 7, y + 7, 0xe20); - CurrentMapDrawMetatileAt(x + 7, y + 7); - pal_fill_black(); - CreateTask(sub_80BBB50, 0); -} - -void sub_80BBBEC(u8 taskid) -{ - s8 idx; - if (!gPaletteFade.active) { - idx = 4 * (gUnknown_020387DC / 10); - Overworld_SetWarpDestination(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, gUnknown_083D1374[idx + 2], gUnknown_083D1374[idx + 3]); - warp_in(); - gFieldCallback = sub_80BBB90; - SetMainCallback2(CB2_LoadMap); - DestroyTask(taskid); - } -} - -void sub_80BBC78(void) -{ - u8 taskid = CreateTask(sub_80BBBEC, 0); - gTasks[taskid].data[0] = 0; - FadeScreen(1, 0); -} - -bool8 CurrentMapIsSecretBase(void) -{ - if (gSaveBlock1.location.mapGroup == MAP_GROUP(SECRET_BASE_SHRUB4) && (u8)(gSaveBlock1.location.mapNum) <= MAP_NUM(SECRET_BASE_SHRUB4)) - return TRUE; - return FALSE; -} - -void sub_80BBCCC(u8 flagIn) -{ - u16 curBaseId; - u16 x, y; - if (CurrentMapIsSecretBase()) { - curBaseId = VarGet(VAR_CURRENT_SECRET_BASE); - for (x=0; x<16; x++) { - if (gSaveBlock1.secretBases[curBaseId].decorations[x] > 0 && gSaveBlock1.secretBases[curBaseId].decorations[x] <= 0x78 && gDecorations[gSaveBlock1.secretBases[curBaseId].decorations[x]].permission != DECORPERM_SOLID_MAT) { - sub_80FF394((gSaveBlock1.secretBases[curBaseId].decorationPos[x] >> 4) + 7, (gSaveBlock1.secretBases[curBaseId].decorationPos[x] & 0xF) + 7, gSaveBlock1.secretBases[curBaseId].decorations[x]); - } - } - if (curBaseId != 0) { - sub_80BB764(&x, &y, 0x220); - MapGridSetMetatileIdAt(x + 7, y + 7, 0xe21); - } else if (flagIn == 1 && VarGet(VAR_0x4089) == 1) { - sub_80BB764(&x, &y, 0x220); - MapGridSetMetatileIdAt(x + 7, y + 7, 0xe0a); - } - } -} - -void sub_80BBDD0(void) -{ - u8 *roomdecor; - u8 *roomdecorpos; - u8 decidx; - u8 objid = 0; - u8 metatile; - u8 permission; - u8 ndecor; - u16 curBase = VarGet(VAR_CURRENT_SECRET_BASE); - if (!CurrentMapIsSecretBase()) { - roomdecor = gSaveBlock1.playerRoomDecor; - roomdecorpos = gSaveBlock1.playerRoomDecorPos; - ndecor = 12; - } else { - roomdecor = gSaveBlock1.secretBases[curBase].decorations; - roomdecorpos = gSaveBlock1.secretBases[curBase].decorationPos; - ndecor = 16; - } - for (decidx=0; decidx<ndecor; decidx++) { - if (roomdecor[decidx] != DECOR_NONE) { - permission = gDecorations[roomdecor[decidx]].permission; - if (permission == DECORPERM_SOLID_MAT) - { - for (objid=0; objid<gMapHeader.events->mapObjectCount; objid++) { - if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE) - break; - } - if (objid == gMapHeader.events->mapObjectCount) - continue; - gSpecialVar_0x8006 = roomdecorpos[decidx] >> 4; - gSpecialVar_0x8007 = roomdecorpos[decidx] & 0xF; - metatile = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7); - if (sub_80572D8(metatile) == TRUE || sub_80572EC(metatile) == TRUE) { - gSpecialVar_Result = gMapHeader.events->mapObjects[objid].graphicsId + VAR_0x3F20; - VarSet(gSpecialVar_Result, gDecorations[roomdecor[decidx]].tiles[0]); - gSpecialVar_Result = gMapHeader.events->mapObjects[objid].localId; - FlagClear(gSpecialVar_0x8004 + 0xAE); - show_sprite(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - sub_805C0F8(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007); - sub_805C78C(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - gSpecialVar_0x8004 ++; - } - } - } - } -} - -void sub_80BBFA4(void) -{ - int curBase = VarGet(VAR_CURRENT_SECRET_BASE); - VarSet(VAR_OBJ_GFX_ID_F, gUnknown_083D13EC[sub_80BCCA4(curBase)]); -} - -void sub_80BBFD8(struct MapPosition *position, struct MapEvents *events) -{ - s16 bgevtidx; - for (bgevtidx=0; bgevtidx<events->bgEventCount; bgevtidx++) { - if (events->bgEvents[bgevtidx].kind == 8 && position->x == events->bgEvents[bgevtidx].x + 7 && position->y == events->bgEvents[bgevtidx].y + 7) { - gUnknown_020387DC = events->bgEvents[bgevtidx].bgUnion.secretBaseId; - break; - } - } -} - -void sub_80BC038(struct MapPosition *position, struct MapEvents *events) -{ - sub_80BBFD8(position, events); - sub_80BB5E4(); - ScriptContext1_SetupScript(gUnknown_081A2E14); -} - -bool8 sub_80BC050(void) -{ - sub_80BB5D0(); - sub_80BB5E4(); - if (gSpecialVar_Result == 1) - return FALSE; - return TRUE; -} - -void sub_80BC074(u8 taskid) -{ - switch (gTasks[taskid].data[0]) { - case 0: - ScriptContext2_Enable(); - gTasks[taskid].data[0] = 1; - break; - case 1: - if (!gPaletteFade.active) { - gTasks[taskid].data[0] = 2; - } - break; - case 2: - copy_saved_warp2_bank_and_enter_x_to_warp1(0x7E); - warp_in(); - gFieldCallback = mapldr_default; - SetMainCallback2(CB2_LoadMap); - ScriptContext2_Disable(); - DestroyTask(taskid); - break; - } -} - -void sub_80BC0F8(void) { - CreateTask(sub_80BC074, 0); - FadeScreen(1, 0); -} - -void sub_80BC114(void) { - if (gSaveBlock1.secretBases[0].secretBaseId != gUnknown_020387DC) - gSpecialVar_Result = 1; - else - gSpecialVar_Result = 0; -} - -u8 sub_80BC14C(u8 sbid) -{ - s16 idx; - for (idx=0; idx<MAX_SECRET_BASES; idx++) { - if (gSaveBlock1.secretBases[idx].secretBaseId == sbid) - return idx; - } - return 0; -} - -u8 *sub_80BC190(u8 *dest, u8 arg1) { // 80bc190 - u8 local1; - u8 *str; - - local1 = sub_80BB8A8(gSaveBlock1.secretBases[arg1].playerName); - - str = StringCopyN(dest, gSaveBlock1.secretBases[arg1].playerName, local1); - str[0] = EOS; - -#if ENGLISH - return StringAppend(dest, gOtherText_PlayersBase); -#elif GERMAN - return de_sub_8073174(dest, gOtherText_PlayersBase); -#endif -} - -u8 *GetSecretBaseMapName(u8 *dest) { - gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].secretBaseId; - return sub_80BC190(dest, VarGet(VAR_CURRENT_SECRET_BASE)); -} - -void BufferSecretBaseOwnerName(void) { - u8 *var0 = gSaveBlock1.secretBases[(u8)VarGet(VAR_CURRENT_SECRET_BASE)].playerName; - u8 *var1 = gStringVar1; - u8 var2 = sub_80BB8A8(var0); - u8 *var3 = StringCopyN(var1, var0, var2); - *var3 = EOS; -} - -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 - u16 evsum = GetMonData(mon, MON_DATA_HP_EV); - evsum += GetMonData(mon, MON_DATA_ATK_EV); - evsum += GetMonData(mon, MON_DATA_DEF_EV); - evsum += GetMonData(mon, MON_DATA_SPEED_EV); - evsum += GetMonData(mon, MON_DATA_SPATK_EV); - evsum += GetMonData(mon, MON_DATA_SPDEF_EV); - return (u8)(evsum / 6); -} - -#ifdef NONMATCHING -// So much is wrong with this function. -// The compiler likes to store pointers in temp variables. That's not what it's supposed to do. -void sub_80BC300(void) -{ - u16 partyidx; - u16 moveidx; - u16 sbpartyidx = 0; - for (partyidx=0; partyidx<PARTY_SIZE; partyidx++) - { - for (moveidx=0; moveidx<4; moveidx++) - gSaveBlock1.secretBases[0].partyMoves[partyidx * 4 + moveidx] = MOVE_NONE; - gSaveBlock1.secretBases[0].partySpecies[partyidx] = SPECIES_NONE; - gSaveBlock1.secretBases[0].partyHeldItems[partyidx] = ITEM_NONE; - gSaveBlock1.secretBases[0].partyLevels[partyidx] = 0; - gSaveBlock1.secretBases[0].partyPersonality[partyidx] = 0; - gSaveBlock1.secretBases[0].partyEVs[partyidx] = 0; - if (GetMonData(&(gPlayerParty[partyidx]), MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&(gPlayerParty[partyidx]), MON_DATA_IS_EGG)) { - for (moveidx=0; moveidx<4; moveidx++) - gSaveBlock1.secretBases[0].partyMoves[sbpartyidx * 4 + moveidx] = GetMonData(&(gPlayerParty[partyidx]), MON_DATA_MOVE1 + moveidx); - gSaveBlock1.secretBases[0].partySpecies[sbpartyidx] = GetMonData(&(gPlayerParty[partyidx]), MON_DATA_SPECIES); - gSaveBlock1.secretBases[0].partyHeldItems[sbpartyidx] = GetMonData(&(gPlayerParty[partyidx]), MON_DATA_HELD_ITEM); - gSaveBlock1.secretBases[0].partyLevels[sbpartyidx] = GetMonData(&(gPlayerParty[partyidx]), MON_DATA_LEVEL); - gSaveBlock1.secretBases[0].partyPersonality[sbpartyidx] = GetMonData(&(gPlayerParty[partyidx]), MON_DATA_PERSONALITY); - gSaveBlock1.secretBases[0].partyEVs[sbpartyidx] = sub_80BC298(&(gPlayerParty[partyidx])); - sbpartyidx ++; - } - } -} -#else -__attribute__((naked)) -void sub_80BC300(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0xC\n\ - movs r0, 0\n\ - mov r10, r0\n\ - movs r6, 0\n\ - mov r9, r6\n\ -_080BC314:\n\ - movs r4, 0\n\ - lsls r3, r6, 2\n\ - lsls r2, r6, 1\n\ - ldr r7, _080BC424 @ =gPlayerParty\n\ - adds r1, r6, 0x1\n\ - str r1, [sp]\n\ - adds r1, r3, 0\n\ -_080BC322:\n\ - adds r0, r1, r4\n\ - lsls r0, 1\n\ - ldr r5, _080BC428 @ =gSaveBlock1 + 0x1A54\n\ - adds r0, r5, r0\n\ - mov r5, r9\n\ - strh r5, [r0]\n\ - adds r0, r4, 0x1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - cmp r4, 0x3\n\ - bls _080BC322\n\ - ldr r1, _080BC42C @ =gSaveBlock1 + 0x1A84\n\ - adds r0, r1, r2\n\ - strh r5, [r0]\n\ - ldr r5, _080BC430 @ =gSaveBlock1 + 0x1A90\n\ - adds r0, r5, r2\n\ - mov r1, r9\n\ - strh r1, [r0]\n\ - ldr r2, _080BC434 @ =gSaveBlock1 + 0x1A9C\n\ - adds r0, r2, r6\n\ - mov r5, r9\n\ - strb r5, [r0]\n\ - ldr r1, _080BC438 @ =gSaveBlock1 + 0x1A3C\n\ - adds r0, r1, r3\n\ - mov r2, r9\n\ - str r2, [r0]\n\ - ldr r3, _080BC43C @ =gSaveBlock1 + 0x1AA2\n\ - adds r0, r3, r6\n\ - strb r2, [r0]\n\ - movs r0, 0x64\n\ - adds r5, r6, 0\n\ - muls r5, r0\n\ - adds r4, r5, r7\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _080BC408\n\ - adds r0, r4, 0\n\ - movs r1, 0x2D\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _080BC408\n\ - movs r4, 0\n\ - mov r0, r10\n\ - lsls r0, 2\n\ - mov r8, r0\n\ - mov r1, r10\n\ - lsls r7, r1, 1\n\ - adds r1, 0x1\n\ - str r1, [sp, 0x4]\n\ - ldr r2, _080BC424 @ =gPlayerParty\n\ -_080BC38E:\n\ - adds r1, r4, 0\n\ - adds r1, 0xD\n\ - adds r0, r5, r2\n\ - str r2, [sp, 0x8]\n\ - bl GetMonData\n\ - mov r3, r8\n\ - adds r1, r3, r4\n\ - lsls r1, 1\n\ - ldr r3, _080BC428 @ =gSaveBlock1 + 0x1A54\n\ - adds r1, r3, r1\n\ - strh r0, [r1]\n\ - adds r0, r4, 0x1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - ldr r2, [sp, 0x8]\n\ - cmp r4, 0x3\n\ - bls _080BC38E\n\ - movs r0, 0x64\n\ - adds r4, r6, 0\n\ - muls r4, r0\n\ - ldr r0, _080BC424 @ =gPlayerParty\n\ - adds r4, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - ldr r5, _080BC42C @ =gSaveBlock1 + 0x1A84\n\ - adds r1, r5, r7\n\ - strh r0, [r1]\n\ - adds r0, r4, 0\n\ - movs r1, 0xC\n\ - bl GetMonData\n\ - ldr r2, _080BC430 @ =gSaveBlock1 + 0x1A90\n\ - adds r1, r2, r7\n\ - strh r0, [r1]\n\ - adds r0, r4, 0\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - ldr r1, _080BC434 @ =gSaveBlock1 + 0x1A9C\n\ - add r1, r10\n\ - strb r0, [r1]\n\ - adds r0, r4, 0\n\ - movs r1, 0\n\ - bl GetMonData\n\ - ldr r1, _080BC438 @ =gSaveBlock1 + 0x1A3C\n\ - add r1, r8\n\ - str r0, [r1]\n\ - adds r0, r4, 0\n\ - bl sub_80BC298\n\ - ldr r1, _080BC43C @ =gSaveBlock1 + 0x1AA2\n\ - add r1, r10\n\ - strb r0, [r1]\n\ - ldr r3, [sp, 0x4]\n\ - lsls r0, r3, 16\n\ - lsrs r0, 16\n\ - mov r10, r0\n\ -_080BC408:\n\ - ldr r5, [sp]\n\ - lsls r0, r5, 16\n\ - lsrs r6, r0, 16\n\ - cmp r6, 0x5\n\ - bls _080BC314\n\ - add sp, 0xC\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080BC424: .4byte gPlayerParty\n\ -_080BC428: .4byte gSaveBlock1 + 0x1A54\n\ -_080BC42C: .4byte gSaveBlock1 + 0x1A84\n\ -_080BC430: .4byte gSaveBlock1 + 0x1A90\n\ -_080BC434: .4byte gSaveBlock1 + 0x1A9C\n\ -_080BC438: .4byte gSaveBlock1 + 0x1A3C\n\ -_080BC43C: .4byte gSaveBlock1 + 0x1AA2\n\ -.syntax divided\n"); -} -#endif - -void sub_80BC440(void) -{ - u16 backupValue = gSaveBlock1.secretBases[0].sbr_field_e; - ResetSecretBase(0); - gSaveBlock1.secretBases[0].sbr_field_e = backupValue; - sub_80BC0F8(); -} - -void SecretBasePC_PackUp(void) -{ - IncrementGameStat(GAME_STAT_MOVED_SECRET_BASE); - sub_80BC440(); -} - -void sub_80BC474(void) -{ - u16 eventId; - struct MapEvents *mapEvents = gMapHeader.events; - for (eventId = 0; eventId < mapEvents->bgEventCount; eventId++) - { - if (mapEvents->bgEvents[eventId].kind == 8 - && gSaveBlock1.secretBases[0].secretBaseId == mapEvents->bgEvents[eventId].bgUnion.secretBaseId) - { - u16 i; - s16 tileId = MapGridGetMetatileIdAt(mapEvents->bgEvents[eventId].x + 7, mapEvents->bgEvents[eventId].y + 7); - - for (i = 0; i < 7; i++) - { - if (gUnknown_083D1358[i].unk_083D1358_1 == tileId) - { - MapGridSetMetatileIdAt( - mapEvents->bgEvents[eventId].x + 7, - mapEvents->bgEvents[eventId].y + 7, - gUnknown_083D1358[i].unk_083D1358_0 | 0xc00); - break; - } - } - - DrawWholeMapView(); - break; - } - } -} - -void MoveSecretBase(void) -{ - u16 backupValue; - sub_80BC474(); - IncrementGameStat(GAME_STAT_MOVED_SECRET_BASE); - - backupValue = gSaveBlock1.secretBases[0].sbr_field_e; - ResetSecretBase(0); - gSaveBlock1.secretBases[0].sbr_field_e = backupValue; -} - -u8 sub_80BC538(void) -{ - s16 secretBaseIndex; - u8 retVal = 0; - - for (secretBaseIndex = 1; secretBaseIndex < MAX_SECRET_BASES; secretBaseIndex++) - { - if (sub_80BC268(secretBaseIndex) == TRUE) - { - retVal++; - } - } - - return retVal; -} - -void sub_80BC56C(void) -{ - u8 secretBaseIndex = sub_80BC14C(gUnknown_020387DC); - if (sub_80BC268(secretBaseIndex) == TRUE) - { - gSpecialVar_Result = 1; - } - else if (sub_80BC538() > 9) - { - gSpecialVar_Result = 2; - } - else - { - gSpecialVar_Result = 0; - } -} - -void sub_80BC5BC(void) -{ - gSaveBlock1.secretBases[sub_80BC14C(gUnknown_020387DC)].sbr_field_1_6 ^= 1; - FlagSet(FLAG_DECORATION_16); -} - -void SecretBasePC_Decoration(void) -{ - CreateTask(Task_SecretBasePC_Decoration, 0); -} - -void SecretBasePC_Registry(void) -{ - CreateTask(Task_SecretBasePC_Registry, 0); -} - -void Task_SecretBasePC_Registry(u8 taskId) -{ - s16 *taskData; - - ScriptContext2_Enable(); - ClearVerticalScrollIndicatorPalettes(); - LoadScrollIndicatorPalette(); - - taskData = gTasks[taskId].data; - taskData[0] = sub_80BC538(); - if (taskData[0] != 0) - { - if (taskData[0] > 7) { - taskData[3] = 7; - } - else - { - taskData[3] = taskData[0]; - } - - taskData[1] = 0; - taskData[2] = 0; - - Menu_EraseWindowRect(0, 0, 29, 19); - sub_80BC7D8(taskId); - - gTasks[taskId].func = sub_80BC824; - } - else - { - DisplayItemMessageOnField(taskId, gSecretBaseText_NoRegistry, sub_80BCC54, 0); - } -} - -void sub_80BC6B0(u8 taskId) -{ - u8 i; - s16 *taskData = gTasks[taskId].data; - u8 m = 0; - u8 n = 0; - - for (i = 1; i < MAX_SECRET_BASES; i++) - { - if (m == taskData[2]) - { - m = i; - break; - } - - if (sub_80BC268(i) == TRUE) - m++; - } - - for (i = m; i < MAX_SECRET_BASES; i++) - { - if (sub_80BC268(i) == TRUE) - { - sub_80BC190(gStringVar1, i); - Menu_BlankWindowRect(18, 2 * n + 2, 28, 2 * n + 3); - Menu_PrintText(gStringVar1, 18, 2 * n + 2); - if (++n == 8) - break; - } - } - - if (n < 8) - { - Menu_BlankWindowRect(18, 2 * n + 2, 28, 2 * n + 3); - Menu_PrintText(gUnknownText_Exit, 18, 2 * n + 2); - DestroyVerticalScrollIndicator(BOTTOM_ARROW); - if (n != 7) - Menu_BlankWindowRect(18, ((n << 25) + (1 << 26)) >> 24, 28, 18); // the shifts are needed to match - } - else - CreateVerticalScrollIndicators(BOTTOM_ARROW, 0xbc, 0x98); - - if (taskData[2] == 0) - DestroyVerticalScrollIndicator(TOP_ARROW); - else - CreateVerticalScrollIndicators(TOP_ARROW, 0xbc, 0x08); -} - -void sub_80BC7D8(u8 taskId) -{ - u16 *taskData = gTasks[taskId].data; - Menu_DrawStdWindowFrame(17, 0, 29, 19); - InitMenu(0, 18, 2, taskData[3] + 1, taskData[1], 11); - - sub_80BC6B0(taskId); -} - -void sub_80BC824(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - if (taskData[1]) - { - PlaySE(5); - taskData[1] = Menu_MoveCursor(-1); - } - else if (taskData[2]) - { - PlaySE(5); - taskData[2]--; - sub_80BC6B0(taskId); - } - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if (taskData[1] == taskData[3]) - { - if (taskData[2] + taskData[1] != taskData[0]) - { - PlaySE(5); - taskData[2]++; - sub_80BC6B0(taskId); - } - } - else - { - PlaySE(5); - taskData[1] = Menu_MoveCursor(1); - } - } - else if (gMain.newKeys & A_BUTTON) - { - PlaySE(5); - if (taskData[1] + taskData[2] == taskData[0]) - { - Menu_DestroyCursor(); - Menu_EraseWindowRect(0, 0, 29, 19); - sub_80BCC54(taskId); - } - else - { - Menu_DestroyCursor(); - taskData[4] = sub_80BC948(taskData[1] + taskData[2]); - sub_80BC980(taskId); - } - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(5); - Menu_DestroyCursor(); - Menu_EraseWindowRect(0, 0, 29, 19); - sub_80BCC54(taskId); - } -} - -u8 sub_80BC948(u8 a) -{ - u8 secretBaseIndex; - u8 count = 0; - - for (secretBaseIndex = 1; secretBaseIndex < MAX_SECRET_BASES; secretBaseIndex++) - { - if (sub_80BC268(secretBaseIndex) == TRUE) - { - if (a == count) - { - return secretBaseIndex; - } - - count++; - } - } - - return 0; -} - -void sub_80BC980(u8 taskId) -{ - PauseVerticalScrollIndicator(TOP_ARROW); - PauseVerticalScrollIndicator(BOTTOM_ARROW); - Menu_DrawStdWindowFrame(1, 0, 12, 5); - Menu_PrintItems(2, 1, 2, (const struct MenuAction *)gUnknown_083D13D4); - InitMenu(0, 2, 1, 2, 0, 10); - gTasks[taskId].func = sub_80BC9E4; -} - -void sub_80BC9E4(u8 taskId) -{ - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - if (Menu_GetCursorPos()) - { - PlaySE(5); - Menu_MoveCursor(-1); - } - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if (Menu_GetCursorPos() != 1) - { - PlaySE(5); - Menu_MoveCursor(1); - } - } - else if (gMain.newKeys & A_BUTTON) - { - PlaySE(5); - gUnknown_083D13D4[Menu_GetCursorPos()].func(taskId); - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(5); - sub_80BCBF8(taskId); - } -} - -void sub_80BCA84(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - DestroyVerticalScrollIndicator(TOP_ARROW); - DestroyVerticalScrollIndicator(BOTTOM_ARROW); - Menu_DestroyCursor(); - Menu_EraseWindowRect(0, 0, 29, 19); - - sub_80BC190(gStringVar1, taskData[4]); - StringExpandPlaceholders(gStringVar4, gOtherText_OkayToDeleteFromRegistry); - DisplayItemMessageOnField(taskId, gStringVar4, sub_80BCAEC, 0); -} - -void sub_80BCAEC(u8 taskId) -{ - DisplayYesNoMenu(20, 8, 1); - DoYesNoFuncWithChoice(taskId, &gUnknown_083D13E4); -} - -void sub_80BCB10(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - Menu_EraseWindowRect(0, 0, 29, 19); - - 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; -} - -void sub_80BCB90(u8 taskId) -{ - Menu_EraseWindowRect(20, 8, 26, 13); - DisplayItemMessageOnField(taskId, gOtherText_RegisteredDataDeleted, sub_80BCB10, 0); -} - -void sub_80BCBC0(u8 taskId) -{ - Menu_EraseWindowRect(0, 0, 29, 19); - - sub_80BC7D8(taskId); - gTasks[taskId].func = sub_80BC824; -} - -void sub_80BCBF8(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - InitMenu(0, 18, 2, taskData[3] + 1, taskData[1], 11); - Menu_EraseWindowRect(1, 0, 12, 5); - StartVerticalScrollIndicators(TOP_ARROW); - StartVerticalScrollIndicators(BOTTOM_ARROW); - - gTasks[taskId].func = sub_80BC824; -} - -void sub_80BCC54(u8 taskId) -{ - u16 curBaseIndex = VarGet(VAR_CURRENT_SECRET_BASE); - - BuyMenuFreeMemory(); - DestroyVerticalScrollIndicator(TOP_ARROW); - DestroyVerticalScrollIndicator(BOTTOM_ARROW); - - if (curBaseIndex == 0) - { - ScriptContext1_SetupScript(gUnknown_0815F399); - } - else - { - ScriptContext1_SetupScript(gUnknown_0815F49A); - } - - DestroyTask(taskId); -} - -u8 sub_80BCCA4(u8 secretBaseIndex) -{ - return (gSaveBlock1.secretBases[secretBaseIndex].playerName[OT_NAME_LENGTH] % 5) - + gSaveBlock1.secretBases[secretBaseIndex].gender * 5; -} - -const u8 *GetSecretBaseTrainerLoseText(void) -{ - u8 param = sub_80BCCA4(VarGet(VAR_CURRENT_SECRET_BASE)); - if (param == 0) return UnknownString_81A1BB2; - if (param == 1) return UnknownString_81A1F67; - if (param == 2) return UnknownString_81A2254; - if (param == 3) return UnknownString_81A25C3; - if (param == 4) return UnknownString_81A2925; - if (param == 5) return UnknownString_81A1D74; - if (param == 6) return UnknownString_81A20C9; - if (param == 7) return UnknownString_81A2439; - 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_CURRENT_SECRET_BASE); - sub_810FB10(1); - - CreateSecretBaseEnemyParty(&gSaveBlock1.secretBases[curBaseIndex]); -} - -void sub_80BCE4C() -{ - gSaveBlock1.secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].sbr_field_1_5 = gSpecialVar_Result; -} - -void sub_80BCE90() -{ - u16 curBaseIndex = VarGet(VAR_CURRENT_SECRET_BASE); - - if (!FlagGet(FLAG_DAILY_UNKNOWN_8C2)) - { - u8 i; - - for (i = 0; i < MAX_SECRET_BASES; i++) - { - gSaveBlock1.secretBases[i].sbr_field_1_5 = 0; - } - - FlagSet(FLAG_DAILY_UNKNOWN_8C2); - } - - gSpecialVar_0x8004 = sub_80BCCA4(curBaseIndex); - gSpecialVar_Result = 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 < OT_NAME_LENGTH && (baseA->playerName[i] != 0xFF || baseB->playerName[i] != 0xFF); i++) - { - if (baseA->playerName[i] != baseB->playerName[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 < MAX_SECRET_BASES; i++) - { - if (gSaveBlock1.secretBases[i].secretBaseId == secretBaseId) - { - return i; - } - } - - return -1; -} - -u8 sub_80BD170(void) -{ - s16 i; - - for (i = 1; i < MAX_SECRET_BASES; i++) - { - if (gSaveBlock1.secretBases[i].secretBaseId == 0) - { - return i; - } - } - - return 0; -} - -u8 sub_80BD1B0(void) -{ - s16 i; - - for (i = 1; i < MAX_SECRET_BASES; i++) - { - if (gSaveBlock1.secretBases[i].sbr_field_1_6 == 0 && gSaveBlock1.secretBases[i].sbr_field_1_0 == 0) - { - return i; - } - } - - return 0; -} - -u8 sub_80BD1FC(struct SecretBaseRecord *secretBase) -{ - s16 secretBaseIndex; - - if (secretBase->secretBaseId == 0) - { - return 0; - } - - secretBaseIndex = sub_80BD12C(secretBase->secretBaseId); - if (secretBaseIndex != 0) - { - if (secretBaseIndex != -1) - { - if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_0 == 1) - { - return 0; - } - if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_6 != 2 - || secretBase->sbr_field_1_0 == 1) - { - sub_80BD034(secretBaseIndex, secretBase); - return secretBaseIndex; - } - } - else - { - secretBaseIndex = sub_80BD170(); - if (secretBaseIndex != 0) - { - sub_80BD034(secretBaseIndex, secretBase); - return secretBaseIndex; - } - secretBaseIndex = sub_80BD1B0(); - if (secretBaseIndex) - { - sub_80BD034(secretBaseIndex, secretBase); - return secretBaseIndex; - } - } - } - - return 0; -} - -void sub_80BD280(void) -{ - u8 i; - u8 j; - struct SecretBaseRecord temp; - struct SecretBaseRecord *secretBases = gSaveBlock1.secretBases; - - for (i = 1; i < MAX_SECRET_BASES - 1; i++) - { - for (j = i + 1; j < MAX_SECRET_BASES; j++) - { - if ((!secretBases[i].sbr_field_1_6 && secretBases[j].sbr_field_1_6 == 1) - || (secretBases[i].sbr_field_1_6 == 2 && secretBases[j].sbr_field_1_6 != 2)) - { - temp = secretBases[i]; - secretBases[i] = secretBases[j]; - secretBases[j] = temp; - } - } - } -} - -void sub_80BD328(struct SecretBaseRecord *secretBases, u8 b) -{ - u16 i; - - for (i = 1; i < MAX_SECRET_BASES; i++) - { - if (secretBases[i].sbr_field_1_6 == b) - { - sub_80BD1FC(&secretBases[i]); - } - } -} - -bool8 sub_80BD358(struct SecretBaseRecord *secretBase) -{ - u8 i; - - if (!secretBase->secretBaseId) - return FALSE; - - if (secretBase->secretBaseId && secretBase->gender != gSaveBlock2.playerGender) - return FALSE; - - // Check if the player's trainer Id matches the secret base's id. - for (i = 0; i < 4; i++) - { - if (secretBase->trainerId[i] != gSaveBlock2.playerTrainerId[i]) - return FALSE; - } - - for (i = 0; i < OT_NAME_LENGTH && (secretBase->playerName[i] != 0xFF || gSaveBlock2.playerName[i] != 0xFF); i++) - { - if (secretBase->playerName[i] != gSaveBlock2.playerName[i]) - return FALSE; - } - - return TRUE; -} - -void sub_80BD3DC(struct SecretBaseRecord *basesA, struct SecretBaseRecord *basesB, struct SecretBaseRecord *basesC) -{ - u8 i; - u8 var1 = 0; - - for (i = 0; i < MAX_SECRET_BASES; i++) - { - if ((var1 & 1) == 0) - { - if (sub_80BD358(&basesA[i]) == TRUE) - { - ClearSecretBase(&basesA[i]); - var1 |= 1; - } - } - - if ((var1 & 2) == 0) - { - if (sub_80BD358(&basesB[i]) == TRUE) - { - ClearSecretBase(&basesB[i]); - var1 |= 2; - } - } - - if ((var1 & 4) == 0) - { - if (sub_80BD358(&basesC[i]) == TRUE) - { - ClearSecretBase(&basesC[i]); - var1 |= 4; - } - } - - if (var1 == 7) - { - break; - } - } -} - -bool8 sub_80BD494(struct SecretBaseRecord *base, struct SecretBaseRecord *secretBases, u8 c) -{ - u8 i; - - for (i = 0; i < MAX_SECRET_BASES; i++) - { - if (secretBases[i].secretBaseId) - { - if (sub_80BD0EC(base, &secretBases[i]) == TRUE) - { - if (c == 0) - { - ClearSecretBase(&secretBases[i]); - return FALSE; - } - - if (base->sbr_field_e > secretBases[i].sbr_field_e) - { - ClearSecretBase(&secretBases[i]); - return FALSE; - } - - secretBases[i].sbr_field_1_0 = base->sbr_field_1_0; - - ClearSecretBase(base); - return TRUE; - } - } - } - - return FALSE; -} - -void sub_80BD514(struct SecretBaseRecord *basesA, struct SecretBaseRecord *basesB, struct SecretBaseRecord *basesC, struct SecretBaseRecord *basesD) -{ - u8 i; - - for (i = 1; i < MAX_SECRET_BASES; i++) - { - if (basesA[i].secretBaseId) - { - if (basesA[i].sbr_field_1_6 == 1) - { - basesA[i].sbr_field_1_0 = 1; - } - - if (!sub_80BD494(&basesA[i], basesB, i)) - { - if (!sub_80BD494(&basesA[i], basesC, i)) - { - sub_80BD494(&basesA[i], basesD, i); - } - } - } - } - - for (i = 0; i < MAX_SECRET_BASES; i++) - { - if (basesB[i].secretBaseId) - { - basesB[i].sbr_field_1_5 = 0; - - if (!sub_80BD494(&basesB[i], basesC, i)) - { - sub_80BD494(&basesB[i], basesD, i); - } - } - } - - for (i = 0; i < MAX_SECRET_BASES; i++) - { - if (basesC[i].secretBaseId) - { - basesC[i].sbr_field_1_5 = 0; - sub_80BD494(&basesC[i], basesD, i); - } - - if (basesD[i].secretBaseId) - { - basesD[i].sbr_field_1_5 = 0; - } - } -} - -void sub_80BD610(struct SecretBaseRecord *basesA, struct SecretBaseRecord *basesB, struct SecretBaseRecord *basesC) -{ - sub_80BD3DC(basesA, basesB, basesC); - sub_80BD514(gSaveBlock1.secretBases, basesA, basesB, basesC); - - sub_80BD1FC(basesA); - sub_80BD1FC(basesB); - sub_80BD1FC(basesC); - - sub_80BD328(basesA, 1); - sub_80BD328(basesB, 1); - sub_80BD328(basesC, 1); - - sub_80BD328(basesA, 0); - sub_80BD328(basesB, 0); - sub_80BD328(basesC, 0); -} - -void sub_80BD674(void *playerRecords, u32 size, u8 c) -{ - if (FlagGet(FLAG_RECEIVED_SECRET_POWER)) - { - u16 i; - u8 numLinkedPlayers = GetLinkPlayerCount(); - switch (numLinkedPlayers) - { - case 2: - memset(playerRecords + size * 2, 0, size); - memset(playerRecords + size * 3, 0, size); - break; - case 3: - memset(playerRecords + size * 3, 0, size); - break; - } - - switch (c) - { - case 0: - sub_80BD610(playerRecords + size, playerRecords + size * 2, playerRecords + size * 3); - break; - case 1: - sub_80BD610(playerRecords + size * 2, playerRecords + size * 3, playerRecords); - break; - case 2: - sub_80BD610(playerRecords + size * 3, playerRecords, playerRecords + size); - break; - case 3: - sub_80BD610(playerRecords, playerRecords + size, playerRecords + size * 2); - break; - } - - for (i = 1; i < MAX_SECRET_BASES; i++) - { - if (gSaveBlock1.secretBases[i].sbr_field_1_0 == 1) - { - gSaveBlock1.secretBases[i].sbr_field_1_6 = 1; - gSaveBlock1.secretBases[i].sbr_field_1_0 = 0; - } - } - - sub_80BD280(); - - for (i = 1; i < MAX_SECRET_BASES; i++) - { - if (gSaveBlock1.secretBases[i].sbr_field_1_6 == 2) - { - gSaveBlock1.secretBases[i].sbr_field_1_6 = 0; - } - } - - if (gSaveBlock1.secretBases[0].sbr_field_e != 0xFFFF) - { - gSaveBlock1.secretBases[0].sbr_field_e++; - } - } -} |