Some script clean up, document secret base secrets show

This commit is contained in:
GriffinR
2020-01-08 04:26:26 -05:00
committed by huderlem
parent 0284014e0e
commit 6a470ddfda
36 changed files with 920 additions and 1287 deletions

View File

@@ -2908,13 +2908,13 @@ static void CopyEReaderTrainerFarewellMessage(void)
FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.farewellPlayerLost);
}
void sub_81653CC(void)
void TryHideBattleTowerReporter(void)
{
if (gSaveBlock2Ptr->frontier.challengeStatus == CHALLENGE_STATUS_SAVING)
sub_80F01B8();
HideBattleTowerReporter();
if (FlagGet(FLAG_CANCEL_BATTLE_ROOM_CHALLENGE) == TRUE)
{
sub_80F01B8();
HideBattleTowerReporter();
FlagClear(FLAG_CANCEL_BATTLE_ROOM_CHALLENGE);
}
}

View File

@@ -784,7 +784,8 @@ static void sub_80B3220(u8 taskId)
}
}
void sub_80B3254(void)
// Unused
void CableClubSaveGame(void)
{
SaveGame();
}
@@ -1298,10 +1299,10 @@ void sub_80B3AF8(u8 taskId)
}
}
void sub_80B3BC4(void)
void TrySetBattleTowerLinkType(void)
{
if (gWirelessCommType == 0)
{
gLinkType = LINKTYPE_0x2288;
gLinkType = LINKTYPE_BATTLE_TOWER;
}
}

View File

@@ -2154,7 +2154,8 @@ void sub_8129708(void)
}
}
void sub_81297AC(void)
// Unused
void GetEventObjectLocalIdByFlag(void)
{
u8 i;

View File

@@ -423,23 +423,23 @@ static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 me
return SecretBase_EventScript_ShieldOrToyTV;
if (MetatileBehavior_IsMB_C6(metatileBehavior) == TRUE)
{
SetSecretBaseSecretsTvFlags_MiscFurnature();
CheckInteractedWithFriendsFurnitureBottom();
return NULL;
}
if (MetatileBehavior_HoldsLargeDecoration(metatileBehavior) == TRUE)
{
SetSecretBaseSecretsTvFlags_LargeDecorationSpot();
CheckInteractedWithFriendsFurnitureMiddle();
return NULL;
}
if (MetatileBehavior_HoldsSmallDecoration(metatileBehavior) == TRUE)
{
SetSecretBaseSecretsTvFlags_SmallDecorationSpot();
CheckInteractedWithFriendsFurnitureTop();
return NULL;
}
}
else if (MetatileBehavior_IsSecretBasePoster(metatileBehavior) == TRUE)
{
SetSecretBaseSecretsTvFlags_Poster();
CheckInteractedWithFriendsPosterDecor();
return NULL;
}

View File

@@ -20,9 +20,11 @@
#include "string_util.h"
#include "constants/field_effects.h"
#include "constants/metatile_behaviors.h"
#include "constants/songs.h"
#include "constants/vars.h"
#include "constants/metatile_labels.h"
#include "constants/songs.h"
#include "constants/tv.h"
#include "constants/vars.h"
EWRAM_DATA struct MapPosition gPlayerFacingPosition = {0};
@@ -801,16 +803,16 @@ static void Task_SecretBasePCTurnOn(u8 taskId)
{
case 4:
case 12:
MapGridSetMetatileIdAt(data[0], data[1], 0x224);
MapGridSetMetatileIdAt(data[0], data[1], METATILE_SecretBase_PC_On);
CurrentMapDrawMetatileAt(data[0], data[1]);
break;
case 8:
case 16:
MapGridSetMetatileIdAt(data[0], data[1], 0x220);
MapGridSetMetatileIdAt(data[0], data[1], METATILE_SecretBase_PC);
CurrentMapDrawMetatileAt(data[0], data[1]);
break;
case 20:
MapGridSetMetatileIdAt(data[0], data[1], 0x224);
MapGridSetMetatileIdAt(data[0], data[1], METATILE_SecretBase_PC_On);
CurrentMapDrawMetatileAt(data[0], data[1]);
FieldEffectActiveListRemove(FLDEFF_PCTURN_ON);
EnableBothScriptContexts();
@@ -829,9 +831,9 @@ void DoSecretBasePCTurnOffEffect(void)
PlaySE(SE_PC_OFF);
if (!VarGet(VAR_CURRENT_SECRET_BASE))
MapGridSetMetatileIdAt(x, y, 0x220 | METATILE_COLLISION_MASK);
MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_PC | METATILE_COLLISION_MASK);
else
MapGridSetMetatileIdAt(x, y, 0x221 | METATILE_COLLISION_MASK);
MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_RegisterPC | METATILE_COLLISION_MASK);
CurrentMapDrawMetatileAt(x, y);
}
@@ -875,16 +877,16 @@ static void DoBalloonSoundEffect(s16 metatileId)
{
switch (metatileId)
{
case 824:
case METATILE_SecretBase_RedBalloon:
PlaySE(SE_FUUSEN1);
break;
case 828:
case METATILE_SecretBase_BlueBalloon:
PlaySE(SE_FUUSEN2);
break;
case 832:
case METATILE_SecretBase_YellowBalloon:
PlaySE(SE_FUUSEN3);
break;
case 552:
case METATILE_SecretBase_MudBall:
PlaySE(SE_TOY_DANGO);
break;
}
@@ -903,8 +905,8 @@ bool8 FldEff_NopA700(void)
static void DoSecretBaseBreakableDoorEffect(s16 x, s16 y)
{
PlaySE(SE_TOY_KABE);
MapGridSetMetatileIdAt(x, y, 0x276);
MapGridSetMetatileIdAt(x, y - 1, 0x26E);
MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_BreakableDoor_BottomOpen);
MapGridSetMetatileIdAt(x, y - 1, METATILE_SecretBase_BreakableDoor_TopOpen);
CurrentMapDrawMetatileAt(x, y);
CurrentMapDrawMetatileAt(x, y - 1);
}
@@ -946,28 +948,28 @@ static void Task_SecretBaseMusicNoteMatSound(u8 taskId)
{
switch (gTasks[taskId].tMetatileID)
{
case 632:
case METATILE_SecretBase_NoteMat_C:
PlaySE(SE_TOY_C);
break;
case 633:
case METATILE_SecretBase_NoteMat_D:
PlaySE(SE_TOY_D);
break;
case 634:
case METATILE_SecretBase_NoteMat_E:
PlaySE(SE_TOY_E);
break;
case 635:
case METATILE_SecretBase_NoteMat_F:
PlaySE(SE_TOY_F);
break;
case 636:
case METATILE_SecretBase_NoteMat_G:
PlaySE(SE_TOY_G);
break;
case 637:
case METATILE_SecretBase_NoteMat_A:
PlaySE(SE_TOY_A);
break;
case 638:
case METATILE_SecretBase_NoteMat_B:
PlaySE(SE_TOY_B);
break;
case 691:
case METATILE_SecretBase_NoteMat_C_Sharp:
PlaySE(SE_TOY_C1);
break;
}
@@ -1071,12 +1073,12 @@ static void SpriteCB_SandPillar_0(struct Sprite *sprite)
{
PlaySE(SE_W088);
if (MapGridGetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1) == 646)
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, 3586);
if (MapGridGetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1) == METATILE_SecretBase_SandOrnament_TopWall)
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, METATILE_SecretBase_Wall_TopMid | METATILE_COLLISION_MASK);
else
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, 644);
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, METATILE_SecretBase_SandOrnament_BrokenTop);
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], 522);
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], METATILE_SecretBase_Ground);
CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1);
CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]);
@@ -1092,7 +1094,7 @@ static void SpriteCB_SandPillar_1(struct Sprite *sprite)
}
else
{
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], 3724);
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], METATILE_SecretBase_SandOrnament_BrokenBase | METATILE_COLLISION_MASK);
CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]);
sprite->data[0] = 0;
sprite->callback = SpriteCB_SandPillar_2;
@@ -1105,7 +1107,7 @@ static void SpriteCB_SandPillar_2(struct Sprite *sprite)
EnableBothScriptContexts();
}
void GetShieldToyTVDecorationInfo(void)
void InteractWithShieldOrTVDecoration(void)
{
s16 x, y;
s32 metatileId;
@@ -1116,7 +1118,7 @@ void GetShieldToyTVDecorationInfo(void)
switch (metatileId)
{
case 822:
case METATILE_SecretBase_GoldShield_Base1:
ConvertIntToDecimalStringN(gStringVar1, 100, STR_CONV_MODE_LEFT_ALIGN, 3);
StringCopy(gStringVar2, gText_Gold);
@@ -1125,9 +1127,9 @@ void GetShieldToyTVDecorationInfo(void)
if (!VarGet(VAR_CURRENT_SECRET_BASE))
return;
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x10);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_GOLD_SHIELD);
break;
case 734:
case METATILE_SecretBase_SilverShield_Base1:
ConvertIntToDecimalStringN(gStringVar1, 50, STR_CONV_MODE_LEFT_ALIGN, 2);
StringCopy(gStringVar2, gText_Silver);
@@ -1136,31 +1138,31 @@ void GetShieldToyTVDecorationInfo(void)
if (!VarGet(VAR_CURRENT_SECRET_BASE))
return;
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x20);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_SILVER_SHIELD);
break;
case 756:
case METATILE_SecretBase_TV:
gSpecialVar_Result = 1;
if (!VarGet(VAR_CURRENT_SECRET_BASE))
return;
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x80);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_TV);
break;
case 757:
case METATILE_SecretBase_RoundTV:
gSpecialVar_Result = 2;
if (!VarGet(VAR_CURRENT_SECRET_BASE))
return;
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x80);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_TV);
break;
case 758:
case METATILE_SecretBase_CuteTV:
gSpecialVar_Result = 3;
if (!VarGet(VAR_CURRENT_SECRET_BASE))
return;
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x80);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_TV);
break;
}
}
@@ -1172,16 +1174,16 @@ bool8 sub_80FADE4(u16 metatileId, u8 arg1)
if (!arg1)
{
if (metatileId == 0x285 || metatileId == 0x286)
if (metatileId == METATILE_SecretBase_SandOrnament_Top || metatileId == METATILE_SecretBase_SandOrnament_TopWall)
return TRUE;
if (metatileId == 0x237)
if (metatileId == METATILE_SecretBase_BreakableDoor_TopClosed)
return TRUE;
}
else
{
if (metatileId == 0x28d)
if (metatileId == METATILE_SecretBase_SandOrnament_Base1)
return TRUE;
if (metatileId == 0x23F)
if (metatileId == METATILE_SecretBase_BreakableDoor_BottomClosed)
return TRUE;
}

