through sub_8054F38
This commit is contained in:
+119
-4
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user