Slightly increase headless test speed by modifying animations (#8299)

This commit is contained in:
Eduardo Quezada 2025-11-20 10:01:02 -03:00 committed by GitHub
parent 867b45a6f3
commit e5e99317d0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 26 additions and 11 deletions

View File

@ -14,6 +14,7 @@
#include "sound.h"
#include "sprite.h"
#include "task.h"
#include "test_runner.h"
#include "trig.h"
#include "util.h"
#include "data.h"
@ -2435,7 +2436,7 @@ void TryShinyAnimation(u8 battler, struct Pokemon *mon)
if (illusionMon != NULL)
mon = illusionMon;
if (IsBattlerSpriteVisible(battler) && IsValidForBattle(mon))
if (IsBattlerSpriteVisible(battler) && IsValidForBattle(mon) && !gTestRunnerHeadless)
{
if (isShiny)
{
@ -2768,4 +2769,3 @@ static void CB_CriticalCaptureThrownBallMovement(struct Sprite *sprite)
sprite->callback = SpriteCB_Ball_Bounce_Step;
}
}

View File

@ -2578,7 +2578,7 @@ void BtlController_HandleStatusAnimation(u32 battler)
void BtlController_HandleHitAnimation(u32 battler)
{
if (gSprites[gBattlerSpriteIds[battler]].invisible == TRUE)
if (gSprites[gBattlerSpriteIds[battler]].invisible == TRUE || gTestRunnerHeadless)
{
BtlController_Complete(battler);
}
@ -2593,6 +2593,11 @@ void BtlController_HandleHitAnimation(u32 battler)
void BtlController_HandlePlaySE(u32 battler)
{
if (gTestRunnerHeadless)
{
BtlController_Complete(battler);
return;
}
s32 pan = IsOnPlayerSide(battler) ? SOUND_PAN_ATTACKER : SOUND_PAN_TARGET;
PlaySE12WithPanning(gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8), pan);
@ -2601,6 +2606,11 @@ void BtlController_HandlePlaySE(u32 battler)
void BtlController_HandlePlayFanfareOrBGM(u32 battler)
{
if (gTestRunnerHeadless)
{
BtlController_Complete(battler);
return;
}
if (gBattleResources->bufferA[battler][3])
{
BattleStopLowHpSound();
@ -2867,7 +2877,7 @@ void AnimateMonAfterPokeBallFail(u32 battler)
{
if (B_ANIMATE_MON_AFTER_FAILED_POKEBALL == FALSE)
return;
LaunchKOAnimation(battler, ReturnAnimIdForBattler(TRUE, battler), TRUE);
TryShinyAnimation(gBattlerTarget, GetBattlerMon(gBattlerTarget));
}

View File

@ -11,6 +11,7 @@
#include "sprite.h"
#include "task.h"
#include "trig.h"
#include "test_runner.h"
#include "util.h"
#include "data.h"
#include "item.h"
@ -597,8 +598,8 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
{
u32 throwCaseId, ballId, battler, ballSpriteId;
bool32 notSendOut = FALSE;
u32 throwXoffset = (B_ENEMY_THROW_BALLS >= GEN_6) ? 24 : 0;
s32 throwYoffset = (B_ENEMY_THROW_BALLS >= GEN_6) ? -16 : 24;
u32 throwXoffset = (B_ENEMY_THROW_BALLS >= GEN_6 && !gTestRunnerHeadless) ? 24 : 0;
s32 throwYoffset = (B_ENEMY_THROW_BALLS >= GEN_6 && !gTestRunnerHeadless) ? -16 : 24;
if (gTasks[taskId].tFrames == 0)
{
@ -675,7 +676,7 @@ static inline void DoPokeballSendOutSoundEffect(u32 battler)
static inline void *GetOpponentMonSendOutCallback(void)
{
return (B_ENEMY_THROW_BALLS >= GEN_6) ? SpriteCB_MonSendOut_1 : SpriteCB_OpponentMonSendOut;
return (B_ENEMY_THROW_BALLS >= GEN_6 && !gTestRunnerHeadless) ? SpriteCB_MonSendOut_1 : SpriteCB_OpponentMonSendOut;
}
// This sequence of functions is very similar to those that get run when
@ -1205,7 +1206,7 @@ static void SpriteCB_MonSendOut_2(struct Sprite *sprite)
u32 r7;
bool32 rightPosition = (IsBattlerPlayer(sprite->sBattler)) ? B_POSITION_PLAYER_RIGHT : B_POSITION_OPPONENT_RIGHT;
if (HIBYTE(sprite->data[7]) >= 35 && HIBYTE(sprite->data[7]) < 80)
if (HIBYTE(sprite->data[7]) >= 35 && HIBYTE(sprite->data[7]) < 80 && !gTestRunnerHeadless)
{
s16 r4;
@ -1246,7 +1247,8 @@ static void SpriteCB_MonSendOut_2(struct Sprite *sprite)
sprite->data[0] = 0;
if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->introAnimActive
&& sprite->sBattler == GetBattlerAtPosition(rightPosition))
&& sprite->sBattler == GetBattlerAtPosition(rightPosition)
&& !gTestRunnerHeadless)
sprite->callback = SpriteCB_ReleaseMon2FromBall;
else
sprite->callback = SpriteCB_ReleaseMonFromBall;
@ -1269,12 +1271,15 @@ static void SpriteCB_ReleaseMon2FromBall(struct Sprite *sprite)
static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite)
{
if (gTestRunnerHeadless)
sprite->data[0] = 15;
sprite->data[0]++;
if (sprite->data[0] > 15)
{
sprite->data[0] = 0;
if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->introAnimActive
&& sprite->sBattler == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))
&& sprite->sBattler == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)
&& !gTestRunnerHeadless)
sprite->callback = SpriteCB_ReleaseMon2FromBall;
else
sprite->callback = SpriteCB_ReleaseMonFromBall;
@ -1534,7 +1539,7 @@ void StartHealthboxSlideIn(u8 battler)
healthboxSprite->y2 = -healthboxSprite->y2;
}
gSprites[healthboxSprite->data[5]].callback(&gSprites[healthboxSprite->data[5]]);
if (GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT)
if (GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT && !gTestRunnerHeadless)
healthboxSprite->callback = SpriteCB_HealthboxSlideInDelayed;
}