summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDiegoisawesome <diego@domoreaweso.me>2018-10-20 19:53:41 -0500
committerDiegoisawesome <diego@domoreaweso.me>2018-10-20 19:53:41 -0500
commit97bbb326b8c94e0fc90bceb4e5dea1b80f86822f (patch)
treec51dd11ce4419ed55d6e06760a3b29f9b4ab1646 /src
parent2a3ba78831f2dca1ff0d3fe3f03844a993597b28 (diff)
GameClear nonsense
Diffstat (limited to 'src')
-rw-r--r--src/load_save.c2
-rw-r--r--src/post_battle_event_funcs.c88
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;
+}