mirror of https://github.com/pret/pokeemerald.git
Merge pull request #1995 from Jaizu/adjust_friendship
Make AdjustFriendship more readable
This commit is contained in:
commit
aa4fa925c2
|
@ -5877,16 +5877,11 @@ u16 ModifyStatByNature(u8 nature, u16 stat, u8 statIndex)
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
#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)
|
void AdjustFriendship(struct Pokemon *mon, u8 event)
|
||||||
{
|
{
|
||||||
u16 species, heldItem;
|
u16 species, heldItem;
|
||||||
u8 holdEffect;
|
u8 holdEffect;
|
||||||
|
s8 mod;
|
||||||
|
|
||||||
if (ShouldSkipFriendshipChange())
|
if (ShouldSkipFriendshipChange())
|
||||||
return;
|
return;
|
||||||
|
@ -5916,26 +5911,43 @@ void AdjustFriendship(struct Pokemon *mon, u8 event)
|
||||||
if (friendship > 199)
|
if (friendship > 199)
|
||||||
friendshipLevel++;
|
friendshipLevel++;
|
||||||
|
|
||||||
if ((event != FRIENDSHIP_EVENT_WALKING || !(Random() & 1))
|
if (event == FRIENDSHIP_EVENT_WALKING)
|
||||||
&& (event != FRIENDSHIP_EVENT_LEAGUE_BATTLE || IS_LEAGUE_BATTLE))
|
|
||||||
{
|
{
|
||||||
s8 mod = sFriendshipEventModifiers[event][friendshipLevel];
|
// 50% chance every 128 steps
|
||||||
if (mod > 0 && holdEffect == HOLD_EFFECT_FRIENDSHIP_UP)
|
if (Random() & 1)
|
||||||
mod = (150 * mod) / 100;
|
return;
|
||||||
friendship += mod;
|
|
||||||
if (mod > 0)
|
|
||||||
{
|
|
||||||
if (GetMonData(mon, MON_DATA_POKEBALL, 0) == ITEM_LUXURY_BALL)
|
|
||||||
friendship++;
|
|
||||||
if (GetMonData(mon, MON_DATA_MET_LOCATION, 0) == GetCurrentRegionMapSectionId())
|
|
||||||
friendship++;
|
|
||||||
}
|
|
||||||
if (friendship < 0)
|
|
||||||
friendship = 0;
|
|
||||||
if (friendship > MAX_FRIENDSHIP)
|
|
||||||
friendship = MAX_FRIENDSHIP;
|
|
||||||
SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
|
|
||||||
}
|
}
|
||||||
|
if (event == FRIENDSHIP_EVENT_LEAGUE_BATTLE)
|
||||||
|
{
|
||||||
|
// Only if it's a trainer battle with league progression significance
|
||||||
|
if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER))
|
||||||
|
return;
|
||||||
|
if (!(gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_LEADER
|
||||||
|
|| gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_ELITE_FOUR
|
||||||
|
|| gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_CHAMPION))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mod = sFriendshipEventModifiers[event][friendshipLevel];
|
||||||
|
if (mod > 0 && holdEffect == HOLD_EFFECT_FRIENDSHIP_UP)
|
||||||
|
// 50% increase, rounding down
|
||||||
|
mod = (150 * mod) / 100;
|
||||||
|
|
||||||
|
friendship += mod;
|
||||||
|
if (mod > 0)
|
||||||
|
{
|
||||||
|
if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == ITEM_LUXURY_BALL)
|
||||||
|
friendship++;
|
||||||
|
if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
|
||||||
|
friendship++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (friendship < 0)
|
||||||
|
friendship = 0;
|
||||||
|
if (friendship > MAX_FRIENDSHIP)
|
||||||
|
friendship = MAX_FRIENDSHIP;
|
||||||
|
|
||||||
|
SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue