mirror of https://github.com/pret/pokeemerald.git
more work
This commit is contained in:
parent
c0ea81afc5
commit
4a45b4de4e
|
@ -472,7 +472,7 @@ struct BattleStruct
|
||||||
u8 wishPerishSongBattlerId;
|
u8 wishPerishSongBattlerId;
|
||||||
bool8 overworldWeatherDone;
|
bool8 overworldWeatherDone;
|
||||||
u8 atkCancellerTracker;
|
u8 atkCancellerTracker;
|
||||||
u8 field_1A4[96];
|
s16 field_1A4[2][6][4];
|
||||||
u8 field_204[104];
|
u8 field_204[104];
|
||||||
u8 field_26C[40];
|
u8 field_26C[40];
|
||||||
u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT];
|
u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT];
|
||||||
|
|
|
@ -16,5 +16,6 @@ size_t sub_80EF370(int value);
|
||||||
bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language);
|
bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language);
|
||||||
void SetPokemonAnglerSpecies(u16 species);
|
void SetPokemonAnglerSpecies(u16 species);
|
||||||
void UpdateTVShowsPerDay(u16 days);
|
void UpdateTVShowsPerDay(u16 days);
|
||||||
|
void PutBattleUpdateOnTheAir(u8 a0, u16 a1, u16 a2, u16 a3);
|
||||||
|
|
||||||
#endif //GUARD_TV_H
|
#endif //GUARD_TV_H
|
||||||
|
|
|
@ -3,8 +3,11 @@
|
||||||
#include "battle.h"
|
#include "battle.h"
|
||||||
#include "battle_link_817C95C.h"
|
#include "battle_link_817C95C.h"
|
||||||
#include "constants/battle_string_ids.h"
|
#include "constants/battle_string_ids.h"
|
||||||
|
#include "constants/battle_anim.h"
|
||||||
#include "constants/moves.h"
|
#include "constants/moves.h"
|
||||||
|
#include "constants/species.h"
|
||||||
#include "battle_message.h"
|
#include "battle_message.h"
|
||||||
|
#include "tv.h"
|
||||||
|
|
||||||
struct BattleLinkStringSide
|
struct BattleLinkStringSide
|
||||||
{
|
{
|
||||||
|
@ -583,3 +586,136 @@ void sub_817E0FC(u16 move, u16 weatherFlags, struct DisableStruct *disableStruct
|
||||||
sub_817E684(11, gBattleMoves[move].type, 0, 0);
|
sub_817E684(11, gBattleMoves[move].type, 0, 0);
|
||||||
sub_817E684(12, gBattleMoves[move].type, 0, 0);
|
sub_817E684(12, gBattleMoves[move].type, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sub_817E32C(u8 animationId)
|
||||||
|
{
|
||||||
|
struct UnknownBattleLinkStruct *structPtr;
|
||||||
|
u32 atkSide;
|
||||||
|
|
||||||
|
if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
|
||||||
|
return;
|
||||||
|
|
||||||
|
structPtr = (struct UnknownBattleLinkStruct*)(&gBattleStruct->field_204);
|
||||||
|
atkSide = GetBattlerSide(gBattlerAttacker);
|
||||||
|
switch (animationId)
|
||||||
|
{
|
||||||
|
case B_ANIM_FUTURE_SIGHT_HIT:
|
||||||
|
if (structPtr->side[atkSide].futureSightMonId != 0)
|
||||||
|
{
|
||||||
|
sub_817E684(2, 0, atkSide,
|
||||||
|
(structPtr->side[atkSide].futureSightMonId - 1) * 4 + structPtr->side[atkSide].futureSightMoveSlot);
|
||||||
|
structPtr->side[atkSide].field_3_0 = 8;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case B_ANIM_DOOM_DESIRE_HIT:
|
||||||
|
if (structPtr->side[atkSide].doomDesireMonId != 0)
|
||||||
|
{
|
||||||
|
sub_817E684(2, 1, atkSide,
|
||||||
|
(structPtr->side[atkSide].doomDesireMonId - 1) * 4 + structPtr->side[atkSide].doomDesireMoveSlot);
|
||||||
|
structPtr->side[atkSide].field_3_0 = 9;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_817E3F4(void)
|
||||||
|
{
|
||||||
|
u16 playerBestSpecies = 0, opponentBestSpecies = 0;
|
||||||
|
s16 playerBestSum = 0, opponentBestSum = SHRT_MAX;
|
||||||
|
u8 playerBestMonId = 0, opponentBestMonId = 0;
|
||||||
|
s16 (*array)[2][6][4] = NULL;
|
||||||
|
u8 countPlayer = 0, countOpponent = 0;
|
||||||
|
s16 sum = 0;
|
||||||
|
u16 moveId = 0;
|
||||||
|
s32 i, j;
|
||||||
|
|
||||||
|
if (gBattleStruct->field_B3)
|
||||||
|
return;
|
||||||
|
|
||||||
|
array = &gBattleStruct->field_1A4;
|
||||||
|
for (i = 0; i < PARTY_SIZE; i++)
|
||||||
|
{
|
||||||
|
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
|
||||||
|
countPlayer++;
|
||||||
|
if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
|
||||||
|
countOpponent++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) || countPlayer != countOpponent)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = 0; i < PARTY_SIZE; i++)
|
||||||
|
{
|
||||||
|
u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL);
|
||||||
|
if (species != SPECIES_NONE && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG, NULL))
|
||||||
|
{
|
||||||
|
for (sum = 0, j = 0; j < 4; j++)
|
||||||
|
sum += (*array)[0][i][j];
|
||||||
|
|
||||||
|
if (playerBestSum < sum)
|
||||||
|
{
|
||||||
|
playerBestMonId = i;
|
||||||
|
playerBestSum = sum;
|
||||||
|
playerBestSpecies = species;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL);
|
||||||
|
if (species != SPECIES_NONE && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG, NULL))
|
||||||
|
{
|
||||||
|
s32 sideId = B_SIDE_OPPONENT;
|
||||||
|
for (sum = 0, j = 0; j < 4; j++)
|
||||||
|
sum += (*array)[sideId][i][j];
|
||||||
|
|
||||||
|
if (opponentBestSum == sum)
|
||||||
|
{
|
||||||
|
if (GetMonData(&gEnemyParty[i], MON_DATA_EXP, NULL) > GetMonData(&gEnemyParty[opponentBestMonId], MON_DATA_EXP, NULL))
|
||||||
|
{
|
||||||
|
opponentBestMonId = i;
|
||||||
|
opponentBestSum = sum;
|
||||||
|
opponentBestSpecies = species;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (opponentBestSum > sum)
|
||||||
|
{
|
||||||
|
opponentBestMonId = i;
|
||||||
|
opponentBestSum = sum;
|
||||||
|
opponentBestSpecies = species;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (sum = 0, i = 0, j = 0; j < 4; j++)
|
||||||
|
{
|
||||||
|
if (sum < (*array)[0][playerBestMonId][j])
|
||||||
|
{
|
||||||
|
sum = (*array)[0][playerBestMonId][j];
|
||||||
|
i = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
moveId = GetMonData(&gPlayerParty[playerBestMonId], MON_DATA_MOVE1 + i, NULL);
|
||||||
|
if (playerBestSum == 0 || moveId == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
|
||||||
|
{
|
||||||
|
if (playerBestMonId < 3)
|
||||||
|
{
|
||||||
|
if (sub_806D82C(gBattleScripting.multiplayerId))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!sub_806D82C(gBattleScripting.multiplayerId))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
j = (opponentBestMonId < 3) ? 0 : 1;
|
||||||
|
PutBattleUpdateOnTheAir(sub_806EF84(j, gBattleScripting.multiplayerId), moveId, playerBestSpecies, opponentBestSpecies);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PutBattleUpdateOnTheAir(gBattleScripting.multiplayerId ^ 1, moveId, playerBestSpecies, opponentBestSpecies);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue