Merge branch 'upcoming' of https://github.com/rh-hideout/pokeemerald-expansion into gen_9_move_effects_batch2
This commit is contained in:
commit
977a55bdee
7 changed files with 80 additions and 10 deletions
|
@ -440,22 +440,24 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets)
|
|||
case MOVE_TARGET_BOTH:
|
||||
targets[0] = gBattleAnimArgs[battlerArgIndex];
|
||||
numTargets = 1;
|
||||
if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) {
|
||||
targets[1] = targets[0] ^ BIT_FLANK;
|
||||
numTargets++;
|
||||
if (IsBattlerAlive(BATTLE_PARTNER(targets[0])))
|
||||
{
|
||||
targets[1] = BATTLE_PARTNER(targets[0]);
|
||||
numTargets = 2;
|
||||
}
|
||||
break;
|
||||
case MOVE_TARGET_FOES_AND_ALLY:
|
||||
targets[0] = gBattleAnimArgs[battlerArgIndex];
|
||||
numTargets = 1;
|
||||
|
||||
if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) {
|
||||
targets[1] = targets[0] ^ BIT_FLANK;
|
||||
if (IsBattlerAlive(BATTLE_PARTNER(targets[0])))
|
||||
{
|
||||
targets[1] = BATTLE_PARTNER(targets[0]);
|
||||
numTargets++;
|
||||
}
|
||||
|
||||
if (IsBattlerAlive(gBattleAnimAttacker ^ BIT_FLANK)) {
|
||||
targets[2] = gBattleAnimAttacker ^ BIT_FLANK;
|
||||
if (IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0]))))
|
||||
{
|
||||
targets[2] = BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0]));
|
||||
numTargets++;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -3949,14 +3949,14 @@ static void Cmd_tryfaintmon(void)
|
|||
if (gBattleResults.playerFaintCounter < 255)
|
||||
gBattleResults.playerFaintCounter++;
|
||||
AdjustFriendshipOnBattleFaint(gActiveBattler);
|
||||
gSideTimers[0].retaliateTimer = 2;
|
||||
gSideTimers[B_SIDE_PLAYER].retaliateTimer = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBattleResults.opponentFaintCounter < 255)
|
||||
gBattleResults.opponentFaintCounter++;
|
||||
gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES, NULL);
|
||||
gSideTimers[1].retaliateTimer = 2;
|
||||
gSideTimers[B_SIDE_OPPONENT].retaliateTimer = 2;
|
||||
}
|
||||
if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBattlerAttacker].hp != 0)
|
||||
{
|
||||
|
@ -7560,6 +7560,12 @@ static u32 GetTrainerMoneyToGive(u16 trainerId)
|
|||
lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl;
|
||||
}
|
||||
break;
|
||||
case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED:
|
||||
{
|
||||
const struct TrainerMonCustomized *party = gTrainers[trainerId].party.EverythingCustomized;
|
||||
lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
for (; gTrainerMoneyTable[i].classId != 0xFF; i++)
|
||||
|
|
|
@ -798,6 +798,14 @@ static u8 GetSumOfEnemyPartyLevel(u16 opponentId, u8 numMons)
|
|||
sum += party[i].lvl;
|
||||
}
|
||||
break;
|
||||
case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED:
|
||||
{
|
||||
const struct TrainerMonCustomized *party;
|
||||
party = gTrainers[opponentId].party.EverythingCustomized;
|
||||
for (i = 0; i < count; i++)
|
||||
sum += party[i].lvl;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return sum;
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "field_message_box.h"
|
||||
#include "tv.h"
|
||||
#include "battle_factory.h"
|
||||
#include "constants/abilities.h"
|
||||
#include "constants/apprentice.h"
|
||||
#include "constants/battle_dome.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
|
@ -3007,6 +3008,7 @@ static void FillPartnerParty(u16 trainerId)
|
|||
u16 monId;
|
||||
u32 otID;
|
||||
u8 trainerName[(PLAYER_NAME_LENGTH * 3) + 1];
|
||||
s32 ball = -1;
|
||||
SetFacilityPtrsGetLevel();
|
||||
|
||||
if (trainerId == TRAINER_STEVEN_PARTNER)
|
||||
|
@ -3098,6 +3100,53 @@ static void FillPartnerParty(u16 trainerId)
|
|||
}
|
||||
break;
|
||||
}
|
||||
case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED:
|
||||
{
|
||||
const struct TrainerMonCustomized *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.EverythingCustomized;
|
||||
|
||||
CreateMon(&gPlayerParty[i], partyData[i].species, partyData[i].lvl, 0, TRUE, j, TRUE, otID);
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem);
|
||||
|
||||
// TODO: Figure out a default strategy when moves are not set, to generate a good moveset
|
||||
for (j = 0; j < MAX_MON_MOVES; ++j)
|
||||
{
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]);
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp);
|
||||
}
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_IVS, &(partyData[i].iv));
|
||||
if (partyData[i].ev != NULL)
|
||||
{
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_HP_EV, &(partyData[i].ev[0]));
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_ATK_EV, &(partyData[i].ev[1]));
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_DEF_EV, &(partyData[i].ev[2]));
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_SPATK_EV, &(partyData[i].ev[3]));
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_SPDEF_EV, &(partyData[i].ev[4]));
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_SPEED_EV, &(partyData[i].ev[5]));
|
||||
}
|
||||
if (partyData[i].ability != ABILITY_NONE)
|
||||
{
|
||||
const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[i].species];
|
||||
u32 maxAbilities = ARRAY_COUNT(speciesInfo->abilities);
|
||||
for (j = 0; j < maxAbilities; ++j)
|
||||
{
|
||||
if (speciesInfo->abilities[j] == partyData[i].ability)
|
||||
break;
|
||||
}
|
||||
if (j < maxAbilities)
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM, &j);
|
||||
}
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &(partyData[i].friendship));
|
||||
if (partyData[i].ball != ITEM_NONE)
|
||||
{
|
||||
ball = partyData[i].ball;
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_POKEBALL, &ball);
|
||||
}
|
||||
if (partyData[i].nickname != NULL)
|
||||
{
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, partyData[i].nickname);
|
||||
}
|
||||
CalculateMonStats(&gPlayerParty[i]);
|
||||
}
|
||||
}
|
||||
|
||||
StringCopy(trainerName, gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].trainerName);
|
||||
|
|
|
@ -1812,6 +1812,9 @@ static void PopulateSpeciesFromTrainerParty(int matchCallId, u8 *destStr)
|
|||
case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM:
|
||||
speciesName = gSpeciesNames[party.ItemCustomMoves[monId].species];
|
||||
break;
|
||||
case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED:
|
||||
speciesName = gSpeciesNames[party.EverythingCustomized[monId].species];
|
||||
break;
|
||||
}
|
||||
|
||||
StringCopy(destStr, speciesName);
|
||||
|
|
|
@ -15,6 +15,7 @@ SINGLE_BATTLE_TEST("Dire Claw can inflict poison, paralysis or sleep")
|
|||
{
|
||||
u8 statusAnim;
|
||||
u32 rng;
|
||||
KNOWN_FAILING;
|
||||
PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; }
|
||||
PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; }
|
||||
PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; }
|
||||
|
|
|
@ -15,6 +15,7 @@ SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze")
|
|||
{
|
||||
u8 statusAnim;
|
||||
u32 rng;
|
||||
KNOWN_FAILING;
|
||||
PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; }
|
||||
PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; }
|
||||
PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; }
|
||||
|
|
Loading…
Reference in a new issue