through Overworld_ResetStateAfterFly

This commit is contained in:
PikalaxALT
2020-03-26 18:29:48 -04:00
parent b9c604b8d2
commit 84a69bf140
6 changed files with 98 additions and 171 deletions
-149
View File
@@ -5,155 +5,6 @@
.text
thumb_func_start sub_8054BC8
sub_8054BC8: @ 8054BC8
push {r4,lr}
ldr r0, _08054BFC @ =EventScript_ResetEliteFourEnd
bl ScriptContext2_RunNewScript
ldr r0, _08054C00 @ =gSaveBlock1Ptr
ldr r4, [r0]
movs r0, 0xA4
lsls r0, 2
adds r4, r0
bl ComputeWhiteOutMoneyLoss
adds r1, r0, 0
adds r0, r4, 0
bl RemoveMoney
bl HealPlayerParty
bl sub_8054DD8
bl sub_80554BC
bl WarpIntoMap
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08054BFC: .4byte EventScript_ResetEliteFourEnd
_08054C00: .4byte gSaveBlock1Ptr
thumb_func_end sub_8054BC8
thumb_func_start ComputeWhiteOutMoneyLoss
ComputeWhiteOutMoneyLoss: @ 8054C04
push {r4,lr}
bl CountBadgesForOverworldWhiteOutLossCalculation
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
bl GetPlayerPartyHighestLevel
lsls r0, 24
lsrs r0, 24
ldr r1, _08054C40 @ =sWhiteOutMoneyLossMultipliers
adds r4, r1
ldrb r1, [r4]
lsls r1, 2
adds r4, r0, 0
muls r4, r1
ldr r0, _08054C44 @ =gSaveBlock1Ptr
ldr r0, [r0]
movs r1, 0xA4
lsls r1, 2
adds r0, r1
bl GetMoney
cmp r4, r0
bls _08054C38
adds r4, r0, 0
_08054C38:
adds r0, r4, 0
pop {r4}
pop {r1}
bx r1
.align 2, 0
_08054C40: .4byte sWhiteOutMoneyLossMultipliers
_08054C44: .4byte gSaveBlock1Ptr
thumb_func_end ComputeWhiteOutMoneyLoss
thumb_func_start OverworldWhiteOutGetMoneyLoss
OverworldWhiteOutGetMoneyLoss: @ 8054C48
push {r4,r5,lr}
bl ComputeWhiteOutMoneyLoss
adds r4, r0, 0
ldr r5, _08054C6C @ =gStringVar1
bl CountDigits
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0
bl ConvertIntToDecimalStringN
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_08054C6C: .4byte gStringVar1
thumb_func_end OverworldWhiteOutGetMoneyLoss
thumb_func_start CountBadgesForOverworldWhiteOutLossCalculation
CountBadgesForOverworldWhiteOutLossCalculation: @ 8054C70
push {r4-r6,lr}
movs r6, 0
movs r5, 0
ldr r4, _08054C9C @ =sWhiteOutMoneyLossBadgeFlagIDs
_08054C78:
ldrh r0, [r4]
bl FlagGet
lsls r0, 24
cmp r0, 0
beq _08054C8A
adds r0, r6, 0x1
lsls r0, 24
lsrs r6, r0, 24
_08054C8A:
adds r4, 0x2
adds r5, 0x1
cmp r5, 0x7
bls _08054C78
adds r0, r6, 0
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_08054C9C: .4byte sWhiteOutMoneyLossBadgeFlagIDs
thumb_func_end CountBadgesForOverworldWhiteOutLossCalculation
thumb_func_start Overworld_ResetStateAfterFly
Overworld_ResetStateAfterFly: @ 8054CA0
push {lr}
bl ResetInitialPlayerAvatarState
movs r0, 0x83
lsls r0, 4
bl FlagClear
ldr r0, _08054CEC @ =0x0000405e
movs r1, 0
bl VarSet
ldr r0, _08054CF0 @ =0x00000802
bl FlagClear
movs r0, 0x80
lsls r0, 4
bl FlagClear
ldr r0, _08054CF4 @ =0x0000406e
movs r1, 0
bl VarSet
ldr r0, _08054CF8 @ =0x00000805
bl FlagClear
ldr r0, _08054CFC @ =0x00000806
bl FlagClear
ldr r0, _08054D00 @ =0x00000808
bl FlagClear
ldr r0, _08054D04 @ =0x0000404d
movs r1, 0
bl VarSet
pop {r0}
bx r0
.align 2, 0
_08054CEC: .4byte 0x0000405e
_08054CF0: .4byte 0x00000802
_08054CF4: .4byte 0x0000406e
_08054CF8: .4byte 0x00000805
_08054CFC: .4byte 0x00000806
_08054D00: .4byte 0x00000808
_08054D04: .4byte 0x0000404d
thumb_func_end Overworld_ResetStateAfterFly
thumb_func_start Overworld_ResetStateAfterTeleport
Overworld_ResetStateAfterTeleport: @ 8054D08
push {lr}
-22
View File
@@ -5,28 +5,6 @@
.section .rodata
.align 2, 0
sWhiteOutMoneyLossMultipliers:: @ 826D294
.byte 2
.byte 4
.byte 6
.byte 9
.byte 12
.byte 16
.byte 20
.byte 25
.byte 30
.align 1
sWhiteOutMoneyLossBadgeFlagIDs:: @ 826D29E
.2byte FLAG_BADGE01_GET
.2byte FLAG_BADGE02_GET
.2byte FLAG_BADGE03_GET
.2byte FLAG_BADGE04_GET
.2byte FLAG_BADGE05_GET
.2byte FLAG_BADGE06_GET
.2byte FLAG_BADGE07_GET
.2byte FLAG_BADGE08_GET
.align 2
sDummyWarpData:: @ 826D2B0
map MAP_UNDEFINED
+1
View File
@@ -1319,6 +1319,7 @@
#define FLAG_SYS_SAFARI_MODE (SYS_FLAGS + 0x0)
#define FLAG_SYS_VS_SEEKER_CHARGING (SYS_FLAGS + 0x1)
#define FLAG_SYS_UNK_802 (SYS_FLAGS + 0x2)
#define FLAG_SYS_WHITE_FLUTE_ACTIVE (SYS_FLAGS + 0x3)
#define FLAG_SYS_BLACK_FLUTE_ACTIVE (SYS_FLAGS + 0x4)
#define FLAG_SYS_USE_STRENGTH (SYS_FLAGS + 0x5)
+4
View File
@@ -1259,4 +1259,8 @@ extern const u8 EventScript_FieldPoison[];
extern const u8 EventScript_EggHatch[];
extern const u8 EventScript_1C1361[];
// overworld
extern const u8 EventScript_ResetEliteFourEnd[];
#endif //GUARD_EVENT_SCRIPTS_H
+2
View File
@@ -87,6 +87,7 @@ SECTIONS {
src/trade_scene.o(.text);
src/play_time.o(.text);
src/new_game.o(.text);
src/overworld.o(.text);
asm/overworld.o(.text);
src/fieldmap.o(.text);
src/metatile_behavior.o(.text);
@@ -427,6 +428,7 @@ SECTIONS {
src/pokeball.o(.rodata);
src/trade.o(.rodata);
src/trade_scene.o(.rodata);
src/overworld.o(.rodata);
data/overworld.o(.rodata);
data/tilesets.o(.rodata);
data/maps.o(.rodata);
+91
View File
@@ -0,0 +1,91 @@
#include "global.h"
#include "gflib.h"
#include "event_data.h"
#include "event_scripts.h"
#include "field_specials.h"
#include "money.h"
#include "overworld.h"
#include "script.h"
#include "script_pokemon_util.h"
#include "constants/maps.h"
#include "constants/flags.h"
u8 CountBadgesForOverworldWhiteOutLossCalculation(void);
void sub_8054DD8(void);
void sub_80554BC(void);
static const u8 sWhiteOutMoneyLossMultipliers[] = {
2,
4,
6,
9,
12,
16,
20,
25,
30
};
const u16 sWhiteOutMoneyLossBadgeFlagIDs[] = {
FLAG_BADGE01_GET,
FLAG_BADGE02_GET,
FLAG_BADGE03_GET,
FLAG_BADGE04_GET,
FLAG_BADGE05_GET,
FLAG_BADGE06_GET,
FLAG_BADGE07_GET,
FLAG_BADGE08_GET
};
void sub_8054BC8(void)
{
ScriptContext2_RunNewScript(EventScript_ResetEliteFourEnd);
RemoveMoney(&gSaveBlock1Ptr->money, ComputeWhiteOutMoneyLoss());
HealPlayerParty();
sub_8054DD8();
sub_80554BC();
WarpIntoMap();
}
u32 ComputeWhiteOutMoneyLoss(void)
{
u8 nbadges = CountBadgesForOverworldWhiteOutLossCalculation();
u8 toplevel = GetPlayerPartyHighestLevel();
u32 losings = toplevel * 4 * sWhiteOutMoneyLossMultipliers[nbadges];
u32 money = GetMoney(&gSaveBlock1Ptr->money);
if (losings > money)
losings = money;
return losings;
}
void OverworldWhiteOutGetMoneyLoss(void)
{
u32 losings = ComputeWhiteOutMoneyLoss();
ConvertIntToDecimalStringN(gStringVar1, losings, STR_CONV_MODE_LEFT_ALIGN, CountDigits(losings));
}
u8 CountBadgesForOverworldWhiteOutLossCalculation(void)
{
int i;
u8 nbadges = 0;
for (i = 0; i < NELEMS(sWhiteOutMoneyLossBadgeFlagIDs); i++)
{
if (FlagGet(sWhiteOutMoneyLossBadgeFlagIDs[i]))
nbadges++;
}
return nbadges;
}
void Overworld_ResetStateAfterFly(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);
}