summaryrefslogtreecommitdiff
path: root/src/pokemon.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pokemon.c')
-rw-r--r--src/pokemon.c665
1 files changed, 321 insertions, 344 deletions
diff --git a/src/pokemon.c b/src/pokemon.c
index b523c4cb9..f8c03ea02 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -30,6 +30,7 @@
#include "constants/abilities.h"
#include "constants/moves.h"
#include "constants/songs.h"
+#include "constants/item_effects.h"
#include "constants/trainer_classes.h"
#include "constants/facility_trainer_classes.h"
#include "constants/hold_effects.h"
@@ -72,7 +73,7 @@ static u16 GetDeoxysStat(struct Pokemon *mon, s32 statId);
static bool8 IsShinyOtIdPersonality(u32 otId, u32 personality);
static u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex);
static u8 GetNatureFromPersonality(u32 personality);
-static bool8 sub_8042BE8(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId);
+static bool8 PartyMonHasStatus(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId);
static bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId);
static bool8 IsPokemonStorageFull(void);
static u8 SendMonToPC(struct Pokemon* mon);
@@ -1472,101 +1473,101 @@ static const u8 sHoldEffectToType[][2] =
{HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL},
};
-const struct SpriteTemplate gUnknown_825DEF0[] =
+const struct SpriteTemplate gSpriteTemplates_Battlers[] =
{
- {
+ [B_POSITION_PLAYER_LEFT] = {
.tileTag = SPRITE_INVALID_TAG,
.paletteTag = 0,
- .oam = &gOamData_824F018,
+ .oam = &gOamData_BattlerPlayer,
.anims = NULL,
- .images = gUnknown_8234698,
- .affineAnims = gSpriteAffineAnimTable_82348C8,
- .callback = sub_80120C4,
+ .images = gSpriteImages_BattlerPlayerLeft,
+ .affineAnims = gSpriteAffineAnimTable_BattlerPlayer,
+ .callback = SpriteCB_AllyMon,
},
- {
+ [B_POSITION_OPPONENT_LEFT] = {
.tileTag = SPRITE_INVALID_TAG,
.paletteTag = 0,
- .oam = &gOamData_824F010,
+ .oam = &gOamData_BattlerOpponent,
.anims = NULL,
- .images = gUnknown_82346B8,
- .affineAnims = gSpriteAffineAnimTable_8234944,
- .callback = SpriteCB_WildMon,
+ .images = gSpriteImages_BattlerOpponentLeft,
+ .affineAnims = gSpriteAffineAnimTable_BattlerOpponent,
+ .callback = SpriteCB_EnemyMon,
},
- {
+ [B_POSITION_PLAYER_RIGHT] = {
.tileTag = SPRITE_INVALID_TAG,
.paletteTag = 0,
- .oam = &gOamData_824F018,
+ .oam = &gOamData_BattlerPlayer,
.anims = NULL,
- .images = gUnknown_82346D8,
- .affineAnims = gSpriteAffineAnimTable_82348C8,
- .callback = sub_80120C4,
+ .images = gSpriteImages_BattlerPlayerRight,
+ .affineAnims = gSpriteAffineAnimTable_BattlerPlayer,
+ .callback = SpriteCB_AllyMon,
},
- {
+ [B_POSITION_OPPONENT_RIGHT] = {
.tileTag = SPRITE_INVALID_TAG,
.paletteTag = 0,
- .oam = &gOamData_824F010,
+ .oam = &gOamData_BattlerOpponent,
.anims = NULL,
- .images = gUnknown_82346F8,
- .affineAnims = gSpriteAffineAnimTable_8234944,
- .callback = SpriteCB_WildMon,
+ .images = gSpriteImages_BattlerOpponentRight,
+ .affineAnims = gSpriteAffineAnimTable_BattlerOpponent,
+ .callback = SpriteCB_EnemyMon,
},
};
-const struct SpriteTemplate gUnknown_825DF50[] =
+const struct SpriteTemplate gSpriteTemplates_TrainerBackpics[] =
{
{
.tileTag = SPRITE_INVALID_TAG,
.paletteTag = 0,
- .oam = &gOamData_824F018,
+ .oam = &gOamData_BattlerPlayer,
.anims = NULL,
.images = gTrainerBackPicTable_Red,
- .affineAnims = gSpriteAffineAnimTable_82348C8,
- .callback = sub_80120C4,
+ .affineAnims = gSpriteAffineAnimTable_BattlerPlayer,
+ .callback = SpriteCB_AllyMon,
},
{
.tileTag = SPRITE_INVALID_TAG,
.paletteTag = 0,
- .oam = &gOamData_824F018,
+ .oam = &gOamData_BattlerPlayer,
.anims = NULL,
.images = gTrainerBackPicTable_Leaf,
- .affineAnims = gSpriteAffineAnimTable_82348C8,
- .callback = sub_80120C4,
+ .affineAnims = gSpriteAffineAnimTable_BattlerPlayer,
+ .callback = SpriteCB_AllyMon,
},
{
.tileTag = SPRITE_INVALID_TAG,
.paletteTag = 0,
- .oam = &gOamData_824F018,
+ .oam = &gOamData_BattlerPlayer,
.anims = NULL,
.images = gTrainerBackPicTable_RSBrendan,
- .affineAnims = gSpriteAffineAnimTable_82348C8,
- .callback = sub_80120C4,
+ .affineAnims = gSpriteAffineAnimTable_BattlerPlayer,
+ .callback = SpriteCB_AllyMon,
},
{
.tileTag = SPRITE_INVALID_TAG,
.paletteTag = 0,
- .oam = &gOamData_824F018,
+ .oam = &gOamData_BattlerPlayer,
.anims = NULL,
.images = gTrainerBackPicTable_RSMay,
- .affineAnims = gSpriteAffineAnimTable_82348C8,
- .callback = sub_80120C4,
+ .affineAnims = gSpriteAffineAnimTable_BattlerPlayer,
+ .callback = SpriteCB_AllyMon,
},
{
.tileTag = SPRITE_INVALID_TAG,
.paletteTag = 0,
- .oam = &gOamData_824F018,
+ .oam = &gOamData_BattlerPlayer,
.anims = NULL,
.images = gTrainerBackPicTable_Pokedude,
- .affineAnims = gSpriteAffineAnimTable_82348C8,
- .callback = sub_80120C4,
+ .affineAnims = gSpriteAffineAnimTable_BattlerPlayer,
+ .callback = SpriteCB_AllyMon,
},
{
.tileTag = SPRITE_INVALID_TAG,
.paletteTag = 0,
- .oam = &gOamData_824F018,
+ .oam = &gOamData_BattlerPlayer,
.anims = NULL,
.images = gTrainerBackPicTable_OldMan,
- .affineAnims = gSpriteAffineAnimTable_82348C8,
- .callback = sub_80120C4,
+ .affineAnims = gSpriteAffineAnimTable_BattlerPlayer,
+ .callback = SpriteCB_AllyMon,
},
};
@@ -1586,7 +1587,7 @@ static const u8 sGetMonDataEVConstants[] =
MON_DATA_SPATK_EV
};
-static const u8 gUnknown_825DFF0[] =
+static const u8 sStatsToRaise[] =
{
STAT_ATK, STAT_ATK, STAT_SPEED, STAT_DEF, STAT_SPATK, STAT_ACC
};
@@ -1986,7 +1987,7 @@ static void CreateEventLegalMon(struct Pokemon *mon, u16 species, u8 level, u8 f
SetMonData(mon, MON_DATA_EVENT_LEGAL, &isEventLegal);
}
-void sub_803E23C(struct Pokemon *mon, struct BattleTowerPokemon *dest)
+void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest)
{
s32 i;
u16 heldItem;
@@ -2716,7 +2717,7 @@ void SetMultiuseSpriteTemplateToPokemon(u16 speciesTag, u8 battlerPosition)
if (battlerPosition >= 4)
battlerPosition = 0;
- gMultiuseSpriteTemplate = gUnknown_825DEF0[battlerPosition];
+ gMultiuseSpriteTemplate = gSpriteTemplates_Battlers[battlerPosition];
}
}
gMultiuseSpriteTemplate.paletteTag = speciesTag;
@@ -2728,7 +2729,7 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosit
gMultiuseSpriteTemplate.paletteTag = trainerSpriteId;
if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT)
{
- gMultiuseSpriteTemplate = gUnknown_825DF50[trainerSpriteId];
+ gMultiuseSpriteTemplate = gSpriteTemplates_TrainerBackpics[trainerSpriteId];
gMultiuseSpriteTemplate.anims = gTrainerBackAnimsPtrTable[trainerSpriteId];
}
else
@@ -2736,7 +2737,7 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosit
if (gMonSpritesGfxPtr != NULL)
gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition];
else
- gMultiuseSpriteTemplate = gUnknown_825DEF0[battlerPosition];
+ gMultiuseSpriteTemplate = gSpriteTemplates_Battlers[battlerPosition];
gMultiuseSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[trainerSpriteId];
}
}
@@ -3895,7 +3896,7 @@ static void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex)
gBattleMons[battlerId].statStages[i] = 6;
gBattleMons[battlerId].status2 = 0;
- sub_80174B8(battlerId);
+ UpdateSentPokesToOpponentValue(battlerId);
ClearTemporarySpeciesSpriteData(battlerId, FALSE);
}
@@ -3911,14 +3912,14 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
s32 cmdIndex;
bool8 retVal = TRUE;
const u8 *itemEffect;
- u8 sp24 = 6;
- u32 sp28;
- s8 sp2C = 0;
+ u8 idx = 6;
+ u32 i;
+ s8 friendshipDelta = 0;
u8 holdEffect;
- u8 sp34 = 4;
+ u8 battleMonId = 4;
u16 heldItem;
- u8 r10;
- u32 r4;
+ u8 val;
+ u32 evDelta;
heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
if (heldItem == ITEM_ENIGMA_BERRY)
@@ -3942,7 +3943,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
{
if (gBattlerPartyIndexes[cmdIndex] == partyIndex)
{
- sp34 = cmdIndex;
+ battleMonId = cmdIndex;
break;
}
cmdIndex += 2;
@@ -3951,12 +3952,12 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
else
{
gActiveBattler = 0;
- sp34 = 4;
+ battleMonId = 4;
}
if (!IS_POKEMON_ITEM(item))
return TRUE;
- if (gItemEffectTable[item - 13] == NULL && item != ITEM_ENIGMA_BERRY)
+ if (gItemEffectTable[item - ITEM_POTION] == NULL && item != ITEM_ENIGMA_BERRY)
return TRUE;
if (item == ITEM_ENIGMA_BERRY)
@@ -3968,7 +3969,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
}
else
{
- itemEffect = gItemEffectTable[item - 13];
+ itemEffect = gItemEffectTable[item - ITEM_POTION];
}
for (cmdIndex = 0; cmdIndex < 6; cmdIndex++)
@@ -3977,22 +3978,22 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
{
// status healing effects
case 0:
- if ((itemEffect[cmdIndex] & 0x80)
- && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_INFATUATION))
+ if ((itemEffect[cmdIndex] & ITEM0_INFATUATION)
+ && gMain.inBattle && battleMonId != 4 && (gBattleMons[battleMonId].status2 & STATUS2_INFATUATION))
{
- gBattleMons[sp34].status2 &= ~STATUS2_INFATUATION;
+ gBattleMons[battleMonId].status2 &= ~STATUS2_INFATUATION;
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & 0x30)
+ if ((itemEffect[cmdIndex] & ITEM0_HIGH_CRIT)
&& !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY))
{
gBattleMons[gActiveBattler].status2 |= STATUS2_FOCUS_ENERGY;
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & 0xF)
+ if ((itemEffect[cmdIndex] & ITEM0_X_ATTACK)
&& gBattleMons[gActiveBattler].statStages[STAT_ATK] < 12)
{
- gBattleMons[gActiveBattler].statStages[STAT_ATK] += itemEffect[cmdIndex] & 0xF;
+ gBattleMons[gActiveBattler].statStages[STAT_ATK] += itemEffect[cmdIndex] & ITEM0_X_ATTACK;
if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > 12)
gBattleMons[gActiveBattler].statStages[STAT_ATK] = 12;
retVal = FALSE;
@@ -4000,18 +4001,18 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
break;
// in-battle stat boosting effects?
case 1:
- if ((itemEffect[cmdIndex] & 0xF0)
+ if ((itemEffect[cmdIndex] & ITEM1_X_DEFEND)
&& gBattleMons[gActiveBattler].statStages[STAT_DEF] < 12)
{
- gBattleMons[gActiveBattler].statStages[STAT_DEF] += (itemEffect[cmdIndex] & 0xF0) >> 4;
+ gBattleMons[gActiveBattler].statStages[STAT_DEF] += (itemEffect[cmdIndex] & ITEM1_X_DEFEND) >> 4;
if (gBattleMons[gActiveBattler].statStages[STAT_DEF] > 12)
gBattleMons[gActiveBattler].statStages[STAT_DEF] = 12;
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & 0xF)
+ if ((itemEffect[cmdIndex] & ITEM1_X_SPEED)
&& gBattleMons[gActiveBattler].statStages[STAT_SPEED] < 12)
{
- gBattleMons[gActiveBattler].statStages[STAT_SPEED] += itemEffect[cmdIndex] & 0xF;
+ gBattleMons[gActiveBattler].statStages[STAT_SPEED] += itemEffect[cmdIndex] & ITEM1_X_SPEED;
if (gBattleMons[gActiveBattler].statStages[STAT_SPEED] > 12)
gBattleMons[gActiveBattler].statStages[STAT_SPEED] = 12;
retVal = FALSE;
@@ -4019,31 +4020,31 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
break;
// more stat boosting effects?
case 2:
- if ((itemEffect[cmdIndex] & 0xF0)
+ if ((itemEffect[cmdIndex] & ITEM2_X_ACCURACY)
&& gBattleMons[gActiveBattler].statStages[STAT_ACC] < 12)
{
- gBattleMons[gActiveBattler].statStages[STAT_ACC] += (itemEffect[cmdIndex] & 0xF0) >> 4;
+ gBattleMons[gActiveBattler].statStages[STAT_ACC] += (itemEffect[cmdIndex] & ITEM2_X_ACCURACY) >> 4;
if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > 12)
gBattleMons[gActiveBattler].statStages[STAT_ACC] = 12;
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & 0xF)
+ if ((itemEffect[cmdIndex] & ITEM2_X_SPATK)
&& gBattleMons[gActiveBattler].statStages[STAT_SPATK] < 12)
{
- gBattleMons[gActiveBattler].statStages[STAT_SPATK] += itemEffect[cmdIndex] & 0xF;
+ gBattleMons[gActiveBattler].statStages[STAT_SPATK] += itemEffect[cmdIndex] & ITEM2_X_SPATK;
if (gBattleMons[gActiveBattler].statStages[STAT_SPATK] > 12)
gBattleMons[gActiveBattler].statStages[STAT_SPATK] = 12;
retVal = FALSE;
}
break;
case 3:
- if ((itemEffect[cmdIndex] & 0x80)
+ if ((itemEffect[cmdIndex] & ITEM3_MIST)
&& gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer == 0)
{
gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer = 5;
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & 0x40) // raise level
+ if ((itemEffect[cmdIndex] & ITEM3_LEVEL_UP) // raise level
&& GetMonData(mon, MON_DATA_LEVEL, NULL) != 100)
{
data = gExperienceTables[gBaseStats[GetMonData(mon, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(mon, MON_DATA_LEVEL, NULL) + 1];
@@ -4051,93 +4052,93 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
CalculateMonStats(mon);
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & 0x20)
- && HealStatusConditions(mon, partyIndex, 7, sp34) == 0)
+ if ((itemEffect[cmdIndex] & ITEM3_SLEEP)
+ && HealStatusConditions(mon, partyIndex, STATUS1_SLEEP, battleMonId) == 0)
{
- if (sp34 != 4)
- gBattleMons[sp34].status2 &= ~STATUS2_NIGHTMARE;
+ if (battleMonId != 4)
+ gBattleMons[battleMonId].status2 &= ~STATUS2_NIGHTMARE;
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & 0x10) && HealStatusConditions(mon, partyIndex, 0xF88, sp34) == 0)
+ if ((itemEffect[cmdIndex] & ITEM3_POISON) && HealStatusConditions(mon, partyIndex, STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER, battleMonId) == 0)
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 8) && HealStatusConditions(mon, partyIndex, 16, sp34) == 0)
+ if ((itemEffect[cmdIndex] & ITEM3_BURN) && HealStatusConditions(mon, partyIndex, STATUS1_BURN, battleMonId) == 0)
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 4) && HealStatusConditions(mon, partyIndex, 32, sp34) == 0)
+ if ((itemEffect[cmdIndex] & ITEM3_FREEZE) && HealStatusConditions(mon, partyIndex, STATUS1_FREEZE, battleMonId) == 0)
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 2) && HealStatusConditions(mon, partyIndex, 64, sp34) == 0)
+ if ((itemEffect[cmdIndex] & ITEM3_PARALYSIS) && HealStatusConditions(mon, partyIndex, STATUS1_PARALYSIS, battleMonId) == 0)
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 1) // heal confusion
- && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_CONFUSION))
+ if ((itemEffect[cmdIndex] & ITEM3_CONFUSION) // heal confusion
+ && gMain.inBattle && battleMonId != 4 && (gBattleMons[battleMonId].status2 & STATUS2_CONFUSION))
{
- gBattleMons[sp34].status2 &= ~STATUS2_CONFUSION;
+ gBattleMons[battleMonId].status2 &= ~STATUS2_CONFUSION;
retVal = FALSE;
}
break;
// EV, HP, and PP raising effects
case 4:
- r10 = itemEffect[cmdIndex];
- if (r10 & 0x20)
+ val = itemEffect[cmdIndex];
+ if (val & ITEM4_PP_UP)
{
- r10 &= ~0x20;
+ val &= ~ITEM4_PP_UP;
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)
+ i = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
+ if (data < 3 && i > 4)
{
data = GetMonData(mon, MON_DATA_PP_BONUSES, NULL) + gPPUpAddMask[moveIndex];
SetMonData(mon, MON_DATA_PP_BONUSES, &data);
- data = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - sp28;
+ data = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - i;
data = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL) + data;
SetMonData(mon, MON_DATA_PP1 + moveIndex, &data);
retVal = FALSE;
}
}
- sp28 = 0;
- while (r10 != 0)
+ i = 0;
+ while (val != 0)
{
- if (r10 & 1)
+ if (val & 1)
{
u16 evCount;
s32 r5;
- switch (sp28)
+ switch (i)
{
- case 0:
- case 1:
+ case 0: // EV_HP
+ case 1: // EV_ATK
evCount = GetMonEVCount(mon);
if (evCount >= 510)
return TRUE;
- data = GetMonData(mon, sGetMonDataEVConstants[sp28], NULL);
+ data = GetMonData(mon, sGetMonDataEVConstants[i], NULL);
if (data < 100)
{
- if (data + itemEffect[sp24] > 100)
- r4 = 100 - (data + itemEffect[sp24]) + itemEffect[sp24];
+ if (data + itemEffect[idx] > 100)
+ evDelta = 100 - (data + itemEffect[idx]) + itemEffect[idx];
else
- r4 = itemEffect[sp24];
- if (evCount + r4 > 510)
- r4 += 510 - (evCount + r4);
- data += r4;
- SetMonData(mon, sGetMonDataEVConstants[sp28], &data);
+ evDelta = itemEffect[idx];
+ if (evCount + evDelta > 510)
+ evDelta += 510 - (evCount + evDelta);
+ data += evDelta;
+ SetMonData(mon, sGetMonDataEVConstants[i], &data);
CalculateMonStats(mon);
- sp24++;
+ idx++;
retVal = FALSE;
}
break;
- case 2:
+ case 2: // HEAL_HP
// revive?
- if (r10 & 0x10)
+ if (val & (ITEM4_REVIVE >> 2))
{
if (GetMonData(mon, MON_DATA_HP, NULL) != 0)
{
- sp24++;
+ idx++;
break;
}
if (gMain.inBattle)
{
- if (sp34 != 4)
+ if (battleMonId != 4)
{
- gAbsentBattlerFlags &= ~gBitTable[sp34];
- CopyPlayerPartyMonToBattleData(sp34, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[sp34]));
+ gAbsentBattlerFlags &= ~gBitTable[battleMonId];
+ CopyPlayerPartyMonToBattleData(battleMonId, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battleMonId]));
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255)
gBattleResults.numRevivesUsed++;
}
@@ -4153,11 +4154,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
{
if (GetMonData(mon, MON_DATA_HP, NULL) == 0)
{
- sp24++;
+ idx++;
break;
}
}
- data = itemEffect[sp24++];
+ data = itemEffect[idx++];
switch (data)
{
case 0xFF:
@@ -4180,16 +4181,16 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
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)
+ if (gMain.inBattle && battleMonId != 4)
{
- gBattleMons[sp34].hp = data;
- if (!(r10 & 0x10) && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ gBattleMons[battleMonId].hp = data;
+ if (!(val & (ITEM4_REVIVE >> 2)) && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
if (gBattleResults.numHealingItemsUsed < 255)
gBattleResults.numHealingItemsUsed++;
// I have to re-use this variable to match.
r5 = gActiveBattler;
- gActiveBattler = sp34;
+ gActiveBattler = battleMonId;
BtlController_EmitGetMonData(0, 0, 0);
MarkBattlerForControllerExec(gActiveBattler);
gActiveBattler = r5;
@@ -4202,63 +4203,63 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
}
retVal = FALSE;
}
- r10 &= 0xEF;
+ val &= ~(ITEM4_REVIVE >> 2);
break;
- case 3:
- if (!(r10 & 2))
+ case 3: // HEAL_PP_ALL
+ if (!(val & (ITEM4_HEAL_PP_ONE >> 3)))
{
for (r5 = 0; r5 < 4; r5++)
{
- u16 r4;
+ u16 move_id;
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))
+ move_id = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL);
+ if (data != CalculatePPWithBonus(move_id, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5))
{
- data += itemEffect[sp24];
- r4 = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL);
- if (data > CalculatePPWithBonus(r4, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5))
+ data += itemEffect[idx];
+ move_id = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL);
+ if (data > CalculatePPWithBonus(move_id, GetMonData(mon, 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);
+ move_id = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL);
+ data = CalculatePPWithBonus(move_id, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5);
}
SetMonData(mon, MON_DATA_PP1 + r5, &data);
if (gMain.inBattle
- && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000)
- && !(gDisableStructs[sp34].mimickedMoves & gBitTable[r5]))
- gBattleMons[sp34].pp[r5] = data;
+ && battleMonId != 4 && !(gBattleMons[battleMonId].status2 & STATUS2_TRANSFORMED)
+ && !(gDisableStructs[battleMonId].mimickedMoves & gBitTable[r5]))
+ gBattleMons[battleMonId].pp[r5] = data;
retVal = FALSE;
}
}
- sp24++;
+ idx++;
}
else
{
- u16 r4;
+ u16 move_id;
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))
+ move_id = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
+ if (data != CalculatePPWithBonus(move_id, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex))
{
- data += itemEffect[sp24++];
- r4 = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
- if (data > CalculatePPWithBonus(r4, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex))
+ data += itemEffect[idx++];
+ move_id = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
+ if (data > CalculatePPWithBonus(move_id, GetMonData(mon, 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);
+ move_id = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
+ data = CalculatePPWithBonus(move_id, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
}
SetMonData(mon, MON_DATA_PP1 + moveIndex, &data);
if (gMain.inBattle
- && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000)
- && !(gDisableStructs[sp34].mimickedMoves & gBitTable[moveIndex]))
- gBattleMons[sp34].pp[moveIndex] = data;
+ && battleMonId != 4 && !(gBattleMons[battleMonId].status2 & STATUS2_TRANSFORMED)
+ && !(gDisableStructs[battleMonId].mimickedMoves & gBitTable[moveIndex]))
+ gBattleMons[battleMonId].pp[moveIndex] = data;
retVal = FALSE;
}
}
break;
- case 7:
+ case 7: // EVO_STONE
{
- u16 targetSpecies = GetEvolutionTargetSpecies(mon, 2, item);
+ u16 targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_ITEM_USE, item);
if (targetSpecies != SPECIES_NONE)
{
@@ -4269,70 +4270,70 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
break;
}
}
- sp28++;
- r10 >>= 1;
+ i++;
+ val >>= 1;
}
break;
case 5:
- r10 = itemEffect[cmdIndex];
- sp28 = 0;
- while (r10 != 0)
+ val = itemEffect[cmdIndex];
+ i = 0;
+ while (val != 0)
{
- if (r10 & 1)
+ if (val & 1)
{
u16 evCount;
- switch (sp28)
+ switch (i)
{
- case 0:
- case 1:
- case 2:
- case 3:
+ case 0: // EV_DEF
+ case 1: // EV_SPEED
+ case 2: // EV_SPDEF
+ case 3: // EV_SPATK
evCount = GetMonEVCount(mon);
if (evCount >= 510)
return TRUE;
- data = GetMonData(mon, 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];
+ if (data + itemEffect[idx] > 100)
+ evDelta = 100 - (data + itemEffect[idx]) + itemEffect[idx];
else
- r4 = itemEffect[sp24];
- if (evCount + r4 > 510)
- r4 += 510 - (evCount + r4);
- data += r4;
- SetMonData(mon, sGetMonDataEVConstants[sp28 + 2], &data);
+ evDelta = itemEffect[idx];
+ if (evCount + evDelta > 510)
+ evDelta += 510 - (evCount + evDelta);
+ data += evDelta;
+ SetMonData(mon, sGetMonDataEVConstants[i + 2], &data);
CalculateMonStats(mon);
retVal = FALSE;
- sp24++;
+ idx++;
}
break;
- case 4:
+ case 4: // PP_MAX
data = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2);
if (data < 3)
{
- r4 = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
+ evDelta = 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(mon, MON_DATA_PP_BONUSES, &data);
- data = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - r4;
+ data = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - evDelta;
data = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL) + data;
SetMonData(mon, MON_DATA_PP1 + moveIndex, &data);
retVal = FALSE;
}
break;
- case 5:
- if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100 && retVal == 0 && sp2C == 0)
+ case 5: // FRIENDSHIP_LOW
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100 && retVal == 0 && friendshipDelta == 0)
{
- sp2C = itemEffect[sp24];
+ friendshipDelta = itemEffect[idx];
friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
- if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
- friendship += 150 * sp2C / 100;
+ if (friendshipDelta > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
+ friendship += 150 * friendshipDelta / 100;
else
- friendship += sp2C;
- if (sp2C > 0)
+ friendship += friendshipDelta;
+ if (friendshipDelta > 0)
{
if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11)
friendship++;
@@ -4345,19 +4346,19 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
friendship = 255;
SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
}
- sp24++;
+ idx++;
break;
- case 6:
+ case 6: // FRIENDSHIP_MID
if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 200
- && retVal == 0 && sp2C == 0)
+ && retVal == 0 && friendshipDelta == 0)
{
- sp2C = itemEffect[sp24];
+ friendshipDelta = itemEffect[idx];
friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
- if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
- friendship += 150 * sp2C / 100;
+ if (friendshipDelta > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
+ friendship += 150 * friendshipDelta / 100;
else
- friendship += sp2C;
- if (sp2C > 0)
+ friendship += friendshipDelta;
+ if (friendshipDelta > 0)
{
if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11)
friendship++;
@@ -4370,18 +4371,18 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
friendship = 255;
SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
}
- sp24++;
+ idx++;
break;
- case 7:
- if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == 0 && sp2C == 0)
+ case 7: // FRIENDSHIP_HIGH
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == 0 && friendshipDelta == 0)
{
- sp2C = itemEffect[sp24];
+ friendshipDelta = itemEffect[idx];
friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
- if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
- friendship += 150 * sp2C / 100;
+ if (friendshipDelta > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
+ friendship += 150 * friendshipDelta / 100;
else
- friendship += sp2C;
- if (sp2C > 0)
+ friendship += friendshipDelta;
+ if (friendshipDelta > 0)
{
if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11)
friendship++;
@@ -4394,12 +4395,12 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
friendship = 255;
SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
}
- sp24++;
+ idx++;
break;
}
}
- sp28++;
- r10 >>= 1;
+ i++;
+ val >>= 1;
}
break;
}
@@ -4432,7 +4433,7 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo
s32 cmdIndex;
bool8 retVal = TRUE;
const u8 *itemEffect;
- u8 r10 = 6;
+ u8 idx = 6;
u32 i;
s32 sp18 = 0;
u8 holdEffect;
@@ -4476,7 +4477,7 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo
}
if (!IS_POKEMON_ITEM(item))
return TRUE;
- if (gItemEffectTable[item - 13] == NULL && item != ITEM_ENIGMA_BERRY)
+ if (gItemEffectTable[item - ITEM_POTION] == NULL && item != ITEM_ENIGMA_BERRY)
return TRUE;
if (item == ITEM_ENIGMA_BERRY)
{
@@ -4495,64 +4496,64 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo
{
// status healing effects
case 0:
- if (itemEffect[cmdIndex] & 0x80
+ if (itemEffect[cmdIndex] & ITEM0_INFATUATION
&& gMain.inBattle
&& battlerId != 4
&& gBattleMons[battlerId].status2 & STATUS2_INFATUATION)
retVal = FALSE;
- if (itemEffect[cmdIndex] & 0x30
+ if (itemEffect[cmdIndex] & ITEM0_HIGH_CRIT
&& !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY))
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 0xF)
+ if ((itemEffect[cmdIndex] & ITEM0_X_ATTACK)
&& gBattleMons[gActiveBattler].statStages[STAT_ATK] < 12)
retVal = FALSE;
break;
// in-battle stat boosting effects?
case 1:
- if ((itemEffect[cmdIndex] & 0xF0)
+ if ((itemEffect[cmdIndex] & ITEM1_X_DEFEND)
&& gBattleMons[gActiveBattler].statStages[STAT_DEF] < 12)
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 0xF)
+ if ((itemEffect[cmdIndex] & ITEM1_X_SPEED)
&& gBattleMons[gActiveBattler].statStages[STAT_SPEED] < 12)
retVal = FALSE;
break;
// more stat boosting effects?
case 2:
- if ((itemEffect[cmdIndex] & 0xF0)
+ if ((itemEffect[cmdIndex] & ITEM2_X_ACCURACY)
&& gBattleMons[gActiveBattler].statStages[STAT_ACC] < 12)
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 0xF)
+ if ((itemEffect[cmdIndex] & ITEM2_X_SPATK)
&& gBattleMons[gActiveBattler].statStages[STAT_SPATK] < 12)
retVal = FALSE;
break;
case 3:
- if ((itemEffect[cmdIndex] & 0x80)
+ if ((itemEffect[cmdIndex] & ITEM3_MIST)
&& gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer == 0)
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 0x40) // raise level
+ if ((itemEffect[cmdIndex] & ITEM3_LEVEL_UP) // raise level
&& GetMonData(mon, MON_DATA_LEVEL, NULL) != 100)
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 0x20)
- && sub_8042BE8(mon, partyIndex, 7, battlerId))
+ if ((itemEffect[cmdIndex] & ITEM3_SLEEP)
+ && PartyMonHasStatus(mon, partyIndex, STATUS1_SLEEP, battlerId))
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 0x10) && sub_8042BE8(mon, partyIndex, 0xF88, battlerId))
+ if ((itemEffect[cmdIndex] & ITEM3_POISON) && PartyMonHasStatus(mon, partyIndex, STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER, battlerId))
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 8) && sub_8042BE8(mon, partyIndex, 16, battlerId))
+ if ((itemEffect[cmdIndex] & ITEM3_BURN) && PartyMonHasStatus(mon, partyIndex, STATUS1_BURN, battlerId))
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 4) && sub_8042BE8(mon, partyIndex, 32, battlerId))
+ if ((itemEffect[cmdIndex] & ITEM3_FREEZE) && PartyMonHasStatus(mon, partyIndex, STATUS1_FREEZE, battlerId))
retVal = FALSE;
- if ((itemEffect[cmdIndex] & 2) && sub_8042BE8(mon, partyIndex, 64, battlerId))
+ if ((itemEffect[cmdIndex] & ITEM3_PARALYSIS) && PartyMonHasStatus(mon, partyIndex, STATUS1_PARALYSIS, battlerId))
retVal = FALSE;
- if (itemEffect[cmdIndex] & 1 // heal confusion
+ if (itemEffect[cmdIndex] & ITEM3_CONFUSION // heal confusion
&& gMain.inBattle && battlerId != 4 && (gBattleMons[battlerId].status2 & STATUS2_CONFUSION))
retVal = FALSE;
break;
// EV, HP, and PP raising effects
case 4:
curEffect = itemEffect[cmdIndex];
- if (curEffect & 0x20)
+ if (curEffect & ITEM4_PP_UP)
{
- curEffect &= ~0x20;
+ curEffect &= ~ITEM4_PP_UP;
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)
@@ -4565,24 +4566,24 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo
{
switch (i)
{
- case 0:
- case 1:
+ case 0: // EV_HP
+ case 1: // EV_ATK
if (GetMonEVCount(mon) >= 510)
return TRUE;
data = GetMonData(mon, sGetMonDataEVConstants[i], NULL);
if (data < 100)
{
- r10++;
+ idx++;
retVal = FALSE;
}
break;
- case 2:
+ case 2: // HEAL_HP
// revive?
- if (curEffect & 0x10)
+ if (curEffect & (ITEM4_REVIVE >> 2))
{
if (GetMonData(mon, MON_DATA_HP, NULL) != 0)
{
- r10++;
+ idx++;
break;
}
}
@@ -4590,17 +4591,17 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo
{
if (GetMonData(mon, MON_DATA_HP, NULL) == 0)
{
- r10++;
+ idx++;
break;
}
}
if (GetMonData(mon, MON_DATA_MAX_HP, NULL) != GetMonData(mon, MON_DATA_HP, NULL))
retVal = FALSE;
- r10++;
- curEffect &= 0xEF;
+ idx++;
+ curEffect &= ~(ITEM4_REVIVE >> 2);
break;
case 3:
- if (!(curEffect & 2))
+ if (!(curEffect & (ITEM4_HEAL_PP_ONE >> 3)))
{
for (tmp = 0; tmp < MAX_MON_MOVES; tmp++)
{
@@ -4608,7 +4609,7 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo
if (data != CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + tmp, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), tmp))
retVal = FALSE;
}
- r10++;
+ idx++;
}
else // _080429FA
{
@@ -4616,13 +4617,13 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo
curMoveId = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
if (data != CalculatePPWithBonus(curMoveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex))
{
- r10++;
+ idx++;
retVal = FALSE;
}
}
break;
case 7:
- if (GetEvolutionTargetSpecies(mon, 2, item) != SPECIES_NONE)
+ if (GetEvolutionTargetSpecies(mon, EVO_MODE_ITEM_USE, item) != SPECIES_NONE)
return FALSE;
break;
}
@@ -4640,46 +4641,46 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo
{
switch (i)
{
- case 0:
- case 1:
- case 2:
- case 3:
+ case 0: // EV_DEF
+ case 1: // EV_SPEED
+ case 2: // EV_SPDEF
+ case 3: // EV_SPATK
if (GetMonEVCount(mon) >= 510)
return TRUE;
data = GetMonData(mon, sGetMonDataEVConstants[i + 2], NULL);
if (data < 100)
{
retVal = FALSE;
- r10++;
+ idx++;
}
break;
- case 4:
+ case 4: // PP_MAX
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:
+ case 5: // FRIENDSHIP_LOW
if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100
&& retVal == FALSE
&& sp18 == 0)
- sp18 = itemEffect[r10];
- r10++;
+ sp18 = itemEffect[idx];
+ idx++;
break;
- case 6:
+ case 6: // FRIENDSHIP_MID
if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 100
&& GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 200
&& retVal == FALSE
&& sp18 == 0)
- sp18 = itemEffect[r10];
- r10++;
+ sp18 = itemEffect[idx];
+ idx++;
break;
- case 7:
+ case 7: // FRIENDSHIP_HIGH
if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200
&& retVal == FALSE
&& sp18 == 0)
- sp18 = itemEffect[r10];
- r10++;
+ sp18 = itemEffect[idx];
+ idx++;
break;
}
}
@@ -4692,7 +4693,7 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo
return retVal;
}
-static bool8 sub_8042BE8(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId)
+static bool8 PartyMonHasStatus(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId)
{
if ((GetMonData(mon, MON_DATA_STATUS, NULL) & healMask) != 0)
return TRUE;
@@ -4813,10 +4814,10 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit)
return offset;
}
-static void sub_8042D50(int stat)
+static void BufferStatRoseMessage(int stat)
{
gBattlerTarget = gBattlerInMenuId;
- StringCopy(gBattleTextBuff1, gStatNamesTable[gUnknown_825DFF0[stat]]);
+ StringCopy(gBattleTextBuff1, gStatNamesTable[sStatsToRaise[stat]]);
StringCopy(gBattleTextBuff2, gBattleText_Rose);
BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnsStatChanged2);
}
@@ -4847,12 +4848,12 @@ const u8 *Battle_PrintStatBoosterEffectMessage(u16 itemId)
for (i = 0; i < 3; i++)
{
if (itemEffect[i] & 0xF)
- sub_8042D50(i * 2);
+ BufferStatRoseMessage(i * 2);
if (itemEffect[i] & 0xF0)
{
if (i)
{
- sub_8042D50(i * 2 + 1);
+ BufferStatRoseMessage(i * 2 + 1);
}
else
{
@@ -4899,12 +4900,12 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
else
holdEffect = ItemId_GetHoldEffect(heldItem);
- if (holdEffect == HOLD_EFFECT_PREVENT_EVOLVE && type != 3)
+ if (holdEffect == HOLD_EFFECT_PREVENT_EVOLVE && type != EVO_MODE_ITEM_CHECK)
return 0;
switch (type)
{
- case 0:
+ case EVO_MODE_NORMAL:
level = GetMonData(mon, MON_DATA_LEVEL, 0);
friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
@@ -4969,7 +4970,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
}
}
break;
- case 1:
+ case EVO_MODE_TRADE:
for (i = 0; i < 5; i++)
{
switch (gEvolutionTable[species][i].method)
@@ -4992,8 +4993,8 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
}
}
break;
- case 2:
- case 3:
+ case EVO_MODE_ITEM_USE:
+ case EVO_MODE_ITEM_CHECK:
for (i = 0; i < 5; i++)
{
if (gEvolutionTable[species][i].method == EVO_ITEM
@@ -5098,96 +5099,63 @@ u16 SpeciesToCryId(u16 species)
return sHoennSpeciesIdToCryId[species - ((SPECIES_OLD_UNOWN_Z + 1) - 1)];
}
-static void sub_8043338(u16 species, u32 personality, u8 *dest)
+#define DRAW_SPINDA_SPOTS \
+{ \
+ int i; \
+ for (i = 0; i < 4; i++) \
+ { \
+ int j; \
+ u8 x = sSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8); \
+ u8 y = sSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8); \
+ \
+ for (j = 0; j < 16; j++) \
+ { \
+ int k; \
+ s32 row = sSpindaSpotGraphics[i].image[j]; \
+ \
+ for (k = x; k < x + 16; k++) \
+ { \
+ u8 *val = dest + ((k / 8) * 32) + \
+ ((k % 8) / 2) + \
+ ((y >> 3) << 8) + \
+ ((y & 7) << 2); \
+ \
+ if (row & 1) \
+ { \
+ if (k & 1) \
+ { \
+ if ((u8)((*val & 0xF0) - 0x10) <= 0x20) \
+ *val += 0x40; \
+ } \
+ else \
+ { \
+ if ((u8)((*val & 0xF) - 0x01) <= 0x02) \
+ *val += 0x04; \
+ } \
+ } \
+ \
+ row >>= 1; \
+ } \
+ \
+ y++; \
+ } \
+ \
+ personality >>= 8; \
+ } \
+}
+
+static void DrawSpindaSpotsUnused(u16 species, u32 personality, u8 *dest)
{
if (species == SPECIES_SPINDA
&& dest != gMonSpritesGfxPtr->sprites[0]
&& dest != gMonSpritesGfxPtr->sprites[2])
- {
- int i;
- for (i = 0; i < 4; i++)
- {
- int j;
- u8 x = sSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
- u8 y = sSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
-
- for (j = 0; j < 16; j++)
- {
- int k;
- s32 row = sSpindaSpotGraphics[i].image[j];
-
- for (k = x; k < x + 16; k++)
- {
- u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
-
- if (row & 1)
- {
- if (k & 1)
- {
- if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
- *val += 0x40;
- }
- else
- {
- if ((u8)((*val & 0xF) - 0x01) <= 0x02)
- *val += 0x04;
- }
- }
-
- row >>= 1;
- }
-
- y++;
- }
-
- personality >>= 8;
- }
- }
+ DRAW_SPINDA_SPOTS;
}
-void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4)
+void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, bool8 isFrontPic)
{
- if (species == SPECIES_SPINDA && a4)
- {
- int i;
- for (i = 0; i < 4; i++)
- {
- int j;
- u8 x = sSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
- u8 y = sSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
-
- for (j = 0; j < 16; j++)
- {
- int k;
- s32 row = sSpindaSpotGraphics[i].image[j];
-
- for (k = x; k < x + 16; k++)
- {
- u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
-
- if (row & 1)
- {
- if (k & 1)
- {
- if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
- *val += 0x40;
- }
- else
- {
- if ((u8)((*val & 0xF) - 0x01) <= 0x02)
- *val += 0x04;
- }
- }
-
- row >>= 1;
- }
-
- y++;
- }
-
- personality >>= 8;
- }
- }
+ if (species == SPECIES_SPINDA && isFrontPic)
+ DRAW_SPINDA_SPOTS;
}
void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies)
@@ -5427,9 +5395,14 @@ u16 GetMonEVCount(struct Pokemon *mon)
return count;
}
+// This function was stubbed from RS, but it is stubbed badly.
+// This variable is likely the u8 passed to SetMonData in RSE.
+// The pointer reference causes agbcc to reserve it on the stack before even checking
+// whether it's used.
void RandomlyGivePartyPokerus(struct Pokemon *party)
{
- u8 foo[4]; // huh?
+ u8 foo;
+ &foo;
}
u8 CheckPartyPokerus(struct Pokemon *party, u8 selection)
@@ -5488,14 +5461,18 @@ u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection)
return retVal;
}
-static void sub_8043B38(void)
+// These two functions are stubbed from RS, but they're stubbed badly.
+// See note on RandomlyGivePartyPokerus above.
+static void UpdatePartyPokerusTime(void)
{
- u8 foo[4]; // huh?
+ u8 foo;
+ &foo;
}
void PartySpreadPokerus(struct Pokemon *party)
{
- u8 foo[4]; // huh?
+ u8 foo;
+ &foo;
}
static void SetMonExpWithMaxLevelCheck(struct Pokemon *mon, int species, u8 unused, u32 data)
@@ -5909,7 +5886,7 @@ u16 FacilityClassToPicIndex(u16 facilityClass)
return gFacilityClassToPicIndex[facilityClass];
}
-bool8 sub_804455C(u8 caseId, u8 battlerId)
+bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId)
{
switch (caseId)
{
@@ -6009,7 +5986,7 @@ void SetDeoxysStats(void)
}
}
-u16 sub_80447AC(void)
+u16 GetUnionRoomTrainerPic(void)
{
u8 linkId = GetMultiplayerId() ^ 1;
u32 arrId = gLinkPlayers[linkId].trainerId & 7;
@@ -6018,7 +5995,7 @@ u16 sub_80447AC(void)
return FacilityClassToPicIndex(gLinkPlayerFacilityClasses[arrId]);
}
-u16 sub_80447F0(void)
+u16 GetUnionRoomTrainerClass(void)
{
u8 linkId = GetMultiplayerId() ^ 1;
u32 arrId = gLinkPlayers[linkId].trainerId & 7;
@@ -6081,7 +6058,7 @@ static void OakSpeechNidoranFSetupTemplate(struct OakSpeechNidoranFStruct *struc
{
for (i = 0; i < (s8)structPtr->spriteCount; ++i)
{
- structPtr->templates[i] = gUnknown_825DEF0[i];
+ structPtr->templates[i] = gSpriteTemplates_Battlers[i];
for (j = 0; j < structPtr->frameCount; ++j)
structPtr->frameImages[i * structPtr->frameCount + j].data = &structPtr->bufferPtrs[i][j * 0x800];
structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->frameCount];
@@ -6089,7 +6066,7 @@ static void OakSpeechNidoranFSetupTemplate(struct OakSpeechNidoranFStruct *struc
}
else
{
- const struct SpriteTemplate *template = &gUnknown_825DEF0[battlePosition];
+ const struct SpriteTemplate *template = &gSpriteTemplates_Battlers[battlePosition];
structPtr->templates[0] = *template;
for (j = 0; j < structPtr->frameCount; ++j)