summaryrefslogtreecommitdiff
path: root/src/overworld.c
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2020-03-26 19:59:05 -0400
committerPikalaxALT <PikalaxALT@gmail.com>2020-03-26 19:59:05 -0400
commit012f8ed12f2425a13602ec2cb3cb379d756b8bbd (patch)
tree09ccdcecb38bedea4b876aae1170de74d1d3bdc1 /src/overworld.c
parent84a69bf1404d6d6545c72c39a5b5105fbdb8c36c (diff)
through sub_8054F38
Diffstat (limited to 'src/overworld.c')
-rw-r--r--src/overworld.c123
1 files changed, 119 insertions, 4 deletions
diff --git a/src/overworld.c b/src/overworld.c
index 5a065ed92..ec843dd4a 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -3,16 +3,33 @@
#include "event_data.h"
#include "event_scripts.h"
#include "field_specials.h"
+#include "load_save.h"
#include "money.h"
#include "overworld.h"
+#include "roamer.h"
#include "script.h"
#include "script_pokemon_util.h"
#include "constants/maps.h"
#include "constants/flags.h"
+struct InitialPlayerAvatarState
+{
+ u8 transitionFlags;
+ u8 direction;
+ u8 unk2;
+};
+
+
+EWRAM_DATA struct WarpData gUnknown_2031DB4 = {};
+EWRAM_DATA struct WarpData gUnknown_2031DBC = {};
+EWRAM_DATA struct WarpData gUnknown_2031DC4 = {};
+EWRAM_DATA struct WarpData gUnknown_2031DCC = {};
+EWRAM_DATA struct InitialPlayerAvatarState gUnknown_2031DD4 = {};
+
u8 CountBadgesForOverworldWhiteOutLossCalculation(void);
-void sub_8054DD8(void);
-void sub_80554BC(void);
+void Overworld_ResetStateAfterWhitingOut(void);
+void Overworld_SetWhiteoutRespawnPoint(void);
+void sub_805610C(void);
static const u8 sWhiteOutMoneyLossMultipliers[] = {
2,
@@ -42,8 +59,8 @@ void sub_8054BC8(void)
ScriptContext2_RunNewScript(EventScript_ResetEliteFourEnd);
RemoveMoney(&gSaveBlock1Ptr->money, ComputeWhiteOutMoneyLoss());
HealPlayerParty();
- sub_8054DD8();
- sub_80554BC();
+ Overworld_ResetStateAfterWhitingOut();
+ Overworld_SetWhiteoutRespawnPoint();
WarpIntoMap();
}
@@ -89,3 +106,101 @@ void Overworld_ResetStateAfterFly(void)
FlagClear(FLAG_0x808);
VarSet(VAR_0x404D, 0);
}
+
+void Overworld_ResetStateAfterTeleport(void)
+{
+ ResetInitialPlayerAvatarState();
+ FlagClear(FLAG_SYS_ON_CYCLING_ROAD);
+ VarSet(VAR_MAP_SCENE_ROUTE16, 0);
+ FlagClear(FLAG_SYS_UNK_802);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_FLASH_ACTIVE);
+ FlagClear(FLAG_0x808);
+ VarSet(VAR_0x404D, 0);
+}
+
+void Overworld_ResetStateAfterDigEscRope(void)
+{
+ ResetInitialPlayerAvatarState();
+ FlagClear(FLAG_SYS_ON_CYCLING_ROAD);
+ VarSet(VAR_MAP_SCENE_ROUTE16, 0);
+ FlagClear(FLAG_SYS_UNK_802);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_FLASH_ACTIVE);
+ FlagClear(FLAG_0x808);
+ VarSet(VAR_0x404D, 0);
+}
+
+void Overworld_ResetStateAfterWhitingOut(void)
+{
+ ResetInitialPlayerAvatarState();
+ FlagClear(FLAG_SYS_ON_CYCLING_ROAD);
+ VarSet(VAR_MAP_SCENE_ROUTE16, 0);
+ FlagClear(FLAG_SYS_UNK_802);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_FLASH_ACTIVE);
+ FlagClear(FLAG_0x808);
+ VarSet(VAR_0x404D, 0);
+}
+
+void sub_8054E40(void)
+{
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
+ sub_805610C();
+ UpdateLocationHistoryForRoamer();
+ RoamerMoveToOtherLocationSet();
+}
+
+void ResetGameStats(void)
+{
+ int i;
+
+ for (i = 0; i < NUM_GAME_STATS; i++)
+ {
+ gSaveBlock1Ptr->gameStats[i] = 0;
+ }
+}
+
+void IncrementGameStat(u8 statId)
+{
+ u32 statVal;
+ if (statId >= NUM_USED_GAME_STATS)
+ return;
+ statVal = GetGameStat(statId);
+ if (statVal < 0xFFFFFF)
+ statVal++;
+ else
+ statVal = 0xFFFFFF;
+ SetGameStat(statId, statVal);
+}
+
+u32 GetGameStat(u8 statId)
+{
+ if (statId >= NUM_USED_GAME_STATS)
+ return 0;
+ else
+ return gSaveBlock1Ptr->gameStats[statId] ^ gSaveBlock2Ptr->encryptionKey;
+}
+
+void SetGameStat(u8 statId, u32 statVal)
+{
+ if (statId >= NUM_USED_GAME_STATS)
+ return;
+ gSaveBlock1Ptr->gameStats[statId] = statVal ^ gSaveBlock2Ptr->encryptionKey;
+}
+
+void sub_8054F38(u32 newKey)
+{
+ u8 i;
+ for (i = 0; i < NUM_GAME_STATS; i++)
+ {
+ ApplyNewEncryptionKeyToWord(&gSaveBlock1Ptr->gameStats[i], newKey);
+ }
+}