Merge pull request #21 from LOuroboros/power_items_rhh_be

Implemented the main effect of the Power Items
This commit is contained in:
ExpoSeed 2020-10-15 10:02:06 -05:00 committed by GitHub
commit beb19380ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 44 additions and 21 deletions

View File

@ -102,7 +102,7 @@
#define HOLD_EFFECT_GRISEOUS_ORB 96
#define HOLD_EFFECT_GRACIDEA 97
#define HOLD_EFFECT_RESIST_BERRY 98
#define HOLD_EFFECT_EV_BOOST 99
#define HOLD_EFFECT_POWER_ITEM 99
#define HOLD_EFFECT_RESTORE_PCT_HP 100
// Gen5 hold effects

View File

@ -4242,7 +4242,7 @@ u32 GetBattlerTotalSpeedStat(u8 battlerId)
}
// item effects
if (GetBattlerHoldEffect(battlerId, FALSE) == HOLD_EFFECT_MACHO_BRACE || GetBattlerHoldEffect(battlerId, FALSE) == HOLD_EFFECT_EV_BOOST)
if (GetBattlerHoldEffect(battlerId, FALSE) == HOLD_EFFECT_MACHO_BRACE || GetBattlerHoldEffect(battlerId, FALSE) == HOLD_EFFECT_POWER_ITEM)
speed /= 2;
else if (holdEffect == HOLD_EFFECT_IRON_BALL)
speed /= 2;

View File

@ -5560,6 +5560,24 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
u16 heldItem;
u8 holdEffect;
int i, multiplier;
u8 stat;
u8 bonus;
heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
if (heldItem == ITEM_ENIGMA_BERRY)
{
if (gMain.inBattle)
holdEffect = gEnigmaBerries[0].holdEffect;
else
holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
}
else
{
holdEffect = ItemId_GetHoldEffect(heldItem);
}
stat = ItemId_GetSecondaryId(heldItem);
bonus = ItemId_GetHoldEffectParam(heldItem);
for (i = 0; i < NUM_STATS; i++)
{
@ -5580,36 +5598,41 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
switch (i)
{
case STAT_HP:
evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier;
if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_HP)
evIncrease = (gBaseStats[defeatedSpecies].evYield_HP + bonus) * multiplier;
else
evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier;
break;
case STAT_ATK:
evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier;
if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_ATK)
evIncrease = (gBaseStats[defeatedSpecies].evYield_Attack + bonus) * multiplier;
else
evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier;
break;
case STAT_DEF:
evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier;
if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_DEF)
evIncrease = (gBaseStats[defeatedSpecies].evYield_Defense + bonus) * multiplier;
else
evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier;
break;
case STAT_SPEED:
evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier;
if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_SPEED)
evIncrease = (gBaseStats[defeatedSpecies].evYield_Speed + bonus) * multiplier;
else
evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier;
break;
case STAT_SPATK:
evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier;
if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_SPATK)
evIncrease = (gBaseStats[defeatedSpecies].evYield_SpAttack + bonus) * multiplier;
else
evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier;
break;
case STAT_SPDEF:
evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier;
break;
}
heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
if (heldItem == ITEM_ENIGMA_BERRY)
{
if (gMain.inBattle)
holdEffect = gEnigmaBerries[0].holdEffect;
if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_SPDEF)
evIncrease = (gBaseStats[defeatedSpecies].evYield_SpDefense + bonus) * multiplier;
else
holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
}
else
{
holdEffect = ItemId_GetHoldEffect(heldItem);
evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier;
break;
}
if (holdEffect == HOLD_EFFECT_MACHO_BRACE)