Fix nature power string and add support for evnvironment in tests (#8068)

Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com>
This commit is contained in:
FosterProgramming 2025-10-28 19:23:16 +01:00 committed by GitHub
parent f7cbe4853b
commit fd07daf0d8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 62 additions and 4 deletions

View File

@ -8889,7 +8889,7 @@ BattleScript_MetronomeAttackstring::
BattleScript_NaturePowerAttackstring::
printattackstring
pause B_WAIT_TIME_SHORT
setcalledmove
printstring STRINGID_NATUREPOWERTURNEDINTO
waitmessage B_WAIT_TIME_LONG
setcalledmove
return

View File

@ -736,6 +736,7 @@ struct BattleTestData
bool8 isShiny;
enum Ability forcedAbilities[NUM_BATTLE_SIDES][PARTY_SIZE];
u8 chosenGimmick[NUM_BATTLE_SIDES][PARTY_SIZE];
u8 forcedEnvironment;
u8 currentMonIndexes[MAX_BATTLERS_COUNT];
u8 turnState;
@ -990,6 +991,7 @@ struct moveWithPP {
#define TeraType(teraType) TeraType_(__LINE__, teraType)
#define Shadow(isShadow) Shadow_(__LINE__, isShadow)
#define Shiny(isShiny) Shiny_(__LINE__, isShiny)
#define Environment(environment) Environment_(__LINE__, environment)
void SetFlagForTest(u32 sourceLine, u16 flagId);
void TestSetConfig(u32 sourceLine, enum GenConfigTag configTag, u32 value);
@ -1030,6 +1032,7 @@ void GigantamaxFactor_(u32 sourceLine, bool32 gigantamaxFactor);
void TeraType_(u32 sourceLine, enum Type teraType);
void Shadow_(u32 sourceLine, bool32 isShadow);
void Shiny_(u32 sourceLine, bool32 isShiny);
void Environment_(u32 sourceLine, u32 environment);
static inline bool8 IsMultibattleTest(void)
{

View File

@ -28,6 +28,7 @@ void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordInde
u32 TestRunner_Battle_GetForcedAbility(u32 side, u32 partyIndex);
u32 TestRunner_Battle_GetChosenGimmick(u32 side, u32 partyIndex);
u32 TestRunner_Battle_GetForcedEnvironment(void);
#else
@ -51,6 +52,8 @@ u32 TestRunner_Battle_GetChosenGimmick(u32 side, u32 partyIndex);
#define TestRunner_Battle_GetChosenGimmick(...) (u32)0
#define TestRunner_Battle_GetForcedEnvironment(...) (u8)0
#endif
#endif

View File

@ -19,6 +19,7 @@
#include "sound.h"
#include "sprite.h"
#include "task.h"
#include "test_runner.h"
#include "text_window.h"
#include "trig.h"
#include "window.h"
@ -650,7 +651,13 @@ static u8 GetBattleEnvironmentOverride(void)
{
u8 battleScene = GetCurrentMapBattleScene();
if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER))
if (TestRunner_Battle_GetForcedEnvironment()
&& gBattleEnvironmentInfo[gBattleEnvironment].background.tilemap
&& gBattleEnvironmentInfo[gBattleEnvironment].background.tileset)
{
return gBattleEnvironment;
}
else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER))
return BATTLE_ENVIRONMENT_FRONTIER;
else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
{
@ -1022,7 +1029,13 @@ void DrawBattleEntryBackground(void)
}
else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER))
{
if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) || gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE))
if (TestRunner_Battle_GetForcedEnvironment()
&& gBattleEnvironmentInfo[gBattleEnvironment].background.tilemap
&& gBattleEnvironmentInfo[gBattleEnvironment].background.tileset)
{
LoadBattleEnvironmentEntryGfx(gBattleEnvironment);
}
else if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) || gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE))
{
LoadBattleEnvironmentEntryGfx(BATTLE_ENVIRONMENT_BUILDING);
}

View File

@ -125,6 +125,8 @@ void HandleIntroSlide(u8 environment)
}
else
{
if (environment >= NELEMS(sBattleIntroSlideFuncs))
environment = BATTLE_ENVIRONMENT_PLAIN;
taskId = CreateTask(sBattleIntroSlideFuncs[environment], 0);
}

View File

@ -521,6 +521,8 @@ static void CB2_InitBattleInternal(void)
}
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
gBattleEnvironment = BATTLE_ENVIRONMENT_BUILDING;
if (TestRunner_Battle_GetForcedEnvironment())
gBattleEnvironment = TestRunner_Battle_GetForcedEnvironment() - 1;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER
| BATTLE_TYPE_EREADER_TRAINER

View File

@ -1,4 +1,27 @@
#include "global.h"
#include "test/battle.h"
#include "battle_environment.h"
TO_DO_BATTLE_TEST("TODO: Write Nature Power (Move Effect) test titles")
//TO_DO_BATTLE_TEST("TODO: Write Nature Power (Move Effect) test titles")
SINGLE_BATTLE_TEST("Nature power plays a move correctly in any background")
{
u32 environment = 0;
u32 move = MOVE_TRI_ATTACK;
for (u32 j = 0; j < BATTLE_ENVIRONMENT_COUNT; j++)
{
PARAMETRIZE {environment = i;}
}
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
Environment(environment);
if (gBattleEnvironmentInfo[environment].naturePower)
move = gBattleEnvironmentInfo[environment].naturePower;
} WHEN {
TURN { MOVE(player, MOVE_NATURE_POWER); }
} SCENE {
NOT MESSAGE("Nature Power turned into Nature Power!");
ANIMATION(ANIM_TYPE_MOVE, move, player);
}
}

View File

@ -2181,6 +2181,13 @@ void Shiny_(u32 sourceLine, bool32 isShiny)
DATA.isShiny = isShiny;
}
void Environment_(u32 sourceLine, u32 environment)
{
INVALID_IF(DATA.forcedEnvironment, "Environment is already set");
INVALID_IF(environment >= BATTLE_ENVIRONMENT_COUNT, "Illegal environment: %d", environment);
DATA.forcedEnvironment = environment + 1;
}
static const char *const sBattlerIdentifiersSingles[] =
{
"player",
@ -3104,6 +3111,11 @@ u32 TestRunner_Battle_GetForcedAbility(u32 side, u32 partyIndex)
return DATA.forcedAbilities[side][partyIndex];
}
u32 TestRunner_Battle_GetForcedEnvironment(void)
{
return DATA.forcedEnvironment;
}
u32 TestRunner_Battle_GetChosenGimmick(u32 side, u32 partyIndex)
{
return DATA.chosenGimmick[side][partyIndex];