diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 809784c159..78ecf11675 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -171,14 +171,19 @@ static u32 GetAiFlags(u16 trainerId) } if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { flags |= AI_FLAG_DOUBLE_BATTLE; + } return flags; } void BattleAI_SetupFlags(void) { - AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_LEFT] = 0; // player has no AI + if (IsAiVsAiBattle()) + AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_LEFT] = GetAiFlags(gPartnerTrainerId); + else + AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_LEFT] = 0; // player has no AI #if DEBUG_OVERWORLD_MENU == TRUE if (gIsDebugBattle) @@ -208,6 +213,10 @@ void BattleAI_SetupFlags(void) { AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_RIGHT] = GetAiFlags(gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)); } + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsAiVsAiBattle()) + { + AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_RIGHT] = AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_LEFT]; + } else { AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_RIGHT] = 0; // player diff --git a/src/battle_main.c b/src/battle_main.c index eed1620dd9..b4430100d2 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -548,6 +548,13 @@ static void CB2_InitBattleInternal(void) if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) gBattleTerrain = BATTLE_TERRAIN_BUILDING; + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER + | BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_TRAINER_HILL))) + { + gBattleTypeFlags |= (IsTrainerDoubleBattle(gTrainerBattleOpponent_A) ? BATTLE_TYPE_DOUBLE : 0); + } + InitBattleBgsVideo(); LoadBattleTextboxAndBackground(); ResetSpriteData(); @@ -2056,13 +2063,6 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir if (trainerNum == TRAINER_SECRET_BASE) return 0; retVal = CreateNPCTrainerPartyFromTrainer(party, GetTrainerStructFromId(trainerNum), firstTrainer, gBattleTypeFlags); - - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER - | BATTLE_TYPE_EREADER_TRAINER - | BATTLE_TYPE_TRAINER_HILL))) - { - gBattleTypeFlags |= (IsTrainerDoubleBattle(trainerNum) ? BATTLE_TYPE_DOUBLE : 0); - } return retVal; } @@ -3711,7 +3711,7 @@ static void DoBattleIntro(void) gBattleStruct->overworldWeatherDone = FALSE; SetAiLogicDataForTurn(AI_DATA); // get assumed abilities, hold effects, etc of all battlers Ai_InitPartyStruct(); // Save mons party counts, and first 2/4 mons on the battlefield. - + // Try to set a status to start the battle with gBattleStruct->startingStatus = 0; if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && GetTrainerStartingStatusFromId(gTrainerBattleOpponent_B))