GetBattlerMon cleanup (#6967)

This commit is contained in:
Eduardo Quezada 2025-06-01 15:10:24 -04:00 committed by GitHub
parent ec15948ea8
commit 5502fe2c5e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 70 additions and 78 deletions

View File

@ -866,15 +866,8 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *battler)
}
break;
case 5:
if (IsOnPlayerSide(*battler))
{
if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI))
UpdateHealthboxAttribute(gHealthboxSpriteIds[*battler], GetBattlerMon(*battler), HEALTHBOX_ALL);
}
else
{
if (!IsOnPlayerSide(*battler) || !(gBattleTypeFlags & BATTLE_TYPE_SAFARI))
UpdateHealthboxAttribute(gHealthboxSpriteIds[*battler], GetBattlerMon(*battler), HEALTHBOX_ALL);
}
SetHealthboxSpriteInvisible(gHealthboxSpriteIds[*battler]);
(*battler)++;
if (*battler == gBattlersCount)

View File

@ -1175,12 +1175,13 @@ void SwapHpBarsWithHpText(void)
for (i = 0; i < gBattlersCount; i++)
{
struct Pokemon *mon = GetBattlerMon(i);
if (gSprites[gHealthboxSpriteIds[i]].callback == SpriteCallbackDummy
&& IsOnPlayerSide(i)
&& (GetBattlerCoordsIndex(i) != BATTLE_COORDS_SINGLES || !IsOnPlayerSide(i)))
{
s32 currHp = GetMonData(GetBattlerMon(i), MON_DATA_HP);
s32 maxHp = GetMonData(GetBattlerMon(i), MON_DATA_MAX_HP);
s32 currHp = GetMonData(mon, MON_DATA_HP);
s32 maxHp = GetMonData(mon, MON_DATA_MAX_HP);
bool8 noBars;
gBattleSpritesDataPtr->battlerData[i].hpNumbersNoBars ^= 1;
@ -1202,7 +1203,7 @@ void SwapHpBarsWithHpText(void)
else // text to bars
{
UpdateStatusIconInHealthbox(gHealthboxSpriteIds[i]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[i], GetBattlerMon(i), HEALTHBOX_HEALTH_BAR);
UpdateHealthboxAttribute(gHealthboxSpriteIds[i], mon, HEALTHBOX_HEALTH_BAR);
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_FRAME_END_BAR), (void *)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxSpriteIds[i]].oam.tileNum * TILE_SIZE_4BPP), 32);
}
}
@ -1213,7 +1214,7 @@ void SwapHpBarsWithHpText(void)
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
{
// Most likely a debug function.
PrintSafariMonInfo(gHealthboxSpriteIds[i], GetBattlerMon(i));
PrintSafariMonInfo(gHealthboxSpriteIds[i], mon);
}
else
{
@ -1226,9 +1227,9 @@ void SwapHpBarsWithHpText(void)
else // text to bars
{
UpdateStatusIconInHealthbox(gHealthboxSpriteIds[i]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[i], GetBattlerMon(i), HEALTHBOX_HEALTH_BAR);
UpdateHealthboxAttribute(gHealthboxSpriteIds[i], mon, HEALTHBOX_HEALTH_BAR);
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
UpdateHealthboxAttribute(gHealthboxSpriteIds[i], GetBattlerMon(i), HEALTHBOX_NICK);
UpdateHealthboxAttribute(gHealthboxSpriteIds[i], mon, HEALTHBOX_NICK);
}
}
gSprites[gHealthboxSpriteIds[i]].hMain_Data7 ^= 1;
@ -1805,9 +1806,9 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
battler = gSprites[healthboxSpriteId].hMain_Battler;
healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId;
status = GetMonData(GetBattlerMon(battler), MON_DATA_STATUS);
if (IsOnPlayerSide(battler))
{
status = GetMonData(GetBattlerMon(battler), MON_DATA_STATUS);
switch (GetBattlerCoordsIndex(battler))
{
case BATTLE_COORDS_SINGLES:
@ -1820,7 +1821,6 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
}
else
{
status = GetMonData(GetBattlerMon(battler), MON_DATA_STATUS);
tileNumAdder = 0x11;
}

View File

@ -10158,10 +10158,7 @@ static void Cmd_various(void)
case VARIOUS_UPDATE_NICK:
{
VARIOUS_ARGS();
if (IsOnPlayerSide(battler))
mon = GetBattlerMon(battler);
else
mon = GetBattlerMon(battler);
mon = GetBattlerMon(battler);
UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], mon, HEALTHBOX_NICK);
break;
}
@ -15848,7 +15845,8 @@ static void Cmd_handleballthrow(void)
MarkBattlerForControllerExec(gBattlerAttacker);
TryBattleFormChange(gBattlerTarget, FORM_CHANGE_END_BATTLE);
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
SetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_POKEBALL, &ballId);
struct Pokemon *caughtMon = GetBattlerMon(gBattlerTarget);
SetMonData(caughtMon, MON_DATA_POKEBALL, &ballId);
if (CalculatePlayerPartyCount() == PARTY_SIZE)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
@ -15857,15 +15855,15 @@ static void Cmd_handleballthrow(void)
if (ballId == BALL_HEAL)
{
MonRestorePP(GetBattlerMon(gBattlerTarget));
HealStatusConditions(GetBattlerMon(gBattlerTarget), STATUS1_ANY, gBattlerTarget);
MonRestorePP(caughtMon);
HealStatusConditions(caughtMon, STATUS1_ANY, gBattlerTarget);
gBattleMons[gBattlerTarget].hp = gBattleMons[gBattlerTarget].maxHP;
SetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_HP, &gBattleMons[gBattlerTarget].hp);
SetMonData(caughtMon, MON_DATA_HP, &gBattleMons[gBattlerTarget].hp);
}
else if (ballId == BALL_FRIEND)
{
u32 friendship = (B_FRIEND_BALL_MODIFIER >= GEN_8 ? 150 : 200);
SetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_FRIENDSHIP, &friendship);
SetMonData(caughtMon, MON_DATA_FRIENDSHIP, &friendship);
}
}
else // mon may be caught, calculate shakes
@ -15907,7 +15905,8 @@ static void Cmd_handleballthrow(void)
TryBattleFormChange(gBattlerTarget, FORM_CHANGE_END_BATTLE);
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
SetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_POKEBALL, &ballId);
struct Pokemon *caughtMon = GetBattlerMon(gBattlerTarget);
SetMonData(caughtMon, MON_DATA_POKEBALL, &ballId);
if (CalculatePlayerPartyCount() == PARTY_SIZE)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
@ -15916,15 +15915,15 @@ static void Cmd_handleballthrow(void)
if (ballId == BALL_HEAL)
{
MonRestorePP(GetBattlerMon(gBattlerTarget));
HealStatusConditions(GetBattlerMon(gBattlerTarget), STATUS1_ANY, gBattlerTarget);
MonRestorePP(caughtMon);
HealStatusConditions(caughtMon, STATUS1_ANY, gBattlerTarget);
gBattleMons[gBattlerTarget].hp = gBattleMons[gBattlerTarget].maxHP;
SetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_HP, &gBattleMons[gBattlerTarget].hp);
SetMonData(caughtMon, MON_DATA_HP, &gBattleMons[gBattlerTarget].hp);
}
else if (ballId == BALL_FRIEND)
{
u32 friendship = (B_FRIEND_BALL_MODIFIER >= GEN_8 ? 150 : 200);
SetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_FRIENDSHIP, &friendship);
SetMonData(caughtMon, MON_DATA_FRIENDSHIP, &friendship);
}
}
else // not caught
@ -16042,26 +16041,28 @@ static void Cmd_givecaughtmon(void)
}
break;
case GIVECAUGHTMON_GIVE_AND_SHOW_MSG:
{
struct Pokemon *caughtMon = GetBattlerMon(GetCatchingBattler());
if (B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9)
{
u16 lostItem = gBattleStruct->itemLost[B_SIDE_OPPONENT][gBattlerPartyIndexes[GetCatchingBattler()]].originalItem;
if (lostItem != ITEM_NONE && GetItemPocket(lostItem) != POCKET_BERRIES)
SetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_HELD_ITEM, &lostItem); // Restore non-berry items
SetMonData(caughtMon, MON_DATA_HELD_ITEM, &lostItem); // Restore non-berry items
}
if (GiveMonToPlayer(GetBattlerMon(GetCatchingBattler())) != MON_GIVEN_TO_PARTY
if (GiveMonToPlayer(caughtMon) != MON_GIVEN_TO_PARTY
&& gBattleCommunication[MULTISTRING_CHOOSER] != B_MSG_SWAPPED_INTO_PARTY)
{
if (!ShouldShowBoxWasFullMessage())
{
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SENT_SOMEONES_PC;
StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON)));
GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_NICKNAME, gStringVar2);
GetMonData(caughtMon, MON_DATA_NICKNAME, gStringVar2);
}
else
{
StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); // box the mon was sent to
GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_NICKNAME, gStringVar2);
GetMonData(caughtMon, MON_DATA_NICKNAME, gStringVar2);
StringCopy(gStringVar3, GetBoxNamePtr(GetPCBoxToSendMon())); //box the mon was going to be sent to
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SOMEONES_BOX_FULL;
}
@ -16071,9 +16072,9 @@ static void Cmd_givecaughtmon(void)
gBattleCommunication[MULTISTRING_CHOOSER]++;
}
gBattleResults.caughtMonSpecies = GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_SPECIES, NULL);
GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_NICKNAME, gBattleResults.caughtMonNick);
gBattleResults.caughtMonBall = GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_POKEBALL, NULL);
gBattleResults.caughtMonSpecies = GetMonData(caughtMon, MON_DATA_SPECIES, NULL);
GetMonData(caughtMon, MON_DATA_NICKNAME, gBattleResults.caughtMonNick);
gBattleResults.caughtMonBall = GetMonData(caughtMon, MON_DATA_POKEBALL, NULL);
gSelectedMonPartyId = PARTY_SIZE;
gBattleCommunication[MULTIUSE_STATE] = 0;
@ -16084,14 +16085,16 @@ static void Cmd_givecaughtmon(void)
gBattlescriptCurrInstr = cmd->nextInstr;
break;
}
}
}
static void Cmd_trysetcaughtmondexflags(void)
{
CMD_ARGS(const u8 *failInstr);
u32 species = GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_SPECIES, NULL);
u32 personality = GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_PERSONALITY, NULL);
struct Pokemon *caughtMon = GetBattlerMon(GetCatchingBattler());
u32 species = GetMonData(caughtMon, MON_DATA_SPECIES, NULL);
u32 personality = GetMonData(caughtMon, MON_DATA_PERSONALITY, NULL);
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT))
{
@ -16108,7 +16111,8 @@ static void Cmd_displaydexinfo(void)
{
CMD_ARGS();
u16 species = GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_SPECIES, NULL);
struct Pokemon *mon = GetBattlerMon(GetCatchingBattler());
u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
switch (gBattleCommunication[0])
{
@ -16119,7 +16123,6 @@ static void Cmd_displaydexinfo(void)
case 1:
if (!gPaletteFade.active)
{
struct Pokemon *mon = GetBattlerMon(GetCatchingBattler());
FreeAllWindowBuffers();
gBattleCommunication[TASK_ID] = DisplayCaughtMonDexPage(species,
GetMonData(mon, MON_DATA_IS_SHINY),
@ -16275,14 +16278,15 @@ static void Cmd_trygivecaughtmonnick(void)
case 2:
if (!gPaletteFade.active)
{
GetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_NICKNAME, gBattleStruct->caughtMonNick);
struct Pokemon *caughtMon = GetBattlerMon(gBattlerTarget);
GetMonData(caughtMon, MON_DATA_NICKNAME, gBattleStruct->caughtMonNick);
FreeAllWindowBuffers();
MainCallback callback = CalculatePlayerPartyCount() == PARTY_SIZE ? ReshowBlankBattleScreenAfterMenu : BattleMainCB2;
DoNamingScreen(NAMING_SCREEN_CAUGHT_MON, gBattleStruct->caughtMonNick,
GetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_SPECIES),
GetMonGender(GetBattlerMon(gBattlerTarget)),
GetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_PERSONALITY, NULL),
GetMonData(caughtMon, MON_DATA_SPECIES),
GetMonGender(caughtMon),
GetMonData(caughtMon, MON_DATA_PERSONALITY, NULL),
callback);
gBattleCommunication[MULTIUSE_STATE]++;
@ -17674,24 +17678,26 @@ static void TryUpdateEvolutionTracker(u32 evolutionCondition, u32 upAmount, u16
{
if (evolutions[i].params[j].condition == evolutionCondition)
{
struct Pokemon *monAtk = GetBattlerMon(gBattlerAttacker);
struct Pokemon *monDef = GetBattlerMon(gBattlerTarget);
// We only have 10 bits to use
u16 val = min(1023, GetMonData(GetBattlerMon(gBattlerAttacker), MON_DATA_EVOLUTION_TRACKER) + upAmount);
u16 val = min(1023, GetMonData(monAtk, MON_DATA_EVOLUTION_TRACKER) + upAmount);
// Reset progress if you faint for the recoil method.
switch (evolutionCondition)
{
case IF_USED_MOVE_X_TIMES:
if (evolutions[i].params[j].arg1 == usedMove)
SetMonData(GetBattlerMon(gBattlerAttacker), MON_DATA_EVOLUTION_TRACKER, &val);
SetMonData(monAtk, MON_DATA_EVOLUTION_TRACKER, &val);
break;
case IF_RECOIL_DAMAGE_GE:
if (gBattleMons[gBattlerAttacker].hp == 0)
val = 0;
SetMonData(GetBattlerMon(gBattlerAttacker), MON_DATA_EVOLUTION_TRACKER, &val);
SetMonData(monAtk, MON_DATA_EVOLUTION_TRACKER, &val);
break;
case IF_DEFEAT_X_WITH_ITEMS:
if (GetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_SPECIES) == evolutions[i].params[j].arg1
&& GetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_HELD_ITEM) == evolutions[i].params[j].arg2)
SetMonData(GetBattlerMon(gBattlerAttacker), MON_DATA_EVOLUTION_TRACKER, &val);
if (GetMonData(monDef, MON_DATA_SPECIES) == evolutions[i].params[j].arg1
&& GetMonData(monDef, MON_DATA_HELD_ITEM) == evolutions[i].params[j].arg2)
SetMonData(monAtk, MON_DATA_EVOLUTION_TRACKER, &val);
break;
}
return;

View File

@ -10194,12 +10194,7 @@ bool32 TryClearIllusion(u32 battler, u32 caseID)
struct Pokemon *GetIllusionMonPtr(u32 battler)
{
if (gBattleStruct->illusion[battler].state == ILLUSION_NOT_SET)
{
if (IsOnPlayerSide(battler))
SetIllusionMon(GetBattlerMon(battler), battler);
else
SetIllusionMon(GetBattlerMon(battler), battler);
}
SetIllusionMon(GetBattlerMon(battler), battler);
if (gBattleStruct->illusion[battler].state != ILLUSION_ON)
return NULL;

View File

@ -95,17 +95,10 @@ void AdjustFriendshipOnBattleFaint(u8 battler)
opposingBattlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
}
if (gBattleMons[opposingBattlerId].level > gBattleMons[battler].level)
{
if (gBattleMons[opposingBattlerId].level - gBattleMons[battler].level > 29)
AdjustFriendship(GetBattlerMon(battler), FRIENDSHIP_EVENT_FAINT_LARGE);
else
AdjustFriendship(GetBattlerMon(battler), FRIENDSHIP_EVENT_FAINT_SMALL);
}
if (gBattleMons[opposingBattlerId].level - gBattleMons[battler].level > 29)
AdjustFriendship(GetBattlerMon(battler), FRIENDSHIP_EVENT_FAINT_LARGE);
else
{
AdjustFriendship(GetBattlerMon(battler), FRIENDSHIP_EVENT_FAINT_SMALL);
}
}
void SwitchPartyOrderInGameMulti(u8 battler, u8 arg1)

View File

@ -758,25 +758,26 @@ void RecordedBattle_CheckMovesetChanges(u8 mode)
if (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED))
{
struct Pokemon *mon = GetBattlerMon(battler);
for (j = 0; j < MAX_MON_MOVES; j++)
ppBonuses[j] = (GetMonData(GetBattlerMon(battler), MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1);
ppBonuses[j] = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1);
for (j = 0; j < MAX_MON_MOVES; j++)
{
movePp.moves[j] = GetMonData(GetBattlerMon(battler), MON_DATA_MOVE1 + moveSlots[j], NULL);
movePp.currentPp[j] = GetMonData(GetBattlerMon(battler), MON_DATA_PP1 + moveSlots[j], NULL);
movePp.moves[j] = GetMonData(mon, MON_DATA_MOVE1 + moveSlots[j], NULL);
movePp.currentPp[j] = GetMonData(mon, MON_DATA_PP1 + moveSlots[j], NULL);
movePp.maxPp[j] = ppBonuses[moveSlots[j]];
}
for (j = 0; j < MAX_MON_MOVES; j++)
{
SetMonData(GetBattlerMon(battler), MON_DATA_MOVE1 + j, &movePp.moves[j]);
SetMonData(GetBattlerMon(battler), MON_DATA_PP1 + j, &movePp.currentPp[j]);
SetMonData(mon, MON_DATA_MOVE1 + j, &movePp.moves[j]);
SetMonData(mon, MON_DATA_PP1 + j, &movePp.currentPp[j]);
}
ppBonusSet = 0;
for (j = 0; j < MAX_MON_MOVES; j++)
ppBonusSet |= movePp.maxPp[j] << (j << 1);
SetMonData(GetBattlerMon(battler), MON_DATA_PP_BONUSES, &ppBonusSet);
SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonusSet);
}
gChosenMoveByBattler[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]];
}

View File

@ -302,17 +302,19 @@ void CreateBattlerSprite(u32 battler)
if (!IsOnPlayerSide(battler))
{
if (GetMonData(GetBattlerMon(battler), MON_DATA_HP) == 0)
struct Pokemon *mon = GetBattlerMon(battler);
if (GetMonData(mon, MON_DATA_HP) == 0)
return;
if (gBattleScripting.monCaught) // Don't create opponent sprite if it has been caught.
return;
u32 species = GetMonData(mon, MON_DATA_SPECIES);
SetMultiuseSpriteTemplateToPokemon(GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES), GetBattlerPosition(battler));
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battler));
gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2), posY, GetBattlerSpriteSubpriority(battler));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
gSprites[gBattlerSpriteIds[battler]].data[2] = GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES);
gSprites[gBattlerSpriteIds[battler]].data[2] = species;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 0);
}
@ -338,15 +340,17 @@ void CreateBattlerSprite(u32 battler)
}
else
{
if (!IsValidForBattle(GetBattlerMon(battler)))
struct Pokemon *mon = GetBattlerMon(battler);
if (!IsValidForBattle(mon))
return;
u32 species = GetMonData(mon, MON_DATA_SPECIES);
SetMultiuseSpriteTemplateToPokemon(GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES), GetBattlerPosition(battler));
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battler));
gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2), posY, GetBattlerSpriteSubpriority(battler));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
gSprites[gBattlerSpriteIds[battler]].data[2] = GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES);
gSprites[gBattlerSpriteIds[battler]].data[2] = species;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 0);
}