diff options
Diffstat (limited to 'src/pokemon.c')
-rw-r--r-- | src/pokemon.c | 463 |
1 files changed, 101 insertions, 362 deletions
diff --git a/src/pokemon.c b/src/pokemon.c index 6f1df249f..1a70f3bd3 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -4407,25 +4407,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) @@ -4437,41 +4440,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) @@ -4483,457 +4475,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); - MarkBufferBankForExecution(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; } @@ -4942,7 +4681,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\ |