mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-26 03:34:15 +01:00
Add ai delay timer (#3302)
This commit is contained in:
commit
623015bd8d
@ -679,6 +679,8 @@ struct BattleStruct
|
|||||||
bool8 trainerSlideMegaEvolutionMsgDone;
|
bool8 trainerSlideMegaEvolutionMsgDone;
|
||||||
bool8 trainerSlideZMoveMsgDone;
|
bool8 trainerSlideZMoveMsgDone;
|
||||||
bool8 trainerSlideBeforeFirstTurnMsgDone;
|
bool8 trainerSlideBeforeFirstTurnMsgDone;
|
||||||
|
u32 aiDelayTimer; // Counts number of frames AI takes to choose an action.
|
||||||
|
u32 aiDelayFrames; // Number of frames it took to choose an action.
|
||||||
};
|
};
|
||||||
|
|
||||||
// The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider,
|
// The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider,
|
||||||
|
@ -27,7 +27,7 @@ u8 BattleAI_ChooseMoveOrAction(void);
|
|||||||
void Ai_InitPartyStruct(void);
|
void Ai_InitPartyStruct(void);
|
||||||
void Ai_UpdateSwitchInData(u32 battler);
|
void Ai_UpdateSwitchInData(u32 battler);
|
||||||
void Ai_UpdateFaintData(u32 battler);
|
void Ai_UpdateFaintData(u32 battler);
|
||||||
void GetAiLogicData(void);
|
void SetAiLogicDataForTurn(void);
|
||||||
|
|
||||||
extern u8 sBattler_AI;
|
extern u8 sBattler_AI;
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
// Battle Debug Menu
|
// Battle Debug Menu
|
||||||
#define DEBUG_BATTLE_MENU TRUE // If set to TRUE, enables a debug menu to use in battles by pressing the Select button.
|
#define DEBUG_BATTLE_MENU TRUE // If set to TRUE, enables a debug menu to use in battles by pressing the Select button.
|
||||||
|
#define DEBUG_AI_DELAY_TIMER FALSE // If set to TRUE, displays the number of frames it takes for the AI to choose a move. Replaces the "What will PKMN do" text. Useful for devs or anyone who modifies the AI code and wants to see if it doesn't take too long to run.
|
||||||
|
|
||||||
// Pokémon Debug
|
// Pokémon Debug
|
||||||
#define DEBUG_POKEMON_MENU TRUE // Enables a debug menu for pokemon sprites and icons, accessed by pressing SELECT in the summary screen.
|
#define DEBUG_POKEMON_MENU TRUE // Enables a debug menu for pokemon sprites and icons, accessed by pressing SELECT in the summary screen.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
#include "main.h"
|
||||||
#include "malloc.h"
|
#include "malloc.h"
|
||||||
#include "battle.h"
|
#include "battle.h"
|
||||||
#include "battle_anim.h"
|
#include "battle_anim.h"
|
||||||
@ -335,7 +336,7 @@ void Ai_UpdateFaintData(u32 battler)
|
|||||||
aiMon->isFainted = TRUE;
|
aiMon->isFainted = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SetBattlerAiData(u8 battler)
|
static void SetBattlerAiData(u32 battler)
|
||||||
{
|
{
|
||||||
AI_DATA->abilities[battler] = AI_GetAbility(battler);
|
AI_DATA->abilities[battler] = AI_GetAbility(battler);
|
||||||
AI_DATA->items[battler] = gBattleMons[battler].item;
|
AI_DATA->items[battler] = gBattleMons[battler].item;
|
||||||
@ -346,7 +347,7 @@ static void SetBattlerAiData(u8 battler)
|
|||||||
AI_DATA->moveLimitations[battler] = CheckMoveLimitations(battler, 0, MOVE_LIMITATIONS_ALL);
|
AI_DATA->moveLimitations[battler] = CheckMoveLimitations(battler, 0, MOVE_LIMITATIONS_ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GetAiLogicData(void)
|
void SetAiLogicDataForTurn(void)
|
||||||
{
|
{
|
||||||
u32 battlerAtk, battlerDef, i, move;
|
u32 battlerAtk, battlerDef, i, move;
|
||||||
u8 effectiveness;
|
u8 effectiveness;
|
||||||
@ -357,6 +358,8 @@ void GetAiLogicData(void)
|
|||||||
if (!(gBattleTypeFlags & BATTLE_TYPE_HAS_AI) && !IsWildMonSmart())
|
if (!(gBattleTypeFlags & BATTLE_TYPE_HAS_AI) && !IsWildMonSmart())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
gBattleStruct->aiDelayTimer = gMain.vblankCounter1;
|
||||||
|
|
||||||
// get/assume all battler data
|
// get/assume all battler data
|
||||||
for (i = 0; i < gBattlersCount; i++)
|
for (i = 0; i < gBattlersCount; i++)
|
||||||
{
|
{
|
||||||
|
@ -1889,6 +1889,19 @@ static void HandleChooseActionAfterDma3(u32 battler)
|
|||||||
{
|
{
|
||||||
gBattle_BG0_X = 0;
|
gBattle_BG0_X = 0;
|
||||||
gBattle_BG0_Y = DISPLAY_HEIGHT;
|
gBattle_BG0_Y = DISPLAY_HEIGHT;
|
||||||
|
if (gBattleStruct->aiDelayTimer != 0)
|
||||||
|
{
|
||||||
|
gBattleStruct->aiDelayFrames = gMain.vblankCounter1 - gBattleStruct->aiDelayTimer;
|
||||||
|
gBattleStruct->aiDelayTimer = 0;
|
||||||
|
#if DEBUG_AI_DELAY_TIMER
|
||||||
|
{
|
||||||
|
static const u8 sText_AIDelay[] = _("AI delay:\n{B_BUFF1} frames");
|
||||||
|
PREPARE_HWORD_NUMBER_BUFFER(gBattleTextBuff1, 3, gBattleStruct->aiDelayFrames);
|
||||||
|
BattleStringExpandPlaceholdersToDisplayedString(sText_AIDelay);
|
||||||
|
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_ACTION_PROMPT);
|
||||||
|
}
|
||||||
|
#endif // DEBUG_AI_DELAY_TIMER
|
||||||
|
}
|
||||||
gBattlerControllerFuncs[battler] = HandleInputChooseAction;
|
gBattlerControllerFuncs[battler] = HandleInputChooseAction;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3724,7 +3724,7 @@ static void DoBattleIntro(void)
|
|||||||
gBattleStruct->switchInAbilitiesCounter = 0;
|
gBattleStruct->switchInAbilitiesCounter = 0;
|
||||||
gBattleStruct->switchInItemsCounter = 0;
|
gBattleStruct->switchInItemsCounter = 0;
|
||||||
gBattleStruct->overworldWeatherDone = FALSE;
|
gBattleStruct->overworldWeatherDone = FALSE;
|
||||||
GetAiLogicData(); // get assumed abilities, hold effects, etc of all battlers
|
SetAiLogicDataForTurn(); // get assumed abilities, hold effects, etc of all battlers
|
||||||
Ai_InitPartyStruct(); // Save mons party counts, and first 2/4 mons on the battlefield.
|
Ai_InitPartyStruct(); // Save mons party counts, and first 2/4 mons on the battlefield.
|
||||||
gBattleMainFunc = TryDoEventsBeforeFirstTurn;
|
gBattleMainFunc = TryDoEventsBeforeFirstTurn;
|
||||||
}
|
}
|
||||||
@ -3857,7 +3857,7 @@ static void TryDoEventsBeforeFirstTurn(void)
|
|||||||
|
|
||||||
gRandomTurnNumber = Random();
|
gRandomTurnNumber = Random();
|
||||||
|
|
||||||
GetAiLogicData(); // get assumed abilities, hold effects, etc of all battlers
|
SetAiLogicDataForTurn(); // get assumed abilities, hold effects, etc of all battlers
|
||||||
|
|
||||||
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
|
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
|
||||||
{
|
{
|
||||||
@ -3949,7 +3949,7 @@ void BattleTurnPassed(void)
|
|||||||
|
|
||||||
*(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags;
|
*(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags;
|
||||||
BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG);
|
BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG);
|
||||||
GetAiLogicData(); // get assumed abilities, hold effects, etc of all battlers
|
SetAiLogicDataForTurn(); // get assumed abilities, hold effects, etc of all battlers
|
||||||
gBattleMainFunc = HandleTurnActionSelectionState;
|
gBattleMainFunc = HandleTurnActionSelectionState;
|
||||||
gRandomTurnNumber = Random();
|
gRandomTurnNumber = Random();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user