through sub_8054F38

This commit is contained in:
PikalaxALT 2020-03-26 19:59:05 -04:00
parent 84a69bf140
commit 012f8ed12f
3 changed files with 123 additions and 288 deletions

View File

@ -5,286 +5,6 @@
.text
thumb_func_start Overworld_ResetStateAfterTeleport
Overworld_ResetStateAfterTeleport: @ 8054D08
push {lr}
bl ResetInitialPlayerAvatarState
movs r0, 0x83
lsls r0, 4
bl FlagClear
ldr r0, _08054D54 @ =0x0000405e
movs r1, 0
bl VarSet
ldr r0, _08054D58 @ =0x00000802
bl FlagClear
movs r0, 0x80
lsls r0, 4
bl FlagClear
ldr r0, _08054D5C @ =0x0000406e
movs r1, 0
bl VarSet
ldr r0, _08054D60 @ =0x00000805
bl FlagClear
ldr r0, _08054D64 @ =0x00000806
bl FlagClear
ldr r0, _08054D68 @ =0x00000808
bl FlagClear
ldr r0, _08054D6C @ =0x0000404d
movs r1, 0
bl VarSet
pop {r0}
bx r0
.align 2, 0
_08054D54: .4byte 0x0000405e
_08054D58: .4byte 0x00000802
_08054D5C: .4byte 0x0000406e
_08054D60: .4byte 0x00000805
_08054D64: .4byte 0x00000806
_08054D68: .4byte 0x00000808
_08054D6C: .4byte 0x0000404d
thumb_func_end Overworld_ResetStateAfterTeleport
thumb_func_start Overworld_ResetStateAfterDigEscRope
Overworld_ResetStateAfterDigEscRope: @ 8054D70
push {lr}
bl ResetInitialPlayerAvatarState
movs r0, 0x83
lsls r0, 4
bl FlagClear
ldr r0, _08054DBC @ =0x0000405e
movs r1, 0
bl VarSet
ldr r0, _08054DC0 @ =0x00000802
bl FlagClear
movs r0, 0x80
lsls r0, 4
bl FlagClear
ldr r0, _08054DC4 @ =0x0000406e
movs r1, 0
bl VarSet
ldr r0, _08054DC8 @ =0x00000805
bl FlagClear
ldr r0, _08054DCC @ =0x00000806
bl FlagClear
ldr r0, _08054DD0 @ =0x00000808
bl FlagClear
ldr r0, _08054DD4 @ =0x0000404d
movs r1, 0
bl VarSet
pop {r0}
bx r0
.align 2, 0
_08054DBC: .4byte 0x0000405e
_08054DC0: .4byte 0x00000802
_08054DC4: .4byte 0x0000406e
_08054DC8: .4byte 0x00000805
_08054DCC: .4byte 0x00000806
_08054DD0: .4byte 0x00000808
_08054DD4: .4byte 0x0000404d
thumb_func_end Overworld_ResetStateAfterDigEscRope
thumb_func_start sub_8054DD8
sub_8054DD8: @ 8054DD8
push {lr}
bl ResetInitialPlayerAvatarState
movs r0, 0x83
lsls r0, 4
bl FlagClear
ldr r0, _08054E24 @ =0x0000405e
movs r1, 0
bl VarSet
ldr r0, _08054E28 @ =0x00000802
bl FlagClear
movs r0, 0x80
lsls r0, 4
bl FlagClear
ldr r0, _08054E2C @ =0x0000406e
movs r1, 0
bl VarSet
ldr r0, _08054E30 @ =0x00000805
bl FlagClear
ldr r0, _08054E34 @ =0x00000806
bl FlagClear
ldr r0, _08054E38 @ =0x00000808
bl FlagClear
ldr r0, _08054E3C @ =0x0000404d
movs r1, 0
bl VarSet
pop {r0}
bx r0
.align 2, 0
_08054E24: .4byte 0x0000405e
_08054E28: .4byte 0x00000802
_08054E2C: .4byte 0x0000406e
_08054E30: .4byte 0x00000805
_08054E34: .4byte 0x00000806
_08054E38: .4byte 0x00000808
_08054E3C: .4byte 0x0000404d
thumb_func_end sub_8054DD8
thumb_func_start sub_8054E40
sub_8054E40: @ 8054E40
push {lr}
movs r0, 0x80
lsls r0, 4
bl FlagClear
ldr r0, _08054E64 @ =0x0000406e
movs r1, 0
bl VarSet
bl sub_805610C
bl UpdateLocationHistoryForRoamer
bl RoamerMoveToOtherLocationSet
pop {r0}
bx r0
.align 2, 0
_08054E64: .4byte 0x0000406e
thumb_func_end sub_8054E40
thumb_func_start ResetGameStats
ResetGameStats: @ 8054E68
push {r4,r5,lr}
movs r2, 0
ldr r5, _08054E8C @ =gSaveBlock1Ptr
movs r4, 0x90
lsls r4, 5
movs r3, 0
_08054E74:
ldr r0, [r5]
lsls r1, r2, 2
adds r0, r4
adds r0, r1
str r3, [r0]
adds r2, 0x1
cmp r2, 0x3F
ble _08054E74
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_08054E8C: .4byte gSaveBlock1Ptr
thumb_func_end ResetGameStats
thumb_func_start IncrementGameStat
IncrementGameStat: @ 8054E90
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0x33
bhi _08054EB8
adds r0, r4, 0
bl GetGameStat
adds r1, r0, 0
ldr r0, _08054EAC @ =0x00fffffe
cmp r1, r0
bhi _08054EB0
adds r1, 0x1
b _08054EB2
.align 2, 0
_08054EAC: .4byte 0x00fffffe
_08054EB0:
ldr r1, _08054EC0 @ =0x00ffffff
_08054EB2:
adds r0, r4, 0
bl SetGameStat
_08054EB8:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08054EC0: .4byte 0x00ffffff
thumb_func_end IncrementGameStat
thumb_func_start GetGameStat
GetGameStat: @ 8054EC4
push {lr}
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0x33
bhi _08054EF8
ldr r0, _08054EF0 @ =gSaveBlock1Ptr
ldr r2, [r0]
lsls r0, r1, 2
movs r1, 0x90
lsls r1, 5
adds r2, r1
adds r2, r0
ldr r0, _08054EF4 @ =gSaveBlock2Ptr
ldr r1, [r0]
movs r0, 0xF2
lsls r0, 4
adds r1, r0
ldr r0, [r2]
ldr r1, [r1]
eors r0, r1
b _08054EFA
.align 2, 0
_08054EF0: .4byte gSaveBlock1Ptr
_08054EF4: .4byte gSaveBlock2Ptr
_08054EF8:
movs r0, 0
_08054EFA:
pop {r1}
bx r1
thumb_func_end GetGameStat
thumb_func_start SetGameStat
SetGameStat: @ 8054F00
push {lr}
adds r3, r1, 0
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0x33
bhi _08054F2A
ldr r0, _08054F30 @ =gSaveBlock1Ptr
ldr r1, [r0]
lsls r0, r2, 2
movs r2, 0x90
lsls r2, 5
adds r1, r2
adds r1, r0
ldr r0, _08054F34 @ =gSaveBlock2Ptr
ldr r0, [r0]
movs r2, 0xF2
lsls r2, 4
adds r0, r2
ldr r0, [r0]
eors r0, r3
str r0, [r1]
_08054F2A:
pop {r0}
bx r0
.align 2, 0
_08054F30: .4byte gSaveBlock1Ptr
_08054F34: .4byte gSaveBlock2Ptr
thumb_func_end SetGameStat
thumb_func_start sub_8054F38
sub_8054F38: @ 8054F38
push {r4-r6,lr}
adds r5, r0, 0
movs r4, 0
ldr r6, _08054F64 @ =gSaveBlock1Ptr
_08054F40:
lsls r1, r4, 2
movs r0, 0x90
lsls r0, 5
adds r1, r0
ldr r0, [r6]
adds r0, r1
adds r1, r5, 0
bl ApplyNewEncryptionKeyToWord
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0x3F
bls _08054F40
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_08054F64: .4byte gSaveBlock1Ptr
thumb_func_end sub_8054F38
thumb_func_start sub_8054F68
sub_8054F68: @ 8054F68
push {r4-r7,lr}
@ -1025,8 +745,8 @@ _080554B4: .4byte gUnknown_2031DBC
_080554B8: .4byte gSaveBlock1Ptr
thumb_func_end copy_saved_warp3_bank_and_enter_x_to_warp1
thumb_func_start sub_80554BC
sub_80554BC: @ 80554BC
thumb_func_start Overworld_SetWhiteoutRespawnPoint
Overworld_SetWhiteoutRespawnPoint: @ 80554BC
push {lr}
ldr r0, _080554C8 @ =gUnknown_2031DBC
bl SetWhiteoutRespawnWarpAndHealerNpc
@ -1034,7 +754,7 @@ sub_80554BC: @ 80554BC
bx r0
.align 2, 0
_080554C8: .4byte gUnknown_2031DBC
thumb_func_end sub_80554BC
thumb_func_end Overworld_SetWhiteoutRespawnPoint
thumb_func_start SetLastHealLocationWarp
SetLastHealLocationWarp: @ 80554CC

View File

@ -116,7 +116,7 @@ void SetWarpDestinationToDynamicWarp(u8 unused);
void mapldr_default(void);
u32 GetGameStat(u8 statId);
u32 SetGameStat(u8 statId, u32 value);
void SetGameStat(u8 statId, u32 value);
void CB2_ContinueSavedGame(void);
void sub_8055D5C(struct WarpData *);

View File

@ -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);
}
}