diff options
author | Diegoisawesome <diego@domoreaweso.me> | 2018-10-20 19:53:41 -0500 |
---|---|---|
committer | Diegoisawesome <diego@domoreaweso.me> | 2018-10-20 19:53:41 -0500 |
commit | 97bbb326b8c94e0fc90bceb4e5dea1b80f86822f (patch) | |
tree | c51dd11ce4419ed55d6e06760a3b29f9b4ab1646 /src | |
parent | 2a3ba78831f2dca1ff0d3fe3f03844a993597b28 (diff) |
GameClear nonsense
Diffstat (limited to 'src')
-rw-r--r-- | src/load_save.c | 2 | ||||
-rw-r--r-- | src/post_battle_event_funcs.c | 88 |
2 files changed, 89 insertions, 1 deletions
diff --git a/src/load_save.c b/src/load_save.c index 005af7c42..45b4d200b 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -144,7 +144,7 @@ void ClearSecretBase2Field_9(void) gSaveBlock2Ptr->specialSaveWarp &= ~1; } -void sub_8076D48(void) +void SetSecretBase2Field_9(void) { gSaveBlock2Ptr->specialSaveWarp |= 1; } diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c new file mode 100644 index 000000000..8df702570 --- /dev/null +++ b/src/post_battle_event_funcs.c @@ -0,0 +1,88 @@ +#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]; + s8 val; + + 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); + + SetSecretBase2Field_9(); + + if (gSaveBlock2Ptr->playerGender == MALE) + sub_8084F6C(HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F); + else + sub_8084F6C(HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F); + + ribbonGet = FALSE; + + for (i = 0; i < 6; i++) + { + struct Pokemon *mon = &gPlayerParty[i]; + + ribbonCounts[i].partyIndex = i; + ribbonCounts[i].count = 0; + + if (GetMonData(mon, MON_DATA_SANITY_BIT2) + && !GetMonData(mon, MON_DATA_SANITY_BIT3) + && !GetMonData(mon, MON_DATA_CHAMPION_RIBBON)) + { + val = 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[0].count > ribbonCounts[i].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; +} |