Use friendship event constants
This commit is contained in:
+35
-28
@@ -61,6 +61,7 @@ static void DecryptBoxMon(struct BoxPokemon *boxMon);
|
||||
static void sub_806E6CC(u8 taskId);
|
||||
static bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId);
|
||||
static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move);
|
||||
static bool8 ShouldSkipFriendshipChange(void);
|
||||
|
||||
// EWRAM vars
|
||||
EWRAM_DATA static u8 sLearningMoveTableID = 0;
|
||||
@@ -1886,12 +1887,12 @@ const u8 gStatStageRatios[][2] =
|
||||
|
||||
static const u16 sDeoxysBaseStats[] =
|
||||
{
|
||||
50, // Hp
|
||||
95, // Attack
|
||||
90, // Defense
|
||||
180, // Speed
|
||||
95, // Sp.Attack
|
||||
90, // Sp.Defense
|
||||
[STAT_HP] = 50,
|
||||
[STAT_ATK] = 95,
|
||||
[STAT_DEF] = 90,
|
||||
[STAT_SPEED] = 180,
|
||||
[STAT_SPATK] = 95,
|
||||
[STAT_SPDEF] = 90,
|
||||
};
|
||||
|
||||
const u16 gLinkPlayerFacilityClasses[] =
|
||||
@@ -2063,17 +2064,19 @@ static const u8 sStatsToRaise[] =
|
||||
STAT_ATK, STAT_ATK, STAT_SPEED, STAT_DEF, STAT_SPATK, STAT_ACC
|
||||
};
|
||||
|
||||
static const s8 gUnknown_08329ECE[][3] =
|
||||
// 3 modifiers each for how much to change friendship for different ranges
|
||||
// 0-99, 100-199, 200+
|
||||
static const s8 sFriendshipEventModifiers[][3] =
|
||||
{
|
||||
{ 5, 3, 2},
|
||||
{ 5, 3, 2},
|
||||
{ 1, 1, 0},
|
||||
{ 3, 2, 1},
|
||||
{ 1, 1, 0},
|
||||
{ 1, 1, 1},
|
||||
{-1, -1, -1},
|
||||
{-5, -5, -10},
|
||||
{-5, -5, -10},
|
||||
[FRIENDSHIP_EVENT_GROW_LEVEL] = { 5, 3, 2},
|
||||
[FRIENDSHIP_EVENT_VITAMIN] = { 5, 3, 2},
|
||||
[FRIENDSHIP_EVENT_BATTLE_ITEM] = { 1, 1, 0},
|
||||
[FRIENDSHIP_EVENT_LEAGUE_BATTLE] = { 3, 2, 1},
|
||||
[FRIENDSHIP_EVENT_LEARN_TMHM] = { 1, 1, 0},
|
||||
[FRIENDSHIP_EVENT_WALKING] = { 1, 1, 1},
|
||||
[FRIENDSHIP_EVENT_FAINT_SMALL] = {-1, -1, -1},
|
||||
[FRIENDSHIP_EVENT_FAINT_FIELD_PSN] = {-5, -5, -10},
|
||||
[FRIENDSHIP_EVENT_FAINT_LARGE] = {-5, -5, -10},
|
||||
};
|
||||
|
||||
static const u16 sHMMoves[] =
|
||||
@@ -5083,7 +5086,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100 && (retVal == 0 || var_28 != 0) && !sub_806F104() && var_34 == 0)
|
||||
if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100 && (retVal == 0 || var_28 != 0) && !ShouldSkipFriendshipChange() && var_34 == 0)
|
||||
{
|
||||
var_34 = itemEffect[var_3C];
|
||||
friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
|
||||
@@ -5109,7 +5112,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
||||
break;
|
||||
case 6:
|
||||
if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 200
|
||||
&& (retVal == 0 || var_28 != 0) && !sub_806F104() && var_34 == 0)
|
||||
&& (retVal == 0 || var_28 != 0) && !ShouldSkipFriendshipChange() && var_34 == 0)
|
||||
{
|
||||
var_34 = itemEffect[var_3C];
|
||||
friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
|
||||
@@ -5134,7 +5137,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
||||
var_3C++;
|
||||
break;
|
||||
case 7:
|
||||
if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200 && (retVal == 0 || var_28 != 0) && !sub_806F104() && var_34 == 0)
|
||||
if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200 && (retVal == 0 || var_28 != 0) && !ShouldSkipFriendshipChange() && var_34 == 0)
|
||||
{
|
||||
var_34 = itemEffect[var_3C];
|
||||
friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
|
||||
@@ -5752,12 +5755,18 @@ u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex)
|
||||
return n;
|
||||
}
|
||||
|
||||
#define IS_LEAGUE_BATTLE \
|
||||
((gBattleTypeFlags & BATTLE_TYPE_TRAINER) \
|
||||
&& (gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_ELITE_FOUR \
|
||||
|| gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_LEADER \
|
||||
|| gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_CHAMPION)) \
|
||||
|
||||
void AdjustFriendship(struct Pokemon *mon, u8 event)
|
||||
{
|
||||
u16 species, heldItem;
|
||||
u8 holdEffect;
|
||||
|
||||
if (sub_806F104())
|
||||
if (ShouldSkipFriendshipChange())
|
||||
return;
|
||||
|
||||
species = GetMonData(mon, MON_DATA_SPECIES2, 0);
|
||||
@@ -5779,18 +5788,16 @@ void AdjustFriendship(struct Pokemon *mon, u8 event)
|
||||
{
|
||||
u8 friendshipLevel = 0;
|
||||
s16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
|
||||
|
||||
if (friendship > 99)
|
||||
friendshipLevel++;
|
||||
if (friendship > 199)
|
||||
friendshipLevel++;
|
||||
if ((event != 5 || !(Random() & 1))
|
||||
&& (event != 3
|
||||
|| ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
&& (gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_ELITE_FOUR
|
||||
|| gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_LEADER
|
||||
|| gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_CHAMPION))))
|
||||
|
||||
if ((event != FRIENDSHIP_EVENT_WALKING || !(Random() & 1))
|
||||
&& (event != FRIENDSHIP_EVENT_LEAGUE_BATTLE || IS_LEAGUE_BATTLE))
|
||||
{
|
||||
s8 mod = gUnknown_08329ECE[event][friendshipLevel];
|
||||
s8 mod = sFriendshipEventModifiers[event][friendshipLevel];
|
||||
if (mod > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
|
||||
mod = (150 * mod) / 100;
|
||||
friendship += mod;
|
||||
@@ -6782,7 +6789,7 @@ bool8 HasTwoFramesAnimation(u16 species)
|
||||
&& species != SPECIES_UNOWN);
|
||||
}
|
||||
|
||||
bool8 sub_806F104(void)
|
||||
static bool8 ShouldSkipFriendshipChange(void)
|
||||
{
|
||||
if (gMain.inBattle && gBattleTypeFlags & (BATTLE_TYPE_FRONTIER))
|
||||
return TRUE;
|
||||
|
||||
Reference in New Issue
Block a user