View File

@@ -14,6 +14,7 @@
#include "battle_pyramid_bag.h"
#include "constants/items.h"
#include "constants/hold_effects.h"
#include "constants/tv.h"
extern u16 gUnknown_0203CF30[];
@@ -542,7 +543,7 @@ bool8 RemoveBagItem(u16 itemId, u16 count)
if (CurMapIsSecretBase() == TRUE)
{
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x200);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_BAG);
VarSet(VAR_SECRET_BASE_LAST_ITEM_USED, itemId);
}

View File

@@ -1349,7 +1349,7 @@ bool8 sub_800AA60(void)
{
if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId)
{
if (gLinkType == LINKTYPE_0x2288)
if (gLinkType == LINKTYPE_BATTLE_TOWER)
{
if (gLinkType == gLinkPlayers[i].linkType)
{
@@ -1902,7 +1902,8 @@ bool32 sub_800B504(void)
return FALSE;
}
u8 sub_800B518(void)
// Unused
u8 GetWirelessCommType(void)
{
return gWirelessCommType;
}

View File

@@ -53,6 +53,7 @@ void sub_801DBDC(void)
}
}
// Unused
u16 sub_801DC20(void)
{
u16 *r6 = &gSpecialVar_Result;

View File

@@ -863,7 +863,7 @@ static void mli0_load_map(u32 a1)
isOutdoors = IsMapTypeOutdoors(gMapHeader.mapType);
isIndoors = IsMapTypeIndoors(gMapHeader.mapType);
sub_80EB218();
CheckLeftFriendsSecretBase();
TrySetMapSaveWarpStatus();
ClearTempFieldEventData();
ResetCyclingRoadChallengeData();

View File

@@ -52,6 +52,7 @@ void SetContestTrainerGfxIds(void)
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_2 - VARS_START] = gContestMons[2].trainerGfxId;
}
// Unused
void sub_80F8814(void)
{
u16 var1;
@@ -82,7 +83,8 @@ void BufferContestTrainerAndMonNames(void)
BufferContestantMonSpecies();
}
void sub_80F8864(void)
// Unused
void DoesContestCategoryHaveWinner(void)
{
int contestWinner;
switch (gSpecialVar_ContestCategory)
@@ -105,10 +107,10 @@ void sub_80F8864(void)
break;
}
if (!gSaveBlock1Ptr->contestWinners[contestWinner].species)
gSpecialVar_0x8004 = 0;
if (gSaveBlock1Ptr->contestWinners[contestWinner].species == SPECIES_NONE)
gSpecialVar_0x8004 = FALSE;
else
gSpecialVar_0x8004 = 1;
gSpecialVar_0x8004 = TRUE;
}
void SaveMuseumContestPainting(void)
@@ -144,9 +146,10 @@ u8 CountPlayerContestPaintings(void)
return count;
}
// Unused
void sub_80F8970(void)
{
s16 sp[4];
s16 conditions[CONTESTANT_COUNT];
int i, j;
s16 condition;
s8 var0;
@@ -154,28 +157,27 @@ void sub_80F8970(void)
u8 r8;
u8 r7;
for (i = 0; i < 4; i++)
sp[i] = gContestMonConditions[i];
for (i = 0; i < CONTESTANT_COUNT; i++)
conditions[i] = gContestMonConditions[i];
for (i = 0; i < 3; i++)
for (i = 0; i < CONTESTANT_COUNT - 1; i++)
{
for (j = 3; j > i; j--)
for (j = CONTESTANT_COUNT - 1; j > i; j--)
{
if (sp[j - 1] < sp[j])
if (conditions[j - 1] < conditions[j])
{
int temp = sp[j];
sp[j] = sp[j - 1];
sp[j - 1] = temp;
int temp;
SWAP(conditions[j], conditions[j - 1], temp)
}
}
}
condition = sp[gSpecialVar_0x8006];
condition = conditions[gSpecialVar_0x8006];
var0 = 0;
r8 = 0;
for (i = 0; i < 4; i++)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (sp[i] == condition)
if (conditions[i] == condition)
{
var0++;
if (i == gSpecialVar_0x8006)
@@ -183,15 +185,15 @@ void sub_80F8970(void)
}
}
for (i = 0; i < 4; i++)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (sp[i] == condition)
if (conditions[i] == condition)
break;
}
r7 = i;
var2 = r8;
for (i = 0; i < 4; i++)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (condition == gContestMonConditions[i])
{

View File

@@ -41,11 +41,13 @@
#include "constants/maps.h"
#include "constants/map_types.h"
#include "constants/metatile_behaviors.h"
#include "constants/metatile_labels.h"
#include "constants/moves.h"
#include "constants/secret_bases.h"
#include "constants/songs.h"
#include "constants/species.h"
#include "constants/trainers.h"
#include "constants/tv.h"
struct SecretBaseRegistryMenu
{
@@ -88,13 +90,13 @@ static u8 GetSecretBaseOwnerType(u8 secretBaseId);
static const struct SecretBaseEntranceMetatiles sSecretBaseEntranceMetatiles[] =
{
{.closedMetatileId = 0x0026, .openMetatileId = 0x0036},
{.closedMetatileId = 0x0027, .openMetatileId = 0x0037},
{.closedMetatileId = 0x01a0, .openMetatileId = 0x01a1},
{.closedMetatileId = 0x01a8, .openMetatileId = 0x01a9},
{.closedMetatileId = 0x01b0, .openMetatileId = 0x01b1},
{.closedMetatileId = 0x0208, .openMetatileId = 0x0210},
{.closedMetatileId = 0x0271, .openMetatileId = 0x0278},
{.closedMetatileId = METATILE_General_SecretBase_TreeLeft, .openMetatileId = METATILE_General_SecretBase_VineLeft},
{.closedMetatileId = METATILE_General_SecretBase_TreeRight, .openMetatileId = METATILE_General_SecretBase_VineRight},
{.closedMetatileId = METATILE_General_RedCaveIndent, .openMetatileId = METATILE_General_RedCaveOpen},
{.closedMetatileId = METATILE_General_YellowCaveIndent, .openMetatileId = METATILE_General_YellowCaveOpen},
{.closedMetatileId = METATILE_General_BlueCaveIndent, .openMetatileId = METATILE_General_BlueCaveOpen},
{.closedMetatileId = METATILE_Fallarbor_BrownCaveIndent, .openMetatileId = METATILE_Fallarbor_BrownCaveOpen},
{.closedMetatileId = METATILE_Fortree_SecretBase_Shrub, .openMetatileId = METATILE_Fortree_SecretBase_ShrubOpen},
};
// mapNum, warpId, x, y
@@ -452,10 +454,10 @@ static void EnterNewlyCreatedSecretBase_StartFadeIn(void)
ScriptContext2_Enable();
HideMapNamePopUpWindow();
FindMetatileIdMapCoords(&x, &y, 0x220);
FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC);
x += 7;
y += 7;
MapGridSetMetatileIdAt(x, y, 0x220 | METATILE_COLLISION_MASK);
MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_PC | METATILE_COLLISION_MASK);
CurrentMapDrawMetatileAt(x, y);
FadeInFromBlack();
CreateTask(EnterNewlyCreatedSecretBase_WaitFadeIn, 0);
@@ -506,7 +508,7 @@ void InitSecretBaseAppearance(bool8 hidePC)
secretBaseId = VarGet(VAR_CURRENT_SECRET_BASE);
decorations = gSaveBlock1Ptr->secretBases[secretBaseId].decorations;
decorPos = gSaveBlock1Ptr->secretBases[secretBaseId].decorationPositions;
for (x = 0; x < 16; x++)
for (x = 0; x < DECOR_MAX_SECRET_BASE; x++)
{
if (decorations[x] > 0 && decorations[x] <= NUM_DECORATIONS && gDecorations[decorations[x]].permission != DECORPERM_SPRITE)
ShowDecorationOnMap((decorPos[x] >> 4) + 7, (decorPos[x] & 0xF) + 7, decorations[x]);
@@ -515,14 +517,14 @@ void InitSecretBaseAppearance(bool8 hidePC)
if (secretBaseId != 0)
{
// Another player's secret base. Change PC type to the "Register" PC.
FindMetatileIdMapCoords(&x, &y, 0x220);
MapGridSetMetatileIdAt(x + 7, y + 7, 0x221 | METATILE_COLLISION_MASK);
FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC);
MapGridSetMetatileIdAt(x + 7, y + 7, METATILE_SecretBase_RegisterPC | METATILE_COLLISION_MASK);
}
else if (hidePC == TRUE && VarGet(VAR_SECRET_BASE_INITIALIZED) == 1)
{
// Change PC to regular ground tile.
FindMetatileIdMapCoords(&x, &y, 0x220);
MapGridSetMetatileIdAt(x + 7, y + 7, 0x20a | METATILE_COLLISION_MASK);
FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC);
MapGridSetMetatileIdAt(x + 7, y + 7, METATILE_SecretBase_Ground | METATILE_COLLISION_MASK);
}
}
}
@@ -1174,48 +1176,60 @@ void SecretBasePerStepCallback(u8 taskId)
VarSet(VAR_SECRET_BASE_STEP_COUNTER, VarGet(VAR_SECRET_BASE_STEP_COUNTER) + 1);
behavior = MapGridGetMetatileBehaviorAt(x, y);
tileId = MapGridGetMetatileIdAt(x, y);
if (tileId == 0x234 || tileId == 0x23C)
if (tileId == METATILE_SecretBase_Board_Top || tileId == METATILE_SecretBase_Board_Bottom)
{
if (sInFriendSecretBase == TRUE)
{
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x20);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SOLID_BOARD);
}
}
else if (tileId == 0x2b8 || tileId == 0x2b9 || tileId == 0x2ba || tileId == 0x2c0 || tileId == 0x2c1 || tileId == 0x2c2 || tileId == 0x2c8 || tileId == 0x2c9 || tileId == 0x2ca)
else if (tileId == METATILE_SecretBase_SmallChair
|| tileId == METATILE_SecretBase_PokemonChair
|| tileId == METATILE_SecretBase_HeavyChair
|| tileId == METATILE_SecretBase_PrettyChair
|| tileId == METATILE_SecretBase_ComfortChair
|| tileId == METATILE_SecretBase_RaggedChair
|| tileId == METATILE_SecretBase_BrickChair
|| tileId == METATILE_SecretBase_CampChair
|| tileId == METATILE_SecretBase_HardChair)
{
if (sInFriendSecretBase == TRUE)
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x01);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_CHAIR);
}
else if (tileId == 0x239 || tileId == 0x241 || tileId == 0x251 || tileId == 0x259)
else if (tileId == METATILE_SecretBase_RedTent_DoorTop
|| tileId == METATILE_SecretBase_RedTent_Door
|| tileId == METATILE_SecretBase_BlueTent_DoorTop
|| tileId == METATILE_SecretBase_BlueTent_Door)
{
if (sInFriendSecretBase == TRUE)
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x04);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_TENT);
}
else if ((behavior == 0x34 && tileId == 0x26d) || (behavior == 0x35 && MapGridGetMetatileIdAt(x, y) == 0x26a))
else if ((behavior == MB_IMPASSABLE_NORTHEAST && tileId == METATILE_SecretBase_Stand_RightCorner)
|| (behavior == MB_IMPASSABLE_NORTHWEST && MapGridGetMetatileIdAt(x, y) == METATILE_SecretBase_Stand_LeftCorner))
{
if (sInFriendSecretBase == TRUE)
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x200);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_STAND);
}
else if (behavior == 0xc1 && tileId == 0x23d)
else if (behavior == MB_IMPASSABLE_WEST_AND_EAST && tileId == METATILE_SecretBase_Slide_Stairs)
{
if (sInFriendSecretBase == TRUE)
{
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ 0x1000);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x2000);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ SECRET_BASE_USED_SLIDE);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_DECLINED_SLIDE);
}
}
else if (behavior == 0x47 && tileId == 0x23e)
else if (behavior == MB_SLIDE_SOUTH && tileId == METATILE_SecretBase_Slide)
{
if (sInFriendSecretBase == TRUE)
{
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x1000);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ 0x2000);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SLIDE);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ SECRET_BASE_DECLINED_SLIDE);
}
}
else if (MetatileBehavior_IsSecretBaseGlitterMat(behavior) == TRUE)
{
if (sInFriendSecretBase == TRUE)
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x80);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_GLITTER_MAT);
}
else if (MetatileBehavior_IsSecretBaseBalloon(behavior) == TRUE)
{
@@ -1224,13 +1238,13 @@ void SecretBasePerStepCallback(u8 taskId)
{
switch ((int)MapGridGetMetatileIdAt(x, y))
{
case 0x338:
case 0x33c:
case 0x340:
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x02);
case METATILE_SecretBase_RedBalloon:
case METATILE_SecretBase_BlueBalloon:
case METATILE_SecretBase_YellowBalloon:
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_BALLOON);
break;
case 0x228:
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x100);
case METATILE_SecretBase_MudBall:
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_MUD_BALL);
break;
}
}
@@ -1238,23 +1252,23 @@ void SecretBasePerStepCallback(u8 taskId)
else if (MetatileBehavior_IsSecretBaseBreakableDoor(behavior) == TRUE)
{
if (sInFriendSecretBase == TRUE)
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x400);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_BREAKABLE_DOOR);
ShatterSecretBaseBreakableDoor(x, y);
}
else if (MetatileBehavior_IsSecretBaseSoundMat(behavior) == TRUE){
if (sInFriendSecretBase == TRUE)
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x8000);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_NOTE_MAT);
}
else if (MetatileBehavior_IsSecretBaseJumpMat(behavior) == TRUE)
{
if (sInFriendSecretBase == TRUE)
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x4000);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_JUMP_MAT);
}
else if (MetatileBehavior_IsSecretBaseSpinMat(behavior) == TRUE)
{
if (sInFriendSecretBase == TRUE)
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x02);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SPIN_MAT);
}
}
break;
@@ -1417,9 +1431,8 @@ static void SortSecretBasesByRegistryStatus(void)
{
if ((secretBases[i].registryStatus == 0 && secretBases[j].registryStatus == 1) || (secretBases[i].registryStatus == 2 && secretBases[j].registryStatus != 2))
{
struct SecretBase temp = secretBases[i];
secretBases[i] = secretBases[j];
secretBases[j] = temp;
struct SecretBase temp;
SWAP(secretBases[i], secretBases[j], temp)
}
}
}
@@ -1461,48 +1474,57 @@ bool8 SecretBaseBelongsToPlayer(struct SecretBase *secretBase)
return TRUE;
}
#define DELETED_BASE_A (1 << 0)
#define DELETED_BASE_B (1 << 1)
#define DELETED_BASE_C (1 << 2)
void DeleteFirstOldBaseFromPlayerInRecordMixingFriendsRecords(struct SecretBase *basesA, struct SecretBase *basesB, struct SecretBase *basesC)
{
u8 i;
u8 sbFlags = 0x0;
u8 sbFlags = 0;
for (i = 0; i < SECRET_BASES_COUNT; i++)
{
if (!(sbFlags & 0x1)) // 001
if (!(sbFlags & DELETED_BASE_A))
{
if (SecretBaseBelongsToPlayer(&basesA[i]) == TRUE)
{
ClearSecretBase(&basesA[i]);
sbFlags |= 1;
sbFlags |= DELETED_BASE_A;
}
}
if (!(sbFlags & 0x2)) // 010
if (!(sbFlags & DELETED_BASE_B))
{
if (SecretBaseBelongsToPlayer(&basesB[i]) == TRUE)
{
ClearSecretBase(&basesB[i]);
sbFlags |= 2;
sbFlags |= DELETED_BASE_B;
}
}
if (!(sbFlags & 0x4)) // 100
if (!(sbFlags & DELETED_BASE_C))
{
if (SecretBaseBelongsToPlayer(&basesC[i]) == TRUE)
{
ClearSecretBase(&basesC[i]);
sbFlags |= 4;
sbFlags |= DELETED_BASE_C;
}
}
if (sbFlags == 0x7) // 111
if (sbFlags == (DELETED_BASE_A | DELETED_BASE_B | DELETED_BASE_C))
{
break;
}
}
}
bool8 sub_80EAD14(struct SecretBase *secretBase, struct SecretBase *secretBases, u8 c)
#undef DELETED_BASE_A
#undef DELETED_BASE_B
#undef DELETED_BASE_C
// returns TRUE if secretBase was deleted, FALSE otherwise
static bool8 ClearDuplicateOwnedSecretBases(struct SecretBase *secretBase, struct SecretBase *secretBases, u8 c)
{
u8 i;
@@ -1546,11 +1568,11 @@ void sub_80EAD94(struct SecretBase *basesA, struct SecretBase *basesB, struct Se
{
basesA[i].sbr_field_1_0 = 1;
}
if (!sub_80EAD14(&basesA[i], basesB, i))
if (!ClearDuplicateOwnedSecretBases(&basesA[i], basesB, i))
{
if (!sub_80EAD14(&basesA[i], basesC, i))
if (!ClearDuplicateOwnedSecretBases(&basesA[i], basesC, i))
{
sub_80EAD14(&basesA[i], basesD, i);
ClearDuplicateOwnedSecretBases(&basesA[i], basesD, i);
}
}
}
@@ -1560,9 +1582,9 @@ void sub_80EAD94(struct SecretBase *basesA, struct SecretBase *basesB, struct Se
if (basesB[i].secretBaseId)
{
basesB[i].battledOwnerToday = 0;
if (!sub_80EAD14(&basesB[i], basesC, i))
if (!ClearDuplicateOwnedSecretBases(&basesB[i], basesC, i))
{
sub_80EAD14(&basesB[i], basesD, i);
ClearDuplicateOwnedSecretBases(&basesB[i], basesD, i);
}
}
}
@@ -1571,7 +1593,7 @@ void sub_80EAD94(struct SecretBase *basesA, struct SecretBase *basesB, struct Se
if (basesC[i].secretBaseId)
{
basesC[i].battledOwnerToday = 0;
sub_80EAD14(&basesC[i], basesD, i);
ClearDuplicateOwnedSecretBases(&basesC[i], basesD, i);
}
if (basesD[i].secretBaseId)
{
@@ -1617,6 +1639,17 @@ void sub_80EAEF4(struct SecretBaseRecordMixer *mixers)
sub_80EABA4(&mixers[2], 0);
}
#define INIT_SECRET_BASE_RECORD_MIXER(linkId1, linkId2, linkId3) \
mixers[0].secretBases = secretBases + linkId1 * recordSize; \
mixers[0].version = gLinkPlayers[linkId1].version & 0xFF; \
mixers[0].language = gLinkPlayers[linkId1].language; \
mixers[1].secretBases = secretBases + linkId2 * recordSize; \
mixers[1].version = gLinkPlayers[linkId2].version & 0xFF; \
mixers[1].language = gLinkPlayers[linkId2].language; \
mixers[2].secretBases = secretBases + linkId3 * recordSize; \
mixers[2].version = gLinkPlayers[linkId3].version & 0xFF; \
mixers[2].language = gLinkPlayers[linkId3].language;
void ReceiveSecretBasesData(void *secretBases, size_t recordSize, u8 linkIdx)
{
struct SecretBaseRecordMixer mixers[3];
@@ -1638,48 +1671,16 @@ void ReceiveSecretBasesData(void *secretBases, size_t recordSize, u8 linkIdx)
switch (linkIdx)
{
case 0:
mixers[0].secretBases = secretBases + 1 * recordSize;
mixers[0].version = gLinkPlayers[1].version & 0xFF;
mixers[0].language = gLinkPlayers[1].language;
mixers[1].secretBases = secretBases + 2 * recordSize;
mixers[1].version = gLinkPlayers[2].version & 0xFF;
mixers[1].language = gLinkPlayers[2].language;
mixers[2].secretBases = secretBases + 3 * recordSize;
mixers[2].version = gLinkPlayers[3].version & 0xFF;
mixers[2].language = gLinkPlayers[3].language;
INIT_SECRET_BASE_RECORD_MIXER(1, 2, 3)
break;
case 1:
mixers[0].secretBases = secretBases + 2 * recordSize;
mixers[0].version = gLinkPlayers[2].version & 0xFF;
mixers[0].language = gLinkPlayers[2].language;
mixers[1].secretBases = secretBases + 3 * recordSize;
mixers[1].version = gLinkPlayers[3].version & 0xFF;
mixers[1].language = gLinkPlayers[3].language;
mixers[2].secretBases = secretBases + 0 * recordSize;
mixers[2].version = gLinkPlayers[0].version & 0xFF;
mixers[2].language = gLinkPlayers[0].language;
INIT_SECRET_BASE_RECORD_MIXER(2, 3, 0)
break;
case 2:
mixers[0].secretBases = secretBases + 3 * recordSize;
mixers[0].version = gLinkPlayers[3].version & 0xFF;
mixers[0].language = gLinkPlayers[3].language;
mixers[1].secretBases = secretBases + 0 * recordSize;
mixers[1].version = gLinkPlayers[0].version & 0xFF;
mixers[1].language = gLinkPlayers[0].language;
mixers[2].secretBases = secretBases + 1 * recordSize;
mixers[2].version = gLinkPlayers[1].version & 0xFF;
mixers[2].language = gLinkPlayers[1].language;
INIT_SECRET_BASE_RECORD_MIXER(3, 0, 1)
break;
case 3:
mixers[0].secretBases = secretBases + 0 * recordSize;
mixers[0].version = gLinkPlayers[0].version & 0xFF;
mixers[0].language = gLinkPlayers[0].language;
mixers[1].secretBases = secretBases + 1 * recordSize;
mixers[1].version = gLinkPlayers[1].version & 0xFF;
mixers[1].language = gLinkPlayers[1].language;
mixers[2].secretBases = secretBases + 2 * recordSize;
mixers[2].version = gLinkPlayers[2].version & 0xFF;
mixers[2].language = gLinkPlayers[2].language;
INIT_SECRET_BASE_RECORD_MIXER(0, 1, 2)
break;
}
@@ -1734,13 +1735,13 @@ void InitSecretBaseVars(void)
sInFriendSecretBase = FALSE;
}
void sub_80EB218(void)
void CheckLeftFriendsSecretBase(void)
{
if (VarGet(VAR_SECRET_BASE_IS_NOT_LOCAL) && sInFriendSecretBase == TRUE && !CurMapIsSecretBase())
{
VarSet(VAR_SECRET_BASE_IS_NOT_LOCAL, FALSE);
sInFriendSecretBase = FALSE;
sub_80EEA70();
TryPutSecretBaseSecretsOnAir();
VarSet(VAR_SECRET_BASE_STEP_COUNTER, 0);
VarSet(VAR_SECRET_BASE_LAST_ITEM_USED, 0);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, 0);
@@ -1749,252 +1750,245 @@ void sub_80EB218(void)
}
}
void sub_80EB290(void)
void CheckInteractedWithFriendsDollDecor(void)
{
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x800);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_DOLL);
}
void sub_80EB2C8(void)
void CheckInteractedWithFriendsCushionDecor(void)
{
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x400);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_CUSHION);
}
void sub_80EB300(void)
void DeclinedSecretBaseBattle(void)
{
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~0x3800);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~0x001);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x2000);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~(SECRET_BASE_BATTLED_WON | SECRET_BASE_BATTLED_LOST | SECRET_BASE_DECLINED_BATTLE));
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~(SECRET_BASE_BATTLED_DRAW));
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_DECLINED_BATTLE);
}
}
void sub_80EB368(void)
void WonSecretBaseBattle(void)
{
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~0x3800);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~0x001);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x800);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~(SECRET_BASE_BATTLED_WON | SECRET_BASE_BATTLED_LOST | SECRET_BASE_DECLINED_BATTLE));
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~(SECRET_BASE_BATTLED_DRAW));
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_BATTLED_WON);
}
}
void sub_80EB3D0(void)
void LostSecretBaseBattle(void)
{
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~0x3800);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~0x001);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x1000);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~(SECRET_BASE_BATTLED_WON | SECRET_BASE_BATTLED_LOST | SECRET_BASE_DECLINED_BATTLE));
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~(SECRET_BASE_BATTLED_DRAW));
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_BATTLED_LOST);
}
}
void sub_80EB438(void)
void DrewSecretBaseBattle(void)
{
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~0x3800);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~0x001);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x001);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~(SECRET_BASE_BATTLED_WON | SECRET_BASE_BATTLED_LOST | SECRET_BASE_DECLINED_BATTLE));
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~(SECRET_BASE_BATTLED_DRAW));
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_BATTLED_DRAW);
}
}
void SetSecretBaseSecretsTvFlags_Poster(void)
void CheckInteractedWithFriendsPosterDecor(void)
{
s16 x, y;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
switch (MapGridGetMetatileIdAt(x, y))
{
case 0x31C:
case 0x31D:
case 0x31E:
case 0x31F:
case 0x324:
case 0x325:
case 0x326:
case 0x327:
case 0x32C:
case 0x32D:
case 0x330:
case 0x331:
case 0x332:
case 0x333:
case 0x334:
case METATILE_SecretBase_PikaPoster_Left:
case METATILE_SecretBase_PikaPoster_Right:
case METATILE_SecretBase_LongPoster_Left:
case METATILE_SecretBase_LongPoster_Right:
case METATILE_SecretBase_SeaPoster_Left:
case METATILE_SecretBase_SeaPoster_Right:
case METATILE_SecretBase_SkyPoster_Left:
case METATILE_SecretBase_SkyPoster_Right:
case METATILE_SecretBase_KissPoster_Left:
case METATILE_SecretBase_KissPoster_Right:
case METATILE_SecretBase_BallPoster:
case METATILE_SecretBase_GreenPoster:
case METATILE_SecretBase_RedPoster:
case METATILE_SecretBase_BluePoster:
case METATILE_SecretBase_CutePoster:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x4000);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_POSTER);
break;
}
}
void SetSecretBaseSecretsTvFlags_MiscFurnature(void)
void CheckInteractedWithFriendsFurnitureBottom(void)
{
s16 x, y;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
switch (MapGridGetMetatileIdAt(x, y))
{
case 0x28a:
case 0x28b:
// Bird Statue
case METATILE_SecretBase_GlassOrnament_Base1:
case METATILE_SecretBase_GlassOrnament_Base2:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x40);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_GLASS_ORNAMENT);
break;
case 0x2d8:
case 0x2d9:
case 0x2da:
case 0x2db:
case 0x2dc:
case 0x2dd:
case 0x2e8:
case 0x2e9:
case 0x2ea:
case 0x2eb:
case 0x2ec:
case 0x2ed:
case 0x2ee:
case 0x2ef:
case 0x2f8:
case 0x2f9:
case 0x2fa:
case 0x2fb:
// Plants
case METATILE_SecretBase_RedPlant_Base1:
case METATILE_SecretBase_RedPlant_Base2:
case METATILE_SecretBase_TropicalPlant_Base1:
case METATILE_SecretBase_TropicalPlant_Base2:
case METATILE_SecretBase_PrettyFlower_Base1:
case METATILE_SecretBase_PrettyFlower_Base2:
case METATILE_SecretBase_ColorfulFlowers_BaseLeft1:
case METATILE_SecretBase_ColorfulFlowers_BaseRight1:
case METATILE_SecretBase_ColorfulFlowers_BaseLeft2:
case METATILE_SecretBase_ColorfulFlowers_BaseRight2:
case METATILE_SecretBase_BigPlant_BaseLeft1:
case METATILE_SecretBase_BigPlant_BaseRight1:
case METATILE_SecretBase_BigPlant_BaseLeft2:
case METATILE_SecretBase_BigPlant_BaseRight2:
case METATILE_SecretBase_GorgeousPlant_BaseLeft1:
case METATILE_SecretBase_GorgeousPlant_BaseRight1:
case METATILE_SecretBase_GorgeousPlant_BaseLeft2:
case METATILE_SecretBase_GorgeousPlant_BaseRight2:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x8);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_PLANT);
break;
case 0x22c:
case 0x233:
// Fence
case METATILE_SecretBase_Fence_Horizontal:
case METATILE_SecretBase_Fence_Vertical:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x40);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_FENCE);
break;
case 0x288:
case 0x289:
// Tire
case METATILE_SecretBase_Tire_BottomLeft:
case METATILE_SecretBase_Tire_BottomRight:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x100);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_TIRE);
break;
case 0x22d:
case 0x22e:
case 0x22f:
// Bricks
case METATILE_SecretBase_RedBrick_Bottom:
case METATILE_SecretBase_YellowBrick_Bottom:
case METATILE_SecretBase_BlueBrick_Bottom:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x10);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_BRICK);
break;
case 0x287:
case 0x28f:
case 0x298:
case 0x299:
case 0x29a:
case 0x29b:
case 0x29c:
case 0x29d:
case 0x29e:
case 0x29f:
case 0x2ab:
case 0x2b0:
case 0x2b1:
case 0x2b2:
case 0x2b4:
case 0x2b5:
case 0x2b6:
case 0x2b7:
case 0x2cb:
case 0x2cc:
case 0x2cd:
case 0x2ce:
case 0x2cf:
// Tables
case METATILE_SecretBase_SmallDesk:
case METATILE_SecretBase_PokemonDesk:
case METATILE_SecretBase_HeavyDesk_BottomLeft:
case METATILE_SecretBase_HeavyDesk_BottomMid:
case METATILE_SecretBase_HeavyDesk_BottomRight:
case METATILE_SecretBase_RaggedDesk_BottomLeft:
case METATILE_SecretBase_RaggedDesk_BottomMid:
case METATILE_SecretBase_RaggedDesk_BottomRight:
case METATILE_SecretBase_ComfortDesk_BottomLeft:
case METATILE_SecretBase_ComfortDesk_BottomMid:
case METATILE_SecretBase_ComfortDesk_BottomRight:
case METATILE_SecretBase_BrickDesk_BottomLeft:
case METATILE_SecretBase_BrickDesk_BottomMid:
case METATILE_SecretBase_BrickDesk_BottomRight:
case METATILE_SecretBase_CampDesk_BottomLeft:
case METATILE_SecretBase_CampDesk_BottomMid:
case METATILE_SecretBase_CampDesk_BottomRight:
case METATILE_SecretBase_HardDesk_BottomLeft:
case METATILE_SecretBase_HardDesk_BottomMid:
case METATILE_SecretBase_HardDesk_BottomRight:
case METATILE_SecretBase_PrettyDesk_BottomLeft:
case METATILE_SecretBase_PrettyDesk_BottomMid:
case METATILE_SecretBase_PrettyDesk_BottomRight:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x8);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_DESK);
break;
}
}
void SetSecretBaseSecretsTvFlags_LargeDecorationSpot(void)
void CheckInteractedWithFriendsFurnitureMiddle(void)
{
s16 x, y;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
switch (MapGridGetMetatileIdAt(x, y))
{
case 0x291:
case 0x294:
case 0x297:
case 0x2a1:
case 0x2a5:
case 0x2a9:
case 0x2ad:
case 0x2bb:
case 0x2be:
case 0x2c3:
case 0x2c6:
case METATILE_SecretBase_HeavyDesk_TopMid:
case METATILE_SecretBase_RaggedDesk_TopMid:
case METATILE_SecretBase_ComfortDesk_TopMid:
case METATILE_SecretBase_BrickDesk_TopMid:
case METATILE_SecretBase_BrickDesk_Center:
case METATILE_SecretBase_CampDesk_TopMid:
case METATILE_SecretBase_CampDesk_Center:
case METATILE_SecretBase_HardDesk_TopMid:
case METATILE_SecretBase_HardDesk_Center:
case METATILE_SecretBase_PrettyDesk_TopMid:
case METATILE_SecretBase_PrettyDesk_Center:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x8);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_DESK);
break;
}
}
void SetSecretBaseSecretsTvFlags_SmallDecorationSpot(void)
void CheckInteractedWithFriendsFurnitureTop(void)
{
s16 x, y;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
switch (MapGridGetMetatileIdAt(x, y))
{
case 0x290:
case 0x292:
case 0x293:
case 0x295:
case 0x296:
case 0x2a0:
case 0x2a2:
case 0x2a3:
case 0x2a4:
case 0x2a6:
case 0x2a7:
case 0x2a8:
case 0x2aa:
case 0x2ac:
case 0x2ae:
case 0x2af:
case 0x2bc:
case 0x2bd:
case 0x2bf:
case 0x2c4:
case 0x2c5:
case 0x2c7:
case METATILE_SecretBase_HeavyDesk_TopLeft:
case METATILE_SecretBase_HeavyDesk_TopRight:
case METATILE_SecretBase_RaggedDesk_TopLeft:
case METATILE_SecretBase_RaggedDesk_TopRight:
case METATILE_SecretBase_ComfortDesk_TopLeft:
case METATILE_SecretBase_ComfortDesk_TopRight:
case METATILE_SecretBase_BrickDesk_TopLeft:
case METATILE_SecretBase_BrickDesk_TopRight:
case METATILE_SecretBase_BrickDesk_MidLeft:
case METATILE_SecretBase_BrickDesk_MidRight:
case METATILE_SecretBase_CampDesk_TopLeft:
case METATILE_SecretBase_CampDesk_TopRight:
case METATILE_SecretBase_CampDesk_MidLeft:
case METATILE_SecretBase_CampDesk_MidRight:
case METATILE_SecretBase_HardDesk_TopLeft:
case METATILE_SecretBase_HardDesk_TopRight:
case METATILE_SecretBase_HardDesk_MidLeft:
case METATILE_SecretBase_HardDesk_MidRight:
case METATILE_SecretBase_PrettyDesk_TopLeft:
case METATILE_SecretBase_PrettyDesk_TopRight:
case METATILE_SecretBase_PrettyDesk_MidLeft:
case METATILE_SecretBase_PrettyDesk_MidRight:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x8);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_DESK);
break;
case 0x280:
case 0x281:
case METATILE_SecretBase_Tire_TopLeft:
case METATILE_SecretBase_Tire_TopRight:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x100);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_TIRE);
break;
case 0x225:
case 0x226:
case 0x227:
case METATILE_SecretBase_RedBrick_Top:
case METATILE_SecretBase_YellowBrick_Top:
case METATILE_SecretBase_BlueBrick_Top:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x10);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_BRICK);
break;
}
}
void SetSecretBaseSecretsTvFlags_SandOrnament(void)
void CheckInteractedWithFriendsSandOrnament(void)
{
s16 x, y;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
switch ((int)MapGridGetMetatileIdAt(x, y))
{
case 0x28d:
case 0x28e:
// Sand Ornament
case METATILE_SecretBase_SandOrnament_Base1:
case METATILE_SecretBase_SandOrnament_Base2:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x4);
VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SAND_ORNAMENT);
break;
}
}

