pokeemerald/src/post_battle_event_funcs.c
2018-12-27 16:52:13 -06:00

94 lines
2.4 KiB
C

#include "global.h"
#include "main.h"
#include "credits.h"
#include "event_data.h"
#include "hall_of_fame.h"
#include "load_save.h"
#include "overworld.h"
#include "script_pokemon_util_80F87D8.h"
#include "tv.h"
#include "constants/heal_locations.h"
#include "constants/flags.h"
int GameClear(void)
{
int i;
bool32 ribbonGet;
struct RibbonCounter {
u8 partyIndex;
u8 count;
} ribbonCounts[6];
HealPlayerParty();
if (FlagGet(FLAG_SYS_GAME_CLEAR) == TRUE)
{
gHasHallOfFameRecords = TRUE;
}
else
{
gHasHallOfFameRecords = FALSE;
FlagSet(FLAG_SYS_GAME_CLEAR);
}
if (GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME) == 0)
SetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME, (gSaveBlock2Ptr->playTimeHours << 16) | (gSaveBlock2Ptr->playTimeMinutes << 8) | gSaveBlock2Ptr->playTimeSeconds);
SetContinueGameWarpStatus();
if (gSaveBlock2Ptr->playerGender == MALE)
SetContinueGameWarpToHealLocation(HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F);
else
SetContinueGameWarpToHealLocation(HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F);
ribbonGet = FALSE;
for (i = 0; i < PARTY_SIZE; i++)
{
struct Pokemon *mon = &gPlayerParty[i];
ribbonCounts[i].partyIndex = i;
ribbonCounts[i].count = 0;
if (GetMonData(mon, MON_DATA_SANITY_HAS_SPECIES)
&& !GetMonData(mon, MON_DATA_SANITY_IS_EGG)
&& !GetMonData(mon, MON_DATA_CHAMPION_RIBBON))
{
u8 val[1] = {TRUE};
SetMonData(mon, MON_DATA_CHAMPION_RIBBON, val);
ribbonCounts[i].count = GetRibbonCount(mon);
ribbonGet = TRUE;
}
}
if (ribbonGet == TRUE)
{
IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS);
FlagSet(FLAG_SYS_RIBBON_GET);
for (i = 1; i < 6; i++)
{
if (ribbonCounts[i].count > ribbonCounts[0].count)
{
struct RibbonCounter prevBest = ribbonCounts[0];
ribbonCounts[0] = ribbonCounts[i];
ribbonCounts[i] = prevBest;
}
}
if (ribbonCounts[0].count > 4)
{
sub_80EE4DC(&gPlayerParty[ribbonCounts[0].partyIndex], MON_DATA_CHAMPION_RIBBON);
}
}
SetMainCallback2(CB2_DoHallOfFameScreen);
return 0;
}
bool8 sp0C8_whiteout_maybe(void)
{
SetMainCallback2(CB2_WhiteOut);
return FALSE;
}