1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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);
}
|