375
src/tv.c
View File

@@ -637,50 +637,51 @@ static const u8 *const sTVWhatsNo1InHoennTodayTextGroup[] = {
gTVWhatsNo1InHoennTodayText08
};
static const u8 *const sTVSecretBaseSecretsTextGroup[] = {
gTVSecretBaseSecretsText00,
gTVSecretBaseSecretsText01,
gTVSecretBaseSecretsText02,
gTVSecretBaseSecretsText03,
gTVSecretBaseSecretsText04,
gTVSecretBaseSecretsText05,
gTVSecretBaseSecretsText06,
gTVSecretBaseSecretsText07,
gTVSecretBaseSecretsText08,
gTVSecretBaseSecretsText09,
gTVSecretBaseSecretsText10,
gTVSecretBaseSecretsText11,
gTVSecretBaseSecretsText12,
gTVSecretBaseSecretsText13,
gTVSecretBaseSecretsText14,
gTVSecretBaseSecretsText15,
gTVSecretBaseSecretsText16,
gTVSecretBaseSecretsText17,
gTVSecretBaseSecretsText18,
gTVSecretBaseSecretsText19,
gTVSecretBaseSecretsText20,
gTVSecretBaseSecretsText21,
gTVSecretBaseSecretsText22,
gTVSecretBaseSecretsText23,
gTVSecretBaseSecretsText24,
gTVSecretBaseSecretsText25,
gTVSecretBaseSecretsText26,
gTVSecretBaseSecretsText27,
gTVSecretBaseSecretsText28,
gTVSecretBaseSecretsText29,
gTVSecretBaseSecretsText30,
gTVSecretBaseSecretsText31,
gTVSecretBaseSecretsText32,
gTVSecretBaseSecretsText33,
gTVSecretBaseSecretsText34,
gTVSecretBaseSecretsText35,
gTVSecretBaseSecretsText36,
gTVSecretBaseSecretsText37,
gTVSecretBaseSecretsText38,
gTVSecretBaseSecretsText39,
gTVSecretBaseSecretsText40,
gTVSecretBaseSecretsText41,
gTVSecretBaseSecretsText42
static const u8 *const sTVSecretBaseSecretsTextGroup[SBSECRETS_NUM_STATES] =
{
[SBSECRETS_STATE_INTRO] = TVSecretBaseSecrets_Text_Intro,
[SBSECRETS_STATE_DO_NEXT1] = TVSecretBaseSecrets_Text_WhatWillPlayerDoNext1,
[SBSECRETS_STATE_DO_NEXT2] = TVSecretBaseSecrets_Text_WhatWillPlayerDoNext2,
[SBSECRETS_STATE_TOOK_X_STEPS] = TVSecretBaseSecrets_Text_TookXStepsBeforeLeaving,
[SBSECRETS_STATE_BASE_INTEREST_LOW] = TVSecretBaseSecrets_Text_BaseFailedToInterestPlayer,
[SBSECRETS_STATE_BASE_INTEREST_MED] = TVSecretBaseSecrets_Text_PlayerEnjoyedBase,
[SBSECRETS_STATE_BASE_INTEREST_HIGH] = TVSecretBaseSecrets_Text_PlayerHugeFanOfBase,
[SBSECRETS_STATE_OUTRO] = TVSecretBaseSecrets_Text_Outro,
[SBSECRETS_STATE_NOTHING_USED1] = TVSecretBaseSecrets_Text_StoppedMoving1,
[SBSECRETS_STATE_NOTHING_USED2] = TVSecretBaseSecrets_Text_StoppedMoving2,
[SBSECRETS_STATE_USED_CHAIR] = TVSecretBaseSecrets_Text_UsedChair,
[SBSECRETS_STATE_USED_BALLOON] = TVSecretBaseSecrets_Text_UsedBalloon,
[SBSECRETS_STATE_USED_TENT] = TVSecretBaseSecrets_Text_UsedTent,
[SBSECRETS_STATE_USED_PLANT] = TVSecretBaseSecrets_Text_UsedPlant,
[SBSECRETS_STATE_USED_GOLD_SHIELD] = TVSecretBaseSecrets_Text_UsedGoldShield,
[SBSECRETS_STATE_USED_SILVER_SHIELD] = TVSecretBaseSecrets_Text_UsedSilverShield,
[SBSECRETS_STATE_USED_GLASS_ORNAMENT] = TVSecretBaseSecrets_Text_UsedGlassOrnament,
[SBSECRETS_STATE_USED_TV] = TVSecretBaseSecrets_Text_UsedTV,
[SBSECRETS_STATE_USED_MUD_BALL] = TVSecretBaseSecrets_Text_UsedMudBall,
[SBSECRETS_STATE_USED_BAG] = TVSecretBaseSecrets_Text_UsedBag,
[SBSECRETS_STATE_USED_CUSHION] = TVSecretBaseSecrets_Text_UsedCushion,
[SBSECRETS_STATE_HIT_CUSHION] = TVSecretBaseSecrets_Text_HitCushion,
[SBSECRETS_STATE_HUGGED_CUSHION] = TVSecretBaseSecrets_Text_HuggedCushion,
[SBSECRETS_STATE_BATTLED_WON] = TVSecretBaseSecrets_Text_BattledWon,
[SBSECRETS_STATE_BATTLED_LOST] = TVSecretBaseSecrets_Text_BattledLost,
[SBSECRETS_STATE_DECLINED_BATTLE] = TVSecretBaseSecrets_Text_DeclinedBattle,
[SBSECRETS_STATE_USED_POSTER] = TVSecretBaseSecrets_Text_UsedPoster,
[SBSECRETS_STATE_USED_NOTE_MAT] = TVSecretBaseSecrets_Text_UsedNoteMat,
[SBSECRETS_STATE_BATTLED_DRAW] = TVSecretBaseSecrets_Text_BattledDraw,
[SBSECRETS_STATE_USED_SPIN_MAT] = TVSecretBaseSecrets_Text_UsedSpinMat,
[SBSECRETS_STATE_USED_SAND_ORNAMENT] = TVSecretBaseSecrets_Text_UsedSandOrnament,
[SBSECRETS_STATE_USED_DESK] = TVSecretBaseSecrets_Text_UsedDesk,
[SBSECRETS_STATE_USED_BRICK] = TVSecretBaseSecrets_Text_UsedBrick,
[SBSECRETS_STATE_USED_SOLID_BOARD] = TVSecretBaseSecrets_Text_UsedSolidBoard,
[SBSECRETS_STATE_USED_FENCE] = TVSecretBaseSecrets_Text_UsedFence,
[SBSECRETS_STATE_USED_GLITTER_MAT] = TVSecretBaseSecrets_Text_UsedGlitterMat,
[SBSECRETS_STATE_USED_TIRE] = TVSecretBaseSecrets_Text_UsedTire,
[SBSECRETS_STATE_USED_STAND] = TVSecretBaseSecrets_Text_UsedStand,
[SBSECRETS_STATE_USED_BREAKABLE_DOOR] = TVSecretBaseSecrets_Text_BrokeDoor,
[SBSECRETS_STATE_USED_DOLL] = TVSecretBaseSecrets_Text_UsedDoll,
[SBSECRETS_STATE_USED_SLIDE] = TVSecretBaseSecrets_Text_UsedSlide,
[SBSECRETS_STATE_DECLINED_SLIDE] = TVSecretBaseSecrets_Text_UsedSlideButDidntGoDown,
[SBSECRETS_STATE_USED_JUMP_MAT] = TVSecretBaseSecrets_Text_UsedJumpMat
};
static const u8 *const sTVSafariFanClubTextGroup[] = {
@@ -709,39 +710,42 @@ static const u8 *const sTVInSearchOfTrainersTextGroup[] = {
gTVInSearchOfTrainersText08
};
const u8 sTVSecretBaseSecretsStateLookup[] = {
0x0a,
0x0b,
0x0c,
0x0d,
0x0e,
0x0f,
0x10,
0x11,
0x12,
0x13,
0x14,
0x17,
0x18,
0x19,
0x1a,
0x1b,
0x1c,
0x1d,
0x1e,
0x1f,
0x20,
0x21,
0x22,
0x23,
0x24,
0x25,
0x26,
0x27,
0x28,
0x29,
0x2a,
0x2b
// Secret Base Secrets TV Show states for actions that can be taken in a secret base
// The flags that determine whether or not the action was taken are commented
const u8 sTVSecretBaseSecretsActions[NUM_SECRET_BASE_FLAGS] =
{
SBSECRETS_STATE_USED_CHAIR, // SECRET_BASE_USED_CHAIR
SBSECRETS_STATE_USED_BALLOON, // SECRET_BASE_USED_BALLOON
SBSECRETS_STATE_USED_TENT, // SECRET_BASE_USED_TENT
SBSECRETS_STATE_USED_PLANT, // SECRET_BASE_USED_PLANT
SBSECRETS_STATE_USED_GOLD_SHIELD, // SECRET_BASE_USED_GOLD_SHIELD
SBSECRETS_STATE_USED_SILVER_SHIELD, // SECRET_BASE_USED_SILVER_SHIELD
SBSECRETS_STATE_USED_GLASS_ORNAMENT, // SECRET_BASE_USED_GLASS_ORNAMENT
SBSECRETS_STATE_USED_TV, // SECRET_BASE_USED_TV
SBSECRETS_STATE_USED_MUD_BALL, // SECRET_BASE_USED_MUD_BALL
SBSECRETS_STATE_USED_BAG, // SECRET_BASE_USED_BAG
SBSECRETS_STATE_USED_CUSHION, // SECRET_BASE_USED_CUSHION
SBSECRETS_STATE_BATTLED_WON, // SECRET_BASE_BATTLED_WON
SBSECRETS_STATE_BATTLED_LOST, // SECRET_BASE_BATTLED_LOST
SBSECRETS_STATE_DECLINED_BATTLE, // SECRET_BASE_DECLINED_BATTLE
SBSECRETS_STATE_USED_POSTER, // SECRET_BASE_USED_POSTER
SBSECRETS_STATE_USED_NOTE_MAT, // SECRET_BASE_USED_NOTE_MAT
SBSECRETS_STATE_BATTLED_DRAW, // SECRET_BASE_BATTLED_DRAW
SBSECRETS_STATE_USED_SPIN_MAT, // SECRET_BASE_USED_SPIN_MAT
SBSECRETS_STATE_USED_SAND_ORNAMENT, // SECRET_BASE_USED_SAND_ORNAMENT
SBSECRETS_STATE_USED_DESK, // SECRET_BASE_USED_DESK
SBSECRETS_STATE_USED_BRICK, // SECRET_BASE_USED_BRICK
SBSECRETS_STATE_USED_SOLID_BOARD, // SECRET_BASE_USED_SOLID_BOARD
SBSECRETS_STATE_USED_FENCE, // SECRET_BASE_USED_FENCE
SBSECRETS_STATE_USED_GLITTER_MAT, // SECRET_BASE_USED_GLITTER_MAT
SBSECRETS_STATE_USED_TIRE, // SECRET_BASE_USED_TIRE
SBSECRETS_STATE_USED_STAND, // SECRET_BASE_USED_STAND
SBSECRETS_STATE_USED_BREAKABLE_DOOR, // SECRET_BASE_USED_BREAKABLE_DOOR
SBSECRETS_STATE_USED_DOLL, // SECRET_BASE_USED_DOLL
SBSECRETS_STATE_USED_SLIDE, // SECRET_BASE_USED_SLIDE
SBSECRETS_STATE_DECLINED_SLIDE, // SECRET_BASE_DECLINED_SLIDE
SBSECRETS_STATE_USED_JUMP_MAT, // SECRET_BASE_USED_JUMP_MAT
SBSECRETS_NUM_STATES // SECRET_BASE_UNUSED_FLAG. Odd that this is included, if it were used it would overflow sTVSecretBaseSecretsTextGroup
};
// .text
@@ -2544,7 +2548,7 @@ void TryPutFrontierTVShowOnAir(u16 winStreak, u8 facilityAndMode)
}
}
void sub_80EEA70(void)
void TryPutSecretBaseSecretsOnAir(void)
{
TVShow *show;
u8 strbuf[32];
@@ -3591,7 +3595,7 @@ void GetMomOrDadStringForTVMessage(void)
}
}
void sub_80F01B8(void)
void HideBattleTowerReporter(void)
{
VarSet(VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, 0);
RemoveEventObjectByLocalIdAndMap(5, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
@@ -7340,35 +7344,32 @@ static void DoTVShowWhatsNo1InHoennToday(void)
ShowFieldMessage(sTVWhatsNo1InHoennTodayTextGroup[state]);
}
u8 TVShowGetFlagCount(TVShow *show)
u8 SecretBaseSecrets_GetNumActionsTaken(TVShow *show)
{
u8 i;
u8 tot;
u8 flagsSet;
for (i = 0, tot = 0; i < 32; i ++)
for (i = 0, flagsSet = 0; i < NUM_SECRET_BASE_FLAGS; i ++)
{
if ((show->secretBaseSecrets.flags >> i) & 1)
{
tot ++;
}
flagsSet++;
}
return tot;
return flagsSet;
}
static u8 SecretBaseSecrets_GetStateForFlagNumber(TVShow *show, u8 a1)
static u8 SecretBaseSecrets_GetStateByFlagNumber(TVShow *show, u8 flagId)
{
u8 i;
u8 tot;
u8 flagsSet;
for (i = 0, tot = 0; i < 32; i ++)
for (i = 0, flagsSet = 0; i < NUM_SECRET_BASE_FLAGS; i ++)
{
if ((show->secretBaseSecrets.flags >> i) & 1)
{
if (tot == a1)
{
return sTVSecretBaseSecretsStateLookup[i];
}
tot ++;
if (flagsSet == flagId)
return sTVSecretBaseSecretsActions[i];
flagsSet++;
}
}
return 0;
@@ -7378,7 +7379,7 @@ static void DoTVShowSecretBaseSecrets(void)
{
TVShow *show;
u8 state;
u8 bitCount;
u8 numActions;
u16 i;
show = &gSaveBlock1Ptr->tvShows[gSpecialVar_0x8004];
@@ -7386,226 +7387,128 @@ static void DoTVShowSecretBaseSecrets(void)
state = sTVShowState;
switch (state)
{
case 0:
case SBSECRETS_STATE_INTRO:
TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
bitCount = TVShowGetFlagCount(show);
if (bitCount == 0)
numActions = SecretBaseSecrets_GetNumActionsTaken(show);
if (numActions == 0)
{
sTVShowState = 8;
sTVShowState = SBSECRETS_STATE_NOTHING_USED1;
}
else
{
show->secretBaseSecrets.savedState = 1;
sTVSecretBaseSecretsRandomValues[0] = Random() % bitCount;
sTVShowState = SecretBaseSecrets_GetStateForFlagNumber(show, sTVSecretBaseSecretsRandomValues[0]);
show->secretBaseSecrets.savedState = SBSECRETS_STATE_DO_NEXT1;
sTVSecretBaseSecretsRandomValues[0] = Random() % numActions;
sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, sTVSecretBaseSecretsRandomValues[0]);
}
break;
case 1:
case SBSECRETS_STATE_DO_NEXT1:
TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
bitCount = TVShowGetFlagCount(show);
switch (bitCount)
numActions = SecretBaseSecrets_GetNumActionsTaken(show);
switch (numActions)
{
case 1:
sTVShowState = 9;
sTVShowState = SBSECRETS_STATE_NOTHING_USED2;
break;
case 2:
show->secretBaseSecrets.savedState = 2;
show->secretBaseSecrets.savedState = SBSECRETS_STATE_DO_NEXT2;
if (sTVSecretBaseSecretsRandomValues[0] == 0)
{
sTVShowState = SecretBaseSecrets_GetStateForFlagNumber(show, 1);
sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, 1);
}
else
{
sTVShowState = SecretBaseSecrets_GetStateForFlagNumber(show, 0);
sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, 0);
}
break;
default:
for (i = 0; i < 0xFFFF; i ++)
{
sTVSecretBaseSecretsRandomValues[1] = Random() % bitCount;
sTVSecretBaseSecretsRandomValues[1] = Random() % numActions;
if (sTVSecretBaseSecretsRandomValues[1] != sTVSecretBaseSecretsRandomValues[0])
{
break;
}
}
show->secretBaseSecrets.savedState = 2;
sTVShowState = SecretBaseSecrets_GetStateForFlagNumber(show, sTVSecretBaseSecretsRandomValues[1]);
show->secretBaseSecrets.savedState = SBSECRETS_STATE_DO_NEXT2;
sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, sTVSecretBaseSecretsRandomValues[1]);
break;
}
break;
case 2:
case SBSECRETS_STATE_DO_NEXT2:
TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
bitCount = TVShowGetFlagCount(show);
if (bitCount == 2)
numActions = SecretBaseSecrets_GetNumActionsTaken(show);
if (numActions == 2)
{
sTVShowState = 9;
sTVShowState = SBSECRETS_STATE_NOTHING_USED2;
}
else
{
for (i = 0; i < 0xFFFF; i ++)
{
sTVSecretBaseSecretsRandomValues[2] = Random() % bitCount;
sTVSecretBaseSecretsRandomValues[2] = Random() % numActions;
if (sTVSecretBaseSecretsRandomValues[2] != sTVSecretBaseSecretsRandomValues[0] && sTVSecretBaseSecretsRandomValues[2] != sTVSecretBaseSecretsRandomValues[1])
{
break;
}
}
show->secretBaseSecrets.savedState = 3;
sTVShowState = SecretBaseSecrets_GetStateForFlagNumber(show, sTVSecretBaseSecretsRandomValues[2]);
show->secretBaseSecrets.savedState = SBSECRETS_STATE_TOOK_X_STEPS;
sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, sTVSecretBaseSecretsRandomValues[2]);
}
break;
case 3:
case SBSECRETS_STATE_TOOK_X_STEPS:
TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
TV_PrintIntToStringVar(2, show->secretBaseSecrets.stepsInBase);
if (show->secretBaseSecrets.stepsInBase <= 30)
{
sTVShowState = 4;
sTVShowState = SBSECRETS_STATE_BASE_INTEREST_LOW;
}
else if (show->secretBaseSecrets.stepsInBase <= 100)
{
sTVShowState = 5;
sTVShowState = SBSECRETS_STATE_BASE_INTEREST_MED;
}
else
{
sTVShowState = 6;
sTVShowState = SBSECRETS_STATE_BASE_INTEREST_HIGH;
}
break;
case 4:
case SBSECRETS_STATE_BASE_INTEREST_LOW ... SBSECRETS_STATE_BASE_INTEREST_HIGH:
TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
sTVShowState = 7;
sTVShowState = SBSECRETS_STATE_OUTRO;
break;
case 5:
TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
sTVShowState = 7;
break;
case 6:
TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
sTVShowState = 7;
break;
case 7:
case SBSECRETS_STATE_OUTRO:
TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
TVShowDone();
break;
case 8:
sTVShowState = 3;
// All below states are descriptions of what the player interacted with while in the secret base
case SBSECRETS_STATE_NOTHING_USED1:
sTVShowState = SBSECRETS_STATE_TOOK_X_STEPS;
break;
case 9:
sTVShowState = 3;
case SBSECRETS_STATE_NOTHING_USED2:
sTVShowState = SBSECRETS_STATE_TOOK_X_STEPS;
break;
case 10:
case SBSECRETS_STATE_USED_CHAIR ... SBSECRETS_STATE_USED_MUD_BALL:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 11:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 12:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 13:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 14:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 15:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 16:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 17:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 18:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 19:
case SBSECRETS_STATE_USED_BAG:
StringCopy(gStringVar2, ItemId_GetName(show->secretBaseSecrets.item));
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 20:
case SBSECRETS_STATE_USED_CUSHION:
// Randomly decide based on trainer ID if the player hugged or hit the cushion
if (show->common.trainerIdLo & 1)
{
sTVShowState = 22;
sTVShowState = SBSECRETS_STATE_HUGGED_CUSHION;
}
else
{
sTVShowState = 21;
sTVShowState = SBSECRETS_STATE_HIT_CUSHION;
}
break;
case 21:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 22:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 23:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 24:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 25:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 26:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 27:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 28:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 29:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 30:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 31:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 32:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 33:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 34:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 35:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 36:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 37:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 38:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 39:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 40:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 41:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 42:
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 43:
case SBSECRETS_STATE_HIT_CUSHION ... SBSECRETS_NUM_STATES:
sTVShowState = show->secretBaseSecrets.savedState;
break;
}