summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pokemon.c613
1 files changed, 176 insertions, 437 deletions
diff --git a/src/pokemon.c b/src/pokemon.c
index e476ab456..9c2532243 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -3883,7 +3883,7 @@ bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex,
return PokemonUseItemEffects(mon, item, partyIndex, moveIndex, 0);
}
-bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 moveIndex, u8 e)
+bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, u8 e)
{
u32 data;
s32 friendship;
@@ -3899,7 +3899,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
u8 r10;
u32 r4;
- heldItem = GetMonData(pkmn, MON_DATA_HELD_ITEM, NULL);
+ heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
if (heldItem == ITEM_ENIGMA_BERRY)
{
if (gMain.inBattle)
@@ -4023,27 +4023,27 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
retVal = FALSE;
}
if ((itemEffect[cmdIndex] & 0x40) // raise level
- && GetMonData(pkmn, MON_DATA_LEVEL, NULL) != 100)
+ && GetMonData(mon, MON_DATA_LEVEL, NULL) != 100)
{
- data = gExperienceTables[gBaseStats[GetMonData(pkmn, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(pkmn, MON_DATA_LEVEL, NULL) + 1];
- SetMonData(pkmn, MON_DATA_EXP, &data);
- CalculateMonStats(pkmn);
+ data = gExperienceTables[gBaseStats[GetMonData(mon, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(mon, MON_DATA_LEVEL, NULL) + 1];
+ SetMonData(mon, MON_DATA_EXP, &data);
+ CalculateMonStats(mon);
retVal = FALSE;
}
if ((itemEffect[cmdIndex] & 0x20)
- && HealStatusConditions(pkmn, partyIndex, 7, sp34) == 0)
+ && HealStatusConditions(mon, partyIndex, 7, sp34) == 0)
{
if (sp34 != 4)
gBattleMons[sp34].status2 &= ~STATUS2_NIGHTMARE;
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & 0x10) && HealStatusConditions(pkmn, partyIndex, 0xF88, sp34) == 0)
+ if ((itemEffect[cmdIndex] & 0x10) && HealStatusConditions(mon, partyIndex, 0xF88, sp34) == 0)
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 8) && HealStatusConditions(pkmn, partyIndex, 16, sp34) == 0)
+ if ((itemEffect[cmdIndex] & 8) && HealStatusConditions(mon, partyIndex, 16, sp34) == 0)
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 4) && HealStatusConditions(pkmn, partyIndex, 32, sp34) == 0)
+ if ((itemEffect[cmdIndex] & 4) && HealStatusConditions(mon, partyIndex, 32, sp34) == 0)
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 2) && HealStatusConditions(pkmn, partyIndex, 64, sp34) == 0)
+ if ((itemEffect[cmdIndex] & 2) && HealStatusConditions(mon, partyIndex, 64, sp34) == 0)
retVal = FALSE;
if ((itemEffect[cmdIndex] & 1) // heal confusion
&& gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_CONFUSION))
@@ -4058,16 +4058,16 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
if (r10 & 0x20)
{
r10 &= ~0x20;
- data = (GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2);
- sp28 = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex);
+ data = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2);
+ sp28 = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
if (data < 3 && sp28 > 4)
{
- data = GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) + gPPUpAddMask[moveIndex];
- SetMonData(pkmn, MON_DATA_PP_BONUSES, &data);
+ data = GetMonData(mon, MON_DATA_PP_BONUSES, NULL) + gPPUpAddMask[moveIndex];
+ SetMonData(mon, MON_DATA_PP_BONUSES, &data);
- data = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - sp28;
- data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL) + data;
- SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data);
+ data = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - sp28;
+ data = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL) + data;
+ SetMonData(mon, MON_DATA_PP1 + moveIndex, &data);
retVal = FALSE;
}
}
@@ -4083,10 +4083,10 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
{
case 0:
case 1:
- evCount = GetMonEVCount(pkmn);
+ evCount = GetMonEVCount(mon);
if (evCount >= 510)
return TRUE;
- data = GetMonData(pkmn, sGetMonDataEVConstants[sp28], NULL);
+ data = GetMonData(mon, sGetMonDataEVConstants[sp28], NULL);
if (data < 100)
{
if (data + itemEffect[sp24] > 100)
@@ -4096,8 +4096,8 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
if (evCount + r4 > 510)
r4 += 510 - (evCount + r4);
data += r4;
- SetMonData(pkmn, sGetMonDataEVConstants[sp28], &data);
- CalculateMonStats(pkmn);
+ SetMonData(mon, sGetMonDataEVConstants[sp28], &data);
+ CalculateMonStats(mon);
sp24++;
retVal = FALSE;
}
@@ -4106,7 +4106,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
// revive?
if (r10 & 0x10)
{
- if (GetMonData(pkmn, MON_DATA_HP, NULL) != 0)
+ if (GetMonData(mon, MON_DATA_HP, NULL) != 0)
{
sp24++;
break;
@@ -4130,7 +4130,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
}
else
{
- if (GetMonData(pkmn, MON_DATA_HP, NULL) == 0)
+ if (GetMonData(mon, MON_DATA_HP, NULL) == 0)
{
sp24++;
break;
@@ -4140,10 +4140,10 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
switch (data)
{
case 0xFF:
- data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL) - GetMonData(pkmn, MON_DATA_HP, NULL);
+ data = GetMonData(mon, MON_DATA_MAX_HP, NULL) - GetMonData(mon, MON_DATA_HP, NULL);
break;
case 0xFE:
- data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL) / 2;
+ data = GetMonData(mon, MON_DATA_MAX_HP, NULL) / 2;
if (data == 0)
data = 1;
break;
@@ -4151,14 +4151,14 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
data = gBattleScripting.field_23;
break;
}
- if (GetMonData(pkmn, MON_DATA_MAX_HP, NULL) != GetMonData(pkmn, MON_DATA_HP, NULL))
+ if (GetMonData(mon, MON_DATA_MAX_HP, NULL) != GetMonData(mon, MON_DATA_HP, NULL))
{
if (e == 0)
{
- data = GetMonData(pkmn, MON_DATA_HP, NULL) + data;
- if (data > GetMonData(pkmn, MON_DATA_MAX_HP, NULL))
- data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL);
- SetMonData(pkmn, MON_DATA_HP, &data);
+ data = GetMonData(mon, MON_DATA_HP, NULL) + data;
+ if (data > GetMonData(mon, MON_DATA_MAX_HP, NULL))
+ data = GetMonData(mon, MON_DATA_MAX_HP, NULL);
+ SetMonData(mon, MON_DATA_HP, &data);
if (gMain.inBattle && sp34 != 4)
{
gBattleMons[sp34].hp = data;
@@ -4190,18 +4190,18 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
{
u16 r4;
- data = GetMonData(pkmn, MON_DATA_PP1 + r5, NULL);
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL);
- if (data != CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5))
+ data = GetMonData(mon, MON_DATA_PP1 + r5, NULL);
+ r4 = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL);
+ if (data != CalculatePPWithBonus(r4, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5))
{
data += itemEffect[sp24];
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL);
- if (data > CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5))
+ r4 = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL);
+ if (data > CalculatePPWithBonus(r4, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5))
{
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL);
- data = CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5);
+ r4 = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL);
+ data = CalculatePPWithBonus(r4, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5);
}
- SetMonData(pkmn, MON_DATA_PP1 + r5, &data);
+ SetMonData(mon, MON_DATA_PP1 + r5, &data);
if (gMain.inBattle
&& sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000)
&& !(gDisableStructs[sp34].mimickedMoves & gBitTable[r5]))
@@ -4215,18 +4215,18 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
{
u16 r4;
- data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL);
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL);
- if (data != CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex))
+ data = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL);
+ r4 = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
+ if (data != CalculatePPWithBonus(r4, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex))
{
data += itemEffect[sp24++];
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL);
- if (data > CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex))
+ r4 = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
+ if (data > CalculatePPWithBonus(r4, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex))
{
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL);
- data = CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex);
+ r4 = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
+ data = CalculatePPWithBonus(r4, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
}
- SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data);
+ SetMonData(mon, MON_DATA_PP1 + moveIndex, &data);
if (gMain.inBattle
&& sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000)
&& !(gDisableStructs[sp34].mimickedMoves & gBitTable[moveIndex]))
@@ -4237,11 +4237,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
break;
case 7:
{
- u16 targetSpecies = GetEvolutionTargetSpecies(pkmn, 2, item);
+ u16 targetSpecies = GetEvolutionTargetSpecies(mon, 2, item);
if (targetSpecies != SPECIES_NONE)
{
- BeginEvolutionScene(pkmn, targetSpecies, 0, partyIndex);
+ BeginEvolutionScene(mon, targetSpecies, 0, partyIndex);
return FALSE;
}
}
@@ -4267,10 +4267,10 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
case 1:
case 2:
case 3:
- evCount = GetMonEVCount(pkmn);
+ evCount = GetMonEVCount(mon);
if (evCount >= 510)
return TRUE;
- data = GetMonData(pkmn, sGetMonDataEVConstants[sp28 + 2], NULL);
+ data = GetMonData(mon, sGetMonDataEVConstants[sp28 + 2], NULL);
if (data < 100)
{
if (data + itemEffect[sp24] > 100)
@@ -4280,98 +4280,98 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
if (evCount + r4 > 510)
r4 += 510 - (evCount + r4);
data += r4;
- SetMonData(pkmn, sGetMonDataEVConstants[sp28 + 2], &data);
- CalculateMonStats(pkmn);
+ SetMonData(mon, sGetMonDataEVConstants[sp28 + 2], &data);
+ CalculateMonStats(mon);
retVal = FALSE;
sp24++;
}
break;
case 4:
- data = (GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2);
+ data = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2);
if (data < 3)
{
- r4 = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex);
- data = GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL);
+ r4 = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
+ data = GetMonData(mon, MON_DATA_PP_BONUSES, NULL);
data &= gPPUpSetMask[moveIndex];
data += gPPUpAddMask[moveIndex] * 3;
- SetMonData(pkmn, MON_DATA_PP_BONUSES, &data);
- data = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - r4;
- data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL) + data;
- SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data);
+ SetMonData(mon, MON_DATA_PP_BONUSES, &data);
+ data = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - r4;
+ data = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL) + data;
+ SetMonData(mon, MON_DATA_PP1 + moveIndex, &data);
retVal = FALSE;
}
break;
case 5:
- if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) < 100 && retVal == 0 && sp2C == 0)
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100 && retVal == 0 && sp2C == 0)
{
sp2C = itemEffect[sp24];
- friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL);
+ friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
friendship += 150 * sp2C / 100;
else
friendship += sp2C;
if (sp2C > 0)
{
- if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
+ if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11)
friendship++;
- if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
+ if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
friendship++;
}
if (friendship < 0)
friendship = 0;
if (friendship > 255)
friendship = 255;
- SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship);
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
}
sp24++;
break;
case 6:
- if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) < 200
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 200
&& retVal == 0 && sp2C == 0)
{
sp2C = itemEffect[sp24];
- friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL);
+ friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
friendship += 150 * sp2C / 100;
else
friendship += sp2C;
if (sp2C > 0)
{
- if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
+ if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11)
friendship++;
- if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
+ if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
friendship++;
}
if (friendship < 0)
friendship = 0;
if (friendship > 255)
friendship = 255;
- SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship);
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
}
sp24++;
break;
case 7:
- if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == 0 && sp2C == 0)
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == 0 && sp2C == 0)
{
sp2C = itemEffect[sp24];
- friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL);
+ friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
friendship += 150 * sp2C / 100;
else
friendship += sp2C;
if (sp2C > 0)
{
- if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
+ if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11)
friendship++;
- if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
+ if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
friendship++;
}
if (friendship < 0)
friendship = 0;
if (friendship > 255)
friendship = 255;
- SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship);
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
}
sp24++;
break;
@@ -4406,25 +4406,28 @@ static bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask,
#ifdef NONMATCHING
/*
- * This is nonmatching due to the compiler's insistence on avoiding the u8 cast
- * when loading gMain.inBattle. If it weren't for this absent cast, differing
- * the function would be a lot easier.
+ * This is nonmatching due to:
+ * 1) the compiler's insistence on avoiding the u8 cast when loading gMain.inBattle
+ * 2) niche difference in the first loop
+ * 3) tail merge (there're still logical differences inside switch which are not noticed? )
*/
-bool8 PokemonUseItemEffects2(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 moveIndex, u8 e)
-{ // BEGIN
+bool8 PokemonUseItemEffects2(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex)
+{
u32 data;
+ s32 tmp;
s32 cmdIndex;
bool8 retVal = TRUE;
const u8 *itemEffect;
- u8 sp24 = 6;
- u32 sp28;
- s8 sp2C = 0;
- u8 sp34 = 4;
+ u8 r10 = 6;
+ u32 i;
+ s32 sp18 = 0;
+ u8 battlerId = 4;
u16 heldItem;
- u8 r10;
- s32 r4;
+ u8 curEffect;
+ u32 curMoveId;
- heldItem = GetMonData(pkmn, MON_DATA_HELD_ITEM, NULL);
+ heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
+ // you have to write as such, because otherwise gMain.inBattle will lose its u8 cast
if (heldItem == ITEM_ENIGMA_BERRY)
{
if (gMain.inBattle)
@@ -4436,41 +4439,30 @@ bool8 PokemonUseItemEffects2(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 m
{
/*holdEffect = */ItemId_GetHoldEffect(heldItem);
}
-
gPotentialItemEffectBattler = gBattlerInMenuId;
-
- // grr. the original asm also u8 masks after loading the bitmask, despite
- // the fact that is a useless operation. what's going on here? Something
- // dumb I bet like dead code.
if (gMain.inBattle)
{
gActiveBattler = gBattlerInMenuId;
- if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
- cmdIndex = 0;
- else
- cmdIndex = 1;
- while (cmdIndex < gBattlersCount)
+ for (cmdIndex = GetBattlerSide(gActiveBattler) != B_SIDE_PLAYER;
+ cmdIndex < gBattlersCount;
+ cmdIndex += 2) // for/while seems to be identical here
{
- if (gBattlerPartyIndexes[cmdIndex] == partyIndex)
+ if (gBattlerPartyIndexes[cmdIndex] == partyIndex) // why is gBattlerPartyIndexes reloaded?
{
- sp34 = cmdIndex;
+ battlerId = cmdIndex;
break;
}
- cmdIndex += 2;
}
}
else
{
gActiveBattler = 0;
- sp34 = 4;
+ battlerId = 4;
}
-
- // _08042504
if (!IS_POKEMON_ITEM(item))
return TRUE;
if (gItemEffectTable[item - 13] == NULL && item != ITEM_ENIGMA_BERRY)
return TRUE;
-
if (item == ITEM_ENIGMA_BERRY)
{
if (gMain.inBattle)
@@ -4482,457 +4474,204 @@ bool8 PokemonUseItemEffects2(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 m
{
itemEffect = gItemEffectTable[item - 13];
}
-
for (cmdIndex = 0; cmdIndex < 6; cmdIndex++)
{
switch (cmdIndex)
{
// status healing effects
case 0:
- if ((itemEffect[cmdIndex] & 0x80)
- && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_INFATUATION))
- {
- //gBattleMons[sp34].status2 &= ~STATUS2_INFATUATION;
+ if (itemEffect[cmdIndex] & 0x80
+ && gMain.inBattle
+ && battlerId != 4
+ && gBattleMons[battlerId].status2 & STATUS2_INFATUATION)
retVal = FALSE;
- }
- if ((itemEffect[cmdIndex] & 0x30)
+ if (itemEffect[cmdIndex] & 0x30
&& !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY))
- {
- //gBattleMons[gActiveBattler].status2 |= STATUS2_FOCUS_ENERGY;
retVal = FALSE;
- }
if ((itemEffect[cmdIndex] & 0xF)
&& gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] < 12)
- {
- //gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] += itemEffect[cmdIndex] & 0xF;
- //if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] > 12)
- // gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] = 12;
retVal = FALSE;
- }
break;
// in-battle stat boosting effects?
case 1:
if ((itemEffect[cmdIndex] & 0xF0)
&& gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] < 12)
- {
- //gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] += (itemEffect[cmdIndex] & 0xF0) >> 4;
- //if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] > 12)
- // gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] = 12;
retVal = FALSE;
- }
if ((itemEffect[cmdIndex] & 0xF)
&& gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] < 12)
- {
- //gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] += itemEffect[cmdIndex] & 0xF;
- //if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] > 12)
- // gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] = 12;
retVal = FALSE;
- }
break;
// more stat boosting effects?
case 2:
if ((itemEffect[cmdIndex] & 0xF0)
&& gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] < 12)
- {
- //gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] += (itemEffect[cmdIndex] & 0xF0) >> 4;
- //if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] > 12)
- // gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] = 12;
retVal = FALSE;
- }
if ((itemEffect[cmdIndex] & 0xF)
&& gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] < 12)
- {
- //gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] += itemEffect[cmdIndex] & 0xF;
- //if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] > 12)
- // gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] = 12;
retVal = FALSE;
- }
break;
case 3:
if ((itemEffect[cmdIndex] & 0x80)
&& gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer == 0)
- {
- //gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer = 5;
retVal = FALSE;
- }
if ((itemEffect[cmdIndex] & 0x40) // raise level
- && GetMonData(pkmn, MON_DATA_LEVEL, NULL) != 100)
- {
- //data = gExperienceTables[gBaseStats[GetMonData(pkmn, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(pkmn, MON_DATA_LEVEL, NULL) + 1];
- //SetMonData(pkmn, MON_DATA_EXP, &data);
- //CalculateMonStats(pkmn);
+ && GetMonData(mon, MON_DATA_LEVEL, NULL) != 100)
retVal = FALSE;
- }
if ((itemEffect[cmdIndex] & 0x20)
- && sub_8042BE8(pkmn, partyIndex, 7, sp34) == 0)
- {
- //if (sp34 != 4)
- // gBattleMons[sp34].status2 &= ~STATUS2_NIGHTMARE;
+ && sub_8042BE8(mon, partyIndex, 7, battlerId))
retVal = FALSE;
- }
- if ((itemEffect[cmdIndex] & 0x10) && sub_8042BE8(pkmn, partyIndex, 0xF88, sp34) == 0)
+ if ((itemEffect[cmdIndex] & 0x10) && sub_8042BE8(mon, partyIndex, 0xF88, battlerId))
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 8) && sub_8042BE8(pkmn, partyIndex, 16, sp34) == 0)
+ if ((itemEffect[cmdIndex] & 8) && sub_8042BE8(mon, partyIndex, 16, battlerId))
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 4) && sub_8042BE8(pkmn, partyIndex, 32, sp34) == 0)
+ if ((itemEffect[cmdIndex] & 4) && sub_8042BE8(mon, partyIndex, 32, battlerId))
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 2) && sub_8042BE8(pkmn, partyIndex, 64, sp34) == 0)
+ if ((itemEffect[cmdIndex] & 2) && sub_8042BE8(mon, partyIndex, 64, battlerId))
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 1) // heal confusion
- && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_CONFUSION))
- {
- //gBattleMons[sp34].status2 &= ~STATUS2_CONFUSION;
+ if (itemEffect[cmdIndex] & 1 // heal confusion
+ && gMain.inBattle && battlerId != 4 && (gBattleMons[battlerId].status2 & STATUS2_CONFUSION))
retVal = FALSE;
- }
break;
// EV, HP, and PP raising effects
case 4:
- r10 = itemEffect[cmdIndex];
- if (r10 & 0x20)
+ curEffect = itemEffect[cmdIndex];
+ if (curEffect & 0x20)
{
- r10 &= ~0x20;
- data = (GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2);
- sp28 = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex);
- if (data < 3 && sp28 > 4)
- {
- //data = GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) + gPPUpAddMask[moveIndex];
- //SetMonData(pkmn, MON_DATA_PP_BONUSES, &data);
- //
- //data = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - sp28;
- //data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL) + data;
- //SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data);
+ curEffect &= ~0x20;
+ data = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2);
+ i = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
+ if (data < 3 && i > 4)
retVal = FALSE;
- }
}
- sp28 = 0;
- while (r10 != 0) // _080428C0
+ i = 0;
+ while (curEffect) // _080428C0
{
- if (r10 & 1)
+ if (curEffect & 1)
{
- u16 evCount;
- u16 targetSpecies;
- s32 r5;
-
- switch (sp28)
+ switch (i)
{
case 0:
case 1:
- evCount = GetMonEVCount(pkmn);
- if (evCount >= 510)
+ if (GetMonEVCount(mon) >= 510)
return TRUE;
- data = GetMonData(pkmn, sGetMonDataEVConstants[sp28], NULL);
+ data = GetMonData(mon, sGetMonDataEVConstants[i], NULL);
if (data < 100)
{
- //if (data + itemEffect[sp24] > 100)
- // r4 = 100 - (data + itemEffect[sp24]) + itemEffect[sp24];
- //else
- // r4 = itemEffect[sp24];
- //if (evCount + r4 > 510)
- // r4 += 510 - (evCount + r4);
- //data += r4;
- //SetMonData(pkmn, sGetMonDataEVConstants[sp28], &data);
- //CalculateMonStats(pkmn);
- sp24++;
+ r10++;
retVal = FALSE;
}
break;
case 2:
// revive?
- if (r10 & 0x10)
+ if (curEffect & 0x10)
{
- if (GetMonData(pkmn, MON_DATA_HP, NULL) != 0)
+ if (GetMonData(mon, MON_DATA_HP, NULL) != 0)
{
- sp24++;
+ r10++;
break;
}
- /*
- if (gMain.inBattle)
- {
- if (sp34 != 4)
- {
- gAbsentBattlerFlags &= ~gBitTable[sp34];
- CopyPlayerPartyMonToBattleData(sp34, pokemon_order_func(gBattlerPartyIndexes[sp34]));
- if (GetBattlerSide(gActiveBattler) == 0 && gBattleResults.unk4 < 255)
- gBattleResults.unk4++;
- }
- else
- {
- gAbsentBattlerFlags &= ~gBitTable[gActiveBattler ^ 2];
- if (GetBattlerSide(gActiveBattler) == 0 && gBattleResults.unk4 < 255)
- gBattleResults.unk4++;
- }
- }
- */
}
else
{
- if (GetMonData(pkmn, MON_DATA_HP, NULL) == 0)
+ if (GetMonData(mon, MON_DATA_HP, NULL) == 0)
{
- sp24++;
+ r10++;
break;
}
}
- /*
- data = itemEffect[sp24++];
- switch (data)
- {
- case 0xFF:
- data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL) - GetMonData(pkmn, MON_DATA_HP, NULL);
- break;
- case 0xFE:
- data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL) / 2;
- if (data == 0)
- data = 1;
- break;
- case 0xFD:
- data = gBattleScripting.field_23;
- break;
- }
- */
- if (GetMonData(pkmn, MON_DATA_MAX_HP, NULL) != GetMonData(pkmn, MON_DATA_HP, NULL))
- {
- /*
- if (e == 0)
- {
- data = GetMonData(pkmn, MON_DATA_HP, NULL) + data;
- if (data > GetMonData(pkmn, MON_DATA_MAX_HP, NULL))
- data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL);
- SetMonData(pkmn, MON_DATA_HP, &data);
- if (gMain.inBattle && sp34 != 4)
- {
- gBattleMons[sp34].hp = data;
- if (!(r10 & 0x10) && GetBattlerSide(gActiveBattler) == 0)
- {
- if (gBattleResults.unk3 < 255)
- gBattleResults.unk3++;
- // I have to re-use this variable to match.
- r5 = gActiveBattler;
- gActiveBattler = sp34;
- BtlController_EmitGetMonData(0, 0, 0);
- MarkBattlerForControllerExec(gActiveBattler);
- gActiveBattler = r5;
- }
- }
- }
- else
- {
- gBattleMoveDamage = -data;
- }
- */
+ if (GetMonData(mon, MON_DATA_MAX_HP, NULL) != GetMonData(mon, MON_DATA_HP, NULL))
retVal = FALSE;
- }
- sp24++;
- r10 &= 0xEF;
+ r10++;
+ curEffect &= 0xEF;
break;
case 3:
- if (!(r10 & 2))
+ if (!(curEffect & 2))
{
- for (r5 = 0; r5 < 4; r5++)
+ for (tmp = 0; tmp < MAX_MON_MOVES; tmp++)
{
- data = GetMonData(pkmn, MON_DATA_PP1 + r5, NULL);
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL);
- if (data != CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5))
- {
- /*
- data += itemEffect[sp24];
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL);
- if (data > CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5))
- {
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL);
- data = CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5);
- }
- SetMonData(pkmn, MON_DATA_PP1 + r5, &data);
- if (gMain.inBattle
- && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000)
- && !(gDisableStructs[sp34].unk18_b & gBitTable[r5]))
- gBattleMons[sp34].pp[r5] = data;
- */
+ data = GetMonData(mon, MON_DATA_PP1 + tmp, NULL);
+ curMoveId = GetMonData(mon, MON_DATA_MOVE1 + tmp, NULL);
+ if (data != CalculatePPWithBonus(curMoveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), tmp))
retVal = FALSE;
- }
}
+ r10++;
}
else // _080429FA
{
- data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL);
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL);
- if (data != CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex))
+ data = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL);
+ curMoveId = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
+ if (data != CalculatePPWithBonus(curMoveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex))
{
- /*
- data += itemEffect[sp24++];
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL);
- if (data > CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex))
- {
- r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL);
- data = CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex);
- }
- SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data);
- if (gMain.inBattle
- && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000)
- && !(gDisableStructs[sp34].unk18_b & gBitTable[moveIndex]))
- gBattleMons[sp34].pp[moveIndex] = data;
- */
- sp24++;
+ r10++;
retVal = FALSE;
}
}
break;
case 7:
- {
- targetSpecies = GetEvolutionTargetSpecies(pkmn, 2, item);
-
- if (targetSpecies != SPECIES_NONE)
- {
- //BeginEvolutionScene(pkmn, targetSpecies, 0, partyIndex);
- return FALSE;
- }
- }
+ if (GetEvolutionTargetSpecies(mon, 2, item) != SPECIES_NONE)
+ return FALSE;
break;
}
}
- sp28++;
- r10 >>= 1;
+ i++;
+ curEffect >>= 1;
}
break;
case 5:
- r10 = itemEffect[cmdIndex];
- sp28 = 0;
- while (r10 != 0)
+ curEffect = itemEffect[cmdIndex];
+ i = 0;
+ while (curEffect)
{
- if (r10 & 1)
+ if (curEffect & 1)
{
- u16 evCount;
-
- switch (sp28)
+ switch (i)
{
case 0:
case 1:
case 2:
case 3:
- evCount = GetMonEVCount(pkmn);
- if (evCount >= 510)
+ if (GetMonEVCount(mon) >= 510)
return TRUE;
- data = GetMonData(pkmn, sGetMonDataEVConstants[sp28 + 2], NULL);
+ data = GetMonData(mon, sGetMonDataEVConstants[i + 2], NULL);
if (data < 100)
{
- /*
- if (data + itemEffect[sp24] > 100)
- r4 = 100 - (data + itemEffect[sp24]) + itemEffect[sp24];
- else
- r4 = itemEffect[sp24];
- if (evCount + r4 > 510)
- r4 += 510 - (evCount + r4);
- data += r4;
- SetMonData(pkmn, sGetMonDataEVConstants[sp28 + 2], &data);
- CalculateMonStats(pkmn);
- */
retVal = FALSE;
- sp24++;
+ r10++;
}
break;
case 4:
- data = (GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2);
- r4 = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex);
- if (data < 3)
- {
- if (r4 <= 4)
- break;
- /*
-
- data = GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL);
- data &= gPPUpSetMask[moveIndex];
- data += gPPUpAddMask[moveIndex] * 3;
-
- SetMonData(pkmn, MON_DATA_PP_BONUSES, &data);
- data = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - r4;
- data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL) + data;
- SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data);
- */
+ data = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2);
+ tmp = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
+ if (data < 3 && tmp > 4)
retVal = FALSE;
- }
break;
case 5:
- if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) < 100 && retVal == 0 && sp2C == 0)
- {
- sp2C = itemEffect[sp24];
- /*
- friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL);
- if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
- friendship += 150 * sp2C / 100;
- else
- friendship += sp2C;
- if (sp2C > 0)
- {
- if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
- friendship++;
- if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
- friendship++;
- }
- if (friendship < 0)
- friendship = 0;
- if (friendship > 255)
- friendship = 255;
- SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship);
- */
- }
- sp24++;
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100
+ && retVal == FALSE
+ && sp18 == 0)
+ sp18 = itemEffect[r10];
+ r10++;
break;
case 6:
- if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) < 200
- && retVal == 0 && sp2C == 0)
- {
- sp2C = itemEffect[sp24];
- /*
- friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL);
- if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
- friendship += 150 * sp2C / 100;
- else
- friendship += sp2C;
- if (sp2C > 0)
- {
- if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
- friendship++;
- if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
- friendship++;
- }
- if (friendship < 0)
- friendship = 0;
- if (friendship > 255)
- friendship = 255;
- SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship);
- */
- }
- sp24++;
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 100
+ && GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 200
+ && retVal == FALSE
+ && sp18 == 0)
+ sp18 = itemEffect[r10];
+ r10++;
break;
- case 7:
- if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == 0 && sp2C == 0)
- {
- sp2C = itemEffect[sp24];
- /*
- friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL);
- if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
- friendship += 150 * sp2C / 100;
- else
- friendship += sp2C;
- if (sp2C > 0)
- {
- if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11)
- friendship++;
- if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId())
- friendship++;
- }
- if (friendship < 0)
- friendship = 0;
- if (friendship > 255)
- friendship = 255;
- SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship);
- */
- }
- sp24++;
+ case 7:\
+
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200
+ && retVal == FALSE
+ && sp18 == 0)
+ sp18 = itemEffect[r10];
+ r10++;
break;
}
}
- sp28++;
- r10 >>= 1;
+ i++;
+ curEffect >>= 1;
}
break;
}
@@ -4941,7 +4680,7 @@ bool8 PokemonUseItemEffects2(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 m
}
#else
__attribute__((naked))
-bool8 PokemonUseItemEffects2(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 moveIndex, u8 e)
+bool8 PokemonUseItemEffects2(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\