From 8d7996dc5b67940663115b98f7fe13322dc92c55 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Fri, 18 Oct 2024 14:06:04 -0700 Subject: [PATCH 01/50] Added constant to expansion inclusive copyright magic number (#5413) * Added constant to expansion inclusive copyright magic number * Fixed open brackets --- src/intro.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/intro.c b/src/intro.c index cda31aa15b..5409833733 100644 --- a/src/intro.c +++ b/src/intro.c @@ -114,6 +114,7 @@ extern const struct SpriteTemplate gAncientPowerRockSpriteTemplate[]; enum { COPYRIGHT_INITIALIZE, + COPYRIGHT_EMULATOR_BLEND, COPYRIGHT_START_FADE = 140, COPYRIGHT_START_INTRO, }; @@ -1104,7 +1105,7 @@ static u8 SetUpCopyrightScreen(void) GameCubeMultiBoot_Init(&gMultibootProgramStruct); // REG_DISPCNT needs to be overwritten the second time, because otherwise the intro won't show up on VBA 1.7.2 and John GBA Lite emulators. // The REG_DISPCNT overwrite is NOT needed in m-GBA, No$GBA, VBA 1.8.0, My Boy and Pizza Boy GBA emulators. - case 1: + case COPYRIGHT_EMULATOR_BLEND: REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON; default: UpdatePaletteFade(); From 8bb850045695bc8309f8a769e55acffe1e5ed73f Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Sat, 19 Oct 2024 08:03:57 -0400 Subject: [PATCH 02/50] add curious medicine test (#5540) Co-authored-by: ghoulslash --- test/battle/ability/curious_medicine.c | 40 ++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 test/battle/ability/curious_medicine.c diff --git a/test/battle/ability/curious_medicine.c b/test/battle/ability/curious_medicine.c new file mode 100644 index 0000000000..5ee336262b --- /dev/null +++ b/test/battle/ability/curious_medicine.c @@ -0,0 +1,40 @@ +#include "global.h" +#include "test/battle.h" + +DOUBLE_BATTLE_TEST("Curious Medicine resets ally's stat stages upon entering battle") +{ + u32 ability; + + PARAMETRIZE { ability = ABILITY_CURIOUS_MEDICINE; } + PARAMETRIZE { ability = ABILITY_OWN_TEMPO; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SCOLIPEDE); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_SLOWKING_GALAR) { Ability(ability); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_QUIVER_DANCE); MOVE(playerLeft, MOVE_CHARM, target: opponentLeft); } + TURN { SWITCH(opponentRight, 2); MOVE(playerLeft, MOVE_CELEBRATE); } + } SCENE { + // Turn 1 - buff up + MESSAGE("Foe Scolipede used Quiver Dance!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + // Turn 2 - Switch into Slowking + MESSAGE("2 sent out Slowking!"); + if (ability == ABILITY_CURIOUS_MEDICINE) + { + ABILITY_POPUP(opponentRight, ABILITY_CURIOUS_MEDICINE); + MESSAGE("Foe Scolipede's stat changes were reset!"); + } + } THEN { + EXPECT_EQ(opponentLeft->statStages[STAT_ATK], (ability == ABILITY_CURIOUS_MEDICINE) ? DEFAULT_STAT_STAGE : DEFAULT_STAT_STAGE - 2); + EXPECT_EQ(opponentLeft->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponentLeft->statStages[STAT_SPEED], (ability == ABILITY_CURIOUS_MEDICINE) ? DEFAULT_STAT_STAGE : DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(opponentLeft->statStages[STAT_SPATK], (ability == ABILITY_CURIOUS_MEDICINE) ? DEFAULT_STAT_STAGE : DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(opponentLeft->statStages[STAT_SPDEF], (ability == ABILITY_CURIOUS_MEDICINE) ? DEFAULT_STAT_STAGE : DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(opponentLeft->statStages[STAT_ACC], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponentLeft->statStages[STAT_EVASION], DEFAULT_STAT_STAGE); + } +} From d487bd05489794c85d189bbee111c1b89237a5eb Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Sat, 19 Oct 2024 10:34:58 -0400 Subject: [PATCH 03/50] Revival Blessing fixes + Using Lunar Blessing's animation (#5490) * revival blessing fixes, add anim * fix lunar blessing anim * Added support for Revival Blessing in tests * Added test to confirm absent flag fix --------- Co-authored-by: ghoulslash Co-authored-by: Eduardo Quezada --- data/battle_anim_scripts.s | 6 +- data/battle_scripts_1.s | 3 + include/pokemon.h | 2 +- include/test/battle.h | 3 + src/battle_script_commands.c | 5 +- src/pokemon.c | 8 +- test/battle/move_effect/revival_blessing.c | 137 ++++++++++++--------- test/test_runner_battle.c | 44 +++++++ 8 files changed, 142 insertions(+), 66 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 0435eb8e77..1fa813e44f 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -15771,11 +15771,11 @@ SandsearStormFireSpin: @Credits to Skeli Move_LUNAR_BLESSING:: + loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_SPARKLE_2 loadspritegfx ANIM_TAG_GUARD_RING loadspritegfx ANIM_TAG_SMALL_EMBER @Yellow colour for ring - loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_ATK_PARTNER setalpha 16, 0 createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 @@ -17630,11 +17630,13 @@ Move_MALIGNANT_CHAIN:: waitforvisualfinish end +Move_REVIVAL_BLESSING:: + goto Move_LUNAR_BLESSING + Move_TERA_BLAST:: Move_ORDER_UP:: Move_POPULATION_BOMB:: Move_GLAIVE_RUSH:: -Move_REVIVAL_BLESSING:: Move_SALT_CURE:: Move_TRIPLE_DIVE:: Move_DOODLE:: diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 0a694d846f..4eee98ef4a 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -466,6 +466,9 @@ BattleScript_EffectRevivalBlessing:: goto BattleScript_MoveEnd BattleScript_EffectRevivalBlessingSendOut: + getswitchedmondata BS_SCRIPTING + switchindataupdate BS_SCRIPTING + hpthresholds BS_SCRIPTING switchinanim BS_SCRIPTING, FALSE waitstate switchineffects BS_SCRIPTING diff --git a/include/pokemon.h b/include/pokemon.h index 22c465214c..3505fd3163 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -788,7 +788,7 @@ u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex); void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex); void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex); void PokemonToBattleMon(struct Pokemon *src, struct BattlePokemon *dst); -void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex); +void CopyPartyMonToBattleData(u32 battlerId, u32 partyIndex); bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex); bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, u8 e); bool8 HealStatusConditions(struct Pokemon *mon, u32 healMask, u8 battlerId); diff --git a/include/test/battle.h b/include/test/battle.h index 041ebc1c72..e3d18b5a65 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -952,7 +952,10 @@ struct MoveContext u16 gimmick:4; u16 explicitGimmick:1; u16 allowed:1; + // End of word u16 explicitAllowed:1; + u16 partyIndex:3; // Used for moves where you select a party member without swiching, such as Revival Blessing + u16 explicitPartyIndex:1; u16 notExpected:1; // Has effect only with EXPECT_MOVE u16 explicitNotExpected:1; struct BattlePokemon *target; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 63b539dcc2..e9c82c5b36 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10993,7 +10993,10 @@ static void Cmd_various(void) if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)] == gSelectedMonPartyId) { - gBattleScripting.battler = BATTLE_PARTNER(gBattlerAttacker); + i = BATTLE_PARTNER(gBattlerAttacker); + gAbsentBattlerFlags &= ~(1u << i); + gBattleStruct->monToSwitchIntoId[i] = gSelectedMonPartyId; + gBattleScripting.battler = i; gBattleCommunication[MULTIUSE_STATE] = TRUE; } diff --git a/src/pokemon.c b/src/pokemon.c index 356ca64ac2..a8dd06fecb 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -3697,10 +3697,12 @@ void PokemonToBattleMon(struct Pokemon *src, struct BattlePokemon *dst) dst->status2 = 0; } -void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex) +void CopyPartyMonToBattleData(u32 battlerId, u32 partyIndex) { - PokemonToBattleMon(&gPlayerParty[partyIndex], &gBattleMons[battlerId]); - gBattleStruct->hpOnSwitchout[GetBattlerSide(battlerId)] = gBattleMons[battlerId].hp; + u32 side = GetBattlerSide(battlerId); + struct Pokemon *party = GetSideParty(side); + PokemonToBattleMon(&party[partyIndex], &gBattleMons[battlerId]); + gBattleStruct->hpOnSwitchout[side] = gBattleMons[battlerId].hp; UpdateSentPokesToOpponentValue(battlerId); ClearTemporarySpeciesSpriteData(battlerId, FALSE); } diff --git a/test/battle/move_effect/revival_blessing.c b/test/battle/move_effect/revival_blessing.c index d44e9110d5..46108ce497 100644 --- a/test/battle/move_effect/revival_blessing.c +++ b/test/battle/move_effect/revival_blessing.c @@ -1,10 +1,6 @@ #include "global.h" #include "test/battle.h" -// Note: Since these tests are recorded battle, they don't test the right battle controller -// behaviors. These have been tested in-game, in double, in multi, and in link battles. AI will always -// revive their first fainted party member in order. - ASSUMPTIONS { ASSUME(gMovesInfo[MOVE_REVIVAL_BLESSING].effect == EFFECT_REVIVAL_BLESSING); @@ -18,7 +14,7 @@ SINGLE_BATTLE_TEST("Revival Blessing revives a chosen fainted party member for t PLAYER(SPECIES_WYNAUT) { HP(0); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_REVIVAL_BLESSING); SEND_OUT(player, 2); } + TURN { MOVE(player, MOVE_REVIVAL_BLESSING, partyIndex:2); } } SCENE { MESSAGE("Wobbuffet used Revival Blessing!"); MESSAGE("Wynaut was revived and is ready to fight again!"); @@ -33,7 +29,7 @@ SINGLE_BATTLE_TEST("Revival Blessing revives a fainted party member for an oppon OPPONENT(SPECIES_PICHU) { HP(0); } OPPONENT(SPECIES_PIKACHU) { HP(0); } } WHEN { - TURN { MOVE(opponent, MOVE_REVIVAL_BLESSING); SEND_OUT(opponent, 1); } + TURN { MOVE(opponent, MOVE_REVIVAL_BLESSING, partyIndex:1); } } SCENE { MESSAGE("Foe Raichu used Revival Blessing!"); MESSAGE("Pichu was revived and is ready to fight again!"); @@ -53,57 +49,80 @@ SINGLE_BATTLE_TEST("Revival Blessing fails if no party members are fainted") } } -// Note: There isn't a good way to test multi battles at the moment, but -// this PASSES in game! -TO_DO_BATTLE_TEST("Revival Blessing cannot revive a partner's party member"); -// DOUBLE_BATTLE_TEST("Revival Blessing cannot revive a partner's party member") -// { -// struct BattlePokemon *user; -// gBattleTypeFlags |= BATTLE_TYPE_TWO_OPPONENTS; -// PARAMETRIZE { user = opponentLeft; } -// PARAMETRIZE { user = opponentRight; } -// GIVEN { -// ASSUME((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) != FALSE); -// PLAYER(SPECIES_WOBBUFFET); -// PLAYER(SPECIES_WOBBUFFET); -// OPPONENT(SPECIES_WOBBUFFET); -// OPPONENT(SPECIES_WOBBUFFET); -// OPPONENT(SPECIES_WOBBUFFET); -// OPPONENT(SPECIES_WYNAUT); -// OPPONENT(SPECIES_WYNAUT) { HP(0); } -// OPPONENT(SPECIES_WYNAUT); -// } WHEN { -// TURN { MOVE(user, MOVE_REVIVAL_BLESSING); } -// } SCENE { -// if (user == opponentLeft) { -// MESSAGE("Foe Wobbuffet used Revival Blessing!"); -// MESSAGE("But it failed!"); -// } else { -// MESSAGE("Foe Wynaut used Revival Blessing!"); -// MESSAGE("Wynaut was revived and is ready to fight again!"); -// } -// } -// } +DOUBLE_BATTLE_TEST("Revival Blessing cannot revive a partner's party member") +{ + KNOWN_FAILING; + struct BattlePokemon *user = NULL; + gBattleTypeFlags |= BATTLE_TYPE_TWO_OPPONENTS; + PARAMETRIZE { user = opponentLeft; } + PARAMETRIZE { user = opponentRight; } + GIVEN { + ASSUME((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) != FALSE); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WYNAUT) { HP(0); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(user, MOVE_REVIVAL_BLESSING, partyIndex:4); } + } SCENE { + if (user == opponentLeft) { + MESSAGE("Foe Wobbuffet used Revival Blessing!"); + MESSAGE("But it failed!"); + } else { + MESSAGE("Foe Wynaut used Revival Blessing!"); + MESSAGE("Wynaut was revived and is ready to fight again!"); + } + } +} -// Note: The test runner gets upset about "sending out" a battler on the field, -// but this PASSES in game! -TO_DO_BATTLE_TEST("Revived battlers still lose their turn"); -// DOUBLE_BATTLE_TEST("Revived battlers still lose their turn") -// { -// GIVEN { -// PLAYER(SPECIES_WOBBUFFET); -// PLAYER(SPECIES_WYNAUT); -// OPPONENT(SPECIES_WOBBUFFET); -// OPPONENT(SPECIES_WYNAUT) { HP(1); } -// } WHEN { -// TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentRight); -// MOVE(opponentLeft, MOVE_REVIVAL_BLESSING); -// SEND_OUT(opponentLeft, 1); } -// } SCENE { -// MESSAGE("Wobbuffet used Tackle!"); -// MESSAGE("Foe Wynaut fainted!"); -// MESSAGE("Foe Wobbuffet used Revival Blessing!"); -// MESSAGE("Wynaut was revived and is ready to fight again!"); -// NOT { MESSAGE("Wynaut used Celebrate!"); } -// } -// } +DOUBLE_BATTLE_TEST("Revival Blessing doesn't prevent revived battlers from losing their turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { HP(1); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentRight); + MOVE(opponentLeft, MOVE_REVIVAL_BLESSING, partyIndex: 1); } + } SCENE { + MESSAGE("Wobbuffet used Tackle!"); + MESSAGE("Foe Wynaut fainted!"); + MESSAGE("Foe Wobbuffet used Revival Blessing!"); + MESSAGE("Wynaut was revived and is ready to fight again!"); + NOT { MESSAGE("Wynaut used Celebrate!"); } + } +} + +DOUBLE_BATTLE_TEST("Revival Blessing correctly updates battler absent flags") +{ + GIVEN { + PLAYER(SPECIES_SALAMENCE) { Level(40); } + PLAYER(SPECIES_PIDGEOT) { Level(40); } + OPPONENT(SPECIES_GEODUDE) { Level(5); Ability(ABILITY_ROCK_HEAD); } + OPPONENT(SPECIES_STARLY) { Level(5); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_EARTHQUAKE); + MOVE(opponentRight, MOVE_REVIVAL_BLESSING, partyIndex: 0); } + TURN { MOVE(playerLeft, MOVE_EARTHQUAKE); } + } SCENE { + // Turn 1 + MESSAGE("Salamence used Earthquake!"); + HP_BAR(opponentLeft); + MESSAGE("Foe Geodude fainted!"); + MESSAGE("It doesn't affect Pidgeot…"); + MESSAGE("It doesn't affect Foe Starly…"); + MESSAGE("Foe Starly used Revival Blessing!"); + MESSAGE("Geodude was revived and is ready to fight again!"); // Should have prefix but it doesn't currently. + // Turn 2 + MESSAGE("Salamence used Earthquake!"); + HP_BAR(opponentLeft); + MESSAGE("Foe Geodude fainted!"); + MESSAGE("It doesn't affect Pidgeot…"); + MESSAGE("It doesn't affect Foe Starly…"); + } +} diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index d870d4ae41..b3f88b84a3 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -2116,11 +2116,44 @@ void MoveGetIdAndSlot(s32 battlerId, struct MoveContext *ctx, u32 *moveId, u32 * } } +u32 MoveGetFirstFainted(s32 battlerId) +{ + u32 i, partySize; + struct Pokemon *party; + + if ((battlerId & BIT_SIDE) == B_SIDE_PLAYER) + { + partySize = DATA.playerPartySize; + party = DATA.recordedBattle.playerParty; + } + else + { + partySize = DATA.opponentPartySize; + party = DATA.recordedBattle.opponentParty; + } + + // Loop through to find fainted battler. + for (i = 0; i < partySize; ++i) + { + u32 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); + if (species != SPECIES_NONE + && species != SPECIES_EGG + && GetMonData(&party[i], MON_DATA_HP) == 0) + { + return i; + } + } + + // Returns PARTY_SIZE if none found. + return PARTY_SIZE; +} + void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) { s32 battlerId = battler - gBattleMons; u32 moveId, moveSlot; s32 target; + bool32 requirePartyIndex = FALSE; INVALID_IF(DATA.turnState == TURN_CLOSED, "MOVE outside TURN"); INVALID_IF(IsAITest() && (battlerId & BIT_SIDE) == B_SIDE_OPPONENT, "MOVE is not allowed for opponent in AI tests. Use EXPECT_MOVE instead"); @@ -2128,6 +2161,14 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) MoveGetIdAndSlot(battlerId, &ctx, &moveId, &moveSlot, sourceLine); target = MoveGetTarget(battlerId, moveId, &ctx, sourceLine); + if (gMovesInfo[moveId].effect == EFFECT_REVIVAL_BLESSING) + requirePartyIndex = MoveGetFirstFainted(battlerId) != PARTY_SIZE; + + // Check party menu moves. + INVALID_IF(requirePartyIndex && !ctx.explicitPartyIndex, "%S requires explicit party index", GetMoveName(moveId)); + INVALID_IF(requirePartyIndex && ctx.partyIndex >= ((battlerId & BIT_SIDE) == B_SIDE_PLAYER ? DATA.playerPartySize : DATA.opponentPartySize), \ + "MOVE to invalid party index"); + if (ctx.explicitHit) DATA.battleRecordTurns[DATA.turns][battlerId].hit = 1 + ctx.hit; if (ctx.explicitCriticalHit) @@ -2148,6 +2189,9 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) PushBattlerAction(sourceLine, battlerId, RECORDED_MOVE_TARGET, target); } + if (ctx.explicitPartyIndex) + PushBattlerAction(sourceLine, battlerId, RECORDED_PARTY_INDEX, ctx.partyIndex); + if (DATA.turnState == TURN_OPEN) { if (!DATA.hasExplicitSpeeds) From 495de8d1824da48a5c9af422ad9f49f31074bfed Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 19 Oct 2024 13:59:49 -0300 Subject: [PATCH 04/50] Fix Follow Me failing in Single Battles for Gen 6/7 config (#5542) --- data/battle_scripts_1.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 4eee98ef4a..04ab06a76d 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -4958,7 +4958,7 @@ BattleScript_EffectFollowMe:: attackcanceler attackstring ppreduce - .if B_UPDATED_MOVE_DATA >= GEN_6 + .if B_UPDATED_MOVE_DATA >= GEN_8 jumpifnotbattletype BATTLE_TYPE_DOUBLE, BattleScript_ButItFailed .endif setforcedtarget From 89e8bc5c4c441d740bc4b0c355a1b9db03f209e7 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 19 Oct 2024 14:00:04 -0300 Subject: [PATCH 05/50] Add changelog header in PR template to aid automation (#5539) * Add changelog header in PR template to aid automation * Bullet points * Finished the statement --- .github/pull_request_template.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 03dbf8623d..2259d399c9 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -20,6 +20,11 @@ +## Things to note in the release changelog: + + + + ## **Discord contact info** From 601438e980ddf88311064c97fa66d09845755ed4 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 19 Oct 2024 22:51:20 +0200 Subject: [PATCH 06/50] Centralise AI Tests trainer name (#5532) --- include/test/battle.h | 2 ++ test/battle/ai/ai_flag_sequence_switching.c | 12 ++++++------ test/battle/ai/ai_switching.c | 14 +++++++------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/include/test/battle.h b/include/test/battle.h index e3d18b5a65..819d05cbff 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -735,6 +735,8 @@ extern struct BattleTestRunnerState *const gBattleTestRunnerState; #define APPEND_COMMA_TRUE(a) , a, TRUE #define R_APPEND_TRUE(...) __VA_OPT__(FIRST(__VA_ARGS__), TRUE RECURSIVELY(R_FOR_EACH(APPEND_COMMA_TRUE, EXCEPT_1(__VA_ARGS__)))) +#define AI_TRAINER_NAME "{PKMN} TRAINER LEAF" + /* Test */ #define TO_DO_BATTLE_TEST(_name) \ diff --git a/test/battle/ai/ai_flag_sequence_switching.c b/test/battle/ai/ai_flag_sequence_switching.c index 1b4a264a24..b91df65d15 100644 --- a/test/battle/ai/ai_flag_sequence_switching.c +++ b/test/battle/ai/ai_flag_sequence_switching.c @@ -27,14 +27,14 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will always switch after a } } SCENE { if (aiSequenceSwitchingFlag) { - MESSAGE("{PKMN} TRAINER LEAF sent out Machoke!"); - MESSAGE("{PKMN} TRAINER LEAF sent out Machamp!"); - MESSAGE("{PKMN} TRAINER LEAF sent out Mankey!"); - MESSAGE("{PKMN} TRAINER LEAF sent out Primeape!"); - MESSAGE("{PKMN} TRAINER LEAF sent out Magnezone!"); + MESSAGE(AI_TRAINER_NAME " sent out Machoke!"); + MESSAGE(AI_TRAINER_NAME " sent out Machamp!"); + MESSAGE(AI_TRAINER_NAME " sent out Mankey!"); + MESSAGE(AI_TRAINER_NAME " sent out Primeape!"); + MESSAGE(AI_TRAINER_NAME " sent out Magnezone!"); } else { - MESSAGE("{PKMN} TRAINER LEAF sent out Magnezone!"); + MESSAGE(AI_TRAINER_NAME " sent out Magnezone!"); } } } diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 59a6d88493..b9d4d6115d 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -35,7 +35,7 @@ AI_SINGLE_BATTLE_TEST("AI switches if Perish Song is about to kill") TURN { ; } TURN { EXPECT_SWITCH(opponent, 1); } } SCENE { - MESSAGE("{PKMN} TRAINER LEAF sent out Crobat!"); + MESSAGE(AI_TRAINER_NAME " sent out Crobat!"); } } @@ -58,11 +58,11 @@ AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spot } WHEN { TURN { EXPECT_SWITCH(opponentLeft, 3); }; } SCENE { - MESSAGE("{PKMN} TRAINER LEAF withdrew Gengar!"); - MESSAGE("{PKMN} TRAINER LEAF sent out Raticate!"); + MESSAGE(AI_TRAINER_NAME " withdrew Gengar!"); + MESSAGE(AI_TRAINER_NAME " sent out Raticate!"); NONE_OF { - MESSAGE("{PKMN} TRAINER LEAF withdrew Haunter!"); - MESSAGE("{PKMN} TRAINER LEAF sent out Raticate!"); + MESSAGE(AI_TRAINER_NAME " withdrew Haunter!"); + MESSAGE(AI_TRAINER_NAME " sent out Raticate!"); } } } @@ -160,9 +160,9 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will not switch in a Pokemo } SCENE { MESSAGE("Foe Kadabra fainted!"); if (alakazamFirst) { - MESSAGE("{PKMN} TRAINER LEAF sent out Alakazam!"); + MESSAGE(AI_TRAINER_NAME " sent out Alakazam!"); } else { - MESSAGE("{PKMN} TRAINER LEAF sent out Blastoise!"); + MESSAGE(AI_TRAINER_NAME " sent out Blastoise!"); } } } From 5291117687ace90ac10ee2723526ac074ac634a6 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 20 Oct 2024 14:28:36 +0200 Subject: [PATCH 07/50] Global is used instead of passed var (#5546) In `AI_CalcDamage` a global was used for the Terastorm check instead of passed var --- src/battle_ai_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index d50410186f..b7ab186ccc 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -556,7 +556,7 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; break; case EFFECT_TERA_STARSTORM: - if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA && gBattleMons[gBattlerAttacker].species == SPECIES_TERAPAGOS_STELLAR) + if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && gBattleMons[battlerAtk].species == SPECIES_TERAPAGOS_STELLAR) gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; break; } From c237bc24528b5ee027338eebe22d169d6d143064 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 20 Oct 2024 16:13:20 +0200 Subject: [PATCH 08/50] Remove now outdated information from readme (#5548) --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index 427caafd0a..facd5f5626 100644 --- a/README.md +++ b/README.md @@ -119,11 +119,6 @@ Based off RHH's pokeemerald-expansion 1.9.3 https://github.com/rh-hideout/pokeem - ***Gen 6+ Exp. Share*** (configurable) - Berserk Gene - Most battle items from Gen 4+ - - Existing item data but missing effects: - - Gimmighoul Coin - - Booster Energy - - Tera Shards - - Tera Orb - ***Feature branches incorporated (with permission):*** - [RHH intro credits](https://github.com/Xhyzi/pokeemerald/tree/rhh-intro-credits) by @Xhyzi. - A small signature from all of us to show the collective effort in the project :) From 17614f80320fbf426682ec5a9d3ec3e88ca9b820 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 21 Oct 2024 12:32:10 +0200 Subject: [PATCH 09/50] Remove unnecessary gBattlerAttacker usage (#5554) --- src/battle_main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index 9385aaf228..ec4a3e2c3b 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3877,11 +3877,11 @@ static void TryDoEventsBeforeFirstTurn(void) case FIRST_TURN_EVENTS_SWITCH_IN_ABILITIES: while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest { - gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++]; + i = gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++]; - if (TryPrimalReversion(gBattlerAttacker)) + if (TryPrimalReversion(i)) return; - if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerAttacker, 0, 0, 0) != 0) + if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, i, 0, 0, 0) != 0) return; } gBattleStruct->switchInBattlerCounter = 0; From d11fd21cd6f886b9066140239a86264ca0e09032 Mon Sep 17 00:00:00 2001 From: GhoulMage Date: Mon, 21 Oct 2024 12:33:21 +0200 Subject: [PATCH 10/50] Changing EVO_NONE from 0xFFFE to 0 (#5547) --- include/constants/pokemon.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 8095367c97..b29860812c 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -245,7 +245,7 @@ // Evolution types #define EVOLUTIONS_END 0xFFFF // Not an actual evolution, used to mark the end of an evolution array. -#define EVO_NONE 0xFFFE // Not an actual evolution, used to generate offspring that can't evolve into the specified species, like regional forms. +#define EVO_NONE 0 // Not an actual evolution, used to generate offspring that can't evolve into the specified species, like regional forms. #define EVO_FRIENDSHIP 1 // Pokémon levels up with friendship ≥ 220 #define EVO_FRIENDSHIP_DAY 2 // Pokémon levels up during the day with friendship ≥ 220 #define EVO_FRIENDSHIP_NIGHT 3 // Pokémon levels up at night with friendship ≥ 220 From db24128ee3caaf9127ff3724c6a33723cfcadd92 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 21 Oct 2024 12:52:45 -0500 Subject: [PATCH 11/50] Update battle messages to Gen 5+ standards (#3240) Co-authored-by: Eduardo Quezada --- charmap.txt | 4 + data/battle_scripts_1.s | 8 +- docs/tutorials/how_to_testing_system.md | 16 +- include/battle_message.h | 46 +- include/constants/battle_string_ids.h | 10 +- include/string_util.h | 1 + include/test/battle.h | 26 +- include/text.h | 2 + src/battle_message.c | 1489 +++++++++-------- src/battle_script_commands.c | 2 +- src/battle_util.c | 2 +- src/mini_printf.c | 1 + src/pokemon.c | 2 +- src/string_util.c | 22 + src/text.c | 36 + test/battle/ability/aftermath.c | 2 +- test/battle/ability/anger_point.c | 4 +- test/battle/ability/bad_dreams.c | 12 +- test/battle/ability/battle_bond.c | 10 +- test/battle/ability/beads_of_ruin.c | 2 +- test/battle/ability/clear_body.c | 98 +- test/battle/ability/cloud_nine.c | 10 +- test/battle/ability/color_change.c | 26 +- test/battle/ability/comatose.c | 4 +- test/battle/ability/commander.c | 34 +- test/battle/ability/contrary.c | 50 +- test/battle/ability/costar.c | 4 +- test/battle/ability/cotton_down.c | 2 +- test/battle/ability/curious_medicine.c | 4 +- test/battle/ability/cursed_body.c | 2 +- test/battle/ability/cute_charm.c | 12 +- test/battle/ability/dancer.c | 6 +- test/battle/ability/dauntless_shield.c | 12 +- test/battle/ability/defiant.c | 36 +- test/battle/ability/desolate_land.c | 18 +- test/battle/ability/disguise.c | 12 +- test/battle/ability/download.c | 4 +- test/battle/ability/effect_spore.c | 10 +- test/battle/ability/embody_aspect.c | 14 +- test/battle/ability/flame_body.c | 6 +- test/battle/ability/forecast.c | 4 +- test/battle/ability/frisk.c | 12 +- test/battle/ability/gale_wings.c | 16 +- test/battle/ability/good_as_gold.c | 8 +- test/battle/ability/grim_neigh.c | 8 +- test/battle/ability/gulp_missile.c | 2 +- test/battle/ability/hunger_switch.c | 2 +- test/battle/ability/hyper_cutter.c | 20 +- test/battle/ability/immunity.c | 2 +- test/battle/ability/innards_out.c | 8 +- test/battle/ability/inner_focus.c | 6 +- test/battle/ability/intimidate.c | 30 +- test/battle/ability/intrepid_sword.c | 16 +- test/battle/ability/keen_eye.c | 32 +- test/battle/ability/leaf_guard.c | 2 +- test/battle/ability/lightning_rod.c | 8 +- test/battle/ability/magic_bounce.c | 16 +- test/battle/ability/magician.c | 6 +- test/battle/ability/minds_eye.c | 2 +- test/battle/ability/mirror_armor.c | 40 +- test/battle/ability/moxie.c | 16 +- test/battle/ability/opportunist.c | 8 +- test/battle/ability/overcoat.c | 2 +- test/battle/ability/own_tempo.c | 18 +- test/battle/ability/parental_bond.c | 16 +- test/battle/ability/pastel_veil.c | 10 +- test/battle/ability/poison_point.c | 6 +- test/battle/ability/poison_puppeteer.c | 6 +- test/battle/ability/poison_touch.c | 12 +- test/battle/ability/prankster.c | 26 +- test/battle/ability/primordial_sea.c | 18 +- test/battle/ability/protean.c | 6 +- test/battle/ability/quick_draw.c | 4 +- test/battle/ability/rattled.c | 16 +- test/battle/ability/sap_sipper.c | 4 +- test/battle/ability/schooling.c | 6 +- test/battle/ability/scrappy.c | 4 +- test/battle/ability/seed_sower.c | 2 +- test/battle/ability/shed_skin.c | 2 +- test/battle/ability/sheer_force.c | 4 +- test/battle/ability/shield_dust.c | 22 +- test/battle/ability/speed_boost.c | 6 +- test/battle/ability/stalwart.c | 2 +- test/battle/ability/stamina.c | 6 +- test/battle/ability/static.c | 6 +- test/battle/ability/stench.c | 10 +- test/battle/ability/sticky_hold.c | 2 +- test/battle/ability/storm_drain.c | 8 +- test/battle/ability/sturdy.c | 2 +- test/battle/ability/supersweet_syrup.c | 6 +- test/battle/ability/supreme_overlord.c | 2 +- test/battle/ability/sword_of_ruin.c | 2 +- test/battle/ability/tablets_of_ruin.c | 2 +- test/battle/ability/tangling_hair.c | 12 +- test/battle/ability/tera_shell.c | 4 +- test/battle/ability/teraform_zero.c | 6 +- test/battle/ability/toxic_chain.c | 16 +- test/battle/ability/toxic_debris.c | 20 +- test/battle/ability/trace.c | 10 +- test/battle/ability/vessel_of_ruin.c | 2 +- test/battle/ability/weak_armor.c | 12 +- test/battle/ability/wind_power.c | 8 +- test/battle/ability/wind_rider.c | 16 +- test/battle/ability/zen_mode.c | 6 +- test/battle/ability/zero_to_hero.c | 12 +- test/battle/ai/ai.c | 12 +- test/battle/ai/ai_check_viability.c | 2 +- test/battle/ai/ai_flag_sequence_switching.c | 2 +- test/battle/ai/ai_switching.c | 2 +- test/battle/ai/ai_trytofaint.c | 2 +- test/battle/battle_message.c | 4 +- test/battle/crit_chance.c | 2 +- test/battle/exp.c | 10 +- test/battle/form_change/battle_switch.c | 2 +- test/battle/form_change/faint.c | 2 +- test/battle/form_change/mega_evolution.c | 20 +- test/battle/form_change/primal_reversion.c | 40 +- test/battle/form_change/ultra_burst.c | 14 +- test/battle/gimmick/dynamax.c | 242 +-- test/battle/gimmick/terastal.c | 38 +- test/battle/gimmick/zmove.c | 2 +- test/battle/hold_effect/ability_shield.c | 2 +- test/battle/hold_effect/air_balloon.c | 12 +- test/battle/hold_effect/berserk_gene.c | 2 +- test/battle/hold_effect/clear_amulet.c | 6 +- test/battle/hold_effect/covert_cloak.c | 22 +- test/battle/hold_effect/critical_hit_up.c | 8 +- test/battle/hold_effect/cure_status.c | 12 +- test/battle/hold_effect/custap_berry.c | 6 +- test/battle/hold_effect/eject_button.c | 28 +- test/battle/hold_effect/enigma_berry.c | 6 +- test/battle/hold_effect/gems.c | 8 +- test/battle/hold_effect/jaboca_berry.c | 8 +- test/battle/hold_effect/kee_berry.c | 6 +- test/battle/hold_effect/leftovers.c | 6 +- test/battle/hold_effect/maranga_berry.c | 6 +- test/battle/hold_effect/metronome.c | 6 +- test/battle/hold_effect/mirror_herb.c | 2 +- test/battle/hold_effect/protective_pads.c | 2 +- test/battle/hold_effect/quick_claw.c | 2 +- test/battle/hold_effect/red_card.c | 70 +- test/battle/hold_effect/restore_hp.c | 4 +- test/battle/hold_effect/restore_stats.c | 26 +- test/battle/hold_effect/rowap_berry.c | 6 +- test/battle/hold_effect/safety_goggles.c | 6 +- test/battle/hold_effect/speed_up.c | 6 +- test/battle/item_effect/cure_status.c | 2 +- test/battle/item_effect/escape.c | 10 +- .../battle/item_effect/heal_and_cure_status.c | 14 +- test/battle/item_effect/increase_stat.c | 18 +- test/battle/item_effect/revive.c | 8 +- test/battle/item_effect/set_mist.c | 6 +- test/battle/move_effect/accuracy_down.c | 2 +- test/battle/move_effect/after_you.c | 4 +- test/battle/move_effect/ally_switch.c | 8 +- test/battle/move_effect/attack_down.c | 2 +- test/battle/move_effect/attack_down_2.c | 2 +- test/battle/move_effect/baton_pass.c | 2 +- test/battle/move_effect/beak_blast.c | 16 +- test/battle/move_effect/belly_drum.c | 6 +- test/battle/move_effect/bide.c | 2 +- test/battle/move_effect/confuse.c | 8 +- test/battle/move_effect/conversion_2.c | 32 +- test/battle/move_effect/corrosive_gas.c | 22 +- test/battle/move_effect/court_change.c | 82 +- test/battle/move_effect/defense_down.c | 2 +- test/battle/move_effect/defog.c | 66 +- test/battle/move_effect/destiny_bond.c | 4 +- test/battle/move_effect/doodle.c | 8 +- test/battle/move_effect/dragon_darts.c | 28 +- test/battle/move_effect/dream_eater.c | 2 +- test/battle/move_effect/embargo.c | 60 +- test/battle/move_effect/encore.c | 2 +- test/battle/move_effect/explosion.c | 12 +- .../battle/move_effect/fail_if_not_arg_type.c | 4 +- test/battle/move_effect/flame_burst.c | 4 +- test/battle/move_effect/fling.c | 78 +- test/battle/move_effect/focus_punch.c | 8 +- test/battle/move_effect/future_sight.c | 20 +- test/battle/move_effect/heal_bell.c | 10 +- test/battle/move_effect/healing_wish.c | 2 +- test/battle/move_effect/hit_escape.c | 2 +- .../move_effect/hit_set_remove_terrain.c | 2 +- test/battle/move_effect/hit_switch_target.c | 4 +- test/battle/move_effect/ion_deluge.c | 6 +- test/battle/move_effect/knock_off.c | 30 +- test/battle/move_effect/leech_seed.c | 2 +- test/battle/move_effect/max_hp_50_recoil.c | 4 +- test/battle/move_effect/metronome.c | 10 +- test/battle/move_effect/mind_blown.c | 8 +- test/battle/move_effect/mirror_move.c | 12 +- test/battle/move_effect/multi_hit.c | 32 +- test/battle/move_effect/octolock.c | 58 +- test/battle/move_effect/ohko.c | 2 +- test/battle/move_effect/plasma_fists.c | 10 +- test/battle/move_effect/pledge.c | 50 +- test/battle/move_effect/population_bomb.c | 2 +- test/battle/move_effect/powder.c | 2 +- test/battle/move_effect/protect.c | 82 +- test/battle/move_effect/pursuit.c | 2 +- test/battle/move_effect/quash.c | 2 +- test/battle/move_effect/rage_fist.c | 6 +- test/battle/move_effect/recoil_if_miss.c | 4 +- test/battle/move_effect/reflect_type.c | 14 +- test/battle/move_effect/relic_song.c | 8 +- test/battle/move_effect/revival_blessing.c | 20 +- test/battle/move_effect/roar.c | 4 +- test/battle/move_effect/roost.c | 60 +- test/battle/move_effect/salt_cure.c | 18 +- test/battle/move_effect/semi_invulnerable.c | 4 +- test/battle/move_effect/shed_tail.c | 4 +- test/battle/move_effect/shell_trap.c | 14 +- test/battle/move_effect/sleep.c | 6 +- test/battle/move_effect/smack_down.c | 2 +- test/battle/move_effect/smelling_salts.c | 14 +- test/battle/move_effect/sparkling_aria.c | 6 +- test/battle/move_effect/special_attack_down.c | 2 +- test/battle/move_effect/spicy_extract.c | 28 +- test/battle/move_effect/spikes.c | 16 +- test/battle/move_effect/sticky_web.c | 58 +- test/battle/move_effect/stomping_tantrum.c | 4 +- test/battle/move_effect/strength_sap.c | 28 +- test/battle/move_effect/substitute.c | 8 +- test/battle/move_effect/tailwind.c | 14 +- test/battle/move_effect/teatime.c | 28 +- test/battle/move_effect/telekinesis.c | 12 +- test/battle/move_effect/tera_blast.c | 4 +- test/battle/move_effect/tera_starstorm.c | 4 +- test/battle/move_effect/thousand_arrows.c | 10 +- test/battle/move_effect/tidy_up.c | 6 +- test/battle/move_effect/torment.c | 2 +- test/battle/move_effect/toxic_spikes.c | 20 +- test/battle/move_effect/two_turns_attack.c | 10 +- test/battle/move_effect/upper_hand.c | 4 +- test/battle/move_effect/uproar.c | 6 +- test/battle/move_effect/wake_up_slap.c | 14 +- test/battle/move_effect_secondary/bug_bite.c | 22 +- test/battle/move_effect_secondary/confusion.c | 6 +- test/battle/move_effect_secondary/flinch.c | 10 +- test/battle/move_effect_secondary/order_up.c | 8 +- test/battle/move_effect_secondary/pay_day.c | 4 +- .../move_effect_secondary/psychic_noise.c | 12 +- .../battle/move_effect_secondary/rapid_spin.c | 6 +- test/battle/move_effect_secondary/spikes.c | 14 +- .../move_effect_secondary/stealth_rock.c | 4 +- .../battle/move_effect_secondary/syrup_bomb.c | 58 +- .../move_effect_secondary/throat_chop.c | 4 +- test/battle/move_effects_combined/axe_kick.c | 6 +- .../move_effects_combined/flinch_status.c | 2 +- .../move_effects_combined/make_it_rain.c | 8 +- .../move_effects_combined/triple_arrows.c | 10 +- test/battle/move_flags/powder.c | 2 +- test/battle/move_flags/strike_count.c | 2 +- test/battle/status1/freeze.c | 6 +- test/battle/status1/frostbite.c | 10 +- test/battle/status1/paralysis.c | 10 +- test/battle/status2/confusion.c | 4 +- test/battle/terrain/electric.c | 16 +- test/battle/terrain/grassy.c | 31 +- test/battle/terrain/misty.c | 14 +- test/battle/terrain/psychic.c | 14 +- test/battle/terrain/starting_terrain.c | 14 +- test/battle/weather/hail.c | 4 +- test/battle/weather/sandstorm.c | 8 +- test/text.c | 281 ++++ 265 files changed, 2888 insertions(+), 2393 deletions(-) diff --git a/charmap.txt b/charmap.txt index e5a901d6d9..16d8c14619 100644 --- a/charmap.txt +++ b/charmap.txt @@ -413,6 +413,10 @@ B_DEF_TEAM1 = FD 3A B_DEF_TEAM2 = FD 3B @ FD 3C - preiously gActiveBattler @ FD 3D - preiously gActiveBattler without Illusion Check +B_ATK_NAME_WITH_PREFIX2 = FD 3E +B_DEF_NAME_WITH_PREFIX2 = FD 3F +B_EFF_NAME_WITH_PREFIX2 = FD 40 +B_SCR_ACTIVE_NAME_WITH_PREFIX2 = FD 41 @ indicates the end of a town/city name (before " TOWN" or " CITY") NAME_END = FC 00 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 237611d28b..52c21dc68a 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3094,7 +3094,7 @@ BattleScript_DreamEaterWorked: healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER jumpifmovehadnoeffect BattleScript_DreamEaterTryFaintEnd - printstring STRINGID_PKMNDREAMEATEN + printstring STRINGID_PKMNENERGYDRAINED waitmessage B_WAIT_TIME_LONG BattleScript_DreamEaterTryFaintEnd: tryfaintmon BS_TARGET @@ -5962,7 +5962,7 @@ BattleScript_OverworldWeatherStarts:: end3 BattleScript_OverworldTerrain:: - printfromtable gTerrainStringIds + printfromtable gTerrainStartsStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_BATTLER_0, B_ANIM_RESTORE_BG call BattleScript_ActivateTerrainEffects @@ -9083,8 +9083,6 @@ BattleScript_BerryConfuseHealEnd2_Anim: orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_SCRIPTING datahpupdate BS_SCRIPTING - printstring STRINGID_FORXCOMMAYZ - waitmessage B_WAIT_TIME_LONG seteffectprimary MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER removeitem BS_SCRIPTING end2 @@ -9101,8 +9099,6 @@ BattleScript_BerryConfuseHealRet_Anim: orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_SCRIPTING datahpupdate BS_SCRIPTING - printstring STRINGID_FORXCOMMAYZ - waitmessage B_WAIT_TIME_LONG seteffectprimary MOVE_EFFECT_CONFUSION | MOVE_EFFECT_CERTAIN removeitem BS_TARGET return diff --git a/docs/tutorials/how_to_testing_system.md b/docs/tutorials/how_to_testing_system.md index 56719458ab..c573dfbbf7 100644 --- a/docs/tutorials/how_to_testing_system.md +++ b/docs/tutorials/how_to_testing_system.md @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("Stun Spore inflicts paralysis") TURN { MOVE(player, MOVE_STUN_SPORE); } // 3. } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); // 4 + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); // 4 STATUS_ICON(opponent, paralysis: TRUE); // 4. } } @@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Stun Spore does not affect Grass-types") TURN { MOVE(player, MOVE_STUN_SPORE); } // 3. } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); // 4. - MESSAGE("It doesn't affect Foe Oddish…"); // 5. + MESSAGE("It doesn't affect the opposing Oddish…"); // 5. } } ``` @@ -226,7 +226,7 @@ SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); } } ``` @@ -428,7 +428,7 @@ Spaces in pattern match newlines (\n, \l, and \p) in the message. Often used to check that a battler took its turn but it failed, e.g.: ``` MESSAGE("Wobbuffet used Dream Eater!"); - MESSAGE("Foe Wobbuffet wasn't affected!"); + MESSAGE("The opposing Wobbuffet wasn't affected!"); ``` ### `STATUS_ICON` @@ -452,7 +452,7 @@ Causes the test to fail if the `SCENE` command succeeds before the following com ``` // Our Wobbuffet does not Celebrate before the foe's. NOT MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ``` **NOTE**: If this condition fails, the viewable ROM freezes at the NOT command. **WARNING: `NOT` is an alias of `NONE_OF`, so it behaves surprisingly when applied to multiple commands wrapped in braces.** @@ -467,7 +467,7 @@ Causes the test to fail unless one of the `SCENE` commands succeeds. ``` ONE_OF { MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); } ``` @@ -482,9 +482,9 @@ Causes the test to fail if one of the `SCENE` commands succeeds before the comma // Our Wobbuffet does not move before the foe's. NONE_OF { MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); } - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ``` ### `PLAYER_PARTY` diff --git a/include/battle_message.h b/include/battle_message.h index 338712606a..5af31a459f 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -1,12 +1,15 @@ #ifndef GUARD_BATTLE_MESSAGE_H #define GUARD_BATTLE_MESSAGE_H +#include "constants/battle.h" + // This buffer can hold many different things. Some of the things it can hold // that have explicit sizes are listed below to ensure it can contain them. #define TEXT_BUFF_ARRAY_COUNT max(16, \ max(MOVE_NAME_LENGTH + 2, /* +2 to hold the "!" and EOS. */ \ max(POKEMON_NAME_LENGTH + 1, \ ABILITY_NAME_LENGTH + 1))) +#define BATTLE_MSG_MAX_WIDTH 208 // for 0xFD #define B_TXT_BUFF1 0x0 @@ -71,20 +74,23 @@ #define B_TXT_DEF_TEAM2 0x3B // your/the opposing // #define B_TXT_SELECTION_NAME 0x3C - removed // #define B_TXT_SELECTION_NAME2 0x3D no Illusion check - removed +#define B_TXT_ATK_NAME_WITH_PREFIX2 0x3E //lowercase +#define B_TXT_DEF_NAME_WITH_PREFIX2 0x3F //lowercase +#define B_TXT_EFF_NAME_WITH_PREFIX2 0x40 //lowercase +#define B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX2 0x41 //lowercase -// for B_TXT_BUFF1, B_TXT_BUFF2 and B_TXT_BUFF3 - -#define B_BUFF_STRING 0 -#define B_BUFF_NUMBER 1 -#define B_BUFF_MOVE 2 -#define B_BUFF_TYPE 3 -#define B_BUFF_MON_NICK_WITH_PREFIX 4 -#define B_BUFF_STAT 5 -#define B_BUFF_SPECIES 6 -#define B_BUFF_MON_NICK 7 -#define B_BUFF_NEGATIVE_FLAVOR 8 -#define B_BUFF_ABILITY 9 -#define B_BUFF_ITEM 10 +#define B_BUFF_STRING 0 +#define B_BUFF_NUMBER 1 +#define B_BUFF_MOVE 2 +#define B_BUFF_TYPE 3 +#define B_BUFF_MON_NICK_WITH_PREFIX 4 +#define B_BUFF_STAT 5 +#define B_BUFF_SPECIES 6 +#define B_BUFF_MON_NICK 7 +#define B_BUFF_NEGATIVE_FLAVOR 8 +#define B_BUFF_ABILITY 9 +#define B_BUFF_ITEM 10 +#define B_BUFF_MON_NICK_WITH_PREFIX_LOWER 11 // lowercase prefix #define B_BUFF_PLACEHOLDER_BEGIN 0xFD #define B_BUFF_EOS 0xFF @@ -201,6 +207,15 @@ textVar[4] = B_BUFF_EOS; \ } +#define PREPARE_MON_NICK_WITH_PREFIX_LOWER_BUFFER(textVar, battler, partyId) \ +{ \ + textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ + textVar[1] = B_BUFF_MON_NICK_WITH_PREFIX_LOWER; \ + textVar[2] = battler; \ + textVar[3] = partyId; \ + textVar[4] = B_BUFF_EOS; \ +} + #define PREPARE_MON_NICK_BUFFER(textVar, battler, partyId) \ { \ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ @@ -243,7 +258,7 @@ enum void BufferStringBattle(u16 stringID, u32 battler); u32 BattleStringExpandPlaceholdersToDisplayedString(const u8 *src); -u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst); +u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize); void BattlePutTextOnWindow(const u8 *text, u8 windowId); void SetPpNumbersPaletteInMoveSelection(u32 battler); u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp); @@ -302,6 +317,9 @@ extern const u8 gText_Loss[]; extern const u8 gText_Draw[]; extern const u8 gText_StatSharply[]; extern const u8 gText_StatRose[]; +extern const u8 sText_StatFell[]; +extern const u8 sText_drastically[]; +extern const u8 sText_severely[]; extern const u8 gText_DefendersStatRose[]; extern const u8 gText_PkmnGettingPumped[]; extern const u8 gText_PkmnShroudedInMist[]; diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 1cb5657391..563e70fc06 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -716,8 +716,16 @@ #define STRINGID_POKEFLUTECATCHY 714 #define STRINGID_POKEFLUTE 715 #define STRINGID_MONHEARINGFLUTEAWOKE 716 +#define STRINGID_SUNLIGHTISHARSH 717 +#define STRINGID_ITISHAILING 718 +#define STRINGID_ITISSNOWING 719 +#define STRINGID_ISCOVEREDWITHGRASS 720 +#define STRINGID_MISTSWIRLSAROUND 721 +#define STRINGID_ELECTRICCURRENTISRUNNING 722 +#define STRINGID_SEEMSWEIRD 723 +#define STRINGID_WAGGLINGAFINGER 724 -#define BATTLESTRINGS_COUNT 717 +#define BATTLESTRINGS_COUNT 725 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/include/string_util.h b/include/string_util.h index 9e5dfffd57..d4c954bc5e 100644 --- a/include/string_util.h +++ b/include/string_util.h @@ -21,6 +21,7 @@ u8 *StringAppend(u8 *dest, const u8 *src); u8 *StringCopyN(u8 *dest, const u8 *src, u8 n); u8 *StringAppendN(u8 *dest, const u8 *src, u8 n); u16 StringLength(const u8 *str); +u16 StringLineLength(const u8 *str); s32 StringCompare(const u8 *str1, const u8 *str2); s32 StringCompareN(const u8 *str1, const u8 *str2, u32 n); bool8 IsStringLengthAtLeast(const u8 *str, s32 n); diff --git a/include/test/battle.h b/include/test/battle.h index 819d05cbff..ac9711b19d 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -41,7 +41,7 @@ * TURN { MOVE(player, MOVE_STUN_SPORE); } // 3. * } SCENE { * ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - * MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); // 4 + * MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); // 4 * STATUS_ICON(opponent, paralysis: TRUE); // 4. * } * } @@ -95,7 +95,7 @@ * TURN { MOVE(player, MOVE_STUN_SPORE); } // 3. * } SCENE { * NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); // 4. - * MESSAGE("It doesn't affect Foe Oddish…"); // 5. + * MESSAGE("It doesn't affect the opposing Oddish…"); // 5. * } * } * @@ -256,7 +256,7 @@ * } WHEN { * TURN { MOVE(player, MOVE_CELEBRATE); } * } SCENE { - * MESSAGE("Wobbuffet is paralyzed! It can't move!"); + * MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!"); * } * } * All BattleRandom calls involving tag will return the same number, so @@ -413,7 +413,7 @@ * Spaces in pattern match newlines (\n, \l, and \p) in the message. * Often used to check that a battler took its turn but it failed, e.g.: * MESSAGE("Wobbuffet used Dream Eater!"); - * MESSAGE("Foe Wobbuffet wasn't affected!"); + * MESSAGE("The opposing Wobbuffet wasn't affected!"); * * STATUS_ICON(battler, status1 | none: | sleep: | poison: | burn: | freeze: | paralysis:, badPoison:) * Causes the test to fail if the battler's status is not changed to the @@ -432,7 +432,7 @@ * following command succeeds. * // Our Wobbuffet does not Celebrate before the foe's. * NOT MESSAGE("Wobbuffet used Celebrate!"); - * MESSAGE("Foe Wobbuffet used Celebrate!"); + * MESSAGE("The opposing Wobbuffet used Celebrate!"); * WARNING: NOT is an alias of NONE_OF, so it behaves surprisingly when * applied to multiple commands wrapped in braces. * @@ -440,7 +440,7 @@ * Causes the test to fail unless one of the SCENE commands succeeds. * ONE_OF { * MESSAGE("Wobbuffet used Celebrate!"); - * MESSAGE("Wobbuffet is paralyzed! It can't move!"); + * MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!"); * } * * NONE_OF @@ -449,9 +449,9 @@ * // Our Wobbuffet does not move before the foe's. * NONE_OF { * MESSAGE("Wobbuffet used Celebrate!"); - * MESSAGE("Wobbuffet is paralyzed! It can't move!"); + * MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!"); * } - * MESSAGE("Foe Wobbuffet used Celebrate!"); + * MESSAGE("The opposing Wobbuffet used Celebrate!"); * * PLAYER_PARTY and OPPONENT_PARTY * Refer to the party members defined in GIVEN, e.g.: @@ -1017,11 +1017,11 @@ void SendOut(u32 sourceLine, struct BattlePokemon *, u32 partyIndex); MESSAGE(name ", good! Come back!"); \ } -#define SEND_IN_MESSAGE(name) ONE_OF { \ - MESSAGE("Go! " name "!"); \ - MESSAGE("Do it! " name "!"); \ - MESSAGE("Go for it, " name "!"); \ - MESSAGE("Your foe's weak! Get 'em, " name "!"); \ +#define SEND_IN_MESSAGE(name) ONE_OF { \ + MESSAGE("Go! " name "!"); \ + MESSAGE("You're in charge, " name "!"); \ + MESSAGE("Go for it, " name "!"); \ + MESSAGE("Your opponent's weak! Get 'em, " name "!"); \ } enum QueueGroupType diff --git a/include/text.h b/include/text.h index 7be0702528..1791ae401f 100644 --- a/include/text.h +++ b/include/text.h @@ -157,7 +157,9 @@ bool32 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter); bool32 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter); bool32 TextPrinterWait(struct TextPrinter *textPrinter); void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool32 drawArrow, u8 *counter, u8 *yCoordIndex); +s32 GetGlyphWidth(u16 glyphId, bool32 isJapanese, u8 fontId); s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing); +s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum, u32 strSize, bool32 printDebug); u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str); u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y); u8 GetKeypadIconTileOffset(u8 keypadIconId); diff --git a/src/battle_message.c b/src/battle_message.c index b1846594bc..518cd1c218 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -51,397 +51,405 @@ struct BattleWindowText static void ChooseMoveUsedParticle(u8 *textPtr); static void ChooseTypeOfMoveUsedString(u8 *dst); +#if TESTING +EWRAM_DATA u16 sBattlerAbilities[MAX_BATTLERS_COUNT] = {0}; +#else static EWRAM_DATA u16 sBattlerAbilities[MAX_BATTLERS_COUNT] = {0}; +#endif EWRAM_DATA struct BattleMsgData *gBattleMsgDataPtr = NULL; // todo: make some of those names less vague: attacker/target vs pkmn, etc. static const u8 sText_Trainer1LoseText[] = _("{B_TRAINER1_LOSE_TEXT}"); -static const u8 sText_PkmnGainedEXP[] = _("{B_BUFF1} gained{B_BUFF2}\n{B_BUFF3} EXP. Points!\p"); +static const u8 sText_PkmnGainedEXP[] = _("{B_BUFF1} gained{B_BUFF2} {B_BUFF3} Exp. Points!\p"); static const u8 sText_EmptyString4[] = _(""); static const u8 sText_ABoosted[] = _(" a boosted"); -static const u8 sText_PkmnGrewToLv[] = _("{B_BUFF1} grew to\nLV. {B_BUFF2}!{WAIT_SE}\p"); -static const u8 sText_PkmnLearnedMove[] = _("{B_BUFF1} learned\n{B_BUFF2}!{WAIT_SE}\p"); -static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} is trying to\nlearn {B_BUFF2}.\p"); -static const u8 sText_TryToLearnMove2[] = _("But, {B_BUFF1} can't learn\nmore than four moves.\p"); -static const u8 sText_TryToLearnMove3[] = _("Delete a move to make\nroom for {B_BUFF2}?"); -static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}.\p"); -static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Stop learning\n{B_BUFF2}?"); -static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} did not learn\n{B_BUFF2}.\p"); -static const u8 sText_UseNextPkmn[] = _("Use next POKéMON?"); -static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nattack missed!"); -static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!"); -static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!"); -static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes GROUND\nmoves miss with {B_DEF_ABILITY}!"); -static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!"); -static const u8 sText_ItDoesntAffect[] = _("It doesn't affect\n{B_DEF_NAME_WITH_PREFIX}…"); -static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX}\nfainted!\p"); -static const u8 sText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX}\nfainted!\p"); -static const u8 sText_PlayerGotMoney[] = _("{B_PLAYER_NAME} got ¥{B_BUFF1}\nfor winning!\p"); -static const u8 sText_PlayerLostToEnemyTrainer[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\pPlayer lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!{PAUSE_UNTIL_PRESS}"); -static const u8 sText_PlayerPaidPrizeMoney[] = _("{B_PLAYER_NAME} paid ¥{B_BUFF1} as the prize\nmoney…\p… … … …\p{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}"); -static const u8 sText_PlayerWhiteout[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\p"); +static const u8 sText_PkmnGrewToLv[] = _("{B_BUFF1} grew to Lv. {B_BUFF2}!{WAIT_SE}\p"); +static const u8 sText_PkmnLearnedMove[] = _("{B_BUFF1} learned {B_BUFF2}!{WAIT_SE}\p"); +static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} wants to learn the move {B_BUFF2}.\p"); +static const u8 sText_TryToLearnMove2[] = _("However, {B_BUFF1} already knows four moves.\p"); +static const u8 sText_TryToLearnMove3[] = _("Should another move be forgotten and replaced with {B_BUFF2}?"); +static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} forgot {B_BUFF2}…\p"); +static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Do you want to give up on having {B_BUFF1} learn {B_BUFF2}?"); +static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} did not learn {B_BUFF2}.\p"); +static const u8 sText_UseNextPkmn[] = _("Use next Pokémon?"); +static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}'s attack missed!"); //this is not in SV for some reason? +static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX} protected itself!"); +static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided damage with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes Ground-type moves miss with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided the attack!"); +static const u8 sText_ItDoesntAffect[] = _("It doesn't affect {B_DEF_NAME_WITH_PREFIX2}…"); +static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX} fainted!\p"); +static const u8 sText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX} fainted!\p"); +static const u8 sText_PlayerGotMoney[] = _("You got ¥{B_BUFF1} for winning!\p"); +static const u8 sText_PlayerLostToEnemyTrainer[] = _("You have no more Pokémon that can fight!\pYou lost to {B_TRAINER1_CLASS} {B_TRAINER1_NAME}!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerPaidPrizeMoney[] = _("You gave ¥{B_BUFF1} to the winner…\pYou were overwhelmed by your defeat!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerWhiteout[] = _("You have no more Pokémon that can fight!\p"); #if B_WHITEOUT_MONEY >= GEN_4 -static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} panicked and lost ¥{B_BUFF1}…\p… … … …\p{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerWhiteout2[] = _("You panicked and dropped ¥{B_BUFF1}…\pYou were overwhelmed by your defeat!{PAUSE_UNTIL_PRESS}"); #else -static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerWhiteout2[] = _("You were overwhelmed by your defeat!{PAUSE_UNTIL_PRESS}"); #endif -static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p"); -static const u8 sText_CantEscape2[] = _("Can't escape!\p"); +static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents escape with {B_SCR_ACTIVE_ABILITY}!\p"); +static const u8 sText_CantEscape2[] = _("You couldn't get away!\p"); static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can't escape!"); -static const u8 sText_HitXTimes[] = _("Hit {B_BUFF1} time(s)!"); -static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!"); -static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!"); -static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!"); -static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!"); -static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn't affected!"); -static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!"); -static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX} was poisoned by\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}!"); -static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby poison!"); -static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned."); -static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} is badly\npoisoned!"); -static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!"); +static const u8 sText_HitXTimes[] = _("The Pokémon was hit {B_BUFF1} time(s)!"); //SV has dynamic plural here +static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX} fell asleep!"); +static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} made {B_EFF_NAME_WITH_PREFIX2} sleep!"); //not in gen 5+, ability popup +static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is already asleep!"); +static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is already asleep!"); +static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX} wasn't affected!"); //not in gen 5+, ability popup +static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} was poisoned!"); +static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX} was poisoned by {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by its poisoning!"); +static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already poisoned!"); +static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} was badly poisoned!"); +static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its energy drained!"); static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!"); static const u8 sText_PkmnGotFrostbite[] = _("{B_EFF_NAME_WITH_PREFIX} got frostbite!"); -static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nburned {B_EFF_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its burn!"); -static const u8 sText_PkmnHurtByFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its frostbite!"); -static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} already\nhas a burn."); -static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!"); -static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!"); -static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!"); -static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndefrosted!"); -static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted!"); -static const u8 sText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted by {B_CURRENT_MOVE}!"); -static const u8 sText_PkmnFrostbiteHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nfrostbite was healed!"); -static const u8 sText_PkmnFrostbiteHealed2[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nfrostbite was healed!"); -static const u8 sText_PkmnFrostbiteHealedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nhealed its frostbite!"); -static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed!\nIt may be unable to move!"); -static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!"); -static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} is paralyzed!\nIt can't move!"); -static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!"); -static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was\nhealed of paralysis!"); -static const u8 sText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}'s\ndream was eaten!"); -static const u8 sText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\nwon't go higher!"); -static const u8 sText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwon't go lower!"); -static const u8 sText_TeamStoppedWorking[] = _("Your team's {B_BUFF1}\nstopped working!"); -static const u8 sText_FoeStoppedWorking[] = _("The foe's {B_BUFF1}\nstopped working!"); -static const u8 sText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} is\nconfused!"); -static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped\nout of confusion!"); -static const u8 sText_PkmnWasConfused[] = _("{B_EFF_NAME_WITH_PREFIX} became\nconfused!"); -static const u8 sText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready confused!"); -static const u8 sText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX}\nfell in love!"); -static const u8 sText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} is in love\nwith {B_SCR_ACTIVE_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnImmobilizedByLove[] = _("{B_ATK_NAME_WITH_PREFIX} is\nimmobilized by love!"); -static const u8 sText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} was\nblown away!"); -static const u8 sText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!"); -static const u8 sText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} flinched!"); -static const u8 sText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX} regained\nhealth!"); -static const u8 sText_PkmnHPFull[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nHP is full!"); -static const u8 sText_PkmnRaisedSpDef[] = _("{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\nraised SP. DEF!"); -static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\nraised SP. DEF a little!"); -static const u8 sText_PkmnRaisedDef[] = _("{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\nraised DEFENSE!"); -static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); -static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_PREFIX2}'s party is covered\nby a veil!"); -static const u8 sText_PkmnUsedSafeguard[] = _("{B_DEF_NAME_WITH_PREFIX}'s party is protected\nby Safeguard!"); -static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_PREFIX3}'s party is no longer\nprotected by Safeguard!"); -static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!"); -static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nbecame healthy!"); -static const u8 sText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped\nup a whirlwind!"); -static const u8 sText_PkmnTookSunlight[] = _("{B_ATK_NAME_WITH_PREFIX} took\nin sunlight!"); -static const u8 sText_PkmnLoweredHead[] = _("{B_ATK_NAME_WITH_PREFIX} lowered\nits head!"); -static const u8 sText_PkmnIsGlowing[] = _("{B_ATK_NAME_WITH_PREFIX} is glowing!"); -static const u8 sText_PkmnIsCloakedInAHarshLight[] = _("{B_ATK_NAME_WITH_PREFIX} became\ncloaked in a harsh light!"); -static const u8 sText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} flew\nup high!"); -static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} dug a hole!"); -static const u8 sText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!"); +static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} burned {B_EFF_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by its burn!"); +static const u8 sText_PkmnHurtByFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by its frostbite!"); +static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} is already burned!"); +static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was frozen solid!"); +static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} froze {B_EFF_NAME_WITH_PREFIX2} solid!"); //not in gen 5+, ability popup +static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is frozen solid!"); +static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} thawed out!"); +static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} thawed out!"); +static const u8 sText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} melted the ice!"); +static const u8 sText_PkmnFrostbiteHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s frostbite was cured!"); +static const u8 sText_PkmnFrostbiteHealed2[] = _("{B_ATK_NAME_WITH_PREFIX}'s frostbite was cured!"); +static const u8 sText_PkmnFrostbiteHealedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} cured its frostbite!"); +static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed, so it may be unable to move!"); +static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} paralyzed {B_EFF_NAME_WITH_PREFIX2}, so it may be unable to move!"); //not in gen 5+, ability popup +static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} couldn't move because it's paralyzed!"); +static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is already paralyzed!"); +static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was cured of paralysis!"); +static const u8 sText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}'s dream was eaten!"); //not in gen 5+, expansion doesn't use anymore +static const u8 sText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} won't go any higher!"); +static const u8 sText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} won't go any lower!"); +static const u8 sText_TeamStoppedWorking[] = _("Your team's {B_BUFF1} stopped working!"); //unused +static const u8 sText_FoeStoppedWorking[] = _("The foe's {B_BUFF1} stopped working!"); //unused +static const u8 sText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} is confused!"); +static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped out of its confusion!"); +static const u8 sText_PkmnWasConfused[] = _("{B_EFF_NAME_WITH_PREFIX} became confused!"); +static const u8 sText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} is already confused!"); +static const u8 sText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX} fell in love!"); +static const u8 sText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} is in love with {B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnImmobilizedByLove[] = _("{B_ATK_NAME_WITH_PREFIX} is immobilized by love!"); +static const u8 sText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} was blown away!"); //unused +static const u8 sText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX} transformed into the {B_BUFF1} type!"); +static const u8 sText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} flinched and couldn't move!"); +static const u8 sText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX}'s HP was restored."); +static const u8 sText_PkmnHPFull[] = _("{B_DEF_NAME_WITH_PREFIX}'s HP is full!"); +static const u8 sText_PkmnRaisedSpDef[] = _("Light Screen made {B_ATK_TEAM2} team stronger against special moves!"); +static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE} raised SP. DEF a little!"); //expansion doesn't use anymore +static const u8 sText_PkmnRaisedDef[] = _("Reflect made {B_ATK_TEAM2} team stronger against physical moves!"); +static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE} raised DEFENSE a little!"); //expansion doesn't use anymore +static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_TEAM1} team cloaked itself in a mystical veil!"); +static const u8 sText_PkmnUsedSafeguard[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected by Safeguard!"); +static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_TEAM1} team is no longer protected by Safeguard!"); +static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went to sleep!"); //not in gen 5+ +static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and restored its HP!"); +static const u8 sText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped up a whirlwind!"); +static const u8 sText_PkmnTookSunlight[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed light!"); +static const u8 sText_PkmnLoweredHead[] = _("{B_ATK_NAME_WITH_PREFIX} tucked in its head!"); +static const u8 sText_PkmnIsGlowing[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked in a harsh light!"); +static const u8 sText_PkmnIsCloakedInAHarshLight[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked in a harsh light!"); +static const u8 sText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} flew up high!"); +static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} burrowed its way under the ground!"); +static const u8 sText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid underwater!"); static const u8 sText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!"); -static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed by\n{B_ATK_NAME_WITH_PREFIX}'s BIND!"); -static const u8 sText_PkmnInSnapTrap[] = _("{B_DEF_NAME_WITH_PREFIX} got trapped\nby a snap trap!"); -static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nin the vortex!"); -static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nby SAND TOMB!"); -static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was WRAPPED by\n{B_ATK_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} CLAMPED\n{B_DEF_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby {B_BUFF1}!"); -static const u8 sText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom {B_BUFF1}!"); -static const u8 sText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going\nand crashed!"); -const u8 gText_PkmnShroudedInMist[] = _("{B_ATK_PREFIX2} became\nshrouded in MIST!"); -static const u8 sText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby MIST!"); +static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed by {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnInSnapTrap[] = _("{B_DEF_NAME_WITH_PREFIX} got trapped by a snap trap!"); +static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} became trapped in the vortex!"); +static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} became trapped by the quicksand!"); +static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was wrapped by {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} clamped down on {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by {B_BUFF1}!"); +static const u8 sText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed from {B_BUFF1}!"); +static const u8 sText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going and crashed!"); +const u8 gText_PkmnShroudedInMist[] = _("{B_ATK_TEAM1} team became\nshrouded in mist!"); +static const u8 sText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected by the mist!"); const u8 gText_PkmnGettingPumped[] = _("{B_DEF_NAME_WITH_PREFIX} is getting\npumped!"); -static const u8 sText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} is hit\nwith recoil!"); -static const u8 sText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected\nitself!"); -static const u8 sText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the sandstorm!"); -static const u8 sText_PkmnPeltedByHail[] = _("{B_ATK_NAME_WITH_PREFIX} is pelted\nby HAIL!"); -static const u8 sText_PkmnsXWoreOff[] = _("{B_ATK_PREFIX1}'s {B_BUFF1}\nwore off!"); +static const u8 sText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} was damaged by the recoil!"); +static const u8 sText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected itself!"); +static const u8 sText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted by the sandstorm!"); +static const u8 sText_PkmnPeltedByHail[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted by the hail!"); +static const u8 sText_PkmnsXWoreOff[] = _("{B_ATK_TEAM1} team's {B_BUFF1} wore off!"); static const u8 sText_PkmnSeeded[] = _("{B_DEF_NAME_WITH_PREFIX} was seeded!"); -static const u8 sText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} evaded\nthe attack!"); -static const u8 sText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}'s health is\nsapped by LEECH SEED!"); -static const u8 sText_PkmnFastAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} is fast\nasleep."); +static const u8 sText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided the attack!"); +static const u8 sText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}'s health is sapped by Leech Seed!"); +static const u8 sText_PkmnFastAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} is fast asleep."); static const u8 sText_PkmnWokeUp[] = _("{B_ATK_NAME_WITH_PREFIX} woke up!"); -static const u8 sText_PkmnUproarKeptAwake[] = _("But {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s UPROAR\nkept it awake!"); -static const u8 sText_PkmnWokeUpInUproar[] = _("{B_ATK_NAME_WITH_PREFIX} woke up\nin the UPROAR!"); -static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\nan UPROAR!"); -static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan UPROAR!"); +static const u8 sText_PkmnUproarKeptAwake[] = _("But the uproar kept {B_SCR_ACTIVE_NAME_WITH_PREFIX2} awake!"); +static const u8 sText_PkmnWokeUpInUproar[] = _("The uproar woke {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused an uproar!"); +static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making an uproar!"); static const u8 sText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX} calmed down."); -static const u8 sText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX} can't\nsleep in an UPROAR!"); -static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} stockpiled\n{B_BUFF1}!"); -static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can't\nstockpile any more!"); -static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX} can't\nsleep in an UPROAR!"); -static const u8 sText_UproarKeptPkmnAwake[] = _("But the UPROAR kept\n{B_DEF_NAME_WITH_PREFIX} awake!"); -static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!"); -static const u8 sText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!"); -static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nenergy!"); -static const u8 sText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!"); -static const u8 sText_PlayerPickedUpMoney[] = _("{B_PLAYER_NAME} picked up\n¥{B_BUFF1}!\p"); -static const u8 sText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is\nunaffected!"); -static const u8 sText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto {B_BUFF1}!"); -static const u8 sText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} made\na SUBSTITUTE!"); -static const u8 sText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} already\nhas a SUBSTITUTE!"); -static const u8 sText_SubstituteDamaged[] = _("The SUBSTITUTE took damage\nfor {B_DEF_NAME_WITH_PREFIX}!\p"); -static const u8 sText_PkmnSubstituteFaded[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nSUBSTITUTE faded!\p"); -static const u8 sText_PkmnMustRecharge[] = _("{B_ATK_NAME_WITH_PREFIX} must\nrecharge!"); -static const u8 sText_PkmnRageBuilding[] = _("{B_DEF_NAME_WITH_PREFIX}'s RAGE\nis building!"); -static const u8 sText_PkmnMoveWasDisabled[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwas disabled!"); -static const u8 sText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is disabled\nno more!"); -static const u8 sText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} got\nan ENCORE!"); -static const u8 sText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX}'s ENCORE\nended!"); -static const u8 sText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim\nat {B_DEF_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} SKETCHED\n{B_BUFF1}!"); -static const u8 sText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is trying\nto take its foe with it!"); -static const u8 sText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took\n{B_ATK_NAME_WITH_PREFIX} with it!"); -static const u8 sText_PkmnReducedPP[] = _("Reduced {B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} by {B_BUFF2}!"); -static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); -static const u8 sText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can't\nescape now!"); -static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} fell into\na NIGHTMARE!"); -static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a NIGHTMARE!"); -static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and\nlaid a CURSE on {B_DEF_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the CURSE!"); -static const u8 sText_SpikesScattered[] = _("Spikes were scattered all around\n{B_DEF_TEAM2} team!"); -static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\nby spikes!"); -static const u8 sText_PkmnIdentified[] = _("{B_ATK_NAME_WITH_PREFIX} identified\n{B_DEF_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s PERISH count\nfell to {B_BUFF1}!"); -static const u8 sText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced\nitself!"); -static const u8 sText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} ENDURED\nthe hit!"); -static const u8 sText_MagnitudeStrength[] = _("MAGNITUDE {B_BUFF1}!"); -static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand maximized ATTACK!"); -static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}'s stat changes!"); -static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); -static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLEECH SEED!"); -static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nspikes!"); -static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!"); -static const u8 sText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\nan attack!"); -static const u8 sText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!"); -static const u8 sText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose\n{B_CURRENT_MOVE} as its destiny!"); -static const u8 sText_PkmnAttack[] = _("{B_BUFF1}'s attack!"); -static const u8 sText_PkmnCenterAttention[] = _("{B_DEF_NAME_WITH_PREFIX} became the\ncenter of attention!"); -static const u8 sText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began\ncharging power!"); -static const u8 sText_NaturePowerTurnedInto[] = _("NATURE POWER turned into\n{B_CURRENT_MOVE}!"); -static const u8 sText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}'s status\nreturned to normal!"); -static const u8 sText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected\nto torment!"); -static const u8 sText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening\nits focus!"); -static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe Taunt!"); -static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its opponent!"); -static const u8 sText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}."); -static const u8 sText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); -static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); -static const u8 sText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}!"); -static const u8 sText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a WISH!"); -static const u8 sText_PkmnWishCameTrue[] = _("{B_BUFF1}'s WISH\ncame true!"); +static const u8 sText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX2} can't sleep in an uproar!"); +static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} stockpiled {B_BUFF1}!"); +static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can't stockpile any more!"); //I think this was replaced with just "But it failed!" +static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX2} can't sleep in an uproar!"); +static const u8 sText_UproarKeptPkmnAwake[] = _("But the uproar kept {B_DEF_NAME_WITH_PREFIX2} awake!"); +static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake using its {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing energy!"); +static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed its energy!"); +static const u8 sText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became confused due to fatigue!"); +static const u8 sText_PlayerPickedUpMoney[] = _("You picked up ¥{B_BUFF1}!\p"); +static const u8 sText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is unaffected!"); +static const u8 sText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} transformed into {B_BUFF1}!"); +static const u8 sText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} put in a substitute!"); +static const u8 sText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} already has a substitute!"); +static const u8 sText_SubstituteDamaged[] = _("The substitute took damage for {B_DEF_NAME_WITH_PREFIX2}!\p"); +static const u8 sText_PkmnSubstituteFaded[] = _("{B_DEF_NAME_WITH_PREFIX}'s substitute faded!\p"); +static const u8 sText_PkmnMustRecharge[] = _("{B_ATK_NAME_WITH_PREFIX} must recharge!"); +static const u8 sText_PkmnRageBuilding[] = _("{B_DEF_NAME_WITH_PREFIX}'s rage is building!"); +static const u8 sText_PkmnMoveWasDisabled[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled!"); +static const u8 sText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX}'s move is no longer disabled!"); +static const u8 sText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} must do an encore!"); +static const u8 sText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX} ended its encore!"); +static const u8 sText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim at {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} sketched {B_BUFF1}!"); +static const u8 sText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is hoping to take its attacker down with it!"); +static const u8 sText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took its attacker down with it!"); +static const u8 sText_PkmnReducedPP[] = _("{B_DEF_NAME_WITH_PREFIX}'s PP was reduced!"); +static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole {B_DEF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"); +static const u8 sText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can no longer escape!"); +static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} began having a nightmare!"); +static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked in a nightmare!"); +static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and put a curse on {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted by the curse!"); +static const u8 sText_SpikesScattered[] = _("Spikes were scattered on the ground all around {B_DEF_TEAM2} team!"); +static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was hurt by the spikes!"); +static const u8 sText_PkmnIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was identified!"); +static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s perish count fell to {B_BUFF1}!"); +static const u8 sText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced itself!"); +static const u8 sText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} endured the hit!"); +static const u8 sText_MagnitudeStrength[] = _("Magnitude {B_BUFF1}!"); +static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and maximized its Attack!"); +static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied {B_DEF_NAME_WITH_PREFIX2}'s stat changes!"); +static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); //not in gen 5+, generic rapid spin? +static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed Leech Seed!"); //not in gen 5+, generic rapid spin? +static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away Spikes!"); //not in gen 5+, generic rapid spin? +static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from battle!"); +static const u8 sText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw an attack!"); +static const u8 sText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the {B_BUFF1} attack!"); +static const u8 sText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose Doom Desire as its destiny!"); +static const u8 sText_PkmnAttack[] = _("{B_BUFF1}'s attack!"); //not in gen 5+, expansion doesn't use anymore +static const u8 sText_PkmnCenterAttention[] = _("{B_DEF_NAME_WITH_PREFIX} became the center of attention!"); +static const u8 sText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began charging power!"); +static const u8 sText_NaturePowerTurnedInto[] = _("Nature Power turned into {B_CURRENT_MOVE}!"); +static const u8 sText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}'s status returned to normal!"); +static const u8 sText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected to torment!"); +static const u8 sText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening its focus!"); +static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for the taunt!"); +static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to help {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched items with its target!"); +static const u8 sText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained {B_BUFF1}."); +static const u8 sText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtained {B_BUFF2}."); +static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained {B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained {B_BUFF2}."); +static const u8 sText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied {B_DEF_NAME_WITH_PREFIX2}'s Ability!"); +static const u8 sText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a wish!"); //unused +static const u8 sText_PkmnWishCameTrue[] = _("{B_BUFF1}'s wish came true!"); static const u8 sText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} planted its roots!"); -static const u8 sText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nnutrients with its roots!"); -static const u8 sText_PkmnAnchoredItself[] = _("{B_DEF_NAME_WITH_PREFIX} anchored\nitself with its roots!"); -static const u8 sText_PkmnWasMadeDrowsy[] = _("{B_ATK_NAME_WITH_PREFIX} made\n{B_DEF_NAME_WITH_PREFIX} drowsy!"); -static const u8 sText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off\n{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); -static const u8 sText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} swapped abilities\nwith its opponent!"); -static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed the\nopponent's move(s)!"); -static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants the\nopponent to bear a GRUDGE!"); -static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} lost\nall its PP due to the GRUDGE!"); -static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself in {B_CURRENT_MOVE}!"); -static const u8 sText_PkmnMoveBounced[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nwas bounced back by MAGIC COAT!"); -static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target\nto make a move!"); -static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} SNATCHED\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s move!"); -static const u8 sText_ElectricityWeakened[] = _("Electricity's power was\nweakened!"); -static const u8 sText_FireWeakened[] = _("Fire's power was\nweakened!"); -static const u8 sText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found\none {B_LAST_ITEM}!"); -static const u8 sText_SoothingAroma[] = _("A soothing aroma wafted\nthrough the area!"); -static const u8 sText_ItemsCantBeUsedNow[] = _("Items can't be used now.{PAUSE 64}"); -static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}"); -static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used\n{B_LAST_ITEM} to get pumped!"); -static const u8 sText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfocus and couldn't move!"); -static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p"); -static const u8 sText_TheWallShattered[] = _("The wall shattered!"); +static const u8 sText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed nutrients with its roots!"); +static const u8 sText_PkmnAnchoredItself[] = _("{B_DEF_NAME_WITH_PREFIX} anchored itself with its roots!"); +static const u8 sText_PkmnWasMadeDrowsy[] = _("{B_DEF_NAME_WITH_PREFIX} grew drowsy!"); +static const u8 sText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off {B_DEF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"); +static const u8 sText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} swapped Abilities with its target!"); +static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed any moves its target shares with it!"); +static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants its target to bear a grudge!"); +static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} lost all its PP due to the grudge!"); +static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded itself with Magic Coat!"); +static const u8 sText_PkmnMoveBounced[] = _("{B_EFF_NAME_WITH_PREFIX} bounced the {B_CURRENT_MOVE} back!"); +static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target to make a move!"); +static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} snatched {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s move!"); +static const u8 sText_ElectricityWeakened[] = _("Electricity's power was weakened!"); +static const u8 sText_FireWeakened[] = _("Fire's power was weakened!"); +static const u8 sText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found one {B_LAST_ITEM}!"); +static const u8 sText_SoothingAroma[] = _("A soothing aroma wafted through the area!"); +static const u8 sText_ItemsCantBeUsedNow[] = _("Items can't be used now.{PAUSE 64}"); //not in gen 5+, i think +static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX2}, {B_LAST_ITEM} {B_BUFF1}"); //not in gen 5+, expansion doesn't use anymore +static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used the {B_LAST_ITEM} to get pumped!"); +static const u8 sText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its focus and couldn't move!"); +static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was dragged out!\p"); +static const u8 sText_TheWallShattered[] = _("The wall shattered!"); //not in gen5+, uses "your teams light screen wore off!" etc instead static const u8 sText_ButNoEffect[] = _("But it had no effect!"); -static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ATK_NAME_WITH_PREFIX} has no\nmoves left!\p"); -static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nis disabled!\p"); -static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ATK_NAME_WITH_PREFIX} can't use the same\nmove in a row due to the Torment!\p"); -static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ATK_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} after the Taunt!\p"); -static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ATK_NAME_WITH_PREFIX} can't use the\nsealed {B_CURRENT_MOVE}!\p"); -static const u8 sText_PkmnCantUseMoveThroatChop[] = _("{B_ATK_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} due to Throat Chop!\p"); -static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it rain!"); -static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its SPEED!"); -static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!"); -static const u8 sText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents {B_ATK_NAME_WITH_PREFIX}\lfrom using {B_CURRENT_MOVE}!"); -static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!"); -static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!"); -static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade it the {B_BUFF1} type!"); -static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents paralysis!"); -static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents romance!"); -static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents poisoning!"); -static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents confusion!"); -static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nraised its FIRE power!"); -static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!"); -static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}'s attack!"); -static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!"); -static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by\n{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); -static const u8 sText_PkmnTraced[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED\n{B_BUFF1}'s {B_BUFF2}!"); -static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents burns!"); -static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!"); -static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!"); -static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nrestored its HP a little!"); -static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nwhipped up a sandstorm!"); -static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nintensified the sun's rays!"); -static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_BUFF1} loss!"); -static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!"); -static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); -static const u8 sText_ItSuckedLiquidOoze[] = _("It sucked up the\nliquid ooze!"); +static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ATK_NAME_WITH_PREFIX} has no moves left that it can use!\p"); +static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} is disabled!\p"); +static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ATK_NAME_WITH_PREFIX} can't use the same move twice in a row due to the torment!\p"); +static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ATK_NAME_WITH_PREFIX} can't use {B_CURRENT_MOVE} after the taunt!\p"); +static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ATK_NAME_WITH_PREFIX} can't use its sealed {B_CURRENT_MOVE}!\p"); +static const u8 sText_PkmnCantUseMoveThroatChop[] = _("The effects of Throat Chop prevent {B_ATK_NAME_WITH_PREFIX2} from using certain moves!\p"); +static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} made it rain!"); //not in gen 5+, ability popup +static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} raised its Speed!"); //not in gen 5+, ability popup +static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected by {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents {B_ATK_NAME_WITH_PREFIX2} from using {B_CURRENT_MOVE}!"); //I don't see this in SV text +static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP using its {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} made {B_CURRENT_MOVE} useless!"); //not in gen 5+, ability popup +static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} made it the {B_BUFF1} type!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents paralysis!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents romance!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents poisoning!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents confusion!"); //not in gen 5+, ability popup +static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} raised the power of Fire-type moves!"); //not in gen 5+, ability popup +static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors itself with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cuts {B_DEF_NAME_WITH_PREFIX2}'s attack!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents stat loss!"); //not in gen 5+, ability popup +static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); +static const u8 sText_PkmnTraced[] = _("It traced {B_BUFF1}'s {B_BUFF2}!"); +static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY} prevents burns!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} blocks {B_CURRENT_MOVE}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} blocks {B_CURRENT_MOVE}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} restored its HP a little!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} whipped up a sandstorm!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} intensified the sun's rays!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents {B_BUFF1} loss!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} infatuated {B_ATK_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} made {B_CURRENT_MOVE} ineffective!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cured its {B_BUFF1} problem!"); //not in gen 5+, ability popup +static const u8 sText_ItSuckedLiquidOoze[] = _("{B_ATK_NAME_WITH_PREFIX} sucked up the liquid ooze!"); static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!"); -static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ntook the attack!"); -const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1}'s {B_LAST_ABILITY}\nprevents switching!\p"); -static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\l{B_BUFF1} from working!"); -static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!"); -static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents flinching!"); -static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!"); -static const u8 sText_PkmnsAbilityPreventsAbility[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!"); -static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); -static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} took the attack!"); //In gen 5+ but without naming the ability +const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1} is preventing switching out\nwith its {B_LAST_ABILITY} Ability!\p"); +static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevented {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s {B_BUFF1} from working!"); //unused +static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} made it ineffective!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY} prevents flinching!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} prevents {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY} from working!"); +static const u8 sText_PkmnsAbilityPreventsAbility[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY} from working!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cured its {B_BUFF1} problem!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} had no effect on {B_EFF_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup const u8 gText_StatSharply[] = _("sharply "); const u8 gText_StatRose[] = _("rose!"); static const u8 sText_StatHarshly[] = _("harshly "); -static const u8 sText_StatFell[] = _("fell!"); -static const u8 sText_AttackersStatRose[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}"); -const u8 gText_DefendersStatRose[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}"); -static const u8 sText_UsingItemTheStatOfPkmnRose[] = _("Using {B_LAST_ITEM}, the {B_BUFF1}\nof {B_SCR_ACTIVE_NAME_WITH_PREFIX} {B_BUFF2}"); -static const u8 sText_AttackersStatFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}"); -static const u8 sText_DefendersStatFell[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}"); -static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}'s stats won't\ngo any higher!"); -static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}'s stats won't\ngo any lower!"); +const u8 sText_StatFell[] = _("fell!"); +static const u8 sText_AttackersStatRose[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}"); +const u8 gText_DefendersStatRose[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} {B_BUFF2}"); +static const u8 sText_UsingItemTheStatOfPkmnRose[] = _("Using {B_LAST_ITEM}, the {B_BUFF1} of {B_SCR_ACTIVE_NAME_WITH_PREFIX2} {B_BUFF2}"); //todo: update this, will require code changes +static const u8 sText_AttackersStatFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}"); +static const u8 sText_DefendersStatFell[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}"); +static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}'s stats won't go any higher!"); +static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}'s stats won't go any lower!"); static const u8 sText_CriticalHit[] = _("A critical hit!"); static const u8 sText_OneHitKO[] = _("It's a one-hit KO!"); -static const u8 sText_123Poof[] = _("{PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE SE_BALL_BOUNCE_1}Poof!\p"); +static const u8 sText_123Poof[] = _("One…{PAUSE 10}two…{PAUSE 10}and…{PAUSE 10}{PAUSE 20}{PLAY_SE SE_BALL_BOUNCE_1}ta-da!\p"); static const u8 sText_AndEllipsis[] = _("And…\p"); -static const u8 sText_HMMovesCantBeForgotten[] = _("HM moves can't be\nforgotten now.\p"); +static const u8 sText_HMMovesCantBeForgotten[] = _("HM moves can't be forgotten now.\p"); static const u8 sText_NotVeryEffective[] = _("It's not very effective…"); static const u8 sText_SuperEffective[] = _("It's super effective!"); -static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_FLEE}Got away safely!\p"); -static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p"); -static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p"); -static const u8 sText_WildPkmnFled[] = _("{PLAY_SE SE_FLEE}Wild {B_BUFF1} fled!"); -static const u8 sText_PlayerDefeatedLinkTrainer[] = _("Player defeated\n{B_LINK_OPPONENT1_NAME}!"); -static const u8 sText_TwoLinkTrainersDefeated[] = _("Player beat {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); -static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("Player lost against\n{B_LINK_OPPONENT1_NAME}!"); -static const u8 sText_PlayerLostToTwo[] = _("Player lost to {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); -static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME}!"); -static const u8 sText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); -static const u8 sText_WildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} fled!"); -static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} and\n{B_LINK_OPPONENT2_NAME} fled!"); -static const u8 sText_NoRunningFromTrainers[] = _("No! There's no running\nfrom a TRAINER battle!\p"); -static const u8 sText_CantEscape[] = _("Can't escape!\p"); -static const u8 sText_DontLeaveBirch[] = _("PROF. BIRCH: Don't leave me like this!\p"); +static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_FLEE}You got away safely!\p"); +static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled using its {B_LAST_ITEM}!\p"); +static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled using {B_ATK_ABILITY}!\p"); //not in gen 5+ +static const u8 sText_WildPkmnFled[] = _("{PLAY_SE SE_FLEE}The wild {B_BUFF1} fled!"); +static const u8 sText_PlayerDefeatedLinkTrainer[] = _("You defeated {B_LINK_OPPONENT1_NAME}!"); +static const u8 sText_TwoLinkTrainersDefeated[] = _("You defeated {B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); +static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("You lost against {B_LINK_OPPONENT1_NAME}!"); +static const u8 sText_PlayerLostToTwo[] = _("You lost to {B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); +static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("You battled to a draw against {B_LINK_OPPONENT1_NAME}!"); +static const u8 sText_PlayerBattledToDrawVsTwo[] = _("You battled to a draw against {B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); +static const u8 sText_WildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} fled!"); //not in gen 5+, replaced with match was forfeited text +static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME} fled!"); //not in gen 5+, replaced with match was forfeited text +static const u8 sText_NoRunningFromTrainers[] = _("No! There's no running from a Trainer battle!\p"); +static const u8 sText_CantEscape[] = _("You can't escape!\p"); +static const u8 sText_DontLeaveBirch[] = _("PROF. BIRCH: Don't leave me like this!\p"); //no decapitalize until it is everywhere static const u8 sText_ButNothingHappened[] = _("But nothing happened!"); static const u8 sText_ButItFailed[] = _("But it failed!"); -static const u8 sText_ItHurtConfusion[] = _("It hurt itself in its\nconfusion!"); -static const u8 sText_MirrorMoveFailed[] = _("The Mirror Move failed!"); +static const u8 sText_ItHurtConfusion[] = _("It hurt itself in its confusion!"); +static const u8 sText_MirrorMoveFailed[] = _("The Mirror Move failed!"); //not in gen 5+, uses "but it failed" static const u8 sText_StartedToRain[] = _("It started to rain!"); static const u8 sText_DownpourStarted[] = _("A downpour started!"); // corresponds to DownpourText in pokegold and pokecrystal and is used by Rain Dance in GSC -static const u8 sText_RainContinues[] = _("Rain continues to fall."); +static const u8 sText_RainContinues[] = _("Rain continues to fall."); //not in gen 5+ static const u8 sText_DownpourContinues[] = _("The downpour continues."); // unused static const u8 sText_RainStopped[] = _("The rain stopped."); -static const u8 sText_SandstormBrewed[] = _("A sandstorm brewed!"); -static const u8 sText_SandstormRages[] = _("The sandstorm rages."); +static const u8 sText_SandstormBrewed[] = _("A sandstorm kicked up!"); +static const u8 sText_SandstormRages[] = _("The sandstorm is raging."); static const u8 sText_SandstormSubsided[] = _("The sandstorm subsided."); -static const u8 sText_SunlightGotBright[] = _("The sunlight got bright!"); -static const u8 sText_SunlightStrong[] = _("The sunlight is strong."); +static const u8 sText_SunlightGotBright[] = _("The sunlight turned harsh!"); +static const u8 sText_SunlightStrong[] = _("The sunlight is strong."); //not in gen 5+ static const u8 sText_SunlightFaded[] = _("The sunlight faded."); static const u8 sText_StartedHail[] = _("It started to hail!"); -static const u8 sText_HailContinues[] = _("Hail continues to fall."); +static const u8 sText_HailContinues[] = _("The hail is crashing down."); static const u8 sText_HailStopped[] = _("The hail stopped."); static const u8 sText_StartedSnow[] = _("It started to snow!"); -static const u8 sText_SnowContinues[] = _("Snow continues to fall."); +static const u8 sText_SnowContinues[] = _("Snow continues to fall."); //not in gen 5+ (lol) static const u8 sText_SnowStopped[] = _("The snow stopped."); static const u8 sText_FogCreptUp[] = _("Fog crept up as thick as soup!"); static const u8 sText_FogIsDeep[] = _("The fog is deep…"); static const u8 sText_FogLifted[] = _("The fog lifted."); -static const u8 sText_FailedToSpitUp[] = _("But it failed to spit up\na thing!"); -static const u8 sText_FailedToSwallow[] = _("But it failed to swallow\na thing!"); -static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a\nHEAT WAVE!"); -static const u8 sText_StatChangesGone[] = _("All stat changes were\neliminated!"); -static const u8 sText_CoinsScattered[] = _("Coins scattered everywhere!"); -static const u8 sText_TooWeakForSubstitute[] = _("It was too weak to make\na SUBSTITUTE!"); -static const u8 sText_SharedPain[] = _("The battlers shared\ntheir pain!"); +static const u8 sText_FailedToSpitUp[] = _("But it failed to spit up a thing!"); //not in gen 5+, uses "but it failed" +static const u8 sText_FailedToSwallow[] = _("But it failed to swallow a thing!"); //not in gen 5+, uses "but it failed" +static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a Heat Wave!"); //unused +static const u8 sText_StatChangesGone[] = _("All stat changes were eliminated!"); +static const u8 sText_CoinsScattered[] = _("Coins were scattered everywhere!"); +static const u8 sText_TooWeakForSubstitute[] = _("But it does not have enough HP left to make a substitute!"); +static const u8 sText_SharedPain[] = _("The battlers shared their pain!"); static const u8 sText_BellChimed[] = _("A bell chimed!"); -static const u8 sText_FaintInThree[] = _("All affected POKéMON will\nfaint in three turns!"); -static const u8 sText_NoPPLeft[] = _("There's no PP left for\nthis move!\p"); -static const u8 sText_ButNoPPLeft[] = _("But there was no PP left\nfor the move!"); -static const u8 sText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders while asleep!"); -static const u8 sText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders!"); +static const u8 sText_FaintInThree[] = _("All Pokémon that heard the song will faint in three turns!"); +static const u8 sText_NoPPLeft[] = _("There's no PP left for this move!\p"); //not in gen 5+ +static const u8 sText_ButNoPPLeft[] = _("But there was no PP left for the move!"); +static const u8 sText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored orders and kept sleeping!"); +static const u8 sText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored orders!"); static const u8 sText_PkmnBeganToNap[] = _("{B_ATK_NAME_WITH_PREFIX} began to nap!"); -static const u8 sText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} is\nloafing around!"); -static const u8 sText_PkmnWontObey[] = _("{B_ATK_NAME_WITH_PREFIX} won't\nobey!"); +static const u8 sText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} is loafing around!"); +static const u8 sText_PkmnWontObey[] = _("{B_ATK_NAME_WITH_PREFIX} won't obey!"); static const u8 sText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} turned away!"); -static const u8 sText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} pretended\nnot to notice!"); -static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to use {B_BUFF2}.\pWill {B_PLAYER_NAME} change\nPOKéMON?"); -static const u8 sText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!"); -static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("Player defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); -static const u8 sText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to\n{B_OPPONENT_MON1_NAME}!"); -static const u8 sText_CantGetCloser[] = _("{B_PLAYER_NAME} can't get any closer!"); -static const u8 sText_PkmnWatchingCarefully[] = _("{B_OPPONENT_MON1_NAME} is watching\ncarefully!"); -static const u8 sText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious about\nthe {B_BUFF1}!"); -static const u8 sText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by\nthe {B_BUFF1}!"); -static const u8 sText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored\nthe {B_BUFF1}!"); -static const u8 sText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK}\nat the {B_OPPONENT_MON1_NAME}!"); -static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE SE_DING_DONG}ANNOUNCER: You're out of\nSAFARI BALLS! Game over!\p"); +static const u8 sText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} pretended not to notice!"); +static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is about to send out {B_BUFF2}.\pWill you switch your Pokémon?"); +static const u8 sText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned {B_BUFF1}!"); +static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("You defeated {B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); +static const u8 sText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to {B_OPPONENT_MON1_NAME}!"); //safari +static const u8 sText_CantGetCloser[] = _("{B_PLAYER_NAME} can't get any closer!"); //safari +static const u8 sText_PkmnWatchingCarefully[] = _("{B_OPPONENT_MON1_NAME} is watching carefully!"); //safari +static const u8 sText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious about the {B_BUFF1}!"); //safari +static const u8 sText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by the {B_BUFF1}!"); //safari +static const u8 sText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored the {B_BUFF1}!"); //safari +static const u8 sText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK} at the {B_OPPONENT_MON1_NAME}!"); //safari +static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE SE_DING_DONG}ANNOUNCER: You're out of Safari Balls! Game over!\p"); //safari static const u8 sText_OpponentMon1Appeared[] = _("{B_OPPONENT_MON1_NAME} appeared!\p"); -static const u8 sText_WildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); -static const u8 sText_LegendaryPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); -static const u8 sText_WildPkmnAppearedPause[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}"); -static const u8 sText_TwoWildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p"); -static const u8 sText_Trainer1WantsToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwould like to battle!\p"); -static const u8 sText_LinkTrainerWantsToBattle[] = _("{B_LINK_OPPONENT1_NAME}\nwants to battle!"); -static const u8 sText_TwoLinkTrainersWantToBattle[] = _("{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}\nwant to battle!"); -static const u8 sText_Trainer1SentOutPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!"); -static const u8 sText_Trainer1SentOutTwoPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); -static const u8 sText_Trainer1SentOutPkmn2[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_BUFF1}!"); -static const u8 sText_LinkTrainerSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out\n{B_OPPONENT_MON1_NAME}!"); -static const u8 sText_LinkTrainerSentOutTwoPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out\n{B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); -static const u8 sText_TwoLinkTrainersSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out {B_LINK_OPPONENT_MON1_NAME}!\n{B_LINK_OPPONENT2_NAME} sent out {B_LINK_OPPONENT_MON2_NAME}!"); -static const u8 sText_LinkTrainerSentOutPkmn2[] = _("{B_LINK_OPPONENT1_NAME} sent out\n{B_BUFF1}!"); -static const u8 sText_LinkTrainerMultiSentOutPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} sent out\n{B_BUFF1}!"); +static const u8 sText_WildPkmnAppeared[] = _("You encountered a wild {B_OPPONENT_MON1_NAME}!\p"); +static const u8 sText_LegendaryPkmnAppeared[] = _("You encountered a wild {B_OPPONENT_MON1_NAME}!\p"); +static const u8 sText_WildPkmnAppearedPause[] = _("You encountered a wild {B_OPPONENT_MON1_NAME}!{PAUSE 127}"); +static const u8 sText_TwoWildPkmnAppeared[] = _("Oh! A wild {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME} appeared!\p"); +static const u8 sText_Trainer1WantsToBattle[] = _("You are challenged by {B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); +static const u8 sText_LinkTrainerWantsToBattle[] = _("You are challenged by {B_LINK_OPPONENT1_NAME}!"); +static const u8 sText_TwoLinkTrainersWantToBattle[] = _("You are challenged by {B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); +static const u8 sText_Trainer1SentOutPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent out {B_OPPONENT_MON1_NAME}!"); +static const u8 sText_Trainer1SentOutTwoPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent out {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); +static const u8 sText_Trainer1SentOutPkmn2[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent out {B_BUFF1}!"); +static const u8 sText_LinkTrainerSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out {B_OPPONENT_MON1_NAME}!"); +static const u8 sText_LinkTrainerSentOutTwoPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); +static const u8 sText_TwoLinkTrainersSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out {B_LINK_OPPONENT_MON1_NAME}! {B_LINK_OPPONENT2_NAME} sent out {B_LINK_OPPONENT_MON2_NAME}!"); +static const u8 sText_LinkTrainerSentOutPkmn2[] = _("{B_LINK_OPPONENT1_NAME} sent out {B_BUFF1}!"); +static const u8 sText_LinkTrainerMultiSentOutPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} sent out {B_BUFF1}!"); static const u8 sText_GoPkmn[] = _("Go! {B_PLAYER_MON1_NAME}!"); -static const u8 sText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and\n{B_PLAYER_MON2_NAME}!"); +static const u8 sText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and {B_PLAYER_MON2_NAME}!"); static const u8 sText_GoPkmn2[] = _("Go! {B_BUFF1}!"); -static const u8 sText_DoItPkmn[] = _("Do it! {B_BUFF1}!"); +static const u8 sText_DoItPkmn[] = _("You're in charge, {B_BUFF1}!"); static const u8 sText_GoForItPkmn[] = _("Go for it, {B_BUFF1}!"); -static const u8 sText_YourFoesWeakGetEmPkmn[] = _("Your foe's weak!\nGet 'em, {B_BUFF1}!"); -static const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_LINK_PARTNER_NAME} sent out {B_LINK_PLAYER_MON2_NAME}!\nGo! {B_LINK_PLAYER_MON1_NAME}!"); -static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that's enough!\nCome back!"); +static const u8 sText_JustALittleMorePkmn[] = _("Just a little more! Hang in there, {B_BUFF1}!"); //currently unused, will require code changes +static const u8 sText_YourFoesWeakGetEmPkmn[] = _("Your opponent's weak! Get 'em, {B_BUFF1}!"); +static const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_LINK_PARTNER_NAME} sent out {B_LINK_PLAYER_MON2_NAME}! Go! {B_LINK_PLAYER_MON1_NAME}!"); +static const u8 sText_PkmnSwitchOut[] = _("{B_BUFF1}, switch out! Come back!"); //currently unused, I believe its used for when you switch on a pokemon in shift mode +static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that's enough! Come back!"); static const u8 sText_PkmnComeBack[] = _("{B_BUFF1}, come back!"); -static const u8 sText_PkmnOkComeBack[] = _("{B_BUFF1}, OK!\nCome back!"); -static const u8 sText_PkmnGoodComeBack[] = _("{B_BUFF1}, good!\nCome back!"); -static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!"); -static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_LINK_OPPONENT1_NAME} withdrew\n{B_BUFF1}!"); -static const u8 sText_LinkTrainer2WithdrewPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} withdrew\n{B_BUFF1}!"); -static const u8 sText_WildPkmnPrefix[] = _("Wild "); -static const u8 sText_FoePkmnPrefix[] = _("Foe "); +static const u8 sText_PkmnOkComeBack[] = _("OK, {B_BUFF1}! Come back!"); +static const u8 sText_PkmnGoodComeBack[] = _("Good job, {B_BUFF1}! Come back!"); +static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} withdrew {B_BUFF1}!"); +static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_LINK_OPPONENT1_NAME} withdrew {B_BUFF1}!"); +static const u8 sText_LinkTrainer2WithdrewPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} withdrew {B_BUFF1}!"); +static const u8 sText_WildPkmnPrefix[] = _("The wild "); +static const u8 sText_FoePkmnPrefix[] = _("The opposing "); +static const u8 sText_WildPkmnPrefixLower[] = _("the wild "); +static const u8 sText_FoePkmnPrefixLower[] = _("the opposing "); static const u8 sText_EmptyString8[] = _(""); -static const u8 sText_FoePkmnPrefix2[] = _("Foe"); +static const u8 sText_FoePkmnPrefix2[] = _("Opposing"); static const u8 sText_AllyPkmnPrefix[] = _("Ally"); -static const u8 sText_FoePkmnPrefix3[] = _("Foe"); +static const u8 sText_FoePkmnPrefix3[] = _("Opposing"); static const u8 sText_AllyPkmnPrefix2[] = _("Ally"); -static const u8 sText_FoePkmnPrefix4[] = _("Foe"); +static const u8 sText_FoePkmnPrefix4[] = _("Opposing"); static const u8 sText_AllyPkmnPrefix3[] = _("Ally"); -static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF3}!"); +static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used {B_BUFF3}!"); static const u8 sText_ExclamationMark[] = _("!"); static const u8 sText_ExclamationMark2[] = _("!"); static const u8 sText_ExclamationMark3[] = _("!"); @@ -478,49 +486,56 @@ const u8 *const gPokeblockWasTooXStringTable[FLAVOR_COUNT] = [FLAVOR_SOUR] = sText_PokeblockWasTooSour }; -static const u8 sText_PlayerUsedItem[] = _("You used\n{B_LAST_ITEM}!"); -static const u8 sText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!"); -static const u8 sText_Trainer1UsedItem[] = _("{B_ATK_TRAINER_CLASS} {B_ATK_TRAINER_NAME}\nused {B_LAST_ITEM}!"); -static const u8 sText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!"); +static const u8 sText_PlayerUsedItem[] = _("You used {B_LAST_ITEM}!"); +static const u8 sText_WallyUsedItem[] = _("WALLY used {B_LAST_ITEM}!"); //no decapitalize until it is everywhere +static const u8 sText_Trainer1UsedItem[] = _("{B_ATK_TRAINER_CLASS} {B_ATK_TRAINER_NAME} used {B_LAST_ITEM}!"); +static const u8 sText_TrainerBlockedBall[] = _("The Trainer blocked your Poké Ball!"); static const u8 sText_DontBeAThief[] = _("Don't be a thief!"); -static const u8 sText_ItDodgedBall[] = _("It dodged the thrown BALL!\nThis POKéMON can't be caught!"); -static const u8 sText_YouMissedPkmn[] = _("You missed the POKéMON!"); -static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!"); -static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!"); -static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!"); -static const u8 sText_ShootSoClose[] = _("Shoot!\nIt was so close, too!"); -static const u8 sText_GotchaPkmnCaughtPlayer[] = _("Gotcha!\n{B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p"); -static const u8 sText_GotchaPkmnCaughtWally[] = _("Gotcha!\n{B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}"); -static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_DEF_NAME}?"); -static const u8 sText_PkmnSentToPC[] = _("{B_DEF_NAME} was sent to\n{B_PC_CREATOR_NAME} PC."); +static const u8 sText_ItDodgedBall[] = _("It dodged your thrown Poké Ball! This Pokémon can't be caught!"); +static const u8 sText_YouMissedPkmn[] = _("You missed the Pokémon!"); +static const u8 sText_PkmnBrokeFree[] = _("Oh no! The Pokémon broke free!"); +static const u8 sText_ItAppearedCaught[] = _("Aww! It appeared to be caught!"); +static const u8 sText_AarghAlmostHadIt[] = _("Aargh! Almost had it!"); +static const u8 sText_ShootSoClose[] = _("Gah! It was so close, too!"); +static const u8 sText_GotchaPkmnCaughtPlayer[] = _("Gotcha! {B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p"); +static const u8 sText_GotchaPkmnCaughtWally[] = _("Gotcha! {B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}"); +static const u8 sText_GiveNicknameCaptured[] = _("Would you like to give {B_DEF_NAME} a nickname?"); +static const u8 sText_PkmnSentToPC[] = _("{B_DEF_NAME} has been sent to {B_PC_CREATOR_NAME} PC!"); //Still used lanette's pc since terminology is different static const u8 sText_Someones[] = _("someone's"); -static const u8 sText_Lanettes[] = _("LANETTE's"); -static const u8 sText_PkmnDataAddedToDex[] = _("{B_DEF_NAME}'s data was\nadded to the POKéDEX.\p"); -static const u8 sText_ItIsRaining[] = _("It is raining."); -static const u8 sText_SandstormIsRaging[] = _("A sandstorm is raging."); -static const u8 sText_BoxIsFull[] = _("The BOX is full!\nYou can't catch any more!\p"); -static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY"); -static const u8 sText_BerrySuffix[] = _(" BERRY"); -static const u8 sText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured paralysis!"); -static const u8 sText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured poison!"); -static const u8 sText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nhealed its burn!"); -static const u8 sText_PkmnsItemHealedFrostbite[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nhealed its frostbite!"); -static const u8 sText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ndefrosted it!"); -static const u8 sText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nwoke it from its sleep!"); -static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nsnapped it out of confusion!"); -static const u8 sText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its {B_BUFF1} problem!"); -static const u8 sText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nnormalized its status!"); -static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nrestored health!"); -static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nrestored {B_BUFF1}'s PP!"); -static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nrestored its status!"); -static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nrestored its HP a little!"); -static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} allows the\nuse of only {B_CURRENT_MOVE}!\p"); -static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!"); +static const u8 sText_Lanettes[] = _("LANETTE's"); //no decapitalize until it is everywhere +static const u8 sText_PkmnDataAddedToDex[] = _("{B_DEF_NAME}'s data has been added to the Pokédex!\p"); +static const u8 sText_ItIsRaining[] = _("It's raining!"); +static const u8 sText_SandstormIsRaging[] = _("The sandstorm is raging!"); +static const u8 sText_SunlightIsHarsh[] = _("The sunlight is harsh!"); +static const u8 sText_ItIsHailing[] = _("It's hailing!"); +static const u8 sText_ItIsSnowing[] = _("It's snowing!"); +static const u8 sText_IsCoveredWithGrass[] = _("The battlefield is covered with grass!"); +static const u8 sText_MistSwirlsAround[] = _("Mist swirls around the battlefield!"); +static const u8 sText_ElectricCurrentIsRunning[] = _("An electric current is running across the battlefield!"); +static const u8 sText_SeemsWeird[] = _("The battlefield seems weird!"); +static const u8 sText_BoxIsFull[] = _("The Box is full! You can't catch any more!\p"); +static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY"); //no decapitalize until it is everywhere +static const u8 sText_BerrySuffix[] = _(" BERRY"); //no decapitalize until it is everywhere +static const u8 sText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its paralysis!"); +static const u8 sText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its poison!"); +static const u8 sText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its burn!"); +static const u8 sText_PkmnsItemHealedFrostbite[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its frostbite!"); +static const u8 sText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} defrosted it!"); +static const u8 sText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} woke it up!"); +static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} snapped it out of its confusion!"); +static const u8 sText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its {B_BUFF1} problem!"); +static const u8 sText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} normalized its status!"); +static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its health using its {B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored PP to its move {B_BUFF1} using its {B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned its stats to normal using its {B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored a little HP using its {B_LAST_ITEM}!"); +static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} only allows the use of {B_CURRENT_MOVE}!\p"); +static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on using its {B_LAST_ITEM}!"); const u8 gText_EmptyString3[] = _(""); static const u8 sText_PlayedFluteCatchyTune[] = _("{B_PLAYER_NAME} played the {B_LAST_ITEM}.\pNow, that's a catchy tune!"); -static const u8 sText_PlayedThe[] = _("{B_PLAYER_NAME} played the\n{B_LAST_ITEM}."); -static const u8 sText_PkmnHearingFluteAwoke[] = _("The POKéMON hearing the FLUTE\nawoke!"); -static const u8 sText_YouThrowABallNowRight[] = _("You throw a BALL now, right?\nI… I'll do my best!"); +static const u8 sText_PlayedThe[] = _("{B_PLAYER_NAME} played the {B_LAST_ITEM}."); +static const u8 sText_PkmnHearingFluteAwoke[] = _("The Pokémon hearing the flute awoke!"); +static const u8 sText_YouThrowABallNowRight[] = _("You throw a Ball now, right? I… I'll do my best!"); // early declaration of strings static const u8 sText_PkmnIncapableOfPower[]; @@ -539,320 +554,321 @@ static const u8 sText_TwoInGameTrainersDefeated[]; static const u8 sText_Trainer2LoseText[]; // New battle strings. -static const u8 sText_EnduredViaSturdy[] = _("{B_DEF_NAME_WITH_PREFIX} endured\nthe hit using {B_DEF_ABILITY}!"); -static const u8 sText_PowerHerbActivation[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged\ndue to its {B_LAST_ITEM}!"); -static const u8 sText_HurtByItem[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its {B_LAST_ITEM}!"); -static const u8 sText_BadlyPoisonedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was badly\npoisoned by the {B_LAST_ITEM}!"); -static const u8 sText_BurnedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was burned\nby the {B_LAST_ITEM}!"); +static const u8 sText_EnduredViaSturdy[] = _("{B_DEF_NAME_WITH_PREFIX} endured the hit using {B_DEF_ABILITY}!"); +static const u8 sText_PowerHerbActivation[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged due to its {B_LAST_ITEM}!"); +static const u8 sText_HurtByItem[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by the {B_LAST_ITEM}!"); +static const u8 sText_BadlyPoisonedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was badly poisoned by the {B_LAST_ITEM}!"); +static const u8 sText_BurnedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was burned by the {B_LAST_ITEM}!"); static const u8 sText_TargetAbilityActivates[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} activates!"); static const u8 sText_GravityIntensified[] = _("Gravity intensified!"); -static const u8 sText_TargetIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was\nidentified!"); +static const u8 sText_TargetIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was identified!"); static const u8 sText_TargetWokeUp[] = _("{B_DEF_NAME_WITH_PREFIX} woke up!"); -static const u8 sText_PkmnStoleAndAteItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole and\nate {B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); -static const u8 sText_TailWindBlew[] = _("The tailwind blew from\nbehind {B_ATK_TEAM2} team!"); -static const u8 sText_PkmnWentBack[] = _("{B_ATK_NAME_WITH_PREFIX} went back\nto {B_ATK_TRAINER_NAME}!"); -static const u8 sText_PkmnCantUseItemsAnymore[] = _("{B_DEF_NAME_WITH_PREFIX} can't use\nitems anymore!"); -static const u8 sText_PkmnFlung[] = _("{B_ATK_NAME_WITH_PREFIX} flung its\n{B_LAST_ITEM}!"); -static const u8 sText_PkmnPreventedFromHealing[] = _("{B_DEF_NAME_WITH_PREFIX} was prevented\nfrom healing!"); -static const u8 sText_PkmnSwitchedAtkAndDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched its\nAttack and Defense!"); -static const u8 sText_PkmnsAbilitySuppressed[] = _("{B_DEF_NAME_WITH_PREFIX}'s ability\nwas suppressed!"); -static const u8 sText_ShieldedFromCriticalHits[] = _("The {B_CURRENT_MOVE} shielded {B_ATK_TEAM2}\nteam from critical hits!"); -static const u8 sText_SwitchedAtkAndSpAtk[] = _("{B_ATK_NAME_WITH_PREFIX} switched all its\nchanges to its Attack and\pSp. Atk with the target!"); -static const u8 sText_SwitchedDefAndSpDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched all its\nchanges to its Defense and\pSp. Def with the target!"); -static const u8 sText_PkmnAcquiredAbility[] = _("{B_DEF_NAME_WITH_PREFIX} acquired\n{B_DEF_ABILITY}!"); -static const u8 sText_PoisonSpikesScattered[] = _("Poison Spikes were scattered all\naround {B_DEF_TEAM2} team's feet!"); -static const u8 sText_PkmnSwitchedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} switched stat changes\nwith the target!"); -static const u8 sText_PkmnSurroundedWithVeilOfWater[] = _("{B_ATK_NAME_WITH_PREFIX} surrounded itself\nwith a veil of water!"); -static const u8 sText_PkmnLevitatedOnElectromagnetism[] = _("{B_ATK_NAME_WITH_PREFIX} levitated on\nelectromagnetism!"); -static const u8 sText_PkmnTwistedDimensions[] = _("{B_ATK_NAME_WITH_PREFIX} twisted\nthe dimensions!"); -static const u8 sText_DimensionsWereTwisted[] = _("The dimensions were\ntwisted!"); +static const u8 sText_PkmnStoleAndAteItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole and ate its target's {B_LAST_ITEM}!"); +static const u8 sText_TailWindBlew[] = _("The Tailwind blew from behind {B_ATK_TEAM2} team!"); +static const u8 sText_PkmnWentBack[] = _("{B_ATK_NAME_WITH_PREFIX} went back to {B_ATK_TRAINER_NAME}!"); +static const u8 sText_PkmnCantUseItemsAnymore[] = _("{B_DEF_NAME_WITH_PREFIX} can't use items anymore!"); +static const u8 sText_PkmnFlung[] = _("{B_ATK_NAME_WITH_PREFIX} flung its {B_LAST_ITEM}!"); +static const u8 sText_PkmnPreventedFromHealing[] = _("{B_DEF_NAME_WITH_PREFIX} was prevented from healing!"); +static const u8 sText_PkmnSwitchedAtkAndDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched its Attack and Defense!"); +static const u8 sText_PkmnsAbilitySuppressed[] = _("{B_DEF_NAME_WITH_PREFIX}'s Ability was suppressed!"); +static const u8 sText_ShieldedFromCriticalHits[] = _("Lucky Chant shielded {B_ATK_TEAM2} team from critical hits!"); +static const u8 sText_SwitchedAtkAndSpAtk[] = _("{B_ATK_NAME_WITH_PREFIX} switched all changes to its Attack and Sp. Atk\pwith its target!"); +static const u8 sText_SwitchedDefAndSpDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched all changes to its Defense and Sp. Def\pwith its target!"); +static const u8 sText_PkmnAcquiredAbility[] = _("{B_DEF_NAME_WITH_PREFIX} acquired {B_DEF_ABILITY}!"); +static const u8 sText_PoisonSpikesScattered[] = _("Poison spikes were scattered on the ground all around {B_DEF_TEAM2} team!"); +static const u8 sText_PkmnSwitchedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} switched stat changes with its target!"); +static const u8 sText_PkmnSurroundedWithVeilOfWater[] = _("{B_ATK_NAME_WITH_PREFIX} surrounded itself with a veil of water!"); +static const u8 sText_PkmnLevitatedOnElectromagnetism[] = _("{B_ATK_NAME_WITH_PREFIX} levitated with electromagnetism!"); +static const u8 sText_PkmnTwistedDimensions[] = _("{B_ATK_NAME_WITH_PREFIX} twisted the dimensions!"); +static const u8 sText_DimensionsWereTwisted[] = _("The dimensions were twisted!"); static const u8 sText_PointedStonesFloat[] =_("Pointed stones float in the air\naround {B_DEF_TEAM2} team!"); -static const u8 sText_CloakedInMysticalMoonlight[] =_("It became cloaked in mystical\nmoonlight!"); +static const u8 sText_CloakedInMysticalMoonlight[] =_("{B_ATK_NAME_WITH_PREFIX} became\ncloaked in mystical moonlight!"); static const u8 sText_TrappedBySwirlingMagma[] =_("{B_DEF_NAME_WITH_PREFIX} became\ntrapped by swirling magma!"); static const u8 sText_VanishedInstantly[] =_("{B_ATK_NAME_WITH_PREFIX} vanished\ninstantly!"); static const u8 sText_ProtectedTeam[] =_("{B_CURRENT_MOVE} protected\n{B_ATK_TEAM2} team!"); static const u8 sText_SharedItsGuard[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\nguard with the target!"); static const u8 sText_SharedItsPower[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\npower with the target!"); -static const u8 sText_SwapsDefAndSpDefOfAllPkmn[] =_("It created a bizarre area in which the\nDefense and Sp. Def stats are swapped!"); -static const u8 sText_BizzareAreaCreated[] =_("A bizarre area was created in which the\nDefense and Sp. Def stats are swapped!"); +static const u8 sText_SwapsDefAndSpDefOfAllPkmn[] =_("It created a bizarre area in which\nDefense and Sp. Def stats are swapped!"); +static const u8 sText_BizzareAreaCreated[] =_("A bizarre area was created in which\nDefense and Sp. Def stats are swapped!"); static const u8 sText_BecameNimble[] =_("{B_ATK_NAME_WITH_PREFIX} became nimble!"); static const u8 sText_HurledIntoTheAir[] =_("{B_DEF_NAME_WITH_PREFIX} was hurled\ninto the air!"); static const u8 sText_HeldItemsLoseEffects[] =_("It created a bizarre area in which\nPokémon's held items lose their effects!"); -static const u8 sText_BizarreArenaCreated[] =_("A bizarre area was created!\nHold items lost their effects!"); +static const u8 sText_BizarreArenaCreated[] =_("A bizarre area was created in which\nPokémon's held items lose their effects!"); static const u8 sText_FellStraightDown[] =_("{B_DEF_NAME_WITH_PREFIX} fell\nstraight down!"); static const u8 sText_TargetChangedType[] =_("{B_DEF_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!"); -static const u8 sText_PkmnAcquiredSimple[] =_("{B_DEF_NAME_WITH_PREFIX} acquired\nSimple!"); +static const u8 sText_PkmnAcquiredSimple[] =_("{B_DEF_NAME_WITH_PREFIX} acquired\nSimple!"); //shouldn't directly use the name static const u8 sText_KindOffer[] =_("{B_DEF_NAME_WITH_PREFIX}\ntook the kind offer!"); static const u8 sText_ResetsTargetsStatLevels[] =_("{B_DEF_NAME_WITH_PREFIX}'s stat changes\nwere removed!"); -static const u8 sText_AllySwitchPosition[] =_("{B_ATK_NAME_WITH_PREFIX} and\n{B_SCR_ACTIVE_NAME_WITH_PREFIX} switched places!"); +static const u8 sText_AllySwitchPosition[] =_("{B_ATK_NAME_WITH_PREFIX} and\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2} switched places!"); static const u8 sText_RestoreTargetsHealth[] =_("{B_DEF_NAME_WITH_PREFIX}'s HP was restored!"); -static const u8 sText_TookPkmnIntoTheSky[] =_("{B_ATK_NAME_WITH_PREFIX} took\n{B_DEF_NAME_WITH_PREFIX} into the sky!"); +static const u8 sText_TookPkmnIntoTheSky[] =_("{B_ATK_NAME_WITH_PREFIX} took\n{B_DEF_NAME_WITH_PREFIX2} into the sky!"); static const u8 sText_FreedFromSkyDrop[] =_("{B_DEF_NAME_WITH_PREFIX} was freed\nfrom the Sky Drop!"); static const u8 sText_PostponeTargetMove[] =_("{B_DEF_NAME_WITH_PREFIX}'s move\nwas postponed!"); -static const u8 sText_ReflectTargetsType[] =_("{B_ATK_NAME_WITH_PREFIX}'s type\nchanged to match the {B_DEF_NAME_WITH_PREFIX}'s!"); -static const u8 sText_TransferHeldItem[] =_("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX}"); -static const u8 sText_EmbargoEnds[] = _("{B_ATK_NAME_WITH_PREFIX} can\nuse items again!"); +static const u8 sText_ReflectTargetsType[] =_("{B_ATK_NAME_WITH_PREFIX} became the\nsame type as {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_TransferHeldItem[] =_("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX2}"); +static const u8 sText_EmbargoEnds[] = _("{B_ATK_NAME_WITH_PREFIX} can use items again!"); static const u8 sText_Electromagnetism[] = _("electromagnetism"); -static const u8 sText_BufferEnds[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\nwore off!"); -static const u8 sText_ThroatChopEnds[] = _("{B_ATK_NAME_WITH_PREFIX} can\nuse sound-based moves again!"); -static const u8 sText_TelekinesisEnds[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom the telekinesis!"); -static const u8 sText_TailwindEnds[] = _("{B_ATK_TEAM1} team's tailwind\npetered out!"); -static const u8 sText_LuckyChantEnds[] = _("{B_ATK_TEAM1} team's Lucky Chant\nwore off!"); -static const u8 sText_TrickRoomEnds[] = _("The twisted dimensions returned to\nnormal!"); -static const u8 sText_WonderRoomEnds[] = _("Wonder Room wore off, and Defense\nand Sp. Def stats returned to normal!"); -static const u8 sText_MagicRoomEnds[] = _("Magic Room wore off, and held items'\neffects returned to normal!"); +static const u8 sText_BufferEnds[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} wore off!"); +static const u8 sText_ThroatChopEnds[] = _("{B_ATK_NAME_WITH_PREFIX} can use sound-based moves again!"); +static const u8 sText_TelekinesisEnds[] = _("{B_ATK_NAME_WITH_PREFIX} was freed from the telekinesis!"); +static const u8 sText_TailwindEnds[] = _("{B_ATK_TEAM1} team's Tailwind petered out!"); +static const u8 sText_LuckyChantEnds[] = _("{B_ATK_TEAM1} team's Lucky Chant wore off!"); +static const u8 sText_TrickRoomEnds[] = _("The twisted dimensions returned to normal!"); +static const u8 sText_WonderRoomEnds[] = _("Wonder Room wore off, and Defense and Sp. Def stats returned to normal!"); +static const u8 sText_MagicRoomEnds[] = _("Magic Room wore off, and held items' effects returned to normal!"); static const u8 sText_MudSportEnds[] = _("The effects of Mud Sport have faded."); static const u8 sText_WaterSportEnds[] = _("The effects of Water Sport have faded."); static const u8 sText_GravityEnds[] = _("Gravity returned to normal!"); -static const u8 sText_AquaRingHeal[] = _("Aqua Ring restored\n{B_ATK_NAME_WITH_PREFIX}'s HP!"); -static const u8 sText_TargetAbilityRaisedStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nraised its {B_BUFF1}!"); -static const u8 sText_TargetAbilityLoweredStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nlowered its {B_BUFF1}!"); -static const u8 sText_AttackerAbilityRaisedStat[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nraised its {B_BUFF1}!"); -static const u8 sText_ScriptingAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its {B_BUFF1}!"); -static const u8 sText_ElectricTerrainEnds[] = _("The electricity disappeared\nfrom the battlefield."); -static const u8 sText_MistyTerrainEnds[] = _("The mist disappeared\nfrom the battlefield."); -static const u8 sText_PsychicTerrainEnds[] = _("The weirdness disappeared\nfrom the battlefield."); -static const u8 sText_GrassyTerrainEnds[] = _("The grass disappeared\nfrom the battlefield."); -static const u8 sText_TargetsStatWasMaxedOut[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} maxed\nits {B_BUFF1}!"); -static const u8 sText_PoisonHealHpUp[] = _("The poisoning healed {B_ATK_NAME_WITH_PREFIX}\na little bit!"); +static const u8 sText_AquaRingHeal[] = _("A veil of water restored {B_ATK_NAME_WITH_PREFIX2}'s HP!"); +static const u8 sText_TargetAbilityRaisedStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} raised its {B_BUFF1}!"); +static const u8 sText_TargetAbilityLoweredStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} lowered its {B_BUFF1}!"); +static const u8 sText_AttackerAbilityRaisedStat[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} raised its {B_BUFF1}!"); +static const u8 sText_ScriptingAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} raised its {B_BUFF1}!"); +static const u8 sText_ElectricTerrainEnds[] = _("The electricity disappeared from the battlefield."); +static const u8 sText_MistyTerrainEnds[] = _("The mist disappeared from the battlefield."); +static const u8 sText_PsychicTerrainEnds[] = _("The weirdness disappeared from the battlefield!"); +static const u8 sText_GrassyTerrainEnds[] = _("The grass disappeared from the battlefield."); +static const u8 sText_TargetsStatWasMaxedOut[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} maxed its {B_BUFF1}!"); +static const u8 sText_PoisonHealHpUp[] = _("The poisoning healed {B_ATK_NAME_WITH_PREFIX2} a little bit!"); //don't think this message is displayed anymore static const u8 sText_BadDreamsDmg[] = _("{B_DEF_NAME_WITH_PREFIX} is tormented!"); static const u8 sText_MoldBreakerEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} breaks the mold!"); -static const u8 sText_TeravoltEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na bursting aura!"); -static const u8 sText_TurboblazeEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na blazing aura!"); -static const u8 sText_SlowStartEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} can't get it going!"); -static const u8 sText_SlowStartEnd[] = _("{B_ATK_NAME_WITH_PREFIX} finally got\nits act together!"); -static const u8 sText_SolarPowerHpDrop[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\ntakes its toll!"); -static const u8 sText_AftermathDmg[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt!"); -static const u8 sText_AnticipationActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shuddered\nin anticipation!"); -static const u8 sText_ForewarnActivates[] = _("{B_SCR_ACTIVE_ABILITY} alerted {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nto {B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); -static const u8 sText_IceBodyHpGain[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nhealed it a little bit!"); +static const u8 sText_TeravoltEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating a bursting aura!"); +static const u8 sText_TurboblazeEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating a blazing aura!"); +static const u8 sText_SlowStartEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is slow to get going!"); +static const u8 sText_SlowStartEnd[] = _("{B_ATK_NAME_WITH_PREFIX} finally got its act together!"); +static const u8 sText_SolarPowerHpDrop[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} takes its toll!"); //don't think this message is displayed anymore +static const u8 sText_AftermathDmg[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt!"); +static const u8 sText_AnticipationActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shuddered!"); +static const u8 sText_ForewarnActivates[] = _("{B_SCR_ACTIVE_ABILITY} alerted {B_SCR_ACTIVE_NAME_WITH_PREFIX2} to {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); +static const u8 sText_IceBodyHpGain[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} healed it a little bit!"); //don't think this message is displayed anymore static const u8 sText_SnowWarningHail[] = _("It started to hail!"); static const u8 sText_SnowWarningSnow[] = _("It started to snow!"); -static const u8 sText_FriskActivates[] = _("{B_ATK_NAME_WITH_PREFIX} frisked {B_DEF_NAME_WITH_PREFIX} and\nfound its {B_LAST_ITEM}!"); -static const u8 sText_UnnerveEnters[] = _("The opposing team is too nervous\nto eat Berries!"); -static const u8 sText_HarvestBerry[] = _("{B_ATK_NAME_WITH_PREFIX} harvested\nits {B_LAST_ITEM}!"); -static const u8 sText_LastAbilityRaisedBuff1[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}\nraised its {B_BUFF1}!"); -static const u8 sText_MagicBounceActivates[] = _("The {B_DEF_NAME_WITH_PREFIX} bounced the\n{B_ATK_NAME_WITH_PREFIX} back!"); -static const u8 sText_ProteanTypeChange[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} transformed\nit into the {B_BUFF1} type!"); -static const u8 sText_SymbiosisItemPass[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} passed its {B_LAST_ITEM}\nto {B_ATK_NAME_WITH_PREFIX} through {B_LAST_ABILITY}!"); -static const u8 sText_StealthRockDmg[] = _("Pointed stones dug into\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}!"); -static const u8 sText_ToxicSpikesAbsorbed[] = _("The poison spikes disappeared\nfrom around {B_DEF_TEAM2} team's feet!"); +static const u8 sText_FriskActivates[] = _("{B_ATK_NAME_WITH_PREFIX} frisked {B_DEF_NAME_WITH_PREFIX2} and found its {B_LAST_ITEM}!"); +static const u8 sText_UnnerveEnters[] = _("{B_DEF_TEAM1} team is too nervous to eat Berries!"); +static const u8 sText_HarvestBerry[] = _("{B_ATK_NAME_WITH_PREFIX} harvested its {B_LAST_ITEM}!"); +static const u8 sText_LastAbilityRaisedBuff1[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY} raised its {B_BUFF1}!"); +static const u8 sText_MagicBounceActivates[] = _("{B_DEF_NAME_WITH_PREFIX} bounced the {B_ATK_NAME_WITH_PREFIX2} back!"); +static const u8 sText_ProteanTypeChange[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} transformed it into the {B_BUFF1} type!"); +static const u8 sText_SymbiosisItemPass[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} passed its {B_LAST_ITEM} to {B_ATK_NAME_WITH_PREFIX2} through {B_LAST_ABILITY}!"); +static const u8 sText_StealthRockDmg[] = _("Pointed stones dug into {B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"); +static const u8 sText_ToxicSpikesAbsorbed[] = _("The poison spikes disappeared from the ground around {B_ATK_TEAM2} team!"); static const u8 sText_ToxicSpikesPoisoned[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was poisoned!"); -static const u8 sText_StickyWebSwitchIn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was\ncaught in a Sticky Web!"); -static const u8 sText_HealingWishCameTrue[] = _("The healing wish came true\nfor {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_StickyWebSwitchIn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was caught in a sticky web!"); +static const u8 sText_HealingWishCameTrue[] = _("The healing wish came true for {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_HealingWishHealed[] = _("{B_ATK_NAME_WITH_PREFIX} regained health!"); -static const u8 sText_LunarDanceCameTrue[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin mystical moonlight!"); -static const u8 sText_CursedBodyDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled\nby {B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}!"); -static const u8 sText_AttackerAcquiredAbility[] = _("{B_ATK_NAME_WITH_PREFIX} acquired\n{B_ATK_ABILITY}!"); -static const u8 sText_TargetStatWontGoHigher[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwon't go higher!"); -static const u8 sText_PkmnMoveBouncedViaAbility[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} was\nbounced back by {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY}!"); -static const u8 sText_ImposterTransform[] = _("{B_ATK_NAME_WITH_PREFIX} transformed into\n{B_DEF_NAME_WITH_PREFIX} using {B_LAST_ABILITY}!"); +static const u8 sText_LunarDanceCameTrue[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked in mystical moonlight!"); +static const u8 sText_CursedBodyDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled by {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY}!"); +static const u8 sText_AttackerAcquiredAbility[] = _("{B_ATK_NAME_WITH_PREFIX} acquired {B_ATK_ABILITY}!"); +static const u8 sText_TargetStatWontGoHigher[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} won't go any higher!"); +static const u8 sText_PkmnMoveBouncedViaAbility[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} was bounced back by {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY}!"); +static const u8 sText_ImposterTransform[] = _("{B_ATK_NAME_WITH_PREFIX} transformed into {B_DEF_NAME_WITH_PREFIX2} using {B_LAST_ABILITY}!"); static const u8 sText_NotDoneYet[] = _("This move effect is not done yet!\p"); -static const u8 sText_PkmnBlewAwayToxicSpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nToxic Spikes!"); -static const u8 sText_PkmnBlewAwayStickyWeb[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSticky Web!"); -static const u8 sText_PkmnBlewAwayStealthRock[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nStealth Rock!"); -static const u8 sText_SpikesDisappearedFromTeam[] = _("The spikes disappeared from\nthe ground around {B_ATK_TEAM2} team!"); -static const u8 sText_ToxicSpikesDisappearedFromTeam[] = _("The poison spikes disappeared from\nthe ground around {B_ATK_TEAM2} team!"); -static const u8 sText_StealthRockDisappearedFromTeam[] = _("The pointed stones disappeared\nfrom around {B_ATK_TEAM2} team!"); -static const u8 sText_StickyWebDisappearedFromTeam[] = _("The sticky web has disappeared from\nthe ground around {B_ATK_TEAM2} team!"); -static const u8 sText_StickyWebUsed[] = _("A sticky web spreads out on the\nground around {B_DEF_TEAM2} team!"); -static const u8 sText_QuashSuccess[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nmove was postponed!"); -static const u8 sText_IonDelugeOn[] = _("A deluge of ions showers\nthe battlefield!"); -static const u8 sText_TopsyTurvySwitchedStats[] = _("{B_DEF_NAME_WITH_PREFIX}'s stat changes were\nall reversed!"); -static const u8 sText_TerrainBecomesMisty[] = _("Mist swirled about\nthe battlefield!"); -static const u8 sText_TerrainBecomesGrassy[] = _("Grass grew to cover\nthe battlefield!"); -static const u8 sText_TerrainBecomesElectric[] = _("An electric current runs across\nthe battlefield!"); +static const u8 sText_PkmnBlewAwayToxicSpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away Toxic Spikes!"); +static const u8 sText_PkmnBlewAwayStickyWeb[] = _("{B_ATK_NAME_WITH_PREFIX} blew away Sticky Web!"); +static const u8 sText_PkmnBlewAwayStealthRock[] = _("{B_ATK_NAME_WITH_PREFIX} blew away Stealth Rock!"); +static const u8 sText_SpikesDisappearedFromTeam[] = _("The spikes disappeared from the ground around {B_ATK_TEAM2} team!"); +static const u8 sText_ToxicSpikesDisappearedFromTeam[] = _("The poison spikes disappeared from the ground around {B_ATK_TEAM2} team!"); +static const u8 sText_StealthRockDisappearedFromTeam[] = _("The pointed stones disappeared from around {B_ATK_TEAM2} team!"); +static const u8 sText_StickyWebDisappearedFromTeam[] = _("The sticky web has disappeared from the ground around {B_ATK_TEAM2} team!"); +static const u8 sText_StickyWebUsed[] = _("A sticky web has been laid out on the ground around {B_DEF_TEAM2} team!"); +static const u8 sText_QuashSuccess[] = _("{B_DEF_NAME_WITH_PREFIX}'s move was postponed!"); +static const u8 sText_IonDelugeOn[] = _("A deluge of ions showers the battlefield!"); +static const u8 sText_TopsyTurvySwitchedStats[] = _("All stat changes on {B_DEF_NAME_WITH_PREFIX2} were inverted!"); +static const u8 sText_TerrainBecomesMisty[] = _("Mist swirled around the battlefield!"); +static const u8 sText_TerrainBecomesGrassy[] = _("Grass grew to cover the battlefield!"); +static const u8 sText_TerrainBecomesElectric[] = _("An electric current ran across the battlefield!"); static const u8 sText_TerrainBecomesPsychic[] = _("The battlefield got weird!"); -static const u8 sText_TargetElectrified[] = _("{B_DEF_NAME_WITH_PREFIX}'s moves\nhave been electrified!"); -static const u8 sText_AssaultVestDoesntAllow[] = _("{B_LAST_ITEM}'s effects prevent\nstatus moves from being used!\p"); -static const u8 sText_GravityPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} can't use {B_CURRENT_MOVE}\nbecause of gravity!\p"); -static const u8 sText_HealBlockPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} was\nprevented from healing!\p"); -static const u8 sText_MegaEvoReacting[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ITEM} is\nreacting to {B_ATK_TRAINER_NAME}'s Mega Ring!"); -static const u8 sText_FerventWishReached[] = _("{B_ATK_TRAINER_NAME}'s fervent wish\nhas reached {B_ATK_NAME_WITH_PREFIX}!"); -static const u8 sText_MegaEvoEvolved[] = _("{B_ATK_NAME_WITH_PREFIX} has Mega Evolved into\nMega {B_BUFF1}!"); -static const u8 sText_drastically[] = _("drastically "); -static const u8 sText_severely[] = _("severely "); -static const u8 sText_Infestation[] = _("{B_DEF_NAME_WITH_PREFIX} has been afflicted\nwith an infestation by {B_ATK_NAME_WITH_PREFIX}!"); -static const u8 sText_NoEffectOnTarget[] = _("It had no effect\non {B_DEF_NAME_WITH_PREFIX}!"); -static const u8 sText_BurstingFlames[] = _("The bursting flames\nhit {B_SCR_ACTIVE_NAME_WITH_PREFIX}!"); -static const u8 sText_BestowItemGiving[] = _("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX}!"); -static const u8 sText_ThirdTypeAdded[] = _("{B_BUFF1} type was added to\n{B_DEF_NAME_WITH_PREFIX}!"); -static const u8 sText_FellForFeint[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe feint!"); -static const u8 sText_PokemonCannotUseMove[] = _("{B_ATK_NAME_WITH_PREFIX} cannot\nuse {B_CURRENT_MOVE}!"); +static const u8 sText_TargetElectrified[] = _("{B_DEF_NAME_WITH_PREFIX}'s moves have been electrified!"); +static const u8 sText_AssaultVestDoesntAllow[] = _("The effects of the {B_LAST_ITEM} prevent status moves from being used!\p"); +static const u8 sText_GravityPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} can't use {B_CURRENT_MOVE} because of gravity!\p"); +static const u8 sText_HealBlockPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} was prevented from healing!\p"); +static const u8 sText_MegaEvoReacting[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ITEM} is reacting to {B_ATK_TRAINER_NAME}'s Mega Ring!"); //actually displays the type of mega ring in inventory, but we didnt implement them :( +static const u8 sText_FerventWishReached[] = _("{B_ATK_TRAINER_NAME}'s fervent wish has reached {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_MegaEvoEvolved[] = _("{B_ATK_NAME_WITH_PREFIX} has Mega Evolved into Mega {B_BUFF1}!"); +const u8 sText_drastically[] = _("drastically "); +const u8 sText_severely[] = _("severely "); +static const u8 sText_Infestation[] = _("{B_DEF_NAME_WITH_PREFIX} has been afflicted with an infestation by {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_NoEffectOnTarget[] = _("It won't have any effect on {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_BurstingFlames[] = _("The bursting flames hit {B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"); +static const u8 sText_BestowItemGiving[] = _("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM} from {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_ThirdTypeAdded[] = _("{B_BUFF1} type was added to {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_FellForFeint[] = _("{B_DEF_NAME_WITH_PREFIX} fell for the feint!"); +static const u8 sText_PokemonCannotUseMove[] = _("{B_ATK_NAME_WITH_PREFIX} cannot use {B_CURRENT_MOVE}!"); static const u8 sText_CoveredInPowder[] = _("{B_DEF_NAME_WITH_PREFIX} is covered in powder!"); -static const u8 sText_PowderExplodes[] = _("When the flame touched the powder\non the Pokémon, it exploded!"); -static const u8 sText_BelchCantUse[] = _("Belch cannot be used!\p"); -static const u8 sText_SpectralThiefSteal[] = _("{B_ATK_NAME_WITH_PREFIX} stole the target's\nboosted stats!"); -static const u8 sText_GravityGrounding[] = _("{B_DEF_NAME_WITH_PREFIX} can't stay airborne\nbecause of gravity!"); -static const u8 sText_MistyTerrainPreventsStatus[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith a protective mist!"); -static const u8 sText_GrassyTerrainHeals[] = _("{B_ATK_NAME_WITH_PREFIX} is healed\nby the grassy terrain!"); -static const u8 sText_ElectricTerrainPreventsSleep[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith electrified terrain!"); -static const u8 sText_PsychicTerrainPreventsPriority[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith psychic terrain!"); -static const u8 sText_SafetyGogglesProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is not affected\nthanks to its {B_LAST_ITEM}!"); -static const u8 sText_FlowerVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} surrounded itself\nwith a veil of petals!"); -static const u8 sText_SweetVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} surrounded itself\nwith a veil of sweetness!"); -static const u8 sText_AromaVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby an aromatic veil!"); +static const u8 sText_PowderExplodes[] = _("When the flame touched the powder on the Pokémon, it exploded!"); +static const u8 sText_BelchCantUse[] = _("{B_ATK_NAME_WITH_PREFIX} hasn't eaten any held Berries, so it can't possibly belch!\p"); +static const u8 sText_SpectralThiefSteal[] = _("{B_ATK_NAME_WITH_PREFIX} stole the target's boosted stats!"); +static const u8 sText_GravityGrounding[] = _("{B_DEF_NAME_WITH_PREFIX} fell from the sky due to the gravity!"); +static const u8 sText_MistyTerrainPreventsStatus[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself with a protective mist!"); +static const u8 sText_GrassyTerrainHeals[] = _("{B_ATK_NAME_WITH_PREFIX} is healed by the grassy terrain!"); +static const u8 sText_ElectricTerrainPreventsSleep[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself with electrified terrain!"); +static const u8 sText_PsychicTerrainPreventsPriority[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself with psychic terrain!"); +static const u8 sText_SafetyGogglesProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is not affected thanks to its {B_LAST_ITEM}!"); +static const u8 sText_FlowerVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} surrounded itself with a veil of petals!"); +static const u8 sText_SweetVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} can't fall asleep due to a veil of sweetness!"); +static const u8 sText_AromaVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected by an aromatic veil!"); static const u8 sText_CelebrateMessage[] = _("Congratulations, {B_PLAYER_NAME}!"); -static const u8 sText_UsedInstructedMove[] = _("{B_ATK_NAME_WITH_PREFIX} used the move\ninstructed by {B_BUFF1}!"); -static const u8 sText_LaserFocusMessage[] = _("{B_ATK_NAME_WITH_PREFIX}\nconcentrated intensely!"); -static const u8 sText_GemActivates[] = _("{B_LAST_ITEM} strengthened\n{B_ATK_NAME_WITH_PREFIX}'s power!"); -static const u8 sText_BerryDmgReducing[] = _("{B_LAST_ITEM} weakened the damage\nto {B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_UsedInstructedMove[] = _("{B_ATK_NAME_WITH_PREFIX} followed {B_BUFF1}'s instructions!"); +static const u8 sText_LaserFocusMessage[] = _("{B_ATK_NAME_WITH_PREFIX} concentrated intensely!"); +static const u8 sText_GemActivates[] = _("The {B_LAST_ITEM} strengthened {B_ATK_NAME_WITH_PREFIX2}'s power!"); +static const u8 sText_BerryDmgReducing[] = _("The {B_LAST_ITEM} weakened the damage to {B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_TargetAteItem[] = _("{B_DEF_NAME_WITH_PREFIX} ate its {B_LAST_ITEM}!"); -static const u8 sText_AirBalloonFloat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} floats in the air\nwith its {B_LAST_ITEM}!"); -static const u8 sText_AirBalloonPop[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM} popped!"); -static const u8 sText_IncinerateBurn[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nwas burnt up!"); -static const u8 sText_BugBite[] = _("{B_ATK_NAME_WITH_PREFIX} stole and ate\n{B_EFF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); -static const u8 sText_IllusionWoreOff[] = _("{B_DEF_NAME_WITH_PREFIX}'s Illusion wore off!"); -static const u8 sText_AttackerCuredTargetStatus[] = _("{B_ATK_NAME_WITH_PREFIX} cured\n{B_DEF_NAME_WITH_PREFIX}'s problem!"); +static const u8 sText_AirBalloonFloat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} floats in the air with its Air Balloon!"); +static const u8 sText_AirBalloonPop[] = _("{B_DEF_NAME_WITH_PREFIX}'s Air Balloon popped!"); +static const u8 sText_IncinerateBurn[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_LAST_ITEM} was burnt up!"); +static const u8 sText_BugBite[] = _("{B_ATK_NAME_WITH_PREFIX} stole and ate its target's {B_LAST_ITEM}!"); +static const u8 sText_IllusionWoreOff[] = _("{B_DEF_NAME_WITH_PREFIX}'s illusion wore off!"); +static const u8 sText_AttackerCuredTargetStatus[] = _("{B_ATK_NAME_WITH_PREFIX} cured {B_DEF_NAME_WITH_PREFIX2}'s problem!"); static const u8 sText_AttackerLostFireType[] = _("{B_ATK_NAME_WITH_PREFIX} burned itself out!"); -static const u8 sText_HealerCure[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}\ncured {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s problem!"); -static const u8 sText_ReceiverAbilityTakeOver[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nwas taken over!"); +static const u8 sText_HealerCure[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY} cured {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s problem!"); +static const u8 sText_ReceiverAbilityTakeOver[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} was taken over!"); static const u8 sText_PkmnAbsorbingPower[] = _("{B_ATK_NAME_WITH_PREFIX} is absorbing power!"); -static const u8 sText_NoOneWillBeAbleToRun[] = _("No one will be able to run away\nduring the next turn!"); -static const u8 sText_DestinyKnotActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} fell in love\nfrom the {B_LAST_ITEM}!"); -static const u8 sText_CloakedInAFreezingLight[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin a freezing light!"); -static const u8 sText_ClearAmuletWontLowerStats[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM} prevents\nits stats from being lowered!"); +static const u8 sText_NoOneWillBeAbleToRun[] = _("No one will be able to run away during the next turn!"); +static const u8 sText_DestinyKnotActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} fell in love because of the {B_LAST_ITEM}!"); +static const u8 sText_CloakedInAFreezingLight[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked in a freezing light!"); +static const u8 sText_ClearAmuletWontLowerStats[] = _("The effects of the {B_LAST_ITEM} held by {B_DEF_NAME_WITH_PREFIX2} prevents its stats from being lowered!"); static const u8 sText_AuraFlaredToLife[] = _("{B_DEF_NAME_WITH_PREFIX}'s aura flared to life!"); -static const u8 sText_AirLockActivates[] = _("The effects of weather\ndisappeared."); -static const u8 sText_PressureActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is exerting its\npressure!"); -static const u8 sText_DarkAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na dark aura!"); -static const u8 sText_FairyAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na fairy aura!"); -static const u8 sText_AuraBreakActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} reversed all\nother Pokémon's auras!"); +static const u8 sText_AirLockActivates[] = _("The effects of the weather disappeared."); +static const u8 sText_PressureActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is exerting its pressure!"); +static const u8 sText_DarkAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating a dark aura!"); +static const u8 sText_FairyAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating a fairy aura!"); +static const u8 sText_AuraBreakActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} reversed all other Pokémon's auras!"); static const u8 sText_ComatoseActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is drowsing!"); -static const u8 sText_ScreenCleanerActivates[] = _("All screens on the field were\ncleansed!"); -static const u8 sText_FetchedPokeBall[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} found\na {B_LAST_ITEM}!"); -static const u8 sText_BattlerAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its {B_BUFF1}!"); +static const u8 sText_ScreenCleanerActivates[] = _("All screens on the field were cleansed!"); +static const u8 sText_FetchedPokeBall[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} found a {B_LAST_ITEM}!"); +static const u8 sText_BattlerAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} raised its {B_BUFF1}!"); static const u8 sText_ASandstormKickedUp[] = _("A sandstorm kicked up!"); -static const u8 sText_PkmnsWillPerishIn3Turns[] = _("Both Pokémon will perish\nin three turns!"); -static const u8 sText_AbilityRaisedStatDrastically[] = _("{B_DEF_ABILITY} raised {B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} drastically!"); +static const u8 sText_PkmnsWillPerishIn3Turns[] = _("Both Pokémon will perish in three turns!"); //don't think this message is displayed anymore +static const u8 sText_AbilityRaisedStatDrastically[] = _("{B_DEF_ABILITY} raised {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1} drastically!"); static const u8 sText_AsOneEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} has two Abilities!"); -static const u8 sText_PkmnMadeShellGleam[] = _("{B_DEF_NAME_WITH_PREFIX} made its shell gleam!\nIt's distorting type matchups!"); -static const u8 sText_CuriousMedicineEnters[] = _("{B_EFF_NAME_WITH_PREFIX}'s\nstat changes were reset!"); -static const u8 sText_CanActFaster[] = _("{B_ATK_NAME_WITH_PREFIX} can act faster,\nthanks to {B_BUFF1}!"); -static const u8 sText_MicleBerryActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted the accuracy of its\nnext move using {B_LAST_ITEM}!"); -static const u8 sText_PkmnShookOffTheTaunt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shook off\nthe taunt!"); -static const u8 sText_PkmnGotOverItsInfatuation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} got over\nits infatuation!"); -static const u8 sText_ZPowerSurrounds[] = _("{B_ATK_NAME_WITH_PREFIX} surrounds\nitself with its Z-Power!"); -static const u8 sText_ZPowerUnleashed[] = _("{B_ATK_NAME_WITH_PREFIX} unleashes\nits full-force Z-Move!"); -static const u8 sText_ZMoveResetsStats[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned its\ndecreased stats to normal using\lits Z-Power!"); -static const u8 sText_ZMoveAllStatsUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted all\nof its stats using its Z-Power!"); -static const u8 sText_ZMoveBoostCrit[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted its\ncritical-hit ratio using its Z-Power!"); -static const u8 sText_ZMoveRestoreHp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its\nHP using its Z-Power!"); -static const u8 sText_ZMoveStatUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted\nits stats using its Z-Power!"); +static const u8 sText_PkmnMadeShellGleam[] = _("{B_DEF_NAME_WITH_PREFIX} made its shell gleam! It's distorting type matchups!"); +static const u8 sText_CuriousMedicineEnters[] = _("{B_EFF_NAME_WITH_PREFIX}'s stat changes were removed!"); +static const u8 sText_CanActFaster[] = _("{B_ATK_NAME_WITH_PREFIX} can act faster than normal, thanks to its {B_BUFF1}!"); +static const u8 sText_MicleBerryActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted the accuracy of its next move using {B_LAST_ITEM}!"); +static const u8 sText_PkmnShookOffTheTaunt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shook off the taunt!"); +static const u8 sText_PkmnGotOverItsInfatuation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} got over its infatuation!"); +static const u8 sText_ZPowerSurrounds[] = _("{B_ATK_NAME_WITH_PREFIX} surrounded itself with its Z-Power!"); +static const u8 sText_ZPowerUnleashed[] = _("{B_ATK_NAME_WITH_PREFIX} unleashes its full-force Z-Move!"); +static const u8 sText_ZMoveResetsStats[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned its decreased stats to normal using its Z-Power!"); +static const u8 sText_ZMoveAllStatsUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted its stats using its Z-Power!"); +static const u8 sText_ZMoveBoostCrit[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted its critical-hit ratio using its Z-Power!"); +static const u8 sText_ZMoveRestoreHp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its HP using its Z-Power!"); +static const u8 sText_ZMoveStatUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted its stats using its Z-Power!"); static const u8 sText_ZMoveHpSwitchInTrap[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s HP was restored by the Z-Power!"); -static const u8 sText_TerrainReturnedToNormal[] = _("The terrain returned to\nnormal!"); +static const u8 sText_TerrainReturnedToNormal[] = _("The terrain returned to normal!"); static const u8 sText_ItemCannotBeRemoved[] = _("{B_ATK_NAME_WITH_PREFIX}'s item cannot be removed!"); -static const u8 sText_StickyBarbTransfer[] = _("The {B_LAST_ITEM} attached itself to\n{B_ATK_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnBurnHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nburn was healed."); -static const u8 sText_RedCardActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} held up its {B_LAST_ITEM}\nagainst {B_ATK_NAME_WITH_PREFIX}!"); -static const u8 sText_EjectButtonActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is switched\nout with the {B_LAST_ITEM}!"); +static const u8 sText_StickyBarbTransfer[] = _("The {B_LAST_ITEM} attached itself to {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnBurnHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s burn was cured!"); +static const u8 sText_RedCardActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} held up its Red Card against {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_EjectButtonActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is switched out with the {B_LAST_ITEM}!"); static const u8 sText_AttackerGotOverInfatuation[] =_("{B_ATK_NAME_WITH_PREFIX} got over\nits infatuation!"); -static const u8 sText_TormentedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is\ntormented no more!"); -static const u8 sText_HealBlockedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is cured of\nits heal block!"); -static const u8 sText_AttackerBecameFullyCharged[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged\ndue to its bond with its trainer!\p"); -static const u8 sText_AttackerBecameAshSpecies[] = _("{B_ATK_NAME_WITH_PREFIX} became Ash-{B_BUFF1}!\p"); -static const u8 sText_ExtremelyHarshSunlight[] = _("The sunlight turned\nextremely harsh!"); -static const u8 sText_ExtremeSunlightFaded[] = _("The extreme sunlight faded.{PAUSE 64}"); -static const u8 sText_MoveEvaporatedInTheHarshSunlight[] = _("The Water-type attack evaporated\nin the harsh sunlight!"); -static const u8 sText_ExtremelyHarshSunlightWasNotLessened[] = _("The extremely harsh sunlight\nwas not lessened at all!"); +static const u8 sText_TormentedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is no longer tormented!"); +static const u8 sText_HealBlockedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is cured of its heal block!"); +static const u8 sText_AttackerBecameFullyCharged[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged due to its bond with its trainer!\p"); +static const u8 sText_AttackerBecameAshSpecies[] = _("{B_ATK_NAME_WITH_PREFIX} became Ash-Greninja!\p"); +static const u8 sText_ExtremelyHarshSunlight[] = _("The sunlight turned extremely harsh!"); +static const u8 sText_ExtremeSunlightFaded[] = _("The extremely harsh sunlight faded!{PAUSE 64}"); +static const u8 sText_MoveEvaporatedInTheHarshSunlight[] = _("The Water-type attack evaporated in the extremely harsh sunlight!"); +static const u8 sText_ExtremelyHarshSunlightWasNotLessened[] = _("The extremely harsh sunlight was not lessened at all!"); static const u8 sText_HeavyRain[] = _("A heavy rain began to fall!"); static const u8 sText_HeavyRainLifted[] = _("The heavy rain has lifted!{PAUSE 64}"); -static const u8 sText_MoveFizzledOutInTheHeavyRain[] = _("The Fire-type attack fizzled out\nin the heavy rain!"); -static const u8 sText_NoReliefFromHeavyRain[] = _("There is no relief from\nthis heavy rain!"); -static const u8 sText_MysteriousAirCurrent[] = _("A mysterious air current is\nprotecting Flying-type Pokémon!"); -static const u8 sText_StrongWindsDissipated[] = _("The mysterious strong winds\nhave dissipated!{PAUSE 64}"); -static const u8 sText_MysteriousAirCurrentBlowsOn[] = _("The mysterious air current\nblows on regardless!"); -static const u8 sText_AttackWeakenedByStrongWinds[] = _("The mysterious strong winds\nweakened the attack!"); -static const u8 sText_StuffCheeksCantSelect[] = _("Stuff Cheeks cannot be\nselected without a Berry!\p"); -static const u8 sText_PkmnRevertedToPrimal[] = _("{B_ATK_NAME_WITH_PREFIX}'s Primal Reversion!\nIt reverted to its primal form!"); -static const u8 sText_ButPokemonCantUseTheMove[] = _("But {B_ATK_NAME_WITH_PREFIX} can't\nuse the move!"); -static const u8 sText_ButHoopaCantUseIt[] = _("But Hoopa can't use it\nthe way it is now!"); -static const u8 sText_BrokeThroughProtection[] = _("It broke through\n{B_DEF_NAME_WITH_PREFIX}'s protection!"); -static const u8 sText_AbilityAllowsOnlyMove[] = _("{B_ATK_ABILITY} allows the\nuse of only {B_CURRENT_MOVE}!\p"); -static const u8 sText_SwappedAbilities[] = _("{B_DEF_NAME_WITH_PREFIX} swapped Abilities\nwith its target!"); -static const u8 sText_PastelVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby a pastel veil!"); -static const u8 sText_PastelVeilEnters[] = _("{B_DEF_NAME_WITH_PREFIX} was cured\nof its poisoning!"); -static const u8 sText_BattlerTypeChangedTo[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s type\nchanged to {B_BUFF1}!"); +static const u8 sText_MoveFizzledOutInTheHeavyRain[] = _("The Fire-type attack fizzled out in the heavy rain!"); +static const u8 sText_NoReliefFromHeavyRain[] = _("There is no relief from this heavy rain!"); +static const u8 sText_MysteriousAirCurrent[] = _("Mysterious strong winds are protecting Flying-type Pokémon!"); +static const u8 sText_StrongWindsDissipated[] = _("The mysterious strong winds have dissipated!{PAUSE 64}"); +static const u8 sText_MysteriousAirCurrentBlowsOn[] = _("The mysterious strong winds blow on regardless!"); +static const u8 sText_AttackWeakenedByStrongWinds[] = _("The mysterious strong winds weakened the attack!!"); +static const u8 sText_StuffCheeksCantSelect[] = _("It can't use the move because it doesn't have a Berry!\p"); +static const u8 sText_PkmnRevertedToPrimal[] = _("{B_ATK_NAME_WITH_PREFIX}’s Primal Reversion! It reverted to its primal state!"); +static const u8 sText_ButPokemonCantUseTheMove[] = _("But {B_ATK_NAME_WITH_PREFIX2} can't use the move!"); +static const u8 sText_ButHoopaCantUseIt[] = _("But {B_ATK_NAME_WITH_PREFIX2} can't use it the way it is now!"); +static const u8 sText_BrokeThroughProtection[] = _("It broke through {B_DEF_NAME_WITH_PREFIX2}'s protection!"); +static const u8 sText_AbilityAllowsOnlyMove[] = _("{B_ATK_ABILITY} only allows the use of {B_CURRENT_MOVE}!\p"); +static const u8 sText_SwappedAbilities[] = _("{B_DEF_NAME_WITH_PREFIX} swapped Abilities with its target!"); +static const u8 sText_PastelVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected by a pastel veil!"); +static const u8 sText_PastelVeilEnters[] = _("{B_DEF_NAME_WITH_PREFIX} was cured of its poisoning!"); +static const u8 sText_BattlerTypeChangedTo[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s type changed to {B_BUFF1}!"); static const u8 sText_BothCanNoLongerEscape[] = _("Neither Pokémon can run away!"); -static const u8 sText_CantEscapeDueToUsedMove[] = _("{B_ATK_NAME_WITH_PREFIX} can no longer escape\nbecause it used {B_CURRENT_MOVE}!"); -static const u8 sText_PkmnBecameWeakerToFire[] = _("{B_DEF_NAME_WITH_PREFIX} became\nweaker to fire!"); -static const u8 sText_PkmnAboutToBeAttackedByItsItem[] = _("{B_DEF_NAME_WITH_PREFIX} is about\nto be attacked by its {B_BUFF1}!"); -static const u8 sText_CantEscapeBecauseOfCurrentMove[] = _("{B_DEF_NAME_WITH_PREFIX} can no longer escape\nbecause of {B_CURRENT_MOVE}!"); -static const u8 sText_NeutralizingGasEnters[] = _("Neutralizing Gas filled the area!"); -static const u8 sText_NeutralizingGasOver[] = _("The effects of Neutralizing\nGas wore off!"); -static const u8 sText_PkmnTookTargetHigh[] = _("{B_ATK_NAME_WITH_PREFIX} took {B_DEF_NAME_WITH_PREFIX}\ninto the air!"); -static const u8 sText_TargetTooHeavy[] = _("But the target\nwas too heavy!"); -static const u8 sText_MeteorBeamCharging[] = _("{B_ATK_NAME_WITH_PREFIX} is overflowing\nwith space energy!"); -static const u8 sText_HeatingUpBeak[] = _("{B_ATK_NAME_WITH_PREFIX} started\nheating up its beak!"); -static const u8 sText_CourtChange[] = _("{B_ATK_NAME_WITH_PREFIX} swapped the battle\neffects affecting each side!"); -static const u8 sText_AttackerExpelledThePoison[] = _("{B_ATK_NAME_WITH_PREFIX} managed to\nexpel the poison!"); -static const u8 sText_AttackerShookItselfAwake[] = _("{B_ATK_NAME_WITH_PREFIX} shook itself awake!"); -static const u8 sText_AttackerBrokeThroughParalysis[] = _("{B_ATK_NAME_WITH_PREFIX} gathered all its energy\nto overcome its paralysis!"); -static const u8 sText_AttackerHealedItsBurn[] = _("{B_ATK_NAME_WITH_PREFIX} healed its burn with\nits sheer determination!"); -static const u8 sText_AttackerHealedItsFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} healed its frostbite with\nits sheer determination!"); //not used, "melted the ice" is used instead in PLA -static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melted the ice with\nits fiery determination!"); -static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out\nto show you its best side!"); -static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up all\nof its electricity!"); -static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1}\nwith its target!"); -static const u8 sText_BeingHitChargedPkmnWithPower[] = _("Being hit by {B_CURRENT_MOVE}\ncharged {B_DEF_NAME_WITH_PREFIX} with power!"); -static const u8 sText_SunlightActivatedAbility[] = _("The harsh sunlight activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}!"); -static const u8 sText_StatWasHeightened[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nwas heightened!"); -static const u8 sText_BoosterEnergyActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its\n{B_LAST_ITEM} to activate\l{B_SCR_ACTIVE_ABILITY}!"); -static const u8 sText_ElectricTerrainActivatedAbility[] = _("The Electric Terrain activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}!"); -static const u8 sText_AbilityWeakenedSurroundingMonsStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nweakened the {B_BUFF1} of\lall surrounding Pokémon!\p"); -static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} gained strength\nfrom the fallen!"); +static const u8 sText_CantEscapeDueToUsedMove[] = _("{B_ATK_NAME_WITH_PREFIX} can no longer escape because it used No Retreat!"); +static const u8 sText_PkmnBecameWeakerToFire[] = _("{B_DEF_NAME_WITH_PREFIX} became weaker to fire!"); +static const u8 sText_PkmnAboutToBeAttackedByItsItem[] = _("{B_DEF_NAME_WITH_PREFIX} is about to be attacked by its {B_BUFF1}!"); +static const u8 sText_CantEscapeBecauseOfCurrentMove[] = _("{B_DEF_NAME_WITH_PREFIX} can no longer escape because of Octolock!"); +static const u8 sText_NeutralizingGasEnters[] = _("Neutralizing gas filled the area!"); +static const u8 sText_NeutralizingGasOver[] = _("The effects of the neutralizing gas wore off!"); +static const u8 sText_PkmnTookTargetHigh[] = _("{B_ATK_NAME_WITH_PREFIX} took {B_DEF_NAME_WITH_PREFIX2} into the sky!"); +static const u8 sText_TargetTooHeavy[] = _("{B_DEF_NAME_WITH_PREFIX} is too heavy to be lifted!"); +static const u8 sText_MeteorBeamCharging[] = _("{B_ATK_NAME_WITH_PREFIX} is overflowing with space power!"); +static const u8 sText_HeatingUpBeak[] = _("{B_ATK_NAME_WITH_PREFIX} started heating up its beak!"); +static const u8 sText_CourtChange[] = _("{B_ATK_NAME_WITH_PREFIX} swapped the battle effects affecting each side of the field!"); +static const u8 sText_AttackerExpelledThePoison[] = _("{B_ATK_NAME_WITH_PREFIX} managed to expel the poison so you wouldn't worry!"); +static const u8 sText_AttackerShookItselfAwake[] = _("{B_ATK_NAME_WITH_PREFIX} shook itself awake so you wouldn't worry!"); +static const u8 sText_AttackerBrokeThroughParalysis[] = _("{B_ATK_NAME_WITH_PREFIX} gathered all its energy to break through its paralysis so you wouldn't worry!"); +static const u8 sText_AttackerHealedItsBurn[] = _("{B_ATK_NAME_WITH_PREFIX} cured its burn through sheer determination so you wouldn't worry!"); +static const u8 sText_AttackerHealedItsFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} cured its frostbite through sheer determination so you wouldn't worry!"); +static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melted the ice with its fiery determination so you wouldn't worry!"); +static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out so you wouldn't feel sad!"); +static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up all its electricity!"); +static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1} with its target!"); +static const u8 sText_BeingHitChargedPkmnWithPower[] = _("Being hit by {B_CURRENT_MOVE} charged {B_DEF_NAME_WITH_PREFIX2} with power!"); +static const u8 sText_SunlightActivatedAbility[] = _("The harsh sunlight activated {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s Protosynthesis!"); +static const u8 sText_StatWasHeightened[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} was heightened!"); +static const u8 sText_BoosterEnergyActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its {B_LAST_ITEM} to activate {B_SCR_ACTIVE_ABILITY}!"); +static const u8 sText_ElectricTerrainActivatedAbility[] = _("The Electric Terrain activated {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s Quark Drive!"); +static const u8 sText_AbilityWeakenedSurroundingMonsStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} weakened the {B_BUFF1} of all surrounding Pokémon!\p"); +static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} gained strength from the fallen!"); static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a shell trap!"); static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"); -static const u8 sText_SharpSteelFloats[] = _("Sharp-pointed steel floats\naround {B_DEF_TEAM2} team!"); -static const u8 sText_SharpSteelDmg[] = _("Sharp steel bit into {B_DEF_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnBlewAwaySharpSteel[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nsharp steel!"); -static const u8 sText_SharpSteelDisappearedFromTeam[] = _("The sharp steel disappeared from\nthe ground around {B_ATK_TEAM2} team!"); -static const u8 sText_TeamTrappedWithVines[] = _("{B_DEF_TEAM1} team got trapped\nwith vines!"); -static const u8 sText_PkmnHurtByVines[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by\nG-Max Vine Lash's ferocious beating!"); -static const u8 sText_TeamCaughtInVortex[] = _("{B_DEF_TEAM1} team got caught\nin a vortex of water!"); -static const u8 sText_PkmnHurtByVortex[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by\nG-Max Cannonade's vortex!"); -static const u8 sText_TeamSurroundedByFire[] = _("{B_DEF_TEAM1} team was surrounded\nby flames!"); -static const u8 sText_PkmnBurningUp[] = _("{B_ATK_NAME_WITH_PREFIX} is burning up\nwithin G-Max Wildfire's flames!"); -static const u8 sText_TeamSurroundedByRocks[] = _("{B_DEF_TEAM1} team was surrounded\nby rocks!"); -static const u8 sText_PkmnHurtByRocksThrown[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by\nrocks thrown out by G-Max Volcalith!"); -static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); -static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled\neffect wore off!"); -static const u8 sText_MoveBlockedByDynamax[] = _("The move was blocked by\nthe power of Dynamax!"); -static const u8 sText_PkmnRevivedReadyToFight[] = _("{B_BUFF1} was revived and\nis ready to fight again!"); -static const u8 sText_ItemRestoredSpeciesHealth[] = _("{B_BUFF1} had its\nHP restored!"); -static const u8 sText_ItemCuredSpeciesStatus[] = _("{B_BUFF1} had\nits status healed!"); -static const u8 sText_ItemRestoredSpeciesPP[] = _("{B_BUFF1} had its\nPP restored!"); -static const u8 sText_AtkTrappedDef[] = _("{B_ATK_NAME_WITH_PREFIX} trapped\nthe {B_DEF_NAME_WITH_PREFIX}!"); -static const u8 sText_MirrorHerbCopied[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its {B_LAST_ITEM}\nto mirror its opponent's stat changes!"); -static const u8 sText_PkmnItemMelted[] = _("{B_ATK_NAME_WITH_PREFIX} corroded\n{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); -static const u8 sText_UltraBurstReacting[] = _("Bright light is about to\nburst out of {B_ATK_NAME_WITH_PREFIX}!"); -static const u8 sText_UltraBurstCompleted[] = _("{B_ATK_NAME_WITH_PREFIX} regained its\ntrue power through Ultra Burst!"); -static const u8 sText_TeamGainedEXP[] = _("The rest of your team gained EXP.\nPoints thanks to the {B_LAST_ITEM}!\p"); +static const u8 sText_SharpSteelFloats[] = _("Sharp-pointed pieces of steel started floating around {B_DEF_TEAM2} Pokémon!"); +static const u8 sText_SharpSteelDmg[] = _("The sharp steel bit into {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnBlewAwaySharpSteel[] = _("{B_ATK_NAME_WITH_PREFIX} blew away sharp steel!"); +static const u8 sText_SharpSteelDisappearedFromTeam[] = _("The pieces of steel surrounding {B_ATK_TEAM2} Pokémon disappeared!"); +static const u8 sText_TeamTrappedWithVines[] = _("{B_DEF_TEAM1} Pokémon got trapped with vines!"); +static const u8 sText_PkmnHurtByVines[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by G-Max Vine Lash's ferocious beating!"); +static const u8 sText_TeamCaughtInVortex[] = _("{B_DEF_TEAM1} Pokémon got caught in a vortex of water!"); +static const u8 sText_PkmnHurtByVortex[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by G-Max Cannonade's vortex!"); +static const u8 sText_TeamSurroundedByFire[] = _("{B_DEF_TEAM1} Pokémon were surrounded by fire!"); +static const u8 sText_PkmnBurningUp[] = _("{B_ATK_NAME_WITH_PREFIX} is burning up within G-Max Wildfire's flames!"); +static const u8 sText_TeamSurroundedByRocks[] = _("{B_DEF_TEAM1} Pokémon became surrounded by rocks!"); +static const u8 sText_PkmnHurtByRocksThrown[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by rocks thrown out by G-Max Volcalith!"); +static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect itself and got hurt!"); +static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled effect wore off!"); +static const u8 sText_MoveBlockedByDynamax[] = _("The move was blocked by the power of Dynamax!"); +static const u8 sText_PkmnRevivedReadyToFight[] = _("{B_BUFF1} was revived and is ready to fight again!"); +static const u8 sText_ItemRestoredSpeciesHealth[] = _("{B_BUFF1} had its HP restored."); +static const u8 sText_ItemCuredSpeciesStatus[] = _("{B_BUFF1} had its status healed!"); +static const u8 sText_ItemRestoredSpeciesPP[] = _("{B_BUFF1} had its PP restored!"); +static const u8 sText_AtkTrappedDef[] = _("{B_ATK_NAME_WITH_PREFIX} trapped {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_MirrorHerbCopied[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its Mirror Herb to mirror its opponent's stat changes!"); +static const u8 sText_PkmnItemMelted[] = _("{B_ATK_NAME_WITH_PREFIX} corroded {B_DEF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"); +static const u8 sText_UltraBurstReacting[] = _("Bright light is about to burst out of {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_UltraBurstCompleted[] = _("{B_ATK_NAME_WITH_PREFIX} regained its true power through Ultra Burst!"); +static const u8 sText_TeamGainedEXP[] = _("The rest of your team gained Exp. Points thanks to the Exp. Share!\p"); static const u8 sText_CurrentMoveCantSelect[] = _("{B_BUFF1} cannot be used!\p"); static const u8 sText_TargetIsBeingSaltCured[] = _("{B_DEF_NAME_WITH_PREFIX} is being salt cured!"); static const u8 sText_TargetIsHurtBySaltCure[] = _("{B_DEF_NAME_WITH_PREFIX} is hurt by {B_BUFF1}!"); -static const u8 sText_TargetCoveredInStickyCandySyrup[] = _("{B_DEF_NAME_WITH_PREFIX} got covered\nin sticky syrup!"); -static const u8 sText_PkmnTellChillingReceptionJoke[] = _("{B_ATK_NAME_WITH_PREFIX} is preparing to tell a\nchillingly bad joke!"); -static const u8 sText_ZeroToHeroTransformation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} underwent a heroic\ntransformation!"); -static const u8 sText_CommanderActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was swallowed by Dondozo\nand became Dondozo's commander!"); -static const u8 sText_TheTwoMovesBecomeOne[] = _("The two moves become one!\nIt's a combined move!{PAUSE 16}"); -static const u8 sText_ARainbowAppearedOnSide[] = _("A rainbow appeared in the sky\non {B_ATK_TEAM2} team's side!"); -static const u8 sText_TheRainbowDisappeared[] = _("The rainbow on {B_ATK_TEAM2}\nside disappeared!"); -static const u8 sText_WaitingForPartnersMove[] = _("{B_ATK_NAME_WITH_PREFIX} is waiting\nfor {B_ATK_PARTNER_NAME}'s move…{PAUSE 16}"); -static const u8 sText_SeaOfFireEnvelopedSide[] = _("A sea of fire enveloped\n{B_DEF_TEAM2} team!"); -static const u8 sText_HurtByTheSeaOfFire[] = _("{B_ATK_TEAM1} {B_ATK_NAME_WITH_PREFIX} was hurt\nby the sea of fire!"); -static const u8 sText_TheSeaOfFireDisappeared[] = _("The sea of fire around {B_ATK_TEAM2}\nteam disappeared!"); -static const u8 sText_SwampEnvelopedSide[] = _("A swamp enveloped\n{B_DEF_TEAM2} team!"); -static const u8 sText_TheSwampDisappeared[] = _("The swamp around {B_ATK_TEAM2}\nteam disappeared!"); -static const u8 sText_HospitalityRestoration[] = _("{B_ATK_PARTNER_NAME} drank down all the\nmatcha that {B_ATK_NAME_WITH_PREFIX} made!"); -static const u8 sText_ElectroShotCharging[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nelectricity!"); -static const u8 sText_ItemWasUsedUp[] = _("The {B_LAST_ITEM}\nwas used up..."); -static const u8 sText_AttackerLostItsType[] = _("{B_ATK_NAME_WITH_PREFIX} lost\nits {B_BUFF1} type!"); -static const u8 sText_ShedItsTail[] = _("{B_ATK_NAME_WITH_PREFIX} shed its tail\nto create a decoy!"); -static const u8 sText_PkmnTerastallizedInto[] = _("{B_ATK_NAME_WITH_PREFIX} terastallized\ninto the {B_BUFF1} type!"); -static const u8 sText_SupersweetAromaWafts[] = _("A supersweet aroma is wafting from\nthe syrup covering {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_TargetCoveredInStickyCandySyrup[] = _("{B_DEF_NAME_WITH_PREFIX} got covered in sticky candy syrup!"); +static const u8 sText_PkmnTellChillingReceptionJoke[] = _("{B_ATK_NAME_WITH_PREFIX} is preparing to tell a chillingly bad joke!"); +static const u8 sText_ZeroToHeroTransformation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} underwent a heroic transformation!"); +static const u8 sText_CommanderActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was swallowed by Dondozo and became Dondozo's commander!"); +static const u8 sText_TheTwoMovesBecomeOne[] = _("The two moves have become one! It's a combined move!{PAUSE 16}"); +static const u8 sText_ARainbowAppearedOnSide[] = _("A rainbow appeared in the sky on {B_ATK_TEAM2} team's side!"); +static const u8 sText_TheRainbowDisappeared[] = _("The rainbow on {B_ATK_TEAM2} team's side disappeared!"); +static const u8 sText_WaitingForPartnersMove[] = _("{B_ATK_NAME_WITH_PREFIX} is waiting for {B_ATK_PARTNER_NAME}'s move…{PAUSE 16}"); +static const u8 sText_SeaOfFireEnvelopedSide[] = _("A sea of fire enveloped {B_DEF_TEAM2} team!"); +static const u8 sText_HurtByTheSeaOfFire[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by the sea of fire!"); +static const u8 sText_TheSeaOfFireDisappeared[] = _("The sea of fire around {B_ATK_TEAM2} team disappeared!"); +static const u8 sText_SwampEnvelopedSide[] = _("A swamp enveloped {B_DEF_TEAM2} team!"); +static const u8 sText_TheSwampDisappeared[] = _("The swamp around {B_ATK_TEAM2} team disappeared!"); +static const u8 sText_HospitalityRestoration[] = _("{B_ATK_PARTNER_NAME} drank down all the matcha that {B_ATK_NAME_WITH_PREFIX2} made!"); +static const u8 sText_ElectroShotCharging[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed electricity!"); +static const u8 sText_ItemWasUsedUp[] = _("The {B_LAST_ITEM} was used up…"); +static const u8 sText_AttackerLostItsType[] = _("{B_ATK_NAME_WITH_PREFIX} lost its {B_BUFF1} type!"); +static const u8 sText_ShedItsTail[] = _("{B_ATK_NAME_WITH_PREFIX} shed its tail to create a decoy!"); +static const u8 sText_PkmnTerastallizedInto[] = _("{B_ATK_NAME_WITH_PREFIX} terastallized into the {B_BUFF1} type!"); +static const u8 sText_SupersweetAromaWafts[] = _("A supersweet aroma is wafting from the syrup covering {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_TidyingUpComplete[] = _("Tidying up complete!"); -static const u8 sText_FickleBeamDoubled[] = _("{B_ATK_NAME_WITH_PREFIX} is going all\nout for this attack!"); +static const u8 sText_FickleBeamDoubled[] = _("{B_ATK_NAME_WITH_PREFIX} is going all out for this attack!"); +static const u8 sText_WagglingAFinger[] = _("Waggling a finger let it use {B_CURRENT_MOVE}!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { @@ -1561,6 +1577,14 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_POKEFLUTECATCHY - BATTLESTRINGS_TABLE_START] = sText_PlayedFluteCatchyTune, [STRINGID_POKEFLUTE - BATTLESTRINGS_TABLE_START] = sText_PlayedThe, [STRINGID_MONHEARINGFLUTEAWOKE - BATTLESTRINGS_TABLE_START] = sText_PkmnHearingFluteAwoke, + [STRINGID_SUNLIGHTISHARSH - BATTLESTRINGS_TABLE_START] = sText_SunlightIsHarsh, + [STRINGID_ITISHAILING - BATTLESTRINGS_TABLE_START] = sText_ItIsHailing, + [STRINGID_ITISSNOWING - BATTLESTRINGS_TABLE_START] = sText_ItIsSnowing, + [STRINGID_ISCOVEREDWITHGRASS - BATTLESTRINGS_TABLE_START] = sText_IsCoveredWithGrass, + [STRINGID_MISTSWIRLSAROUND - BATTLESTRINGS_TABLE_START] = sText_MistSwirlsAround, + [STRINGID_ELECTRICCURRENTISRUNNING - BATTLESTRINGS_TABLE_START] = sText_ElectricCurrentIsRunning, + [STRINGID_SEEMSWEIRD - BATTLESTRINGS_TABLE_START] = sText_SeemsWeird, + [STRINGID_WAGGLINGAFINGER - BATTLESTRINGS_TABLE_START] = sText_WagglingAFinger, }; const u16 gTrainerUsedItemStringIds[] = @@ -1742,9 +1766,9 @@ const u16 gReflectLightScreenSafeguardStringIds[] = { [B_MSG_SIDE_STATUS_FAILED] = STRINGID_BUTITFAILED, [B_MSG_SET_REFLECT_SINGLE] = STRINGID_PKMNRAISEDDEF, - [B_MSG_SET_REFLECT_DOUBLE] = STRINGID_PKMNRAISEDDEFALITTLE, + [B_MSG_SET_REFLECT_DOUBLE] = STRINGID_PKMNRAISEDDEF, [B_MSG_SET_LIGHTSCREEN_SINGLE] = STRINGID_PKMNRAISEDSPDEF, - [B_MSG_SET_LIGHTSCREEN_DOUBLE] = STRINGID_PKMNRAISEDSPDEFALITTLE, + [B_MSG_SET_LIGHTSCREEN_DOUBLE] = STRINGID_PKMNRAISEDSPDEF, [B_MSG_SET_SAFEGUARD] = STRINGID_PKMNCOVEREDBYVEIL, }; @@ -1951,7 +1975,7 @@ const u16 gWeatherStartsStringIds[] = [WEATHER_SUNNY_CLOUDS] = STRINGID_ITISRAINING, [WEATHER_SUNNY] = STRINGID_ITISRAINING, [WEATHER_RAIN] = STRINGID_ITISRAINING, - [WEATHER_SNOW] = (B_OVERWORLD_SNOW >= GEN_9 ? STRINGID_STARTEDSNOW : STRINGID_STARTEDHAIL), + [WEATHER_SNOW] = (B_OVERWORLD_SNOW >= GEN_9 ? STRINGID_ITISSNOWING : STRINGID_ITISHAILING), [WEATHER_RAIN_THUNDERSTORM] = STRINGID_ITISRAINING, [WEATHER_FOG_HORIZONTAL] = STRINGID_FOGISDEEP, [WEATHER_VOLCANIC_ASH] = STRINGID_ITISRAINING, @@ -1959,12 +1983,17 @@ const u16 gWeatherStartsStringIds[] = [WEATHER_FOG_DIAGONAL] = STRINGID_FOGISDEEP, [WEATHER_UNDERWATER] = STRINGID_ITISRAINING, [WEATHER_SHADE] = STRINGID_ITISRAINING, - [WEATHER_DROUGHT] = STRINGID_SUNLIGHTSTRONG, + [WEATHER_DROUGHT] = STRINGID_SUNLIGHTISHARSH, [WEATHER_DOWNPOUR] = STRINGID_ITISRAINING, [WEATHER_UNDERWATER_BUBBLES] = STRINGID_ITISRAINING, [WEATHER_ABNORMAL] = STRINGID_ITISRAINING }; +const u16 gTerrainStartsStringIds[] = +{ + STRINGID_MISTSWIRLSAROUND, STRINGID_ELECTRICCURRENTISRUNNING, STRINGID_ISCOVEREDWITHGRASS, STRINGID_SEEMSWEIRD, +}; + const u16 gPrimalWeatherBlocksStringIds[] = { [B_MSG_PRIMAL_WEATHER_FIZZLED_BY_RAIN] = STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN, @@ -2083,8 +2112,8 @@ const u8 gText_WhatWillPkmnDo[] = _("What will\n{B_BUFF1} do?"); const u8 gText_WhatWillPkmnDo2[] = _("What will\n{B_PLAYER_NAME} do?"); const u8 gText_WhatWillWallyDo[] = _("What will\nWALLY do?"); const u8 gText_LinkStandby[] = _("{PAUSE 16}Link standby…"); -const u8 gText_BattleMenu[] = _("FIGHT{CLEAR_TO 56}BAG\nPOKéMON{CLEAR_TO 56}RUN"); -const u8 gText_SafariZoneMenu[] = _("BALL{CLEAR_TO 56}{POKEBLOCK}\nGO NEAR{CLEAR_TO 56}RUN"); +const u8 gText_BattleMenu[] = _("Battle{CLEAR_TO 56}Bag\nPokémon{CLEAR_TO 56}Run"); +const u8 gText_SafariZoneMenu[] = _("Ball{CLEAR_TO 56}{POKEBLOCK}\nGo Near{CLEAR_TO 56}Run"); const u8 gText_MoveInterfacePP[] = _("PP "); const u8 gText_MoveInterfaceType[] = _("TYPE/"); const u8 gText_MoveInterfacePpType[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR4 DYNAMIC_COLOR5 DYNAMIC_COLOR6}PP\nTYPE/"); @@ -2104,7 +2133,7 @@ static const u8 *const sStatNamesTable2[] = gText_SpDef, gText_Defense, gText_Speed }; -const u8 gText_SafariBalls[] = _("{HIGHLIGHT DARK_GRAY}SAFARI BALLS"); +const u8 gText_SafariBalls[] = _("{HIGHLIGHT DARK_GRAY}Safari Balls"); const u8 gText_SafariBallLeft[] = _("{HIGHLIGHT DARK_GRAY}Left: $" "{HIGHLIGHT DARK_GRAY}"); const u8 gText_Sleep[] = _("sleep"); const u8 gText_Poison[] = _("poison"); @@ -2120,14 +2149,13 @@ const u8 gText_LineBreak[] = _("\l"); const u8 gText_NewLine[] = _("\n"); const u8 gText_Are[] = _("are"); const u8 gText_Are2[] = _("are"); -const u8 gText_BadEgg[] = _("Bad EGG"); +const u8 gText_BadEgg[] = _("Bad Egg"); const u8 gText_BattleWallyName[] = _("WALLY"); const u8 gText_Win[] = _("{HIGHLIGHT TRANSPARENT}Win"); const u8 gText_Loss[] = _("{HIGHLIGHT TRANSPARENT}Loss"); const u8 gText_Draw[] = _("{HIGHLIGHT TRANSPARENT}Draw"); static const u8 sText_SpaceIs[] = _(" is"); static const u8 sText_ApostropheS[] = _("'s"); - const u8 gText_BattleTourney[] = _("BATTLE TOURNEY"); static const u8 sText_Round1[] = _("Round 1"); static const u8 sText_Round2[] = _("Round 2"); @@ -2144,9 +2172,9 @@ const u8 *const gRoundsStringTable[DOME_ROUNDS_COUNT] = const u8 gText_TheGreatNewHope[] = _("The great new hope!\p"); const u8 gText_WillChampionshipDreamComeTrue[] = _("Will the championship dream come true?!\p"); -const u8 gText_AFormerChampion[] = _("A former CHAMPION!\p"); -const u8 gText_ThePreviousChampion[] = _("The previous CHAMPION!\p"); -const u8 gText_TheUnbeatenChampion[] = _("The unbeaten CHAMPION!\p"); +const u8 gText_AFormerChampion[] = _("A former champion!\p"); +const u8 gText_ThePreviousChampion[] = _("The previous champion!\p"); +const u8 gText_TheUnbeatenChampion[] = _("The unbeaten champion!\p"); const u8 gText_PlayerMon1Name[] = _("{B_PLAYER_MON1_NAME}"); const u8 gText_Vs[] = _("VS"); const u8 gText_OpponentMon1Name[] = _("{B_OPPONENT_MON1_NAME}"); @@ -2154,15 +2182,15 @@ const u8 gText_Mind[] = _("Mind"); const u8 gText_Skill[] = _("Skill"); const u8 gText_Body[] = _("Body"); const u8 gText_Judgment[] = _("{B_BUFF1}{CLEAR 13}Judgment{CLEAR 13}{B_BUFF2}"); -static const u8 sText_TwoTrainersSentPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!\p{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_OPPONENT_MON2_NAME}!"); -static const u8 sText_Trainer2SentOutPkmn[] = _("{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_BUFF1}!"); -static const u8 sText_TwoTrainersWantToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwant to battle!\p"); -static const u8 sText_InGamePartnerSentOutZGoN[] = _("{B_PARTNER_CLASS} {B_PARTNER_NAME} sent\nout {B_PLAYER_MON2_NAME}!\lGo, {B_PLAYER_MON1_NAME}!"); -static const u8 sText_TwoInGameTrainersDefeated[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwere defeated!\p"); +static const u8 sText_TwoTrainersSentPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent out {B_OPPONENT_MON1_NAME}!\p{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent out {B_OPPONENT_MON2_NAME}!"); +static const u8 sText_Trainer2SentOutPkmn[] = _("{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent out {B_BUFF1}!"); +static const u8 sText_TwoTrainersWantToBattle[] = _("You are challenged by {B_TRAINER1_CLASS} {B_TRAINER1_NAME} and {B_TRAINER2_CLASS} {B_TRAINER2_NAME}!\p"); +static const u8 sText_InGamePartnerSentOutZGoN[] = _("{B_PARTNER_CLASS} {B_PARTNER_NAME} sent out {B_PLAYER_MON2_NAME}! Go, {B_PLAYER_MON1_NAME}!"); +static const u8 sText_TwoInGameTrainersDefeated[] = _("You defeated {B_TRAINER1_CLASS} {B_TRAINER1_NAME} and {B_TRAINER2_CLASS} {B_TRAINER2_NAME}!\p"); static const u8 sText_Trainer2LoseText[] = _("{B_TRAINER2_LOSE_TEXT}"); -static const u8 sText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} appears incapable\nof using its power!"); -static const u8 sText_GlintAppearsInEye[] = _("A glint appears in\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s eyes!"); -static const u8 sText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting into\nposition!"); +static const u8 sText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} appears incapable of using its power!"); +static const u8 sText_GlintAppearsInEye[] = _("A glint appears in {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s eyes!"); +static const u8 sText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting into position!"); static const u8 sText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply!"); static const u8 sText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more!"); @@ -2174,18 +2202,18 @@ const u16 gBattlePalaceFlavorTextTable[] = [B_MSG_EAGER_FOR_MORE] = STRINGID_PKMNEAGERFORMORE, }; -static const u8 sText_RefIfNothingIsDecided[] = _("REFEREE: If nothing is decided in\n3 turns, we will go to judging!"); -static const u8 sText_RefThatsIt[] = _("REFEREE: That's it! We will now go to\njudging to determine the winner!"); -static const u8 sText_RefJudgeMind[] = _("REFEREE: Judging category 1, Mind!\nThe POKéMON showing the most guts!\p"); -static const u8 sText_RefJudgeSkill[] = _("REFEREE: Judging category 2, Skill!\nThe POKéMON using moves the best!\p"); -static const u8 sText_RefJudgeBody[] = _("REFEREE: Judging category 3, Body!\nThe POKéMON with the most vitality!\p"); -static const u8 sText_RefPlayerWon[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_PLAYER_NAME}'s {B_PLAYER_MON1_NAME}!\p"); -static const u8 sText_RefOpponentWon[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_TRAINER1_NAME}'s {B_OPPONENT_MON1_NAME}!\p"); -static const u8 sText_RefDraw[] = _("REFEREE: Judgment: 3 to 3!\nWe have a draw!\p"); -static const u8 sText_DefeatedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} defeated the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE's decision!"); -static const u8 sText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} lost to the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE's decision!"); -static const u8 sText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} tied the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE's decision!"); -static const u8 sText_RefCommenceBattle[] = _("REFEREE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}!\nCommence battling!"); +static const u8 sText_RefIfNothingIsDecided[] = _("REFEREE: If nothing is decided in 3 turns, we will go to judging!"); +static const u8 sText_RefThatsIt[] = _("REFEREE: That's it! We will now go to judging to determine the winner!"); +static const u8 sText_RefJudgeMind[] = _("REFEREE: Judging category 1, Mind! The POKéMON showing the most guts!\p"); +static const u8 sText_RefJudgeSkill[] = _("REFEREE: Judging category 2, Skill! The POKéMON using moves the best!\p"); +static const u8 sText_RefJudgeBody[] = _("REFEREE: Judging category 3, Body! The POKéMON with the most vitality!\p"); +static const u8 sText_RefPlayerWon[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}! The winner is {B_PLAYER_NAME}'s {B_PLAYER_MON1_NAME}!\p"); +static const u8 sText_RefOpponentWon[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}! The winner is {B_TRAINER1_NAME}'s {B_OPPONENT_MON1_NAME}!\p"); +static const u8 sText_RefDraw[] = _("REFEREE: Judgment: 3 to 3! We have a draw!\p"); +static const u8 sText_DefeatedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} defeated the opponent {B_OPPONENT_MON1_NAME} in a REFEREE's decision!"); +static const u8 sText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} lost to the opponent {B_OPPONENT_MON1_NAME} in a REFEREE's decision!"); +static const u8 sText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} tied the opponent {B_OPPONENT_MON1_NAME} in a REFEREE's decision!"); +static const u8 sText_RefCommenceBattle[] = _("REFEREE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}! Commence battling!"); const u8 *const gRefereeStringsTable[] = { @@ -2200,17 +2228,17 @@ const u8 *const gRefereeStringsTable[] = [B_MSG_REF_COMMENCE_BATTLE] = sText_RefCommenceBattle, }; -static const u8 sText_QuestionForfeitMatch[] = _("Would you like to forfeit the match\nand quit now?"); -static const u8 sText_ForfeitedMatch[] = _("{B_PLAYER_NAME} forfeited the match!"); +static const u8 sText_QuestionForfeitMatch[] = _("Would you like to forfeit the match and quit now?"); +static const u8 sText_ForfeitedMatch[] = _("The match was forfeited."); static const u8 sText_Trainer1WinText[] = _("{B_TRAINER1_WIN_TEXT}"); static const u8 sText_Trainer2WinText[] = _("{B_TRAINER2_WIN_TEXT}"); static const u8 sText_Trainer1Fled[] = _( "{PLAY_SE SE_FLEE}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!"); -static const u8 sText_PlayerLostAgainstTrainer1[] = _("Player lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); -static const u8 sText_PlayerBattledToDrawTrainer1[] = _("Player battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); -const u8 gText_RecordBattleToPass[] = _("Would you like to record your battle\non your FRONTIER PASS?"); -const u8 gText_BattleRecordedOnPass[] = _("{B_PLAYER_NAME}'s battle result was recorded\non the FRONTIER PASS."); -static const u8 sText_LinkTrainerWantsToBattlePause[] = _("{B_LINK_OPPONENT1_NAME}\nwants to battle!{PAUSE 49}"); -static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}\nwant to battle!{PAUSE 49}"); +static const u8 sText_PlayerLostAgainstTrainer1[] = _("You lost to {B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); +static const u8 sText_PlayerBattledToDrawTrainer1[] = _("You battled to a draw against {B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); +const u8 gText_RecordBattleToPass[] = _("Would you like to record your battle\non your Frontier Pass?"); +const u8 gText_BattleRecordedOnPass[] = _("{B_PLAYER_NAME}'s battle result was recorded\non the Frontier Pass."); +static const u8 sText_LinkTrainerWantsToBattlePause[] = _("You are challenged by {B_LINK_OPPONENT1_NAME}!\p"); +static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("You are challenged by {B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!\p"); static const u8 sText_Your1[] = _("Your"); static const u8 sText_Opposing1[] = _("The opposing"); static const u8 sText_Your2[] = _("your"); @@ -3064,7 +3092,19 @@ void BufferStringBattle(u16 stringID, u32 battler) u32 BattleStringExpandPlaceholdersToDisplayedString(const u8 *src) { - return BattleStringExpandPlaceholders(src, gDisplayedStringBattle); +#ifndef NDEBUG + u32 j, strWidth; + u32 dstID = BattleStringExpandPlaceholders(src, gDisplayedStringBattle, sizeof(gDisplayedStringBattle)); + for (j = 1;; j++) + { + strWidth = GetStringLineWidth(0, gDisplayedStringBattle, 0, j, sizeof(gDisplayedStringBattle), TRUE); + if (strWidth == 0) + break; + } + return dstID; +#else + return BattleStringExpandPlaceholders(src, gDisplayedStringBattle, sizeof(gDisplayedStringBattle)); +#endif } static const u8 *TryGetStatusString(u8 *src) @@ -3108,8 +3148,8 @@ static void GetBattlerNick(u32 battler, u8 *dst) StringGet_Nickname(dst); } -#define HANDLE_NICKNAME_STRING_CASE(battler) \ - if (GetBattlerSide(battler) != B_SIDE_PLAYER) \ +#define HANDLE_NICKNAME_STRING_CASE(battler) \ + if (GetBattlerSide(battler) != B_SIDE_PLAYER) \ { \ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \ toCpy = sText_FoePkmnPrefix; \ @@ -3122,7 +3162,24 @@ static void GetBattlerNick(u32 battler, u8 *dst) toCpy++; \ } \ } \ - GetBattlerNick(battler, text); \ + GetBattlerNick(battler, text); \ + toCpy = text; + +#define HANDLE_NICKNAME_STRING_LOWERCASE(battler) \ + if (GetBattlerSide(battler) != B_SIDE_PLAYER) \ + { \ + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \ + toCpy = sText_FoePkmnPrefixLower; \ + else \ + toCpy = sText_WildPkmnPrefixLower; \ + while (*toCpy != EOS) \ + { \ + dst[dstID] = *toCpy; \ + dstID++; \ + toCpy++; \ + } \ + } \ + GetBattlerNick(battler, text); \ toCpy = text; static const u8 *BattleStringGetOpponentNameByTrainerId(u16 trainerId, u8 *text, u8 multiplayerId, u8 battler) @@ -3268,22 +3325,38 @@ static const u8 *BattleStringGetOpponentClassByTrainerId(u16 trainerId) // This ensures that custom Enigma Berry names will fit in the text buffer at the top of BattleStringExpandPlaceholders. STATIC_ASSERT(BERRY_NAME_LENGTH + ARRAY_COUNT(sText_BerrySuffix) <= ITEM_NAME_LENGTH, BerryNameTooLong); -u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) +u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) { u32 dstID = 0; // if they used dstID, why not use srcID as well? const u8 *toCpy = NULL; + u32 lastValidSkip = 0; + u32 toCpyWidth = 0; + u32 dstWidth = 0; // This buffer may hold either the name of a trainer, Pokémon, or item. u8 text[max(max(max(32, TRAINER_NAME_LENGTH + 1), POKEMON_NAME_LENGTH + 1), ITEM_NAME_LENGTH)]; u8 multiplayerId; + u8 fontId = FONT_NORMAL; + s16 letterSpacing = 0; + u32 lineNum = 1; if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) multiplayerId = gRecordedBattleMultiplayerId; else multiplayerId = GetMultiplayerId(); + // Clear destination first + while (dstID < dstSize) + { + dst[dstID] = EOS; + dstID++; + } + + dstID = 0; while (*src != EOS) { toCpy = NULL; + dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize, FALSE); + if (*src == PLACEHOLDER_BEGIN) { src++; @@ -3658,10 +3731,30 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) else toCpy = sText_Opposing2; break; + case B_TXT_ATK_NAME_WITH_PREFIX2: + HANDLE_NICKNAME_STRING_LOWERCASE(gBattlerAttacker) + break; + case B_TXT_DEF_NAME_WITH_PREFIX2: + HANDLE_NICKNAME_STRING_LOWERCASE(gBattlerTarget) + break; + case B_TXT_EFF_NAME_WITH_PREFIX2: + HANDLE_NICKNAME_STRING_LOWERCASE(gEffectBattler) + break; + case B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX2: + HANDLE_NICKNAME_STRING_LOWERCASE(gBattleScripting.battler) + break; } if (toCpy != NULL) { + toCpyWidth = GetStringLineWidth(fontId, toCpy, letterSpacing, 1, dstSize, FALSE); + + if (dstWidth + toCpyWidth > BATTLE_MSG_MAX_WIDTH) + { + dst[lastValidSkip] = lineNum == 1 ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL; + dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize, FALSE); + lineNum++; + } while (*toCpy != EOS) { dst[dstID] = *toCpy; @@ -3681,7 +3774,26 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) } else { + toCpyWidth = GetGlyphWidth(dst[dstID + 1], FALSE, fontId); dst[dstID] = *src; + if (dstWidth + toCpyWidth > BATTLE_MSG_MAX_WIDTH) + { + dst[lastValidSkip] = lineNum == 1 ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL; + lineNum++; + dstWidth = 0; + } + switch (*src) + { + case CHAR_NEWLINE: + case CHAR_PROMPT_SCROLL: + case CHAR_PROMPT_CLEAR: + lineNum++; + dstWidth = 0; + //fallthrough + case CHAR_SPACE: + lastValidSkip = dstID; + break; + } dstID++; } src++; @@ -3766,16 +3878,27 @@ void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) srcID += 2; break; case B_BUFF_MON_NICK_WITH_PREFIX: // poke nick with prefix + case B_BUFF_MON_NICK_WITH_PREFIX_LOWER: // poke nick with lowercase prefix if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER) { GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, nickname); } else { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - StringAppend(dst, sText_FoePkmnPrefix); + if (src[srcID] == B_BUFF_MON_NICK_WITH_PREFIX_LOWER) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + StringAppend(dst, sText_FoePkmnPrefixLower); + else + StringAppend(dst, sText_WildPkmnPrefixLower); + } else - StringAppend(dst, sText_WildPkmnPrefix); + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + StringAppend(dst, sText_FoePkmnPrefix); + else + StringAppend(dst, sText_WildPkmnPrefix); + } GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, nickname); } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 8fda76ee58..005ee855a5 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12770,8 +12770,8 @@ static void Cmd_metronome(void) #endif gCurrentMove = RandomUniformExcept(RNG_METRONOME, 1, moveCount - 1, InvalidMetronomeMove); - gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; SetAtkCancellerForCalledMove(); + PrepareStringBattle(STRINGID_WAGGLINGAFINGER, gBattlerAttacker); gBattlescriptCurrInstr = GET_MOVE_BATTLESCRIPT(gCurrentMove); gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); } diff --git a/src/battle_util.c b/src/battle_util.c index ed5254c396..880c066cf9 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4469,7 +4469,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 RecordAbilityBattle(chosenTarget, gLastUsedAbility); // Record the opposing battler has this ability gBattlerAbility = battler; - PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, chosenTarget, gBattlerPartyIndexes[chosenTarget]) + PREPARE_MON_NICK_WITH_PREFIX_LOWER_BUFFER(gBattleTextBuff1, chosenTarget, gBattlerPartyIndexes[chosenTarget]) PREPARE_ABILITY_BUFFER(gBattleTextBuff2, gLastUsedAbility) } } diff --git a/src/mini_printf.c b/src/mini_printf.c index 57ae3e58b0..c5b1e09bdc 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -37,6 +37,7 @@ #include "gba/defines.h" #include "config/general.h" #include "constants/characters.h" +#include "string_util.h" #ifndef NDEBUG diff --git a/src/pokemon.c b/src/pokemon.c index 9ab0991518..c5dcbb1903 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5925,7 +5925,7 @@ void SetMonPreventsSwitchingString(void) PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[gBattlerInMenuId])) - BattleStringExpandPlaceholders(gText_PkmnsXPreventsSwitching, gStringVar4); + BattleStringExpandPlaceholders(gText_PkmnsXPreventsSwitching, gStringVar4, sizeof(gStringVar4)); } static s32 GetWildMonTableIdInAlteringCave(u16 species) diff --git a/src/string_util.c b/src/string_util.c index 0fde2cb861..fd4a0861ee 100644 --- a/src/string_util.c +++ b/src/string_util.c @@ -122,6 +122,28 @@ u16 StringLength(const u8 *str) return length; } +u16 StringLineLength(const u8 *str) +{ + u16 i = 0, length = 0; + + while (str[length] != EOS) + { + switch (str[length]) + { + case CHAR_PROMPT_SCROLL: + case CHAR_PROMPT_CLEAR: + case CHAR_NEWLINE: + return length; + default: + i++; + length++; + break; + } + } + + return length; +} + s32 StringCompare(const u8 *str1, const u8 *str2) { while (*str1 == *str2) diff --git a/src/text.c b/src/text.c index e84d21677d..8a5b7b0cd3 100644 --- a/src/text.c +++ b/src/text.c @@ -1423,6 +1423,16 @@ static u32 (*GetFontWidthFunc(u8 fontId))(u16, bool32) return NULL; } +s32 GetGlyphWidth(u16 glyphId, bool32 isJapanese, u8 fontId) +{ + u32 (*func)(u16 fontId, bool32 isJapanese); + + func = GetFontWidthFunc(fontId); + if (func == NULL) + return 0; + return func(glyphId, isJapanese); +} + s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) { bool32 isJapanese; @@ -1595,6 +1605,32 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) return width; } +s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum, u32 strSize, bool32 printDebug) +{ + u32 strWidth = 0, strLen, currLine; + u8 strCopy[strSize]; + + for (currLine = 1; currLine <= lineNum; currLine++) + { + strWidth = GetStringWidth(fontId, str, letterSpacing); + strLen = StringLineLength(str); + memset(strCopy, EOS, strSize); + if (currLine == lineNum && strLen != 0) + { + StringCopyN(strCopy, str, strLen); + strWidth = GetStringWidth(fontId, strCopy, letterSpacing); + strLen = StringLineLength(strCopy); + StringAppend(strCopy, gText_EmptyString3); + #ifndef NDEBUG + if (printDebug && strWidth != 0) + DebugPrintf(" Line %d, len:%d, width:%d, \"%S\"", currLine, strLen, strWidth, strCopy); + #endif + } + str += strLen + 1; + } + return strWidth; +} + u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str) { u8 shadowColor; diff --git a/test/battle/ability/aftermath.c b/test/battle/ability/aftermath.c index 5cfd5ef034..119c3bbec4 100644 --- a/test/battle/ability/aftermath.c +++ b/test/battle/ability/aftermath.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Aftermath damages the attacker by 1/4th of its max HP if fai } WHEN { TURN {MOVE(opponent, MOVE_TACKLE);} } SCENE { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); MESSAGE("Voltorb fainted!"); ABILITY_POPUP(player, ABILITY_AFTERMATH); diff --git a/test/battle/ability/anger_point.c b/test/battle/ability/anger_point.c index ddfa3c841d..b803b40f3f 100644 --- a/test/battle/ability/anger_point.c +++ b/test/battle/ability/anger_point.c @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Anger Point does not trigger when already at maximum Attack } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Primeape cut its own HP and maximized ATTACK!"); + MESSAGE("Primeape cut its own HP and maximized its Attack!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FROST_BREATH, opponent); MESSAGE("A critical hit!"); NONE_OF { @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Anger Point does not trigger when a substitute takes the hit TURN { MOVE(player, MOVE_SUBSTITUTE); MOVE(opponent, MOVE_FROST_BREATH); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); - MESSAGE("Primeape made a SUBSTITUTE!"); + MESSAGE("Primeape put in a substitute!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FROST_BREATH, opponent); MESSAGE("A critical hit!"); NONE_OF { diff --git a/test/battle/ability/bad_dreams.c b/test/battle/ability/bad_dreams.c index 312b9dc695..8a1d3669a2 100644 --- a/test/battle/ability/bad_dreams.c +++ b/test/battle/ability/bad_dreams.c @@ -15,13 +15,13 @@ SINGLE_BATTLE_TEST("Bad Dreams causes the sleeping enemy Pokemon to lose 1/8 of } SCENE { if (status == STATUS1_SLEEP) { ABILITY_POPUP(player, ABILITY_BAD_DREAMS); - MESSAGE("Foe Wobbuffet is tormented!"); + MESSAGE("The opposing Wobbuffet is tormented!"); HP_BAR(opponent); } else { NONE_OF { ABILITY_POPUP(player, ABILITY_BAD_DREAMS); - MESSAGE("Foe Wobbuffet is tormented!"); + MESSAGE("The opposing Wobbuffet is tormented!"); HP_BAR(opponent); }; } @@ -115,11 +115,11 @@ DOUBLE_BATTLE_TEST("Bad Dreams faints both sleeping Pokemon on opponent side") TURN {SEND_OUT(opponentLeft, 2); SEND_OUT(opponentRight, 3);} } SCENE { ABILITY_POPUP(playerLeft, ABILITY_BAD_DREAMS); - MESSAGE("Foe Wobbuffet is tormented!"); + MESSAGE("The opposing Wobbuffet is tormented!"); HP_BAR(opponentLeft); - MESSAGE("Foe Wobbuffet fainted!"); - MESSAGE("Foe Wobbuffet is tormented!"); + MESSAGE("The opposing Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet is tormented!"); HP_BAR(opponentRight); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); } } diff --git a/test/battle/ability/battle_bond.c b/test/battle/ability/battle_bond.c index 5f2b66593a..f61a6d171c 100644 --- a/test/battle/ability/battle_bond.c +++ b/test/battle/ability/battle_bond.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Battle Bond does not transform species other than Greninja") TURN { MOVE(player, MOVE_WATER_GUN); SEND_OUT(opponent, 1); } } SCENE { HP_BAR(opponent); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); NONE_OF { ABILITY_POPUP(player, ABILITY_BATTLE_BOND); MESSAGE("Wobbuffet became fully charged due to its bond with its trainer!"); @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Battle Bond transforms player's Greninja - Singles") } SCENE { HP_BAR(opponent); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); if (monsCountOpponent != 1) { ABILITY_POPUP(player, ABILITY_BATTLE_BOND); MESSAGE("Greninja became fully charged due to its bond with its trainer!"); @@ -104,12 +104,12 @@ SINGLE_BATTLE_TEST("Battle Bond transforms opponent's Greninja - Singles") MESSAGE("Wobbuffet fainted!"); if (monsCountPlayer != 1) { ABILITY_POPUP(opponent, ABILITY_BATTLE_BOND); - MESSAGE("Foe Greninja became fully charged due to its bond with its trainer!"); - MESSAGE("Foe Greninja became Ash-Greninja!"); + MESSAGE("The opposing Greninja became fully charged due to its bond with its trainer!"); + MESSAGE("The opposing Greninja became Ash-Greninja!"); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_BATTLE_BOND); - MESSAGE("Foe Greninja became fully charged due to its bond with its trainer!"); + MESSAGE("The opposing Greninja became fully charged due to its bond with its trainer!"); } } } FINALLY { diff --git a/test/battle/ability/beads_of_ruin.c b/test/battle/ability/beads_of_ruin.c index bb05031fe3..bbc71f6c2b 100644 --- a/test/battle/ability/beads_of_ruin.c +++ b/test/battle/ability/beads_of_ruin.c @@ -70,6 +70,6 @@ SINGLE_BATTLE_TEST("Beads of Ruin's message displays correctly after all battler SEND_IN_MESSAGE("Wobbuffet"); MESSAGE("2 sent out Chi-Yu!"); ABILITY_POPUP(opponent, ABILITY_BEADS_OF_RUIN); - MESSAGE("Foe Chi-Yu's Beads of Ruin weakened the Sp. Def of all surrounding Pokémon!"); + MESSAGE("The opposing Chi-Yu's Beads of Ruin weakened the Sp. Def of all surrounding Pokémon!"); } } diff --git a/test/battle/ability/clear_body.c b/test/battle/ability/clear_body.c index dc82be67b4..1e955431a1 100644 --- a/test/battle/ability/clear_body.c +++ b/test/battle/ability/clear_body.c @@ -26,11 +26,11 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke prevent intimid } ABILITY_POPUP(opponent, ability); if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); else - MESSAGE("Foe Metang's Clear Body prevents stat loss!"); + MESSAGE("The opposing Metang's Clear Body prevents stat loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); @@ -76,11 +76,11 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke prevent stat st } ABILITY_POPUP(opponent, ability); if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); else - MESSAGE("Foe Metang's Clear Body prevents stat loss!"); + MESSAGE("The opposing Metang's Clear Body prevents stat loss!"); } } @@ -104,11 +104,11 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke prevent Sticky } ABILITY_POPUP(opponent, ability); if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); else - MESSAGE("Foe Metang's Clear Body prevents stat loss!"); + MESSAGE("The opposing Metang's Clear Body prevents stat loss!"); } } @@ -128,9 +128,9 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent s ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPERPOWER, opponent); NONE_OF { ABILITY_POPUP(opponent, ability); - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); - MESSAGE("Foe Metang's Clear Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); + MESSAGE("The opposing Metang's Clear Body prevents stat loss!"); } } } @@ -181,15 +181,15 @@ SINGLE_BATTLE_TEST("Mold Breaker, Teravolt, and Turboblaze ignore Clear Body and if (ability == ABILITY_FULL_METAL_BODY){ // Full Metal Body can't be ignored by breaker abilities NOT ANIMATION(ANIM_TYPE_MOVE, move, player); ABILITY_POPUP(opponent, ability); - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); } else{ ANIMATION(ANIM_TYPE_MOVE, move, player); NONE_OF { ABILITY_POPUP(opponent, ability); - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); - MESSAGE("Foe Metang's Clear Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); + MESSAGE("The opposing Metang's Clear Body prevents stat loss!"); } } } @@ -220,18 +220,18 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent S if (heldItem == ITEM_IRON_BALL) { MESSAGE("Wobbuffet used Celebrate!"); if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); else - MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); } else { if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); else - MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); } } @@ -253,22 +253,22 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent S TURN { MOVE(player, MOVE_THUNDER_WAVE); } } SCENE { if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); else - MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); MESSAGE("Wobbuffet used Thunder Wave!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_WAVE, player); NOT ABILITY_POPUP(opponent, ability); MESSAGE("Wobbuffet used Thunder Wave!"); ONE_OF { - MESSAGE("Foe Metang used Celebrate!"); - MESSAGE("Foe Metang is paralyzed! It can't move!"); - MESSAGE("Foe Solgaleo used Celebrate!"); - MESSAGE("Foe Solgaleo is paralyzed! It can't move!"); - MESSAGE("Foe Torkoal used Celebrate!"); - MESSAGE("Foe Torkoal is paralyzed! It can't move!"); + MESSAGE("The opposing Metang used Celebrate!"); + MESSAGE("The opposing Metang couldn't move because it's paralyzed!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo couldn't move because it's paralyzed!"); + MESSAGE("The opposing Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal couldn't move because it's paralyzed!"); } } } @@ -319,11 +319,11 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent r ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player); ABILITY_POPUP(opponent, ability); if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); else - MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); } } @@ -351,16 +351,16 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent T NOT ABILITY_POPUP(opponent, ability); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOPSY_TURVY, player); if (ability == ABILITY_FULL_METAL_BODY) { - MESSAGE("Foe Solgaleo used Celebrate!"); - MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); } else if (ability == ABILITY_WHITE_SMOKE) { - MESSAGE("Foe Torkoal used Celebrate!"); - MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); } else { - MESSAGE("Foe Metang used Celebrate!"); - MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); } MESSAGE("Wobbuffet used Scary Face!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player); @@ -387,28 +387,28 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent S TURN{ } } SCENE { if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo used Agility!"); + MESSAGE("The opposing Solgaleo used Agility!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal used Agility!"); + MESSAGE("The opposing Torkoal used Agility!"); else - MESSAGE("Foe Metang used Agility!"); + MESSAGE("The opposing Metang used Agility!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_AGILITY, opponent); MESSAGE("Wobbuffet used Celebrate!"); if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); else - MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); MESSAGE("Wobbuffet used Spectral Thief!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, player); NOT ABILITY_POPUP(opponent, ability); MESSAGE("Wobbuffet used Celebrate!"); if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); else - MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); } } diff --git a/test/battle/ability/cloud_nine.c b/test/battle/ability/cloud_nine.c index 887769a5ec..fb87b7f2ba 100644 --- a/test/battle/ability/cloud_nine.c +++ b/test/battle/ability/cloud_nine.c @@ -15,16 +15,16 @@ SINGLE_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but witho TURN {} } SCENE { ABILITY_POPUP(player, ability); - MESSAGE("The effects of weather disappeared."); - MESSAGE("Foe Wobbuffet used Sandstorm!"); - MESSAGE("The sandstorm rages."); + MESSAGE("The effects of the weather disappeared."); + MESSAGE("The opposing Wobbuffet used Sandstorm!"); + MESSAGE("The sandstorm is raging."); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); NONE_OF { HP_BAR(player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!"); + MESSAGE("The opposing Wobbuffet is buffeted by the sandstorm!"); } - MESSAGE("The sandstorm rages."); + MESSAGE("The sandstorm is raging."); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); } } diff --git a/test/battle/ability/color_change.c b/test/battle/ability/color_change.c index 86c009e8ac..d3a6489f00 100644 --- a/test/battle/ability/color_change.c +++ b/test/battle/ability/color_change.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Color Change changes the type of a Pokemon being hit by a mo } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Wobbuffet's Color Change made it the Normal type!"); + MESSAGE("The opposing Wobbuffet's Color Change made it the Normal type!"); } } @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Color Change does not change the type when hit by a move tha ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHO_CUT, player); NONE_OF { ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Wobbuffet's Color Change made it the Normal type!"); + MESSAGE("The opposing Wobbuffet's Color Change made it the Normal type!"); } } } @@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Color Change does not change the type of a dual-type Pokemon ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHO_CUT, player); NONE_OF { ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Xatu's Color Change made it the Psychic type!"); + MESSAGE("The opposing Xatu's Color Change made it the Psychic type!"); } } } @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Color Change does not change the type of a dual-type Pokemon ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHO_CUT, player); NONE_OF { ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Slowbro's Color Change made it the Psychic type!"); + MESSAGE("The opposing Slowbro's Color Change made it the Psychic type!"); } } } @@ -73,7 +73,7 @@ SINGLE_BATTLE_TEST("Color Change changes the user to Electric type if hit by a m } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHO_CUT, player); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Wobbuffet's Color Change made it the Electric type!"); + MESSAGE("The opposing Wobbuffet's Color Change made it the Electric type!"); } } @@ -88,9 +88,9 @@ SINGLE_BATTLE_TEST("Color Change changes the type when a Pokemon is hit by Futur TURN { } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); - MESSAGE("Foe Snorlax took the Future Sight attack!"); + MESSAGE("The opposing Snorlax took the Future Sight attack!"); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Snorlax's Color Change made it the Psychic type!"); + MESSAGE("The opposing Snorlax's Color Change made it the Psychic type!"); } } @@ -105,9 +105,9 @@ SINGLE_BATTLE_TEST("Color Change changes the type when a Pokemon is hit by Doom TURN { } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOOM_DESIRE, player); - MESSAGE("Foe Wobbuffet took the Doom Desire attack!"); + MESSAGE("The opposing Wobbuffet took the Doom Desire attack!"); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Wobbuffet's Color Change made it the Steel type!"); + MESSAGE("The opposing Wobbuffet's Color Change made it the Steel type!"); } } @@ -123,10 +123,10 @@ SINGLE_BATTLE_TEST("Color Change changes the type to Electric when a Pokemon is TURN { MOVE(opponent, MOVE_ELECTRIFY); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); - MESSAGE("Foe Blastoise took the Future Sight attack!"); + MESSAGE("The opposing Blastoise took the Future Sight attack!"); MESSAGE("It's super effective!"); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Blastoise's Color Change made it the Electr type!"); + MESSAGE("The opposing Blastoise's Color Change made it the Electr type!"); } } @@ -141,8 +141,8 @@ SINGLE_BATTLE_TEST("Color Change changes the type to Normal when a Pokemon is hi TURN { } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); - MESSAGE("Foe Blastoise took the Future Sight attack!"); + MESSAGE("The opposing Blastoise took the Future Sight attack!"); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Blastoise's Color Change made it the Normal type!"); + MESSAGE("The opposing Blastoise's Color Change made it the Normal type!"); } } diff --git a/test/battle/ability/comatose.c b/test/battle/ability/comatose.c index cc65e9afac..b23a6ca85f 100644 --- a/test/battle/ability/comatose.c +++ b/test/battle/ability/comatose.c @@ -45,8 +45,8 @@ SINGLE_BATTLE_TEST("Comatose may be suppressed if pokemon transformed into a pok } SCENE { MESSAGE("Komala is drowsing!"); MESSAGE("Komala used Gastro Acid!"); - MESSAGE("Foe Ditto used Transform!"); - MESSAGE("Foe Ditto transformed into Komala!"); + MESSAGE("The opposing Ditto used Transform!"); + MESSAGE("The opposing Ditto transformed into Komala!"); ANIMATION(ANIM_TYPE_MOVE, move, player); if (move == MOVE_POISONPOWDER) { STATUS_ICON(opponent, poison: TRUE); } diff --git a/test/battle/ability/commander.c b/test/battle/ability/commander.c index e6a85b0681..7eca97dacf 100644 --- a/test/battle/ability/commander.c +++ b/test/battle/ability/commander.c @@ -51,7 +51,7 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri avoids moves targetted towards it") ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); - MESSAGE("Foe Wobbuffet's attack missed!"); + MESSAGE("The opposing Wobbuffet's attack missed!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponentRight); } } @@ -71,7 +71,7 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri will still take residual damage from a f ABILITY_POPUP(opponentLeft, ABILITY_SAND_STREAM); MESSAGE("Dondozo is buffeted by the sandstorm!"); MESSAGE("Tatsugiri is buffeted by the sandstorm!"); - MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!"); + MESSAGE("The opposing Wobbuffet is buffeted by the sandstorm!"); } } @@ -87,7 +87,7 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri will still take poison damage if while i } SCENE { ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); - MESSAGE("Tatsugiri is hurt by poison!"); + MESSAGE("Tatsugiri was hurt by its poisoning!"); } } @@ -104,7 +104,7 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri still avoids moves even when the attacke ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); - MESSAGE("Foe Machamp's attack missed!"); + MESSAGE("The opposing Machamp's attack missed!"); } } @@ -122,7 +122,7 @@ DOUBLE_BATTLE_TEST("Commander cannot affect a Dondozo that was previously affect } SCENE { ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); - MESSAGE("Tatsugiri is hurt by poison!"); + MESSAGE("Tatsugiri was hurt by its poisoning!"); NONE_OF { ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); @@ -144,9 +144,9 @@ DOUBLE_BATTLE_TEST("Commander prevents Whirlwind from working against Dondozo or } SCENE { ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); - MESSAGE("Foe Wobbuffet used Whirlwind!"); + MESSAGE("The opposing Wobbuffet used Whirlwind!"); MESSAGE("But it failed!"); - MESSAGE("Foe Wobbuffet used Whirlwind!"); + MESSAGE("The opposing Wobbuffet used Whirlwind!"); MESSAGE("But it failed!"); } } @@ -250,7 +250,7 @@ DOUBLE_BATTLE_TEST("Commander doesn't prevent Imposter from working on a Command ABILITY_POPUP(playerRight, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); ABILITY_POPUP(opponentRight, ABILITY_IMPOSTER); - MESSAGE("Foe Ditto transformed into Tatsugiri using Imposter!"); + MESSAGE("The opposing Ditto transformed into Tatsugiri using Imposter!"); } } @@ -270,17 +270,17 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri is still affected by Perish Song while c ABILITY_POPUP(playerRight, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PERISH_SONG, opponentLeft); - MESSAGE("All affected POKéMON will faint in three turns!"); - MESSAGE("Dondozo's PERISH count fell to 0!"); + MESSAGE("All Pokémon that heard the song will faint in three turns!"); + MESSAGE("Dondozo's perish count fell to 0!"); MESSAGE("Dondozo fainted!"); - MESSAGE("Foe Wobbuffet's PERISH count fell to 0!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet's perish count fell to 0!"); + MESSAGE("The opposing Wobbuffet fainted!"); NONE_OF { - MESSAGE("Tatsugiri's PERISH count fell to 0!"); + MESSAGE("Tatsugiri's perish count fell to 0!"); MESSAGE("Tatsugiri fainted!"); } - MESSAGE("Foe Wynaut's PERISH count fell to 0!"); - MESSAGE("Foe Wynaut fainted!"); + MESSAGE("The opposing Wynaut's perish count fell to 0!"); + MESSAGE("The opposing Wynaut fainted!"); } } @@ -323,7 +323,7 @@ DOUBLE_BATTLE_TEST("Commander Attacker is kept (Dondozo Left Slot)") MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft); HP_BAR(playerLeft); - MESSAGE("Foe Wobbuffet's attack missed!"); + MESSAGE("The opposing Wobbuffet's attack missed!"); HP_BAR(opponentRight); } } @@ -344,7 +344,7 @@ DOUBLE_BATTLE_TEST("Commander Attacker is kept (Dondozo Right Slot)") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); - MESSAGE("Foe Wobbuffet's attack missed!"); + MESSAGE("The opposing Wobbuffet's attack missed!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft); HP_BAR(playerRight); HP_BAR(opponentRight); diff --git a/test/battle/ability/contrary.c b/test/battle/ability/contrary.c index 824f2bf6c2..5e44b12b48 100644 --- a/test/battle/ability/contrary.c +++ b/test/battle/ability/contrary.c @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Contrary raises Attack when Intimidated in a single battle", if (ability == ABILITY_CONTRARY) { ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Attack rose!"); + MESSAGE("The opposing Spinda's Attack rose!"); } HP_BAR(player, captureDamage: &results[i].damage); } @@ -51,18 +51,18 @@ DOUBLE_BATTLE_TEST("Contrary raises Attack when Intimidated in a double battle", if (abilityLeft == ABILITY_CONTRARY) { ABILITY_POPUP(opponentLeft, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Spinda's Attack rose!"); + MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Mightyena's Intimidate cuts Foe Spinda's attack!"); + MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's attack!"); } if (abilityRight == ABILITY_CONTRARY) { ABILITY_POPUP(opponentRight, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Spinda's Attack rose!"); + MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Mightyena's Intimidate cuts Foe Spinda's attack!"); + MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's attack!"); } HP_BAR(playerLeft, captureDamage: &results[i].damageLeft); HP_BAR(playerRight, captureDamage: &results[i].damageRight); @@ -90,28 +90,28 @@ SINGLE_BATTLE_TEST("Contrary raises stats after using a move which would normall TURN { MOVE(opponent, MOVE_OVERHEAT); } TURN { MOVE(opponent, MOVE_OVERHEAT); } } SCENE { - MESSAGE("Foe Spinda used Overheat!"); + MESSAGE("The opposing Spinda used Overheat!"); HP_BAR(player, captureDamage: &results[i].damageBefore); if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Sp. Atk sharply rose!"); + MESSAGE("The opposing Spinda's Sp. Atk sharply rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Sp. Atk harshly fell!"); + MESSAGE("The opposing Spinda's Sp. Atk harshly fell!"); } - // MESSAGE("Foe Spinda used Overheat!"); + // MESSAGE("The opposing Spinda used Overheat!"); HP_BAR(player, captureDamage: &results[i].damageAfter); if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Sp. Atk sharply rose!"); + MESSAGE("The opposing Spinda's Sp. Atk sharply rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Sp. Atk harshly fell!"); + MESSAGE("The opposing Spinda's Sp. Atk harshly fell!"); } } FINALLY { @@ -134,21 +134,21 @@ SINGLE_BATTLE_TEST("Contrary lowers a stat after using a move which would normal TURN { MOVE(opponent, MOVE_SWORDS_DANCE); } TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Spinda used Tackle!"); + MESSAGE("The opposing Spinda used Tackle!"); HP_BAR(player, captureDamage: &results[i].damageBefore); - //MESSAGE("Foe Spinda used Swords Dance!"); + //MESSAGE("The opposing Spinda used Swords Dance!"); if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Attack harshly fell!"); + MESSAGE("The opposing Spinda's Attack harshly fell!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Attack sharply rose!"); + MESSAGE("The opposing Spinda's Attack sharply rose!"); } - // MESSAGE("Foe Spinda used Tackle!"); + // MESSAGE("The opposing Spinda used Tackle!"); HP_BAR(player, captureDamage: &results[i].damageAfter); } FINALLY { @@ -173,14 +173,14 @@ SINGLE_BATTLE_TEST("Contrary raises a stat after using a move which would normal if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Attack rose!"); + MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Attack fell!"); + MESSAGE("The opposing Spinda's Attack fell!"); } - MESSAGE("Foe Spinda used Tackle!"); + MESSAGE("The opposing Spinda used Tackle!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { @@ -202,16 +202,16 @@ SINGLE_BATTLE_TEST("Contrary lowers a stat after using a move which would normal TURN { MOVE(opponent, MOVE_BELLY_DRUM); } TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Spinda used Tackle!"); + MESSAGE("The opposing Spinda used Tackle!"); HP_BAR(player, captureDamage: &results[i].damageBefore); if (ability == ABILITY_CONTRARY) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda cut its own HP and maximized ATTACK!"); //Message stays the same + MESSAGE("The opposing Spinda cut its own HP and maximized its Attack!"); //Message stays the same } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda cut its own HP and maximized ATTACK!"); + MESSAGE("The opposing Spinda cut its own HP and maximized its Attack!"); } HP_BAR(player, captureDamage: &results[i].damageAfter); @@ -234,10 +234,10 @@ SINGLE_BATTLE_TEST("Sticky Web raises Speed by 1 for Contrary mon on switch-in") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); MESSAGE("2 sent out Snivy!"); - MESSAGE("Foe Snivy was caught in a Sticky Web!"); + MESSAGE("The opposing Snivy was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Snivy's Speed rose!"); + MESSAGE("The opposing Snivy's Speed rose!"); } } diff --git a/test/battle/ability/costar.c b/test/battle/ability/costar.c index c42871bb45..7107b00d61 100644 --- a/test/battle/ability/costar.c +++ b/test/battle/ability/costar.c @@ -14,12 +14,12 @@ DOUBLE_BATTLE_TEST("Costar copies an ally's stat stages upon entering battle") TURN { SWITCH(opponentRight, 2); MOVE(playerLeft, MOVE_CELEBRATE); } } SCENE { // Turn 1 - buff up - MESSAGE("Foe Wobbuffet used Swords Dance!"); + MESSAGE("The opposing Wobbuffet used Swords Dance!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); // Turn 2 - Switch into Flamigo MESSAGE("2 sent out Flamigo!"); ABILITY_POPUP(opponentRight, ABILITY_COSTAR); - MESSAGE("Foe Flamigo copied Foe Wobbuffet's stat changes!"); + MESSAGE("The opposing Flamigo copied the opposing Wobbuffet's stat changes!"); } THEN { EXPECT_EQ(opponentRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); } diff --git a/test/battle/ability/cotton_down.c b/test/battle/ability/cotton_down.c index 8e15283926..4d0dab9dcc 100644 --- a/test/battle/ability/cotton_down.c +++ b/test/battle/ability/cotton_down.c @@ -55,7 +55,7 @@ DOUBLE_BATTLE_TEST("Cotton Down drops speed by one of all other battlers on the ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); MESSAGE("Wynaut's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); } THEN { EXPECT_EQ(playerLeft->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); EXPECT_EQ(playerRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); diff --git a/test/battle/ability/curious_medicine.c b/test/battle/ability/curious_medicine.c index 5ee336262b..3844170eb0 100644 --- a/test/battle/ability/curious_medicine.c +++ b/test/battle/ability/curious_medicine.c @@ -19,14 +19,14 @@ DOUBLE_BATTLE_TEST("Curious Medicine resets ally's stat stages upon entering bat TURN { SWITCH(opponentRight, 2); MOVE(playerLeft, MOVE_CELEBRATE); } } SCENE { // Turn 1 - buff up - MESSAGE("Foe Scolipede used Quiver Dance!"); + MESSAGE("The opposing Scolipede used Quiver Dance!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); // Turn 2 - Switch into Slowking MESSAGE("2 sent out Slowking!"); if (ability == ABILITY_CURIOUS_MEDICINE) { ABILITY_POPUP(opponentRight, ABILITY_CURIOUS_MEDICINE); - MESSAGE("Foe Scolipede's stat changes were reset!"); + MESSAGE("The opposing Scolipede's stat changes were removed!"); } } THEN { EXPECT_EQ(opponentLeft->statStages[STAT_ATK], (ability == ABILITY_CURIOUS_MEDICINE) ? DEFAULT_STAT_STAGE : DEFAULT_STAT_STAGE - 2); diff --git a/test/battle/ability/cursed_body.c b/test/battle/ability/cursed_body.c index 20fe659d21..26d97a9f11 100644 --- a/test/battle/ability/cursed_body.c +++ b/test/battle/ability/cursed_body.c @@ -12,6 +12,6 @@ SINGLE_BATTLE_TEST("Cursed Body triggers 30% of the time") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_AQUA_JET, player); ABILITY_POPUP(opponent, ABILITY_CURSED_BODY); - MESSAGE("Wobbuffet's Aqua Jet was disabled by Foe Frillish's Cursed Body!"); + MESSAGE("Wobbuffet's Aqua Jet was disabled by the opposing Frillish's Cursed Body!"); } } diff --git a/test/battle/ability/cute_charm.c b/test/battle/ability/cute_charm.c index 06eb4cf842..e6eee0ae08 100644 --- a/test/battle/ability/cute_charm.c +++ b/test/battle/ability/cute_charm.c @@ -18,14 +18,14 @@ SINGLE_BATTLE_TEST("Cute Charm inflicts infatuation on contact") if (gMovesInfo[move].makesContact) { ABILITY_POPUP(opponent, ABILITY_CUTE_CHARM); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, player); - MESSAGE("Foe Clefairy's Cute Charm infatuated Wobbuffet!"); - MESSAGE("Wobbuffet is in love with Foe Clefairy!"); + MESSAGE("The opposing Clefairy's Cute Charm infatuated Wobbuffet!"); + MESSAGE("Wobbuffet is in love with the opposing Clefairy!"); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_CUTE_CHARM); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, player); - MESSAGE("Foe Clefairy's Cute Charm infatuated Wobbuffet!"); - MESSAGE("Wobbuffet is in love with Foe Clefairy!"); + MESSAGE("The opposing Clefairy's Cute Charm infatuated Wobbuffet!"); + MESSAGE("Wobbuffet is in love with the opposing Clefairy!"); } } } @@ -60,7 +60,7 @@ SINGLE_BATTLE_TEST("Cute Charm triggers 30% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_CUTE_CHARM); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, player); - MESSAGE("Foe Clefairy's Cute Charm infatuated Wobbuffet!"); - MESSAGE("Wobbuffet is in love with Foe Clefairy!"); + MESSAGE("The opposing Clefairy's Cute Charm infatuated Wobbuffet!"); + MESSAGE("Wobbuffet is in love with the opposing Clefairy!"); } } diff --git a/test/battle/ability/dancer.c b/test/battle/ability/dancer.c index 2132530958..5519ac3222 100644 --- a/test/battle/ability/dancer.c +++ b/test/battle/ability/dancer.c @@ -90,7 +90,7 @@ SINGLE_BATTLE_TEST("Dancer doesn't trigger if the original user flinches") TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_DRAGON_DANCE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponent); - MESSAGE("Wobbuffet flinched!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_DANCER); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponent); @@ -114,14 +114,14 @@ DOUBLE_BATTLE_TEST("Dancer still triggers if another dancer flinches") ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); ABILITY_POPUP(playerLeft, ABILITY_DANCER); - MESSAGE("Wobbuffet flinched!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); NONE_OF { MESSAGE("Wobbuffet used Dragon Dance!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); } ABILITY_POPUP(opponentLeft, ABILITY_DANCER); - MESSAGE("Foe Oricorio used Dragon Dance!"); + MESSAGE("The opposing Oricorio used Dragon Dance!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } diff --git a/test/battle/ability/dauntless_shield.c b/test/battle/ability/dauntless_shield.c index ff7cc723ac..ca9125e14f 100644 --- a/test/battle/ability/dauntless_shield.c +++ b/test/battle/ability/dauntless_shield.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Dauntless Shield raises Defense by one stage") } SCENE { ABILITY_POPUP(opponent, ABILITY_DAUNTLESS_SHIELD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zamazenta's Dauntless Shield raised its Defense!"); + MESSAGE("The opposing Zamazenta's Dauntless Shield raised its Defense!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); } @@ -34,11 +34,11 @@ SINGLE_BATTLE_TEST("Dauntless Shield raises Defense by one stage only once per b } SCENE { ABILITY_POPUP(opponent, ABILITY_DAUNTLESS_SHIELD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zamazenta's Dauntless Shield raised its Defense!"); + MESSAGE("The opposing Zamazenta's Dauntless Shield raised its Defense!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_DAUNTLESS_SHIELD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zamazenta's Dauntless Shield raised its Defense!"); + MESSAGE("The opposing Zamazenta's Dauntless Shield raised its Defense!"); } } THEN { EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE); @@ -55,12 +55,12 @@ SINGLE_BATTLE_TEST("Dauntless Shield activates when it's no longer effected by N TURN { SWITCH(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); - MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Neutralizing gas filled the area!"); SWITCH_OUT_MESSAGE("Weezing"); - MESSAGE("The effects of Neutralizing Gas wore off!"); + MESSAGE("The effects of the neutralizing gas wore off!"); ABILITY_POPUP(opponent, ABILITY_DAUNTLESS_SHIELD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zamazenta's Dauntless Shield raised its Defense!"); + MESSAGE("The opposing Zamazenta's Dauntless Shield raised its Defense!"); } } diff --git a/test/battle/ability/defiant.c b/test/battle/ability/defiant.c index 79136a559d..e43810ef9a 100644 --- a/test/battle/ability/defiant.c +++ b/test/battle/ability/defiant.c @@ -21,14 +21,14 @@ DOUBLE_BATTLE_TEST("Defiant sharply raises player's Attack after Intimidate") //1st mon Intimidate ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Foe Gyarados's Intimidate cuts Mankey's attack!"); + MESSAGE("The opposing Gyarados's Intimidate cuts Mankey's attack!"); if (abilityLeft == ABILITY_DEFIANT) { ABILITY_POPUP(playerLeft, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Mankey's Attack sharply rose!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Foe Gyarados's Intimidate cuts Primeape's attack!"); + MESSAGE("The opposing Gyarados's Intimidate cuts Primeape's attack!"); if (abilityRight == ABILITY_DEFIANT) { ABILITY_POPUP(playerRight, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); @@ -38,14 +38,14 @@ DOUBLE_BATTLE_TEST("Defiant sharply raises player's Attack after Intimidate") //2nd mon Intimidate ABILITY_POPUP(opponentRight, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Foe Arbok's Intimidate cuts Mankey's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Mankey's attack!"); if (abilityLeft == ABILITY_DEFIANT) { ABILITY_POPUP(playerLeft, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Mankey's Attack sharply rose!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Foe Arbok's Intimidate cuts Primeape's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Primeape's attack!"); if (abilityRight == ABILITY_DEFIANT) { ABILITY_POPUP(playerRight, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); @@ -79,35 +79,35 @@ DOUBLE_BATTLE_TEST("Defiant sharply raises opponent's Attack after Intimidate") //1st mon Intimidate ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Gyarados's Intimidate cuts Foe Mankey's attack!"); + MESSAGE("Gyarados's Intimidate cuts the opposing Mankey's attack!"); if (abilityLeft == ABILITY_DEFIANT) { ABILITY_POPUP(opponentLeft, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Mankey's Attack sharply rose!"); + MESSAGE("The opposing Mankey's Attack sharply rose!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Gyarados's Intimidate cuts Foe Primeape's attack!"); + MESSAGE("Gyarados's Intimidate cuts the opposing Primeape's attack!"); if (abilityRight == ABILITY_DEFIANT) { ABILITY_POPUP(opponentRight, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Primeape's Attack sharply rose!"); + MESSAGE("The opposing Primeape's Attack sharply rose!"); } //2nd mon Intimidate ABILITY_POPUP(playerRight, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Arbok's Intimidate cuts Foe Mankey's attack!"); + MESSAGE("Arbok's Intimidate cuts the opposing Mankey's attack!"); if (abilityLeft == ABILITY_DEFIANT) { ABILITY_POPUP(opponentLeft, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Mankey's Attack sharply rose!"); + MESSAGE("The opposing Mankey's Attack sharply rose!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Arbok's Intimidate cuts Foe Primeape's attack!"); + MESSAGE("Arbok's Intimidate cuts the opposing Primeape's attack!"); if (abilityRight == ABILITY_DEFIANT) { ABILITY_POPUP(opponentRight, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Primeape's Attack sharply rose!"); + MESSAGE("The opposing Primeape's Attack sharply rose!"); } } FINALLY { // -2 from Intimidates and +4 from Defiants gets +2 total @@ -129,7 +129,7 @@ SINGLE_BATTLE_TEST("Defiant activates after Sticky Web lowers Speed") ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponent); // Switch-in - Sticky Web activates SEND_IN_MESSAGE("Mankey"); - MESSAGE("Mankey was caught in a Sticky Web!"); + MESSAGE("Mankey was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Mankey's Speed fell!"); // Defiant activates @@ -153,7 +153,7 @@ SINGLE_BATTLE_TEST("Defiant doesn't activate after Sticky Web lowers Speed if Co ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent); // Switch-in - Sticky Web activates SEND_IN_MESSAGE("Mankey"); - MESSAGE("Mankey was caught in a Sticky Web!"); + MESSAGE("Mankey was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Mankey's Speed fell!"); // Defiant doesn't activate @@ -180,7 +180,7 @@ SINGLE_BATTLE_TEST("Defiant correctly activates after Sticky Web lowers Speed if ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent); // Switch-in - Sticky Web activates SEND_IN_MESSAGE("Mankey"); - MESSAGE("Mankey was caught in a Sticky Web!"); + MESSAGE("Mankey was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Mankey's Speed fell!"); // Defiant doesn't activate @@ -225,7 +225,7 @@ DOUBLE_BATTLE_TEST("Defiant is activated by Cotton Down for non-ally pokemon") MESSAGE("Mankey's Attack sharply rose!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Mankey's Speed fell!"); + MESSAGE("The opposing Mankey's Speed fell!"); } THEN { EXPECT_EQ(playerLeft->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); EXPECT_EQ(playerRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); @@ -257,11 +257,11 @@ SINGLE_BATTLE_TEST("Defiant activates before White Herb") if (move == MOVE_LEER) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Mankey's White Herb restored its status!"); + MESSAGE("Mankey returned its stats to normal using its White Herb!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Mankey's White Herb restored its status!"); + MESSAGE("Mankey returned its stats to normal using its White Herb!"); } } } THEN { diff --git a/test/battle/ability/desolate_land.c b/test/battle/ability/desolate_land.c index a8c9f7749c..06d604e8fc 100644 --- a/test/battle/ability/desolate_land.c +++ b/test/battle/ability/desolate_land.c @@ -16,13 +16,13 @@ SINGLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves") TURN { MOVE(opponent, MOVE_WATER_GUN); } TURN { MOVE(opponent, MOVE_WATER_GUN); } } SCENE { - MESSAGE("Foe Wobbuffet used Water Gun!"); + MESSAGE("The opposing Wobbuffet used Water Gun!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent); - MESSAGE("The Water-type attack evaporated in the harsh sunlight!"); + MESSAGE("The Water-type attack evaporated in the extremely harsh sunlight!"); NOT HP_BAR(player); - MESSAGE("Foe Wobbuffet used Water Gun!"); + MESSAGE("The opposing Wobbuffet used Water Gun!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent); - MESSAGE("The Water-type attack evaporated in the harsh sunlight!"); + MESSAGE("The Water-type attack evaporated in the extremely harsh sunlight!"); NOT HP_BAR(player); } THEN { EXPECT_EQ(player->hp, player->maxHP); @@ -42,10 +42,10 @@ DOUBLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves and prints th } WHEN { TURN { MOVE(opponentLeft, MOVE_SURF); } } SCENE { - MESSAGE("Foe Wobbuffet used Surf!"); + MESSAGE("The opposing Wobbuffet used Surf!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft); - MESSAGE("The Water-type attack evaporated in the harsh sunlight!"); - NOT MESSAGE("The Water-type attack evaporated in the harsh sunlight!"); + MESSAGE("The Water-type attack evaporated in the extremely harsh sunlight!"); + NOT MESSAGE("The Water-type attack evaporated in the extremely harsh sunlight!"); } THEN { EXPECT_EQ(playerLeft->hp, playerLeft->maxHP); EXPECT_EQ(playerRight->hp, playerRight->maxHP); @@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Desolate Land does not block a move if pokemon is asleep and } WHEN { TURN { MOVE(opponent, MOVE_WATER_GUN); } } SCENE { - NOT MESSAGE("The Water-type attack evaporated in the harsh sunlight!"); - MESSAGE("Foe Wobbuffet is fast asleep."); + NOT MESSAGE("The Water-type attack evaporated in the extremely harsh sunlight!"); + MESSAGE("The opposing Wobbuffet is fast asleep."); } } diff --git a/test/battle/ability/disguise.c b/test/battle/ability/disguise.c index 5ab2035325..3a8df70be5 100644 --- a/test/battle/ability/disguise.c +++ b/test/battle/ability/disguise.c @@ -98,7 +98,7 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu takes damage from Rocky Helmet without bre HP_BAR(opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); HP_BAR(player); - MESSAGE("Mimikyu was hurt by Foe Wobbuffet's Rocky Helmet!"); + MESSAGE("Mimikyu was hurt by the opposing Wobbuffet's Rocky Helmet!"); } THEN { EXPECT_EQ(player->species, SPECIES_MIMIKYU_DISGUISED); } @@ -116,7 +116,7 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu takes damage from Rough Skin without break HP_BAR(opponent); ABILITY_POPUP(opponent, ABILITY_ROUGH_SKIN); HP_BAR(player); - MESSAGE("Mimikyu was hurt by Foe Carvanha's Rough Skin!"); + MESSAGE("Mimikyu was hurt by the opposing Carvanha's Rough Skin!"); } THEN { EXPECT_EQ(player->species, SPECIES_MIMIKYU_DISGUISED); } @@ -146,11 +146,11 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu's types revert back to Ghost/Fairy when Di TURN { MOVE(opponent, MOVE_TACKLE); } TURN { MOVE(opponent, MOVE_SHADOW_CLAW); } } SCENE { - MESSAGE("Foe Wobbuffet used Soak!"); + MESSAGE("The opposing Wobbuffet used Soak!"); MESSAGE("Mimikyu transformed into the Water type!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ABILITY_POPUP(player, ABILITY_DISGUISE); - MESSAGE("Foe Wobbuffet used Shadow Claw!"); + MESSAGE("The opposing Wobbuffet used Shadow Claw!"); MESSAGE("It's super effective!"); } } @@ -167,7 +167,7 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu blocks a move after getting Gastro Acid Ba TURN { MOVE(opponent, MOVE_SHADOW_CLAW); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_GASTRO_ACID, opponent); - MESSAGE("Wobbuffet's ability was suppressed!"); + MESSAGE("Wobbuffet's Ability was suppressed!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SHADOW_CLAW, opponent); ABILITY_POPUP(player, ABILITY_DISGUISE); diff --git a/test/battle/ability/download.c b/test/battle/ability/download.c index e96b0ddeb9..480f0bf10e 100644 --- a/test/battle/ability/download.c +++ b/test/battle/ability/download.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Download raises Attack if player has lower Def than Sp. Def" { ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Porygon's Download raised its Attack!"); + MESSAGE("The opposing Porygon's Download raised its Attack!"); } HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { @@ -85,7 +85,7 @@ SINGLE_BATTLE_TEST("Download doesn't activate if target hasn't been sent out yet { ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Porygon2's Download raised its Sp. Atk!"); + MESSAGE("The opposing Porygon2's Download raised its Sp. Atk!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, opponent); diff --git a/test/battle/ability/effect_spore.c b/test/battle/ability/effect_spore.c index 107cd08675..49750c4797 100644 --- a/test/battle/ability/effect_spore.c +++ b/test/battle/ability/effect_spore.c @@ -19,13 +19,13 @@ SINGLE_BATTLE_TEST("Effect Spore only inflicts status on contact") if (gMovesInfo[move].makesContact) { ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); - MESSAGE("Wobbuffet was poisoned by Foe Breloom's Effect Spore!"); + MESSAGE("Wobbuffet was poisoned by the opposing Breloom's Effect Spore!"); STATUS_ICON(player, poison: TRUE); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); - MESSAGE("Wobbuffet was poisoned by Foe Breloom's Effect Spore!"); + MESSAGE("Wobbuffet was poisoned by the opposing Breloom's Effect Spore!"); STATUS_ICON(player, poison: TRUE); } } @@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("Effect Spore causes poison 9% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); - MESSAGE("Wobbuffet was poisoned by Foe Breloom's Effect Spore!"); + MESSAGE("Wobbuffet was poisoned by the opposing Breloom's Effect Spore!"); STATUS_ICON(player, poison: TRUE); } } @@ -65,7 +65,7 @@ SINGLE_BATTLE_TEST("Effect Spore causes paralysis 10% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); - MESSAGE("Foe Breloom's Effect Spore paralyzed Wobbuffet! It may be unable to move!"); + MESSAGE("The opposing Breloom's Effect Spore paralyzed Wobbuffet, so it may be unable to move!"); STATUS_ICON(player, paralysis: TRUE); } } @@ -84,7 +84,7 @@ SINGLE_BATTLE_TEST("Effect Spore causes sleep 11% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); - MESSAGE("Foe Breloom's Effect Spore made Wobbuffet sleep!"); + MESSAGE("The opposing Breloom's Effect Spore made Wobbuffet sleep!"); STATUS_ICON(player, sleep: TRUE); } } diff --git a/test/battle/ability/embody_aspect.c b/test/battle/ability/embody_aspect.c index c5c8f5d610..fffc8cf423 100644 --- a/test/battle/ability/embody_aspect.c +++ b/test/battle/ability/embody_aspect.c @@ -20,13 +20,13 @@ SINGLE_BATTLE_TEST("Embody Aspect raises a stat depending on the users form by o ABILITY_POPUP(opponent, ability); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); if (ability == ABILITY_EMBODY_ASPECT_TEAL_MASK) - MESSAGE("Foe Ogerpon's Embody Aspect raised its Speed!"); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Speed!"); else if (ability == ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK) - MESSAGE("Foe Ogerpon's Embody Aspect raised its Attack!"); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Attack!"); else if (ability == ABILITY_EMBODY_ASPECT_WELLSPRING_MASK) - MESSAGE("Foe Ogerpon's Embody Aspect raised its Sp. Def!"); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Sp. Def!"); else if (ability == ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK) - MESSAGE("Foe Ogerpon's Embody Aspect raised its Defense!"); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Defense!"); } THEN { if (ability == ABILITY_EMBODY_ASPECT_TEAL_MASK) EXPECT_EQ(opponent->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1); @@ -49,11 +49,11 @@ SINGLE_BATTLE_TEST("Embody Aspect activates when it's no longer effected by Neut TURN { SWITCH(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); - MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Neutralizing gas filled the area!"); SWITCH_OUT_MESSAGE("Weezing"); - MESSAGE("The effects of Neutralizing Gas wore off!"); + MESSAGE("The effects of the neutralizing gas wore off!"); ABILITY_POPUP(opponent, ABILITY_EMBODY_ASPECT_TEAL_MASK); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Ogerpon's Embody Aspect raised its Speed!"); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Speed!"); } } diff --git a/test/battle/ability/flame_body.c b/test/battle/ability/flame_body.c index f44fb91724..b8fa850b65 100644 --- a/test/battle/ability/flame_body.c +++ b/test/battle/ability/flame_body.c @@ -17,13 +17,13 @@ SINGLE_BATTLE_TEST("Flame Body inflicts burn on contact") if (gMovesInfo[move].makesContact) { ABILITY_POPUP(opponent, ABILITY_FLAME_BODY); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, player); - MESSAGE("Foe Magmar's Flame Body burned Wobbuffet!"); + MESSAGE("The opposing Magmar's Flame Body burned Wobbuffet!"); STATUS_ICON(player, burn: TRUE); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_FLAME_BODY); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, player); - MESSAGE("Foe Magmar's Flame Body burned Wobbuffet!"); + MESSAGE("The opposing Magmar's Flame Body burned Wobbuffet!"); STATUS_ICON(player, burn: TRUE); } } @@ -43,7 +43,7 @@ SINGLE_BATTLE_TEST("Flame Body triggers 30% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_FLAME_BODY); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, player); - MESSAGE("Foe Magmar's Flame Body burned Wobbuffet!"); + MESSAGE("The opposing Magmar's Flame Body burned Wobbuffet!"); STATUS_ICON(player, burn: TRUE); } } diff --git a/test/battle/ability/forecast.c b/test/battle/ability/forecast.c index 24a0eed957..dae5326fd5 100644 --- a/test/battle/ability/forecast.c +++ b/test/battle/ability/forecast.c @@ -122,13 +122,13 @@ DOUBLE_BATTLE_TEST("Forecast transforms all Castforms present in weather") MESSAGE("Castform transformed!"); ABILITY_POPUP(opponentLeft, ABILITY_FORECAST); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, opponentLeft); - MESSAGE("Foe Castform transformed!"); + MESSAGE("The opposing Castform transformed!"); ABILITY_POPUP(playerRight, ABILITY_FORECAST); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, playerRight); MESSAGE("Castform transformed!"); ABILITY_POPUP(opponentRight, ABILITY_FORECAST); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, opponentRight); - MESSAGE("Foe Castform transformed!"); + MESSAGE("The opposing Castform transformed!"); } THEN { switch (move) { diff --git a/test/battle/ability/frisk.c b/test/battle/ability/frisk.c index 385ab7e1f9..3c892329c3 100644 --- a/test/battle/ability/frisk.c +++ b/test/battle/ability/frisk.c @@ -29,9 +29,9 @@ SINGLE_BATTLE_TEST("Frisk triggers in a Single Battle") TURN { ; } } SCENE { ABILITY_POPUP(player, ABILITY_FRISK); - MESSAGE("Furret frisked Foe Sentret and found its Potion!"); + MESSAGE("Furret frisked the opposing Sentret and found its Potion!"); ABILITY_POPUP(opponent, ABILITY_FRISK); - MESSAGE("Foe Sentret frisked Furret and found its Potion!"); + MESSAGE("The opposing Sentret frisked Furret and found its Potion!"); } } @@ -51,10 +51,10 @@ DOUBLE_BATTLE_TEST("Frisk triggers for player in a Double Battle after switching } WHEN { TURN { MOVE(opponentLeft, MOVE_POUND, target: target); SEND_OUT(target, 2); } } SCENE { - MESSAGE("Foe Wynaut used Pound!"); + MESSAGE("The opposing Wynaut used Pound!"); MESSAGE("Wobbuffet fainted!"); ABILITY_POPUP(target, ABILITY_FRISK); - MESSAGE("Furret frisked Foe Wynaut and found its Potion!"); + MESSAGE("Furret frisked the opposing Wynaut and found its Potion!"); } } @@ -75,8 +75,8 @@ DOUBLE_BATTLE_TEST("Frisk triggers for opponent in a Double Battle after switchi TURN { MOVE(playerLeft, MOVE_POUND, target: target); SEND_OUT(target, 2); } } SCENE { MESSAGE("Wynaut used Pound!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); ABILITY_POPUP(target, ABILITY_FRISK); - MESSAGE("Foe Furret frisked Wynaut and found its Potion!"); + MESSAGE("The opposing Furret frisked Wynaut and found its Potion!"); } } diff --git a/test/battle/ability/gale_wings.c b/test/battle/ability/gale_wings.c index e74d34790f..eff4589649 100644 --- a/test/battle/ability/gale_wings.c +++ b/test/battle/ability/gale_wings.c @@ -16,10 +16,10 @@ SINGLE_BATTLE_TEST("Gale Wings only grants priority at full HP") } SCENE { if (hp == 100) { MESSAGE("Talonflame used Aerial Ace!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } else { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Talonflame used Aerial Ace!"); } } @@ -41,10 +41,10 @@ SINGLE_BATTLE_TEST("Gale Wings only grants priority to Flying-type moves") } SCENE { if (move == MOVE_AERIAL_ACE) { MESSAGE("Talonflame used Aerial Ace!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } else { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Talonflame used Flare Blitz!"); } } @@ -74,16 +74,16 @@ SINGLE_BATTLE_TEST("Gale Wings doesn't increase priority of Flying-type Natural } SCENE { MESSAGE("Wobbuffet used Celebrate!"); if (move == MOVE_NATURAL_GIFT) { - MESSAGE("Foe Talonflame used Natural Gift!"); + MESSAGE("The opposing Talonflame used Natural Gift!"); } else if (move == MOVE_JUDGMENT) { - MESSAGE("Foe Talonflame used Judgment!"); + MESSAGE("The opposing Talonflame used Judgment!"); } else if (move == MOVE_HIDDEN_POWER) { - MESSAGE("Foe Talonflame used Hidden Power!"); + MESSAGE("The opposing Talonflame used Hidden Power!"); } else { - MESSAGE("Foe Talonflame used Tera Blast!"); + MESSAGE("The opposing Talonflame used Tera Blast!"); } } } diff --git a/test/battle/ability/good_as_gold.c b/test/battle/ability/good_as_gold.c index 596bb6c4c7..40561ee767 100644 --- a/test/battle/ability/good_as_gold.c +++ b/test/battle/ability/good_as_gold.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Good as Gold protects from status moves") } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); ABILITY_POPUP(opponent, ABILITY_GOOD_AS_GOLD); - MESSAGE("It doesn't affect Foe Gholdengo…"); + MESSAGE("It doesn't affect the opposing Gholdengo…"); } } @@ -29,7 +29,7 @@ SINGLE_BATTLE_TEST("Good as Gold doesn't protect the user from it's own moves") ANIMATION(ANIM_TYPE_MOVE, MOVE_NASTY_PLOT, opponent); NONE_OF { ABILITY_POPUP(opponent, ABILITY_GOOD_AS_GOLD); - MESSAGE("It doesn't affect Foe Gholdengo…"); + MESSAGE("It doesn't affect the opposing Gholdengo…"); } } } @@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Good as Gold doesn't protect from moves that target the fiel ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, player); NONE_OF { ABILITY_POPUP(opponent, ABILITY_GOOD_AS_GOLD); - MESSAGE("It doesn't affect Foe Gholdengo…"); + MESSAGE("It doesn't affect the opposing Gholdengo…"); } } } @@ -65,6 +65,6 @@ DOUBLE_BATTLE_TEST("Good as Gold protects from partner's status moves") } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_HELPING_HAND, opponentRight); ABILITY_POPUP(opponentLeft, ABILITY_GOOD_AS_GOLD); - MESSAGE("It doesn't affect Foe Gholdengo…"); + MESSAGE("It doesn't affect the opposing Gholdengo…"); } } diff --git a/test/battle/ability/grim_neigh.c b/test/battle/ability/grim_neigh.c index 1d1e50ee12..476d9995f1 100644 --- a/test/battle/ability/grim_neigh.c +++ b/test/battle/ability/grim_neigh.c @@ -22,8 +22,8 @@ DOUBLE_BATTLE_TEST("Grim Neigh raises Sp. Attack by one stage after directly cau for (i = 0; i < 3; i++) { ONE_OF { MESSAGE("Snorunt fainted!"); - MESSAGE("Foe Glalie fainted!"); - MESSAGE("Foe Abra fainted!"); + MESSAGE("The opposing Glalie fainted!"); + MESSAGE("The opposing Abra fainted!"); } ABILITY_POPUP(playerLeft, abilityPopUp); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); @@ -57,8 +57,8 @@ DOUBLE_BATTLE_TEST("Grim Neigh does not trigger if Pokemon faint to indirect dam for (i = 0; i < 3; i++) { ONE_OF { MESSAGE("Snorunt fainted!"); - MESSAGE("Foe Glalie fainted!"); - MESSAGE("Foe Abra fainted!"); + MESSAGE("The opposing Glalie fainted!"); + MESSAGE("The opposing Abra fainted!"); } NONE_OF { ABILITY_POPUP(playerLeft, abilityPopUp); diff --git a/test/battle/ability/gulp_missile.c b/test/battle/ability/gulp_missile.c index 7ccf1063b5..f5e1fd9d9d 100644 --- a/test/battle/ability/gulp_missile.c +++ b/test/battle/ability/gulp_missile.c @@ -89,7 +89,7 @@ SINGLE_BATTLE_TEST("(Gulp Missile) Transformed Cramorant deal 1/4 of damage oppo ABILITY_POPUP(player, ABILITY_GULP_MISSILE); HP_BAR(opponent, captureDamage: &gulpMissileDamage); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); } THEN { EXPECT_EQ(gulpMissileDamage, opponent->maxHP / 4); } diff --git a/test/battle/ability/hunger_switch.c b/test/battle/ability/hunger_switch.c index e4fbda82d1..38c3d2527d 100644 --- a/test/battle/ability/hunger_switch.c +++ b/test/battle/ability/hunger_switch.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Hunger Switch switches Morpeko's forms at the end of the tur TURN { MOVE(player, MOVE_CELEBRATE); } } SCENE { MESSAGE("Morpeko used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); } THEN { if (species == SPECIES_MORPEKO_FULL_BELLY) diff --git a/test/battle/ability/hyper_cutter.c b/test/battle/ability/hyper_cutter.c index 0d1306f118..a688da2531 100644 --- a/test/battle/ability/hyper_cutter.c +++ b/test/battle/ability/hyper_cutter.c @@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Hyper Cutter prevents intimidate") ABILITY_POPUP(player, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } ABILITY_POPUP(opponent, ABILITY_HYPER_CUTTER); - MESSAGE("Foe Krabby's Hyper Cutter prevents Attack loss!"); + MESSAGE("The opposing Krabby's Hyper Cutter prevents Attack loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Hyper Cutter prevents Attack stage reduction from moves") TURN { MOVE(player, MOVE_GROWL); } } SCENE { ABILITY_POPUP(opponent, ABILITY_HYPER_CUTTER); - MESSAGE("Foe Krabby's Hyper Cutter prevents Attack loss!"); + MESSAGE("The opposing Krabby's Hyper Cutter prevents Attack loss!"); } } @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Attack reduction from burn") TURN { MOVE(player, MOVE_WILL_O_WISP); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WILL_O_WISP, player); - MESSAGE("Foe Krabby was burned!"); + MESSAGE("The opposing Krabby was burned!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE); } @@ -68,10 +68,10 @@ SINGLE_BATTLE_TEST("Hyper Cutter is ignored by Mold Breaker") ABILITY_POPUP(player, ABILITY_MOLD_BREAKER); MESSAGE("Pinsir breaks the mold!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, player); - MESSAGE("Foe Krabby's Attack fell!"); + MESSAGE("The opposing Krabby's Attack fell!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_HYPER_CUTTER); - MESSAGE("Foe Krabby's Hyper Cutter prevents Attack loss!"); + MESSAGE("The opposing Krabby's Hyper Cutter prevents Attack loss!"); } } } @@ -87,8 +87,8 @@ SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Attack stage reduction from mov TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPERPOWER, opponent); - MESSAGE("Foe Krabby's Attack fell!"); - MESSAGE("Foe Krabby's Defense fell!"); + MESSAGE("The opposing Krabby's Attack fell!"); + MESSAGE("The opposing Krabby's Defense fell!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 1); } @@ -105,9 +105,9 @@ SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Topsy-Turvy") TURN { MOVE(opponent, MOVE_SWORDS_DANCE); MOVE(player, MOVE_TOPSY_TURVY); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent); - MESSAGE("Foe Krabby's Attack sharply rose!"); + MESSAGE("The opposing Krabby's Attack sharply rose!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOPSY_TURVY, player); - MESSAGE("Foe Krabby's stat changes were all reversed!"); + MESSAGE("All stat changes on the opposing Krabby were inverted!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 2); } @@ -124,7 +124,7 @@ SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Spectral Thief from resetting p TURN { MOVE(opponent, MOVE_SWORDS_DANCE); MOVE(player, MOVE_SPECTRAL_THIEF); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent); - MESSAGE("Foe Krabby's Attack sharply rose!"); + MESSAGE("The opposing Krabby's Attack sharply rose!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, player); MESSAGE("Wobbuffet stole the target's boosted stats!"); } THEN { diff --git a/test/battle/ability/immunity.c b/test/battle/ability/immunity.c index df5d1518e8..2fa90686c5 100644 --- a/test/battle/ability/immunity.c +++ b/test/battle/ability/immunity.c @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Immunity prevents Toxic bad poison") } SCENE { MESSAGE("Wobbuffet used Toxic!"); ABILITY_POPUP(opponent, ABILITY_IMMUNITY); - MESSAGE("Foe Snorlax's Immunity prevents poisoning!"); + MESSAGE("The opposing Snorlax's Immunity prevents poisoning!"); NOT STATUS_ICON(opponent, poison: TRUE); } } diff --git a/test/battle/ability/innards_out.c b/test/battle/ability/innards_out.c index a8d5c7ee3f..bc59bcfa0b 100644 --- a/test/battle/ability/innards_out.c +++ b/test/battle/ability/innards_out.c @@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Innards Out deal dmg on fainting equal to the amount of dmg } WHEN { TURN { MOVE(opponent, MOVE_PSYCHIC); SEND_OUT(player, 1); if (hp == 100) { SEND_OUT(opponent, 1); } } } SCENE { - MESSAGE("Foe Wobbuffet used Psychic!"); + MESSAGE("The opposing Wobbuffet used Psychic!"); HP_BAR(player, hp); ABILITY_POPUP(player, ABILITY_INNARDS_OUT); HP_BAR(opponent, hp); @@ -38,8 +38,8 @@ SINGLE_BATTLE_TEST("Innards Out does not trigger after Gastro Acid has been used TURN { MOVE(opponent, MOVE_GASTRO_ACID); } TURN { MOVE(opponent, MOVE_PSYCHIC); SEND_OUT(player, 1); } } SCENE { - MESSAGE("Foe Wobbuffet used Gastro Acid!"); - MESSAGE("Foe Wobbuffet used Psychic!"); + MESSAGE("The opposing Wobbuffet used Gastro Acid!"); + MESSAGE("The opposing Wobbuffet used Psychic!"); HP_BAR(player); NONE_OF { ABILITY_POPUP(player, ABILITY_INNARDS_OUT); @@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Innards Out does not damage Magic Guard Pokemon") } WHEN { TURN { MOVE(opponent, MOVE_PSYCHIC); SEND_OUT(player, 1); } } SCENE { - MESSAGE("Foe Clefable used Psychic!"); + MESSAGE("The opposing Clefable used Psychic!"); HP_BAR(player); ABILITY_POPUP(player, ABILITY_INNARDS_OUT); NOT HP_BAR(opponent); diff --git a/test/battle/ability/inner_focus.c b/test/battle/ability/inner_focus.c index ecd71272cb..5a470b742f 100644 --- a/test/battle/ability/inner_focus.c +++ b/test/battle/ability/inner_focus.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Inner Focus prevents intimidate") ABILITY_POPUP(player, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } ABILITY_POPUP(opponent, ABILITY_INNER_FOCUS); - MESSAGE("Foe Zubat's Inner Focus prevents stat loss!"); + MESSAGE("The opposing Zubat's Inner Focus prevents stat loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Inner Focus prevents flinching") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, player); - NONE_OF { MESSAGE("Foe Zubat flinched!"); } + NONE_OF { MESSAGE("The opposing Zubat flinched and couldn't move!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } @@ -52,6 +52,6 @@ SINGLE_BATTLE_TEST("Inner Focus is ignored by Mold Breaker") TURN { MOVE(player, MOVE_FAKE_OUT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, player); - MESSAGE("Foe Zubat flinched!"); + MESSAGE("The opposing Zubat flinched and couldn't move!"); } } diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index d2d7bc4af7..b7d979b4f3 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after switch ou { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Foe Arbok's Intimidate cuts Wobbuffet's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Wobbuffet's attack!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after KO", s16 { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Foe Arbok's Intimidate cuts Wobbuffet's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Wobbuffet's attack!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -92,15 +92,15 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba // Intimidate activates after all battlers have been brought out ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Ekans's Intimidate cuts Foe Arbok's attack!"); + MESSAGE("Ekans's Intimidate cuts the opposing Arbok's attack!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Ekans's Intimidate cuts Foe Wynaut's attack!"); + MESSAGE("Ekans's Intimidate cuts the opposing Wynaut's attack!"); ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Foe Arbok's Intimidate cuts Ekans's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Ekans's attack!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Foe Arbok's Intimidate cuts Abra's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Abra's attack!"); } } @@ -120,13 +120,13 @@ SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); MESSAGE("2 sent out Hitmontop!"); ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); - MESSAGE("Foe Hitmontop's Intimidate cuts Wobbuffet's attack!"); + MESSAGE("The opposing Hitmontop's Intimidate cuts Wobbuffet's attack!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - MESSAGE("Foe Hitmontop used Tackle!"); + MESSAGE("The opposing Hitmontop used Tackle!"); } } } @@ -161,10 +161,10 @@ DOUBLE_BATTLE_TEST("Intimidate activates on an empty slot") SEND_IN_MESSAGE("Hitmontop"); ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); NONE_OF { - MESSAGE("Hitmontop's Intimidate cuts Foe Ralts's attack!"); + MESSAGE("Hitmontop's Intimidate cuts the opposing Ralts's attack!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Hitmontop's Intimidate cuts Foe Azurill's attack!"); + MESSAGE("Hitmontop's Intimidate cuts the opposing Azurill's attack!"); } } @@ -209,9 +209,9 @@ SINGLE_BATTLE_TEST("Intimidate can not further lower opponents Atk stat if it is ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Foe Arbok's Intimidate cuts Wobbuffet's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Wobbuffet's attack!"); } - MESSAGE("Wobbuffet's Attack won't go lower!"); + MESSAGE("Wobbuffet's Attack won't go any lower!"); } THEN { EXPECT_EQ(player->statStages[STAT_ATK], MIN_STAT_STAGE); } @@ -256,9 +256,9 @@ SINGLE_BATTLE_TEST("Intimidate activates when it's no longer effected by Neutral TURN { SWITCH(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); - MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Neutralizing gas filled the area!"); SWITCH_OUT_MESSAGE("Weezing"); - MESSAGE("The effects of Neutralizing Gas wore off!"); + MESSAGE("The effects of the neutralizing gas wore off!"); ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); SEND_IN_MESSAGE("Wobbuffet"); } diff --git a/test/battle/ability/intrepid_sword.c b/test/battle/ability/intrepid_sword.c index fdae307a43..68300fb229 100644 --- a/test/battle/ability/intrepid_sword.c +++ b/test/battle/ability/intrepid_sword.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Intrepid Sword raises Attack by one stage") } SCENE { ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zacian's Intrepid Sword raised its Attack!"); + MESSAGE("The opposing Zacian's Intrepid Sword raised its Attack!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); } @@ -34,11 +34,11 @@ SINGLE_BATTLE_TEST("Intrepid Sword raises Attack by one stage only once per batt } SCENE { ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zacian's Intrepid Sword raised its Attack!"); + MESSAGE("The opposing Zacian's Intrepid Sword raised its Attack!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zacian's Intrepid Sword raised its Attack!"); + MESSAGE("The opposing Zacian's Intrepid Sword raised its Attack!"); } } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE); @@ -55,12 +55,12 @@ SINGLE_BATTLE_TEST("Intrepid Sword activates when it's no longer effected by Neu TURN { SWITCH(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); - MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Neutralizing gas filled the area!"); SWITCH_OUT_MESSAGE("Weezing"); - MESSAGE("The effects of Neutralizing Gas wore off!"); + MESSAGE("The effects of the neutralizing gas wore off!"); ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zacian's Intrepid Sword raised its Attack!"); + MESSAGE("The opposing Zacian's Intrepid Sword raised its Attack!"); } } @@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("Intrepid Sword and Dauntless Shield both can be Skill Swappe } SCENE { ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zacian's Intrepid Sword raised its Attack!"); + MESSAGE("The opposing Zacian's Intrepid Sword raised its Attack!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, player); ABILITY_POPUP(player, ABILITY_INTREPID_SWORD); @@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Intrepid Sword and Dauntless Shield both can be Skill Swappe ABILITY_POPUP(opponent, ABILITY_DAUNTLESS_SHIELD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zamazenta's Dauntless Shield raised its Defense!"); + MESSAGE("The opposing Zamazenta's Dauntless Shield raised its Defense!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, player); ABILITY_POPUP(player, ABILITY_DAUNTLESS_SHIELD); diff --git a/test/battle/ability/keen_eye.c b/test/battle/ability/keen_eye.c index 29797ef7cd..b047ec988f 100644 --- a/test/battle/ability/keen_eye.c +++ b/test/battle/ability/keen_eye.c @@ -27,11 +27,11 @@ SINGLE_BATTLE_TEST("Keen Eye, Gen9+ Illuminate & Minds Eye prevent accuracy stag ABILITY_POPUP(opponent, ability); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); if (species == SPECIES_HITMONCHAN) - MESSAGE("Foe Hitmonchan's Keen Eye prevents accuracy loss!"); + MESSAGE("The opposing Hitmonchan's Keen Eye prevents accuracy loss!"); else if (species == SPECIES_STARYU) - MESSAGE("Foe Staryu's Illuminate prevents accuracy loss!"); + MESSAGE("The opposing Staryu's Illuminate prevents accuracy loss!"); else - MESSAGE("Foe Ursaluna's Mind's Eye prevents accuracy loss!"); + MESSAGE("The opposing Ursaluna's Mind's Eye prevents accuracy loss!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } @@ -111,22 +111,22 @@ SINGLE_BATTLE_TEST("Keen Eye, Gen9+ Illuminate & Minds Eye don't prevent Topsy-T } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HONE_CLAWS, opponent); if (species == SPECIES_HITMONCHAN) { - MESSAGE("Foe Hitmonchan's Attack rose!"); - MESSAGE("Foe Hitmonchan's accuracy rose!"); + MESSAGE("The opposing Hitmonchan's Attack rose!"); + MESSAGE("The opposing Hitmonchan's accuracy rose!"); } else if (species == SPECIES_STARYU) { - MESSAGE("Foe Staryu's Attack rose!"); - MESSAGE("Foe Staryu's accuracy rose!"); + MESSAGE("The opposing Staryu's Attack rose!"); + MESSAGE("The opposing Staryu's accuracy rose!"); } else { - MESSAGE("Foe Ursaluna's Attack rose!"); - MESSAGE("Foe Ursaluna's accuracy rose!"); + MESSAGE("The opposing Ursaluna's Attack rose!"); + MESSAGE("The opposing Ursaluna's accuracy rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TOPSY_TURVY, player); if (species == SPECIES_HITMONCHAN) - MESSAGE("Foe Hitmonchan's stat changes were all reversed!"); + MESSAGE("All stat changes on the opposing Hitmonchan were inverted!"); else if (species == SPECIES_STARYU) - MESSAGE("Foe Staryu's stat changes were all reversed!"); + MESSAGE("All stat changes on the opposing Staryu were inverted!"); else - MESSAGE("Foe Ursaluna's stat changes were all reversed!"); + MESSAGE("All stat changes on the opposing Ursaluna were inverted!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ACC], DEFAULT_STAT_STAGE - 1); } @@ -183,13 +183,13 @@ SINGLE_BATTLE_TEST("Keen Eye & Gen9+ Illuminate don't prevent Spectral Thief fro ANIMATION(ANIM_TYPE_MOVE, MOVE_HONE_CLAWS, opponent); if (species == SPECIES_HITMONCHAN) { - MESSAGE("Foe Hitmonchan's Attack rose!"); - MESSAGE("Foe Hitmonchan's accuracy rose!"); + MESSAGE("The opposing Hitmonchan's Attack rose!"); + MESSAGE("The opposing Hitmonchan's accuracy rose!"); } else { - MESSAGE("Foe Staryu's Attack rose!"); - MESSAGE("Foe Staryu's accuracy rose!"); + MESSAGE("The opposing Staryu's Attack rose!"); + MESSAGE("The opposing Staryu's accuracy rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, player); MESSAGE("Wobbuffet stole the target's boosted stats!"); diff --git a/test/battle/ability/leaf_guard.c b/test/battle/ability/leaf_guard.c index 2c55236def..af113f1bb6 100644 --- a/test/battle/ability/leaf_guard.c +++ b/test/battle/ability/leaf_guard.c @@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("Leaf Guard prevents status conditions from Flame Orb and Tox NONE_OF { MESSAGE("Leafeon was burned!"); STATUS_ICON(player, burn: TRUE); } } else { - NONE_OF { MESSAGE("Leafeon is badly poisoned!"); STATUS_ICON(player, poison: TRUE); } + NONE_OF { MESSAGE("Leafeon was badly poisoned!"); STATUS_ICON(player, poison: TRUE); } } } } diff --git a/test/battle/ability/lightning_rod.c b/test/battle/ability/lightning_rod.c index 33dd27a6fb..c719ee145d 100644 --- a/test/battle/ability/lightning_rod.c +++ b/test/battle/ability/lightning_rod.c @@ -17,12 +17,12 @@ SINGLE_BATTLE_TEST("Lightning Rod absorbs Electric-type moves and increases the }; ABILITY_POPUP(opponent, ABILITY_LIGHTNING_ROD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Raichu's Sp. Atk rose!"); + MESSAGE("The opposing Raichu's Sp. Atk rose!"); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_LIGHTNING_ROD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Raichu's Sp. Atk rose!"); + MESSAGE("The opposing Raichu's Sp. Atk rose!"); }; ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); HP_BAR(opponent); @@ -54,10 +54,10 @@ DOUBLE_BATTLE_TEST("Lightning Rod forces single-target Electric-type moves to ta }; ABILITY_POPUP(opponentLeft, ABILITY_LIGHTNING_ROD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Raichu's Sp. Atk rose!"); + MESSAGE("The opposing Raichu's Sp. Atk rose!"); ABILITY_POPUP(opponentLeft, ABILITY_LIGHTNING_ROD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Raichu's Sp. Atk rose!"); + MESSAGE("The opposing Raichu's Sp. Atk rose!"); } else { NONE_OF { HP_BAR(opponentRight); diff --git a/test/battle/ability/magic_bounce.c b/test/battle/ability/magic_bounce.c index 8d583b154d..a643b22824 100644 --- a/test/battle/ability/magic_bounce.c +++ b/test/battle/ability/magic_bounce.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Magic Bounce bounces back status moves") } SCENE { ABILITY_POPUP(opponent, ABILITY_MAGIC_BOUNCE); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); - MESSAGE("Wynaut's Toxic was bounced back by Foe Espeon's Magic Bounce!"); + MESSAGE("Wynaut's Toxic was bounced back by the opposing Espeon's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, opponent); STATUS_ICON(player, badPoison: TRUE); } @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Magic Bounce bounces back powder moves") } SCENE { ABILITY_POPUP(opponent, ABILITY_MAGIC_BOUNCE); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); - MESSAGE("Wynaut's Stun Spore was bounced back by Foe Espeon's Magic Bounce!"); + MESSAGE("Wynaut's Stun Spore was bounced back by the opposing Espeon's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, opponent); STATUS_ICON(player, paralysis: TRUE); } @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Magic Bounce cannot bounce back powder moves against Grass T } SCENE { ABILITY_POPUP(opponent, ABILITY_MAGIC_BOUNCE); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - MESSAGE("Oddish's Stun Spore was bounced back by Foe Espeon's Magic Bounce!"); + MESSAGE("Oddish's Stun Spore was bounced back by the opposing Espeon's Magic Bounce!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, opponent); MESSAGE("It doesn't affect Oddish…"); NOT STATUS_ICON(player, paralysis: TRUE); @@ -70,7 +70,7 @@ DOUBLE_BATTLE_TEST("Magic Bounce bounces back moves hitting both foes at two foe } SCENE { ABILITY_POPUP(opponentLeft, ABILITY_MAGIC_BOUNCE); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_LEER, playerLeft); - MESSAGE("Abra's Leer was bounced back by Foe Espeon's Magic Bounce!"); + MESSAGE("Abra's Leer was bounced back by the opposing Espeon's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_LEER, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Abra's Defense fell!"); @@ -78,7 +78,7 @@ DOUBLE_BATTLE_TEST("Magic Bounce bounces back moves hitting both foes at two foe MESSAGE("Kadabra's Defense fell!"); // Also check if second original target gets hit by Leer as this was once bugged ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Wynaut's Defense fell!"); + MESSAGE("The opposing Wynaut's Defense fell!"); } } @@ -106,10 +106,10 @@ DOUBLE_BATTLE_TEST("Magic Bounce bounces back moves hitting foes field") ABILITY_POPUP(opponentRight, ABILITY_MAGIC_BOUNCE); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, playerLeft); if (abilityBattlerOne == ABILITY_MAGIC_BOUNCE) { - MESSAGE("Abra's Stealth Rock was bounced back by Foe Natu's Magic Bounce!"); + MESSAGE("Abra's Stealth Rock was bounced back by the opposing Natu's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponentLeft); } else { - MESSAGE("Abra's Stealth Rock was bounced back by Foe Espeon's Magic Bounce!"); + MESSAGE("Abra's Stealth Rock was bounced back by the opposing Espeon's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponentRight); } } @@ -126,7 +126,7 @@ SINGLE_BATTLE_TEST("Magic Bounce bounced back status moves can not be bounced ba } SCENE { ABILITY_POPUP(opponent, ABILITY_MAGIC_BOUNCE); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); - MESSAGE("Espeon's Toxic was bounced back by Foe Espeon's Magic Bounce!"); + MESSAGE("Espeon's Toxic was bounced back by the opposing Espeon's Magic Bounce!"); NOT ABILITY_POPUP(player, ABILITY_MAGIC_BOUNCE); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, opponent); STATUS_ICON(player, badPoison: TRUE); diff --git a/test/battle/ability/magician.c b/test/battle/ability/magician.c index 5c67a35bac..a951c2f973 100644 --- a/test/battle/ability/magician.c +++ b/test/battle/ability/magician.c @@ -15,15 +15,15 @@ SINGLE_BATTLE_TEST("Magician does not get self-damage recoil after stealing Life // 1st turn MESSAGE("Delphox used Tackle!"); ABILITY_POPUP(player, ABILITY_MAGICIAN); - MESSAGE("Delphox stole Foe Wobbuffet's Life Orb!"); + MESSAGE("Delphox stole the opposing Wobbuffet's Life Orb!"); NONE_OF { HP_BAR(player); - MESSAGE("Delphox was hurt by its Life Orb!"); + MESSAGE("Delphox was hurt by the Life Orb!"); } // 2nd turn - Life Orb recoil happens now MESSAGE("Delphox used Tackle!"); HP_BAR(player); - MESSAGE("Delphox was hurt by its Life Orb!"); + MESSAGE("Delphox was hurt by the Life Orb!"); } } diff --git a/test/battle/ability/minds_eye.c b/test/battle/ability/minds_eye.c index 7799735ee2..bf50fa0e2e 100644 --- a/test/battle/ability/minds_eye.c +++ b/test/battle/ability/minds_eye.c @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Mind's Eye doesn't bypass a Ghost-type's Wonder Guard") HP_BAR(opponent); } ABILITY_POPUP(opponent, ABILITY_WONDER_GUARD); - MESSAGE("Foe Shedinja avoided damage with Wonder Guard!"); + MESSAGE("The opposing Shedinja avoided damage with Wonder Guard!"); } } diff --git a/test/battle/ability/mirror_armor.c b/test/battle/ability/mirror_armor.c index 327b493a35..288fe72334 100644 --- a/test/battle/ability/mirror_armor.c +++ b/test/battle/ability/mirror_armor.c @@ -23,22 +23,22 @@ SINGLE_BATTLE_TEST("Mirror Armor lowers a stat of the attacking pokemon") switch (statId) { case STAT_DEF: - MESSAGE("Foe Wynaut's Defense fell!"); + MESSAGE("The opposing Wynaut's Defense fell!"); break; case STAT_ATK: - MESSAGE("Foe Wynaut's Attack fell!"); + MESSAGE("The opposing Wynaut's Attack fell!"); break; case STAT_EVASION: - MESSAGE("Foe Wynaut's evasiveness harshly fell!"); + MESSAGE("The opposing Wynaut's evasiveness harshly fell!"); break; case STAT_ACC: - MESSAGE("Foe Wynaut's accuracy fell!"); + MESSAGE("The opposing Wynaut's accuracy fell!"); break; case STAT_SPATK: - MESSAGE("Foe Wynaut's Sp. Atk fell!"); + MESSAGE("The opposing Wynaut's Sp. Atk fell!"); break; case STAT_SPDEF: - MESSAGE("Foe Wynaut's Sp. Def harshly fell!"); + MESSAGE("The opposing Wynaut's Sp. Def harshly fell!"); break; } } THEN { @@ -55,11 +55,11 @@ SINGLE_BATTLE_TEST("Mirror Armor triggers even if the attacking Pokemon also has } WHEN { TURN { MOVE(opponent, MOVE_LEER); } } SCENE { - MESSAGE("Foe Corviknight used Leer!"); + MESSAGE("The opposing Corviknight used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Corviknight's Defense fell!"); + MESSAGE("The opposing Corviknight's Defense fell!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); @@ -74,10 +74,10 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stats of an attacking Pokemon } WHEN { TURN { MOVE(opponent, MOVE_LEER); } } SCENE { - MESSAGE("Foe Wynaut used Leer!"); + MESSAGE("The opposing Wynaut used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); - MESSAGE("Foe Wynaut's Clear Body prevents stat loss!"); + MESSAGE("The opposing Wynaut's Clear Body prevents stat loss!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE); @@ -95,7 +95,7 @@ SINGLE_BATTLE_TEST("Mirror Armor lowers the Attack of Pokemon with Intimidate") ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Gyarados's Attack fell!"); + MESSAGE("The opposing Gyarados's Attack fell!"); } THEN { EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 1); @@ -113,9 +113,9 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stats of an attacking Pokemon TURN { MOVE(opponent, MOVE_SUBSTITUTE); } TURN { MOVE(opponent, MOVE_LEER); } } SCENE { - MESSAGE("Foe Wynaut used Substitute!"); + MESSAGE("The opposing Wynaut used Substitute!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); - MESSAGE("Foe Wynaut used Leer!"); + MESSAGE("The opposing Wynaut used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); } THEN { @@ -132,10 +132,10 @@ SINGLE_BATTLE_TEST("Mirror Armor raises the stat of an attacking Pokemon with Co } WHEN { TURN { MOVE(opponent, MOVE_LEER); } } SCENE { - MESSAGE("Foe Shuckle used Leer!"); + MESSAGE("The opposing Shuckle used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Shuckle's Defense rose!"); + MESSAGE("The opposing Shuckle's Defense rose!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); @@ -156,10 +156,10 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stat of the attacking Pokemon MESSAGE("Corviknight used Screech!"); MESSAGE("Corviknight used Screech!"); MESSAGE("Corviknight used Screech!"); - MESSAGE("Foe Wynaut used Leer!"); + MESSAGE("The opposing Wynaut used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wynaut's Defense won't go lower!"); + MESSAGE("The opposing Wynaut's Defense won't go any lower!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], MIN_STAT_STAGE); @@ -186,10 +186,10 @@ DOUBLE_BATTLE_TEST("Mirror Armor lowers Speed of the partner Pokemon after Court TURN { } } SCENE { MESSAGE("Wobbuffet used Sticky Web!"); - MESSAGE("Foe Wynaut used Court Change!"); - MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); + MESSAGE("The opposing Wynaut used Court Change!"); + MESSAGE("The opposing Wynaut swapped the battle effects affecting each side of the field!"); SEND_IN_MESSAGE("Corviknight"); - MESSAGE("Corviknight was caught in a Sticky Web!"); + MESSAGE("Corviknight was caught in a sticky web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Wobbuffet's Speed fell!"); diff --git a/test/battle/ability/moxie.c b/test/battle/ability/moxie.c index 28fb9333fe..56577736db 100644 --- a/test/battle/ability/moxie.c +++ b/test/battle/ability/moxie.c @@ -23,8 +23,8 @@ DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh raises Attack by one stage after direct for (i = 0; i < 3; i++) { ONE_OF { MESSAGE("Snorunt fainted!"); - MESSAGE("Foe Glalie fainted!"); - MESSAGE("Foe Abra fainted!"); + MESSAGE("The opposing Glalie fainted!"); + MESSAGE("The opposing Abra fainted!"); } ABILITY_POPUP(playerLeft, abilityPopUp); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); @@ -61,8 +61,8 @@ DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger if Pokemon faint to in for (i = 0; i < 3; i++) { ONE_OF { MESSAGE("Snorunt fainted!"); - MESSAGE("Foe Glalie fainted!"); - MESSAGE("Foe Abra fainted!"); + MESSAGE("The opposing Glalie fainted!"); + MESSAGE("The opposing Abra fainted!"); } NONE_OF { ABILITY_POPUP(playerLeft, abilityPopUp); @@ -95,13 +95,13 @@ SINGLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger when already at maximu ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); if (species == SPECIES_SALAMENCE) - MESSAGE("Salamence cut its own HP and maximized ATTACK!"); + MESSAGE("Salamence cut its own HP and maximized its Attack!"); else if (species == SPECIES_GLASTRIER) - MESSAGE("Glastrier cut its own HP and maximized ATTACK!"); + MESSAGE("Glastrier cut its own HP and maximized its Attack!"); else - MESSAGE("Calyrex cut its own HP and maximized ATTACK!"); + MESSAGE("Calyrex cut its own HP and maximized its Attack!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); - MESSAGE("Foe Snorunt fainted!"); + MESSAGE("The opposing Snorunt fainted!"); NONE_OF { ABILITY_POPUP(player, abilityPopUp); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); diff --git a/test/battle/ability/opportunist.c b/test/battle/ability/opportunist.c index b627b8ec6e..54bc57929f 100644 --- a/test/battle/ability/opportunist.c +++ b/test/battle/ability/opportunist.c @@ -61,18 +61,18 @@ DOUBLE_BATTLE_TEST("Opportunist raises Attack only once when partner has Intimid if (abilityLeft == ABILITY_CONTRARY) { ABILITY_POPUP(opponentLeft, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Spinda's Attack rose!"); + MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Mightyena's Intimidate cuts Foe Spinda's attack!"); + MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's attack!"); } if (abilityRight == ABILITY_CONTRARY) { ABILITY_POPUP(opponentRight, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Spinda's Attack rose!"); + MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Mightyena's Intimidate cuts Foe Spinda's attack!"); + MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's attack!"); } if ((abilityLeft == ABILITY_CONTRARY && abilityRight != ABILITY_CONTRARY) diff --git a/test/battle/ability/overcoat.c b/test/battle/ability/overcoat.c index 26eb90d66b..b73f098e78 100644 --- a/test/battle/ability/overcoat.c +++ b/test/battle/ability/overcoat.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Overcoat blocks powder and spore moves") } SCENE { ABILITY_POPUP(opponent, ABILITY_OVERCOAT); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - MESSAGE("It doesn't affect Foe Pineco…"); + MESSAGE("It doesn't affect the opposing Pineco…"); } } diff --git a/test/battle/ability/own_tempo.c b/test/battle/ability/own_tempo.c index a37bc0024a..4b3c42053b 100644 --- a/test/battle/ability/own_tempo.c +++ b/test/battle/ability/own_tempo.c @@ -13,11 +13,11 @@ SINGLE_BATTLE_TEST("Own Tempo prevents Intimidate but no other stat down changes } SCENE { ABILITY_POPUP(player, ABILITY_INTIMIDATE); ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Slowpoke's Own Tempo prevents stat loss!"); + MESSAGE("The opposing Slowpoke's Own Tempo prevents stat loss!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player); NONE_OF { ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Slowpoke's Own Tempo prevents stat loss!"); + MESSAGE("The opposing Slowpoke's Own Tempo prevents stat loss!"); } } } @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Own Tempo prevents confusion from moves by the opponent") TURN { MOVE(player, MOVE_CONFUSE_RAY); } } SCENE { ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Slowpoke's Own Tempo prevents confusion!"); + MESSAGE("The opposing Slowpoke's Own Tempo prevents confusion!"); } } @@ -52,7 +52,7 @@ SINGLE_BATTLE_TEST("Own Tempo prevents confusion from moves by the user") ANIMATION(ANIM_TYPE_MOVE, MOVE_PETAL_DANCE, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_PETAL_DANCE, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_PETAL_DANCE, opponent); - NONE_OF { MESSAGE("Foe Slowpoke became confused due to fatigue!"); } + NONE_OF { MESSAGE("The opposing Slowpoke became confused due to fatigue!"); } } } @@ -68,7 +68,7 @@ SINGLE_BATTLE_TEST("Own Tempo is ignored by Mold Breaker") } SCENE { NONE_OF { ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Slowpoke's Own Tempo prevents confusion!"); + MESSAGE("The opposing Slowpoke's Own Tempo prevents confusion!"); } } } @@ -84,12 +84,12 @@ SINGLE_BATTLE_TEST("Own Tempo cures confusion obtained from an opponent with Mol TURN { MOVE(player, MOVE_CONFUSE_RAY); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("Foe Slowpoke became confused!"); + MESSAGE("The opposing Slowpoke became confused!"); NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); } ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Slowpoke's Own Tempo cured its confusion problem!"); + MESSAGE("The opposing Slowpoke's Own Tempo cured its confusion problem!"); } } @@ -107,10 +107,10 @@ SINGLE_BATTLE_TEST("Own Tempo cures confusion if it's obtained via Skill Swap") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, player); ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Wobbuffet's Own Tempo cured its confusion problem!"); + MESSAGE("The opposing Wobbuffet's Own Tempo cured its confusion problem!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } diff --git a/test/battle/ability/parental_bond.c b/test/battle/ability/parental_bond.c index 3ee942e789..e4b6323286 100644 --- a/test/battle/ability/parental_bond.c +++ b/test/battle/ability/parental_bond.c @@ -94,7 +94,7 @@ DOUBLE_BATTLE_TEST("Parental Bond does not convert multi-target moves into a two ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, playerLeft); HP_BAR(opponentLeft); MESSAGE("It doesn't affect Pidgey…"); - MESSAGE("It doesn't affect Foe Pidgey…"); + MESSAGE("It doesn't affect the opposing Pidgey…"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); @@ -149,7 +149,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil MESSAGE("Kangaskhan has Mega Evolved into Mega Kangaskhan!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } THEN { @@ -176,7 +176,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); - MESSAGE("Hit 3 time(s)!"); + MESSAGE("The Pokémon was hit 3 time(s)!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } THEN { @@ -204,7 +204,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); - MESSAGE("Hit 4 time(s)!"); + MESSAGE("The Pokémon was hit 4 time(s)!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } THEN { @@ -231,7 +231,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } THEN { @@ -255,9 +255,9 @@ SINGLE_BATTLE_TEST("Parental Bond Smack Down effect triggers after 2nd hit") MESSAGE("Kangaskhan has Mega Evolved into Mega Kangaskhan!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SMACK_DOWN, player); HP_BAR(opponent); - NOT MESSAGE("Foe Skarmory fell straight down!"); + NOT MESSAGE("The opposing Skarmory fell straight down!"); HP_BAR(opponent); - MESSAGE("Foe Skarmory fell straight down!"); + MESSAGE("The opposing Skarmory fell straight down!"); } THEN { EXPECT_EQ(player->species, SPECIES_KANGASKHAN_MEGA); } @@ -277,7 +277,7 @@ SINGLE_BATTLE_TEST("Parental Bond Snore strikes twice while asleep") ANIMATION(ANIM_TYPE_MOVE, MOVE_SNORE, player); HP_BAR(opponent, captureDamage: &damage[0]); HP_BAR(opponent, captureDamage: &damage[1]); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } THEN { if (B_PARENTAL_BOND_DMG == GEN_6) EXPECT_MUL_EQ(damage[0], Q_4_12(0.5), damage[1]); diff --git a/test/battle/ability/pastel_veil.c b/test/battle/ability/pastel_veil.c index 8ea83bbf86..a6b6168547 100644 --- a/test/battle/ability/pastel_veil.c +++ b/test/battle/ability/pastel_veil.c @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("Pastel Veil immediately cures Mold Breaker poison") ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); STATUS_ICON(opponent, badPoison: TRUE); ABILITY_POPUP(opponent, ABILITY_PASTEL_VEIL); - MESSAGE("Foe Ponyta's Pastel Veil cured its poison problem!"); + MESSAGE("The opposing Ponyta's Pastel Veil cured its poison problem!"); STATUS_ICON(opponent, none: TRUE); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } @@ -78,7 +78,7 @@ SINGLE_BATTLE_TEST("Pastel Veil prevents Toxic bad poison") } SCENE { MESSAGE("Wobbuffet used Toxic!"); ABILITY_POPUP(opponent, ABILITY_PASTEL_VEIL); - MESSAGE("Foe Ponyta is protected by a pastel veil!"); + MESSAGE("The opposing Ponyta is protected by a pastel veil!"); NOT STATUS_ICON(opponent, badPoison: TRUE); } } @@ -96,7 +96,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil prevents Toxic bad poison on partner") } SCENE { MESSAGE("Wobbuffet used Toxic!"); ABILITY_POPUP(opponentLeft, ABILITY_PASTEL_VEIL); - MESSAGE("Foe Wynaut is protected by a pastel veil!"); + MESSAGE("The opposing Wynaut is protected by a pastel veil!"); NOT STATUS_ICON(opponentRight, badPoison: TRUE); } } @@ -147,7 +147,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil cures partner's poison on initial switch in") } SCENE { MESSAGE("2 sent out Wobbuffet and Ponyta!"); ABILITY_POPUP(opponentRight, ABILITY_PASTEL_VEIL); - MESSAGE("Foe Wobbuffet was cured of its poisoning!"); + MESSAGE("The opposing Wobbuffet was cured of its poisoning!"); STATUS_ICON(opponentLeft, none: TRUE); } } @@ -165,7 +165,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil cures partner's poison on switch in") } SCENE { MESSAGE("2 sent out Ponyta!"); ABILITY_POPUP(opponentRight, ABILITY_PASTEL_VEIL); - MESSAGE("Foe Wobbuffet was cured of its poisoning!"); + MESSAGE("The opposing Wobbuffet was cured of its poisoning!"); STATUS_ICON(opponentLeft, none: TRUE); } } diff --git a/test/battle/ability/poison_point.c b/test/battle/ability/poison_point.c index 26c9c72968..9f9cd5e900 100644 --- a/test/battle/ability/poison_point.c +++ b/test/battle/ability/poison_point.c @@ -18,13 +18,13 @@ SINGLE_BATTLE_TEST("Poison Point inflicts poison on contact") if (gMovesInfo[move].makesContact) { ABILITY_POPUP(opponent, ABILITY_POISON_POINT); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); - MESSAGE("Wobbuffet was poisoned by Foe Nidoran♂'s Poison Point!"); + MESSAGE("Wobbuffet was poisoned by the opposing Nidoran♂'s Poison Point!"); STATUS_ICON(player, poison: TRUE); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_POISON_POINT); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); - MESSAGE("Wobbuffet was poisoned by Foe Nidoran♂'s Poison Point!"); + MESSAGE("Wobbuffet was poisoned by the opposing Nidoran♂'s Poison Point!"); STATUS_ICON(player, poison: TRUE); } } @@ -45,7 +45,7 @@ SINGLE_BATTLE_TEST("Poison Point triggers 30% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_POISON_POINT); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); - MESSAGE("Wobbuffet was poisoned by Foe Nidoran♂'s Poison Point!"); + MESSAGE("Wobbuffet was poisoned by the opposing Nidoran♂'s Poison Point!"); STATUS_ICON(player, poison: TRUE); } } diff --git a/test/battle/ability/poison_puppeteer.c b/test/battle/ability/poison_puppeteer.c index af5d5389fa..b8124b975b 100644 --- a/test/battle/ability/poison_puppeteer.c +++ b/test/battle/ability/poison_puppeteer.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Poison Puppeteer confuses target if it was poisoned by a dam STATUS_ICON(opponent, poison: TRUE); ABILITY_POPUP(player, ABILITY_POISON_PUPPETEER); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } @@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("Poison Puppeteer confuses target if it was (badly) poisoned STATUS_ICON(opponent, badPoison: TRUE); ABILITY_POPUP(player, ABILITY_POISON_PUPPETEER); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } @@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Poison Puppeteer does not trigger if poison is Toxic Spikes NONE_OF { ABILITY_POPUP(player, ABILITY_POISON_PUPPETEER); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } } diff --git a/test/battle/ability/poison_touch.c b/test/battle/ability/poison_touch.c index b69fa20444..8fb4d243fb 100644 --- a/test/battle/ability/poison_touch.c +++ b/test/battle/ability/poison_touch.c @@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Poison Touch has a 30% chance to poison when attacking with ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ABILITY_POPUP(player, ABILITY_POISON_TOUCH); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet was poisoned by Grimer's Poison Touch!"); + MESSAGE("The opposing Wobbuffet was poisoned by Grimer's Poison Touch!"); STATUS_ICON(opponent, poison: TRUE); } } @@ -38,13 +38,13 @@ SINGLE_BATTLE_TEST("Poison Touch only applies when using contact moves") if (gMovesInfo[move].makesContact) { ABILITY_POPUP(player, ABILITY_POISON_TOUCH); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet was poisoned by Grimer's Poison Touch!"); + MESSAGE("The opposing Wobbuffet was poisoned by Grimer's Poison Touch!"); STATUS_ICON(opponent, poison: TRUE); } else { NONE_OF { ABILITY_POPUP(player, ABILITY_POISON_TOUCH); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet was poisoned by Grimer's Poison Touch!"); + MESSAGE("The opposing Wobbuffet was poisoned by Grimer's Poison Touch!"); STATUS_ICON(opponent, poison: TRUE); } } @@ -65,13 +65,13 @@ SINGLE_BATTLE_TEST("Poison Touch applies between multi-hit move hits") ANIMATION(ANIM_TYPE_MOVE, MOVE_ARM_THRUST, player); ABILITY_POPUP(player, ABILITY_POISON_TOUCH); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet was poisoned by Grimer's Poison Touch!"); + MESSAGE("The opposing Wobbuffet was poisoned by Grimer's Poison Touch!"); STATUS_ICON(opponent, poison: TRUE); - MESSAGE("Foe Wobbuffet's Pecha Berry cured poison!"); + MESSAGE("The opposing Wobbuffet's Pecha Berry cured its poison!"); STATUS_ICON(opponent, poison: FALSE); ABILITY_POPUP(player, ABILITY_POISON_TOUCH); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet was poisoned by Grimer's Poison Touch!"); + MESSAGE("The opposing Wobbuffet was poisoned by Grimer's Poison Touch!"); STATUS_ICON(opponent, poison: TRUE); } } diff --git a/test/battle/ability/prankster.c b/test/battle/ability/prankster.c index d5fae3edb7..c569506729 100644 --- a/test/battle/ability/prankster.c +++ b/test/battle/ability/prankster.c @@ -77,11 +77,11 @@ DOUBLE_BATTLE_TEST("Prankster-affected moves called via Instruct do not affect D } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, playerLeft); - MESSAGE("It doesn't affect Foe Umbreon…"); + MESSAGE("It doesn't affect the opposing Umbreon…"); MESSAGE("Wobbuffet used Instruct!"); MESSAGE("Volbeat used Confuse Ray!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, playerLeft); - MESSAGE("It doesn't affect Foe Umbreon…"); + MESSAGE("It doesn't affect the opposing Umbreon…"); } } @@ -114,7 +114,7 @@ DOUBLE_BATTLE_TEST("Moves called via Prankster-affected After you affect Dark-ty ANIMATION(ANIM_TYPE_MOVE, MOVE_AFTER_YOU, playerLeft); MESSAGE("Wobbuffet used Confuse Ray!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, playerRight); - MESSAGE("Foe Umbreon became confused!"); + MESSAGE("The opposing Umbreon became confused!"); } } @@ -156,10 +156,10 @@ SINGLE_BATTLE_TEST("Prankster-affected moves can still be bounced back by Dark-t TURN { MOVE(player, MOVE_MAGIC_COAT); MOVE(opponent, MOVE_CONFUSE_RAY); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, player); - MESSAGE("Foe Volbeat used Confuse Ray!"); - MESSAGE("Foe Volbeat's Confuse Ray was bounced back by MAGIC COAT!"); + MESSAGE("The opposing Volbeat used Confuse Ray!"); + MESSAGE("Umbreon bounced the Confuse Ray back!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("Foe Volbeat became confused!"); + MESSAGE("The opposing Volbeat became confused!"); } } @@ -178,14 +178,14 @@ SINGLE_BATTLE_TEST("Prankster-affected moves which are reflected by Magic Coat c } SCENE { MESSAGE("Sableye used Magic Coat!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, player); - MESSAGE("Foe Murkrow used Confuse Ray!"); - MESSAGE("Foe Murkrow's Confuse Ray was bounced back by MAGIC COAT!"); + MESSAGE("The opposing Murkrow used Confuse Ray!"); + MESSAGE("Sableye bounced the Confuse Ray back!"); if (sableyeAbility == ABILITY_PRANKSTER) { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("It doesn't affect Foe Murkrow…"); + MESSAGE("It doesn't affect the opposing Murkrow…"); } else { ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("Foe Murkrow became confused!"); + MESSAGE("The opposing Murkrow became confused!"); } } } @@ -198,7 +198,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves can still be bounced back by a Dark } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CONFUSE_RAY); } } SCENE { - MESSAGE("Foe Volbeat's Confuse Ray was bounced back by Absol's Magic Bounce!"); + MESSAGE("The opposing Volbeat's Confuse Ray was bounced back by Absol's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); } } @@ -211,9 +211,9 @@ SINGLE_BATTLE_TEST("Prankster-affected moves that are bounced back by Magic Boun } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CONFUSE_RAY); } } SCENE { - MESSAGE("Foe Murkrow's Confuse Ray was bounced back by Absol's Magic Bounce!"); + MESSAGE("The opposing Murkrow's Confuse Ray was bounced back by Absol's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("Foe Murkrow became confused!"); + MESSAGE("The opposing Murkrow became confused!"); } } diff --git a/test/battle/ability/primordial_sea.c b/test/battle/ability/primordial_sea.c index 4fd01613b0..643dca161c 100644 --- a/test/battle/ability/primordial_sea.c +++ b/test/battle/ability/primordial_sea.c @@ -16,13 +16,13 @@ SINGLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves") TURN { MOVE(opponent, MOVE_EMBER); } TURN { MOVE(opponent, MOVE_EMBER); } } SCENE { - MESSAGE("Foe Wobbuffet used Ember!"); + MESSAGE("The opposing Wobbuffet used Ember!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); - MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); + MESSAGE("The Fire-type attack fizzled out in the heavy rain!"); NOT HP_BAR(player); - MESSAGE("Foe Wobbuffet used Ember!"); + MESSAGE("The opposing Wobbuffet used Ember!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); - MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); + MESSAGE("The Fire-type attack fizzled out in the heavy rain!"); NOT HP_BAR(player); } THEN { EXPECT_EQ(player->hp, player->maxHP); @@ -42,10 +42,10 @@ DOUBLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves and prints th } WHEN { TURN { MOVE(opponentLeft, MOVE_ERUPTION); } } SCENE { - MESSAGE("Foe Wobbuffet used Eruption!"); + MESSAGE("The opposing Wobbuffet used Eruption!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ERUPTION, opponentLeft); - MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); - NOT MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); + MESSAGE("The Fire-type attack fizzled out in the heavy rain!"); + NOT MESSAGE("The Fire-type attack fizzled out in the heavy rain!"); } THEN { EXPECT_EQ(playerLeft->hp, playerLeft->maxHP); EXPECT_EQ(playerRight->hp, playerRight->maxHP); @@ -60,7 +60,7 @@ SINGLE_BATTLE_TEST("Primordial Sea does not block a move if pokemon is asleep an } WHEN { TURN { MOVE(opponent, MOVE_EMBER); } } SCENE { - NOT MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); - MESSAGE("Foe Wobbuffet is fast asleep."); + NOT MESSAGE("The Fire-type attack fizzled out in the heavy rain!"); + MESSAGE("The opposing Wobbuffet is fast asleep."); } } \ No newline at end of file diff --git a/test/battle/ability/protean.c b/test/battle/ability/protean.c index 936c341f89..93162f7398 100644 --- a/test/battle/ability/protean.c +++ b/test/battle/ability/protean.c @@ -20,15 +20,15 @@ SINGLE_BATTLE_TEST("Protean changes the type of the user only once per switch in TURN { MOVE(opponent, MOVE_WATER_GUN); } } SCENE { ABILITY_POPUP(opponent, ABILITY_PROTEAN); - MESSAGE("Foe Kecleon transformed into the Water type!"); + MESSAGE("The opposing Kecleon transformed into the Water type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent); NONE_OF { ABILITY_POPUP(opponent, ABILITY_PROTEAN); - MESSAGE("Foe Kecleon transformed into the Normal type!"); + MESSAGE("The opposing Kecleon transformed into the Normal type!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ABILITY_POPUP(opponent, ABILITY_PROTEAN); - MESSAGE("Foe Kecleon transformed into the Water type!"); + MESSAGE("The opposing Kecleon transformed into the Water type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent); } } diff --git a/test/battle/ability/quick_draw.c b/test/battle/ability/quick_draw.c index 9c5afb6193..ef15801bff 100644 --- a/test/battle/ability/quick_draw.c +++ b/test/battle/ability/quick_draw.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Quick Draw has a 30% chance of going first") } SCENE { ABILITY_POPUP(player, ABILITY_QUICK_DRAW); MESSAGE("Slowbro used Tackle!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } } @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Quick Draw does not activate 70% of the time") TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_TACKLE); } } SCENE { NOT ABILITY_POPUP(player, ABILITY_QUICK_DRAW); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Slowbro used Tackle!"); } } diff --git a/test/battle/ability/rattled.c b/test/battle/ability/rattled.c index fed99b775d..f2aeff105c 100644 --- a/test/battle/ability/rattled.c +++ b/test/battle/ability/rattled.c @@ -32,22 +32,22 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when hit by Bug, Dark or Ghost typ if (move != MOVE_TACKLE) { ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Sudowoodo's Speed rose!"); + MESSAGE("The opposing Sudowoodo's Speed rose!"); } - MESSAGE("Foe Sudowoodo used Celebrate!"); + MESSAGE("The opposing Sudowoodo used Celebrate!"); // Sudowoodo is now faster if (move != MOVE_TACKLE){ - MESSAGE("Foe Sudowoodo used Celebrate!"); + MESSAGE("The opposing Sudowoodo used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Sudowoodo's Speed rose!"); + MESSAGE("The opposing Sudowoodo's Speed rose!"); } else { ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); - MESSAGE("Foe Sudowoodo used Celebrate!"); + MESSAGE("The opposing Sudowoodo used Celebrate!"); } } } @@ -63,10 +63,10 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when affected by Intimidate") } SCENE { ABILITY_POPUP(player, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Gyarados's Intimidate cuts Foe Sudowoodo's attack!"); + MESSAGE("Gyarados's Intimidate cuts the opposing Sudowoodo's attack!"); ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Sudowoodo's Speed rose!"); + MESSAGE("The opposing Sudowoodo's Speed rose!"); } } @@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("Rattled triggers correctly when hit by U-Turn") // Specific HP_BAR(opponent); ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Sudowoodo's Speed rose!"); + MESSAGE("The opposing Sudowoodo's Speed rose!"); SEND_IN_MESSAGE("Wynaut"); } } diff --git a/test/battle/ability/sap_sipper.c b/test/battle/ability/sap_sipper.c index b253bfaa84..a33c1a2b29 100644 --- a/test/battle/ability/sap_sipper.c +++ b/test/battle/ability/sap_sipper.c @@ -67,14 +67,14 @@ SINGLE_BATTLE_TEST("Sap Sipper blocks multi-hit grass type moves") } WHEN { TURN { MOVE(opponent, MOVE_BULLET_SEED); } } SCENE { - MESSAGE("Foe Shellder used Bullet Seed!"); + MESSAGE("The opposing Shellder used Bullet Seed!"); ABILITY_POPUP(player, ABILITY_SAP_SIPPER); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Marill's Attack rose!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, opponent); HP_BAR(player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); } } } diff --git a/test/battle/ability/schooling.c b/test/battle/ability/schooling.c index efa38cbb68..19c2b14c8f 100644 --- a/test/battle/ability/schooling.c +++ b/test/battle/ability/schooling.c @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is 25 ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); } MESSAGE("Wishiwashi used Celebrate!"); - MESSAGE("Foe Wobbuffet used Super Fang!"); + MESSAGE("The opposing Wobbuffet used Super Fang!"); HP_BAR(player); if (level >= 20) { @@ -64,7 +64,7 @@ SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is ov ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); } MESSAGE("Wishiwashi used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { if (level >= 20 && overQuarterHP) EXPECT_EQ(player->species, SPECIES_WISHIWASHI_SCHOOL); @@ -92,7 +92,7 @@ SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is he TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_HEAL_PULSE); } } SCENE { MESSAGE("Wishiwashi used Celebrate!"); - MESSAGE("Foe Wobbuffet used Heal Pulse!"); + MESSAGE("The opposing Wobbuffet used Heal Pulse!"); HP_BAR(player); if (level >= 20) { diff --git a/test/battle/ability/scrappy.c b/test/battle/ability/scrappy.c index 22b6660b69..26a135860c 100644 --- a/test/battle/ability/scrappy.c +++ b/test/battle/ability/scrappy.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Scrappy prevents intimidate") ABILITY_POPUP(player, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } ABILITY_POPUP(opponent, ABILITY_SCRAPPY); - MESSAGE("Foe Kangaskhan's Scrappy prevents stat loss!"); + MESSAGE("The opposing Kangaskhan's Scrappy prevents stat loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); @@ -61,6 +61,6 @@ SINGLE_BATTLE_TEST("Scrappy doesn't bypass a Ghost-type's Wonder Guard") HP_BAR(opponent); } ABILITY_POPUP(opponent, ABILITY_WONDER_GUARD); - MESSAGE("Foe Shedinja avoided damage with Wonder Guard!"); + MESSAGE("The opposing Shedinja avoided damage with Wonder Guard!"); } } diff --git a/test/battle/ability/seed_sower.c b/test/battle/ability/seed_sower.c index 64c21dbdba..822fa8b703 100644 --- a/test/battle/ability/seed_sower.c +++ b/test/battle/ability/seed_sower.c @@ -9,7 +9,7 @@ SINGLE_BATTLE_TEST("Seed Sower sets up Grassy Terrain when hit by an attack") } WHEN { TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); HP_BAR(player); ABILITY_POPUP(player); MESSAGE("Grass grew to cover the battlefield!"); diff --git a/test/battle/ability/shed_skin.c b/test/battle/ability/shed_skin.c index d3030b9baf..0c44b750a4 100644 --- a/test/battle/ability/shed_skin.c +++ b/test/battle/ability/shed_skin.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Shed Skin triggers 30% of the time") TURN; } SCENE { ABILITY_POPUP(opponent, ABILITY_SHED_SKIN); - MESSAGE("Foe Arbok's Shed Skin cured its poison problem!"); + MESSAGE("The opposing Arbok's Shed Skin cured its poison problem!"); STATUS_ICON(opponent, poison: FALSE); } } diff --git a/test/battle/ability/sheer_force.c b/test/battle/ability/sheer_force.c index c144c8596f..97dee48a31 100644 --- a/test/battle/ability/sheer_force.c +++ b/test/battle/ability/sheer_force.c @@ -51,13 +51,13 @@ SINGLE_BATTLE_TEST("Sheer Force boosts power, but removes secondary effects of m STATUS_ICON(opponent, STATUS1_TOXIC_POISON); STATUS_ICON(opponent, STATUS1_PARALYSIS); MESSAGE("Wobbuffet is confused!"); - MESSAGE("Wobbuffet flinched!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); } // Volt Tackle/Flare Blitz edge case: recoil happens, but target isn't statused if (gMovesInfo[move].recoil > 0) { HP_BAR(player); - MESSAGE("Tauros is hit with recoil!"); + MESSAGE("Tauros was damaged by the recoil!"); } } } FINALLY { diff --git a/test/battle/ability/shield_dust.c b/test/battle/ability/shield_dust.c index d1785bd69e..9374a5f018 100644 --- a/test/battle/ability/shield_dust.c +++ b/test/battle/ability/shield_dust.c @@ -28,12 +28,12 @@ SINGLE_BATTLE_TEST("Shield Dust blocks secondary effects") ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); NONE_OF { - MESSAGE("Foe Vivillon is paralyzed! It may be unable to move!"); - MESSAGE("Foe Vivillon was burned!"); - MESSAGE("Foe Vivillon was poisoned!"); - MESSAGE("Foe Vivillon flinched!"); + MESSAGE("The opposing Vivillon is paralyzed, so it may be unable to move!"); + MESSAGE("The opposing Vivillon was burned!"); + MESSAGE("The opposing Vivillon was poisoned!"); + MESSAGE("The opposing Vivillon flinched and couldn't move!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Vivillon was prevented from healing!"); + MESSAGE("The opposing Vivillon was prevented from healing!"); } } THEN { // Can't find good way to test trapping EXPECT(!(opponent->status2 & STATUS2_ESCAPE_PREVENTION)); @@ -64,16 +64,16 @@ SINGLE_BATTLE_TEST("Shield Dust does not block primary effects") switch (move) { case MOVE_INFESTATION: - MESSAGE("Foe Vivillon has been afflicted with an infestation by Wobbuffet!"); + MESSAGE("The opposing Vivillon has been afflicted with an infestation by Wobbuffet!"); break; case MOVE_THOUSAND_ARROWS: - MESSAGE("Foe Vivillon fell straight down!"); + MESSAGE("The opposing Vivillon fell straight down!"); break; case MOVE_JAW_LOCK: MESSAGE("Neither Pokémon can run away!"); break; case MOVE_PAY_DAY: - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); break; } } THEN { // Can't find good way to test trapping @@ -137,11 +137,11 @@ DOUBLE_BATTLE_TEST("Shield Dust does or does not block Sparkling Aria depending } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPARKLING_ARIA, playerLeft); if (moveToUse == MOVE_TACKLE) { - MESSAGE("Foe Vivillon's burn was healed."); + MESSAGE("The opposing Vivillon's burn was cured!"); STATUS_ICON(opponentLeft, none: TRUE); } else { NONE_OF { - MESSAGE("Foe Vivillon's burn was healed."); + MESSAGE("The opposing Vivillon's burn was cured!"); STATUS_ICON(opponentLeft, none: TRUE); } } @@ -159,7 +159,7 @@ SINGLE_BATTLE_TEST("Shield Dust blocks Sparkling Aria in singles") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPARKLING_ARIA, player); NONE_OF { - MESSAGE("Foe Vivillon's burn was healed."); + MESSAGE("The opposing Vivillon's burn was cured!"); STATUS_ICON(opponent, none: TRUE); } } diff --git a/test/battle/ability/speed_boost.c b/test/battle/ability/speed_boost.c index 0cc82e8064..b8c9bd4966 100644 --- a/test/battle/ability/speed_boost.c +++ b/test/battle/ability/speed_boost.c @@ -10,11 +10,11 @@ SINGLE_BATTLE_TEST("Speed Boost gradually boosts Speed") TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Torchic used Celebrate!"); ABILITY_POPUP(player, ABILITY_SPEED_BOOST); - MESSAGE("Torchic's Speed Boost raised its SPEED!"); + MESSAGE("Torchic's Speed Boost raised its Speed!"); MESSAGE("Torchic used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } } diff --git a/test/battle/ability/stalwart.c b/test/battle/ability/stalwart.c index 289f25dd1c..6f8acd6d82 100644 --- a/test/battle/ability/stalwart.c +++ b/test/battle/ability/stalwart.c @@ -43,7 +43,7 @@ DOUBLE_BATTLE_TEST("Stalwart stops Lightning Rod and Storm Drain from redirectin NONE_OF { ABILITY_POPUP(opponentLeft, ability); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Raichu's Sp. Atk rose!"); + MESSAGE("The opposing Raichu's Sp. Atk rose!"); } } else { HP_BAR(opponentRight); diff --git a/test/battle/ability/stamina.c b/test/battle/ability/stamina.c index e6e500cd79..527026284c 100644 --- a/test/battle/ability/stamina.c +++ b/test/battle/ability/stamina.c @@ -98,8 +98,8 @@ SINGLE_BATTLE_TEST("Stamina activates for every hit of a multi hit move") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_KICK, player); HP_BAR(opponent); - STAMINA_STAT_RAISE(opponent, "Foe Mudbray's Defense rose!"); - STAMINA_STAT_RAISE(opponent, "Foe Mudbray's Defense rose!"); + STAMINA_STAT_RAISE(opponent, "The opposing Mudbray's Defense rose!"); + STAMINA_STAT_RAISE(opponent, "The opposing Mudbray's Defense rose!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2); } @@ -114,7 +114,7 @@ SINGLE_BATTLE_TEST("Stamina is not activated by users own Substitute") TURN { MOVE(player, MOVE_SUBSTITUTE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); - MESSAGE("Mudbray made a SUBSTITUTE!"); + MESSAGE("Mudbray put in a substitute!"); NONE_OF { ABILITY_POPUP(player, ABILITY_STAMINA); MESSAGE("Mudbray's Defense rose!"); diff --git a/test/battle/ability/static.c b/test/battle/ability/static.c index 2e74db3e14..3c5d042cd0 100644 --- a/test/battle/ability/static.c +++ b/test/battle/ability/static.c @@ -17,13 +17,13 @@ SINGLE_BATTLE_TEST("Static inflicts paralysis on contact") if (gMovesInfo[move].makesContact) { ABILITY_POPUP(opponent, ABILITY_STATIC); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); - MESSAGE("Foe Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); + MESSAGE("The opposing Pikachu's Static paralyzed Wobbuffet, so it may be unable to move!"); STATUS_ICON(player, paralysis: TRUE); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_STATIC); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); - MESSAGE("Foe Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); + MESSAGE("The opposing Pikachu's Static paralyzed Wobbuffet, so it may be unable to move!"); STATUS_ICON(player, paralysis: TRUE); } } @@ -43,7 +43,7 @@ SINGLE_BATTLE_TEST("Static triggers 30% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_STATIC); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); - MESSAGE("Foe Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); + MESSAGE("The opposing Pikachu's Static paralyzed Wobbuffet, so it may be unable to move!"); STATUS_ICON(player, paralysis: TRUE); } } diff --git a/test/battle/ability/stench.c b/test/battle/ability/stench.c index f0c0e24414..76b36f3ff3 100644 --- a/test/battle/ability/stench.c +++ b/test/battle/ability/stench.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Stench has a 10% chance to flinch") } WHEN { TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } } @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Stench does not stack with King's Rock") } WHEN { TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } } @@ -51,7 +51,7 @@ DOUBLE_BATTLE_TEST("Stench only triggers if target takes damage") MOVE(playerRight, MOVE_TACKLE, target: opponentRight); } } SCENE { - NONE_OF { MESSAGE("Wynaut flinched!"); } + NONE_OF { MESSAGE("Wynaut flinched and couldn't move!"); } } } @@ -72,9 +72,9 @@ DOUBLE_BATTLE_TEST("Stench doesn't trigger if partner uses a move") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, playerLeft); - MESSAGE("Foe Grimer flinched!"); + MESSAGE("The opposing Grimer flinched and couldn't move!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); - NOT MESSAGE("Wynaut flinched!"); + NOT MESSAGE("Wynaut flinched and couldn't move!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); } } diff --git a/test/battle/ability/sticky_hold.c b/test/battle/ability/sticky_hold.c index 2c7cc09535..708c691c80 100644 --- a/test/battle/ability/sticky_hold.c +++ b/test/battle/ability/sticky_hold.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Sticky Hold prevents item theft") } SCENE { MESSAGE("Ursaluna used Thief!"); ABILITY_POPUP(opponent, ABILITY_STICKY_HOLD); - MESSAGE("Foe Gastrodon's Sticky Hold made Thief ineffective!"); + MESSAGE("The opposing Gastrodon's Sticky Hold made Thief ineffective!"); } } diff --git a/test/battle/ability/storm_drain.c b/test/battle/ability/storm_drain.c index 01f97de6fc..b4d5a2c169 100644 --- a/test/battle/ability/storm_drain.c +++ b/test/battle/ability/storm_drain.c @@ -17,12 +17,12 @@ SINGLE_BATTLE_TEST("Storm Drain absorbs Water-type moves and increases the Sp. A }; ABILITY_POPUP(opponent, ABILITY_STORM_DRAIN); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + MESSAGE("The opposing Gastrodon's Sp. Atk rose!"); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_STORM_DRAIN); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + MESSAGE("The opposing Gastrodon's Sp. Atk rose!"); }; ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, player); HP_BAR(opponent); @@ -54,10 +54,10 @@ DOUBLE_BATTLE_TEST("Storm Drain forces single-target Water-type moves to target }; ABILITY_POPUP(opponentLeft, ABILITY_STORM_DRAIN); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + MESSAGE("The opposing Gastrodon's Sp. Atk rose!"); ABILITY_POPUP(opponentLeft, ABILITY_STORM_DRAIN); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + MESSAGE("The opposing Gastrodon's Sp. Atk rose!"); } else { NONE_OF { HP_BAR(opponentRight); diff --git a/test/battle/ability/sturdy.c b/test/battle/ability/sturdy.c index b90be82098..b79fd5e921 100644 --- a/test/battle/ability/sturdy.c +++ b/test/battle/ability/sturdy.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Sturdy prevents OHKO moves") } WHEN { TURN { MOVE(opponent, MOVE_FISSURE); } } SCENE { - MESSAGE("Foe Wobbuffet used Fissure!"); + MESSAGE("The opposing Wobbuffet used Fissure!"); ABILITY_POPUP(player, ABILITY_STURDY); MESSAGE("Geodude was protected by Sturdy!"); } THEN { diff --git a/test/battle/ability/supersweet_syrup.c b/test/battle/ability/supersweet_syrup.c index 6a2fd4fd76..4ff8c462ba 100644 --- a/test/battle/ability/supersweet_syrup.c +++ b/test/battle/ability/supersweet_syrup.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Supersweet Syrup lowers evasion once per battle by one stage TURN { SWITCH(opponent, 0); } } SCENE { ABILITY_POPUP(opponent, ABILITY_SUPERSWEET_SYRUP); - MESSAGE("A supersweet aroma is wafting from the syrup covering Foe Dipplin!"); + MESSAGE("A supersweet aroma is wafting from the syrup covering the opposing Dipplin!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("2 withdrew Dipplin!"); MESSAGE("2 withdrew Wobbuffet!"); @@ -37,7 +37,7 @@ DOUBLE_BATTLE_TEST("Supersweet Syrup lowers evasion of both opposing mon's in ba TURN { } } SCENE { ABILITY_POPUP(opponentLeft, ABILITY_SUPERSWEET_SYRUP); - MESSAGE("A supersweet aroma is wafting from the syrup covering Foe Dipplin!"); + MESSAGE("A supersweet aroma is wafting from the syrup covering the opposing Dipplin!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); } THEN { @@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Supersweet Syrup can not further lower opponents evasion if ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Oddish's evasiveness fell!"); } - MESSAGE("Oddish's evasiveness won't go lower!"); + MESSAGE("Oddish's evasiveness won't go any lower!"); } THEN { EXPECT_EQ(player->statStages[STAT_EVASION], MIN_STAT_STAGE); } diff --git a/test/battle/ability/supreme_overlord.c b/test/battle/ability/supreme_overlord.c index dcaaa494a0..f8868b4afb 100644 --- a/test/battle/ability/supreme_overlord.c +++ b/test/battle/ability/supreme_overlord.c @@ -130,6 +130,6 @@ SINGLE_BATTLE_TEST("Supreme Overlord's message displays correctly after all batt SEND_IN_MESSAGE("Wobbuffet"); MESSAGE("2 sent out Kingambit!"); ABILITY_POPUP(opponent, ABILITY_SUPREME_OVERLORD); - MESSAGE("Foe Kingambit gained strength from the fallen!"); + MESSAGE("The opposing Kingambit gained strength from the fallen!"); } } diff --git a/test/battle/ability/sword_of_ruin.c b/test/battle/ability/sword_of_ruin.c index 02eec69ed8..3498522423 100644 --- a/test/battle/ability/sword_of_ruin.c +++ b/test/battle/ability/sword_of_ruin.c @@ -70,6 +70,6 @@ SINGLE_BATTLE_TEST("Sword of Ruin's message displays correctly after all battler SEND_IN_MESSAGE("Wobbuffet"); MESSAGE("2 sent out Chien-Pao!"); ABILITY_POPUP(opponent, ABILITY_SWORD_OF_RUIN); - MESSAGE("Foe Chien-Pao's Sword of Ruin weakened the Defense of all surrounding Pokémon!"); + MESSAGE("The opposing Chien-Pao's Sword of Ruin weakened the Defense of all surrounding Pokémon!"); } } diff --git a/test/battle/ability/tablets_of_ruin.c b/test/battle/ability/tablets_of_ruin.c index 7862a0bb8c..c98384b805 100644 --- a/test/battle/ability/tablets_of_ruin.c +++ b/test/battle/ability/tablets_of_ruin.c @@ -70,6 +70,6 @@ SINGLE_BATTLE_TEST("Tablets of Ruin's message displays correctly after all battl SEND_IN_MESSAGE("Wobbuffet"); MESSAGE("2 sent out Wo-Chien!"); ABILITY_POPUP(opponent, ABILITY_TABLETS_OF_RUIN); - MESSAGE("Foe Wo-Chien's Tablets of Ruin weakened the Attack of all surrounding Pokémon!"); + MESSAGE("The opposing Wo-Chien's Tablets of Ruin weakened the Attack of all surrounding Pokémon!"); } } diff --git a/test/battle/ability/tangling_hair.c b/test/battle/ability/tangling_hair.c index 508678a037..f663465163 100644 --- a/test/battle/ability/tangling_hair.c +++ b/test/battle/ability/tangling_hair.c @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Tangling Hair drops opposing mon's speed if ability user got if (move == MOVE_TACKLE) { ABILITY_POPUP(player, ABILITY_TANGLING_HAIR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wynaut's Speed fell!"); + MESSAGE("The opposing Wynaut's Speed fell!"); } } } @@ -44,9 +44,9 @@ SINGLE_BATTLE_TEST("Tangling Hair does not cause Rocky Helmet miss activation") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ABILITY_POPUP(player, ABILITY_TANGLING_HAIR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wynaut's Speed fell!"); + MESSAGE("The opposing Wynaut's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Foe Wynaut was hurt by Dugtrio's Rocky Helmet!"); + MESSAGE("The opposing Wynaut was hurt by Dugtrio's Rocky Helmet!"); } } @@ -61,10 +61,10 @@ SINGLE_BATTLE_TEST("Tangling Hair Speed stat drop triggers defiant and keeps ori ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ABILITY_POPUP(player, ABILITY_TANGLING_HAIR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Pawniard's Speed fell!"); + MESSAGE("The opposing Pawniard's Speed fell!"); ABILITY_POPUP(opponent, ABILITY_DEFIANT); - MESSAGE("Foe Pawniard's Attack sharply rose!"); + MESSAGE("The opposing Pawniard's Attack sharply rose!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Foe Pawniard was hurt by Dugtrio's Rocky Helmet!"); + MESSAGE("The opposing Pawniard was hurt by Dugtrio's Rocky Helmet!"); } } diff --git a/test/battle/ability/tera_shell.c b/test/battle/ability/tera_shell.c index 138a56f9b4..08a9ad1cd8 100644 --- a/test/battle/ability/tera_shell.c +++ b/test/battle/ability/tera_shell.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Tera Shell makes all moves against Terapagos not very effect TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { if (hp == 100) { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ABILITY_POPUP(player, ABILITY_TERA_SHELL); MESSAGE("Terapagos made its shell gleam! It's distorting type matchups!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Tera Shell makes all hits of multi-hit moves against Terapag } WHEN { TURN { MOVE(opponent, MOVE_DOUBLE_HIT); } } SCENE { - MESSAGE("Foe Wobbuffet used Double Hit!"); + MESSAGE("The opposing Wobbuffet used Double Hit!"); ABILITY_POPUP(player, ABILITY_TERA_SHELL); MESSAGE("Terapagos made its shell gleam! It's distorting type matchups!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_HIT, opponent); diff --git a/test/battle/ability/teraform_zero.c b/test/battle/ability/teraform_zero.c index 6540515322..819d0eef3d 100644 --- a/test/battle/ability/teraform_zero.c +++ b/test/battle/ability/teraform_zero.c @@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("Teraform Zero can be replaced") } WHEN { TURN { MOVE(opponent, MOVE_WORRY_SEED); MOVE(player, MOVE_REST, gimmick: GIMMICK_TERA); } } SCENE { - MESSAGE("Foe Whimsicott used Worry Seed!"); + MESSAGE("The opposing Whimsicott used Worry Seed!"); MESSAGE("Terapagos acquired Insomnia!"); MESSAGE("Terapagos used Rest!"); ABILITY_POPUP(player, ABILITY_INSOMNIA); @@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Teraform Zero cannot be swapped") } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_SKILL_SWAP); } } SCENE { - MESSAGE("Foe Wobbuffet used Skill Swap!"); + MESSAGE("The opposing Wobbuffet used Skill Swap!"); MESSAGE("But it failed!"); } } @@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("Teraform Zero cannot be copied") } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_ROLE_PLAY); } } SCENE { - MESSAGE("Foe Wobbuffet used Role Play!"); + MESSAGE("The opposing Wobbuffet used Role Play!"); MESSAGE("But it failed!"); } } diff --git a/test/battle/ability/toxic_chain.c b/test/battle/ability/toxic_chain.c index 2c29770f52..0037cb85b6 100644 --- a/test/battle/ability/toxic_chain.c +++ b/test/battle/ability/toxic_chain.c @@ -14,7 +14,7 @@ SINGLE_BATTLE_TEST("Toxic Chain inflicts bad poison when attacking") } SCENE { ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet was badly poisoned!"); STATUS_ICON(opponent, badPoison: TRUE); } THEN { EXPECT(opponent->status1 & STATUS1_TOXIC_POISON); @@ -35,13 +35,13 @@ SINGLE_BATTLE_TEST("Toxic Chain inflicts bad poison on any hit of a multi-hit mo } SCENE { ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet was badly poisoned!"); STATUS_ICON(opponent, badPoison: TRUE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); STATUS_ICON(opponent, badPoison: FALSE); ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet was badly poisoned!"); STATUS_ICON(opponent, badPoison: TRUE); } THEN { EXPECT(opponent->status1 & STATUS1_TOXIC_POISON); @@ -64,12 +64,12 @@ DOUBLE_BATTLE_TEST("Toxic Chain can inflict bad poison on both foes") HP_BAR(opponentLeft); ABILITY_POPUP(playerLeft, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponentLeft); - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet was badly poisoned!"); STATUS_ICON(opponentLeft, badPoison: TRUE); HP_BAR(opponentRight); ABILITY_POPUP(playerLeft, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponentRight); - MESSAGE("Foe Wynaut is badly poisoned!"); + MESSAGE("The opposing Wynaut was badly poisoned!"); STATUS_ICON(opponentRight, badPoison: TRUE); } THEN { EXPECT(opponentLeft->status1 & STATUS1_TOXIC_POISON); @@ -97,14 +97,14 @@ SINGLE_BATTLE_TEST("Toxic Chain makes Lum/Pecha Berry trigger before being knock } SCENE { ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet was badly poisoned!"); STATUS_ICON(opponent, badPoison: TRUE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); STATUS_ICON(opponent, badPoison: FALSE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); - MESSAGE("Okidogi knocked off Foe Wobbuffet's Pecha Berry!"); - MESSAGE("Okidogi knocked off Foe Wobbuffet's Lum Berry!"); + MESSAGE("Okidogi knocked off the opposing Wobbuffet's Pecha Berry!"); + MESSAGE("Okidogi knocked off the opposing Wobbuffet's Lum Berry!"); } } THEN { EXPECT(opponent->status1 == 0); diff --git a/test/battle/ability/toxic_debris.c b/test/battle/ability/toxic_debris.c index ed2c60e594..c4a50a5d13 100644 --- a/test/battle/ability/toxic_debris.c +++ b/test/battle/ability/toxic_debris.c @@ -22,11 +22,11 @@ SINGLE_BATTLE_TEST("Toxic Debris sets Toxic Spikes on the opposing side if hit b } SCENE { if (move == MOVE_TACKLE) { ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); } else { NONE_OF { ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); } } } @@ -44,14 +44,14 @@ SINGLE_BATTLE_TEST("Toxic Debris does not activate if two layers of Toxic Spikes } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); NONE_OF { ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); } } } @@ -69,7 +69,7 @@ SINGLE_BATTLE_TEST("If a Substitute is hit, Toxic Debris does not set Toxic Spik ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); NONE_OF { ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); } } } @@ -84,10 +84,10 @@ SINGLE_BATTLE_TEST("Each hit of a Multi Hit move activates Toxic Debris") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); } } @@ -102,7 +102,7 @@ SINGLE_BATTLE_TEST("Toxic Debris activates if user faints after physical hit") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); MESSAGE("Glimmora fainted!"); ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); } } @@ -116,7 +116,7 @@ SINGLE_BATTLE_TEST("Air Balloon is popped after Toxic Debris activates") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); MESSAGE("Glimmora's Air Balloon popped!"); } } diff --git a/test/battle/ability/trace.c b/test/battle/ability/trace.c index 3042f8e22b..6dbd9bda26 100644 --- a/test/battle/ability/trace.c +++ b/test/battle/ability/trace.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Trace copies opponents ability") TURN { } } SCENE { ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("Ralts TRACED Foe Torchic's Blaze!"); + MESSAGE("It traced the opposing Torchic's Blaze!"); } } @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Trace copies opponents ability on switch-in") TURN { SWITCH(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("Ralts TRACED Foe Torchic's Blaze!"); + MESSAGE("It traced the opposing Torchic's Blaze!"); } } @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Trace copies opponents ability on switch-in even if opponent } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MISTY_EXPLOSION); ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("Ralts TRACED Foe Torchic's Blaze!"); + MESSAGE("It traced the opposing Torchic's Blaze!"); } } @@ -61,7 +61,7 @@ DOUBLE_BATTLE_TEST("Trace copies opponents ability randomly") TURN { } } SCENE { ABILITY_POPUP(playerLeft, ABILITY_TRACE); - MESSAGE("Ralts TRACED Foe Torchic's Blaze!"); + MESSAGE("It traced the opposing Torchic's Blaze!"); } } @@ -76,7 +76,7 @@ SINGLE_BATTLE_TEST("Trace will copy an opponent's ability whenever it has the ch } SCENE { // TURN 2 ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("Ralts TRACED Foe Torchic's Blaze!"); + MESSAGE("It traced the opposing Torchic's Blaze!"); } } diff --git a/test/battle/ability/vessel_of_ruin.c b/test/battle/ability/vessel_of_ruin.c index 362b44c003..6531cbbf3a 100644 --- a/test/battle/ability/vessel_of_ruin.c +++ b/test/battle/ability/vessel_of_ruin.c @@ -70,6 +70,6 @@ SINGLE_BATTLE_TEST("Vessel of Ruin's message displays correctly after all battle SEND_IN_MESSAGE("Wobbuffet"); MESSAGE("2 sent out Ting-Lu!"); ABILITY_POPUP(opponent, ABILITY_VESSEL_OF_RUIN); - MESSAGE("Foe Ting-Lu's Vessel of Ruin weakened the Sp. Atk of all surrounding Pokémon!"); + MESSAGE("The opposing Ting-Lu's Vessel of Ruin weakened the Sp. Atk of all surrounding Pokémon!"); } } diff --git a/test/battle/ability/weak_armor.c b/test/battle/ability/weak_armor.c index 291b2ac639..7fd7e10ef7 100644 --- a/test/battle/ability/weak_armor.c +++ b/test/battle/ability/weak_armor.c @@ -95,7 +95,7 @@ SINGLE_BATTLE_TEST("Weak Armor still lowers boosts Speed if Defense can't go any ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Slugma's Weak Armor lowered its Defense!"); } - MESSAGE("Slugma's Defense won't go lower!"); + MESSAGE("Slugma's Defense won't go any lower!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Slugma's Weak Armor raised its Speed!"); } THEN { @@ -124,7 +124,7 @@ SINGLE_BATTLE_TEST("Weak Armor still lowers Defense if Speed can't go any higher ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Slugma's Weak Armor raised its Speed!"); } - MESSAGE("Slugma's Speed won't go higher!"); + MESSAGE("Slugma's Speed won't go any higher!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); EXPECT_EQ(player->statStages[STAT_SPEED], MAX_STAT_STAGE); @@ -151,7 +151,7 @@ SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Defense can' } ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); - MESSAGE("Magcargo's Defense won't go lower!"); + MESSAGE("Magcargo's Defense won't go any lower!"); MESSAGE("Magcargo's Weak Armor raised its Speed!"); for (j = 0; j < 2; j++) { @@ -159,8 +159,8 @@ SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Defense can' // Ability doesn't activate if neither stat can be changed. NONE_OF { ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); - MESSAGE("Magcargo's Defense won't go lower!"); - MESSAGE("Magcargo's Speed won't go higher!"); + MESSAGE("Magcargo's Defense won't go any lower!"); + MESSAGE("Magcargo's Speed won't go any higher!"); } } } THEN { @@ -189,7 +189,7 @@ SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Speed can't ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); MESSAGE("Magcargo's Weak Armor lowered its Defense!"); - MESSAGE("Magcargo's Speed won't go higher!"); + MESSAGE("Magcargo's Speed won't go any higher!"); } } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 5); diff --git a/test/battle/ability/wind_power.c b/test/battle/ability/wind_power.c index 146c47f3dd..6ccf896eaa 100644 --- a/test/battle/ability/wind_power.c +++ b/test/battle/ability/wind_power.c @@ -82,7 +82,7 @@ SINGLE_BATTLE_TEST("Wind Power sets up Charge for opponent when hit by a wind mo HP_BAR(opponent); if (move == MOVE_AIR_CUTTER) { ABILITY_POPUP(opponent, ABILITY_WIND_POWER); - MESSAGE("Being hit by Air Cutter charged Foe Wattrel with power!"); + MESSAGE("Being hit by Air Cutter charged the opposing Wattrel with power!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, opponent); @@ -92,7 +92,7 @@ SINGLE_BATTLE_TEST("Wind Power sets up Charge for opponent when hit by a wind mo HP_BAR(opponent); if (move == MOVE_AIR_CUTTER) { ABILITY_POPUP(opponent, ABILITY_WIND_POWER); - MESSAGE("Being hit by Air Cutter charged Foe Wattrel with power!"); + MESSAGE("Being hit by Air Cutter charged the opposing Wattrel with power!"); } } THEN { @@ -205,10 +205,10 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly when Tailwind is used") ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponentLeft); ABILITY_POPUP(opponentLeft, ABILITY_WIND_POWER); - MESSAGE("Being hit by Tailwind charged Foe Wattrel with power!"); + MESSAGE("Being hit by Tailwind charged the opposing Wattrel with power!"); ABILITY_POPUP(opponentRight, ABILITY_WIND_POWER); - MESSAGE("Being hit by Tailwind charged Foe Wattrel with power!"); + MESSAGE("Being hit by Tailwind charged the opposing Wattrel with power!"); } else { ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, playerLeft); diff --git a/test/battle/ability/wind_rider.c b/test/battle/ability/wind_rider.c index cd4dbeed1f..44baacc8a2 100644 --- a/test/battle/ability/wind_rider.c +++ b/test/battle/ability/wind_rider.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Wind Rider raises Attack by one stage if it sets up Tailwind ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponent); ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Bramblin's Attack rose!"); + MESSAGE("The opposing Bramblin's Attack rose!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); } @@ -37,7 +37,7 @@ DOUBLE_BATTLE_TEST("Wind Rider raises Attack by one stage if Tailwind is setup b ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponentLeft); ABILITY_POPUP(opponentRight, ABILITY_WIND_RIDER); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Bramblin's Attack rose!"); + MESSAGE("The opposing Bramblin's Attack rose!"); } THEN { EXPECT_EQ(opponentRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); } @@ -55,7 +55,7 @@ SINGLE_BATTLE_TEST("Wind Rider doesn't raise Attack if opponent sets up Tailwind NONE_OF { ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Bramblin's Attack rose!"); + MESSAGE("The opposing Bramblin's Attack rose!"); } } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE); @@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Wind Rider raises Attack by one stage if switched into Tailw ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponent); ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Bramblin's Wind Rider raised its Attack!"); + MESSAGE("The opposing Bramblin's Wind Rider raised its Attack!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); @@ -93,13 +93,13 @@ SINGLE_BATTLE_TEST("Wind Rider activates when it's no longer effected by Neutral TURN { SWITCH(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); - MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Neutralizing gas filled the area!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponent); SWITCH_OUT_MESSAGE("Weezing"); - MESSAGE("The effects of Neutralizing Gas wore off!"); + MESSAGE("The effects of the neutralizing gas wore off!"); ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Bramblin's Wind Rider raised its Attack!"); + MESSAGE("The opposing Bramblin's Wind Rider raised its Attack!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); } @@ -120,7 +120,7 @@ SINGLE_BATTLE_TEST("Wind Rider absorbs Wind moves and raises Attack by one stage } ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Bramblin's Attack rose!"); + MESSAGE("The opposing Bramblin's Attack rose!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); } diff --git a/test/battle/ability/zen_mode.c b/test/battle/ability/zen_mode.c index 728921a484..6dae38e0fe 100644 --- a/test/battle/ability/zen_mode.c +++ b/test/battle/ability/zen_mode.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TACKLE); } } SCENE { MESSAGE("Darmanitan used Celebrate!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); HP_BAR(player); ABILITY_POPUP(player, ABILITY_ZEN_MODE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); @@ -51,7 +51,7 @@ SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less ABILITY_POPUP(player, ABILITY_ZEN_MODE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Darmanitan used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { EXPECT_LE(player->hp, player->maxHP / 2); EXPECT_EQ(player->species, zenSpecies); @@ -79,7 +79,7 @@ SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is healed above ABILITY_POPUP(player, ABILITY_ZEN_MODE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Darmanitan used Celebrate!"); - MESSAGE("Foe Wobbuffet used Heal Pulse!"); + MESSAGE("The opposing Wobbuffet used Heal Pulse!"); HP_BAR(player); ABILITY_POPUP(player, ABILITY_ZEN_MODE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); diff --git a/test/battle/ability/zero_to_hero.c b/test/battle/ability/zero_to_hero.c index be72a55a7e..733104f153 100644 --- a/test/battle/ability/zero_to_hero.c +++ b/test/battle/ability/zero_to_hero.c @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Zero to Hero transforms both player and opponent") ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO); MESSAGE("Palafin underwent a heroic transformation!"); ABILITY_POPUP(opponent, ABILITY_ZERO_TO_HERO); - MESSAGE("Foe Palafin underwent a heroic transformation!"); + MESSAGE("The opposing Palafin underwent a heroic transformation!"); } THEN { EXPECT_EQ(player->species, SPECIES_PALAFIN_HERO); EXPECT_EQ(opponent->species, SPECIES_PALAFIN_HERO); @@ -109,7 +109,7 @@ SINGLE_BATTLE_TEST("Transform doesn't apply the heroic transformation message wh ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO); MESSAGE("Palafin underwent a heroic transformation!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TRANSFORM, opponent); - MESSAGE("Foe Wobbuffet transformed into Palafin!"); + MESSAGE("The opposing Wobbuffet transformed into Palafin!"); NOT ABILITY_POPUP(opponent, ABILITY_ZERO_TO_HERO); } THEN { EXPECT_EQ(player->species, SPECIES_PALAFIN_HERO); } } @@ -128,10 +128,10 @@ SINGLE_BATTLE_TEST("Imposter doesn't apply the heroic transformation message whe ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO); MESSAGE("Palafin underwent a heroic transformation!"); ABILITY_POPUP(opponent, ABILITY_IMPOSTER); - MESSAGE("Foe Ditto transformed into Palafin using Imposter!"); + MESSAGE("The opposing Ditto transformed into Palafin using Imposter!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_ZERO_TO_HERO); - MESSAGE("Foe Ditto underwent a heroic transformation!"); + MESSAGE("The opposing Ditto underwent a heroic transformation!"); } } THEN { EXPECT_EQ(player->species, SPECIES_PALAFIN_HERO); } } @@ -178,7 +178,7 @@ SINGLE_BATTLE_TEST("Zero to Hero's message displays correctly after all battlers SEND_IN_MESSAGE("Wobbuffet"); MESSAGE("2 sent out Palafin!"); ABILITY_POPUP(opponent, ABILITY_ZERO_TO_HERO); - MESSAGE("Foe Palafin underwent a heroic transformation!"); + MESSAGE("The opposing Palafin underwent a heroic transformation!"); } } @@ -193,7 +193,7 @@ SINGLE_BATTLE_TEST("Zero to Hero cannot be copied by Trace") } SCENE { NONE_OF { ABILITY_POPUP(opponent, ABILITY_TRACE); - MESSAGE("Foe Ralts Traced Palafin's Zero to Hero!"); + MESSAGE("The opposing Ralts Traced Palafin's Zero to Hero!"); } } } diff --git a/test/battle/ai/ai.c b/test/battle/ai/ai.c index a19481c7ed..7f1a46f06a 100644 --- a/test/battle/ai/ai.c +++ b/test/battle/ai/ai.c @@ -419,7 +419,7 @@ AI_DOUBLE_BATTLE_TEST("AI will not use Helping Hand if partner does not have any SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:opponentLeft); } } SCENE { - NOT MESSAGE("Foe Wobbuffet used Helping Hand!"); + NOT MESSAGE("The opposing Wobbuffet used Helping Hand!"); } } @@ -448,7 +448,7 @@ AI_DOUBLE_BATTLE_TEST("AI will not use a status move if partner already chose He SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:opponentLeft); } } SCENE { - MESSAGE("Foe Wobbuffet used Helping Hand!"); + MESSAGE("The opposing Wobbuffet used Helping Hand!"); } } @@ -567,8 +567,8 @@ AI_SINGLE_BATTLE_TEST("AI will only choose Surf 1/3 times if the opposing mon ha TURN { EXPECT_MOVE(opponent, MOVE_SURF); } TURN { EXPECT_MOVE(opponent, MOVE_SURF); } } SCENE { - MESSAGE("Foe Lanturn used Surf!"); - MESSAGE("Foe Lanturn used Surf!"); + MESSAGE("The opposing Lanturn used Surf!"); + MESSAGE("The opposing Lanturn used Surf!"); } } @@ -584,8 +584,8 @@ AI_SINGLE_BATTLE_TEST("AI will choose Thunderbolt then Surf 2/3 times if the opp TURN { EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } TURN { EXPECT_MOVE(opponent, MOVE_SURF); } } SCENE { - MESSAGE("Foe Lanturn used Thunderbolt!"); - MESSAGE("Foe Lanturn used Surf!"); + MESSAGE("The opposing Lanturn used Thunderbolt!"); + MESSAGE("The opposing Lanturn used Surf!"); } } diff --git a/test/battle/ai/ai_check_viability.c b/test/battle/ai/ai_check_viability.c index 039d8ca331..37ad7edb15 100644 --- a/test/battle/ai/ai_check_viability.c +++ b/test/battle/ai/ai_check_viability.c @@ -167,7 +167,7 @@ AI_SINGLE_BATTLE_TEST("AI can choose Counter or Mirror Coat if the predicted mov TURN { MOVE(player, playerMove); EXPECT_MOVE(opponent, opponentMove); } TURN { MOVE(player, playerMove); EXPECT_MOVE(opponent, MOVE_STRENGTH); } } SCENE { - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); } } diff --git a/test/battle/ai/ai_flag_sequence_switching.c b/test/battle/ai/ai_flag_sequence_switching.c index 5705d932c8..8502efbba7 100644 --- a/test/battle/ai/ai_flag_sequence_switching.c +++ b/test/battle/ai/ai_flag_sequence_switching.c @@ -60,7 +60,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: Roar and Dragon Tail still fo TURN { MOVE(player, move); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, move, player); - MESSAGE("Foe Bulbasaur was dragged out!"); + MESSAGE("The opposing Bulbasaur was dragged out!"); } } diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 6d75791365..18bf386847 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -181,7 +181,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will not switch in a Pokemo } WHEN { TURN { MOVE(player, MOVE_NIGHT_SLASH) ; EXPECT_SEND_OUT(opponent, alakazamFirst ? 1 : 2); } // AI doesn't send out Alakazam if it gets outsped } SCENE { - MESSAGE("Foe Kadabra fainted!"); + MESSAGE("The opposing Kadabra fainted!"); if (alakazamFirst) { MESSAGE(AI_TRAINER_NAME " sent out Alakazam!"); } else { diff --git a/test/battle/ai/ai_trytofaint.c b/test/battle/ai/ai_trytofaint.c index ed6e1fccdd..10eca2d676 100644 --- a/test/battle/ai/ai_trytofaint.c +++ b/test/battle/ai/ai_trytofaint.c @@ -43,7 +43,7 @@ AI_SINGLE_BATTLE_TEST("AI will choose a priority move if it is slower then the t TURN { MOVE(player, MOVE_STRENGTH); EXPECT_MOVE(opponent, MOVE_STRENGTH); } TURN { MOVE(player, MOVE_STRENGTH); EXPECT_MOVE(opponent, MOVE_QUICK_ATTACK); } } SCENE { - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); } } diff --git a/test/battle/battle_message.c b/test/battle/battle_message.c index 9ea74ceb27..423da7cf05 100644 --- a/test/battle/battle_message.c +++ b/test/battle/battle_message.c @@ -19,11 +19,11 @@ SINGLE_BATTLE_TEST("Battle Message: Send-in message depends on foe HP") if (hp > 69) MESSAGE("Go! Wynaut!"); else if (hp > 39) - MESSAGE("Do it! Wynaut!"); + MESSAGE("You're in charge, Wynaut!"); else if (hp > 9) MESSAGE("Go for it, Wynaut!"); else - MESSAGE("Your foe's weak! Get 'em, Wynaut!"); + MESSAGE("Your opponent's weak! Get 'em, Wynaut!"); } } diff --git a/test/battle/crit_chance.c b/test/battle/crit_chance.c index d3a2b574f1..3ff4e80b4e 100644 --- a/test/battle/crit_chance.c +++ b/test/battle/crit_chance.c @@ -246,7 +246,7 @@ SINGLE_BATTLE_TEST("Crit Chance: Dire Hit increases a battler's critical hit cha TURN { MOVE(player, MOVE_SCRATCH); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_ENERGY, player); - MESSAGE("Wobbuffet used Dire Hit to get pumped!"); + MESSAGE("Wobbuffet used the Dire Hit to get pumped!"); MESSAGE("Wobbuffet used Scratch!"); MESSAGE("A critical hit!"); } diff --git a/test/battle/exp.c b/test/battle/exp.c index a7879b692c..7e232f5482 100644 --- a/test/battle/exp.c +++ b/test/battle/exp.c @@ -40,7 +40,7 @@ WILD_BATTLE_TEST("Higher leveled Pokemon give more exp", s32 exp) TURN { MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Wild Caterpie fainted!"); + MESSAGE("The wild Caterpie fainted!"); EXPERIENCE_BAR(player, captureGainedExp: &results[i].exp); } FINALLY { EXPECT_GT(results[1].exp, results[0].exp); @@ -61,7 +61,7 @@ WILD_BATTLE_TEST("Lucky Egg boosts gained exp points by 50%", s32 exp) TURN { MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Wild Caterpie fainted!"); + MESSAGE("The wild Caterpie fainted!"); EXPERIENCE_BAR(player, captureGainedExp: &results[i].exp); } FINALLY { EXPECT_MUL_EQ(results[1].exp, Q_4_12(1.5), results[0].exp); @@ -84,7 +84,7 @@ WILD_BATTLE_TEST("Exp is scaled to player and opponent's levels", s32 exp) TURN { MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Wild Caterpie fainted!"); + MESSAGE("The wild Caterpie fainted!"); EXPERIENCE_BAR(player, captureGainedExp: &results[i].exp); } FINALLY { EXPECT_GT(results[0].exp, results[1].exp); @@ -108,7 +108,7 @@ WILD_BATTLE_TEST("Large exp gains are supported", s32 exp) // #1455 TURN { MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Wild Blissey fainted!"); + MESSAGE("The wild Blissey fainted!"); EXPERIENCE_BAR(player, captureGainedExp: &results[i].exp); } THEN { EXPECT(GetMonData(&gPlayerParty[0], MON_DATA_LEVEL) > 1); @@ -136,7 +136,7 @@ WILD_BATTLE_TEST("Exp Share(held) gives Experience to mons which did not partici TURN { MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Wild Caterpie fainted!"); + MESSAGE("The wild Caterpie fainted!"); // This message should appear only for gen6> exp share. NOT MESSAGE("The rest of your team gained EXP. Points thanks to the Exp. Share!"); } THEN { diff --git a/test/battle/form_change/battle_switch.c b/test/battle/form_change/battle_switch.c index ba564a02a1..ca7eafd8bf 100644 --- a/test/battle/form_change/battle_switch.c +++ b/test/battle/form_change/battle_switch.c @@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon switching out") ABILITY_POPUP(player, ABILITY_STANCE_CHANGE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Aegislash used Tackle!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { EXPECT_EQ(player->species, SPECIES_AEGISLASH_SHIELD); } diff --git a/test/battle/form_change/faint.c b/test/battle/form_change/faint.c index 849d8e5883..dffabb44de 100644 --- a/test/battle/form_change/faint.c +++ b/test/battle/form_change/faint.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon fainting") } WHEN { TURN { MOVE(opponent, MOVE_GUST); SEND_OUT(player, 1); } } SCENE { - MESSAGE("Foe Wobbuffet used Gust!"); + MESSAGE("The opposing Wobbuffet used Gust!"); MESSAGE("Aegislash fainted!"); } THEN { EXPECT_EQ(GetMonData(&PLAYER_PARTY[0], MON_DATA_SPECIES), SPECIES_AEGISLASH_SHIELD); diff --git a/test/battle/form_change/mega_evolution.c b/test/battle/form_change/mega_evolution.c index ffab6af18b..4c97c2c151 100644 --- a/test/battle/form_change/mega_evolution.c +++ b/test/battle/form_change/mega_evolution.c @@ -27,9 +27,9 @@ DOUBLE_BATTLE_TEST("Mega Evolution's order is determined by Speed - opponent fas } WHEN { TURN { MOVE(opponentLeft, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { - MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); + MESSAGE("The opposing Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponentLeft); - MESSAGE("Foe Gardevoir has Mega Evolved into Mega Gardevoir!"); + MESSAGE("The opposing Gardevoir has Mega Evolved into Mega Gardevoir!"); MESSAGE("Venusaur's Venusaurite is reacting to 1's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, playerLeft); MESSAGE("Venusaur has Mega Evolved into Mega Venusaur!"); @@ -49,9 +49,9 @@ DOUBLE_BATTLE_TEST("Mega Evolution's order is determined by Speed - player faste MESSAGE("Venusaur's Venusaurite is reacting to 1's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, playerLeft); MESSAGE("Venusaur has Mega Evolved into Mega Venusaur!"); - MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); + MESSAGE("The opposing Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponentLeft); - MESSAGE("Foe Gardevoir has Mega Evolved into Mega Gardevoir!"); + MESSAGE("The opposing Gardevoir has Mega Evolved into Mega Gardevoir!"); } } @@ -81,7 +81,7 @@ SINGLE_BATTLE_TEST("Mega Evolution affects turn order") TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { MESSAGE("Gardevoir used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { ASSUME(player->speed == 205); } @@ -99,7 +99,7 @@ SINGLE_BATTLE_TEST("Abilities replaced by Mega Evolution do not affect turn orde TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { MESSAGE("Sableye used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { ASSUME(player->speed == 45); } @@ -145,9 +145,9 @@ SINGLE_BATTLE_TEST("Regular Mega Evolution and Fervent Wish Mega Evolution can h ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); MESSAGE("Rayquaza has Mega Evolved into Mega Rayquaza!"); - MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); + MESSAGE("The opposing Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); - MESSAGE("Foe Gardevoir has Mega Evolved into Mega Gardevoir!"); + MESSAGE("The opposing Gardevoir has Mega Evolved into Mega Gardevoir!"); } THEN { EXPECT_EQ(player->species, SPECIES_RAYQUAZA_MEGA); EXPECT_EQ(opponent->species, SPECIES_GARDEVOIR_MEGA); @@ -168,10 +168,10 @@ SINGLE_BATTLE_TEST("Mega Evolved Pokemon do not change abilities after fainting" } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_CRUNCH, player); - MESSAGE("Foe Garchomp fainted!"); + MESSAGE("The opposing Garchomp fainted!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_ROUGH_SKIN); - MESSAGE("Wobbuffet was hurt by Foe Garchomp's Rough Skin!"); + MESSAGE("Wobbuffet was hurt by the opposing Garchomp's Rough Skin!"); HP_BAR(player); } } diff --git a/test/battle/form_change/primal_reversion.c b/test/battle/form_change/primal_reversion.c index df19a1d0d6..72e2a7e3c6 100644 --- a/test/battle/form_change/primal_reversion.c +++ b/test/battle/form_change/primal_reversion.c @@ -15,12 +15,12 @@ SINGLE_BATTLE_TEST("Primal reversion happens for Groudon only when holding Red O } SCENE { if (heldItem == ITEM_RED_ORB) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); } } } THEN { @@ -47,12 +47,12 @@ SINGLE_BATTLE_TEST("Primal reversion happens for Kyogre only when holding Blue O } SCENE { if (heldItem == ITEM_BLUE_ORB) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponent); - MESSAGE("Foe Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal state!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponent); - MESSAGE("Foe Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal state!"); } } } THEN { @@ -76,13 +76,13 @@ DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - opponent f TURN { MOVE(opponentLeft, MOVE_CELEBRATE); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponentRight); - MESSAGE("Foe Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal state!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, playerRight); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponentLeft); - MESSAGE("Foe Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Groudon's Primal Reversion! It reverted to its primal state!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, playerLeft); - MESSAGE("Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Kyogre's Primal Reversion! It reverted to its primal state!"); } THEN { EXPECT_EQ(playerLeft->species, SPECIES_KYOGRE_PRIMAL); EXPECT_EQ(opponentLeft->species, SPECIES_GROUDON_PRIMAL); @@ -102,13 +102,13 @@ DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - player fas TURN { MOVE(opponentLeft, MOVE_CELEBRATE); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, playerRight); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, playerLeft); - MESSAGE("Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Kyogre's Primal Reversion! It reverted to its primal state!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponentLeft); - MESSAGE("Foe Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Groudon's Primal Reversion! It reverted to its primal state!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponentRight); - MESSAGE("Foe Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal state!"); } THEN { EXPECT_EQ(playerLeft->species, SPECIES_KYOGRE_PRIMAL); EXPECT_EQ(opponentLeft->species, SPECIES_GROUDON_PRIMAL); @@ -130,7 +130,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a mon is sent out after a mon } SCENE { MESSAGE("Wobbuffet fainted!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); } THEN { EXPECT_EQ(player->species, SPECIES_GROUDON_PRIMAL); } @@ -147,7 +147,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a mon is switched in") TURN { MOVE(opponent, MOVE_CELEBRATE); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); } THEN { EXPECT_EQ(player->species, SPECIES_GROUDON_PRIMAL); } @@ -168,7 +168,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Eject B MESSAGE("Wobbuffet is switched out with the Eject Button!"); SEND_IN_MESSAGE("Groudon"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); } THEN { EXPECT_EQ(player->species, SPECIES_GROUDON_PRIMAL); } @@ -185,10 +185,10 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Red Car } WHEN { TURN { MOVE(player, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Wobbuffet held up its Red Card against Wobbuffet!"); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); MESSAGE("Groudon was dragged out!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); } THEN { EXPECT_EQ(player->species, SPECIES_GROUDON_PRIMAL); } @@ -207,9 +207,9 @@ SINGLE_BATTLE_TEST("Primal reversion happens after the entry hazards damage") } SCENE { SEND_IN_MESSAGE("Groudon"); HP_BAR(player); - MESSAGE("Groudon is hurt by spikes!"); + MESSAGE("Groudon was hurt by the spikes!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); } THEN { EXPECT_EQ(player->species, SPECIES_GROUDON_PRIMAL); } @@ -228,7 +228,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens immediately if it was brought in by ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); HP_BAR(opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); MESSAGE("2 sent out Wynaut!"); } THEN { EXPECT_EQ(player->species, SPECIES_GROUDON_PRIMAL); diff --git a/test/battle/form_change/ultra_burst.c b/test/battle/form_change/ultra_burst.c index 5c6f4a2ce4..8eb21866f3 100644 --- a/test/battle/form_change/ultra_burst.c +++ b/test/battle/form_change/ultra_burst.c @@ -27,9 +27,9 @@ DOUBLE_BATTLE_TEST("Ultra Burst's order is determined by Speed - opponent faster } WHEN { TURN { MOVE(opponentLeft, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); } } SCENE { - MESSAGE("Bright light is about to burst out of Foe Necrozma!"); + MESSAGE("Bright light is about to burst out of the opposing Necrozma!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, opponentLeft); - MESSAGE("Foe Necrozma regained its true power through Ultra Burst!"); + MESSAGE("The opposing Necrozma regained its true power through Ultra Burst!"); MESSAGE("Bright light is about to burst out of Necrozma!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, playerLeft); MESSAGE("Necrozma regained its true power through Ultra Burst!"); @@ -49,9 +49,9 @@ DOUBLE_BATTLE_TEST("Ultra Burst's order is determined by Speed - player faster") MESSAGE("Bright light is about to burst out of Necrozma!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, playerLeft); MESSAGE("Necrozma regained its true power through Ultra Burst!"); - MESSAGE("Bright light is about to burst out of Foe Necrozma!"); + MESSAGE("Bright light is about to burst out of the opposing Necrozma!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, opponentLeft); - MESSAGE("Foe Necrozma regained its true power through Ultra Burst!"); + MESSAGE("The opposing Necrozma regained its true power through Ultra Burst!"); } } @@ -65,7 +65,7 @@ SINGLE_BATTLE_TEST("Ultra Burst affects turn order") TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); } } SCENE { MESSAGE("Necrozma used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { ASSUME(player->speed == 263); } @@ -111,9 +111,9 @@ SINGLE_BATTLE_TEST("Ultra Burst and Mega Evolution can happen on the same turn") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, player); MESSAGE("Necrozma regained its true power through Ultra Burst!"); - MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); + MESSAGE("The opposing Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); - MESSAGE("Foe Gardevoir has Mega Evolved into Mega Gardevoir!"); + MESSAGE("The opposing Gardevoir has Mega Evolved into Mega Gardevoir!"); } THEN { EXPECT_EQ(player->species, SPECIES_NECROZMA_ULTRA); EXPECT_EQ(opponent->species, SPECIES_GARDEVOIR_MEGA); diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 036706190d..374b4d55d5 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax increases HP and max HP by 1.5x", u16 hp) ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player); MESSAGE("Wobbuffet used Max Strike!"); } - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { results[i].hp = player->hp; } FINALLY { @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax expires after three turns", u16 hp) MESSAGE("Wobbuffet used Max Strike!"); else MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } if (dynamax) // Expect to have visual reversion at the end. ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); @@ -64,8 +64,8 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be flinched") } WHEN { TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } SCENE { - MESSAGE("Foe Wobbuffet used Fake Out!"); - NONE_OF { MESSAGE("Wobbuffet flinched!"); } + MESSAGE("The opposing Wobbuffet used Fake Out!"); + NONE_OF { MESSAGE("Wobbuffet flinched and couldn't move!"); } MESSAGE("Wobbuffet used Max Strike!"); } } @@ -80,7 +80,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by weight-based mo TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_HEAVY_SLAM); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Heavy Slam!"); + MESSAGE("The opposing Wobbuffet used Heavy Slam!"); MESSAGE("The move was blocked by the power of Dynamax!"); NONE_OF { HP_BAR(player); } } @@ -96,7 +96,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by OHKO moves") TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_FISSURE); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Machamp used Fissure!"); + MESSAGE("The opposing Machamp used Fissure!"); MESSAGE("Wobbuffet is unaffected!"); NONE_OF { HP_BAR(player); } } @@ -111,9 +111,9 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Destiny Bond } WHEN { TURN { MOVE(opponent, MOVE_DESTINY_BOND); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } SCENE { - MESSAGE("Foe Wobbuffet used Destiny Bond!"); + MESSAGE("The opposing Wobbuffet used Destiny Bond!"); MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); NONE_OF { HP_BAR(player); } } } @@ -126,10 +126,10 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are affected by Grudge") } WHEN { TURN { MOVE(opponent, MOVE_GRUDGE); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } SCENE { - MESSAGE("Foe Wobbuffet used Grudge!"); + MESSAGE("The opposing Wobbuffet used Grudge!"); MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Wobbuffet's Tackle lost all its PP due to the GRUDGE!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("Wobbuffet's Tackle lost all its PP due to the grudge!"); + MESSAGE("The opposing Wobbuffet fainted!"); } } @@ -146,11 +146,11 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing move TURN { MOVE(opponent, MOVE_WHIRLWIND); MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Dragon Tail!"); + MESSAGE("The opposing Wobbuffet used Dragon Tail!"); HP_BAR(player); MESSAGE("The move was blocked by the power of Dynamax!"); MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Whirlwind!"); + MESSAGE("The opposing Wobbuffet used Whirlwind!"); MESSAGE("The move was blocked by the power of Dynamax!"); } } @@ -166,7 +166,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing move TURN { MOVE(opponent, MOVE_DRAGON_TAIL); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); SEND_OUT(player, 1); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Dragon Tail!"); + MESSAGE("The opposing Wobbuffet used Dragon Tail!"); HP_BAR(player); MESSAGE("Wobbuffet fainted!"); NOT MESSAGE("The move was blocked by the power of Dynamax!"); @@ -185,7 +185,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Red Card") } SCENE { MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet held up its Red Card against Wobbuffet!"); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); MESSAGE("The move was blocked by the power of Dynamax!"); } THEN { EXPECT_EQ(opponent->item, ITEM_NONE); @@ -203,7 +203,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be switched out by Eject But TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); MESSAGE("Wobbuffet is switched out with the Eject Button!"); } THEN { @@ -220,7 +220,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot have their ability swappe TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_SKILL_SWAP); } } SCENE { MESSAGE("Miltank used Max Strike!"); - MESSAGE("Foe Runerigus used Skill Swap!"); + MESSAGE("The opposing Runerigus used Skill Swap!"); MESSAGE("But it failed!"); } THEN { EXPECT_EQ(player->ability, ABILITY_SCRAPPY); @@ -236,7 +236,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their ability changed o TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_SIMPLE_BEAM); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Simple Beam!"); + MESSAGE("The opposing Wobbuffet used Simple Beam!"); MESSAGE("Wobbuffet acquired Simple!"); } THEN { EXPECT_EQ(player->ability, ABILITY_SIMPLE); @@ -253,7 +253,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Encore") TURN { MOVE(player, MOVE_EMBER); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Encore!"); + MESSAGE("The opposing Wobbuffet used Encore!"); MESSAGE("But it failed!"); MESSAGE("Wobbuffet used Max Flare!"); } @@ -273,7 +273,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be encored immediately after MESSAGE("Wobbuffet used Max Knuckle!"); MESSAGE("Wobbuffet used Max Knuckle!"); MESSAGE("Wobbuffet used Max Knuckle!"); - MESSAGE("Foe Wobbuffet used Encore!"); + MESSAGE("The opposing Wobbuffet used Encore!"); MESSAGE("Wobbuffet used Arm Thrust!"); } } @@ -288,7 +288,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon's Max Moves cannot be disabled") TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_DISABLE); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Disable!"); + MESSAGE("The opposing Wobbuffet used Disable!"); MESSAGE("But it failed!"); } } @@ -306,9 +306,9 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have base moves disabled on TURN {} TURN { MOVE(player, MOVE_TACKLE, allowed: FALSE); MOVE(player, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Disable!"); + MESSAGE("The opposing Wobbuffet used Disable!"); MESSAGE("Wobbuffet's Tackle was disabled!"); MESSAGE("Wobbuffet used Max Strike!"); } @@ -323,7 +323,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Torment") TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TORMENT); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Torment!"); + MESSAGE("The opposing Wobbuffet used Torment!"); MESSAGE("But it failed!"); } } @@ -338,8 +338,8 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not immune to Knock Off") TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_KNOCK_OFF); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Knock Off!"); - MESSAGE("Foe Wobbuffet knocked off Wobbuffet's Potion!"); + MESSAGE("The opposing Wobbuffet used Knock Off!"); + MESSAGE("The opposing Wobbuffet knocked off Wobbuffet's Potion!"); } THEN { EXPECT_EQ(player->item, ITEM_NONE); } @@ -355,9 +355,9 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon lose their substitutes") TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Substitute!"); - MESSAGE("Wobbuffet made a SUBSTITUTE!"); + MESSAGE("Wobbuffet put in a substitute!"); MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); HP_BAR(player); } } @@ -427,9 +427,9 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Feint bypasses Max Guard but doesn't break it") } } SCENE { MESSAGE("Wobbuffet used Max Guard!"); - MESSAGE("Foe Wobbuffet used Feint!"); + MESSAGE("The opposing Wobbuffet used Feint!"); HP_BAR(playerLeft); - MESSAGE("Foe Wynaut used Tackle!"); + MESSAGE("The opposing Wynaut used Tackle!"); NONE_OF { HP_BAR(playerLeft); } } } @@ -537,7 +537,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Endeavor uses a Pokemon's non-Dynamax HP", s16 dam } WHEN { TURN { MOVE(opponent, MOVE_ENDEAVOR); MOVE(player, MOVE_TACKLE, gimmick: dynamax); } } SCENE { - MESSAGE("Foe Wobbuffet used Endeavor!"); + MESSAGE("The opposing Wobbuffet used Endeavor!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_EQ(results[0].damage, results[1].damage); @@ -556,7 +556,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Super Fang uses a Pokemon's non-Dynamax HP", s16 d } WHEN { TURN { MOVE(opponent, MOVE_SUPER_FANG); MOVE(player, MOVE_TACKLE, gimmick: dynamax); } } SCENE { - MESSAGE("Foe Wobbuffet used Super Fang!"); + MESSAGE("The opposing Wobbuffet used Super Fang!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_EQ(results[0].damage, results[1].damage); @@ -575,7 +575,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Pain Split uses a Pokemon's non-Dynamax HP", s16 d } WHEN { TURN { MOVE(opponent, MOVE_PAIN_SPLIT); MOVE(player, MOVE_TACKLE, gimmick: dynamax); } } SCENE { - MESSAGE("Foe Wobbuffet used Pain Split!"); + MESSAGE("The opposing Wobbuffet used Pain Split!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_EQ(results[0].damage, results[1].damage); @@ -595,7 +595,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Sitrus Berries heal based on a Pokemon's non-Dynam } WHEN { TURN { MOVE(opponent, MOVE_FLING); MOVE(player, MOVE_TACKLE, gimmick: dynamax); } } SCENE { - MESSAGE("Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("Wobbuffet restored its health using its Sitrus Berry!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_EQ(results[0].damage, results[1].damage); @@ -614,7 +614,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Heal Pulse heals based on a Pokemon's non-Dynamax } WHEN { TURN { MOVE(opponent, MOVE_HEAL_PULSE); MOVE(player, MOVE_TACKLE, gimmick: dynamax); } } SCENE { - MESSAGE("Foe Wobbuffet used Heal Pulse!"); + MESSAGE("The opposing Wobbuffet used Heal Pulse!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_EQ(results[0].damage, results[1].damage); @@ -634,14 +634,14 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers single opponent's speed") TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); // turn 2 MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } @@ -664,21 +664,21 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers both opponents' speed") MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); // turn 2 MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Wobbuffet's Speed fell!"); - MESSAGE("Foe Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); } } @@ -709,8 +709,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Knuckle raises both allies' attack") MESSAGE("Wynaut's Attack rose!"); MESSAGE("Wynaut used Tackle!"); HP_BAR(opponentRight, captureDamage: &damage[1]); - MESSAGE("Foe Wobbuffet used Celebrate!"); - MESSAGE("Foe Wynaut used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wynaut used Celebrate!"); // turn 2 MESSAGE("Wobbuffet used Max Knuckle!"); HP_BAR(opponentLeft, captureDamage: &damage[2]); @@ -736,8 +736,8 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Flare sets up sunlight") TURN { MOVE(player, MOVE_EMBER, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Wobbuffet used Max Flare!"); - MESSAGE("The sunlight got bright!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The sunlight turned harsh!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SUN_CONTINUES); } } @@ -753,7 +753,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Geyser sets up heavy rain") } SCENE { MESSAGE("Wobbuffet used Max Geyser!"); MESSAGE("It started to rain!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RAIN_CONTINUES); } } @@ -769,7 +769,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Hailstorm sets up hail") } SCENE { MESSAGE("Wobbuffet used Max Hailstorm!"); MESSAGE("It started to hail!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HAIL_CONTINUES); } } @@ -784,8 +784,8 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Rockfall sets up a sandstorm") TURN { MOVE(player, MOVE_ROCK_THROW, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Wobbuffet used Max Rockfall!"); - MESSAGE("A sandstorm brewed!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("A sandstorm kicked up!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); } } @@ -806,7 +806,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Overgrowth sets up Grassy Terrain") MESSAGE("Grass grew to cover the battlefield!"); MESSAGE("Wobbuffet is healed by the grassy terrain!"); HP_BAR(player, damage: -maxHP/16); - MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); + MESSAGE("The opposing Wobbuffet is healed by the grassy terrain!"); HP_BAR(opponent, damage: -maxHP/16); } } @@ -821,9 +821,9 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Mindstorm sets up Psychic Terrain") TURN { MOVE(opponent, MOVE_EXTREME_SPEED); MOVE(player, MOVE_PSYCHIC, gimmick: GIMMICK_DYNAMAX); } TURN { MOVE(opponent, MOVE_EXTREME_SPEED); MOVE(player, MOVE_PSYCHIC); } } SCENE { - MESSAGE("Foe Wobbuffet used Extreme Speed!"); + MESSAGE("The opposing Wobbuffet used Extreme Speed!"); MESSAGE("Wobbuffet used Max Mindstorm!"); - MESSAGE("Foe Wobbuffet cannot use Extreme Speed!"); + MESSAGE("The opposing Wobbuffet cannot use Extreme Speed!"); MESSAGE("Wobbuffet used Max Mindstorm!"); } } @@ -838,7 +838,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Lightning sets up Electric Terrain") TURN { MOVE(player, MOVE_THUNDERBOLT, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_SPORE); } } SCENE { MESSAGE("Wobbuffet used Max Lightning!"); - MESSAGE("Foe Wobbuffet used Spore!"); + MESSAGE("The opposing Wobbuffet used Spore!"); MESSAGE("Wobbuffet surrounds itself with electrified terrain!"); } } @@ -853,7 +853,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Starfall sets up Misty Terrain") TURN { MOVE(player, MOVE_MOONBLAST, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TOXIC); } } SCENE { MESSAGE("Wobbuffet used Max Starfall!"); - MESSAGE("Foe Wobbuffet used Toxic!"); + MESSAGE("The opposing Wobbuffet used Toxic!"); MESSAGE("Wobbuffet surrounds itself with a protective mist!"); } } @@ -873,7 +873,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Stonesurge sets up Stealth Rocks") MESSAGE("Drednaw used G-Max Stonesurge!"); MESSAGE("Pointed stones float in the air around the opposing team!"); // turn 2 - MESSAGE("Pointed stones dug into Foe Wobbuffet!"); + MESSAGE("Pointed stones dug into the opposing Wobbuffet!"); } } @@ -893,13 +893,13 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Steelsurge sets up sharp steel") } SCENE { // turn 1 MESSAGE("Copperajah used G-Max Steelsurge!"); - MESSAGE("Sharp-pointed steel floats around the opposing team!"); + MESSAGE("Sharp-pointed pieces of steel started floating around the opposing Pokémon!"); // turn 2 MESSAGE("2 sent out Hatterene!"); - MESSAGE("Sharp steel bit into Foe Hatterene!"); + MESSAGE("The sharp steel bit into the opposing Hatterene!"); // turn 4 - MESSAGE("Foe Hatterene used Defog!"); - MESSAGE("The sharp steel disappeared from the ground around the opposing team!"); + MESSAGE("The opposing Hatterene used Defog!"); + MESSAGE("The pieces of steel surrounding the opposing Pokémon disappeared!"); } THEN { EXPECT_MUL_EQ(opponent->maxHP, Q_4_12(0.75), opponent->hp); } @@ -939,10 +939,10 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Volt Crash paralyzes both opponents") MESSAGE("Pikachu used G-Max Volt Crash!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponentLeft); STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponentRight); STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("Foe Wynaut is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wynaut is paralyzed, so it may be unable to move!"); } } @@ -969,21 +969,21 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock paralyzes or poisons both opponen ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentLeft); if (statusAnim == B_ANIM_STATUS_PSN) { STATUS_ICON(opponentLeft, poison: TRUE); - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); } else { STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); } // opponent right ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentRight); if (statusAnim == B_ANIM_STATUS_PSN) { STATUS_ICON(opponentRight, poison: TRUE); - MESSAGE("Foe Wynaut was poisoned!"); + MESSAGE("The opposing Wynaut was poisoned!"); } else { STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("Foe Wynaut is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wynaut is paralyzed, so it may be unable to move!"); } } } @@ -1005,14 +1005,14 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock chooses statuses before consideri NONE_OF { // opponent left STATUS_ICON(opponentLeft, poison: TRUE); - MESSAGE("Foe Garbodor was poisoned!"); + MESSAGE("The opposing Garbodor was poisoned!"); STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("Foe Garbodor is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Garbodor is paralyzed, so it may be unable to move!"); // opponent right STATUS_ICON(opponentRight, poison: TRUE); - MESSAGE("Foe Trubbish was poisoned!"); + MESSAGE("The opposing Trubbish was poisoned!"); STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("Foe Trubbish is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Trubbish is paralyzed, so it may be unable to move!"); } } } @@ -1039,29 +1039,29 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Befuddle paralyzes, poisons, or sleeps both ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentLeft); if (statusAnim == B_ANIM_STATUS_PSN) { STATUS_ICON(opponentLeft, poison: TRUE); - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); } else if (statusAnim == B_ANIM_STATUS_PRZ) { STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); } else { STATUS_ICON(opponentLeft, sleep: TRUE); - MESSAGE("Foe Wobbuffet fell asleep!"); + MESSAGE("The opposing Wobbuffet fell asleep!"); } // opponent right ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentRight); if (statusAnim == B_ANIM_STATUS_PSN) { STATUS_ICON(opponentRight, poison: TRUE); - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); } else if (statusAnim == B_ANIM_STATUS_PRZ) { STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); } else { STATUS_ICON(opponentRight, sleep: TRUE); - MESSAGE("Foe Wobbuffet fell asleep!"); + MESSAGE("The opposing Wobbuffet fell asleep!"); } } } @@ -1079,10 +1079,10 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Gold Rush confuses both opponents and genera } SCENE { MESSAGE("Meowth used G-Max Gold Rush!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentLeft); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentRight); - MESSAGE("Foe Wobbuffet became confused!"); - MESSAGE("Coins scattered everywhere!"); + MESSAGE("The opposing Wobbuffet became confused!"); + MESSAGE("Coins were scattered everywhere!"); } } @@ -1099,9 +1099,9 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Smite confuses both opponents") } SCENE { MESSAGE("Hatterene used G-Max Smite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentLeft); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentRight); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } @@ -1118,10 +1118,10 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Cuddle infatuates both opponents, if possibl } SCENE { MESSAGE("Eevee used G-Max Cuddle!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, opponentLeft); - MESSAGE("Foe Wobbuffet fell in love!"); + MESSAGE("The opposing Wobbuffet fell in love!"); NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, opponentRight); - MESSAGE("Foe Wobbuffet fell in love!"); + MESSAGE("The opposing Wobbuffet fell in love!"); } } } @@ -1138,8 +1138,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Terror traps both opponents") TURN { MOVE(playerLeft, MOVE_LICK, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Gengar used G-Max Terror!"); - MESSAGE("Foe Wobbuffet can't escape now!"); - MESSAGE("Foe Wobbuffet can't escape now!"); + MESSAGE("The opposing Wobbuffet can no longer escape!"); + MESSAGE("The opposing Wobbuffet can no longer escape!"); } THEN { // Can't find good way to test trapping EXPECT(opponentLeft->status2 & STATUS2_ESCAPE_PREVENTION); } @@ -1169,16 +1169,16 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Meltdown torments both opponents for 3 turns } SCENE { // turn 1 MESSAGE("Melmetal used G-Max Meltdown!"); - MESSAGE("Foe Wobbuffet was subjected to torment!"); - MESSAGE("Foe Wynaut was subjected to torment!"); - MESSAGE("Foe Wobbuffet used Splash!"); - MESSAGE("Foe Wynaut used Splash!"); + MESSAGE("The opposing Wobbuffet was subjected to torment!"); + MESSAGE("The opposing Wynaut was subjected to torment!"); + MESSAGE("The opposing Wobbuffet used Splash!"); + MESSAGE("The opposing Wynaut used Splash!"); // turn 2 - MESSAGE("Foe Wobbuffet used Celebrate!"); - MESSAGE("Foe Wynaut used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wynaut used Celebrate!"); // end of turn 3 - MESSAGE("Foe Wobbuffet is tormented no more!"); - MESSAGE("Foe Wynaut is tormented no more!"); + MESSAGE("The opposing Wobbuffet is no longer tormented!"); + MESSAGE("The opposing Wynaut is no longer tormented!"); } } @@ -1202,27 +1202,27 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Wildfire sets a field effect that damages no } SCENE { // turn 1 MESSAGE("Charizard used G-Max Wildfire!"); - MESSAGE("The opposing team was surrounded by flames!"); - MESSAGE("Foe Wobbuffet is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Pokémon were surrounded by fire!"); + MESSAGE("The opposing Wobbuffet is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentLeft, captureDamage: &damage); - MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentRight); // turn 2 - MESSAGE("Foe Wobbuffet is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wobbuffet is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentLeft); - MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentRight); // turn 3 - NONE_OF { MESSAGE("Foe Arcanine is burning up within G-Max Wildfire's flames!"); } - MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + NONE_OF { MESSAGE("The opposing Arcanine is burning up within G-Max Wildfire's flames!"); } + MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentRight); // turn 4 - MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentRight); // turn 5 NONE_OF { HP_BAR(opponentRight); - MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); } } THEN { EXPECT_EQ(damage, 100); @@ -1248,8 +1248,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Replenish recycles allies' berries 50\% of t // turn 1 MESSAGE("Using Apicot Berry, the Sp. Def of Snorlax rose!"); MESSAGE("Using Apicot Berry, the Sp. Def of Munchlax rose!"); - MESSAGE("Using Apicot Berry, the Sp. Def of Foe Wobbuffet rose!"); - MESSAGE("Using Apicot Berry, the Sp. Def of Foe Wobbuffet rose!"); + MESSAGE("Using Apicot Berry, the Sp. Def of the opposing Wobbuffet rose!"); + MESSAGE("Using Apicot Berry, the Sp. Def of the opposing Wobbuffet rose!"); // turn 2 MESSAGE("Snorlax used G-Max Replenish!"); MESSAGE("Snorlax found one Apicot Berry!"); @@ -1273,10 +1273,10 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Snooze makes only the target drowsy") } SCENE { // turn 1 MESSAGE("Grimmsnarl used G-Max Snooze!"); - MESSAGE("Grimmsnarl made Foe Blissey drowsy!"); + MESSAGE("The opposing Blissey grew drowsy!"); // turn 2 ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponentLeft); - MESSAGE("Foe Blissey fell asleep!"); + MESSAGE("The opposing Blissey fell asleep!"); STATUS_ICON(opponentLeft, sleep: TRUE); } } @@ -1337,14 +1337,14 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Centiferno traps both opponents in Fire Spin } SCENE { // turn 1 MESSAGE("Centiskorch used G-Max Centiferno!"); - MESSAGE("Foe Wobbuffet is hurt by Fire Spin!"); + MESSAGE("The opposing Wobbuffet is hurt by Fire Spin!"); HP_BAR(opponentLeft); - MESSAGE("Foe Wynaut is hurt by Fire Spin!"); + MESSAGE("The opposing Wynaut is hurt by Fire Spin!"); HP_BAR(opponentRight); // turn 2 - Fire Spin continues even after Centiskorch switches out - MESSAGE("Foe Wobbuffet is hurt by Fire Spin!"); + MESSAGE("The opposing Wobbuffet is hurt by Fire Spin!"); HP_BAR(opponentLeft); - MESSAGE("Foe Wynaut is hurt by Fire Spin!"); + MESSAGE("The opposing Wynaut is hurt by Fire Spin!"); HP_BAR(opponentRight); } } @@ -1395,9 +1395,9 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Depletion takes away 2 PP from the target's } WHEN { TURN { MOVE(playerLeft, MOVE_DRAGON_CLAW, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { - MESSAGE("Foe Sableye used Celebrate!"); + MESSAGE("The opposing Sableye used Celebrate!"); MESSAGE("Duraludon used G-Max Depletion!"); - MESSAGE("Reduced Foe Sableye's Celebrate by 2!"); + MESSAGE("The opposing Sableye's PP was reduced!"); } } @@ -1422,7 +1422,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max One Blow bypasses Max Guard for full damage" MOVE(opponentLeft, MOVE_PSYCHIC, target: playerLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { if (protect) - MESSAGE("Foe Wobbuffet used Max Guard!"); + MESSAGE("The opposing Wobbuffet used Max Guard!"); MESSAGE("Urshifu used G-Max One Blow!"); HP_BAR(opponentLeft, captureDamage: &results[i].damage); } FINALLY { @@ -1457,8 +1457,8 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't execute effects on fainted battler } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player); MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet fainted!"); - NOT MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet fainted!"); + NOT MESSAGE("The opposing Wobbuffet's Speed fell!"); } } @@ -1472,7 +1472,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Moxie clones can be triggered by Max Moves faintin } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_WATERFALL, gimmick: GIMMICK_DYNAMAX); SEND_OUT(opponent, 1); } } SCENE { - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); ABILITY_POPUP(player, ABILITY_MOXIE); MESSAGE("Gyarados's Moxie raised its Attack!"); } @@ -1488,7 +1488,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Attacks prints a message when hitting into Max TURN { MOVE(player, MOVE_GROWL, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Wobbuffet used Max Guard!"); - MESSAGE("Foe Wobbuffet used Max Strike!"); + MESSAGE("The opposing Wobbuffet used Max Strike!"); } } diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c index 200d646bfb..a9e8fca871 100644 --- a/test/battle/gimmick/terastal.c +++ b/test/battle/gimmick/terastal.c @@ -199,7 +199,7 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization changes type effectiveness", s16 dam } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, gimmick: tera); MOVE(opponent, MOVE_WATER_GUN); } } SCENE { - MESSAGE("Foe Wobbuffet used Water Gun!"); + MESSAGE("The opposing Wobbuffet used Water Gun!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { @@ -215,7 +215,7 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization changes type effectiveness") } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_EARTHQUAKE); } } SCENE { - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); MESSAGE("It doesn't affect Wobbuffet…"); NOT { HP_BAR(player); } } @@ -234,11 +234,11 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization persists across switches") TURN { MOVE(opponent, MOVE_EARTHQUAKE); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); MESSAGE("It doesn't affect Wobbuffet…"); NOT { HP_BAR(player); } // turn 4 - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); MESSAGE("It doesn't affect Wobbuffet…"); NOT { HP_BAR(player); } } @@ -256,7 +256,7 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization changes the effect of Curse") } SCENE { MESSAGE("Wobbuffet used Curse!"); HP_BAR(player); - MESSAGE("Wobbuffet cut its own HP and laid a CURSE on Foe Wobbuffet!"); + MESSAGE("Wobbuffet cut its own HP and put a curse on the opposing Wobbuffet!"); NOT { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } } } @@ -271,7 +271,7 @@ SINGLE_BATTLE_TEST("(TERA) Roost does not remove the user's Flying type while Te } SCENE { MESSAGE("Zapdos used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Foe Wobbuffet used Ice Beam!"); + MESSAGE("The opposing Wobbuffet used Ice Beam!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ICE_BEAM, opponent); MESSAGE("It's super effective!"); } @@ -346,11 +346,11 @@ SINGLE_BATTLE_TEST("(TERA) Reflect Type copies a Terastallized Pokemon's Tera Ty TURN { MOVE(player, MOVE_TACKLE); } } SCENE { // turn 2 - MESSAGE("Foe Wobbuffet used Reflect Type!"); + MESSAGE("The opposing Wobbuffet used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent); // turn 3 MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("It doesn't affect Foe Wobbuffet…"); + MESSAGE("It doesn't affect the opposing Wobbuffet…"); NOT { HP_BAR(opponent); } } } @@ -365,10 +365,10 @@ SINGLE_BATTLE_TEST("(TERA) Synchronoise uses a Terastallized Pokemon's Tera Type TURN { MOVE(opponent, MOVE_SYNCHRONOISE, gimmick: GIMMICK_TERA); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Synchronoise!"); - MESSAGE("It had no effect on Wobbuffet!"); + MESSAGE("The opposing Wobbuffet used Synchronoise!"); + MESSAGE("It won't have any effect on Wobbuffet!"); // turn 2 - MESSAGE("Foe Wobbuffet used Synchronoise!"); + MESSAGE("The opposing Wobbuffet used Synchronoise!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SYNCHRONOISE, opponent); } } @@ -383,7 +383,7 @@ SINGLE_BATTLE_TEST("(TERA) Revelation Dance uses a Terastallized Pokemon's Tera TURN { MOVE(player, MOVE_REVELATION_DANCE, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Oricorio used Revelation Dance!"); - MESSAGE("It doesn't affect Foe Gengar…"); + MESSAGE("It doesn't affect the opposing Gengar…"); NOT { HP_BAR(opponent); } } } @@ -466,7 +466,7 @@ SINGLE_BATTLE_TEST("(TERA) Stellar type does not change the user's defensive pro } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, gimmick: tera); MOVE(opponent, MOVE_PSYCHIC); } } SCENE { - MESSAGE("Foe Wobbuffet used Psychic!"); + MESSAGE("The opposing Wobbuffet used Psychic!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC, opponent); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { @@ -485,11 +485,11 @@ SINGLE_BATTLE_TEST("(TERA) Reflect Type copies a Stellar-type Pokemon's base typ TURN { MOVE(player, MOVE_TACKLE); } } SCENE { // turn 2 - MESSAGE("Foe Wobbuffet used Reflect Type!"); + MESSAGE("The opposing Wobbuffet used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent); // turn 3 MESSAGE("Banette used Tackle!"); - MESSAGE("It doesn't affect Foe Wobbuffet…"); + MESSAGE("It doesn't affect the opposing Wobbuffet…"); NOT { HP_BAR(opponent); } } } @@ -504,7 +504,7 @@ SINGLE_BATTLE_TEST("(TERA) Revelation Dance uses a Stellar-type Pokemon's base t TURN { MOVE(player, MOVE_REVELATION_DANCE, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Oricorio used Revelation Dance!"); - MESSAGE("It doesn't affect Foe Gumshoos…"); + MESSAGE("It doesn't affect the opposing Gumshoos…"); NOT { HP_BAR(opponent); } } } @@ -523,7 +523,7 @@ SINGLE_BATTLE_TEST("(TERA) Conversion2 fails if last hit by a Stellar-type move" MESSAGE("Wobbuffet used Tera Blast!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player); // turn 2 - MESSAGE("Foe Wobbuffet used Conversion 2!"); + MESSAGE("The opposing Wobbuffet used Conversion 2!"); MESSAGE("But it failed!"); } } @@ -539,7 +539,7 @@ SINGLE_BATTLE_TEST("(TERA) Roost does not remove Flying-type ground immunity whe } SCENE { MESSAGE("Zapdos used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Foe Wobbuffet used Ice Beam!"); + MESSAGE("The opposing Wobbuffet used Ice Beam!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ICE_BEAM, opponent); MESSAGE("It's super effective!"); } @@ -652,7 +652,7 @@ SINGLE_BATTLE_TEST("(TERA) Protean cannot change the type of a Terastallized Pok MOVE(opponent, MOVE_EMBER); } } SCENE { MESSAGE("Greninja used Bubble!"); - MESSAGE("Foe Wobbuffet used Ember!"); + MESSAGE("The opposing Wobbuffet used Ember!"); MESSAGE("It's super effective!"); } } diff --git a/test/battle/gimmick/zmove.c b/test/battle/gimmick/zmove.c index 4e6fc26cae..073b6ef04d 100644 --- a/test/battle/gimmick/zmove.c +++ b/test/battle/gimmick/zmove.c @@ -597,7 +597,7 @@ SINGLE_BATTLE_TEST("(Z-MOVE) Splintered Stormshards removes terrain") } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLINTERED_STORMSHARDS, player); - MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The weirdness disappeared from the battlefield!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); HP_BAR(opponent); } diff --git a/test/battle/hold_effect/ability_shield.c b/test/battle/hold_effect/ability_shield.c index e10c3e0887..3159d0d8a4 100644 --- a/test/battle/hold_effect/ability_shield.c +++ b/test/battle/hold_effect/ability_shield.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Ability Shield prevents Neutralizing Gas") TURN { } } SCENE { ABILITY_POPUP(opponent, ABILITY_NEUTRALIZING_GAS); - MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Neutralizing gas filled the area!"); if (item == ITEM_ABILITY_SHIELD) { ABILITY_POPUP(player, ABILITY_DROUGHT); MESSAGE("Torkoal's Drought intensified the sun's rays!"); diff --git a/test/battle/hold_effect/air_balloon.c b/test/battle/hold_effect/air_balloon.c index 2851212391..293e1d80ca 100644 --- a/test/battle/hold_effect/air_balloon.c +++ b/test/battle/hold_effect/air_balloon.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Air Balloon prevents the holder from taking damage from grou TURN { MOVE(opponent, MOVE_EARTHQUAKE); } } SCENE { MESSAGE("Wobbuffet floats in the air with its Air Balloon!"); - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); MESSAGE("It doesn't affect Wobbuffet…"); } @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Air Balloon pops when the holder is hit by a move that is no TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet floats in the air with its Air Balloon!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet's Air Balloon popped!"); } } @@ -48,9 +48,9 @@ SINGLE_BATTLE_TEST("Air Balloon no longer prevents the holder from taking damage TURN { MOVE(opponent, MOVE_EARTHQUAKE); } } SCENE { MESSAGE("Wobbuffet floats in the air with its Air Balloon!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet's Air Balloon popped!"); - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); NOT MESSAGE("It doesn't affect Wobbuffet…"); } @@ -68,7 +68,7 @@ SINGLE_BATTLE_TEST("Air Balloon can not be restored with Recycle after it has be } } SCENE { MESSAGE("Wobbuffet floats in the air with its Air Balloon!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet's Air Balloon popped!"); MESSAGE("Wobbuffet used Recycle!"); MESSAGE("But it failed!"); @@ -117,6 +117,6 @@ SINGLE_BATTLE_TEST("Air Balloon pops before it can be stolen with Thief or Covet } SCENE { MESSAGE("Wobbuffet floats in the air with its Air Balloon!"); MESSAGE("Wobbuffet's Air Balloon popped!"); - NOT MESSAGE("Foe Wobbuffet stole Wobbuffet's Air Balloon!"); + NOT MESSAGE("The opposing Wobbuffet stole Wobbuffet's Air Balloon!"); } } diff --git a/test/battle/hold_effect/berserk_gene.c b/test/battle/hold_effect/berserk_gene.c index cda82ebb60..59f78c1a12 100644 --- a/test/battle/hold_effect/berserk_gene.c +++ b/test/battle/hold_effect/berserk_gene.c @@ -182,7 +182,7 @@ SINGLE_BATTLE_TEST("Berserk Gene does not confuse when Safeguard is active") } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Berserk Gene, the Attack of Wobbuffet sharply rose!"); - MESSAGE("Wobbuffet's party is protected by Safeguard!"); + MESSAGE("Wobbuffet is protected by Safeguard!"); NOT MESSAGE("Wobbuffet became confused!"); } } diff --git a/test/battle/hold_effect/clear_amulet.c b/test/battle/hold_effect/clear_amulet.c index f2059a0285..d0666ff3a9 100644 --- a/test/battle/hold_effect/clear_amulet.c +++ b/test/battle/hold_effect/clear_amulet.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents Intimidate") HP_BAR(player, captureDamage: &turnOneHit); ABILITY_POPUP(player, ABILITY_INTIMIDATE); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Foe Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The effects of the Clear Amulet held by the opposing Wobbuffet prevents its stats from being lowered!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); @@ -55,7 +55,7 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents stat reducing effects") TURN { MOVE(player, move); } } SCENE { NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The effects of the Clear Amulet held by the opposing Wobbuffet prevents its stats from being lowered!"); } } @@ -84,7 +84,7 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents secondary effects that reduce stats") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The effects of the Clear Amulet held by the opposing Wobbuffet prevents its stats from being lowered!"); } } } diff --git a/test/battle/hold_effect/covert_cloak.c b/test/battle/hold_effect/covert_cloak.c index e15bca3b9f..b55b1492da 100644 --- a/test/battle/hold_effect/covert_cloak.c +++ b/test/battle/hold_effect/covert_cloak.c @@ -33,12 +33,12 @@ SINGLE_BATTLE_TEST("Covert Cloak blocks secondary effects") ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); NONE_OF { - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); - MESSAGE("Foe Wobbuffet was burned!"); - MESSAGE("Foe Wobbuffet was poisoned!"); - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); + MESSAGE("The opposing Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet was prevented from healing!"); + MESSAGE("The opposing Wobbuffet was prevented from healing!"); } } THEN { // Can't find good way to test trapping EXPECT(!(opponent->status2 & STATUS2_ESCAPE_PREVENTION)); @@ -68,16 +68,16 @@ SINGLE_BATTLE_TEST("Covert Cloak does not block primary effects") HP_BAR(opponent); switch (move) { case MOVE_INFESTATION: - MESSAGE("Foe Skarmory has been afflicted with an infestation by Wobbuffet!"); + MESSAGE("The opposing Skarmory has been afflicted with an infestation by Wobbuffet!"); break; case MOVE_THOUSAND_ARROWS: - MESSAGE("Foe Skarmory fell straight down!"); + MESSAGE("The opposing Skarmory fell straight down!"); break; case MOVE_JAW_LOCK: MESSAGE("Neither Pokémon can run away!"); break; case MOVE_PAY_DAY: - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); break; } } THEN { // Can't find good way to test trapping @@ -140,11 +140,11 @@ DOUBLE_BATTLE_TEST("Covert Cloak does or does not block Sparkling Aria depending } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPARKLING_ARIA, playerLeft); if (moveToUse == MOVE_TACKLE) { - MESSAGE("Foe Wobbuffet's burn was healed."); + MESSAGE("The opposing Wobbuffet's burn was cured!"); STATUS_ICON(opponentLeft, none: TRUE); } else { NONE_OF { - MESSAGE("Foe Wobbuffet's burn was healed."); + MESSAGE("The opposing Wobbuffet's burn was cured!"); STATUS_ICON(opponentLeft, none: TRUE); } } @@ -162,7 +162,7 @@ SINGLE_BATTLE_TEST("Covert Cloak blocks Sparkling Aria in singles") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPARKLING_ARIA, player); NONE_OF { - MESSAGE("Foe Wobbuffet's burn was healed."); + MESSAGE("The opposing Wobbuffet's burn was cured!"); STATUS_ICON(opponent, none: TRUE); } } diff --git a/test/battle/hold_effect/critical_hit_up.c b/test/battle/hold_effect/critical_hit_up.c index eb73da36dd..c23f29773a 100644 --- a/test/battle/hold_effect/critical_hit_up.c +++ b/test/battle/hold_effect/critical_hit_up.c @@ -25,11 +25,11 @@ SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two s if (move == MOVE_TACKLE) { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet used Lansat Berry to get pumped!"); + MESSAGE("Wobbuffet used the Lansat Berry to get pumped!"); } } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet used Lansat Berry to get pumped!"); + MESSAGE("Wobbuffet used the Lansat Berry to get pumped!"); } } } @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two s } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Bellsprout used Lansat Berry to get pumped!"); + MESSAGE("Bellsprout used the Lansat Berry to get pumped!"); } } @@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two s } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet used Lansat Berry to get pumped!"); + MESSAGE("Wobbuffet used the Lansat Berry to get pumped!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); MESSAGE("A critical hit!"); } diff --git a/test/battle/hold_effect/cure_status.c b/test/battle/hold_effect/cure_status.c index d00d891e26..d954983f88 100644 --- a/test/battle/hold_effect/cure_status.c +++ b/test/battle/hold_effect/cure_status.c @@ -206,16 +206,16 @@ SINGLE_BATTLE_TEST("Opponent Pokemon can be further poisoned with Toxic spikes a } SCENE { MESSAGE("Wobbuffet used Toxic Spikes!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); // 1st switch-in MESSAGE("2 sent out Wynaut!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); if (item == ITEM_PECHA_BERRY) { - MESSAGE("Foe Wynaut's Pecha Berry cured poison!"); + MESSAGE("The opposing Wynaut's Pecha Berry cured its poison!"); } else { - MESSAGE("Foe Wynaut's Lum Berry cured its poison problem!"); + MESSAGE("The opposing Wynaut's Lum Berry cured its poison problem!"); } STATUS_ICON(opponent, poison: FALSE); // 2nd switch-in @@ -245,16 +245,16 @@ SINGLE_BATTLE_TEST("Player Pokemon can be further poisoned with Toxic spikes aft TURN { SWITCH(player, 1); } TURN { SWITCH(player, 2); } } SCENE { - MESSAGE("Foe Wobbuffet used Toxic Spikes!"); + MESSAGE("The opposing Wobbuffet used Toxic Spikes!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, opponent); - MESSAGE("Poison Spikes were scattered all around your team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around your team!"); // 1st switch-in SEND_IN_MESSAGE("Wobbuffet"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); STATUS_ICON(player, poison: TRUE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); if (item == ITEM_PECHA_BERRY) { - MESSAGE("Wobbuffet's Pecha Berry cured poison!"); + MESSAGE("Wobbuffet's Pecha Berry cured its poison!"); } else { MESSAGE("Wobbuffet's Lum Berry cured its poison problem!"); } diff --git a/test/battle/hold_effect/custap_berry.c b/test/battle/hold_effect/custap_berry.c index 469f3cf527..6e7b210e8d 100644 --- a/test/battle/hold_effect/custap_berry.c +++ b/test/battle/hold_effect/custap_berry.c @@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Custap Berry allows the holder to move first in its priority TURN { MOVE(player, MOVE_TACKLE); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet can act faster, thanks to Custap Berry!"); + MESSAGE("Wobbuffet can act faster than normal, thanks to its Custap Berry!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Custap Berry allows the holder to move first in its priority TURN { MOVE(player, MOVE_TACKLE); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Bellsprout can act faster, thanks to Custap Berry!"); + MESSAGE("Bellsprout can act faster than normal, thanks to its Custap Berry!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } @@ -46,6 +46,6 @@ SINGLE_BATTLE_TEST("Custap Berry activates even if the opposing mon switches out TURN { SWITCH(opponent, 1); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Regirock can act faster, thanks to Custap Berry!"); + MESSAGE("Regirock can act faster than normal, thanks to its Custap Berry!"); } } diff --git a/test/battle/hold_effect/eject_button.c b/test/battle/hold_effect/eject_button.c index f53a270d82..cd003c45c0 100644 --- a/test/battle/hold_effect/eject_button.c +++ b/test/battle/hold_effect/eject_button.c @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Eject Button is not triggered when there is nothing to switc ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } @@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Eject Button is not activated by a Sheer Force boosted move" ANIMATION(ANIM_TYPE_MOVE, MOVE_FLAMETHROWER, player); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } @@ -61,12 +61,12 @@ SINGLE_BATTLE_TEST("Eject Button will not activate under Substitute") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); - MESSAGE("Foe Raichu made a SUBSTITUTE!"); + MESSAGE("The opposing Raichu put in a substitute!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); - MESSAGE("The SUBSTITUTE took damage for Foe Raichu!"); + MESSAGE("The substitute took damage for the opposing Raichu!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Raichu is switched out with the Eject Button!"); + MESSAGE("The opposing Raichu is switched out with the Eject Button!"); } } } @@ -85,7 +85,7 @@ SINGLE_BATTLE_TEST("Eject Button is not blocked by trapping abilities or moves") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); MESSAGE("2 sent out Wobbuffet!"); } } @@ -105,7 +105,7 @@ SINGLE_BATTLE_TEST("Eject Button is not triggered after the mon loses Eject Butt ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } @@ -126,7 +126,7 @@ SINGLE_BATTLE_TEST("Eject Button is not triggered after given to player by Picke } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); - MESSAGE("Foe Sneasel stole Regieleki's Eject Button!"); + MESSAGE("The opposing Sneasel stole Regieleki's Eject Button!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } @@ -144,10 +144,10 @@ SINGLE_BATTLE_TEST("Eject Button has no chance to activate after Dragon Tail") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); - MESSAGE("Foe Chansey was dragged out!"); + MESSAGE("The opposing Chansey was dragged out!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Chansey is switched out with the Eject Button!"); + MESSAGE("The opposing Chansey is switched out with the Eject Button!"); } } } @@ -166,7 +166,7 @@ SINGLE_BATTLE_TEST("Eject Button prevents Volt Switch / U-Turn from activating") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_VOLT_SWITCH, player); - MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); } } @@ -184,7 +184,7 @@ SINGLE_BATTLE_TEST("Eject Button is activated before Emergency Exit") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Golisopod is switched out with the Eject Button!"); + MESSAGE("The opposing Golisopod is switched out with the Eject Button!"); } } @@ -201,10 +201,10 @@ SINGLE_BATTLE_TEST("Eject Button is not triggered after High Jump Kick crash dam } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, player); - MESSAGE("Foe Wobbuffet kept going and crashed!"); + MESSAGE("The opposing Wobbuffet kept going and crashed!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); } } } diff --git a/test/battle/hold_effect/enigma_berry.c b/test/battle/hold_effect/enigma_berry.c index c678b178d3..5a058eed1b 100644 --- a/test/battle/hold_effect/enigma_berry.c +++ b/test/battle/hold_effect/enigma_berry.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Enigma Berry recovers 25% of HP if hit by super effective mo ANIMATION(ANIM_TYPE_MOVE, MOVE_ENDURE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BITE, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wynaut's Enigma Berry restored health!"); + MESSAGE("Wynaut restored its health using its Enigma Berry!"); HP_BAR(player, damage: -maxHP / 4); } } @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Enigma Berry does nothing if not hit by super effective move ANIMATION(ANIM_TYPE_MOVE, MOVE_BITE, opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Mightyena's Enigma Berry restored health!"); + MESSAGE("Mightyena restored its health using its Enigma Berry!"); } } } @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Enigma Berry does nothing if Heal Block applies") ANIMATION(ANIM_TYPE_MOVE, MOVE_BITE, opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wynaut's Enigma Berry restored health!"); + MESSAGE("Wynaut restored its health using its Enigma Berry!"); } } } diff --git a/test/battle/hold_effect/gems.c b/test/battle/hold_effect/gems.c index ffba57651d..36a843bbfa 100644 --- a/test/battle/hold_effect/gems.c +++ b/test/battle/hold_effect/gems.c @@ -17,11 +17,11 @@ SINGLE_BATTLE_TEST("Gem is consumed when it corresponds to the type of a move") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Fire Gem strengthened Wobbuffet's power!"); + MESSAGE("The Fire Gem strengthened Wobbuffet's power!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Normal Gem strengthened Wobbuffet's power!"); + MESSAGE("The Normal Gem strengthened Wobbuffet's power!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); } } @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Gem boost is only applied once") TURN { MOVE(player, MOVE_TACKLE); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Normal Gem strengthened Wobbuffet's power!"); + MESSAGE("The Normal Gem strengthened Wobbuffet's power!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &boostedHit); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); @@ -83,7 +83,7 @@ SINGLE_BATTLE_TEST("Gem is consumed if the move type is changed") } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Normal Gem strengthened Delcatty's power!"); + MESSAGE("The Normal Gem strengthened Delcatty's power!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FEINT_ATTACK, player); } } diff --git a/test/battle/hold_effect/jaboca_berry.c b/test/battle/hold_effect/jaboca_berry.c index 0b9975fc2a..373780be71 100644 --- a/test/battle/hold_effect/jaboca_berry.c +++ b/test/battle/hold_effect/jaboca_berry.c @@ -27,11 +27,11 @@ SINGLE_BATTLE_TEST("Jaboca Berry causes the attacker to lose 1/8 of its max HP i if (move == MOVE_TACKLE) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); HP_BAR(player, captureDamage: &damage); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Jaboca Berry!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Jaboca Berry!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Jaboca Berry!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Jaboca Berry!"); } } } THEN { @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Jaboca Berry tirggers before Bug Bite can steal it") HP_BAR(opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); HP_BAR(player); - MESSAGE("Wyanut was hurt by Foe Wobbuffet's Jaboca Berry!"); - NOT MESSAGE("Wynaut stole and ate Foe Wobbuffet's Jaboca Berry!"); + MESSAGE("Wyanut was hurt by the opposing Wobbuffet's Jaboca Berry!"); + NOT MESSAGE("Wynaut stole and ate the opposing its target's Jaboca Berry!"); } } diff --git a/test/battle/hold_effect/kee_berry.c b/test/battle/hold_effect/kee_berry.c index ace35a824c..2375e65c2f 100644 --- a/test/battle/hold_effect/kee_berry.c +++ b/test/battle/hold_effect/kee_berry.c @@ -25,11 +25,11 @@ SINGLE_BATTLE_TEST("Kee Berry raises the holder's Defense by one stage when hit HP_BAR(opponent); if (move == MOVE_TACKLE) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Using Kee Berry, the Defense of Foe Wobbuffet rose!"); + MESSAGE("Using Kee Berry, the Defense of the opposing Wobbuffet rose!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Using Kee Berry, the Defense of Foe Wobbuffet rose!"); + MESSAGE("Using Kee Berry, the Defense of the opposing Wobbuffet rose!"); } } } THEN { @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Kee Berry raises the holder's Defense by two stages with Rip ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Using Kee Berry, the Defense of Foe Applin sharply rose!"); + MESSAGE("Using Kee Berry, the Defense of the opposing Applin sharply rose!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2); } diff --git a/test/battle/hold_effect/leftovers.c b/test/battle/hold_effect/leftovers.c index 2151d43ff9..4ba6d7b97b 100644 --- a/test/battle/hold_effect/leftovers.c +++ b/test/battle/hold_effect/leftovers.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Leftovers recovers 1/16th HP at end of turn") } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's Leftovers restored its HP a little!"); + MESSAGE("Wobbuffet restored a little HP using its Leftovers!"); HP_BAR(player, damage: -maxHP / 16); } } @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Leftovers does nothing if max HP") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's Leftovers restored its HP a little!"); + MESSAGE("Wobbuffet restored a little HP using its Leftovers!"); HP_BAR(player); } } @@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Leftovers does nothing if Heal Block applies") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's Leftovers restored its HP a little!"); + MESSAGE("Wobbuffet restored a little HP using its Leftovers!"); HP_BAR(player); } } diff --git a/test/battle/hold_effect/maranga_berry.c b/test/battle/hold_effect/maranga_berry.c index a7b90bd9b3..6d12f257a7 100644 --- a/test/battle/hold_effect/maranga_berry.c +++ b/test/battle/hold_effect/maranga_berry.c @@ -23,12 +23,12 @@ SINGLE_BATTLE_TEST("Maranga Berry raises the holder's Sp. Def by one stage when HP_BAR(opponent); if (move == MOVE_SWIFT) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Using Maranga Berry, the Sp. Def of Foe Wobbuffet rose!"); + MESSAGE("Using Maranga Berry, the Sp. Def of the opposing Wobbuffet rose!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Using Maranga Berry, the Sp. Def of Foe Wobbuffet rose!"); + MESSAGE("Using Maranga Berry, the Sp. Def of the opposing Wobbuffet rose!"); } } } THEN { @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Maranga Berry raises the holder's Sp. Def by two stages with ANIMATION(ANIM_TYPE_MOVE, MOVE_SWIFT, player); HP_BAR(opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Using Maranga Berry, the Sp. Def of Foe Applin sharply rose!"); + MESSAGE("Using Maranga Berry, the Sp. Def of the opposing Applin sharply rose!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 2); } diff --git a/test/battle/hold_effect/metronome.c b/test/battle/hold_effect/metronome.c index 42acc26d24..21ad326cf1 100644 --- a/test/battle/hold_effect/metronome.c +++ b/test/battle/hold_effect/metronome.c @@ -120,8 +120,8 @@ SINGLE_BATTLE_TEST("Metronome Item counts charging turn of moves for its attacki TURN { SKIP_TURN(player); } } SCENE { MESSAGE("Wobbuffet used Solar Beam!"); - MESSAGE("Wobbuffet took in sunlight!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("Wobbuffet absorbed light!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Congratulations, 1!"); MESSAGE("Wobbuffet used Solar Beam!"); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -144,7 +144,7 @@ SINGLE_BATTLE_TEST("Metronome Item doesn't increase damage per hit of multi-hit ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_ATTACK, player); HP_BAR(opponent, captureDamage: &damage[0]); HP_BAR(opponent, captureDamage: &damage[1]); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_ATTACK, player); HP_BAR(opponent, captureDamage: &damage[2]); } THEN { diff --git a/test/battle/hold_effect/mirror_herb.c b/test/battle/hold_effect/mirror_herb.c index 52326cc60f..88a7467334 100644 --- a/test/battle/hold_effect/mirror_herb.c +++ b/test/battle/hold_effect/mirror_herb.c @@ -60,7 +60,7 @@ DOUBLE_BATTLE_TEST("Mirror Herb does not trigger for Ally's Soul Heart's stat ra TURN { MOVE(playerRight, MOVE_TACKLE, target:opponentLeft); } } SCENE { MESSAGE("Wynaut used Tackle!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); diff --git a/test/battle/hold_effect/protective_pads.c b/test/battle/hold_effect/protective_pads.c index 22032112f4..95de944b81 100644 --- a/test/battle/hold_effect/protective_pads.c +++ b/test/battle/hold_effect/protective_pads.c @@ -69,7 +69,7 @@ SINGLE_BATTLE_TEST("Protective Pads protects from Rocly Helmet Damage") HP_BAR(opponent); NONE_OF { HP_BAR(player); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Rocky Helmet!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Rocky Helmet!"); } } } diff --git a/test/battle/hold_effect/quick_claw.c b/test/battle/hold_effect/quick_claw.c index b8b845ec25..a436b572cb 100644 --- a/test/battle/hold_effect/quick_claw.c +++ b/test/battle/hold_effect/quick_claw.c @@ -17,6 +17,6 @@ SINGLE_BATTLE_TEST("Quick Claw activates 20% of the time") TURN { MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } } diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c index ad2f77861f..e1d94b4db0 100644 --- a/test/battle/hold_effect/red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -20,8 +20,8 @@ SINGLE_BATTLE_TEST("Red Card switches the attacker with a random non-fainted rep } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); - MESSAGE("Foe Bulbasaur was dragged out!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); + MESSAGE("The opposing Bulbasaur was dragged out!"); } THEN { EXPECT(player->item == ITEM_NONE); } @@ -43,8 +43,8 @@ DOUBLE_BATTLE_TEST("Red Card switches the target with a random non-battler, non- } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); - MESSAGE("Foe Bulbasaur was dragged out!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); + MESSAGE("The opposing Bulbasaur was dragged out!"); } THEN { EXPECT(playerLeft->item == ITEM_NONE); } @@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if holder faints") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } THEN { EXPECT(player->item == ITEM_NONE); @@ -82,7 +82,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if target is behind a Substitute" ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } THEN { EXPECT(player->item == ITEM_RED_CARD); // Not activated, so still has the item. @@ -102,7 +102,7 @@ SINGLE_BATTLE_TEST("Red Card activates after the last hit of a multi-hit move") HP_BAR(player); HP_BAR(player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } THEN { EXPECT(player->item == ITEM_NONE); } @@ -119,7 +119,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if no replacements") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } THEN { EXPECT(player->item == ITEM_RED_CARD); // Not activated, so still has the item. @@ -138,7 +138,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if replacements fainted") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } THEN { EXPECT(player->item == ITEM_RED_CARD); // Not activated, so still has the item. @@ -157,7 +157,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if knocked off") ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } THEN { EXPECT(player->item == ITEM_NONE); @@ -182,11 +182,11 @@ SINGLE_BATTLE_TEST("Red Card does not activate if stolen by a move") ANIMATION(ANIM_TYPE_MOVE, MOVE_THIEF, opponent); if (activate) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } } THEN { @@ -211,11 +211,11 @@ SINGLE_BATTLE_TEST("Red Card does not activate if stolen by Magician") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); if (activate) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Fennekin!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Fennekin!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Fennekin!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Fennekin!"); } } } THEN { @@ -240,14 +240,14 @@ DOUBLE_BATTLE_TEST("Red Card activates for only the fastest target") // Fastest target's Red Card activates. ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_SLIDE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); - MESSAGE("Foe Unown was dragged out!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); + MESSAGE("The opposing Unown was dragged out!"); // Slower target's Red Card still able to activate on other battler. ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); - MESSAGE("Wynaut held up its Red Card against Foe Wynaut!"); - MESSAGE("Foe Wobbuffet was dragged out!"); + MESSAGE("Wynaut held up its Red Card against the opposing Wynaut!"); + MESSAGE("The opposing Wobbuffet was dragged out!"); } THEN { EXPECT(playerLeft->item == ITEM_NONE); EXPECT(playerRight->item == ITEM_NONE); @@ -271,14 +271,14 @@ DOUBLE_BATTLE_TEST("Red Card activates but fails if the attacker is rooted") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); - MESSAGE("Foe Wobbuffet anchored itself with its roots!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); + MESSAGE("The opposing Wobbuffet anchored itself with its roots!"); // Red Card already consumed so cannot activate. ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); - MESSAGE("Wynaut held up its Red Card against Foe Wynaut!"); + MESSAGE("Wynaut held up its Red Card against the opposing Wynaut!"); } } } @@ -299,14 +299,14 @@ DOUBLE_BATTLE_TEST("Red Card activates but fails if the attacker has Suction Cup } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); - MESSAGE("Wobbuffet held up its Red Card against Foe Octillery!"); - MESSAGE("Foe Octillery anchors itself with Suction Cups!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Octillery!"); + MESSAGE("The opposing Octillery anchors itself with Suction Cups!"); // Red Card already consumed so cannot activate. ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); - MESSAGE("Wynaut held up its Red Card against Foe Wynaut!"); + MESSAGE("Wynaut held up its Red Card against the opposing Wynaut!"); } } } @@ -328,11 +328,11 @@ SINGLE_BATTLE_TEST("Red Card does not activate if switched by Dragon Tail") ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, opponent); if (activate) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } } @@ -349,7 +349,7 @@ SINGLE_BATTLE_TEST("Red Card activates and overrides U-turn") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } @@ -370,11 +370,11 @@ SINGLE_BATTLE_TEST("Red Card does not activate if attacker's Sheer Force applied ANIMATION(ANIM_TYPE_MOVE, move, opponent); if (activate) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Tauros!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Tauros!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Tauros!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Tauros!"); } } } @@ -392,7 +392,7 @@ SINGLE_BATTLE_TEST("Red Card activates before Emergency Exit") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Golisopod held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Golisopod held up its Red Card against the opposing Wobbuffet!"); ABILITY_POPUP(player, ABILITY_EMERGENCY_EXIT); SEND_IN_MESSAGE("Wimpod"); } @@ -415,14 +415,14 @@ SINGLE_BATTLE_TEST("Red Card is consumed after dragged out replacement has its S // 2nd turn Red Card activation ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet held up its Red Card against Wobbuffet!"); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); MESSAGE("Wynaut was dragged out!"); - MESSAGE("Wynaut was caught in a Sticky Web!"); + MESSAGE("Wynaut was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); // 3rd turn, Red Card was consumed, it can't trigger again NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet held up its Red Card against Wynaut!"); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wynaut!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } } THEN { @@ -441,7 +441,7 @@ SINGLE_BATTLE_TEST("Red Card does not cause the dragged out mon to lose hp due t } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet held up its Red Card against Wobbuffet!"); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); MESSAGE("Wynaut was dragged out!"); NOT MESSAGE("Wynaut was hurt by its Life Orb!"); } @@ -463,7 +463,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if holder is switched in mid-turn MESSAGE("Wobbuffet is switched out with the Eject Button!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } } diff --git a/test/battle/hold_effect/restore_hp.c b/test/battle/hold_effect/restore_hp.c index c19433751c..47f409ff84 100644 --- a/test/battle/hold_effect/restore_hp.c +++ b/test/battle/hold_effect/restore_hp.c @@ -22,9 +22,9 @@ DOUBLE_BATTLE_TEST("Restore HP Item effects do not miss timing") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); MESSAGE("A sea of fire enveloped the opposing team!"); - MESSAGE("The opposing Foe Wynaut was hurt by the sea of fire!"); + MESSAGE("The opposing Wynaut was hurt by the sea of fire!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); - MESSAGE("The opposing Foe Wobbuffet was hurt by the sea of fire!"); + MESSAGE("The opposing Wobbuffet was hurt by the sea of fire!"); } } diff --git a/test/battle/hold_effect/restore_stats.c b/test/battle/hold_effect/restore_stats.c index 2958cdacae..c0f888469c 100644 --- a/test/battle/hold_effect/restore_stats.c +++ b/test/battle/hold_effect/restore_stats.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("White Herb restores stats when they're lowered") } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's White Herb restored its status!"); + MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); } THEN { EXPECT(player->item == ITEM_NONE); EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimi ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's White Herb restored its status!"); + MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); } THEN { EXPECT(player->item == ITEM_NONE); EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); @@ -56,11 +56,11 @@ DOUBLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimi ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); - MESSAGE("Foe Wobbuffet's White Herb restored its status!"); + MESSAGE("The opposing Wobbuffet returned its stats to normal using its White Herb!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentRight); - MESSAGE("Foe Wynaut's White Herb restored its status!"); + MESSAGE("The opposing Wynaut returned its stats to normal using its White Herb!"); } THEN { EXPECT(opponentLeft->item == ITEM_NONE); EXPECT(opponentLeft->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); @@ -81,11 +81,11 @@ SINGLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimi ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's White Herb restored its status!"); + MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CLOSE_COMBAT, player); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's White Herb restored its status!"); + MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); } } THEN { EXPECT(player->item == ITEM_NONE); @@ -117,7 +117,7 @@ SINGLE_BATTLE_TEST("White Herb restores stats after all hits of a multi hit move ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's White Herb restored its status!"); + MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); } THEN { EXPECT(player->item == ITEM_NONE); EXPECT(player->statStages[STAT_SPEED] = DEFAULT_STAT_STAGE); @@ -141,18 +141,18 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if it is knocked off o } SCENE { ANIMATION(ANIM_TYPE_MOVE, move, opponent); if (move == MOVE_THIEF) { - MESSAGE("Foe Wobbuffet stole Slugma's White Herb!"); + MESSAGE("The opposing Wobbuffet stole Slugma's White Herb!"); } ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Slugma's Weak Armor lowered its Defense!"); MESSAGE("Slugma's Weak Armor raised its Speed!"); if (move == MOVE_KNOCK_OFF) { - MESSAGE("Foe Wobbuffet knocked off Slugma's White Herb!"); + MESSAGE("The opposing Wobbuffet knocked off Slugma's White Herb!"); } NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's White Herb restored its status!"); + MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); } } THEN { EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE - 1); @@ -174,10 +174,10 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if Magician steals it" MESSAGE("Slugma's Weak Armor lowered its Defense!"); MESSAGE("Slugma's Weak Armor raised its Speed!"); ABILITY_POPUP(opponent, ABILITY_MAGICIAN); - MESSAGE("Foe Fennekin stole Slugma's White Herb!"); + MESSAGE("The opposing Fennekin stole Slugma's White Herb!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's White Herb restored its status!"); + MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); } } THEN { EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE - 1); @@ -205,7 +205,7 @@ SINGLE_BATTLE_TEST("White Herb has correct interactions with Intimidate triggere // Defiant activates first, so White Herb doesn't have a chance to trigger. if (ability == ABILITY_COMPETITIVE) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Igglybuff's White Herb restored its status!"); + MESSAGE("Igglybuff returned its stats to normal using its White Herb!"); } } THEN { if (ability == ABILITY_COMPETITIVE) { diff --git a/test/battle/hold_effect/rowap_berry.c b/test/battle/hold_effect/rowap_berry.c index 925caf2179..5dc85492c3 100644 --- a/test/battle/hold_effect/rowap_berry.c +++ b/test/battle/hold_effect/rowap_berry.c @@ -27,11 +27,11 @@ SINGLE_BATTLE_TEST("Rowap Berry causes the attacker to lose 1/8 of its max HP if if (move == MOVE_SWIFT) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); HP_BAR(player, captureDamage: &damage); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Rowap Berry!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Rowap Berry!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Rowap Berry!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Rowap Berry!"); } } } THEN { @@ -53,7 +53,7 @@ SINGLE_BATTLE_TEST("Rowap Berry is not triggered by a physical move") HP_BAR(opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Rowap Berry!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Rowap Berry!"); } } } diff --git a/test/battle/hold_effect/safety_goggles.c b/test/battle/hold_effect/safety_goggles.c index 4c5c6a2965..ec66ad8bcd 100644 --- a/test/battle/hold_effect/safety_goggles.c +++ b/test/battle/hold_effect/safety_goggles.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Safety Goggles block powder and spore moves") TURN { MOVE(player, MOVE_STUN_SPORE); } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - MESSAGE("Foe Abra is not affected thanks to its Safety Goggles!"); + MESSAGE("The opposing Abra is not affected thanks to its Safety Goggles!"); } } @@ -28,7 +28,7 @@ SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Hail") } WHEN { TURN { MOVE(player, MOVE_HAIL); } } SCENE { - NOT MESSAGE("Foe Wobbuffet is pelted by HAIL!"); + NOT MESSAGE("The opposing Wobbuffet is buffeted by the hail!"); } } @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Sandstorm") } WHEN { TURN { MOVE(player, MOVE_SANDSTORM); } } SCENE { - NOT MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!"); + NOT MESSAGE("The opposing Wobbuffet is buffeted by the sandstorm!"); } } diff --git a/test/battle/hold_effect/speed_up.c b/test/battle/hold_effect/speed_up.c index c6ddc19d8d..4a8b28b6d9 100644 --- a/test/battle/hold_effect/speed_up.c +++ b/test/battle/hold_effect/speed_up.c @@ -81,9 +81,9 @@ DOUBLE_BATTLE_TEST("Salac Berry does not miss timing miss timing") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); MESSAGE("A sea of fire enveloped the opposing team!"); - MESSAGE("The opposing Foe Wynaut was hurt by the sea of fire!"); + MESSAGE("The opposing Wynaut was hurt by the sea of fire!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); - MESSAGE("Using Salac Berry, the Speed of Foe Wynaut rose!"); - MESSAGE("The opposing Foe Wobbuffet was hurt by the sea of fire!"); + MESSAGE("Using Salac Berry, the Speed of the opposing Wynaut rose!"); + MESSAGE("The opposing Wobbuffet was hurt by the sea of fire!"); } } diff --git a/test/battle/item_effect/cure_status.c b/test/battle/item_effect/cure_status.c index 7f5601ab3c..6f7d403c43 100644 --- a/test/battle/item_effect/cure_status.c +++ b/test/battle/item_effect/cure_status.c @@ -57,7 +57,7 @@ SINGLE_BATTLE_TEST("Antidote resets Toxic Counter") TURN { ; } TURN { USE_ITEM(player, ITEM_ANTIDOTE, partyIndex: 0); } } SCENE { - MESSAGE("Foe Wobbuffet used Toxic!"); + MESSAGE("The opposing Wobbuffet used Toxic!"); MESSAGE("Wobbuffet had its status healed!"); } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); diff --git a/test/battle/item_effect/escape.c b/test/battle/item_effect/escape.c index dcd880912d..bffa6e4292 100644 --- a/test/battle/item_effect/escape.c +++ b/test/battle/item_effect/escape.c @@ -14,7 +14,7 @@ WILD_BATTLE_TEST("Poke Toy lets the player escape from a wild battle") } WHEN { TURN { USE_ITEM(player, ITEM_POKE_TOY); } } SCENE { - MESSAGE("{PLAY_SE SE_FLEE}Got away safely!\p"); + MESSAGE("{PLAY_SE SE_FLEE}You got away safely!\p"); } } @@ -29,11 +29,11 @@ WILD_BATTLE_TEST("Poke Toy lets the player escape from a wild battle even if a m TURN { USE_ITEM(player, ITEM_POKE_TOY); } } SCENE { // Turn 1 - MESSAGE("Wild Wobbuffet used Mean Look!"); + MESSAGE("The wild Wobbuffet used Mean Look!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MEAN_LOOK, opponent); - MESSAGE("Wobbuffet can't escape now!"); + MESSAGE("Wobbuffet can no longer escape!"); // Turn 2 - MESSAGE("{PLAY_SE SE_FLEE}Got away safely!\p"); + MESSAGE("{PLAY_SE SE_FLEE}You got away safely!\p"); } } @@ -45,6 +45,6 @@ WILD_BATTLE_TEST("Poke Toy lets the player escape from a wild battle even if an } WHEN { TURN { USE_ITEM(player, ITEM_POKE_TOY); } } SCENE { - MESSAGE("{PLAY_SE SE_FLEE}Got away safely!\p"); + MESSAGE("{PLAY_SE SE_FLEE}You got away safely!\p"); } } diff --git a/test/battle/item_effect/heal_and_cure_status.c b/test/battle/item_effect/heal_and_cure_status.c index 70dc8322db..db15fbde84 100644 --- a/test/battle/item_effect/heal_and_cure_status.c +++ b/test/battle/item_effect/heal_and_cure_status.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures any primary s } WHEN { TURN { USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } } SCENE { - MESSAGE("Wobbuffet had its HP restored!"); + MESSAGE("Wobbuffet had its HP restored."); if (status != STATUS1_NONE) { MESSAGE("Wobbuffet had its status healed!"); // The message is not printed if status wasn't healed. } @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Full Restore restores a party members HP and cures any prima TURN { USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 1); } TURN { SWITCH(player, 1); } } SCENE { - MESSAGE("Wynaut had its HP restored!"); + MESSAGE("Wynaut had its HP restored."); if (status != STATUS1_NONE) { MESSAGE("Wynaut had its status healed!"); // The message is not printed if status wasn't healed. } @@ -76,7 +76,7 @@ SINGLE_BATTLE_TEST("Full Restore heals a battler from any primary status") } WHEN { TURN { USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } } SCENE { - NOT MESSAGE("Wobbuffet had its HP restored!"); // The message is not printed if mon has max HP. + NOT MESSAGE("Wobbuffet had its HP restored."); // The message is not printed if mon has max HP. MESSAGE("Wobbuffet had its status healed!"); } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); @@ -100,7 +100,7 @@ SINGLE_BATTLE_TEST("Full Restore heals a party member from any primary status") TURN { USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 1); } TURN { SWITCH(player, 1); } } SCENE { - NOT MESSAGE("Wynaut had its HP restored!"); // The message is not printed if mon has max HP. + NOT MESSAGE("Wynaut had its HP restored."); // The message is not printed if mon has max HP. MESSAGE("Wynaut had its status healed!"); } THEN { EXPECT_EQ(player->species, SPECIES_WYNAUT); @@ -118,7 +118,7 @@ SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures confusion") TURN{ USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } TURN{ MOVE(player, MOVE_TACKLE); } } SCENE { - MESSAGE("Wobbuffet had its HP restored!"); + MESSAGE("Wobbuffet had its HP restored."); NONE_OF { MESSAGE("Wobbuffet is confused!"); } } THEN { EXPECT_EQ(player->hp, player->maxHP); @@ -135,8 +135,8 @@ SINGLE_BATTLE_TEST("Full Restore resets Toxic Counter") TURN { ; } TURN { USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } } SCENE { - MESSAGE("Foe Wobbuffet used Toxic!"); - MESSAGE("Wobbuffet had its HP restored!"); + MESSAGE("The opposing Wobbuffet used Toxic!"); + MESSAGE("Wobbuffet had its HP restored."); MESSAGE("Wobbuffet had its status healed!"); } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); diff --git a/test/battle/item_effect/increase_stat.c b/test/battle/item_effect/increase_stat.c index 4eba548961..9b3ced5759 100644 --- a/test/battle/item_effect/increase_stat.c +++ b/test/battle/item_effect/increase_stat.c @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("X Defense sharply raises battler's Defense stat", s16 damage if (useItem) TURN { USE_ITEM(player, ITEM_X_DEFENSE); } TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { if (B_X_ITEMS_BUFF >= GEN_7) @@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("X Sp. Def sharply raises battler's Sp. Defense stat", s16 da if (useItem) TURN { USE_ITEM(player, ITEM_X_SP_DEF); } TURN { MOVE(opponent, MOVE_DISARMING_VOICE); } } SCENE { - MESSAGE("Foe Wobbuffet used Disarming Voice!"); + MESSAGE("The opposing Wobbuffet used Disarming Voice!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { if (B_X_ITEMS_BUFF >= GEN_7) @@ -121,11 +121,11 @@ SINGLE_BATTLE_TEST("X Speed sharply raises battler's Speed stat", s16 damage) if (useItem) { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); } else { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet used Tackle!"); } } @@ -148,7 +148,7 @@ SINGLE_BATTLE_TEST("X Accuracy sharply raises battler's Accuracy stat") TURN { MOVE(player, MOVE_SING); } } SCENE { MESSAGE("Wobbuffet used Sing!"); - MESSAGE("Foe Wobbuffet fell asleep!"); + MESSAGE("The opposing Wobbuffet fell asleep!"); } } @@ -185,7 +185,7 @@ SINGLE_BATTLE_TEST("Max Mushrooms raises battler's Defense stat", s16 damage) if (useItem) TURN { USE_ITEM(player, ITEM_MAX_MUSHROOMS); } TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.66), results[1].damage); @@ -225,7 +225,7 @@ SINGLE_BATTLE_TEST("Max Mushrooms battler's Sp. Defense stat", s16 damage) if (useItem) TURN { USE_ITEM(player, ITEM_MAX_MUSHROOMS); } TURN { MOVE(opponent, MOVE_DISARMING_VOICE); } } SCENE { - MESSAGE("Foe Wobbuffet used Disarming Voice!"); + MESSAGE("The opposing Wobbuffet used Disarming Voice!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.66), results[1].damage); @@ -248,11 +248,11 @@ SINGLE_BATTLE_TEST("Max Mushrooms raises battler's Speed stat", s16 damage) if (useItem) { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); } else { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet used Tackle!"); } } diff --git a/test/battle/item_effect/revive.c b/test/battle/item_effect/revive.c index e113b6ae33..31d29cd599 100644 --- a/test/battle/item_effect/revive.c +++ b/test/battle/item_effect/revive.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Revive restores a fainted battler's HP to half") TURN { USE_ITEM(player, ITEM_REVIVE, partyIndex: 0); } TURN { SWITCH(player, 0); } } SCENE { - MESSAGE("Wynaut had its HP restored!"); + MESSAGE("Wynaut had its HP restored."); } THEN { EXPECT_EQ(player->hp, 100); } @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Max Revive restores a fainted battler's HP fully") TURN { USE_ITEM(player, ITEM_MAX_REVIVE, partyIndex: 0); } TURN { SWITCH(player, 0); } } SCENE { - MESSAGE("Wynaut had its HP restored!"); + MESSAGE("Wynaut had its HP restored."); } THEN { EXPECT_EQ(player->hp, 200); } @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Revival Herb restores a fainted battler's HP fully") TURN { USE_ITEM(player, ITEM_REVIVAL_HERB, partyIndex: 0); } TURN { SWITCH(player, 0); } } SCENE { - MESSAGE("Wynaut had its HP restored!"); + MESSAGE("Wynaut had its HP restored."); } THEN { EXPECT_EQ(player->hp, 200); } @@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Max Honey restores a fainted battler's HP fully") TURN { USE_ITEM(player, ITEM_MAX_HONEY, partyIndex: 0); } TURN { SWITCH(player, 0); } } SCENE { - MESSAGE("Wynaut had its HP restored!"); + MESSAGE("Wynaut had its HP restored."); } THEN { EXPECT_EQ(player->hp, 200); } diff --git a/test/battle/item_effect/set_mist.c b/test/battle/item_effect/set_mist.c index a4225646aa..68ac3534bb 100644 --- a/test/battle/item_effect/set_mist.c +++ b/test/battle/item_effect/set_mist.c @@ -12,8 +12,8 @@ SINGLE_BATTLE_TEST("Guard Spec. sets Mist effect on the battlers side") TURN { MOVE(opponent, MOVE_GROWL); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, player); - MESSAGE("Ally became shrouded in MIST!"); - MESSAGE("Foe Wobbuffet used Growl!"); - MESSAGE("Wobbuffet is protected by MIST!"); + MESSAGE("Your team became shrouded in mist!"); + MESSAGE("The opposing Wobbuffet used Growl!"); + MESSAGE("Wobbuffet is protected by the mist!"); } } diff --git a/test/battle/move_effect/accuracy_down.c b/test/battle/move_effect/accuracy_down.c index 8a015c4a67..f174a7f946 100644 --- a/test/battle/move_effect/accuracy_down.c +++ b/test/battle/move_effect/accuracy_down.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Sand Attack lowers Accuracy by 1 stage") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SAND_ATTACK, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's accuracy fell!"); + MESSAGE("The opposing Wobbuffet's accuracy fell!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); } } diff --git a/test/battle/move_effect/after_you.c b/test/battle/move_effect/after_you.c index 32ea44efb1..c1202f0f9c 100644 --- a/test/battle/move_effect/after_you.c +++ b/test/battle/move_effect/after_you.c @@ -46,7 +46,7 @@ DOUBLE_BATTLE_TEST("After You does nothing if the target has already moved") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); - MESSAGE("Foe Wynaut used After You!"); + MESSAGE("The opposing Wynaut used After You!"); MESSAGE("But it failed!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); } @@ -75,7 +75,7 @@ DOUBLE_BATTLE_TEST("After You calculates correct turn order if only one pokemon MESSAGE("Regirock took the kind offer!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_EDGE, playerRight); HP_BAR(opponentLeft); - MESSAGE("Foe Pidgeot fainted!"); + MESSAGE("The opposing Pidgeot fainted!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_AFTER_YOU, playerLeft); diff --git a/test/battle/move_effect/ally_switch.c b/test/battle/move_effect/ally_switch.c index b3e902fc79..c7aa52d7c5 100644 --- a/test/battle/move_effect/ally_switch.c +++ b/test/battle/move_effect/ally_switch.c @@ -54,11 +54,11 @@ DOUBLE_BATTLE_TEST("Ally Switch changes the position of battlers") ANIMATION(ANIM_TYPE_MOVE, MOVE_ALLY_SWITCH, playerLeft); MESSAGE("Wobbuffet and Wynaut switched places!"); - MESSAGE("Foe Kadabra used Screech!"); + MESSAGE("The opposing Kadabra used Screech!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Wynaut's Defense harshly fell!"); - MESSAGE("Foe Abra used Screech!"); + MESSAGE("The opposing Abra used Screech!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Wynaut's Defense harshly fell!"); } THEN { @@ -84,7 +84,7 @@ DOUBLE_BATTLE_TEST("Ally Switch does not redirect the target of Snipe Shot") ANIMATION(ANIM_TYPE_MOVE, MOVE_ALLY_SWITCH, playerLeft); MESSAGE("Wobbuffet and Wynaut switched places!"); - MESSAGE("Foe Kadabra used Snipe Shot!"); + MESSAGE("The opposing Kadabra used Snipe Shot!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SNIPE_SHOT, opponentLeft); HP_BAR(playerRight); } @@ -109,7 +109,7 @@ DOUBLE_BATTLE_TEST("Ally Switch does not redirect moves done by pokemon with Sta ANIMATION(ANIM_TYPE_MOVE, MOVE_ALLY_SWITCH, playerLeft); MESSAGE("Wobbuffet and Wynaut switched places!"); - MESSAGE("Foe Kadabra used Tackle!"); + MESSAGE("The opposing Kadabra used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); HP_BAR((ability == ABILITY_STALWART || ability == ABILITY_PROPELLER_TAIL) ? playerLeft : playerRight); } diff --git a/test/battle/move_effect/attack_down.c b/test/battle/move_effect/attack_down.c index 457d122281..e88ef43c26 100644 --- a/test/battle/move_effect/attack_down.c +++ b/test/battle/move_effect/attack_down.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Growl lowers Attack by 1 stage", s16 damage) if (lowerAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack fell!"); + MESSAGE("The opposing Wobbuffet's Attack fell!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player, captureDamage: &results[i].damage); diff --git a/test/battle/move_effect/attack_down_2.c b/test/battle/move_effect/attack_down_2.c index 7b62294a76..6fefec5e45 100644 --- a/test/battle/move_effect/attack_down_2.c +++ b/test/battle/move_effect/attack_down_2.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Charm lowers Attack by 2 stages", s16 damage) if (lowerAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARM, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack harshly fell!"); + MESSAGE("The opposing Wobbuffet's Attack harshly fell!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player, captureDamage: &results[i].damage); diff --git a/test/battle/move_effect/baton_pass.c b/test/battle/move_effect/baton_pass.c index 02d8a8839e..b6a27179f3 100644 --- a/test/battle/move_effect/baton_pass.c +++ b/test/battle/move_effect/baton_pass.c @@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Baton Pass used after Memento works correctly") } SCENE { MESSAGE("Wobbuffet used Memento!"); MESSAGE("Wobbuffet fainted!"); - MESSAGE("Foe Wynaut used Baton Pass!"); + MESSAGE("The opposing Wynaut used Baton Pass!"); MESSAGE("2 sent out Caterpie!"); MESSAGE("Go! Wobbuffet!"); } diff --git a/test/battle/move_effect/beak_blast.c b/test/battle/move_effect/beak_blast.c index d3c8d01919..e716b7717f 100644 --- a/test/battle/move_effect/beak_blast.c +++ b/test/battle/move_effect/beak_blast.c @@ -22,9 +22,9 @@ DOUBLE_BATTLE_TEST("Beak Blast's charging message is shown before other moves ar MESSAGE("Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); MESSAGE("Wynaut used Beak Blast!"); @@ -51,18 +51,18 @@ DOUBLE_BATTLE_TEST("Beak Blast burns all who make contact with the pokemon") MESSAGE("Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); HP_BAR(playerLeft); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft); - MESSAGE("Foe Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was burned!"); STATUS_ICON(opponentLeft, burn: TRUE); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); HP_BAR(playerLeft); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight); - MESSAGE("Foe Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was burned!"); STATUS_ICON(opponentRight, burn: TRUE); MESSAGE("Wynaut used Beak Blast!"); @@ -95,13 +95,13 @@ SINGLE_BATTLE_TEST("Beak Blast burns only when contact moves are used") if (burn) { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); - MESSAGE("Foe Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was burned!"); STATUS_ICON(opponent, burn: TRUE); } else { NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); - MESSAGE("Foe Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was burned!"); STATUS_ICON(opponent, burn: TRUE); } } diff --git a/test/battle/move_effect/belly_drum.c b/test/battle/move_effect/belly_drum.c index 612d4005c3..bfc558a982 100644 --- a/test/battle/move_effect/belly_drum.c +++ b/test/battle/move_effect/belly_drum.c @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Belly Drum maximizes the user's Attack stat", s16 damage) if (raiseAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet cut its own HP and maximized ATTACK!"); + MESSAGE("Wobbuffet cut its own HP and maximized its Attack!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -100,7 +100,7 @@ SINGLE_BATTLE_TEST("Belly Drum's HP cost doesn't trigger effects that trigger on TURN { MOVE(player, MOVE_BELLY_DRUM); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); - MESSAGE("Wobbuffet cut its own HP and maximized ATTACK!"); + MESSAGE("Wobbuffet cut its own HP and maximized its Attack!"); NOT MESSAGE("Wobbuffet's Air Balloon popped!"); } } @@ -121,7 +121,7 @@ SINGLE_BATTLE_TEST("Belly Drum minimizes the user's Attack stat with Contrary", if (raiseAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet cut its own HP and maximized ATTACK!"); // Message unaffected by Contrary + MESSAGE("Wobbuffet cut its own HP and maximized its Attack!"); // Message unaffected by Contrary } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &results[i].damage); diff --git a/test/battle/move_effect/bide.c b/test/battle/move_effect/bide.c index 41a6e01416..f99829d57c 100644 --- a/test/battle/move_effect/bide.c +++ b/test/battle/move_effect/bide.c @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Bide deals twice the taken damage over two turns") MESSAGE("Wobbuffet is storing energy!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player, captureDamage: &damage2); - MESSAGE("Wobbuffet unleashed energy!"); + MESSAGE("Wobbuffet unleashed its energy!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BIDE, player); HP_BAR(opponent, captureDamage: &bideDamage); } THEN { diff --git a/test/battle/move_effect/confuse.c b/test/battle/move_effect/confuse.c index dcd843b2c6..0533821972 100644 --- a/test/battle/move_effect/confuse.c +++ b/test/battle/move_effect/confuse.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Teeter Dance confuses target") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TEETER_DANCE, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Teeter Dance confusion is blocked by Own Tempo") NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_TEETER_DANCE, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } } @@ -49,10 +49,10 @@ DOUBLE_BATTLE_TEST("Teeter Dance can confuse foes and allies") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TEETER_DANCE, playerLeft); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentLeft); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, playerRight); MESSAGE("Wynaut became confused!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentRight); - MESSAGE("Foe Wynaut became confused!"); + MESSAGE("The opposing Wynaut became confused!"); } } diff --git a/test/battle/move_effect/conversion_2.c b/test/battle/move_effect/conversion_2.c index 6c2d4d7f54..acd21125c3 100644 --- a/test/battle/move_effect/conversion_2.c +++ b/test/battle/move_effect/conversion_2.c @@ -16,8 +16,8 @@ SINGLE_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type MESSAGE("Wobbuffet used Ominous Wind!"); // turn 1 ONE_OF { - MESSAGE("Foe Wobbuffet transformed into the Normal type!"); - MESSAGE("Foe Wobbuffet transformed into the Dark type!"); + MESSAGE("The opposing Wobbuffet transformed into the Normal type!"); + MESSAGE("The opposing Wobbuffet transformed into the Dark type!"); } } } @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers Struggle to be Normal t TURN { MOVE(player, MOVE_CONVERSION_2); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Struggle!"); + MESSAGE("The opposing Wobbuffet used Struggle!"); // turn 2 ONE_OF { MESSAGE("Wobbuffet transformed into the Steel type!"); @@ -56,8 +56,8 @@ SINGLE_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type MESSAGE("Wobbuffet used Ominous Wind!"); // turn 1 ONE_OF { - MESSAGE("Foe Wobbuffet transformed into the Normal type!"); - MESSAGE("Foe Wobbuffet transformed into the Dark type!"); + MESSAGE("The opposing Wobbuffet transformed into the Normal type!"); + MESSAGE("The opposing Wobbuffet transformed into the Dark type!"); } } } @@ -72,7 +72,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers status moves (Gen 5+)") TURN { MOVE(player, MOVE_CONVERSION_2); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Curse!"); + MESSAGE("The opposing Wobbuffet used Curse!"); // turn 2 ONE_OF { MESSAGE("Wobbuffet transformed into the Normal type!"); @@ -91,7 +91,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers the type of moves calle TURN { MOVE(player, MOVE_CONVERSION_2); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Mirror Move!"); + MESSAGE("The opposing Wobbuffet used Mirror Move!"); // turn 2 ONE_OF { MESSAGE("Wobbuffet transformed into the Normal type!"); @@ -110,7 +110,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers dynamic type moves") TURN { MOVE(player, MOVE_CONVERSION_2); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Weather Ball!"); + MESSAGE("The opposing Wobbuffet used Weather Ball!"); // turn 2 ONE_OF { MESSAGE("Wobbuffet transformed into the Steel type!"); @@ -133,7 +133,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers move types changed by N } SCENE { // turn 1 MESSAGE("Wobbuffet used Electrify!"); - MESSAGE("Foe Wobbuffet used Pound!"); + MESSAGE("The opposing Wobbuffet used Pound!"); // turn 2 ONE_OF { MESSAGE("Wobbuffet transformed into the Ground type!"); @@ -144,9 +144,9 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers move types changed by N // turn 3 MESSAGE("Wobbuffet used Water Gun!"); ONE_OF { - MESSAGE("Foe Wobbuffet transformed into the Steel type!"); - MESSAGE("Foe Wobbuffet transformed into the Rock type!"); - MESSAGE("Foe Wobbuffet transformed into the Ghost type!"); + MESSAGE("The opposing Wobbuffet transformed into the Steel type!"); + MESSAGE("The opposing Wobbuffet transformed into the Rock type!"); + MESSAGE("The opposing Wobbuffet transformed into the Ghost type!"); } } } @@ -161,7 +161,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change fails targeting Struggle (Gen 5+) TURN { MOVE(player, MOVE_CONVERSION_2); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Struggle!"); + MESSAGE("The opposing Wobbuffet used Struggle!"); // turn 2 MESSAGE("Wobbuffet used Conversion 2!"); MESSAGE("But it failed!"); @@ -179,9 +179,9 @@ SINGLE_BATTLE_TEST("Conversion 2 fails if the move used is of typeless damage (G TURN { MOVE(player, MOVE_CONVERSION_2); } } SCENE { // turn 1 - MESSAGE("Foe Entei used Burn Up!"); + MESSAGE("The opposing Entei used Burn Up!"); // turn 2 - MESSAGE("Foe Entei used Revelation Dance!"); + MESSAGE("The opposing Entei used Revelation Dance!"); // turn 3 MESSAGE("Wobbuffet used Conversion 2!"); MESSAGE("But it failed!"); @@ -201,7 +201,7 @@ SINGLE_BATTLE_TEST("Conversion 2 fails if the targeted move is Stellar Type") MESSAGE("Wobbuffet used Tera Blast!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player); // turn 1 - MESSAGE("Foe Wobbuffet used Conversion 2!"); + MESSAGE("The opposing Wobbuffet used Conversion 2!"); MESSAGE("But it failed!"); } } diff --git a/test/battle/move_effect/corrosive_gas.c b/test/battle/move_effect/corrosive_gas.c index f6a9c738e4..cc4110a7e3 100644 --- a/test/battle/move_effect/corrosive_gas.c +++ b/test/battle/move_effect/corrosive_gas.c @@ -22,10 +22,10 @@ SINGLE_BATTLE_TEST("Corrosive Gas destroys the target's item or fails if the tar MESSAGE("Wobbuffet used Corrosive Gas!"); if (item == ITEM_POTION) { ANIMATION(ANIM_TYPE_MOVE, MOVE_CORROSIVE_GAS, player); - MESSAGE("Wobbuffet corroded Foe Wobbuffet's Potion!"); + MESSAGE("Wobbuffet corroded the opposing Wobbuffet's Potion!"); } else { - MESSAGE("It had no effect on Foe Wobbuffet!"); + MESSAGE("It won't have any effect on the opposing Wobbuffet!"); } } THEN { EXPECT_EQ(opponent->item, ITEM_NONE); @@ -42,9 +42,9 @@ SINGLE_BATTLE_TEST("Corrosive Gas doesn't destroy the item of a Pokemon with the } SCENE { MESSAGE("Wobbuffet used Corrosive Gas!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CORROSIVE_GAS, player); - NOT MESSAGE("Wobbuffet corroded Foe Wobbuffet's Potion!"); + NOT MESSAGE("Wobbuffet corroded the opposing Wobbuffet's Potion!"); ABILITY_POPUP(opponent, ABILITY_STICKY_HOLD); - MESSAGE("Foe Muk's Sticky Hold made Corrosive Gas ineffective!"); + MESSAGE("The opposing Muk's Sticky Hold made Corrosive Gas ineffective!"); } THEN { EXPECT_EQ(opponent->item, ITEM_POISON_BARB); } @@ -61,8 +61,8 @@ SINGLE_BATTLE_TEST("Items lost to Corrosive Gas cannot be restored by Recycle") } SCENE { MESSAGE("Wobbuffet used Corrosive Gas!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CORROSIVE_GAS, player); - MESSAGE("Wobbuffet corroded Foe Wobbuffet's Oran Berry!"); - MESSAGE("Foe Wobbuffet used Recycle!"); + MESSAGE("Wobbuffet corroded the opposing Wobbuffet's Oran Berry!"); + MESSAGE("The opposing Wobbuffet used Recycle!"); MESSAGE("But it failed!"); } THEN { EXPECT_EQ(opponent->item, ITEM_NONE); @@ -97,17 +97,17 @@ DOUBLE_BATTLE_TEST("Corrosive Gas destroys foes and ally's items if they have on if (itemPlayerLeft == ITEM_CHERI_BERRY) { MESSAGE("Wynaut corroded Wobbuffet's Cheri Berry!"); } else { - MESSAGE("It had no effect on Wobbuffet!"); + MESSAGE("It won't have any effect on Wobbuffet!"); } if (itemOpponentLeft == ITEM_ORAN_BERRY) { - MESSAGE("Wynaut corroded Foe Abra's Oran Berry!"); + MESSAGE("Wynaut corroded the opposing Abra's Oran Berry!"); } else { - MESSAGE("It had no effect on Foe Abra!"); + MESSAGE("It won't have any effect on the opposing Abra!"); } if (itemOpponentRight == ITEM_CHESTO_BERRY) { - MESSAGE("Wynaut corroded Foe Kadabra's Chesto Berry!"); + MESSAGE("Wynaut corroded the opposing Kadabra's Chesto Berry!"); } else { - MESSAGE("It had no effect on Foe Kadabra!"); + MESSAGE("It won't have any effect on the opposing Kadabra!"); } } THEN { diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index b9be19db7f..f3775d0af6 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -21,24 +21,24 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the opponent") TURN { MOVE(playerLeft, MOVE_COURT_CHANGE); } TURN { SWITCH(playerLeft, 2); SWITCH(opponentLeft, 2); } } SCENE { - MESSAGE("Foe Wobbuffet used Sticky Web!"); - MESSAGE("Foe Wobbuffet used Stealth Rock!"); - MESSAGE("Foe Wobbuffet used Spikes!"); - MESSAGE("Foe Wobbuffet used Toxic Spikes!"); + MESSAGE("The opposing Wobbuffet used Sticky Web!"); + MESSAGE("The opposing Wobbuffet used Stealth Rock!"); + MESSAGE("The opposing Wobbuffet used Spikes!"); + MESSAGE("The opposing Wobbuffet used Toxic Spikes!"); MESSAGE("Wynaut used Court Change!"); - MESSAGE("Wynaut swapped the battle effects affecting each side!"); + MESSAGE("Wynaut swapped the battle effects affecting each side of the field!"); SEND_IN_MESSAGE("Wynaut"); NONE_OF { - MESSAGE("Wynaut is hurt by spikes!"); + MESSAGE("Wynaut was hurt by the spikes!"); MESSAGE("Pointed stones dug into Wynaut!"); MESSAGE("Wynaut was poisoned!"); - MESSAGE("Wynaut was caught in a Sticky Web!"); + MESSAGE("Wynaut was caught in a sticky web!"); } MESSAGE("2 sent out Wobbuffet!"); - MESSAGE("Foe Wobbuffet is hurt by spikes!"); - MESSAGE("Pointed stones dug into Foe Wobbuffet!"); - MESSAGE("Foe Wobbuffet was poisoned!"); - MESSAGE("Foe Wobbuffet was caught in a Sticky Web!"); + MESSAGE("The opposing Wobbuffet was hurt by the spikes!"); + MESSAGE("Pointed stones dug into the opposing Wobbuffet!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was caught in a sticky web!"); } } @@ -61,19 +61,19 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") MESSAGE("Wobbuffet used Stealth Rock!"); MESSAGE("Wobbuffet used Spikes!"); MESSAGE("Wobbuffet used Toxic Spikes!"); - MESSAGE("Foe Wynaut used Court Change!"); - MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); + MESSAGE("The opposing Wynaut used Court Change!"); + MESSAGE("The opposing Wynaut swapped the battle effects affecting each side of the field!"); SEND_IN_MESSAGE("Wobbuffet"); - MESSAGE("Wobbuffet is hurt by spikes!"); + MESSAGE("Wobbuffet was hurt by the spikes!"); MESSAGE("Pointed stones dug into Wobbuffet!"); MESSAGE("Wobbuffet was poisoned!"); - MESSAGE("Wobbuffet was caught in a Sticky Web!"); + MESSAGE("Wobbuffet was caught in a sticky web!"); MESSAGE("2 sent out Wynaut!"); NONE_OF { - MESSAGE("Foe Wynaut is hurt by spikes!"); - MESSAGE("Pointed stones dug into Foe Wynaut!"); - MESSAGE("Foe Wynaut was poisoned!"); - MESSAGE("Foe Wynaut was caught in a Sticky Web!"); + MESSAGE("The opposing Wynaut was hurt by the spikes!"); + MESSAGE("Pointed stones dug into the opposing Wynaut!"); + MESSAGE("The opposing Wynaut was poisoned!"); + MESSAGE("The opposing Wynaut was caught in a sticky web!"); } } } @@ -98,21 +98,21 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Auror TURN { } } SCENE { MESSAGE("Wynaut used Snowscape!"); - MESSAGE("Foe Wobbuffet used Mist!"); - MESSAGE("Foe Wobbuffet used Safeguard!"); - MESSAGE("Foe Wobbuffet used Aurora Veil!"); - MESSAGE("Foe Wobbuffet used Reflect!"); - MESSAGE("Foe Wobbuffet used Light Screen!"); - MESSAGE("Foe Wobbuffet used Tailwind!"); + MESSAGE("The opposing Wobbuffet used Mist!"); + MESSAGE("The opposing Wobbuffet used Safeguard!"); + MESSAGE("The opposing Wobbuffet used Aurora Veil!"); + MESSAGE("The opposing Wobbuffet used Reflect!"); + MESSAGE("The opposing Wobbuffet used Light Screen!"); + MESSAGE("The opposing Wobbuffet used Tailwind!"); MESSAGE("Wynaut used Court Change!"); - MESSAGE("Wynaut swapped the battle effects affecting each side!"); - // The effects now end for the player side. - MESSAGE("Ally's Mist wore off!"); - MESSAGE("Ally's party is no longer protected by Safeguard!"); - MESSAGE("Ally's Reflect wore off!"); - MESSAGE("Ally's Aurora Veil wore off!"); - MESSAGE("Your team's tailwind petered out!"); - MESSAGE("Ally's Light Screen wore off!"); + MESSAGE("Wynaut swapped the battle effects affecting each side of the field!"); + // The effects now end for the player side. + MESSAGE("Your team's Mist wore off!"); + MESSAGE("Your team is no longer protected by Safeguard!"); + MESSAGE("Your team's Reflect wore off!"); + MESSAGE("Your team's Aurora Veil wore off!"); + MESSAGE("Your team's Tailwind petered out!"); + MESSAGE("Your team's Light Screen wore off!"); } } @@ -141,15 +141,15 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Aur MESSAGE("Wobbuffet used Reflect!"); MESSAGE("Wobbuffet used Light Screen!"); MESSAGE("Wobbuffet used Tailwind!"); - MESSAGE("Foe Wynaut used Court Change!"); - MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); + MESSAGE("The opposing Wynaut used Court Change!"); + MESSAGE("The opposing Wynaut swapped the battle effects affecting each side of the field!"); // The effects now end for the player side. - MESSAGE("Foe's Mist wore off!"); - MESSAGE("Foe's party is no longer protected by Safeguard!"); - MESSAGE("Foe's Reflect wore off!"); - MESSAGE("Foe's Aurora Veil wore off!"); - MESSAGE("The opposing team's tailwind petered out!"); - MESSAGE("Foe's Light Screen wore off!"); + MESSAGE("The opposing team's Mist wore off!"); + MESSAGE("The opposing team is no longer protected by Safeguard!"); + MESSAGE("The opposing team's Reflect wore off!"); + MESSAGE("The opposing team's Aurora Veil wore off!"); + MESSAGE("The opposing team's Tailwind petered out!"); + MESSAGE("The opposing team's Light Screen wore off!"); } } diff --git a/test/battle/move_effect/defense_down.c b/test/battle/move_effect/defense_down.c index 8eb288a805..0552a9c67e 100644 --- a/test/battle/move_effect/defense_down.c +++ b/test/battle/move_effect/defense_down.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Tail Whip lowers Defense", s16 damage) if (lowerDefense) { ANIMATION(ANIM_TYPE_MOVE, MOVE_TAIL_WHIP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &results[i].damage); diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index ab6d647a97..d5838d7ffd 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -29,7 +29,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); } } @@ -41,12 +41,12 @@ SINGLE_BATTLE_TEST("Defog does not lower evasiveness if target behind Substitute } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_DEFOG); } } SCENE { - MESSAGE("Foe Wobbuffet used Substitute!"); + MESSAGE("The opposing Wobbuffet used Substitute!"); MESSAGE("But it failed!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); } } } @@ -72,9 +72,9 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Reflect and Light ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); - MESSAGE("Foe's Reflect wore off!"); - MESSAGE("Foe's Light Screen wore off!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing team's Reflect wore off!"); + MESSAGE("The opposing team's Light Screen wore off!"); } MESSAGE("Wobbuffet used Tackle!"); HP_BAR(opponentLeft, captureDamage: &results[i].damagePhysical); @@ -105,10 +105,10 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_SAFEGUARD, opponentRight); if (move == MOVE_DEFOG) { - MESSAGE("Foe Wobbuffet is protected by MIST!"); + MESSAGE("The opposing Wobbuffet is protected by the mist!"); ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); - MESSAGE("Foe's Mist wore off!"); - MESSAGE("Foe's Safeguard wore off!"); + MESSAGE("The opposing team's Mist wore off!"); + MESSAGE("The opposing team's Safeguard wore off!"); } MESSAGE("Wobbuffet used Screech!"); if (move == MOVE_DEFOG) { @@ -116,7 +116,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } else { - MESSAGE("Foe Wobbuffet is protected by MIST!"); + MESSAGE("The opposing Wobbuffet is protected by the mist!"); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } MESSAGE("Wobbuffet used Toxic!"); @@ -125,7 +125,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard STATUS_ICON(opponentRight, badPoison: TRUE); } else { - MESSAGE("Foe Wobbuffet's party is protected by Safeguard!"); + MESSAGE("The opposing Wobbuffet is protected by Safeguard!"); NOT STATUS_ICON(opponentRight, badPoison: TRUE); } } @@ -153,7 +153,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); if (B_DEFOG_EFFECT_CLEARING >= GEN_6) { MESSAGE("The pointed stones disappeared from around your team!"); MESSAGE("The sticky web has disappeared from the ground around your team!"); @@ -165,7 +165,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { HP_BAR(playerLeft); MESSAGE("Pointed stones dug into Wobbuffet!"); - MESSAGE("Wobbuffet was caught in a Sticky Web!"); + MESSAGE("Wobbuffet was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Wobbuffet's Speed fell!"); } @@ -173,7 +173,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S NONE_OF { HP_BAR(playerLeft); MESSAGE("Pointed stones dug into Wobbuffet!"); - MESSAGE("Wobbuffet was caught in a Sticky Web!"); + MESSAGE("Wobbuffet was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Wobbuffet's Speed fell!"); } @@ -199,7 +199,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player ANIMATION(ANIM_TYPE_MOVE, move, player); if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); if (B_DEFOG_EFFECT_CLEARING >= GEN_6) MESSAGE("The spikes disappeared from the ground around your team!"); } @@ -208,12 +208,12 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player SEND_IN_MESSAGE("Wobbuffet"); if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { HP_BAR(player); - MESSAGE("Wobbuffet is hurt by spikes!"); + MESSAGE("Wobbuffet was hurt by the spikes!"); } else { NONE_OF { HP_BAR(player); - MESSAGE("Wobbuffet is hurt by spikes!"); + MESSAGE("Wobbuffet was hurt by the spikes!"); } } } @@ -239,7 +239,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain (Gen 8+)") MESSAGE("Wobbuffet's evasiveness fell!"); if (B_DEFOG_EFFECT_CLEARING >= GEN_8) { if (move == MOVE_PSYCHIC_TERRAIN) { - MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The weirdness disappeared from the battlefield!"); } else if (move == MOVE_ELECTRIC_TERRAIN) { MESSAGE("The electricity disappeared from the battlefield."); @@ -253,7 +253,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain (Gen 8+)") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG, player); } else { NONE_OF { - MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The weirdness disappeared from the battlefield!"); MESSAGE("The electricity disappeared from the battlefield."); MESSAGE("The mist disappeared from the battlefield."); MESSAGE("The grass disappeared from the battlefield."); @@ -288,13 +288,13 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Toxic Spikes from // Switch happens MESSAGE("2 sent out Wobbuffet!"); if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); } else { NONE_OF { - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); } @@ -326,11 +326,11 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Aurora Veil from p if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Glalie's evasiveness fell!"); - MESSAGE("Ally's Aurora Veil wore off!"); + MESSAGE("Your team's Aurora Veil wore off!"); } - MESSAGE("Foe Glalie used Tackle!"); + MESSAGE("The opposing Glalie used Tackle!"); HP_BAR(playerLeft, captureDamage: &results[i].damagePhysical); - MESSAGE("Foe Glalie used Gust!"); + MESSAGE("The opposing Glalie used Gust!"); HP_BAR(playerRight, captureDamage: &results[i].damageSpecial); } FINALLY { EXPECT_MUL_EQ(results[1].damagePhysical, Q_4_12(1.5), results[0].damagePhysical); @@ -359,15 +359,15 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can" TURN { MOVE(playerLeft, MOVE_REFLECT); MOVE(playerRight, MOVE_LIGHT_SCREEN); MOVE(opponentLeft, MOVE_REFLECT); MOVE(opponentRight, MOVE_SAFEGUARD); } TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_DEFOG, target: playerLeft); } } SCENE { - MESSAGE("Foe Glalie used Defog!"); - MESSAGE("Glalie is protected by MIST!"); + MESSAGE("The opposing Glalie used Defog!"); + MESSAGE("Glalie is protected by the mist!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); // Player side - MESSAGE("Ally's Reflect wore off!"); - MESSAGE("Ally's Light Screen wore off!"); - MESSAGE("Ally's Mist wore off!"); - MESSAGE("Ally's Aurora Veil wore off!"); - MESSAGE("Ally's Safeguard wore off!"); + MESSAGE("Your team's Reflect wore off!"); + MESSAGE("Your team's Light Screen wore off!"); + MESSAGE("Your team's Mist wore off!"); + MESSAGE("Your team's Aurora Veil wore off!"); + MESSAGE("Your team's Safeguard wore off!"); if (B_DEFOG_EFFECT_CLEARING >= GEN_6) { MESSAGE("The spikes disappeared from the ground around your team!"); @@ -397,7 +397,7 @@ SINGLE_BATTLE_TEST("Defog is used on the correct side if opposing mon is behind ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); MESSAGE("Wobbuffet used Defog!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); - MESSAGE("Foe's Light Screen wore off!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing team's Light Screen wore off!"); } } diff --git a/test/battle/move_effect/destiny_bond.c b/test/battle/move_effect/destiny_bond.c index baba378f6b..ba49e0ec43 100644 --- a/test/battle/move_effect/destiny_bond.c +++ b/test/battle/move_effect/destiny_bond.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Destiny Bond faints the opposing mon if it fainted from the } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DESTINY_BOND, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - MESSAGE("Wobbuffet took Foe Wobbuffet with it!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("Wobbuffet took its attacker down with it!"); + MESSAGE("The opposing Wobbuffet fainted!"); } } diff --git a/test/battle/move_effect/doodle.c b/test/battle/move_effect/doodle.c index ba7729a895..a43a149dc8 100644 --- a/test/battle/move_effect/doodle.c +++ b/test/battle/move_effect/doodle.c @@ -17,8 +17,8 @@ DOUBLE_BATTLE_TEST("Doodle gives the target's ability to user and ally") TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); - MESSAGE("Wynaut copied Foe Torchic's Blaze!"); - MESSAGE("Wynaut copied Foe Torchic's Blaze!"); + MESSAGE("Wynaut copied the opposing Torchic's Ability!"); + MESSAGE("Wynaut copied the opposing Torchic's Ability!"); } THEN { EXPECT(playerLeft->ability == ABILITY_BLAZE); EXPECT(playerRight->ability == ABILITY_BLAZE); @@ -37,8 +37,8 @@ DOUBLE_BATTLE_TEST("Doodle can't copy a banned ability") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); - MESSAGE("Wynaut copied Foe Great Tusk's Protosynthesis!"); - MESSAGE("Wynaut copied Foe Great Tusk's Protosynthesis!"); + MESSAGE("Wynaut copied the opposing Great Tusk's Ability!"); + MESSAGE("Wynaut copied the opposing Great Tusk's Ability!"); } } THEN { EXPECT(playerLeft->ability != ABILITY_PROTOSYNTHESIS); diff --git a/test/battle/move_effect/dragon_darts.c b/test/battle/move_effect/dragon_darts.c index 08913d6011..dfe629896f 100644 --- a/test/battle/move_effect/dragon_darts.c +++ b/test/battle/move_effect/dragon_darts.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Dragon Darts strikes twice") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, player); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -35,7 +35,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes each opponent once in a double battle") HP_BAR(opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -54,7 +54,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes the ally twice if the target protects") HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -72,7 +72,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes the right ally twice if the target is a HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -90,7 +90,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes the left ally twice if the target is a HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -109,7 +109,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes left ally twice if electrified and righ HP_BAR(opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentLeft); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -128,7 +128,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes right ally twice if electrified and lef HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -147,7 +147,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes left ally twice if electrified and righ HP_BAR(opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentLeft); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -166,7 +166,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes right ally twice if electrified and lef HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -187,7 +187,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes the ally twice if the target is in a se HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -206,7 +206,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts is not effected by Wide Guard") HP_BAR(opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -225,7 +225,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes hit the ally if the target fainted") HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -243,7 +243,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes left ally twice if one strike misses") HP_BAR(opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentLeft); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -261,6 +261,6 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes right ally twice if one strike misses") HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } diff --git a/test/battle/move_effect/dream_eater.c b/test/battle/move_effect/dream_eater.c index f0fd113d2b..7dfa6525d9 100644 --- a/test/battle/move_effect/dream_eater.c +++ b/test/battle/move_effect/dream_eater.c @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Dream Eater fails on awake targets") TURN { MOVE(player, MOVE_DREAM_EATER); } } SCENE { MESSAGE("Wobbuffet used Dream Eater!"); - MESSAGE("Foe Wobbuffet wasn't affected!"); + MESSAGE("The opposing Wobbuffet wasn't affected!"); } } diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c index 11e4069d80..81939a6d56 100644 --- a/test/battle/move_effect/embargo.c +++ b/test/battle/move_effect/embargo.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Embargo blocks the effect of an affected Pokémon's held ite } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Fissure!"); HP_BAR(opponent, hp: 0); @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Embargo blocks an affected Pokémon's trainer from using ite TURN { USE_ITEM(opponent, ITEM_POTION, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); } THEN { EXPECT_EQ(opponent->hp, 1); } @@ -59,10 +59,10 @@ WILD_BATTLE_TEST("Embargo doesn't block held item effects that affect experience } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_SCRATCH); } } SCENE { - MESSAGE("Wild Caterpie used Embargo!"); + MESSAGE("The wild Caterpie used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); MESSAGE("Wobbuffet used Scratch!"); - MESSAGE("Wild Caterpie fainted!"); + MESSAGE("The wild Caterpie fainted!"); EXPERIENCE_BAR(player, captureGainedExp: &results[i].exp); } FINALLY { EXPECT_MUL_EQ(results[1].exp, Q_4_12(1.5), results[0].exp); @@ -84,11 +84,11 @@ WILD_BATTLE_TEST("Embargo doesn't block held item effects that affect effort val TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_SCRATCH); } } SCENE { // Turn 1 - MESSAGE("Wild Caterpie used Embargo!"); + MESSAGE("The wild Caterpie used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Scratch!"); - MESSAGE("Wild Caterpie fainted!"); + MESSAGE("The wild Caterpie fainted!"); } THEN { finalHPEVAmount = (GetMonData(&PLAYER_PARTY[0], MON_DATA_HP_EV) + gItemsInfo[ITEM_POWER_WEIGHT].holdEffectParam + gSpeciesInfo[SPECIES_CATERPIE].evYield_HP); EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_HP_EV), finalHPEVAmount); @@ -107,9 +107,9 @@ SINGLE_BATTLE_TEST("Embargo negates a held item's Speed reduction") } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 - MESSAGE("Foe Wobbuffet used Scratch!"); + MESSAGE("The opposing Wobbuffet used Scratch!"); MESSAGE("Wobbuffet used Scratch!"); } } @@ -172,7 +172,7 @@ SINGLE_BATTLE_TEST("Embargo makes Fling and Natural Gift fail") TURN { MOVE(player, moveId); } } SCENE { // Turn 1 - MESSAGE("Foe Wobbuffet used Embargo!"); + MESSAGE("The opposing Wobbuffet used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); // Turn 2 if (moveId == MOVE_FLING) @@ -194,12 +194,12 @@ SINGLE_BATTLE_TEST("Embargo doesn't stop an item flung at an affected target fro } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Fling!"); MESSAGE("Wobbuffet flung its Light Ball!"); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); } } @@ -215,7 +215,7 @@ SINGLE_BATTLE_TEST("Baton Pass passes Embargo's effect") TURN { MOVE(player, MOVE_FLING); } } SCENE { // Turn 1 - MESSAGE("Foe Wobbuffet used Embargo!"); + MESSAGE("The opposing Wobbuffet used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Baton Pass!"); @@ -239,12 +239,12 @@ SINGLE_BATTLE_TEST("Embargo doesn't block the effects of berries obtained throug TURN { MOVE(player, MOVE_PLUCK); } } SCENE { // Turn 1 - MESSAGE("Foe Wobbuffet used Embargo!"); + MESSAGE("The opposing Wobbuffet used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Pluck!"); HP_BAR(opponent); - MESSAGE("Wobbuffet stole and ate Foe Wobbuffet's Oran Berry!"); + MESSAGE("Wobbuffet stole and ate its target's Oran Berry!"); HP_BAR(player, damage: -hp); } } @@ -261,7 +261,7 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Plate items on the move J } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_JUDGMENT); } } SCENE { - MESSAGE("Foe Dragonite used Embargo!"); + MESSAGE("The opposing Dragonite used Embargo!"); MESSAGE("Arceus can't use items anymore!"); MESSAGE("Arceus used Judgment!"); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -282,7 +282,7 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Drive items on the move T } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_TECHNO_BLAST); } } SCENE { - MESSAGE("Foe Gyarados used Embargo!"); + MESSAGE("The opposing Gyarados used Embargo!"); MESSAGE("Genesect can't use items anymore!"); MESSAGE("Genesect used Techno Blast!"); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -303,7 +303,7 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Memory items on the move } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_MULTI_ATTACK); } } SCENE { - MESSAGE("Foe Venusaur used Embargo!"); + MESSAGE("The opposing Venusaur used Embargo!"); MESSAGE("Silvally can't use items anymore!"); MESSAGE("Silvally used Multi-Attack!"); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -323,12 +323,12 @@ SINGLE_BATTLE_TEST("Embargo can be reflected by Magic Coat") } SCENE { // Turn 1 MESSAGE("Wobbuffet used Magic Coat!"); - MESSAGE("Wobbuffet shrouded itself in Magic Coat!"); - MESSAGE("Foe Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet's Embargo was bounced back by MAGIC COAT!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("Wobbuffet shrouded itself with Magic Coat!"); + MESSAGE("The opposing Wobbuffet used Embargo!"); + MESSAGE("Wobbuffet bounced the Embargo back!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 - MESSAGE("Foe Wobbuffet used Fling!"); + MESSAGE("The opposing Wobbuffet used Fling!"); MESSAGE("But it failed!"); } } @@ -346,15 +346,15 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Mega Evolution") } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 - MESSAGE("Foe Wobbuffet used Baton Pass!"); + MESSAGE("The opposing Wobbuffet used Baton Pass!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); MESSAGE("2 sent out Charizard!"); // Turn 3 - MESSAGE("Foe Charizard's Charizardite Y is reacting to 2's Mega Ring!"); + MESSAGE("The opposing Charizard's Charizardite Y is reacting to 2's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); - MESSAGE("Foe Charizard has Mega Evolved into Mega Charizard!"); + MESSAGE("The opposing Charizard has Mega Evolved into Mega Charizard!"); } } @@ -371,16 +371,16 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Primal Reversion") } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 - MESSAGE("Foe Wobbuffet used Baton Pass!"); + MESSAGE("The opposing Wobbuffet used Baton Pass!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); MESSAGE("2 sent out Groudon!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponent); - MESSAGE("Foe Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Groudon's Primal Reversion! It reverted to its primal state!"); ABILITY_POPUP(opponent); // Turn 3 - MESSAGE("Foe Groudon used Fling!"); + MESSAGE("The opposing Groudon used Fling!"); MESSAGE("But it failed!"); } } diff --git a/test/battle/move_effect/encore.c b/test/battle/move_effect/encore.c index db7f5eb042..ec68297ca0 100644 --- a/test/battle/move_effect/encore.c +++ b/test/battle/move_effect/encore.c @@ -102,7 +102,7 @@ SINGLE_BATTLE_TEST("Encore has no effect if no previous move") } WHEN { TURN { MOVE(opponent, MOVE_ENCORE); MOVE(player, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet used Encore!"); + MESSAGE("The opposing Wobbuffet used Encore!"); MESSAGE("But it failed!"); } } diff --git a/test/battle/move_effect/explosion.c b/test/battle/move_effect/explosion.c index a0825aac62..d463e10349 100644 --- a/test/battle/move_effect/explosion.c +++ b/test/battle/move_effect/explosion.c @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Explosion causes the user & the target to faint") HP_BAR(player, hp: 0); ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); HP_BAR(opponent, hp: 0); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); MESSAGE("Wobbuffet fainted!"); } } @@ -62,7 +62,7 @@ SINGLE_BATTLE_TEST("Explosion causes the user to faint even if it has no effect" TURN { MOVE(player, MOVE_EXPLOSION); } } SCENE { HP_BAR(player, hp: 0); - MESSAGE("It doesn't affect Foe Gastly…"); + MESSAGE("It doesn't affect the opposing Gastly…"); NOT HP_BAR(opponent); MESSAGE("Wobbuffet fainted!"); } @@ -82,11 +82,11 @@ DOUBLE_BATTLE_TEST("Explosion causes everyone to faint in a double battle") HP_BAR(playerLeft, hp: 0); ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); HP_BAR(opponentLeft, hp: 0); - MESSAGE("Foe Abra fainted!"); + MESSAGE("The opposing Abra fainted!"); HP_BAR(playerRight, hp: 0); MESSAGE("Wynaut fainted!"); HP_BAR(opponentRight, hp: 0); - MESSAGE("Foe Kadabra fainted!"); + MESSAGE("The opposing Kadabra fainted!"); MESSAGE("Wobbuffet fainted!"); } } @@ -104,7 +104,7 @@ SINGLE_BATTLE_TEST("Explosion is blocked by Ability Damp") HP_BAR(player, hp: 0); } ABILITY_POPUP(opponent, ABILITY_DAMP); - MESSAGE("Foe Golduck's Damp prevents Wobbuffet from using Explosion!"); + MESSAGE("The opposing Golduck's Damp prevents Wobbuffet from using Explosion!"); } } @@ -141,7 +141,7 @@ DOUBLE_BATTLE_TEST("Explosion boosted by Galvanize is correctly blocked by Volt HP_BAR(playerRight, hp: 0); MESSAGE("Wynaut fainted!"); HP_BAR(opponentRight, hp: 0); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); MESSAGE("Geodude fainted!"); } } diff --git a/test/battle/move_effect/fail_if_not_arg_type.c b/test/battle/move_effect/fail_if_not_arg_type.c index 4ffe0a0323..9e8d005d8b 100644 --- a/test/battle/move_effect/fail_if_not_arg_type.c +++ b/test/battle/move_effect/fail_if_not_arg_type.c @@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type") TURN { MOVE(player, MOVE_DOUBLE_SHOCK); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player); - MESSAGE("Pikachu used up all of its electricity!"); + MESSAGE("Pikachu used up all its electricity!"); MESSAGE("Pikachu used Double Shock!"); MESSAGE("But it failed!"); } @@ -107,6 +107,6 @@ SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type if enemy faints") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player); HP_BAR(opponent, hp: 0); - MESSAGE("Pikachu used up all of its electricity!"); + MESSAGE("Pikachu used up all its electricity!"); } } diff --git a/test/battle/move_effect/flame_burst.c b/test/battle/move_effect/flame_burst.c index d222325a7b..3597c80014 100644 --- a/test/battle/move_effect/flame_burst.c +++ b/test/battle/move_effect/flame_burst.c @@ -18,7 +18,7 @@ DOUBLE_BATTLE_TEST("Flame Burst Substitute") } WHEN { TURN { MOVE(opponentLeft, MOVE_SUBSTITUTE); MOVE(playerRight, MOVE_FLAME_BURST, target: opponentRight); } } SCENE { - MESSAGE("The bursting flames hit Foe Wynaut!"); - NOT MESSAGE("The SUBSTITUTE took damage for Foe Wynaut!"); + MESSAGE("The bursting flames hit the opposing Wynaut!"); + NOT MESSAGE("The substitute took damage for the opposing Wynaut!"); } } diff --git a/test/battle/move_effect/fling.c b/test/battle/move_effect/fling.c index b4b25484b3..2bd1e824f1 100644 --- a/test/battle/move_effect/fling.c +++ b/test/battle/move_effect/fling.c @@ -114,10 +114,10 @@ SINGLE_BATTLE_TEST("Fling - Item is lost even when there is no target") TURN { MOVE(opponent, MOVE_SELF_DESTRUCT); MOVE(player, MOVE_FLING); SEND_OUT(opponent, 1); } TURN { MOVE(player, MOVE_FLING); } } SCENE { - MESSAGE("Foe Wobbuffet used Self-Destruct!"); + MESSAGE("The opposing Wobbuffet used Self-Destruct!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SELF_DESTRUCT, opponent); HP_BAR(player); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); MESSAGE("Wobbuffet used Fling!"); MESSAGE("But it failed!"); @@ -138,10 +138,10 @@ SINGLE_BATTLE_TEST("Fling - Item is lost when target protects itself") TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_FLING);} TURN { MOVE(player, MOVE_FLING); } } SCENE { - MESSAGE("Foe Wobbuffet used Protect!"); + MESSAGE("The opposing Wobbuffet used Protect!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); MESSAGE("Wobbuffet used Fling!"); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); MESSAGE("Wobbuffet used Fling!"); MESSAGE("But it failed!"); @@ -179,10 +179,10 @@ SINGLE_BATTLE_TEST("Fling doesn't consume the item if pokemon is asleep/frozen/p } SCENE { if (status == STATUS1_FREEZE) { MESSAGE("Wobbuffet is frozen solid!"); - MESSAGE("Wobbuffet was defrosted!"); + MESSAGE("Wobbuffet thawed out!"); } else if (status == STATUS1_PARALYSIS) { - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); } else { MESSAGE("Wobbuffet is fast asleep."); @@ -225,32 +225,32 @@ SINGLE_BATTLE_TEST("Fling applies special effects when throwing specific Items") { case ITEM_FLAME_ORB: { - MESSAGE("Foe Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was burned!"); STATUS_ICON(opponent, STATUS1_BURN); } break; case ITEM_LIGHT_BALL: { - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); STATUS_ICON(opponent, STATUS1_PARALYSIS); } break; case ITEM_POISON_BARB: { - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); STATUS_ICON(opponent, STATUS1_POISON); } break; case ITEM_TOXIC_ORB: { - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet was badly poisoned!"); STATUS_ICON(opponent, STATUS1_TOXIC_POISON); } break; case ITEM_RAZOR_FANG: case ITEM_KINGS_ROCK: { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } break; } @@ -282,52 +282,52 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") case ITEM_FLAME_ORB: { NONE_OF { - MESSAGE("Foe Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was burned!"); STATUS_ICON(opponent, STATUS1_BURN); } - MESSAGE("The Flame Orb was used up..."); + MESSAGE("The Flame Orb was used up…"); } break; case ITEM_LIGHT_BALL: { NONE_OF { - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); STATUS_ICON(opponent, STATUS1_PARALYSIS); } - MESSAGE("The Light Ball was used up..."); + MESSAGE("The Light Ball was used up…"); } break; case ITEM_POISON_BARB: { NONE_OF { - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); STATUS_ICON(opponent, STATUS1_POISON); } - MESSAGE("The Poison Barb was used up..."); + MESSAGE("The Poison Barb was used up…"); } break; case ITEM_TOXIC_ORB: { NONE_OF { - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet was badly poisoned!"); STATUS_ICON(opponent, STATUS1_TOXIC_POISON); } - MESSAGE("The Toxic Orb was used up..."); + MESSAGE("The Toxic Orb was used up…"); } break; case ITEM_RAZOR_FANG: case ITEM_KINGS_ROCK: { NONE_OF { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } switch (item) { case ITEM_RAZOR_FANG: - MESSAGE("The Razor Fang was used up..."); + MESSAGE("The Razor Fang was used up…"); break; case ITEM_KINGS_ROCK: - MESSAGE("The King's Rock was used up..."); + MESSAGE("The King's Rock was used up…"); break; } } @@ -373,53 +373,53 @@ SINGLE_BATTLE_TEST("Fling - thrown berry's effect activates for the target even HP_BAR(opponent); if (effect == HOLD_EFFECT_RESTORE_HP) { if (item == ITEM_ORAN_BERRY) { - MESSAGE("Foe Wobbuffet's Oran Berry restored health!"); + MESSAGE("The opposing Wobbuffet restored its health using its Oran Berry!"); } else if (item == ITEM_SITRUS_BERRY) { - MESSAGE("Foe Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("The opposing Wobbuffet restored its health using its Sitrus Berry!"); } else { - MESSAGE("Wobbuffet's Enigma Berry restored health!"); + MESSAGE("Wobbuffet restored its health using its Enigma Berry!"); } HP_BAR(opponent); } else if (effect == HOLD_EFFECT_RESTORE_PP) { - MESSAGE("Foe Wobbuffet's Leppa Berry restored Celebrate's PP!"); + MESSAGE("The opposing Wobbuffet restored PP to its move Celebrate using its Leppa Berry!"); } else if (status1 != STATUS1_NONE) { if (status1 == STATUS1_BURN) { - MESSAGE("Foe Wobbuffet's Rawst Berry healed its burn!"); + MESSAGE("The opposing Wobbuffet's Rawst Berry cured its burn!"); } else if (status1 == STATUS1_SLEEP) { - MESSAGE("Foe Wobbuffet's Chesto Berry woke it from its sleep!"); + MESSAGE("The opposing Wobbuffet's Chesto Berry woke it up!"); } else if (status1 == STATUS1_FREEZE) { - MESSAGE("Foe Wobbuffet's Aspear Berry defrosted it!"); + MESSAGE("The opposing Wobbuffet's Aspear Berry defrosted it!"); } else if (status1 == STATUS1_FROSTBITE) { - MESSAGE("Foe Wobbuffet's Aspear Berry healed its frostbite!"); + MESSAGE("The opposing Wobbuffet's Aspear Berry cured its frostbite!"); } else if (status1 == STATUS1_PARALYSIS) { - MESSAGE("Foe Wobbuffet's Cheri Berry cured paralysis!"); + MESSAGE("The opposing Wobbuffet's Cheri Berry cured its paralysis!"); } else if (status1 == STATUS1_TOXIC_POISON || status1 == STATUS1_POISON) { - MESSAGE("Foe Wobbuffet's Pecha Berry cured poison!"); + MESSAGE("The opposing Wobbuffet's Pecha Berry cured its poison!"); } NOT STATUS_ICON(opponent, status1); } else if (statId != 0) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); if (statId == STAT_ATK) { - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } else if (statId == STAT_DEF) { if (item == ITEM_GANLON_BERRY) { - MESSAGE("Using Ganlon Berry, the Defense of Foe Wobbuffet rose!"); + MESSAGE("Using Ganlon Berry, the Defense of the opposing Wobbuffet rose!"); } else { - MESSAGE("Using Kee Berry, the Defense of Foe Wobbuffet rose!"); + MESSAGE("Using Kee Berry, the Defense of the opposing Wobbuffet rose!"); } } else if (statId == STAT_SPDEF) { if (item == ITEM_APICOT_BERRY) { - MESSAGE("Using Apicot Berry, the Sp. Def of Foe Wobbuffet rose!"); + MESSAGE("Using Apicot Berry, the Sp. Def of the opposing Wobbuffet rose!"); } else { - MESSAGE("Using Maranga Berry, the Sp. Def of Foe Wobbuffet rose!"); + MESSAGE("Using Maranga Berry, the Sp. Def of the opposing Wobbuffet rose!"); } } else if (statId == STAT_SPEED) { - MESSAGE("Using Salac Berry, the Speed of Foe Wobbuffet rose!"); + MESSAGE("Using Salac Berry, the Speed of the opposing Wobbuffet rose!"); } else if (statId == STAT_SPATK) { - MESSAGE("Using Petaya Berry, the Sp. Atk of Foe Wobbuffet rose!"); + MESSAGE("Using Petaya Berry, the Sp. Atk of the opposing Wobbuffet rose!"); } } } THEN { diff --git a/test/battle/move_effect/focus_punch.c b/test/battle/move_effect/focus_punch.c index 355c071a94..e8f36d4ff1 100644 --- a/test/battle/move_effect/focus_punch.c +++ b/test/battle/move_effect/focus_punch.c @@ -51,7 +51,7 @@ DOUBLE_BATTLE_TEST("Focus Punch activation is based on Speed") } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FOCUS_PUNCH_SETUP, opponentRight); - MESSAGE("Foe Wynaut is tightening its focus!"); + MESSAGE("The opposing Wynaut is tightening its focus!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FOCUS_PUNCH_SETUP, playerRight); MESSAGE("Wynaut is tightening its focus!"); @@ -60,9 +60,9 @@ DOUBLE_BATTLE_TEST("Focus Punch activation is based on Speed") MESSAGE("Wobbuffet is tightening its focus!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FOCUS_PUNCH_SETUP, opponentLeft); - MESSAGE("Foe Wobbuffet is tightening its focus!"); + MESSAGE("The opposing Wobbuffet is tightening its focus!"); - MESSAGE("Foe Wynaut used Focus Punch!"); + MESSAGE("The opposing Wynaut used Focus Punch!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_PUNCH, opponentRight); HP_BAR(playerLeft); @@ -71,7 +71,7 @@ DOUBLE_BATTLE_TEST("Focus Punch activation is based on Speed") HP_BAR(opponentLeft); MESSAGE("Wobbuffet lost its focus and couldn't move!"); - MESSAGE("Foe Wobbuffet lost its focus and couldn't move!"); + MESSAGE("The opposing Wobbuffet lost its focus and couldn't move!"); } } diff --git a/test/battle/move_effect/future_sight.c b/test/battle/move_effect/future_sight.c index 778895ba58..e25fc75012 100644 --- a/test/battle/move_effect/future_sight.c +++ b/test/battle/move_effect/future_sight.c @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Future Sight uses Sp. Atk stat of the original user without ANIMATION(ANIM_TYPE_MOVE, MOVE_SEED_FLARE, player); HP_BAR(opponent, captureDamage: &seedFlareDmg); ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); - MESSAGE("Foe Regice took the Future Sight attack!"); + MESSAGE("The opposing Regice took the Future Sight attack!"); HP_BAR(opponent, captureDamage: &futureSightDmg); } THEN { EXPECT_EQ(seedFlareDmg, futureSightDmg); @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Future Sight is not boosted by Life Orb is original user if ANIMATION(ANIM_TYPE_MOVE, MOVE_SEED_FLARE, player); HP_BAR(opponent, captureDamage: &seedFlareDmg); ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); - MESSAGE("Foe Regice took the Future Sight attack!"); + MESSAGE("The opposing Regice took the Future Sight attack!"); HP_BAR(opponent, captureDamage: &futureSightDmg); NOT MESSAGE("Raichu was hurt by its Life Orb!"); } THEN { @@ -107,8 +107,8 @@ SINGLE_BATTLE_TEST("Future Sight is affected by type effectiveness") ANIMATION(ANIM_TYPE_MOVE, MOVE_SEED_FLARE, player); HP_BAR(opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); - MESSAGE("Foe Houndoom took the Future Sight attack!"); - MESSAGE("It doesn't affect Foe Houndoom…"); + MESSAGE("The opposing Houndoom took the Future Sight attack!"); + MESSAGE("It doesn't affect the opposing Houndoom…"); NOT HP_BAR(opponent); } } @@ -129,9 +129,9 @@ SINGLE_BATTLE_TEST("Future Sight will miss timing if target faints before it is ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_MEMENTO, opponent); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); MESSAGE("2 sent out Wynaut!"); - NOT MESSAGE("Foe Wynaut took the Future Sight attack!"); + NOT MESSAGE("The opposing Wynaut took the Future Sight attack!"); } } @@ -150,9 +150,9 @@ SINGLE_BATTLE_TEST("Future Sight will miss timing if target faints by residual d ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_WRAP, player); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); MESSAGE("2 sent out Wynaut!"); - NOT MESSAGE("Foe Wynaut took the Future Sight attack!"); + NOT MESSAGE("The opposing Wynaut took the Future Sight attack!"); } } @@ -169,8 +169,8 @@ SINGLE_BATTLE_TEST("Future Sight breaks Focus Sash and doesn't make the holder e TURN { } TURN { MOVE(player, MOVE_PSYCHIC); } } SCENE { - MESSAGE("Foe Pidgey hung on using its Focus Sash!"); + MESSAGE("The opposing Pidgey hung on using its Focus Sash!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC, player); - MESSAGE("Foe Pidgey fainted!"); + MESSAGE("The opposing Pidgey fainted!"); } } diff --git a/test/battle/move_effect/heal_bell.c b/test/battle/move_effect/heal_bell.c index c098886a98..9b62a36f9b 100644 --- a/test/battle/move_effect/heal_bell.c +++ b/test/battle/move_effect/heal_bell.c @@ -30,7 +30,7 @@ DOUBLE_BATTLE_TEST("Heal Bell cures the entire party") int i; ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); - NOT MESSAGE("Wobbuffet is hurt by poison!"); + NOT MESSAGE("Wobbuffet was hurt by its poisoning!"); for (i = 0; i < 6; i++) EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_STATUS), STATUS1_NONE); } @@ -55,9 +55,9 @@ DOUBLE_BATTLE_TEST("Heal Bell does not cure soundproof partners") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BELL, playerLeft); if (ability == ABILITY_SOUNDPROOF) { - MESSAGE("Exploud is hurt by poison!"); + MESSAGE("Exploud was hurt by its poisoning!"); } else { - NOT MESSAGE("Exploud is hurt by poison!"); + NOT MESSAGE("Exploud was hurt by its poisoning!"); } } } @@ -81,7 +81,7 @@ SINGLE_BATTLE_TEST("Heal Bell cures inactive soundproof Pokemon") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BELL, player); SEND_IN_MESSAGE("Exploud"); - NOT MESSAGE("Exploud is hurt by poison!"); + NOT MESSAGE("Exploud was hurt by its poisoning!"); } } @@ -96,6 +96,6 @@ SINGLE_BATTLE_TEST("Heal Bell cures a soundproof user") TURN { MOVE(player, MOVE_HEAL_BELL, target: player); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BELL, player); - NOT MESSAGE("Exploud is hurt by poison!"); + NOT MESSAGE("Exploud was hurt by its poisoning!"); } } diff --git a/test/battle/move_effect/healing_wish.c b/test/battle/move_effect/healing_wish.c index df0c2c3a9b..a597d552ed 100644 --- a/test/battle/move_effect/healing_wish.c +++ b/test/battle/move_effect/healing_wish.c @@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Healing Wish effect activates only if the switched pokemon c MESSAGE("Gardevoir fainted!"); NONE_OF { MESSAGE("The healing wish came true for Wynaut!"); - MESSAGE("Wynaut regained health!"); + MESSAGE("Wynaut's HP was restored."); } ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); MESSAGE("The healing wish came true for Wynaut!"); diff --git a/test/battle/move_effect/hit_escape.c b/test/battle/move_effect/hit_escape.c index 0c96bd4e75..0a494cc667 100644 --- a/test/battle/move_effect/hit_escape.c +++ b/test/battle/move_effect/hit_escape.c @@ -108,7 +108,7 @@ SINGLE_BATTLE_TEST("U-turn switches the user out after Ice Face activates") ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); HP_BAR(opponent); ABILITY_POPUP(opponent, ABILITY_ICE_FACE); - MESSAGE("Foe Eiscue transformed!"); + MESSAGE("The opposing Eiscue transformed!"); SEND_IN_MESSAGE("Wynaut"); } } diff --git a/test/battle/move_effect/hit_set_remove_terrain.c b/test/battle/move_effect/hit_set_remove_terrain.c index 549b6bf04f..98c6e179eb 100644 --- a/test/battle/move_effect/hit_set_remove_terrain.c +++ b/test/battle/move_effect/hit_set_remove_terrain.c @@ -45,7 +45,7 @@ SINGLE_BATTLE_TEST("Steel Roller and Ice Spinner can remove a terrain from the f MESSAGE("The electricity disappeared from the battlefield."); break; case MOVE_PSYCHIC_TERRAIN: - MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The weirdness disappeared from the battlefield!"); break; case MOVE_GRASSY_TERRAIN: MESSAGE("The grass disappeared from the battlefield."); diff --git a/test/battle/move_effect/hit_switch_target.c b/test/battle/move_effect/hit_switch_target.c index 22227ea832..a899ae0b33 100644 --- a/test/battle/move_effect/hit_switch_target.c +++ b/test/battle/move_effect/hit_switch_target.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Dragon Tail switches the target with a random non-fainted re TURN { MOVE(player, MOVE_DRAGON_TAIL); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); - MESSAGE("Foe Bulbasaur was dragged out!"); + MESSAGE("The opposing Bulbasaur was dragged out!"); } } @@ -39,7 +39,7 @@ DOUBLE_BATTLE_TEST("Dragon Tail switches the target with a random non-battler, n TURN { MOVE(playerLeft, MOVE_DRAGON_TAIL, target: opponentRight); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, playerLeft); - MESSAGE("Foe Bulbasaur was dragged out!"); + MESSAGE("The opposing Bulbasaur was dragged out!"); } } diff --git a/test/battle/move_effect/ion_deluge.c b/test/battle/move_effect/ion_deluge.c index 93e147e07d..d0862ee8b4 100644 --- a/test/battle/move_effect/ion_deluge.c +++ b/test/battle/move_effect/ion_deluge.c @@ -15,7 +15,7 @@ WILD_BATTLE_TEST("Ion Deluge works the same way as always when used by a mon wit } WHEN { TURN { MOVE(opponent, MOVE_ION_DELUGE); } } SCENE { - MESSAGE("Wild Lanturn used Ion Deluge!"); + MESSAGE("The wild Lanturn used Ion Deluge!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_VOLT_ABSORB); HP_BAR(opponent); @@ -37,7 +37,7 @@ WILD_BATTLE_TEST("Ion Deluge works the same way as always when used by a mon wit } WHEN { TURN { MOVE(opponent, MOVE_ION_DELUGE); } } SCENE { - MESSAGE("Wild Zebstrika used Ion Deluge!"); + MESSAGE("The wild Zebstrika used Ion Deluge!"); NONE_OF { ABILITY_POPUP(opponent, ability); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); @@ -57,7 +57,7 @@ SINGLE_BATTLE_TEST("Ion Deluge makes Normal type moves Electric type") } WHEN { TURN { MOVE(opponent, MOVE_ION_DELUGE); MOVE(player, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Golbat used Ion Deluge!"); + MESSAGE("The opposing Golbat used Ion Deluge!"); MESSAGE("A deluge of ions showers the battlefield!"); MESSAGE("Wobbuffet used Tackle!"); MESSAGE("It's super effective!"); // Because Tackle is now electric type. diff --git a/test/battle/move_effect/knock_off.c b/test/battle/move_effect/knock_off.c index 50d8aaa773..aa1081ff67 100644 --- a/test/battle/move_effect/knock_off.c +++ b/test/battle/move_effect/knock_off.c @@ -17,10 +17,10 @@ SINGLE_BATTLE_TEST("Knock Off knocks a healing berry before it has the chance to ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("The opposing Wobbuffet restored its health using its Sitrus Berry!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); - MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Sitrus Berry!"); + MESSAGE("Wobbuffet knocked off the opposing Wobbuffet's Sitrus Berry!"); } THEN { EXPECT(opponent->item == ITEM_NONE); } @@ -43,13 +43,13 @@ SINGLE_BATTLE_TEST("Knock Off activates after Rocky Helmet and Weakness Policy") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); if (item == ITEM_WEAKNESS_POLICY) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE); - MESSAGE("Using Weakness Policy, the Attack of Foe Wobbuffet sharply rose!"); - MESSAGE("Using Weakness Policy, the Sp. Atk of Foe Wobbuffet sharply rose!"); + MESSAGE("Using Weakness Policy, the Attack of the opposing Wobbuffet sharply rose!"); + MESSAGE("Using Weakness Policy, the Sp. Atk of the opposing Wobbuffet sharply rose!"); } else if (item == ITEM_ROCKY_HELMET) { HP_BAR(player); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Rocky Helmet!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Rocky Helmet!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); - MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Rocky Helmet!"); + MESSAGE("Wobbuffet knocked off the opposing Wobbuffet's Rocky Helmet!"); } } THEN { EXPECT(opponent->item == ITEM_NONE); @@ -111,9 +111,9 @@ SINGLE_BATTLE_TEST("Recycle cannot recover an item removed by Knock Off") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); - MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Leftovers!"); + MESSAGE("Wobbuffet knocked off the opposing Wobbuffet's Leftovers!"); - MESSAGE("Foe Wobbuffet used Recycle!"); + MESSAGE("The opposing Wobbuffet used Recycle!"); MESSAGE("But it failed!"); } THEN { EXPECT(opponent->item == ITEM_NONE); @@ -132,12 +132,12 @@ SINGLE_BATTLE_TEST("Knock Off does not prevent targets from receiving another it // turn 1 ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); - MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Leftovers!"); + MESSAGE("Wobbuffet knocked off the opposing Wobbuffet's Leftovers!"); // turn 2 if (B_KNOCK_OFF_REMOVAL >= GEN_5) { ANIMATION(ANIM_TYPE_MOVE, MOVE_BESTOW, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT); - MESSAGE("Foe Wobbuffet's Leftovers restored its HP a little!"); + MESSAGE("The opposing Wobbuffet restored a little HP using its Leftovers!"); } else { NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_BESTOW, player); } MESSAGE("But it failed!"); @@ -163,9 +163,9 @@ SINGLE_BATTLE_TEST("Knock Off triggers Unburden") // turn 1 ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); - MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Leftovers!"); + MESSAGE("Wobbuffet knocked off the opposing Wobbuffet's Leftovers!"); // turn 2 - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); } THEN { EXPECT(opponent->item == ITEM_NONE); @@ -184,10 +184,10 @@ DOUBLE_BATTLE_TEST("Knock Off does not trigger the opposing ally's Symbiosis") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); - MESSAGE("Foe Wobbuffet knocked off Wobbuffet's Leftovers!"); + MESSAGE("The opposing Wobbuffet knocked off Wobbuffet's Leftovers!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT); - MESSAGE("Wobbuffet's Leftovers restored health!"); + MESSAGE("Wobbuffet restored its health using its Leftovers!"); } } THEN { EXPECT(playerLeft->item == ITEM_NONE); @@ -202,6 +202,6 @@ SINGLE_BATTLE_TEST("Knock Off doesn't knock off items from Pokemon behind substi } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_KNOCK_OFF); } } SCENE { - NOT MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Poké Ball"); + NOT MESSAGE("Wobbuffet knocked off the opposing Wobbuffet's Poké Ball"); } } diff --git a/test/battle/move_effect/leech_seed.c b/test/battle/move_effect/leech_seed.c index 1e71437f80..fce80c661c 100644 --- a/test/battle/move_effect/leech_seed.c +++ b/test/battle/move_effect/leech_seed.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Leech Seed doesn't affect Grass-type Pokémon") TURN { MOVE(player, MOVE_LEECH_SEED); } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, player); - MESSAGE("It doesn't affect Foe Oddish…"); + MESSAGE("It doesn't affect the opposing Oddish…"); } } TO_DO_BATTLE_TEST("Leech Seed doesn't affect already seeded targets") diff --git a/test/battle/move_effect/max_hp_50_recoil.c b/test/battle/move_effect/max_hp_50_recoil.c index 1ac98854e0..b35043014b 100644 --- a/test/battle/move_effect/max_hp_50_recoil.c +++ b/test/battle/move_effect/max_hp_50_recoil.c @@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("Steel Beam causes the user & the target to faint when below } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STEEL_BEAM, player); HP_BAR(opponent, hp: 0); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); HP_BAR(player, hp: 0); MESSAGE("Wobbuffet fainted!"); } @@ -143,7 +143,7 @@ SINGLE_BATTLE_TEST("Steel Beam is not blocked by Damp") HP_BAR(player, damage: 200); NONE_OF { ABILITY_POPUP(opponent, ABILITY_DAMP); - MESSAGE("Foe Golduck's Damp prevents Wobbuffet from using Steel Beam!"); + MESSAGE("The opposing Golduck's Damp prevents Wobbuffet from using Steel Beam!"); } } } diff --git a/test/battle/move_effect/metronome.c b/test/battle/move_effect/metronome.c index 22e3390cb2..98e4bfd618 100644 --- a/test/battle/move_effect/metronome.c +++ b/test/battle/move_effect/metronome.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Metronome picks a random move") } SCENE { MESSAGE("Wobbuffet used Metronome!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_METRONOME, player); - MESSAGE("Wobbuffet used Scratch!"); + MESSAGE("Waggling a finger let it use Scratch!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player); HP_BAR(opponent); } @@ -35,9 +35,9 @@ SINGLE_BATTLE_TEST("Metronome's called powder move fails against Grass Types") } SCENE { MESSAGE("Wobbuffet used Metronome!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_METRONOME, player); - MESSAGE("Wobbuffet used Poison Powder!"); + MESSAGE("Waggling a finger let it use Poison Powder!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_POISON_POWDER, player); - MESSAGE("It doesn't affect Foe Tangela…"); + MESSAGE("It doesn't affect the opposing Tangela…"); NOT STATUS_ICON(opponent, poison: TRUE); } } @@ -53,9 +53,9 @@ SINGLE_BATTLE_TEST("Metronome's called multi-hit move hits multiple times") } SCENE { MESSAGE("Wobbuffet used Metronome!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_METRONOME, player); - MESSAGE("Wobbuffet used Rock Blast!"); + MESSAGE("Waggling a finger let it use Rock Blast!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_BLAST, player); HP_BAR(opponent); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); } } diff --git a/test/battle/move_effect/mind_blown.c b/test/battle/move_effect/mind_blown.c index da39cf18d7..dbb3a6164a 100644 --- a/test/battle/move_effect/mind_blown.c +++ b/test/battle/move_effect/mind_blown.c @@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("Mind Blown causes the user & the target to faint when below } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, player); HP_BAR(opponent, hp: 0); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); HP_BAR(player, hp: 0); MESSAGE("Wobbuffet fainted!"); } @@ -96,11 +96,11 @@ DOUBLE_BATTLE_TEST("Mind Blown causes everyone to faint in a double battle") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, playerLeft); HP_BAR(opponentLeft, hp: 0); - MESSAGE("Foe Abra fainted!"); + MESSAGE("The opposing Abra fainted!"); HP_BAR(playerRight, hp: 0); MESSAGE("Wynaut fainted!"); HP_BAR(opponentRight, hp: 0); - MESSAGE("Foe Kadabra fainted!"); + MESSAGE("The opposing Kadabra fainted!"); HP_BAR(playerLeft, hp: 0); MESSAGE("Wobbuffet fainted!"); } @@ -133,7 +133,7 @@ SINGLE_BATTLE_TEST("Mind Blown is blocked by Damp") HP_BAR(player, damage: 200); } ABILITY_POPUP(opponent, ABILITY_DAMP); - MESSAGE("Foe Golduck's Damp prevents Wobbuffet from using Mind Blown!"); + MESSAGE("The opposing Golduck's Damp prevents Wobbuffet from using Mind Blown!"); } } diff --git a/test/battle/move_effect/mirror_move.c b/test/battle/move_effect/mirror_move.c index 18ac8c78e1..65c600fb18 100644 --- a/test/battle/move_effect/mirror_move.c +++ b/test/battle/move_effect/mirror_move.c @@ -51,8 +51,8 @@ SINGLE_BATTLE_TEST("Mirror Move's called powder move fails against Grass Types") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); STATUS_ICON(opponent, paralysis: TRUE); - MESSAGE("Foe Wobbuffet used Mirror Move!"); - MESSAGE("Foe Wobbuffet used Stun Spore!"); + MESSAGE("The opposing Wobbuffet used Mirror Move!"); + MESSAGE("The opposing Wobbuffet used Stun Spore!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, opponent); MESSAGE("It doesn't affect Oddish…"); NOT STATUS_ICON(player, paralysis: TRUE); @@ -70,11 +70,11 @@ SINGLE_BATTLE_TEST("Mirror Move's called multi-hit move hits multiple times") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); HP_BAR(opponent); - MESSAGE("Hit 5 time(s)!"); - MESSAGE("Foe Wobbuffet used Mirror Move!"); - MESSAGE("Foe Wobbuffet used Bullet Seed!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); + MESSAGE("The opposing Wobbuffet used Mirror Move!"); + MESSAGE("The opposing Wobbuffet used Bullet Seed!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, opponent); HP_BAR(player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); } } diff --git a/test/battle/move_effect/multi_hit.c b/test/battle/move_effect/multi_hit.c index 052226d1c8..e2331efbf7 100644 --- a/test/battle/move_effect/multi_hit.c +++ b/test/battle/move_effect/multi_hit.c @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit the maximum amount with Skill Link") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); } } @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit twice 35% of the time") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -56,7 +56,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit thrice 35% of the time") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); - MESSAGE("Hit 3 time(s)!"); + MESSAGE("The Pokémon was hit 3 time(s)!"); } } @@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit four times 15% of the time") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); - MESSAGE("Hit 4 time(s)!"); + MESSAGE("The Pokémon was hit 4 time(s)!"); } } @@ -95,7 +95,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit five times 15% of the time") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); } } @@ -114,7 +114,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit at least four times with Loaded Dice") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); - MESSAGE("Hit 4 time(s)!"); + MESSAGE("The Pokémon was hit 4 time(s)!"); } } @@ -134,7 +134,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit five times 50 Percent of the time with L ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); } } @@ -152,7 +152,7 @@ SINGLE_BATTLE_TEST("Scale Shot decreases defense and increases speed after final ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Defense fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -172,7 +172,7 @@ SINGLE_BATTLE_TEST("Scale Shot is immune to Fairy types and will end the move co TURN { MOVE(player, MOVE_SCALE_SHOT); } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); - MESSAGE("It doesn't affect Foe Clefairy…"); + MESSAGE("It doesn't affect the opposing Clefairy…"); } } @@ -192,7 +192,7 @@ DOUBLE_BATTLE_TEST("Scale Shot does not corrupt the next turn move used") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, playerRight); HP_BAR(opponentRight); - MESSAGE("Hit 1 time(s)!"); + MESSAGE("The Pokémon was hit 1 time(s)!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLDOZE, playerRight); HP_BAR(playerLeft); HP_BAR(opponentLeft); @@ -216,7 +216,7 @@ SINGLE_BATTLE_TEST("Endure does not prevent multiple hits and stat changes occur ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Defense fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -238,7 +238,7 @@ SINGLE_BATTLE_TEST("Scale Shot decreases defense and increases speed after the 4 ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); - MESSAGE("Hit 4 time(s)!"); + MESSAGE("The Pokémon was hit 4 time(s)!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Defense fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -263,8 +263,8 @@ SINGLE_BATTLE_TEST("Scale Shot decreases defense and increases speed after killi ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); - MESSAGE("Foe Slugma fainted!"); - MESSAGE("Hit 3 time(s)!"); + MESSAGE("The opposing Slugma fainted!"); + MESSAGE("The Pokémon was hit 3 time(s)!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Bagon's Defense fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -292,7 +292,7 @@ SINGLE_BATTLE_TEST("Multi Hit moves will not disrupt Destiny Bond flag") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, opponent); } - MESSAGE("Wobbuffet took Foe Wobbuffet with it!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("Wobbuffet took its attacker down with it!"); + MESSAGE("The opposing Wobbuffet fainted!"); } } diff --git a/test/battle/move_effect/octolock.c b/test/battle/move_effect/octolock.c index 3cdc5f5602..1a04de7331 100644 --- a/test/battle/move_effect/octolock.c +++ b/test/battle/move_effect/octolock.c @@ -10,11 +10,11 @@ SINGLE_BATTLE_TEST("Octolock decreases Defense and Sp. Def by at the end of the TURN { MOVE(player, MOVE_OCTOLOCK); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); - MESSAGE("Foe Wobbuffet can no longer escape because of Octolock!"); + MESSAGE("The opposing Wobbuffet can no longer escape because of Octolock!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Sp. Def fell!"); + MESSAGE("The opposing Wobbuffet's Sp. Def fell!"); } } @@ -37,32 +37,32 @@ SINGLE_BATTLE_TEST("Octolock reduction is prevented by Clear Body, White Smoke a NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); if (species == SPECIES_BELDUM) { - MESSAGE("Foe Beldum can no longer escape because of Octolock!"); + MESSAGE("The opposing Beldum can no longer escape because of Octolock!"); ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); - MESSAGE("Foe Beldum's Clear Body prevents stat loss!"); + MESSAGE("The opposing Beldum's Clear Body prevents stat loss!"); NONE_OF { - MESSAGE("Foe Beldum's Defense fell!"); - MESSAGE("Foe Beldum's Sp. Def fell!"); + MESSAGE("The opposing Beldum's Defense fell!"); + MESSAGE("The opposing Beldum's Sp. Def fell!"); } } else if (species == SPECIES_TORKOAL) { - MESSAGE("Foe Torkoal can no longer escape because of Octolock!"); + MESSAGE("The opposing Torkoal can no longer escape because of Octolock!"); ABILITY_POPUP(opponent, ABILITY_WHITE_SMOKE); - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); NONE_OF { - MESSAGE("Foe Torkoal's Defense fell!"); - MESSAGE("Foe Torkoal's Sp. Def fell!"); + MESSAGE("The opposing Torkoal's Defense fell!"); + MESSAGE("The opposing Torkoal's Sp. Def fell!"); } } else if (species == SPECIES_SOLGALEO) { - MESSAGE("Foe Solgaleo can no longer escape because of Octolock!"); + MESSAGE("The opposing Solgaleo can no longer escape because of Octolock!"); ABILITY_POPUP(opponent, ABILITY_FULL_METAL_BODY); - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); NONE_OF { - MESSAGE("Foe Solgaleo's Defense fell!"); - MESSAGE("Foe Solgaleo's Sp. Def fell!"); + MESSAGE("The opposing Solgaleo's Defense fell!"); + MESSAGE("The opposing Solgaleo's Sp. Def fell!"); } } } @@ -77,12 +77,12 @@ SINGLE_BATTLE_TEST("Octolock Defense reduction is prevented by Big Pecks") TURN { MOVE(player, MOVE_OCTOLOCK); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); - MESSAGE("Foe Pidgey can no longer escape because of Octolock!"); + MESSAGE("The opposing Pidgey can no longer escape because of Octolock!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - NOT MESSAGE("Foe Pidgey's Defense fell!"); + NOT MESSAGE("The opposing Pidgey's Defense fell!"); ABILITY_POPUP(opponent, ABILITY_BIG_PECKS); - MESSAGE("Foe Pidgey's Big Pecks prevents Defense loss!"); - MESSAGE("Foe Pidgey's Sp. Def fell!"); + MESSAGE("The opposing Pidgey's Big Pecks prevents Defense loss!"); + MESSAGE("The opposing Pidgey's Sp. Def fell!"); } } @@ -96,12 +96,12 @@ SINGLE_BATTLE_TEST("Octolock reduction is prevented by Clear Amulet") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); - MESSAGE("Foe Wobbuffet can no longer escape because of Octolock!"); - MESSAGE("Foe Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The opposing Wobbuffet can no longer escape because of Octolock!"); + MESSAGE("The effects of the Clear Amulet held by the opposing Wobbuffet prevents its stats from being lowered!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense fell!"); - MESSAGE("Foe Wobbuffet's Sp. Def fell!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet's Sp. Def fell!"); } } } @@ -120,14 +120,14 @@ SINGLE_BATTLE_TEST("Octolock will not decrease Defense and Sp. Def further then } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); for (j = 0; j < 5; j++) { - MESSAGE("Foe Wobbuffet's Defense fell!"); - MESSAGE("Foe Wobbuffet's Sp. Def fell!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet's Sp. Def fell!"); } - MESSAGE("Foe Wobbuffet's Defense won't go lower!"); - MESSAGE("Foe Wobbuffet's Sp. Def won't go lower!"); + MESSAGE("The opposing Wobbuffet's Defense won't go any lower!"); + MESSAGE("The opposing Wobbuffet's Sp. Def won't go any lower!"); NONE_OF { - MESSAGE("Foe Wobbuffet's Defense fell!"); - MESSAGE("Foe Wobbuffet's Sp. Def fell!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet's Sp. Def fell!"); } } } diff --git a/test/battle/move_effect/ohko.c b/test/battle/move_effect/ohko.c index ca448be6fd..511d76a8ad 100644 --- a/test/battle/move_effect/ohko.c +++ b/test/battle/move_effect/ohko.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Sheer Cold doesn't affect Ice-type Pokémon") TURN { MOVE(player, MOVE_SHEER_COLD); } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SHEER_COLD, player); - MESSAGE("It doesn't affect Foe Glalie…"); + MESSAGE("It doesn't affect the opposing Glalie…"); } } TO_DO_BATTLE_TEST("Fissure faints the target, skipping regular damage calculations") diff --git a/test/battle/move_effect/plasma_fists.c b/test/battle/move_effect/plasma_fists.c index bdd3ed4f41..93c8869026 100644 --- a/test/battle/move_effect/plasma_fists.c +++ b/test/battle/move_effect/plasma_fists.c @@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Ion Duldge turns normal moves into electric for the remainde MESSAGE("Krabby used Ion Deluge!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ION_DELUGE, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); MESSAGE("It's super effective!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Plasma Fists turns normal moves into electric for the remain MESSAGE("Krabby used Plasma Fists!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); MESSAGE("It's super effective!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Plasma Fists type-changing effect does not override Pixilate MESSAGE("Krabby used Plasma Fists!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Sylveon used Tackle!"); + MESSAGE("The opposing Sylveon used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); NOT MESSAGE("It's super effective!"); } @@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Plasma Fists type-changing effect is applied after Normalize MESSAGE("Krabby used Plasma Fists!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Skitty used Ember!"); + MESSAGE("The opposing Skitty used Ember!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); MESSAGE("It's super effective!"); } @@ -92,7 +92,7 @@ SINGLE_BATTLE_TEST("Plasma Fists turns normal type dynamax-moves into electric t MESSAGE("Krabby used Plasma Fists!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Wobbuffet used Max Lightning!"); + MESSAGE("The opposing Wobbuffet used Max Lightning!"); MESSAGE("It's super effective!"); } } diff --git a/test/battle/move_effect/pledge.c b/test/battle/move_effect/pledge.c index bd68b1e733..726adc8152 100644 --- a/test/battle/move_effect/pledge.c +++ b/test/battle/move_effect/pledge.c @@ -26,11 +26,11 @@ DOUBLE_BATTLE_TEST("Water and Fire Pledge create a rainbow on the user's side of MESSAGE("Wobbuffet used Water Pledge!"); MESSAGE("Wobbuffet is waiting for Wynaut's move…{PAUSE 16}"); MESSAGE("Wynaut used Fire Pledge!"); - MESSAGE("The two moves become one! It's a combined move!{PAUSE 16}"); + MESSAGE("The two moves have become one! It's a combined move!{PAUSE 16}"); ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerRight); HP_BAR(opponentRight); MESSAGE("A rainbow appeared in the sky on your team's side!"); - MESSAGE("The rainbow on your side disappeared!"); + MESSAGE("The rainbow on your team's side disappeared!"); } } @@ -51,7 +51,7 @@ DOUBLE_BATTLE_TEST("Rainbow doubles the chance of secondary move effects") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, playerLeft); - MESSAGE("Foe Wynaut was burned!"); + MESSAGE("The opposing Wynaut was burned!"); } } @@ -72,7 +72,7 @@ DOUBLE_BATTLE_TEST("Rainbow flinch chance does not stack with Serene Grace") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_BITE, playerLeft); - MESSAGE("Foe Wynaut flinched!"); + MESSAGE("The opposing Wynaut flinched and couldn't move!"); } } @@ -94,23 +94,23 @@ DOUBLE_BATTLE_TEST("Fire and Grass Pledge summons Sea Of Fire for four turns tha MESSAGE("Wobbuffet used Fire Pledge!"); MESSAGE("Wobbuffet is waiting for Wynaut's move…{PAUSE 16}"); MESSAGE("Wynaut used Grass Pledge!"); - MESSAGE("The two moves become one! It's a combined move!{PAUSE 16}"); + MESSAGE("The two moves have become one! It's a combined move!{PAUSE 16}"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); HP_BAR(opponentRight); MESSAGE("A sea of fire enveloped the opposing team!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft); - MESSAGE("The opposing Foe Wobbuffet was hurt by the sea of fire!"); + MESSAGE("The opposing Wobbuffet was hurt by the sea of fire!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight); - MESSAGE("The opposing Foe Wynaut was hurt by the sea of fire!"); + MESSAGE("The opposing Wynaut was hurt by the sea of fire!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft); - MESSAGE("The opposing Foe Wobbuffet was hurt by the sea of fire!"); + MESSAGE("The opposing Wobbuffet was hurt by the sea of fire!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight); - MESSAGE("The opposing Foe Wynaut was hurt by the sea of fire!"); + MESSAGE("The opposing Wynaut was hurt by the sea of fire!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft); - MESSAGE("The opposing Foe Wobbuffet was hurt by the sea of fire!"); + MESSAGE("The opposing Wobbuffet was hurt by the sea of fire!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight); - MESSAGE("The opposing Foe Wynaut was hurt by the sea of fire!"); + MESSAGE("The opposing Wynaut was hurt by the sea of fire!"); MESSAGE("The sea of fire around the opposing team disappeared!"); } } @@ -152,7 +152,7 @@ DOUBLE_BATTLE_TEST("Grass and Water Pledge create a swamp on the user's side of MESSAGE("Wobbuffet used Grass Pledge!"); MESSAGE("Wobbuffet is waiting for Wynaut's move…{PAUSE 16}"); MESSAGE("Wynaut used Water Pledge!"); - MESSAGE("The two moves become one! It's a combined move!{PAUSE 16}"); + MESSAGE("The two moves have become one! It's a combined move!{PAUSE 16}"); ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerRight); HP_BAR(opponentRight); MESSAGE("A swamp enveloped the opposing team!"); @@ -253,7 +253,7 @@ DOUBLE_BATTLE_TEST("Pledge status timer does not reset if combined move is used if (pledgeMove1 == MOVE_WATER_PLEDGE && pledgeMove2 == MOVE_FIRE_PLEDGE) { NOT MESSAGE("A rainbow appeared in the sky on your team's side!"); - MESSAGE("The rainbow on your side disappeared!"); + MESSAGE("The rainbow on your team's side disappeared!"); } if (pledgeMove1 == MOVE_FIRE_PLEDGE && pledgeMove2 == MOVE_GRASS_PLEDGE) { @@ -471,11 +471,11 @@ DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Flinch Right" TURN { MOVE(opponentLeft, MOVE_FAKE_OUT, target: playerRight); MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight); } } SCENE { if (speedPLeft < speedPRight) { - MESSAGE("Wynaut flinched!"); + MESSAGE("Wynaut flinched and couldn't move!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); } else { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); - MESSAGE("Wynaut flinched!"); + MESSAGE("Wynaut flinched and couldn't move!"); } NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); @@ -504,11 +504,11 @@ DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Flinch Left") TURN { MOVE(opponentLeft, MOVE_FAKE_OUT, target: playerLeft); MOVE(playerRight, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerLeft, MOVE_GRASS_PLEDGE, target: opponentRight); } } SCENE { if (speedPRight < speedPLeft) { - MESSAGE("Wobbuffet flinched!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); } else { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); - MESSAGE("Wobbuffet flinched!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); } NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); @@ -730,8 +730,8 @@ DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Paralyzed Bot } WHEN { TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight, WITH_RNG(RNG_PARALYSIS, 0)); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight, WITH_RNG(RNG_PARALYSIS, 0)); } } SCENE { - MESSAGE("Wobbuffet is paralyzed! It can't move!"); - MESSAGE("Wynaut is paralyzed! It can't move!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); + MESSAGE("Wynaut couldn't move because it's paralyzed!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); @@ -752,8 +752,8 @@ DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Paralyzed Bot } WHEN { TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight, WITH_RNG(RNG_PARALYSIS, 0)); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight, WITH_RNG(RNG_PARALYSIS, 0)); } } SCENE { - MESSAGE("Wynaut is paralyzed! It can't move!"); - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wynaut couldn't move because it's paralyzed!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); @@ -777,8 +777,8 @@ DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Flinch Both L } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponentRight); - MESSAGE("Wobbuffet flinched!"); - MESSAGE("Wynaut flinched!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); + MESSAGE("Wynaut flinched and couldn't move!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); @@ -802,8 +802,8 @@ DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Flinch Both R } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponentRight); - MESSAGE("Wynaut flinched!"); - MESSAGE("Wobbuffet flinched!"); + MESSAGE("Wynaut flinched and couldn't move!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); diff --git a/test/battle/move_effect/population_bomb.c b/test/battle/move_effect/population_bomb.c index 4ef3d1110f..b3e2e4768e 100644 --- a/test/battle/move_effect/population_bomb.c +++ b/test/battle/move_effect/population_bomb.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Population Bomb can hit ten times") ANIMATION(ANIM_TYPE_MOVE, MOVE_POPULATION_BOMB, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_POPULATION_BOMB, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_POPULATION_BOMB, player); - MESSAGE("Hit 10 time(s)!"); + MESSAGE("The Pokémon was hit 10 time(s)!"); } } diff --git a/test/battle/move_effect/powder.c b/test/battle/move_effect/powder.c index dbd1570e6c..85e486918b 100644 --- a/test/battle/move_effect/powder.c +++ b/test/battle/move_effect/powder.c @@ -232,7 +232,7 @@ SINGLE_BATTLE_TEST("Powder doesn't prevent a Fire move from thawing its user out TURN { MOVE(opponent, MOVE_POWDER); MOVE(player, MOVE_FLAME_WHEEL); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_POWDER, opponent); - MESSAGE("Wobbuffet was defrosted by Flame Wheel!"); + MESSAGE("Wobbuffet's Flame Wheel melted the ice!"); STATUS_ICON(player, none: TRUE); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_FLAME_WHEEL, player); diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c index e5e75550e8..207544de1f 100644 --- a/test/battle/move_effect/protect.c +++ b/test/battle/move_effect/protect.c @@ -48,9 +48,9 @@ SINGLE_BATTLE_TEST("Protect, Detect, Spiky Shield, Baneful Bunker and Burning Bu TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, protectMove, opponent); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT ANIMATION(ANIM_TYPE_MOVE, usedMove, player); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); if (usedMove == MOVE_LEER) { NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); } else { @@ -87,14 +87,14 @@ SINGLE_BATTLE_TEST("King's Shield, Silk Trap and Obstruct protect from damaging TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, protectMove, opponent); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); if (usedMove == MOVE_LEER) { ANIMATION(ANIM_TYPE_MOVE, usedMove, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - NOT MESSAGE("Foe Wobbuffet protected itself!"); + NOT MESSAGE("The opposing Wobbuffet protected itself!"); } else { NOT ANIMATION(ANIM_TYPE_MOVE, usedMove, player); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); if (usedMove == MOVE_TACKLE) { NOT HP_BAR(opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -148,9 +148,9 @@ SINGLE_BATTLE_TEST("Spiky Shield does 1/8 dmg of max hp of attackers making cont TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKY_SHIELD, opponent); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT ANIMATION(ANIM_TYPE_MOVE, usedMove, player); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponent); if (usedMove == MOVE_TACKLE) { HP_BAR(player, maxHp / 8); @@ -179,9 +179,9 @@ SINGLE_BATTLE_TEST("Baneful Bunker poisons pokemon for moves making contact") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_BANEFUL_BUNKER, opponent); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT ANIMATION(ANIM_TYPE_MOVE, usedMove, player); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); if (usedMove == MOVE_TACKLE) { NOT HP_BAR(opponent); STATUS_ICON(player, STATUS1_POISON); @@ -211,9 +211,9 @@ SINGLE_BATTLE_TEST("Burning Bulwark burns pokemon for moves making contact") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_BURNING_BULWARK, opponent); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT ANIMATION(ANIM_TYPE_MOVE, usedMove, player); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); if (usedMove == MOVE_TACKLE) { NOT HP_BAR(opponent); STATUS_ICON(player, STATUS1_BURN); @@ -256,15 +256,15 @@ SINGLE_BATTLE_TEST("Recoil damage is not applied if target was protected") TURN {} } SCENE { // 1st turn - MESSAGE("Foe Beautifly used Tackle!"); + MESSAGE("The opposing Beautifly used Tackle!"); MESSAGE("Rapidash used Tackle!"); // 2nd turn ANIMATION(ANIM_TYPE_MOVE, protectMove, opponent); - MESSAGE("Foe Beautifly protected itself!"); + MESSAGE("The opposing Beautifly protected itself!"); // MESSAGE("Rapidash used recoilMove!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, recoilMove, player); - MESSAGE("Rapidash is hit with recoil!"); + MESSAGE("Rapidash was damaged by the recoil!"); } } } @@ -290,10 +290,10 @@ SINGLE_BATTLE_TEST("Multi-hit moves don't hit a protected target and fail only o TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, move, opponent); - MESSAGE("Foe Beautifly protected itself!"); + MESSAGE("The opposing Beautifly protected itself!"); MESSAGE("Rapidash used Arm Thrust!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ARM_THRUST, player); - MESSAGE("Foe Beautifly protected itself!"); + MESSAGE("The opposing Beautifly protected itself!"); // Each effect happens only once. if (move == MOVE_KINGS_SHIELD || move == MOVE_SILK_TRAP || move == MOVE_OBSTRUCT) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -308,10 +308,10 @@ SINGLE_BATTLE_TEST("Multi-hit moves don't hit a protected target and fail only o } else if (move == MOVE_SPIKY_SHIELD) { HP_BAR(player); } - MESSAGE("Hit 2 time(s)!"); - MESSAGE("Hit 3 time(s)!"); - MESSAGE("Hit 4 time(s)!"); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 3 time(s)!"); + MESSAGE("The Pokémon was hit 4 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); } } } @@ -336,7 +336,7 @@ DOUBLE_BATTLE_TEST("Wide Guard protects self and ally from multi-target moves") TURN { MOVE(opponentLeft, MOVE_WIDE_GUARD); MOVE(playerLeft, move, target: opponentLeft); } TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Wide Guard!"); + MESSAGE("The opposing Wobbuffet used Wide Guard!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_WIDE_GUARD, opponentLeft); if (move == MOVE_TACKLE) { MESSAGE("Wobbuffet used Tackle!"); @@ -344,15 +344,15 @@ DOUBLE_BATTLE_TEST("Wide Guard protects self and ally from multi-target moves") HP_BAR(opponentLeft); } else if (move == MOVE_HYPER_VOICE) { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, playerLeft); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponentLeft); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponentRight); } else { // Surf - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponentLeft); HP_BAR(playerRight); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponentRight); } } @@ -375,12 +375,12 @@ DOUBLE_BATTLE_TEST("Wide Guard can not fail on consecutive turns") TURN {} } SCENE { for (turns = 0; turns < 2; turns++) { - MESSAGE("Foe Wobbuffet used Wide Guard!"); + MESSAGE("The opposing Wobbuffet used Wide Guard!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_WIDE_GUARD, opponentLeft); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, playerLeft); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponentLeft); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponentRight); } } @@ -407,7 +407,7 @@ DOUBLE_BATTLE_TEST("Quick Guard protects self and ally from priority moves") TURN { MOVE(opponentLeft, MOVE_QUICK_GUARD); MOVE(playerLeft, move, target:targetOpponent); } TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Quick Guard!"); + MESSAGE("The opposing Wobbuffet used Quick Guard!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_GUARD, opponentLeft); if (move == MOVE_TACKLE) { MESSAGE("Wobbuffet used Tackle!"); @@ -415,7 +415,7 @@ DOUBLE_BATTLE_TEST("Quick Guard protects self and ally from priority moves") HP_BAR(targetOpponent); } else if (move == MOVE_QUICK_ATTACK) { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, playerLeft); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(targetOpponent); } } @@ -437,10 +437,10 @@ DOUBLE_BATTLE_TEST("Quick Guard can not fail on consecutive turns") TURN { MOVE(opponentLeft, MOVE_QUICK_GUARD); MOVE(playerLeft, MOVE_QUICK_ATTACK, target: opponentRight); } } SCENE { for (turns = 0; turns < 2; turns++) { - MESSAGE("Foe Wobbuffet used Quick Guard!"); + MESSAGE("The opposing Wobbuffet used Quick Guard!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_GUARD, opponentLeft); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, playerLeft); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponentRight); } } @@ -471,16 +471,16 @@ DOUBLE_BATTLE_TEST("Crafty Shield protects self and ally from status moves") ANIMATION(ANIM_TYPE_MOVE, MOVE_CRAFTY_SHIELD, opponentLeft); if (move == MOVE_LEER) { MESSAGE("Wobbuffet used Leer!"); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); } else { if (move == MOVE_HYPER_VOICE || targetOpponent == opponentLeft) { - NOT MESSAGE("Foe Wobbuffet protected itself!"); + NOT MESSAGE("The opposing Wobbuffet protected itself!"); HP_BAR(opponentLeft); } else if (move == MOVE_HYPER_VOICE || targetOpponent == opponentRight) { - NOT MESSAGE("Foe Wobbuffet protected itself!"); + NOT MESSAGE("The opposing Wobbuffet protected itself!"); HP_BAR(opponentRight); } } @@ -499,7 +499,7 @@ SINGLE_BATTLE_TEST("Protect does not block Confide") MESSAGE("Wobbuffet used Confide!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFIDE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - NOT MESSAGE("Foe Wobbuffet protected itself!"); + NOT MESSAGE("The opposing Wobbuffet protected itself!"); } } @@ -515,9 +515,9 @@ DOUBLE_BATTLE_TEST("Crafty Shield protects self and ally from Confide") TURN { MOVE(opponentLeft, MOVE_CRAFTY_SHIELD); MOVE(playerLeft, MOVE_CONFIDE, target: opponentLeft); MOVE(playerRight, MOVE_CONFIDE, target: opponentRight); } } SCENE { MESSAGE("Wobbuffet used Confide!"); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); MESSAGE("Wynaut used Confide!"); - MESSAGE("Foe Wynaut protected itself!"); + MESSAGE("The opposing Wynaut protected itself!"); } } @@ -542,13 +542,13 @@ DOUBLE_BATTLE_TEST("Crafty Shield does not protect against moves that target all MESSAGE("Tangela's Defense rose!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Sunkern's Defense rose!"); + MESSAGE("The opposing Sunkern's Defense rose!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); MESSAGE("Tangrowth's Defense rose!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Sunflora's Defense rose!"); + MESSAGE("The opposing Sunflora's Defense rose!"); } } diff --git a/test/battle/move_effect/pursuit.c b/test/battle/move_effect/pursuit.c index 7c34e914d1..3a1db03d06 100644 --- a/test/battle/move_effect/pursuit.c +++ b/test/battle/move_effect/pursuit.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Pursuited mon correctly switches out after it got hit and ac ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent); ABILITY_POPUP(player, ABILITY_TANGLING_HAIR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wynaut's Speed fell!"); + MESSAGE("The opposing Wynaut's Speed fell!"); SEND_IN_MESSAGE("Wobbuffet"); } } diff --git a/test/battle/move_effect/quash.c b/test/battle/move_effect/quash.c index 5500fcb33e..b342eafd74 100644 --- a/test/battle/move_effect/quash.c +++ b/test/battle/move_effect/quash.c @@ -67,7 +67,7 @@ DOUBLE_BATTLE_TEST("Quash calculates correct turn order if only one pokemon is l ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_EDGE, playerRight); HP_BAR(opponentLeft); - MESSAGE("Foe Pidgeot fainted!"); + MESSAGE("The opposing Pidgeot fainted!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUASH, playerLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); diff --git a/test/battle/move_effect/rage_fist.c b/test/battle/move_effect/rage_fist.c index 52859cefc1..7bc349cef0 100644 --- a/test/battle/move_effect/rage_fist.c +++ b/test/battle/move_effect/rage_fist.c @@ -142,8 +142,8 @@ SINGLE_BATTLE_TEST("Rage Fist base power is not increased if a substitute was hi HP_BAR(opponent, captureDamage: ×GotHit[0]); ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CRUNCH, opponent); - MESSAGE("The SUBSTITUTE took damage for Wobbuffet!"); - MESSAGE("Wobbuffet's SUBSTITUTE faded!"); + MESSAGE("The substitute took damage for Wobbuffet!"); + MESSAGE("Wobbuffet's substitute faded!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, player); HP_BAR(opponent, captureDamage: ×GotHit[1]); } THEN { @@ -241,7 +241,7 @@ SINGLE_BATTLE_TEST("Rage Fist base power is not increased if move had no affect" for (turns = 0; turns < 2; turns++) { ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, player); HP_BAR(opponent, captureDamage: ×GotHit[turns]); - MESSAGE("Foe Regirock used Tackle!"); + MESSAGE("The opposing Regirock used Tackle!"); MESSAGE("It doesn't affect Gastly…"); } } THEN { diff --git a/test/battle/move_effect/recoil_if_miss.c b/test/battle/move_effect/recoil_if_miss.c index b6083e9d19..a5f0111095 100644 --- a/test/battle/move_effect/recoil_if_miss.c +++ b/test/battle/move_effect/recoil_if_miss.c @@ -78,9 +78,9 @@ SINGLE_BATTLE_TEST("Jump Kick's recoil happens after Spiky Shield damage and Pok } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKY_SHIELD, opponent); MESSAGE("Wobbuffet used Jump Kick!"); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); HP_BAR(player, damage: maxHp / 8); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Spiky Shield!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Spiky Shield!"); if (faintOnSpiky){ MESSAGE("Wobbuffet fainted!"); SEND_IN_MESSAGE("Wynaut"); diff --git a/test/battle/move_effect/reflect_type.c b/test/battle/move_effect/reflect_type.c index 0b610efe6e..fc152fc27f 100644 --- a/test/battle/move_effect/reflect_type.c +++ b/test/battle/move_effect/reflect_type.c @@ -102,7 +102,7 @@ SINGLE_BATTLE_TEST("Reflect Type does not affect Pokémon with no types") ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); HP_BAR(opponent); MESSAGE("Arcanine burned itself out!"); - MESSAGE("Foe Poliwrath used Reflect Type!"); + MESSAGE("The opposing Poliwrath used Reflect Type!"); MESSAGE("But it failed!"); } } @@ -121,7 +121,7 @@ SINGLE_BATTLE_TEST("Reflect Type copies a target's dual types") } SCENE { MESSAGE("Arcanine used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, player); - MESSAGE("Arcanine's type changed to match the Foe Poliwrath's!"); + MESSAGE("Arcanine became the same type as the opposing Poliwrath!"); } THEN { EXPECT_EQ(player->types[0], TYPE_WATER); EXPECT_EQ(player->types[1], TYPE_FIGHTING); @@ -143,7 +143,7 @@ SINGLE_BATTLE_TEST("Reflect Type copies a target's pure type") } SCENE { MESSAGE("Arcanine used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, player); - MESSAGE("Arcanine's type changed to match the Foe Sudowoodo's!"); + MESSAGE("Arcanine became the same type as the opposing Sudowoodo!"); } THEN { EXPECT_EQ(player->types[0], TYPE_ROCK); EXPECT_EQ(player->types[1], TYPE_ROCK); @@ -166,18 +166,18 @@ SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's types[0] TURN { MOVE(player, MOVE_REFLECT_TYPE); } } SCENE { // Turn 1 - MESSAGE("Foe Arcanine used Burn Up!"); + MESSAGE("The opposing Arcanine used Burn Up!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, opponent); HP_BAR(player); - MESSAGE("Foe Arcanine burned itself out!"); + MESSAGE("The opposing Arcanine burned itself out!"); // Turn 2 MESSAGE("Wobbuffet used Forest's Curse!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FORESTS_CURSE, player); - MESSAGE("Grass type was added to Foe Arcanine!"); + MESSAGE("Grass type was added to the opposing Arcanine!"); // Turn 3 MESSAGE("Wobbuffet used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, player); - MESSAGE("Wobbuffet's type changed to match the Foe Arcanine's!"); + MESSAGE("Wobbuffet became the same type as the opposing Arcanine!"); } THEN { EXPECT_EQ(player->types[0], TYPE_NORMAL); EXPECT_EQ(player->types[1], TYPE_NORMAL); diff --git a/test/battle/move_effect/relic_song.c b/test/battle/move_effect/relic_song.c index 3ea405cc50..e7569c7e38 100644 --- a/test/battle/move_effect/relic_song.c +++ b/test/battle/move_effect/relic_song.c @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Relic Song is prevented by Soundproof") TURN { MOVE(player, MOVE_RELIC_SONG); } } SCENE { ABILITY_POPUP(opponent, ABILITY_SOUNDPROOF); - MESSAGE("Foe Voltorb's Soundproof blocks Relic Song!"); + MESSAGE("The opposing Voltorb's Soundproof blocks Relic Song!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); HP_BAR(opponent); @@ -64,7 +64,7 @@ SINGLE_BATTLE_TEST("Relic Song is blocked by Throat Chop") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THROAT_CHOP, opponent); HP_BAR(player); - MESSAGE("Wobbuffet can't use Relic Song due to Throat Chop!"); + MESSAGE("The effects of Throat Chop prevent Wobbuffet from using certain moves!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); } } @@ -134,7 +134,7 @@ SINGLE_BATTLE_TEST("Relic Song transformation is the last thing that happens aft } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); HP_BAR(opponent); - MESSAGE("Foe Gossifleur fainted!"); + MESSAGE("The opposing Gossifleur fainted!"); ABILITY_POPUP(opponent, ABILITY_COTTON_DOWN); MESSAGE("Meloetta's Speed fell!"); MESSAGE("Meloetta transformed!"); @@ -191,7 +191,7 @@ SINGLE_BATTLE_TEST("Relic Song transforms Meloetta after Magician was activated" ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); HP_BAR(opponent); ABILITY_POPUP(player, ABILITY_MAGICIAN); - MESSAGE("Meloetta stole Foe Delphox's Potion!"); + MESSAGE("Meloetta stole the opposing Delphox's Potion!"); MESSAGE("Meloetta transformed!"); } THEN { EXPECT_EQ(player->species, SPECIES_MELOETTA_PIROUETTE); diff --git a/test/battle/move_effect/revival_blessing.c b/test/battle/move_effect/revival_blessing.c index 46108ce497..dbeda39f91 100644 --- a/test/battle/move_effect/revival_blessing.c +++ b/test/battle/move_effect/revival_blessing.c @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Revival Blessing revives a fainted party member for an oppon } WHEN { TURN { MOVE(opponent, MOVE_REVIVAL_BLESSING, partyIndex:1); } } SCENE { - MESSAGE("Foe Raichu used Revival Blessing!"); + MESSAGE("The opposing Raichu used Revival Blessing!"); MESSAGE("Pichu was revived and is ready to fight again!"); } } @@ -70,10 +70,10 @@ DOUBLE_BATTLE_TEST("Revival Blessing cannot revive a partner's party member") TURN { MOVE(user, MOVE_REVIVAL_BLESSING, partyIndex:4); } } SCENE { if (user == opponentLeft) { - MESSAGE("Foe Wobbuffet used Revival Blessing!"); + MESSAGE("The opposing Wobbuffet used Revival Blessing!"); MESSAGE("But it failed!"); } else { - MESSAGE("Foe Wynaut used Revival Blessing!"); + MESSAGE("The opposing Wynaut used Revival Blessing!"); MESSAGE("Wynaut was revived and is ready to fight again!"); } } @@ -91,8 +91,8 @@ DOUBLE_BATTLE_TEST("Revival Blessing doesn't prevent revived battlers from losin MOVE(opponentLeft, MOVE_REVIVAL_BLESSING, partyIndex: 1); } } SCENE { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Foe Wynaut fainted!"); - MESSAGE("Foe Wobbuffet used Revival Blessing!"); + MESSAGE("The opposing Wynaut fainted!"); + MESSAGE("The opposing Wobbuffet used Revival Blessing!"); MESSAGE("Wynaut was revived and is ready to fight again!"); NOT { MESSAGE("Wynaut used Celebrate!"); } } @@ -113,16 +113,16 @@ DOUBLE_BATTLE_TEST("Revival Blessing correctly updates battler absent flags") // Turn 1 MESSAGE("Salamence used Earthquake!"); HP_BAR(opponentLeft); - MESSAGE("Foe Geodude fainted!"); + MESSAGE("The opposing Geodude fainted!"); MESSAGE("It doesn't affect Pidgeot…"); - MESSAGE("It doesn't affect Foe Starly…"); - MESSAGE("Foe Starly used Revival Blessing!"); + MESSAGE("It doesn't affect the opposing Starly…"); + MESSAGE("The opposing Starly used Revival Blessing!"); MESSAGE("Geodude was revived and is ready to fight again!"); // Should have prefix but it doesn't currently. // Turn 2 MESSAGE("Salamence used Earthquake!"); HP_BAR(opponentLeft); - MESSAGE("Foe Geodude fainted!"); + MESSAGE("The opposing Geodude fainted!"); MESSAGE("It doesn't affect Pidgeot…"); - MESSAGE("It doesn't affect Foe Starly…"); + MESSAGE("It doesn't affect the opposing Starly…"); } } diff --git a/test/battle/move_effect/roar.c b/test/battle/move_effect/roar.c index 90e0fd1b47..f67a24bba1 100644 --- a/test/battle/move_effect/roar.c +++ b/test/battle/move_effect/roar.c @@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Roar switches the target with a random non-fainted replaceme TURN { MOVE(player, MOVE_ROAR); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_ROAR, player); - MESSAGE("Foe Bulbasaur was dragged out!"); + MESSAGE("The opposing Bulbasaur was dragged out!"); } } @@ -38,7 +38,7 @@ DOUBLE_BATTLE_TEST("Roar switches the target with a random non-battler, non-fain TURN { MOVE(playerLeft, MOVE_ROAR, target: opponentRight); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_ROAR, playerLeft); - MESSAGE("Foe Bulbasaur was dragged out!"); + MESSAGE("The opposing Bulbasaur was dragged out!"); } } diff --git a/test/battle/move_effect/roost.c b/test/battle/move_effect/roost.c index b4c0186bf0..449119a89a 100644 --- a/test/battle/move_effect/roost.c +++ b/test/battle/move_effect/roost.c @@ -96,12 +96,12 @@ SINGLE_BATTLE_TEST("Roost suppresses the user's Flying-typing this turn, then re // Turn 1: EQ hits when Roosted MESSAGE("Skarmory used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Skarmory regained health!"); - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("Skarmory's HP was restored."); + MESSAGE("The opposing Wobbuffet used Earthquake!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); MESSAGE("It's super effective!"); // Turn 2: EQ has no effect because Roost expired - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); MESSAGE("It doesn't affect Skarmory…"); NOT HP_BAR(player); @@ -140,7 +140,7 @@ SINGLE_BATTLE_TEST("Roost, if used by a Flying/Flying type, treats the user as a } SCENE { MESSAGE("Tornadus used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Tornadus regained health!"); + MESSAGE("Tornadus's HP was restored."); if (B_ROOST_PURE_FLYING >= GEN_5) // >= Gen. 5, Pokemon becomes pure Normal-type { @@ -214,7 +214,7 @@ SINGLE_BATTLE_TEST("Roost, if used by a Mystery/Flying type, treats the user as // Turn 2: Use Roost to now be treated as a Mystery/Mystery type MESSAGE("Moltres used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Moltres regained health!"); + MESSAGE("Moltres's HP was restored."); ANIMATION(ANIM_TYPE_MOVE, damagingMove, opponent); NONE_OF { MESSAGE("It's super effective!"); @@ -241,11 +241,11 @@ DOUBLE_BATTLE_TEST("Roost suppresses the user's not-yet-aquired Flying-type this } SCENE { MESSAGE("Kecleon used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, playerLeft); - MESSAGE("Kecleon regained health!"); - MESSAGE("Foe Pidgey used Gust!"); + MESSAGE("Kecleon's HP was restored."); + MESSAGE("The opposing Pidgey used Gust!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponentLeft); MESSAGE("Kecleon's Color Change made it the Flying type!"); - MESSAGE("Foe Sandshrew used Earthquake!"); + MESSAGE("The opposing Sandshrew used Earthquake!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponentRight); MESSAGE("Kecleon's Color Change made it the Ground type!"); } @@ -263,8 +263,8 @@ SINGLE_BATTLE_TEST("Roost prevents a Flying-type user from being protected by De } SCENE { MESSAGE("Rayquaza used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Rayquaza regained health!"); - MESSAGE("Foe Wobbuffet used Ice Beam!"); + MESSAGE("Rayquaza's HP was restored."); + MESSAGE("The opposing Wobbuffet used Ice Beam!"); NOT MESSAGE("The mysterious strong winds weakened the attack!"); } } @@ -282,11 +282,11 @@ SINGLE_BATTLE_TEST("Roost does not undo other type-changing effects at the end o } SCENE { MESSAGE("Swellow used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Swellow regained health!"); - MESSAGE("Foe Wobbuffet used Soak!"); + MESSAGE("Swellow's HP was restored."); + MESSAGE("The opposing Wobbuffet used Soak!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SOAK, opponent); MESSAGE("Swellow transformed into the Water type!"); - MESSAGE("Foe Wobbuffet used Vine Whip!"); + MESSAGE("The opposing Wobbuffet used Vine Whip!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_VINE_WHIP, opponent); MESSAGE("It's super effective!"); } @@ -305,7 +305,7 @@ SINGLE_BATTLE_TEST("Roost's effect is lifted after Grassy Terrain's healing") } SCENE { MESSAGE("Swellow used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Swellow regained health!"); + MESSAGE("Swellow's HP was restored."); MESSAGE("Swellow is healed by the grassy terrain!"); HP_BAR(player); } @@ -329,20 +329,20 @@ SINGLE_BATTLE_TEST("Roost's suppression prevents Reflect Type from copying any F // Turn 1: Reflect Type on Roosted Normal/Flying MESSAGE("Swellow used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Swellow regained health!"); - MESSAGE("Foe Wobbuffet used Reflect Type!"); + MESSAGE("Swellow's HP was restored."); + MESSAGE("The opposing Wobbuffet used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent); - MESSAGE("Foe Wobbuffet's type changed to match the Swellow's!"); + MESSAGE("The opposing Wobbuffet became the same type as Swellow!"); // Turn 2: EQ hits, Reflect Type on non-Roosted Normal/Flying MESSAGE("Swellow used Earthquake!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet used Reflect Type!"); + MESSAGE("The opposing Wobbuffet used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent); - MESSAGE("Foe Wobbuffet's type changed to match the Swellow's!"); + MESSAGE("The opposing Wobbuffet became the same type as Swellow!"); // Turn 3: EQ has no effect MESSAGE("Swellow used Earthquake!"); - MESSAGE("It doesn't affect Foe Wobbuffet…"); + MESSAGE("It doesn't affect the opposing Wobbuffet…"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, player); HP_BAR(opponent); @@ -360,8 +360,8 @@ SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Levitate") } SCENE { MESSAGE("Flygon used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Flygon regained health!"); - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("Flygon's HP was restored."); + MESSAGE("The opposing Wobbuffet used Earthquake!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); HP_BAR(player); @@ -379,8 +379,8 @@ SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Air Balloon } SCENE { MESSAGE("Wobbuffet used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Wobbuffet regained health!"); - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("Wobbuffet's HP was restored."); + MESSAGE("The opposing Wobbuffet used Earthquake!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); HP_BAR(player); @@ -400,12 +400,12 @@ SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Magnet Rise // Turn 1: Magnet Rise MESSAGE("Wobbuffet used Magnet Rise!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGNET_RISE, player); - MESSAGE("Wobbuffet levitated on electromagnetism!"); + MESSAGE("Wobbuffet levitated with electromagnetism!"); // Turn 2 MESSAGE("Wobbuffet used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Wobbuffet regained health!"); - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("Wobbuffet's HP was restored."); + MESSAGE("The opposing Wobbuffet used Earthquake!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); HP_BAR(player); @@ -423,14 +423,14 @@ SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Telekinesis TURN { MOVE(player, MOVE_ROOST); MOVE(opponent, MOVE_EARTHQUAKE); } } SCENE { // Turn 1: Telekinesis - MESSAGE("Foe Wobbuffet used Telekinesis!"); + MESSAGE("The opposing Wobbuffet used Telekinesis!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TELEKINESIS, opponent); MESSAGE("Wobbuffet was hurled into the air!"); // Turn 2 MESSAGE("Wobbuffet used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Wobbuffet regained health!"); - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("Wobbuffet's HP was restored."); + MESSAGE("The opposing Wobbuffet used Earthquake!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); HP_BAR(player); diff --git a/test/battle/move_effect/salt_cure.c b/test/battle/move_effect/salt_cure.c index 939e32f0a6..006a55d642 100644 --- a/test/battle/move_effect/salt_cure.c +++ b/test/battle/move_effect/salt_cure.c @@ -19,11 +19,11 @@ SINGLE_BATTLE_TEST("Salt Cure inflicts 1/8 of the target's maximum HP as damage } SCENE { s32 maxHP = GetMonData(&OPPONENT_PARTY[0], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_SALT_CURE, player); - MESSAGE("Foe Wobbuffet is being salt cured!"); + MESSAGE("The opposing Wobbuffet is being salt cured!"); for (j = 0; j < 4; j++) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SALT_CURE_DAMAGE, opponent); HP_BAR(opponent, damage: maxHP / 8); - MESSAGE("Foe Wobbuffet is hurt by Salt Cure!"); + MESSAGE("The opposing Wobbuffet is hurt by Salt Cure!"); } } } @@ -62,12 +62,12 @@ SINGLE_BATTLE_TEST("Salt Cure is removed when the afflicted Pokémon is switched TURN { SWITCH(opponent, 1); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SALT_CURE, player); - MESSAGE("Foe Wobbuffet is being salt cured!"); + MESSAGE("The opposing Wobbuffet is being salt cured!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SALT_CURE_DAMAGE, opponent); - MESSAGE("Foe Wobbuffet is hurt by Salt Cure!"); + MESSAGE("The opposing Wobbuffet is hurt by Salt Cure!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SALT_CURE_DAMAGE, opponent); - MESSAGE("Foe Wobbuffet is hurt by Salt Cure!"); + MESSAGE("The opposing Wobbuffet is hurt by Salt Cure!"); } } } @@ -81,8 +81,8 @@ SINGLE_BATTLE_TEST("If Salt Cure faints the target no status will be applied") TURN { MOVE(player, MOVE_SALT_CURE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SALT_CURE, player); - NOT MESSAGE("Foe Wobbuffet is being salt cured!"); - MESSAGE("Foe Wobbuffet fainted!"); + NOT MESSAGE("The opposing Wobbuffet is being salt cured!"); + MESSAGE("The opposing Wobbuffet fainted!"); } } @@ -95,7 +95,7 @@ SINGLE_BATTLE_TEST("Salt Cure does not get applied if hitting a Substitute") TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_SALT_CURE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SALT_CURE, player); - MESSAGE("The SUBSTITUTE took damage for Foe Wobbuffet!"); - NOT MESSAGE("Foe Wobbuffet is being salt cured!"); + MESSAGE("The substitute took damage for the opposing Wobbuffet!"); + NOT MESSAGE("The opposing Wobbuffet is being salt cured!"); } } diff --git a/test/battle/move_effect/semi_invulnerable.c b/test/battle/move_effect/semi_invulnerable.c index 3ba4889005..d3869bfe54 100644 --- a/test/battle/move_effect/semi_invulnerable.c +++ b/test/battle/move_effect/semi_invulnerable.c @@ -94,8 +94,8 @@ SINGLE_BATTLE_TEST("Semi-invulnerable moves make the user semi-invulnerable turn ANIMATION(ANIM_TYPE_MOVE, move, player); // Aerial Ace cannot miss unless the target is semi-invulnerable - MESSAGE("Foe Wobbuffet used Aerial Ace!"); - MESSAGE("Foe Wobbuffet's attack missed!"); + MESSAGE("The opposing Wobbuffet used Aerial Ace!"); + MESSAGE("The opposing Wobbuffet's attack missed!"); // Attack turn switch (move) { diff --git a/test/battle/move_effect/shed_tail.c b/test/battle/move_effect/shed_tail.c index 3b2417f7c7..51d7652460 100644 --- a/test/battle/move_effect/shed_tail.c +++ b/test/battle/move_effect/shed_tail.c @@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Shed Tail fails if the user doesn't have enough HP") } WHEN { TURN { MOVE(player, MOVE_SHED_TAIL); } } SCENE { - MESSAGE("It was too weak to make a SUBSTITUTE!"); + MESSAGE("But it does not have enough HP left to make a substitute!"); } } @@ -52,7 +52,7 @@ SINGLE_BATTLE_TEST("Shed Tail's HP cost can trigger a berry before the user swit TURN { MOVE(player, MOVE_SHED_TAIL); SEND_OUT(player, 1); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SHED_TAIL, player); - MESSAGE("Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("Wobbuffet restored its health using its Sitrus Berry!"); SEND_IN_MESSAGE("Wynaut"); } } diff --git a/test/battle/move_effect/shell_trap.c b/test/battle/move_effect/shell_trap.c index 40febf040e..d43893244a 100644 --- a/test/battle/move_effect/shell_trap.c +++ b/test/battle/move_effect/shell_trap.c @@ -108,14 +108,14 @@ DOUBLE_BATTLE_TEST("Shell Trap activates immediately after being hit on turn 1 a } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, playerLeft); MESSAGE("Wobbuffet set a shell trap!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); MESSAGE("Wobbuffet used Shell Trap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, playerLeft); HP_BAR(opponentLeft); HP_BAR(opponentRight); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wynaut used Celebrate!"); + MESSAGE("The opposing Wynaut used Celebrate!"); } } @@ -132,8 +132,8 @@ DOUBLE_BATTLE_TEST("Shell Trap activates immediately after being hit on turn 2 a } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, playerLeft); MESSAGE("Wobbuffet set a shell trap!"); - MESSAGE("Foe Wynaut used Celebrate!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wynaut used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); MESSAGE("Wobbuffet used Shell Trap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, playerLeft); @@ -157,8 +157,8 @@ DOUBLE_BATTLE_TEST("Shell Trap activates immediately after being hit on turn 3 a ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, playerLeft); MESSAGE("Wobbuffet set a shell trap!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wynaut used Celebrate!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wynaut used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); MESSAGE("Wobbuffet used Shell Trap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, playerLeft); @@ -188,7 +188,7 @@ DOUBLE_BATTLE_TEST("Shell Trap targets correctly if one of the opponents has fai ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, playerRight); - MESSAGE("Foe Scizor fainted!"); + MESSAGE("The opposing Scizor fainted!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft); diff --git a/test/battle/move_effect/sleep.c b/test/battle/move_effect/sleep.c index 05efb7ab74..834f606672 100644 --- a/test/battle/move_effect/sleep.c +++ b/test/battle/move_effect/sleep.c @@ -24,15 +24,15 @@ SINGLE_BATTLE_TEST("Hypnosis inflicts 1-3 turns of sleep") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPNOSIS, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); - MESSAGE("Foe Wobbuffet fell asleep!"); + MESSAGE("The opposing Wobbuffet fell asleep!"); STATUS_ICON(opponent, sleep: TRUE); for (count = 0; count < turns; ++count) { if (count < turns - 1) - MESSAGE("Foe Wobbuffet is fast asleep."); + MESSAGE("The opposing Wobbuffet is fast asleep."); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); } - MESSAGE("Foe Wobbuffet woke up!"); + MESSAGE("The opposing Wobbuffet woke up!"); STATUS_ICON(opponent, none: TRUE); } } diff --git a/test/battle/move_effect/smack_down.c b/test/battle/move_effect/smack_down.c index d68cb75ec3..eb924ea1ac 100644 --- a/test/battle/move_effect/smack_down.c +++ b/test/battle/move_effect/smack_down.c @@ -14,6 +14,6 @@ SINGLE_BATTLE_TEST("Smack Down does not ground mons behind substitutes") } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_SMACK_DOWN); } } SCENE { - NOT MESSAGE("Foe Skarmory fell straight down!"); + NOT MESSAGE("The opposing Skarmory fell straight down!"); } } diff --git a/test/battle/move_effect/smelling_salts.c b/test/battle/move_effect/smelling_salts.c index 311024a153..bb3f333a42 100644 --- a/test/battle/move_effect/smelling_salts.c +++ b/test/battle/move_effect/smelling_salts.c @@ -22,17 +22,17 @@ SINGLE_BATTLE_TEST("Smelling Salts does not cure paralyzed pokemons behind subst ANIMATION(ANIM_TYPE_MOVE, MOVE_SMELLING_SALTS, player); if (ability == ABILITY_INNER_FOCUS) { - MESSAGE("The SUBSTITUTE took damage for Foe Seismitoad!"); + MESSAGE("The substitute took damage for the opposing Seismitoad!"); NONE_OF { - MESSAGE("Foe Seismitoad's SUBSTITUTE faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. - MESSAGE("Foe Seismitoad was healed of paralysis!"); + MESSAGE("The opposing Seismitoad's substitute faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. + MESSAGE("The opposing Seismitoad was cured of paralysis!"); STATUS_ICON(opponent, none: TRUE); } } else { - MESSAGE("Foe Seismitoad was healed of paralysis!"); + MESSAGE("The opposing Seismitoad was cured of paralysis!"); STATUS_ICON(opponent, none: TRUE); } } @@ -52,12 +52,12 @@ SINGLE_BATTLE_TEST("Smelling Salts get incread power vs. paralyzed targets") ANIMATION(ANIM_TYPE_MOVE, MOVE_SMELLING_SALTS, player); if (status1 == STATUS1_PARALYSIS) { - MESSAGE("Foe Lotad fainted!"); + MESSAGE("The opposing Lotad fainted!"); } else { - NOT MESSAGE("Foe Lotad fainted!"); - MESSAGE("Foe Lotad used Celebrate!"); + NOT MESSAGE("The opposing Lotad fainted!"); + MESSAGE("The opposing Lotad used Celebrate!"); } } } diff --git a/test/battle/move_effect/sparkling_aria.c b/test/battle/move_effect/sparkling_aria.c index 0cbfdbc3e9..332cf8165c 100644 --- a/test/battle/move_effect/sparkling_aria.c +++ b/test/battle/move_effect/sparkling_aria.c @@ -18,8 +18,8 @@ DOUBLE_BATTLE_TEST("Sparkling Aria cures burns from all Pokemon on the field and } WHEN { TURN { MOVE(opponentLeft, MOVE_SUBSTITUTE); MOVE(opponentRight, MOVE_CELEBRATE); MOVE(playerRight, MOVE_CELEBRATE); MOVE(playerLeft, MOVE_SPARKLING_ARIA); } } SCENE { - MESSAGE("Foe Wobbuffet's burn was healed."); - MESSAGE("Wobbuffet's burn was healed."); - MESSAGE("Foe Wynaut's burn was healed."); + MESSAGE("The opposing Wobbuffet's burn was cured!"); + MESSAGE("Wobbuffet's burn was cured!"); + MESSAGE("The opposing Wynaut's burn was cured!"); } } diff --git a/test/battle/move_effect/special_attack_down.c b/test/battle/move_effect/special_attack_down.c index bf01aa0896..60d015d1cd 100644 --- a/test/battle/move_effect/special_attack_down.c +++ b/test/battle/move_effect/special_attack_down.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Confide lowers Special Attack", s16 damage) if (lowerSpecialAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFIDE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Sp. Atk fell!"); + MESSAGE("The opposing Wobbuffet's Sp. Atk fell!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponent); HP_BAR(player, captureDamage: &results[i].damage); diff --git a/test/battle/move_effect/spicy_extract.c b/test/battle/move_effect/spicy_extract.c index 8a66003ec7..c9ddb3c30d 100644 --- a/test/battle/move_effect/spicy_extract.c +++ b/test/battle/move_effect/spicy_extract.c @@ -16,9 +16,9 @@ SINGLE_BATTLE_TEST("Spicy Extract raises target's Attack by 2 stages and lowers } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack sharply rose!"); + MESSAGE("The opposing Wobbuffet's Attack sharply rose!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense harshly fell!"); + MESSAGE("The opposing Wobbuffet's Defense harshly fell!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 2); @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Spicy Extract is prevented by target's ability if it's Attac MESSAGE("Wobbuffet used Spicy Extract!"); if (ability == ABILITY_CLEAR_BODY) { ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); - MESSAGE("Foe Beldum's Clear Body prevents stat loss!"); + MESSAGE("The opposing Beldum's Clear Body prevents stat loss!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); @@ -73,13 +73,13 @@ SINGLE_BATTLE_TEST("Spicy Extract Defense loss is prevented by Big Pecks") MESSAGE("Wobbuffet used Spicy Extract!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Pidgey's Attack sharply rose!"); + MESSAGE("The opposing Pidgey's Attack sharply rose!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense harshly fell!"); + MESSAGE("The opposing Wobbuffet's Defense harshly fell!"); } ABILITY_POPUP(opponent, ABILITY_BIG_PECKS); - MESSAGE("Foe Pidgey's Big Pecks prevents Defense loss!"); + MESSAGE("The opposing Pidgey's Big Pecks prevents Defense loss!"); } } @@ -96,9 +96,9 @@ SINGLE_BATTLE_TEST("Spicy Extract bypasses accuracy checks") NOT MESSAGE("Wobbuffet's attack missed!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack sharply rose!"); + MESSAGE("The opposing Wobbuffet's Attack sharply rose!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense harshly fell!"); + MESSAGE("The opposing Wobbuffet's Defense harshly fell!"); } } @@ -110,7 +110,7 @@ SINGLE_BATTLE_TEST("Spicy Extract will fail if target is in a semi-invulnerabili } WHEN { TURN { MOVE(opponent, MOVE_DIVE); MOVE(player, MOVE_SPICY_EXTRACT); } } SCENE { - MESSAGE("Foe Wobbuffet used Dive!"); + MESSAGE("The opposing Wobbuffet used Dive!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DIVE, opponent); MESSAGE("Wobbuffet used Spicy Extract!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player); @@ -130,10 +130,10 @@ SINGLE_BATTLE_TEST("Spicy Extract stat changes will be inverted by Contrary") ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Snivy's Attack harshly fell!"); + MESSAGE("The opposing Snivy's Attack harshly fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Snivy's Defense sharply rose!"); + MESSAGE("The opposing Snivy's Defense sharply rose!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 2); EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2); @@ -152,11 +152,11 @@ SINGLE_BATTLE_TEST("Spicy Extract against Clear Amulet and Contrary raises Defen ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Snivy's Attack harshly fell!"); + MESSAGE("The opposing Snivy's Attack harshly fell!"); } - MESSAGE("Foe Snivy's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The effects of the Clear Amulet held by the opposing Snivy prevents its stats from being lowered!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Snivy's Defense sharply rose!"); + MESSAGE("The opposing Snivy's Defense sharply rose!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2); diff --git a/test/battle/move_effect/spikes.c b/test/battle/move_effect/spikes.c index 97207297f9..339a9f9a4b 100644 --- a/test/battle/move_effect/spikes.c +++ b/test/battle/move_effect/spikes.c @@ -28,11 +28,11 @@ SINGLE_BATTLE_TEST("Spikes damage on switch in") s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); for (count = 0; count < layers; ++count) { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); } MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / divisor); - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("The opposing Wynaut was hurt by the spikes!"); } } @@ -51,16 +51,16 @@ SINGLE_BATTLE_TEST("Spikes fails after 3 layers") } SCENE { s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); MESSAGE("Wobbuffet used Spikes!"); MESSAGE("But it failed!"); MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / 4); - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("The opposing Wynaut was hurt by the spikes!"); } } @@ -79,10 +79,10 @@ SINGLE_BATTLE_TEST("Spikes damage on subsequent switch ins") s32 maxHP1 = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP1 / 8); - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("The opposing Wynaut was hurt by the spikes!"); MESSAGE("2 sent out Wobbuffet!"); HP_BAR(opponent, damage: maxHP0 / 8); - MESSAGE("Foe Wobbuffet is hurt by spikes!"); + MESSAGE("The opposing Wobbuffet was hurt by the spikes!"); } } diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c index d6960f88d1..f1fff0fd1e 100644 --- a/test/battle/move_effect/sticky_web.c +++ b/test/battle/move_effect/sticky_web.c @@ -18,11 +18,11 @@ SINGLE_BATTLE_TEST("Sticky Web lowers Speed by 1 on switch-in") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); MESSAGE("2 sent out Wynaut!"); - MESSAGE("Foe Wynaut was caught in a Sticky Web!"); + MESSAGE("The opposing Wynaut was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wynaut's Speed fell!"); + MESSAGE("The opposing Wynaut's Speed fell!"); } } @@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Sticky Web can only be set up 1 time") } SCENE { MESSAGE("Wobbuffet used Sticky Web!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); MESSAGE("Wobbuffet used Sticky Web!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); @@ -62,16 +62,16 @@ DOUBLE_BATTLE_TEST("Sticky Web lowers Speed by 1 in a double battle after Explos TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, playerRight); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); MESSAGE("2 sent out Wynaut!"); MESSAGE("2 sent out Alakazam!"); - MESSAGE("Foe Alakazam was caught in a Sticky Web!"); + MESSAGE("The opposing Alakazam was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Alakazam's Speed fell!"); - MESSAGE("Foe Wynaut was caught in a Sticky Web!"); + MESSAGE("The opposing Alakazam's Speed fell!"); + MESSAGE("The opposing Wynaut was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wynaut's Speed fell!"); + MESSAGE("The opposing Wynaut's Speed fell!"); } } @@ -87,11 +87,11 @@ SINGLE_BATTLE_TEST("Sticky Web raises Speed by 1 for a Pokemon with Contrary") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); MESSAGE("2 sent out Shuckle!"); - MESSAGE("Foe Shuckle was caught in a Sticky Web!"); + MESSAGE("The opposing Shuckle was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Shuckle's Speed rose!"); + MESSAGE("The opposing Shuckle's Speed rose!"); } } @@ -119,23 +119,23 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - the TURN { SWITCH(playerRight, 2); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, BATTLER_OPPONENT); - MESSAGE("A sticky web spreads out on the ground around your team!"); + MESSAGE("A sticky web has been laid out on the ground around your team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, BATTLER_PLAYER); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); SEND_IN_MESSAGE("Corviknight"); - MESSAGE("Corviknight was caught in a Sticky Web!"); + MESSAGE("Corviknight was caught in a sticky web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, BATTLER_OPPONENT); if (opponentSetUpper == 0) { - MESSAGE("Foe Caterpie's Speed fell!"); + MESSAGE("The opposing Caterpie's Speed fell!"); NONE_OF { - MESSAGE("Foe Caterpie was caught in a Sticky Web!"); + MESSAGE("The opposing Caterpie was caught in a sticky web!"); } } else { - MESSAGE("Foe Weedle's Speed fell!"); + MESSAGE("The opposing Weedle's Speed fell!"); NONE_OF { - MESSAGE("Foe Weedle was caught in a Sticky Web!"); + MESSAGE("The opposing Weedle was caught in a sticky web!"); } } } @@ -166,18 +166,18 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o } SCENE { if (speedPlayer > speedOpponent) { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, playerRight); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponentLeft); - MESSAGE("A sticky web spreads out on the ground around your team!"); + MESSAGE("A sticky web has been laid out on the ground around your team!"); } else { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponentLeft); - MESSAGE("A sticky web spreads out on the ground around your team!"); + MESSAGE("A sticky web has been laid out on the ground around your team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, playerRight); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); } SEND_IN_MESSAGE("Corviknight"); - MESSAGE("Corviknight was caught in a Sticky Web!"); + MESSAGE("Corviknight was caught in a sticky web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } THEN { @@ -217,16 +217,16 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o TURN { SWITCH(playerRight, 2); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponentLeft); - MESSAGE("A sticky web spreads out on the ground around your team!"); + MESSAGE("A sticky web has been laid out on the ground around your team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MEMENTO, opponentLeft); - MESSAGE("Foe Caterpie fainted!"); + MESSAGE("The opposing Caterpie fainted!"); if (hasReplacement) { MESSAGE("2 sent out Pidgey!"); } SEND_IN_MESSAGE("Corviknight"); - MESSAGE("Corviknight was caught in a Sticky Web!"); + MESSAGE("Corviknight was caught in a sticky web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } THEN { @@ -251,7 +251,7 @@ SINGLE_BATTLE_TEST("Sticky Web is placed on the correct side after Explosion") ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); MESSAGE("Wobbuffet fainted!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponent); - MESSAGE("A sticky web spreads out on the ground around your team!"); + MESSAGE("A sticky web has been laid out on the ground around your team!"); } } @@ -268,6 +268,6 @@ SINGLE_BATTLE_TEST("Sticky Web is placed on the correct side after Memento") ANIMATION(ANIM_TYPE_MOVE, MOVE_MEMENTO, player); MESSAGE("Wobbuffet fainted!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponent); - MESSAGE("A sticky web spreads out on the ground around your team!"); + MESSAGE("A sticky web has been laid out on the ground around your team!"); } } diff --git a/test/battle/move_effect/stomping_tantrum.c b/test/battle/move_effect/stomping_tantrum.c index 1a5870fdd0..32747282e4 100644 --- a/test/battle/move_effect/stomping_tantrum.c +++ b/test/battle/move_effect/stomping_tantrum.c @@ -81,7 +81,7 @@ SINGLE_BATTLE_TEST("Stomping Tatrum will not deal double damage if target protec HP_BAR(opponent, captureDamage: &damage[0]); ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); HP_BAR(opponent, captureDamage: &damage[1]); @@ -125,7 +125,7 @@ SINGLE_BATTLE_TEST("Stomping Tatrum will deal double damage if user was immune t } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); HP_BAR(opponent, captureDamage: &damage[0]); - MESSAGE("It doesn't affect Foe Pidgey…"); + MESSAGE("It doesn't affect the opposing Pidgey…"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); HP_BAR(opponent, captureDamage: &damage[1]); } THEN { diff --git a/test/battle/move_effect/strength_sap.c b/test/battle/move_effect/strength_sap.c index 4747074270..0246d0881f 100644 --- a/test/battle/move_effect/strength_sap.c +++ b/test/battle/move_effect/strength_sap.c @@ -22,9 +22,9 @@ SINGLE_BATTLE_TEST("Strength Sap lowers Attack by 1 and restores HP based on tar MESSAGE("Wobbuffet used Strength Sap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack fell!"); + MESSAGE("The opposing Wobbuffet's Attack fell!"); HP_BAR(player, captureDamage: &results[i].hp); - MESSAGE("Foe Wobbuffet had its energy drained!"); + MESSAGE("The opposing Wobbuffet had its energy drained!"); } THEN { EXPECT_EQ(results[i].hp * -1, atkStat); } @@ -49,10 +49,10 @@ SINGLE_BATTLE_TEST("Strength Sap works exactly the same when attacker is behind MESSAGE("Wobbuffet used Strength Sap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack fell!"); + MESSAGE("The opposing Wobbuffet's Attack fell!"); HP_BAR(player, captureDamage: &results[i].hp); - NOT MESSAGE("The SUBSTITUTE took damage for Foe Wobbuffet!"); - MESSAGE("Foe Wobbuffet had its energy drained!"); + NOT MESSAGE("The substitute took damage for the opposing Wobbuffet!"); + MESSAGE("The opposing Wobbuffet had its energy drained!"); } THEN { EXPECT_EQ(results[i].hp * -1, atkStat); } @@ -97,9 +97,9 @@ SINGLE_BATTLE_TEST("Strength Sap lowers Attack by 1 and restores HP based on tar MESSAGE("Wobbuffet used Strength Sap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack fell!"); + MESSAGE("The opposing Wobbuffet's Attack fell!"); HP_BAR(player, captureDamage: &results[i].hp); - MESSAGE("Foe Wobbuffet had its energy drained!"); + MESSAGE("The opposing Wobbuffet had its energy drained!"); } THEN { if (statStage < DEFAULT_STAT_STAGE) { EXPECT_EQ(results[i].hp * -1, (60 * gStatStageRatios[statStage + 1][0] / gStatStageRatios[statStage + 1][1])); @@ -133,11 +133,11 @@ SINGLE_BATTLE_TEST("Strength Sap fails if target is at -6 Atk") NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack fell!"); + MESSAGE("The opposing Wobbuffet's Attack fell!"); HP_BAR(player); - MESSAGE("Foe Wobbuffet had its energy drained!"); + MESSAGE("The opposing Wobbuffet had its energy drained!"); } - MESSAGE("Foe Wobbuffet's Attack won't go lower!"); + MESSAGE("The opposing Wobbuffet's Attack won't go any lower!"); } } @@ -158,9 +158,9 @@ SINGLE_BATTLE_TEST("Strength Sap restores more HP if Big Root is held", s16 hp) MESSAGE("Wobbuffet used Strength Sap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack fell!"); + MESSAGE("The opposing Wobbuffet's Attack fell!"); HP_BAR(player, captureDamage: &results[i].hp); - MESSAGE("Foe Wobbuffet had its energy drained!"); + MESSAGE("The opposing Wobbuffet had its energy drained!"); } FINALLY { EXPECT_GT(abs(results[1].hp), abs(results[0].hp)); } @@ -184,10 +184,10 @@ SINGLE_BATTLE_TEST("Strength Sap makes attacker lose HP if target's ability is L MESSAGE("Wobbuffet used Strength Sap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack fell!"); + MESSAGE("The opposing Wobbuffet's Attack fell!"); ABILITY_POPUP(opponent, ABILITY_LIQUID_OOZE); HP_BAR(player, captureDamage: &lostHp); - MESSAGE("It sucked up the liquid ooze!"); + MESSAGE("Wobbuffet sucked up the liquid ooze!"); if (atkStat >= 490) { MESSAGE("Wobbuffet fainted!"); SEND_IN_MESSAGE("Wobbuffet"); diff --git a/test/battle/move_effect/substitute.c b/test/battle/move_effect/substitute.c index 5a3c973ebb..92e894fa07 100644 --- a/test/battle/move_effect/substitute.c +++ b/test/battle/move_effect/substitute.c @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Substitute creates a Substitute at the cost of 1/4 users max maxHP = GetMonData(&gPlayerParty[0], MON_DATA_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); HP_BAR(player, captureDamage: &costHP); - MESSAGE("Wobbuffet made a SUBSTITUTE!"); + MESSAGE("Wobbuffet put in a substitute!"); }THEN { EXPECT_EQ(maxHP / 4, costHP); } @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Substitute fails if the user doesn't have enough HP") } WHEN { TURN { MOVE(player, MOVE_SUBSTITUTE); } } SCENE { - MESSAGE("It was too weak to make a SUBSTITUTE!"); + MESSAGE("But it does not have enough HP left to make a substitute!"); } } @@ -51,7 +51,7 @@ SINGLE_BATTLE_TEST("Substitute's HP cost can trigger a berry") TURN { MOVE(player, MOVE_SUBSTITUTE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); - MESSAGE("Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("Wobbuffet restored its health using its Sitrus Berry!"); } } @@ -64,7 +64,7 @@ SINGLE_BATTLE_TEST("Substitute's HP cost doesn't trigger effects that trigger on TURN { MOVE(player, MOVE_SUBSTITUTE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); - MESSAGE("Wobbuffet made a SUBSTITUTE!"); + MESSAGE("Wobbuffet put in a substitute!"); NOT MESSAGE("Wobbuffet's Air Balloon popped!"); } } diff --git a/test/battle/move_effect/tailwind.c b/test/battle/move_effect/tailwind.c index 9cadc87599..5fa5356451 100644 --- a/test/battle/move_effect/tailwind.c +++ b/test/battle/move_effect/tailwind.c @@ -19,19 +19,19 @@ SINGLE_BATTLE_TEST("Tailwind applies for 4 turns") TURN {} TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Tailwind!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); } } @@ -49,7 +49,7 @@ DOUBLE_BATTLE_TEST("Tailwind affects partner on first turn") } SCENE { MESSAGE("Wobbuffet used Tailwind!"); MESSAGE("Wynaut used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); - MESSAGE("Foe Wynaut used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wynaut used Celebrate!"); } } diff --git a/test/battle/move_effect/teatime.c b/test/battle/move_effect/teatime.c index 398494a2c3..dfdc70c801 100644 --- a/test/battle/move_effect/teatime.c +++ b/test/battle/move_effect/teatime.c @@ -60,9 +60,9 @@ SINGLE_BATTLE_TEST("Teatime causes the user to consume its Berry, ignoring HP re } WHEN { TURN { MOVE(opponent, MOVE_TEATIME); } } SCENE { - MESSAGE("Foe Wobbuffet used Teatime!"); + MESSAGE("The opposing Wobbuffet used Teatime!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, opponent); - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } } @@ -76,7 +76,7 @@ SINGLE_BATTLE_TEST("Teatime causes other Pokemon to consume their Berry even if } SCENE { MESSAGE("Wobbuffet used Teatime!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, player); - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } } @@ -88,7 +88,7 @@ SINGLE_BATTLE_TEST("Teatime causes other Pokemon to consume their Berry even if } WHEN { TURN { MOVE(opponent, MOVE_TEATIME); } } SCENE { - MESSAGE("Foe Wobbuffet used Teatime!"); + MESSAGE("The opposing Wobbuffet used Teatime!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, opponent); MESSAGE("Using Liechi Berry, the Attack of Wobbuffet rose!"); } @@ -113,13 +113,13 @@ DOUBLE_BATTLE_TEST("Teatime causes all Pokémon to consume their berry") { MESSAGE("Wobbuffet used Teatime!"); } else { - MESSAGE("Foe Wobbuffet used Teatime!"); + MESSAGE("The opposing Wobbuffet used Teatime!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, user); MESSAGE("Using Liechi Berry, the Attack of Wobbuffet rose!"); - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); MESSAGE("Using Liechi Berry, the Attack of Wobbuffet rose!"); - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } } @@ -151,7 +151,7 @@ SINGLE_BATTLE_TEST("Teatime does not affect Pokémon in the semi-invulnerable tu MESSAGE("Wobbuffet used Teatime!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, player); - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } } } @@ -177,7 +177,7 @@ SINGLE_BATTLE_TEST("Teatime triggers Volt Absorb if it has been affected by Elec MOVE(opponent, MOVE_TEATIME); } } SCENE { - MESSAGE("Foe Wobbuffet used Teatime!"); + MESSAGE("The opposing Wobbuffet used Teatime!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, opponent); if (shouldTriggerAbility) { @@ -188,7 +188,7 @@ SINGLE_BATTLE_TEST("Teatime triggers Volt Absorb if it has been affected by Elec NOT ABILITY_POPUP(player, ABILITY_VOLT_ABSORB); MESSAGE("Using Liechi Berry, the Attack of Jolteon rose!"); } - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } } @@ -213,7 +213,7 @@ SINGLE_BATTLE_TEST("Teatime triggers Lightning Rod if it has been affected by El MOVE(opponent, MOVE_TEATIME); } } SCENE { - MESSAGE("Foe Wobbuffet used Teatime!"); + MESSAGE("The opposing Wobbuffet used Teatime!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, opponent); if (shouldTriggerAbility) { @@ -227,7 +227,7 @@ SINGLE_BATTLE_TEST("Teatime triggers Lightning Rod if it has been affected by El } MESSAGE("Using Liechi Berry, the Attack of Pikachu rose!"); } - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } } @@ -252,7 +252,7 @@ SINGLE_BATTLE_TEST("Teatime triggers Motor Drive if it has been affected by Elec MOVE(opponent, MOVE_TEATIME); } } SCENE { - MESSAGE("Foe Wobbuffet used Teatime!"); + MESSAGE("The opposing Wobbuffet used Teatime!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, opponent); if (shouldTriggerAbility) { @@ -266,6 +266,6 @@ SINGLE_BATTLE_TEST("Teatime triggers Motor Drive if it has been affected by Elec } MESSAGE("Using Liechi Berry, the Attack of Electivire rose!"); } - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } } diff --git a/test/battle/move_effect/telekinesis.c b/test/battle/move_effect/telekinesis.c index 3da96a08b9..746c42d053 100644 --- a/test/battle/move_effect/telekinesis.c +++ b/test/battle/move_effect/telekinesis.c @@ -18,8 +18,8 @@ SINGLE_BATTLE_TEST("Telekinesis makes the target unable to avoid any attacks mad TURN { MOVE(player, MOVE_SCREECH, hit:FALSE); } } SCENE { MESSAGE("Wobbuffet used Telekinesis!"); - MESSAGE("Foe Wynaut was hurled into the air!"); - MESSAGE("Foe Wynaut used Minimize!"); + MESSAGE("The opposing Wynaut was hurled into the air!"); + MESSAGE("The opposing Wynaut used Minimize!"); MESSAGE("Wobbuffet used Screech!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCREECH, player); NOT MESSAGE("Wobbuffet's attack missed!"); @@ -37,10 +37,10 @@ SINGLE_BATTLE_TEST("Telekinesis ends after 3 turns") TURN { } } SCENE { MESSAGE("Wobbuffet used Telekinesis!"); - MESSAGE("Foe Wynaut was hurled into the air!"); + MESSAGE("The opposing Wynaut was hurled into the air!"); MESSAGE("Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wynaut was freed from the telekinesis!"); + MESSAGE("The opposing Wynaut was freed from the telekinesis!"); } } @@ -59,13 +59,13 @@ SINGLE_BATTLE_TEST("Telekinesis makes the target immune to Ground-type attacks") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLDOZE, player); HP_BAR(opponent); MESSAGE("Wobbuffet used Telekinesis!"); - MESSAGE("Foe Wynaut was hurled into the air!"); + MESSAGE("The opposing Wynaut was hurled into the air!"); MESSAGE("Wobbuffet used Bulldoze!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLDOZE, player); HP_BAR(opponent); } - MESSAGE("It doesn't affect Foe Wynaut…"); + MESSAGE("It doesn't affect the opposing Wynaut…"); } } diff --git a/test/battle/move_effect/tera_blast.c b/test/battle/move_effect/tera_blast.c index 4fcb52be3a..80e960a1af 100644 --- a/test/battle/move_effect/tera_blast.c +++ b/test/battle/move_effect/tera_blast.c @@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Tera Blast has correct effectiveness for every Tera Type") TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); } } SCENE { if (species == SPECIES_GASTLY && type == TYPE_NORMAL) - MESSAGE("It doesn't affect Foe Gastly…"); + MESSAGE("It doesn't affect the opposing Gastly…"); else MESSAGE("It's super effective!"); } @@ -180,7 +180,7 @@ SINGLE_BATTLE_TEST("Flying-type Tera Blast does not have its priority boosted by } WHEN { TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_QUICK_ATTACK); } } SCENE { - MESSAGE("Foe Wobbuffet used Quick Attack!"); + MESSAGE("The opposing Wobbuffet used Quick Attack!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, opponent); MESSAGE("Talonflame used Tera Blast!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player); diff --git a/test/battle/move_effect/tera_starstorm.c b/test/battle/move_effect/tera_starstorm.c index 8b1ff41c75..b6b4571644 100644 --- a/test/battle/move_effect/tera_starstorm.c +++ b/test/battle/move_effect/tera_starstorm.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Tera Starstorm changes from Normal-type to Stellar-type if u MESSAGE("Terapagos used Tera Starstorm!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_STARSTORM, player); HP_BAR(opponent); - NOT { MESSAGE("It doesn't affect Foe Misdreavus…"); } + NOT { MESSAGE("It doesn't affect the opposing Misdreavus…"); } } } @@ -71,6 +71,6 @@ SINGLE_BATTLE_TEST("Tera Starstorm remains Normal-type if used by Pokemon other TURN { MOVE(player, MOVE_TERA_STARSTORM, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Wobbuffet used Tera Starstorm!"); - MESSAGE("It doesn't affect Foe Misdreavus…"); + MESSAGE("It doesn't affect the opposing Misdreavus…"); } } diff --git a/test/battle/move_effect/thousand_arrows.c b/test/battle/move_effect/thousand_arrows.c index 8deea06fbe..09e726fa20 100644 --- a/test/battle/move_effect/thousand_arrows.c +++ b/test/battle/move_effect/thousand_arrows.c @@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Thousand Arrows does not ground mons behind substitutes") } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_THOUSAND_ARROWS); } } SCENE { - NOT MESSAGE("Foe Skarmory fell straight down!"); + NOT MESSAGE("The opposing Skarmory fell straight down!"); } } @@ -33,11 +33,11 @@ SINGLE_BATTLE_TEST("Thousand Arrows does neutral damage to non-grounded Flying t } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THOUSAND_ARROWS, player); if (pokemon == SPECIES_SKARMORY) { - MESSAGE("Foe Skarmory fell straight down!"); - MESSAGE("Foe Skarmory used Celebrate!"); + MESSAGE("The opposing Skarmory fell straight down!"); + MESSAGE("The opposing Skarmory used Celebrate!"); } else { - MESSAGE("Foe Scyther fell straight down!"); - MESSAGE("Foe Scyther used Celebrate!"); + MESSAGE("The opposing Scyther fell straight down!"); + MESSAGE("The opposing Scyther used Celebrate!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); MESSAGE("Congratulations, 1!"); diff --git a/test/battle/move_effect/tidy_up.c b/test/battle/move_effect/tidy_up.c index 338ba90dc0..986e9a2ba3 100644 --- a/test/battle/move_effect/tidy_up.c +++ b/test/battle/move_effect/tidy_up.c @@ -61,12 +61,12 @@ SINGLE_BATTLE_TEST("Tidy Up removes Substitute") } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_TIDY_UP); } } SCENE { - MESSAGE("Foe Wobbuffet used Substitute!"); + MESSAGE("The opposing Wobbuffet used Substitute!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); - MESSAGE("Foe Wobbuffet made a SUBSTITUTE!"); + MESSAGE("The opposing Wobbuffet put in a substitute!"); MESSAGE("Wobbuffet used Tidy Up!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TIDY_UP, player); - MESSAGE("Foe Wobbuffet's SUBSTITUTE faded!"); + MESSAGE("The opposing Wobbuffet's substitute faded!"); MESSAGE("Tidying up complete!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Attack rose!"); diff --git a/test/battle/move_effect/torment.c b/test/battle/move_effect/torment.c index 376267f396..dc911691b0 100644 --- a/test/battle/move_effect/torment.c +++ b/test/battle/move_effect/torment.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Torment prevents consecutive move uses") TURN { MOVE(opponent, MOVE_SPLASH, allowed: FALSE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TORMENT, player); - MESSAGE("Foe Wobbuffet was subjected to torment!"); + MESSAGE("The opposing Wobbuffet was subjected to torment!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } diff --git a/test/battle/move_effect/toxic_spikes.c b/test/battle/move_effect/toxic_spikes.c index 6bf2e0d2a3..fd18f57b97 100644 --- a/test/battle/move_effect/toxic_spikes.c +++ b/test/battle/move_effect/toxic_spikes.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on switch in") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); MESSAGE("2 sent out Wynaut!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); @@ -38,9 +38,9 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts bad poison on switch in") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); MESSAGE("2 sent out Wynaut!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, badPoison: TRUE); @@ -61,9 +61,9 @@ SINGLE_BATTLE_TEST("Toxic Spikes fails after 2 layers") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); MESSAGE("Wobbuffet used Toxic Spikes!"); MESSAGE("But it failed!"); MESSAGE("2 sent out Wynaut!"); @@ -176,7 +176,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes are removed by grounded Poison-type Pokémon on } SCENE { if (grounded) { NOT STATUS_ICON(opponent, poison: TRUE); - MESSAGE("The poison spikes disappeared from around the opposing team's feet!"); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); NOT STATUS_ICON(opponent, poison: TRUE); } else { NOT STATUS_ICON(opponent, poison: TRUE); @@ -204,7 +204,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes are removed by Poison-type Pokémon affected by TURN { SWITCH(opponent, 0); } } SCENE { NOT STATUS_ICON(opponent, poison: TRUE); - MESSAGE("The poison spikes disappeared from around the opposing team's feet!"); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); NOT STATUS_ICON(opponent, poison: TRUE); } } @@ -222,15 +222,15 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on switch in after Primal Rever TURN { SWITCH(player, 1); } TURN { MOVE(player, MOVE_MEMENTO); SEND_OUT(player, 2); } } SCENE { - MESSAGE("Foe Wobbuffet used Toxic Spikes!"); + MESSAGE("The opposing Wobbuffet used Toxic Spikes!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, opponent); - MESSAGE("Poison Spikes were scattered all around your team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around your team!"); // Switch in SEND_IN_MESSAGE("Groudon"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); STATUS_ICON(player, poison: TRUE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); // Memento MESSAGE("Groudon used Memento!"); MESSAGE("Groudon fainted!"); diff --git a/test/battle/move_effect/two_turns_attack.c b/test/battle/move_effect/two_turns_attack.c index 4b7adc6f81..efeb419ce5 100644 --- a/test/battle/move_effect/two_turns_attack.c +++ b/test/battle/move_effect/two_turns_attack.c @@ -208,29 +208,29 @@ SINGLE_BATTLE_TEST("Solar Beam and Solar Blade can be used instantly in Sunlight TURN { SKIP_TURN(player); } } SCENE { if (move1 == MOVE_SUNNY_DAY) { - NOT MESSAGE("Wobbuffet took in sunlight!"); + NOT MESSAGE("Wobbuffet absorbed light!"); } else { if (move2 == MOVE_SOLAR_BEAM) { if (B_UPDATED_MOVE_DATA >= GEN_5) { MESSAGE("Wobbuffet used Solar Beam!"); - MESSAGE("Wobbuffet took in sunlight!"); + MESSAGE("Wobbuffet absorbed light!"); ANIMATION(ANIM_TYPE_MOVE, move2, player); } else { NOT MESSAGE("Wobbuffet used Solar Beam!"); ANIMATION(ANIM_TYPE_MOVE, move2, player); - MESSAGE("Wobbuffet took in sunlight!"); + MESSAGE("Wobbuffet absorbed light!"); } MESSAGE("Wobbuffet used Solar Beam!"); } else { if (B_UPDATED_MOVE_DATA >= GEN_5) { MESSAGE("Wobbuffet used Solar Blade!"); - MESSAGE("Wobbuffet took in sunlight!"); + MESSAGE("Wobbuffet absorbed light!"); ANIMATION(ANIM_TYPE_MOVE, move2, player); } else { NOT MESSAGE("Wobbuffet used Solar Blade!"); ANIMATION(ANIM_TYPE_MOVE, move2, player); - MESSAGE("Wobbuffet took in sunlight!"); + MESSAGE("Wobbuffet absorbed light!"); } MESSAGE("Wobbuffet used Solar Blade!"); } diff --git a/test/battle/move_effect/upper_hand.c b/test/battle/move_effect/upper_hand.c index 6a041182fe..69b2b75ef9 100644 --- a/test/battle/move_effect/upper_hand.c +++ b/test/battle/move_effect/upper_hand.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Upper Hand succeeds if the target is using a priority attack } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_UPPER_HAND, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EXTREME_SPEED, opponent); } } @@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Upper Hand succeeds if the target's move is boosted in prior } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_UPPER_HAND, player); HP_BAR(opponent); - MESSAGE("Foe Comfey flinched!"); + MESSAGE("The opposing Comfey flinched and couldn't move!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAINING_KISS, opponent); } } diff --git a/test/battle/move_effect/uproar.c b/test/battle/move_effect/uproar.c index c463a8eaa1..a97422390f 100644 --- a/test/battle/move_effect/uproar.c +++ b/test/battle/move_effect/uproar.c @@ -19,11 +19,11 @@ DOUBLE_BATTLE_TEST("Uproar status causes sleeping pokemon to wake up during an a } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_UPROAR, playerLeft); HP_BAR(opponentRight); - MESSAGE("Wobbuffet woke up in the UPROAR!"); + MESSAGE("The uproar woke Wobbuffet!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); - MESSAGE("Foe Voltorb woke up in the UPROAR!"); + MESSAGE("The uproar woke the opposing Voltorb!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); - MESSAGE("Foe Wobbuffet woke up in the UPROAR!"); + MESSAGE("The uproar woke the opposing Wobbuffet!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); } } diff --git a/test/battle/move_effect/wake_up_slap.c b/test/battle/move_effect/wake_up_slap.c index 20b22ca660..0a881be100 100644 --- a/test/battle/move_effect/wake_up_slap.c +++ b/test/battle/move_effect/wake_up_slap.c @@ -21,15 +21,15 @@ SINGLE_BATTLE_TEST("Wake-Up Slap does not cure paralyzed pokemons behind substit } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WAKE_UP_SLAP, player); if (ability == ABILITY_INNER_FOCUS) { - MESSAGE("The SUBSTITUTE took damage for Foe Seismitoad!"); + MESSAGE("The substitute took damage for the opposing Seismitoad!"); NONE_OF { - MESSAGE("Foe Seismitoad's SUBSTITUTE faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. - MESSAGE("Foe Seismitoad woke up!"); + MESSAGE("The opposing Seismitoad's substitute faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. + MESSAGE("The opposing Seismitoad woke up!"); STATUS_ICON(opponent, none: TRUE); } } else { - MESSAGE("Foe Seismitoad woke up!"); + MESSAGE("The opposing Seismitoad woke up!"); STATUS_ICON(opponent, none: TRUE); } } @@ -48,10 +48,10 @@ SINGLE_BATTLE_TEST("Wake-Up Slap gets increased power against sleeping targets") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WAKE_UP_SLAP, player); if (status1 == STATUS1_SLEEP) { - MESSAGE("Foe Lotad fainted!"); + MESSAGE("The opposing Lotad fainted!"); } else { - NOT MESSAGE("Foe Lotad fainted!"); - MESSAGE("Foe Lotad used Celebrate!"); + NOT MESSAGE("The opposing Lotad fainted!"); + MESSAGE("The opposing Lotad used Celebrate!"); } } } diff --git a/test/battle/move_effect_secondary/bug_bite.c b/test/battle/move_effect_secondary/bug_bite.c index a274e34d5a..a55f7f9a2f 100644 --- a/test/battle/move_effect_secondary/bug_bite.c +++ b/test/battle/move_effect_secondary/bug_bite.c @@ -52,28 +52,28 @@ SINGLE_BATTLE_TEST("Bug Bite eats the target's berry and immediately gains its e HP_BAR(opponent); if (effect == HOLD_EFFECT_RESTORE_HP || effect == HOLD_EFFECT_ENIGMA_BERRY) { if (item == ITEM_ORAN_BERRY) { - MESSAGE("Wobbuffet's Oran Berry restored health!"); + MESSAGE("Wobbuffet restored its health using its Oran Berry!"); } else if (item == ITEM_SITRUS_BERRY) { - MESSAGE("Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("Wobbuffet restored its health using its Sitrus Berry!"); } else { - MESSAGE("Wobbuffet's Enigma Berry restored health!"); + MESSAGE("Wobbuffet restored its health using its Enigma Berry!"); } HP_BAR(player); } else if (effect == HOLD_EFFECT_RESTORE_PP) { - MESSAGE("Wobbuffet's Leppa Berry restored Bug Bite's PP!"); + MESSAGE("Wobbuffet restored PP to its move Bug Bite using its Leppa Berry!"); } else if (status1 != STATUS1_NONE) { if (status1 == STATUS1_BURN) { - MESSAGE("Wobbuffet's Rawst Berry healed its burn!"); + MESSAGE("Wobbuffet's Rawst Berry cured its burn!"); } else if (status1 == STATUS1_SLEEP) { - MESSAGE("Wobbuffet's Chesto Berry woke it from its sleep!"); + MESSAGE("Wobbuffet's Chesto Berry woke it up!"); } else if (status1 == STATUS1_PARALYSIS) { - MESSAGE("Wobbuffet's Cheri Berry cured paralysis!"); + MESSAGE("Wobbuffet's Cheri Berry cured its paralysis!"); } else if (status1 == STATUS1_TOXIC_POISON || status1 == STATUS1_POISON) { - MESSAGE("Wobbuffet's Pecha Berry cured poison!"); + MESSAGE("Wobbuffet's Pecha Berry cured its poison!"); } else if (status1 == STATUS1_FROSTBITE) { - MESSAGE("Wobbuffet's Aspear Berry healed its frostbite!"); + MESSAGE("Wobbuffet's Aspear Berry cured its frostbite!"); } NOT STATUS_ICON(player, status1); } @@ -126,10 +126,10 @@ SINGLE_BATTLE_TEST("Tanga Berry activates before Bug Bite") } SCENE { MESSAGE("Wobbuffet used Bug Bite!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet ate its Tanga Berry!"); + MESSAGE("The opposing Wobbuffet ate its Tanga Berry!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BUG_BITE, player); HP_BAR(opponent); - MESSAGE("Tanga Berry weakened the damage to Foe Wobbuffet!"); + MESSAGE("The Tanga Berry weakened the damage to the opposing Wobbuffet!"); } THEN { EXPECT_EQ(player->item, ITEM_NONE); } diff --git a/test/battle/move_effect_secondary/confusion.c b/test/battle/move_effect_secondary/confusion.c index bdfc57fc35..72a9639350 100644 --- a/test/battle/move_effect_secondary/confusion.c +++ b/test/battle/move_effect_secondary/confusion.c @@ -20,11 +20,11 @@ SINGLE_BATTLE_TEST("Alluring Voice confuses the target if the target raised a st HP_BAR(opponent); if (move == MOVE_SWORDS_DANCE) { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } } @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("Alluring Voice confuse effect is removed if it is Sheer Forc HP_BAR(opponent); NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } } diff --git a/test/battle/move_effect_secondary/flinch.c b/test/battle/move_effect_secondary/flinch.c index c54c9536fe..28b555f00f 100644 --- a/test/battle/move_effect_secondary/flinch.c +++ b/test/battle/move_effect_secondary/flinch.c @@ -25,20 +25,20 @@ SINGLE_BATTLE_TEST("Headbutt flinches the target if attacker is faster") ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player); HP_BAR(opponent); if (isFaster) { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } else { - NOT MESSAGE("Foe Wobbuffet flinched!"); + NOT MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } // 2nd turn ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player); HP_BAR(opponent); if (isFaster) { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } else { - NOT MESSAGE("Foe Wobbuffet flinched!"); + NOT MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } } } @@ -60,7 +60,7 @@ SINGLE_BATTLE_TEST("Protect always works when used after flinching") // 2nd turn ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, opponent); HP_BAR(player); - MESSAGE("Wobbuffet flinched!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); // 3rd turn diff --git a/test/battle/move_effect_secondary/order_up.c b/test/battle/move_effect_secondary/order_up.c index ea1980062c..8d286850a2 100644 --- a/test/battle/move_effect_secondary/order_up.c +++ b/test/battle/move_effect_secondary/order_up.c @@ -73,7 +73,7 @@ DOUBLE_BATTLE_TEST("Order Up increases a stat based on Tatsugiri's form even if ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Tatsugiri is hurt by poison!"); + MESSAGE("Tatsugiri was hurt by its poisoning!"); MESSAGE("Tatsugiri fainted!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_HAZE, opponentRight); // Remove previous stat boosts ANIMATION(ANIM_TYPE_MOVE, MOVE_ORDER_UP, playerRight); @@ -131,7 +131,7 @@ DOUBLE_BATTLE_TEST("Order Up is boosted by Sheer Force without removing the stat } WHEN { TURN { MOVE(opponentRight, MOVE_ENTRAINMENT, target: playerLeft); MOVE(playerLeft, MOVE_ORDER_UP, target: opponentLeft); } } SCENE { - MESSAGE("Foe Tauros used Entrainment!"); + MESSAGE("The opposing Tauros used Entrainment!"); MESSAGE("Dondozo acquired Sheer Force!"); MESSAGE("Dondozo used Order Up!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); @@ -157,10 +157,10 @@ DOUBLE_BATTLE_TEST("Order Up is always boosted by Sheer Force", s16 damage) MOVE(opponentLeft, move, target: playerLeft); MOVE(playerLeft, MOVE_ORDER_UP, target: opponentRight); } } SCENE { - MESSAGE("Foe Wobbuffet used Haze!"); + MESSAGE("The opposing Wobbuffet used Haze!"); if (move == MOVE_ENTRAINMENT) { - MESSAGE("Foe Tauros used Entrainment!"); + MESSAGE("The opposing Tauros used Entrainment!"); MESSAGE("Dondozo acquired Sheer Force!"); } MESSAGE("Dondozo used Order Up!"); diff --git a/test/battle/move_effect_secondary/pay_day.c b/test/battle/move_effect_secondary/pay_day.c index e448a4c935..3b0544a909 100644 --- a/test/battle/move_effect_secondary/pay_day.c +++ b/test/battle/move_effect_secondary/pay_day.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Pay Day Scatters coins around after it hits - singles") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PAY_DAY, player); HP_BAR(opponent); - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); } } @@ -32,6 +32,6 @@ DOUBLE_BATTLE_TEST("Pay Day Scatters coins around after it hits - doubles") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PAY_DAY, playerLeft); HP_BAR(opponentLeft); - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); } } diff --git a/test/battle/move_effect_secondary/psychic_noise.c b/test/battle/move_effect_secondary/psychic_noise.c index e8d50dc961..e44ae75abe 100644 --- a/test/battle/move_effect_secondary/psychic_noise.c +++ b/test/battle/move_effect_secondary/psychic_noise.c @@ -18,10 +18,10 @@ SINGLE_BATTLE_TEST("Psychic Noise blocks healing moves for 2 turns") TURN { MOVE(opponent, MOVE_RECOVER); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC_NOISE, player); - MESSAGE("Foe Wobbuffet was prevented from healing!"); - MESSAGE("Foe Wobbuffet was prevented from healing!"); + MESSAGE("The opposing Wobbuffet was prevented from healing!"); + MESSAGE("The opposing Wobbuffet was prevented from healing!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, opponent); - MESSAGE("Foe Wobbuffet's Heal Block wore off!"); + MESSAGE("The opposing Wobbuffet's Heal Block wore off!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_RECOVER, opponent); } } @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Psychic Noise is blocked by Soundproof") TURN { MOVE(player, MOVE_PSYCHIC_NOISE); MOVE(opponent, MOVE_RECOVER); } } SCENE { ABILITY_POPUP(opponent, ABILITY_SOUNDPROOF); - MESSAGE("Foe Voltorb's Soundproof blocks Psychic Noise!"); + MESSAGE("The opposing Voltorb's Soundproof blocks Psychic Noise!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_RECOVER, opponent); } } @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Psychic Noise heal block effect is blocked by Aroma Veil") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC_NOISE, player); ABILITY_POPUP(opponent, ABILITY_AROMA_VEIL); - MESSAGE("Foe Milcery is protected by an aromatic veil!"); + MESSAGE("The opposing Milcery is protected by an aromatic veil!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_RECOVER, opponent); } } @@ -67,7 +67,7 @@ DOUBLE_BATTLE_TEST("Psychic Noise heal block effect is blocked by partners Aroma } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC_NOISE, playerLeft); ABILITY_POPUP(opponentRight, ABILITY_AROMA_VEIL); - MESSAGE("Foe Wobbuffet is protected by an aromatic veil!"); + MESSAGE("The opposing Wobbuffet is protected by an aromatic veil!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_RECOVER, opponentLeft); } } diff --git a/test/battle/move_effect_secondary/rapid_spin.c b/test/battle/move_effect_secondary/rapid_spin.c index 0ba5e4f65f..4e490164d7 100644 --- a/test/battle/move_effect_secondary/rapid_spin.c +++ b/test/battle/move_effect_secondary/rapid_spin.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Rapin Spin blows away Wrap, hazards and raises Speed (Gen 8+ } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_RAPID_SPIN, player); - MESSAGE("Wobbuffet got free of Foe Wobbuffet's Wrap!"); + MESSAGE("Wobbuffet got free of the opposing Wobbuffet's Wrap!"); MESSAGE("Wobbuffet blew away Stealth Rock!"); #if B_SPEED_BUFFING_RAPID_SPIN >= GEN_8 ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -42,9 +42,9 @@ SINGLE_BATTLE_TEST("Mortal Spin blows away Wrap, hazards and poisons foe") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_MORTAL_SPIN, player); - MESSAGE("Wobbuffet got free of Foe Wobbuffet's Wrap!"); + MESSAGE("Wobbuffet got free of the opposing Wobbuffet's Wrap!"); MESSAGE("Wobbuffet blew away Stealth Rock!"); - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); STATUS_ICON(opponent, poison: TRUE); } } diff --git a/test/battle/move_effect_secondary/spikes.c b/test/battle/move_effect_secondary/spikes.c index b9c72930c2..1aa2630fd7 100644 --- a/test/battle/move_effect_secondary/spikes.c +++ b/test/battle/move_effect_secondary/spikes.c @@ -19,10 +19,10 @@ SINGLE_BATTLE_TEST("Ceaseless Edge sets up hazards after hitting the target") s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); MESSAGE("2 sent out Wobbuffet!"); HP_BAR(opponent, damage: maxHP / 8); - MESSAGE("Foe Wobbuffet is hurt by spikes!"); + MESSAGE("The opposing Wobbuffet was hurt by the spikes!"); } } @@ -43,22 +43,22 @@ SINGLE_BATTLE_TEST("Ceaseless Edge can set up to 3 layers of Spikes") ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - NOT MESSAGE("Spikes were scattered all around the opposing team!"); + NOT MESSAGE("Spikes were scattered on the ground all around the opposing team!"); MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / 4); - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("The opposing Wynaut was hurt by the spikes!"); } } diff --git a/test/battle/move_effect_secondary/stealth_rock.c b/test/battle/move_effect_secondary/stealth_rock.c index 034e2c347b..e9101b6591 100644 --- a/test/battle/move_effect_secondary/stealth_rock.c +++ b/test/battle/move_effect_secondary/stealth_rock.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Stone Axe sets up hazards after hitting the target") MESSAGE("Pointed stones float in the air around the opposing team!"); MESSAGE("2 sent out Wobbuffet!"); HP_BAR(opponent, damage: maxHP / 8); - MESSAGE("Pointed stones dug into Foe Wobbuffet!"); + MESSAGE("Pointed stones dug into the opposing Wobbuffet!"); } } @@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Stone Axe can set up pointed stones only once") MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / 8); - MESSAGE("Pointed stones dug into Foe Wynaut!"); + MESSAGE("Pointed stones dug into the opposing Wynaut!"); } } diff --git a/test/battle/move_effect_secondary/syrup_bomb.c b/test/battle/move_effect_secondary/syrup_bomb.c index 0fc55c3d60..9390041f6e 100644 --- a/test/battle/move_effect_secondary/syrup_bomb.c +++ b/test/battle/move_effect_secondary/syrup_bomb.c @@ -20,16 +20,16 @@ SINGLE_BATTLE_TEST("Syrup Bomb covers the foe in sticky syrup for 3 turns") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky candy syrup!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); } } } @@ -45,12 +45,12 @@ SINGLE_BATTLE_TEST("Sticky Syrup isn't applied again if the target is already co } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky candy syrup!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - NOT MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + NOT MESSAGE("The opposing Wobbuffet got covered in sticky candy syrup!"); } } @@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Syrup Bomb is prevented by Bulletproof") TURN { MOVE(player, MOVE_SYRUP_BOMB); } } SCENE { ABILITY_POPUP(opponent, ABILITY_BULLETPROOF); - MESSAGE("Foe Chespin's Bulletproof blocks Syrup Bomb!"); + MESSAGE("The opposing Chespin's Bulletproof blocks Syrup Bomb!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); @@ -92,32 +92,32 @@ SINGLE_BATTLE_TEST("Sticky Syrup speed reduction is prevented by Clear Body, Whi HP_BAR(opponent); if (species == SPECIES_BELDUM) { - MESSAGE("Foe Beldum got covered in sticky syrup!"); + MESSAGE("The opposing Beldum got covered in sticky candy syrup!"); ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Beldum's Clear Body prevents stat loss!"); + MESSAGE("The opposing Beldum's Clear Body prevents stat loss!"); NONE_OF { - MESSAGE("Foe Beldum's Speed fell!"); + MESSAGE("The opposing Beldum's Speed fell!"); } } else if (species == SPECIES_TORKOAL) { - MESSAGE("Foe Torkoal got covered in sticky syrup!"); + MESSAGE("The opposing Torkoal got covered in sticky candy syrup!"); ABILITY_POPUP(opponent, ABILITY_WHITE_SMOKE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); NONE_OF { - MESSAGE("Foe Torkoal's Speed fell!"); + MESSAGE("The opposing Torkoal's Speed fell!"); } } else if (species == SPECIES_SOLGALEO) { - MESSAGE("Foe Solgaleo got covered in sticky syrup!"); + MESSAGE("The opposing Solgaleo got covered in sticky candy syrup!"); ABILITY_POPUP(opponent, ABILITY_FULL_METAL_BODY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); NONE_OF { - MESSAGE("Foe Solgaleo's Speed fell!"); + MESSAGE("The opposing Solgaleo's Speed fell!"); } } } @@ -133,11 +133,11 @@ SINGLE_BATTLE_TEST("Sticky Syrup speed reduction is prevented by Clear Amulet") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); - MESSAGE("Foe Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The opposing Wobbuffet got covered in sticky candy syrup!"); + MESSAGE("The effects of the Clear Amulet held by the opposing Wobbuffet prevents its stats from being lowered!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); } } } @@ -161,11 +161,11 @@ SINGLE_BATTLE_TEST("Sticky syrup will not decrease speed further then minus six" } ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky candy syrup!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed won't go lower!"); + MESSAGE("The opposing Wobbuffet's Speed won't go any lower!"); NONE_OF { - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); } } } @@ -182,12 +182,12 @@ SINGLE_BATTLE_TEST("Sticky Syrup is removed when the user switches out") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky candy syrup!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); } } } @@ -206,14 +206,14 @@ SINGLE_BATTLE_TEST("Sticky Syrup is removed when the user faints") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky candy syrup!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player); MESSAGE("Wobbuffet fainted!"); SEND_IN_MESSAGE("Wynaut"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); } } } diff --git a/test/battle/move_effect_secondary/throat_chop.c b/test/battle/move_effect_secondary/throat_chop.c index edc026aed4..e640948c95 100644 --- a/test/battle/move_effect_secondary/throat_chop.c +++ b/test/battle/move_effect_secondary/throat_chop.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Throat Chop prevents the usage of sound moves") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THROAT_CHOP, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet can't use Hyper Voice due to Throat Chop!"); + MESSAGE("The effects of Throat Chop prevent the opposing Wobbuffet from using certain moves!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, opponent); } @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Throat Chop won't work through a substitute") HP_BAR(opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_THROAT_CHOP, player); NONE_OF { - MESSAGE("Foe Wobbuffet can't use Hyper Voice due to Throat Chop!"); + MESSAGE("The effects of Throat Chop prevent the opposing Wobbuffet from using certain moves!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, opponent); } diff --git a/test/battle/move_effects_combined/axe_kick.c b/test/battle/move_effects_combined/axe_kick.c index d4be87b8ab..94ab9377ad 100644 --- a/test/battle/move_effects_combined/axe_kick.c +++ b/test/battle/move_effects_combined/axe_kick.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Axe Kick confuses the target") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_AXE_KICK, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } @@ -31,8 +31,8 @@ SINGLE_BATTLE_TEST("Axe Kick deals damage half the hp to user if def battler pro } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); - MESSAGE("Foe Wobbuffet protected itself!"); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); MESSAGE("Wobbuffet kept going and crashed!"); HP_BAR(player, hp: maxHP / 2); } diff --git a/test/battle/move_effects_combined/flinch_status.c b/test/battle/move_effects_combined/flinch_status.c index bad28eac4e..75c9461880 100644 --- a/test/battle/move_effects_combined/flinch_status.c +++ b/test/battle/move_effects_combined/flinch_status.c @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Thunder, Ice and Fire Fang cause the opponent to flinch 10% } SCENE { ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } } diff --git a/test/battle/move_effects_combined/make_it_rain.c b/test/battle/move_effects_combined/make_it_rain.c index f8ce955b49..5469eac8a5 100644 --- a/test/battle/move_effects_combined/make_it_rain.c +++ b/test/battle/move_effects_combined/make_it_rain.c @@ -21,13 +21,13 @@ SINGLE_BATTLE_TEST("Make It Rain lowers special attack by one stage") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MAKE_IT_RAIN, player); HP_BAR(opponent, captureDamage: &damage[0]); - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Sp. Atk fell!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MAKE_IT_RAIN, player); HP_BAR(opponent, captureDamage: &damage[1]); - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Sp. Atk fell!"); } THEN { @@ -48,12 +48,12 @@ DOUBLE_BATTLE_TEST("Make It Rain lowers special attack by one stage if it hits b ANIMATION(ANIM_TYPE_MOVE, MOVE_MAKE_IT_RAIN, playerLeft); HP_BAR(opponentLeft); NONE_OF { - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Wobbuffet's Sp. Atk fell!"); } HP_BAR(opponentRight); - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Wobbuffet's Sp. Atk fell!"); } diff --git a/test/battle/move_effects_combined/triple_arrows.c b/test/battle/move_effects_combined/triple_arrows.c index 383fce6cbf..ad7878fdc9 100644 --- a/test/battle/move_effects_combined/triple_arrows.c +++ b/test/battle/move_effects_combined/triple_arrows.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Triple Arrows may lower Defense by one stage") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); } } @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Triple Arrows makes the foe flinch 30% of the time") TURN { MOVE(player, MOVE_TRIPLE_ARROWS); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } } @@ -70,8 +70,8 @@ SINGLE_BATTLE_TEST("Triple Arrows can lower Defense and cause flinch at the time } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense fell!"); - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } } @@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Triple Arrows's flinching is prevented by Inner Focus") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); - NONE_OF { MESSAGE("Foe Wobbuffet flinched!"); } + NONE_OF { MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } diff --git a/test/battle/move_flags/powder.c b/test/battle/move_flags/powder.c index 356ab69a98..35a6e1012b 100644 --- a/test/battle/move_flags/powder.c +++ b/test/battle/move_flags/powder.c @@ -12,6 +12,6 @@ SINGLE_BATTLE_TEST("Powder moves are blocked by Grass-type Pokémon") TURN { MOVE(player, MOVE_STUN_SPORE); } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - MESSAGE("It doesn't affect Foe Oddish…"); + MESSAGE("It doesn't affect the opposing Oddish…"); } } diff --git a/test/battle/move_flags/strike_count.c b/test/battle/move_flags/strike_count.c index 8967836eff..ba71e35c26 100644 --- a/test/battle/move_flags/strike_count.c +++ b/test/battle/move_flags/strike_count.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Two strike count turns a move into a 2-hit move") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_KICK, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_KICK, player); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } diff --git a/test/battle/status1/freeze.c b/test/battle/status1/freeze.c index c89bda337f..f218430909 100644 --- a/test/battle/status1/freeze.c +++ b/test/battle/status1/freeze.c @@ -23,8 +23,8 @@ SINGLE_BATTLE_TEST("Freeze is thawed by opponent's Fire-type attacks") } WHEN { TURN { MOVE(opponent, MOVE_EMBER); MOVE(player, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet used Ember!"); - MESSAGE("Wobbuffet was defrosted!"); + MESSAGE("The opposing Wobbuffet used Ember!"); + MESSAGE("Wobbuffet thawed out!"); STATUS_ICON(player, none: TRUE); } } @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Freeze is thawed by user's Flame Wheel") } WHEN { TURN { MOVE(player, MOVE_FLAME_WHEEL); } } SCENE { - MESSAGE("Wobbuffet was defrosted by Flame Wheel!"); + MESSAGE("Wobbuffet's Flame Wheel melted the ice!"); STATUS_ICON(player, none: TRUE); MESSAGE("Wobbuffet used Flame Wheel!"); } diff --git a/test/battle/status1/frostbite.c b/test/battle/status1/frostbite.c index fc5fba69b1..a7776e5e2e 100644 --- a/test/battle/status1/frostbite.c +++ b/test/battle/status1/frostbite.c @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Frostbite deals 1/16th (Gen7+) or 1/8th damage to affected p } WHEN { TURN {} } SCENE { - MESSAGE("Foe Wobbuffet is hurt by its frostbite!"); + MESSAGE("The opposing Wobbuffet was hurt by its frostbite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); HP_BAR(opponent, captureDamage: &frostbiteDamage); } THEN { EXPECT_EQ(frostbiteDamage, opponent->maxHP / ((B_BURN_DAMAGE >= GEN_7) ? 16 : 8)); } @@ -58,10 +58,10 @@ SINGLE_BATTLE_TEST("Frostbite is healed if hit with a thawing move") ANIMATION(ANIM_TYPE_MOVE, move, player); if (move == MOVE_EMBER) { NONE_OF { - MESSAGE("Foe Wobbuffet's frostbite was healed!"); + MESSAGE("The opposing Wobbuffet's frostbite was cured!"); } } else { - MESSAGE("Foe Wobbuffet's frostbite was healed!"); + MESSAGE("The opposing Wobbuffet's frostbite was cured!"); } } } @@ -85,11 +85,11 @@ SINGLE_BATTLE_TEST("Frostbite is healed when the user uses a thawing move") ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); if (move == MOVE_EMBER) { - MESSAGE("Wobbuffet is hurt by its frostbite!"); + MESSAGE("Wobbuffet was hurt by its frostbite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, player); } else { NONE_OF { - MESSAGE("Wobbuffet is hurt by its frostbite!"); + MESSAGE("Wobbuffet was hurt by its frostbite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, player); } } diff --git a/test/battle/status1/paralysis.c b/test/battle/status1/paralysis.c index 558ce4fc37..85a784764e 100644 --- a/test/battle/status1/paralysis.c +++ b/test/battle/status1/paralysis.c @@ -17,14 +17,14 @@ SINGLE_BATTLE_TEST("Paralysis reduces Speed by 50%") if (playerFirst) { ONE_OF { MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!"); } - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } else { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ONE_OF { MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!"); } } } @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); } } diff --git a/test/battle/status2/confusion.c b/test/battle/status2/confusion.c index 3c86e5d555..96ed2e1362 100644 --- a/test/battle/status2/confusion.c +++ b/test/battle/status2/confusion.c @@ -18,8 +18,8 @@ SINGLE_BATTLE_TEST("Confusion adds a 50/33% chance to hit self with 40 power") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player, captureDamage: &damage[0]); ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("Foe Wobbuffet became confused!"); - MESSAGE("Foe Wobbuffet is confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet is confused!"); MESSAGE("It hurt itself in its confusion!"); HP_BAR(opponent, captureDamage: &damage[1]); } THEN { diff --git a/test/battle/terrain/electric.c b/test/battle/terrain/electric.c index bb72efdcb7..b3811d056c 100644 --- a/test/battle/terrain/electric.c +++ b/test/battle/terrain/electric.c @@ -11,10 +11,10 @@ SINGLE_BATTLE_TEST("Electric Terrain protects grounded battlers from falling asl TURN { MOVE(player, MOVE_SPORE); } } SCENE { MESSAGE("Wobbuffet used Electric Terrain!"); - MESSAGE("Foe Claydol used Spore!"); + MESSAGE("The opposing Claydol used Spore!"); MESSAGE("Wobbuffet surrounds itself with electrified terrain!"); MESSAGE("Wobbuffet used Spore!"); - MESSAGE("Foe Claydol fell asleep!"); + MESSAGE("The opposing Claydol fell asleep!"); STATUS_ICON(opponent, sleep: TRUE); } } @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Electric Terrain activates Electric Seed and Mimicry") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Electric Seed, the Defense of Wobbuffet rose!"); ABILITY_POPUP(opponent); - MESSAGE("Foe Stunfisk's type changed to Electric!"); + MESSAGE("The opposing Stunfisk's type changed to Electric!"); } THEN { EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_ELECTRIC); } @@ -73,18 +73,18 @@ SINGLE_BATTLE_TEST("Electric Terrain lasts for 5 turns") TURN {} TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIC_TERRAIN, player); - MESSAGE("An electric current runs across the battlefield!"); + MESSAGE("An electric current ran across the battlefield!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("The electricity disappeared from the battlefield."); } diff --git a/test/battle/terrain/grassy.c b/test/battle/terrain/grassy.c index 5508255afd..b247933dd2 100644 --- a/test/battle/terrain/grassy.c +++ b/test/battle/terrain/grassy.c @@ -5,13 +5,16 @@ SINGLE_BATTLE_TEST("Grassy Terrain recovers 1/16th HP at end of turn") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); } - OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); }; } WHEN { TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } } SCENE { - s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + s32 maxHPPlayer = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + s32 maxHPOpponent = GetMonData(&OPPONENT_PARTY[0], MON_DATA_MAX_HP); MESSAGE("Wobbuffet is healed by the grassy terrain!"); - HP_BAR(player, damage: -maxHP / 16); + HP_BAR(player, damage: -maxHPPlayer / 16); + MESSAGE("The opposing Wobbuffet is healed by the grassy terrain!"); + HP_BAR(opponent, damage: -maxHPOpponent / 16); } } @@ -28,7 +31,7 @@ SINGLE_BATTLE_TEST("Grassy Terrain activates Grassy Seed and Mimicry") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Grassy Seed, the Defense of Wobbuffet rose!"); ABILITY_POPUP(opponent); - MESSAGE("Foe Stunfisk's type changed to Grass!"); + MESSAGE("The opposing Stunfisk's type changed to Grass!"); } THEN { EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_GRASS); } @@ -69,18 +72,18 @@ SINGLE_BATTLE_TEST("Grassy Terrain lasts for 5 turns") TURN {} TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASSY_TERRAIN, player); MESSAGE("Grass grew to cover the battlefield!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("The grass disappeared from the battlefield."); } @@ -98,14 +101,14 @@ SINGLE_BATTLE_TEST("Grassy Terrain heals the pokemon on the field for the durati TURN {} TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASSY_TERRAIN, player); MESSAGE("Grass grew to cover the battlefield!"); - MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); - MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); - MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); - MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); - MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); + MESSAGE("The opposing Wobbuffet is healed by the grassy terrain!"); + MESSAGE("The opposing Wobbuffet is healed by the grassy terrain!"); + MESSAGE("The opposing Wobbuffet is healed by the grassy terrain!"); + MESSAGE("The opposing Wobbuffet is healed by the grassy terrain!"); + MESSAGE("The opposing Wobbuffet is healed by the grassy terrain!"); MESSAGE("The grass disappeared from the battlefield."); } } diff --git a/test/battle/terrain/misty.c b/test/battle/terrain/misty.c index d6fde8fb7d..e43cf4a253 100644 --- a/test/battle/terrain/misty.c +++ b/test/battle/terrain/misty.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Misty Terrain protects grounded battlers from non-volatile s TURN { MOVE(player, MOVE_TOXIC); } } SCENE { MESSAGE("Wobbuffet used Misty Terrain!"); - MESSAGE("Foe Claydol used Toxic!"); + MESSAGE("The opposing Claydol used Toxic!"); MESSAGE("Wobbuffet surrounds itself with a protective mist!"); NOT { STATUS_ICON(opponent, badPoison: TRUE); } MESSAGE("Wobbuffet used Toxic!"); @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Misty Terrain activates Misty Seed and Mimicry") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Misty Seed, the Sp. Def of Wobbuffet rose!"); ABILITY_POPUP(opponent); - MESSAGE("Foe Stunfisk's type changed to Fairy!"); + MESSAGE("The opposing Stunfisk's type changed to Fairy!"); } THEN { EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_FAIRY); } @@ -90,18 +90,18 @@ SINGLE_BATTLE_TEST("Misty Terrain lasts for 5 turns") TURN {} TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MISTY_TERRAIN, player); - MESSAGE("Mist swirled about the battlefield!"); + MESSAGE("Mist swirled around the battlefield!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("The mist disappeared from the battlefield."); } diff --git a/test/battle/terrain/psychic.c b/test/battle/terrain/psychic.c index 9a015a2c89..9ac88f29da 100644 --- a/test/battle/terrain/psychic.c +++ b/test/battle/terrain/psychic.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain protects grounded battlers from priority mov MESSAGE("Claydol used Psychic Terrain!"); MESSAGE("Claydol cannot use Quick Attack!"); NOT { HP_BAR(opponent); } - MESSAGE("Foe Wobbuffet used Quick Attack!"); + MESSAGE("The opposing Wobbuffet used Quick Attack!"); HP_BAR(player); } } @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain activates Psychic Seed and Mimicry") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Psychic Seed, the Sp. Def of Wobbuffet rose!"); ABILITY_POPUP(opponent); - MESSAGE("Foe Stunfisk's type changed to Psychic!"); + MESSAGE("The opposing Stunfisk's type changed to Psychic!"); } THEN { EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_PSYCHIC); } @@ -145,19 +145,19 @@ SINGLE_BATTLE_TEST("Psychic Terrain lasts for 5 turns") TURN {} TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC_TERRAIN, player); MESSAGE("The battlefield got weird!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); - MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The weirdness disappeared from the battlefield!"); } } diff --git a/test/battle/terrain/starting_terrain.c b/test/battle/terrain/starting_terrain.c index 37caa20bc7..e505dbd185 100644 --- a/test/battle/terrain/starting_terrain.c +++ b/test/battle/terrain/starting_terrain.c @@ -37,16 +37,16 @@ SINGLE_BATTLE_TEST("B_VAR_STARTING_STATUS starts a chosen terrain at the beginni MESSAGE("The battlefield got weird!"); break; case STARTING_STATUS_MISTY_TERRAIN: - MESSAGE("Mist swirled about the battlefield!"); + MESSAGE("Mist swirled around the battlefield!"); break; case STARTING_STATUS_ELECTRIC_TERRAIN: - MESSAGE("An electric current runs across the battlefield!"); + MESSAGE("An electric current is running across the battlefield!"); break; } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG); - MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The weirdness disappeared from the battlefield!"); MESSAGE("The electricity disappeared from the battlefield."); MESSAGE("The mist disappeared from the battlefield."); MESSAGE("The grass disappeared from the battlefield."); @@ -80,7 +80,7 @@ SINGLE_BATTLE_TEST("Terrain started after the one which started the battle lasts TURN { ; } } SCENE { // Electric Terrain at battle's start - MESSAGE("An electric current runs across the battlefield!"); + MESSAGE("An electric current is running across the battlefield!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG); // Player uses Grassy Terrain if (viaMove) { @@ -95,13 +95,13 @@ SINGLE_BATTLE_TEST("Terrain started after the one which started the battle lasts // 5 turns MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("The grass disappeared from the battlefield."); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG); diff --git a/test/battle/weather/hail.c b/test/battle/weather/hail.c index 4210a22d9e..2fa7b11d9b 100644 --- a/test/battle/weather/hail.c +++ b/test/battle/weather/hail.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Hail deals 1/16 damage per turn") } WHEN { TURN {MOVE(player, MOVE_HAIL);} } SCENE { - MESSAGE("Foe Wobbuffet is pelted by HAIL!"); + MESSAGE("The opposing Wobbuffet is buffeted by the hail!"); HP_BAR(opponent, captureDamage: &hailDamage); } THEN { EXPECT_EQ(hailDamage, opponent->maxHP / 16); } } @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Hail damage does not affect Ice-type Pokémon") } WHEN { TURN {MOVE(player, MOVE_HAIL);} } SCENE { - NOT MESSAGE("Foe Glalie is pelted by HAIL!"); + NOT MESSAGE("The opposing Glalie is buffeted by the hail!"); } } diff --git a/test/battle/weather/sandstorm.c b/test/battle/weather/sandstorm.c index 1673c26f99..f211653995 100644 --- a/test/battle/weather/sandstorm.c +++ b/test/battle/weather/sandstorm.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Sandstorm deals 1/16 damage per turn") } WHEN { TURN {MOVE(player, MOVE_SANDSTORM);} } SCENE { - MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!"); + MESSAGE("The opposing Wobbuffet is buffeted by the sandstorm!"); HP_BAR(opponent, captureDamage: &sandstormDamage); } THEN { EXPECT_EQ(sandstormDamage, opponent->maxHP / 16); } } @@ -54,13 +54,13 @@ SINGLE_BATTLE_TEST("Sandstorm damage does not hurt Ground, Rock, and Steel-type switch (mon) { case SPECIES_SANDSLASH: - NOT MESSAGE("Foe Sandslash is buffeted by the sandstorm!"); + NOT MESSAGE("The opposing Sandslash is buffeted by the sandstorm!"); break; case SPECIES_NOSEPASS: - NOT MESSAGE("Foe Nosepass is buffeted by the sandstorm!"); + NOT MESSAGE("The opposing Nosepass is buffeted by the sandstorm!"); break; case SPECIES_REGISTEEL: - NOT MESSAGE("Foe Registeel is buffeted by the sandstorm!"); + NOT MESSAGE("The opposing Registeel is buffeted by the sandstorm!"); break; } } diff --git a/test/text.c b/test/text.c index 7713784198..996549ab1b 100644 --- a/test/text.c +++ b/test/text.c @@ -1,11 +1,20 @@ #include "global.h" #include "test/test.h" +#include "battle.h" #include "battle_main.h" +#include "battle_message.h" +#include "battle_setup.h" #include "item.h" +#include "malloc.h" +#include "main_menu.h" +#include "string_util.h" #include "text.h" #include "constants/abilities.h" +#include "constants/battle.h" +#include "constants/battle_string_ids.h" #include "constants/items.h" #include "constants/moves.h" +#include "test/overworld_script.h" TEST("Move names fit on Pokemon Summary Screen") { @@ -16,6 +25,7 @@ TEST("Move names fit on Pokemon Summary Screen") { PARAMETRIZE_LABEL("%S", gMovesInfo[i].name) { move = i; } } + //DebugPrintf("Move %d: %S", GetStringWidth(fontId, gMovesInfo[move].name, 0), gMovesInfo[move].name); EXPECT_LE(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx); } @@ -101,6 +111,7 @@ TEST("Item names fit on Bag Screen (list)") { PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; } } + //DebugPrintf("Item %d: %S", GetStringWidth(fontId, gItemsInfo[item].name, 0), gItemsInfo[item].name); if (gItemsInfo[item].pocket == POCKET_TM_HM || gItemsInfo[item].pocket == POCKET_BERRIES) EXPECT_LE(GetStringWidth(fontId, gItemsInfo[item].name, 0), tmHmBerryWidthPx); else @@ -618,3 +629,273 @@ TEST("Type names fit on Pokedex Search Screen") } EXPECT_LE(GetStringWidth(fontId, gTypesInfo[type].name, 0), widthPx); } + +extern u16 sBattlerAbilities[MAX_BATTLERS_COUNT]; +//* +#define BATTLE_STRING_BUFFER_SIZE 1000 +TEST("Battle strings fit on the battle message window") +{ + u32 i, j, strWidth; + u32 start = BATTLESTRINGS_TABLE_START; + u32 end = BATTLESTRINGS_COUNT - 1; + const u32 fontId = FONT_NORMAL; + u32 battleStringId = 0; + u8 *battleString = Alloc(BATTLE_STRING_BUFFER_SIZE); + + s32 sixDigitNines = 999999; // 36 pixels. + u8 nickname[POKEMON_NAME_LENGTH + 1] = _("MMMMMMMMMMMM"); // 72 pixels. + u32 longMoveID = MOVE_NATURES_MADNESS; // 89 pixels. + u32 longAbilityID = ABILITY_SUPERSWEET_SYRUP; // 91 pixels. + u32 longStatName = STAT_EVASION; // 40 pixels. + u32 longTypeName = TYPE_ELECTRIC; // 43 pixels. + u32 longSpeciesName = SPECIES_SANDY_SHOCKS; // 47 pixels. + u32 longItemName = ITEM_UNREMARKABLE_TEACUP; // 73 pixels. + u8 boxName[9] = _("MMMMMMMM"); // 54 pixels. + + // Set longest default player name, JOHNNY + NewGameBirchSpeech_SetDefaultPlayerName(10); // JOHNNY + + RUN_OVERWORLD_SCRIPT( + givemon SPECIES_WOBBUFFET, 100; + createmon 1, 0, SPECIES_WOBBUFFET, 100; + ); + SetMonData(&gPlayerParty[0], MON_DATA_NICKNAME, nickname); + SetMonData(&gEnemyParty[0], MON_DATA_NICKNAME, nickname); + + for (i = start; i <= end; i++) + { + PARAMETRIZE_LABEL("%S", gBattleStringsTable[i - BATTLESTRINGS_TABLE_START]) { battleStringId = i - BATTLESTRINGS_TABLE_START; } + } + + // Clear buffers + PREPARE_STRING_BUFFER(gBattleTextBuff1, STRINGID_EMPTYSTRING3); + PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_EMPTYSTRING3); + PREPARE_STRING_BUFFER(gBattleTextBuff3, STRINGID_EMPTYSTRING3); + *gStringVar1 = EOS; + *gStringVar2 = EOS; + *gStringVar3 = EOS; + + // Set positions + gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; + gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; + gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT; + gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT; + + // Set abilities + gLastUsedAbility = longAbilityID; + for (j = 0; j < MAX_BATTLERS_COUNT; j++) + sBattlerAbilities[j] = longAbilityID; + + // Set Trainers + gTrainerBattleOpponent_A = 1; + gTrainerBattleOpponent_B = 1; + + // Set battler to 1, so "The opposing " is prefixed when refering to battlers. + gBattleTypeFlags |= BATTLE_TYPE_TRAINER; + gBattlerAttacker = gBattlerTarget = gBattleScripting.battler = gEffectBattler = 1; + + // Set moves + gCurrentMove = longMoveID; + gBattleMsgDataPtr = AllocZeroed(sizeof(struct BattleMsgData)); + gBattleMsgDataPtr->currentMove = longMoveID; + + // Set Items + gLastUsedItem = longItemName; + + // Buffer specific strings for each Battle String. + // In cases where a buffer is used with multiple contexts, the widest string is used. + // Eg. STRINGID_CANACTFASTERTHANKSTO is used for both with abilities and items, + // so ability is chosen because it's longer. + switch (battleStringId + BATTLESTRINGS_TABLE_START) + { + // Testing Trainer messages is out of the current scope for this test. + case STRINGID_TRAINER1LOSETEXT: + case STRINGID_TRAINER2LOSETEXT: + case STRINGID_TRAINER1WINTEXT: + case STRINGID_TRAINER2WINTEXT: + break; + // Buffer Nickname with prefix to B_BUFF1, " a boosted" to B_BUFF2, "999999" to B_BUFF3 + case STRINGID_PKMNGAINEDEXP: + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 0, 0); + PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_ABOOSTED); // 'gained a boosted' + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff3, 6, sixDigitNines); + break; + // Buffer Nickname with prefix to B_BUFF1, "100" to B_BUFF2 + case STRINGID_PKMNGREWTOLV: + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 0, 0); + PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 3, 100); + break; + // Buffer Nickname with prefix to B_BUFF1, move name to B_BUFF2 + case STRINGID_PKMNLEARNEDMOVE: + case STRINGID_TRYTOLEARNMOVE1: + case STRINGID_TRYTOLEARNMOVE2: + case STRINGID_TRYTOLEARNMOVE3: + case STRINGID_PKMNFORGOTMOVE: + case STRINGID_STOPLEARNINGMOVE: + case STRINGID_DIDNOTLEARNMOVE: + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 0, 0); + PREPARE_MOVE_BUFFER(gBattleTextBuff2, longMoveID); + break; + // Buffer Move name to B_BUFF1 + case STRINGID_PKMNLEARNEDMOVE2: + case STRINGID_TEAMSTOPPEDWORKING: // Unused + case STRINGID_FOESTOPPEDWORKING: // Unused + case STRINGID_PKMNHURTBY: + case STRINGID_PKMNFREEDFROM: + case STRINGID_PKMNMOVEWASDISABLED: + case STRINGID_PKMNSKETCHEDMOVE: + case STRINGID_PKMNGOTFREE: + case STRINGID_PKMNLOSTPPGRUDGE: + case STRINGID_PKMNSITEMRESTOREDPP: + case STRINGID_PKMNSXWOREOFF: + case STRINGID_BUFFERENDS: + case STRINGID_FOREWARNACTIVATES: + case STRINGID_CUSEDBODYDISABLED: + case STRINGID_CURRENTMOVECANTSELECT: + case STRINGID_TARGETISHURTBYSALTCURE: + PREPARE_MOVE_BUFFER(gBattleTextBuff1, longMoveID); + break; + // Buffer "999999" to B_BUFF1 + case STRINGID_PLAYERGOTMONEY: + case STRINGID_PLAYERWHITEOUT2: + case STRINGID_PLAYERPICKEDUPMONEY: + case STRINGID_PLAYERPAIDPRIZEMONEY: + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 6, sixDigitNines); + break; + // Buffer "99" to B_BUFF1 + case STRINGID_HITXTIMES: + case STRINGID_MAGNITUDESTRENGTH: + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 2, 99); + break; + // Buffer "9" to B_BUFF1 + case STRINGID_PKMNSTOCKPILED: + case STRINGID_PKMNPERISHCOUNTFELL: + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 1, 9); + break; + // Buffer Ability name to B_BUFF1 + case STRINGID_PKMNMADESLEEP: + case STRINGID_PKMNPOISONEDBY: + case STRINGID_PKMNBURNEDBY: + case STRINGID_PKMNFROZENBY: + case STRINGID_PKMNWASPARALYZEDBY: + case STRINGID_CANACTFASTERTHANKSTO: + PREPARE_ABILITY_BUFFER(gBattleTextBuff1, longAbilityID); + break; + // Buffer Stat name to B_BUFF1 + case STRINGID_STATSWONTINCREASE: + case STRINGID_STATSWONTDECREASE: + case STRINGID_PKMNSXPREVENTSYLOSS: + case STRINGID_TARGETABILITYSTATRAISE: + case STRINGID_TARGETSSTATWASMAXEDOUT: + case STRINGID_ATTACKERABILITYSTATRAISE: + case STRINGID_LASTABILITYRAISEDSTAT: + case STRINGID_TARGETABILITYSTATLOWER: + case STRINGID_SCRIPTINGABILITYSTATRAISE: + case STRINGID_BATTLERABILITYRAISEDSTAT: + case STRINGID_ABILITYRAISEDSTATDRASTICALLY: + case STRINGID_STATWASHEIGHTENED: + StringCopy(gBattleTextBuff1, gStatNamesTable[longStatName]); + break; + // Buffer Type name to B_BUFF1 + case STRINGID_PKMNCHANGEDTYPE: + case STRINGID_PKMNCHANGEDTYPEWITH: + case STRINGID_TARGETCHANGEDTYPE: + case STRINGID_PROTEANTYPECHANGE: + case STRINGID_THIRDTYPEADDED: + case STRINGID_ATTACKERLOSTITSTYPE: + case STRINGID_PKMNTERASTALLIZEDINTO: + PREPARE_TYPE_BUFFER(gBattleTextBuff1, longTypeName); + break; + // Buffer Species name to B_BUFF1 + case STRINGID_PKMNTRANSFORMEDINTO: + case STRINGID_WILDPKMNFLED: + case STRINGID_MEGAEVOEVOLVED: + case STRINGID_PKMNREVIVEDREADYTOFIGHT: + case STRINGID_ITEMRESTOREDSPECIESHEALTH: // Should probably use nickname instead? + case STRINGID_ITEMCUREDSPECIESSTATUS: // Should probably use nickname instead? + case STRINGID_ITEMRESTOREDSPECIESPP: // Should probably use nickname instead? + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, longSpeciesName) + break; + // Buffer nickname with prefix to B_BUFF1 + case STRINGID_PKMNATTACK: + case STRINGID_PKMNWISHCAMETRUE: + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 1, 0); + break; + // Buffer nickname with prefix in lower case to B_BUFF1 + case STRINGID_USEDINSTRUCTEDMOVE: + PREPARE_MON_NICK_WITH_PREFIX_LOWER_BUFFER(gBattleTextBuff1, 1, 0); + break; + // Buffer nickname to B_BUFF2 + case STRINGID_ENEMYABOUTTOSWITCHPKMN: + PREPARE_MON_NICK_BUFFER(gBattleTextBuff2, 1, 0); + break; + // Buffer Item name to B_BUFF1 + case STRINGID_PKMNHURTSWITH: + case STRINGID_PKMNCURIOUSABOUTX: + case STRINGID_PKMNENTHRALLEDBYX: + case STRINGID_PKMNIGNOREDX: + case STRINGID_PREVENTEDFROMWORKING: + case STRINGID_PKMNOBTAINEDX: + case STRINGID_ABOUTTOUSEPOLTERGEIST: + PREPARE_ITEM_BUFFER(gBattleTextBuff1, longItemName); + break; + // Buffer Item name to B_BUFF2 + case STRINGID_PKMNOBTAINEDX2: + PREPARE_ITEM_BUFFER(gBattleTextBuff2, longItemName); + break; + // Buffer Item name to B_BUFF1 and B_BUFF2 + case STRINGID_PKMNOBTAINEDXYOBTAINEDZ: + PREPARE_ITEM_BUFFER(gBattleTextBuff1, longItemName); + PREPARE_ITEM_BUFFER(gBattleTextBuff2, longItemName); + break; + // Buffer nickname with prefix to B_BUFF1, Ability name to B_BUFF2 + case STRINGID_PKMNTRACED: + PREPARE_MON_NICK_WITH_PREFIX_LOWER_BUFFER(gBattleTextBuff1, 1, 0); + PREPARE_ABILITY_BUFFER(gBattleTextBuff2, longAbilityID); + break; + // Buffer Stat name to B_BUFF1, "drastically rose" to B_BUFF2 + case STRINGID_ATTACKERSSTATROSE: + case STRINGID_DEFENDERSSTATROSE: + case STRINGID_USINGITEMSTATOFPKMNROSE: + StringCopy(gBattleTextBuff1, gStatNamesTable[longStatName]); + StringCopy(gBattleTextBuff2, sText_drastically); + StringAppend(gBattleTextBuff2, gText_StatRose); + break; + // Buffer Stat name to B_BUFF1, "severely fell" to B_BUFF2 + case STRINGID_ATTACKERSSTATFELL: + case STRINGID_DEFENDERSSTATFELL: + StringCopy(gBattleTextBuff1, gStatNamesTable[longStatName]); + StringCopy(gBattleTextBuff2, sText_severely); + StringAppend(gBattleTextBuff2, sText_StatFell); + break; + // Buffer Status name to B_BUFF2 + case STRINGID_PKMNSITEMCUREDPROBLEM: + case STRINGID_PKMNSXCUREDYPROBLEM: + case STRINGID_PKMNSXCUREDITSYPROBLEM: + StringCopy(gBattleTextBuff1, gText_Confusion); + break; + // Buffer Box name to STR_VAR_1 and STR_VAR_3, Nickname to STR_VAR_2 + case STRINGID_PKMNTRANSFERREDSOMEONESPC: + case STRINGID_PKMNTRANSFERREDLANETTESPC: + case STRINGID_PKMNBOXSOMEONESPCFULL: + case STRINGID_PKMNBOXLANETTESPCFULL: + StringCopy(gStringVar1, boxName); + StringCopy(gStringVar2, nickname); + StringCopy(gStringVar3, boxName); + break; + default: + break; + } + BattleStringExpandPlaceholders(gBattleStringsTable[battleStringId], battleString, BATTLE_STRING_BUFFER_SIZE); + DebugPrintf("Battle String ID %d: %S", battleStringId + BATTLESTRINGS_TABLE_START, battleString); + for (j = 1;; j++) + { + strWidth = GetStringLineWidth(fontId, battleString, 0, j, BATTLE_STRING_BUFFER_SIZE, TRUE); + if (strWidth == 0) + break; + EXPECT_LE(strWidth - 1, BATTLE_MSG_MAX_WIDTH); // -1 because there's a pixel-wide space that doesn't visually look like it's out of frame when using FONT_NORMAL. + } + Free(gBattleMsgDataPtr); + Free(battleString); +} +//*/ From 1421ed1b2462afc6d758d92a342f8e5ee4102681 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Tue, 22 Oct 2024 09:19:00 +0100 Subject: [PATCH 12/50] Tests: detect task leaks (#5528) --- include/sound.h | 1 + src/battle_main.c | 13 + src/sound.c | 3 +- test/test_runner.c | 18 +- tools/mgba-rom-test-hydra/elf.h | 3147 ++++++++++++++++++++++++++++++ tools/mgba-rom-test-hydra/main.c | 181 +- 6 files changed, 3350 insertions(+), 13 deletions(-) create mode 100644 tools/mgba-rom-test-hydra/elf.h diff --git a/include/sound.h b/include/sound.h index b39a7306a6..92fd055649 100644 --- a/include/sound.h +++ b/include/sound.h @@ -45,5 +45,6 @@ void SE12PanpotControl(s8 pan); bool8 IsSEPlaying(void); bool8 IsBGMPlaying(void); bool8 IsSpecialSEPlaying(void); +void Task_DuckBGMForPokemonCry(u8 taskId); #endif // GUARD_SOUND_H diff --git a/src/battle_main.c b/src/battle_main.c index 8ff460b0fb..9aac677a71 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1780,7 +1780,20 @@ void CB2_QuitRecordedBattle(void) m4aMPlayStop(&gMPlayInfo_SE1); m4aMPlayStop(&gMPlayInfo_SE2); if (gTestRunnerEnabled) + { + // Clean up potentially-leaking tasks. + // I think these leak when the battle ends soon after a + // battler is fainted. + u8 taskId; + taskId = FindTaskIdByFunc(Task_PlayerController_RestoreBgmAfterCry); + if (taskId != TASK_NONE) + DestroyTask(taskId); + taskId = FindTaskIdByFunc(Task_DuckBGMForPokemonCry); + if (taskId != TASK_NONE) + DestroyTask(taskId); + TestRunner_Battle_AfterLastTurn(); + } FreeRestoreBattleData(); FreeAllWindowBuffers(); SetMainCallback2(gMain.savedCallback); diff --git a/src/sound.c b/src/sound.c index 95c26121ca..db59e7e73c 100644 --- a/src/sound.c +++ b/src/sound.c @@ -31,7 +31,6 @@ extern struct ToneData gCryTable_Reverse[]; static void Task_Fanfare(u8 taskId); static void CreateFanfareTask(void); -static void Task_DuckBGMForPokemonCry(u8 taskId); static void RestoreBGMVolumeAfterPokemonCry(void); static const struct Fanfare sFanfares[] = { @@ -513,7 +512,7 @@ bool8 IsCryPlaying(void) return FALSE; } -static void Task_DuckBGMForPokemonCry(u8 taskId) +void Task_DuckBGMForPokemonCry(u8 taskId) { if (gPokemonCryBGMDuckingCounter) { diff --git a/test/test_runner.c b/test/test_runner.c index 3e7202526d..f7c4cf780e 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -5,6 +5,7 @@ #include "main.h" #include "malloc.h" #include "random.h" +#include "task.h" #include "constants/characters.h" #include "test_runner.h" #include "test/test.h" @@ -190,6 +191,7 @@ top: else gTestRunnerState.timeoutSeconds = UINT_MAX; InitHeap(gHeap, HEAP_SIZE); + ResetTasks(); EnableInterrupts(INTR_FLAG_TIMER2); REG_TM2CNT_L = UINT16_MAX - (274 * 60); // Approx. 1 second. REG_TM2CNT_H = TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_1024CLK; @@ -243,6 +245,7 @@ top: if (gTestRunnerState.result == TEST_RESULT_PASS && !gTestRunnerState.expectLeaks) { + int i; const struct MemBlock *head = HeapHead(); const struct MemBlock *block = head; do @@ -251,7 +254,7 @@ top: || !(EWRAM_START <= (uintptr_t)block->next && (uintptr_t)block->next < EWRAM_END) || (block->next <= block && block->next != head)) { - Test_MgbaPrintf("gHeap corrupted block at 0x%p", block); + Test_MgbaPrintf("gHeap corrupted block at %p", block); gTestRunnerState.result = TEST_RESULT_ERROR; break; } @@ -268,6 +271,15 @@ top: block = block->next; } while (block != head); + + for (i = 0; i < NUM_TASKS; i++) + { + if (gTasks[i].isActive) + { + Test_MgbaPrintf("%p: task not freed", gTasks[i].func); + gTestRunnerState.result = TEST_RESULT_FAIL; + } + } } if (gTestRunnerState.test->runner == &gAssumptionsRunner) @@ -585,6 +597,9 @@ static s32 MgbaVPrintf_(const char *fmt, va_list va) p = va_arg(va, unsigned); { s32 n; + i = MgbaPutchar_(i, '<'); + i = MgbaPutchar_(i, '0'); + i = MgbaPutchar_(i, 'x'); for (n = 0; n < 7; n++) { unsigned nybble = (p >> (24 - (4*n))) & 0xF; @@ -593,6 +608,7 @@ static s32 MgbaVPrintf_(const char *fmt, va_list va) else i = MgbaPutchar_(i, 'a' + nybble - 10); } + i = MgbaPutchar_(i, '>'); } break; case 'q': diff --git a/tools/mgba-rom-test-hydra/elf.h b/tools/mgba-rom-test-hydra/elf.h new file mode 100644 index 0000000000..79d3b974bd --- /dev/null +++ b/tools/mgba-rom-test-hydra/elf.h @@ -0,0 +1,3147 @@ +/* +From musl include/elf.h + +Copyright © 2005-2014 Rich Felker, et al. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#ifndef _ELF_H +#define _ELF_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +typedef uint16_t Elf32_Half; +typedef uint16_t Elf64_Half; + +typedef uint32_t Elf32_Word; +typedef int32_t Elf32_Sword; +typedef uint32_t Elf64_Word; +typedef int32_t Elf64_Sword; + +typedef uint64_t Elf32_Xword; +typedef int64_t Elf32_Sxword; +typedef uint64_t Elf64_Xword; +typedef int64_t Elf64_Sxword; + +typedef uint32_t Elf32_Addr; +typedef uint64_t Elf64_Addr; + +typedef uint32_t Elf32_Off; +typedef uint64_t Elf64_Off; + +typedef uint16_t Elf32_Section; +typedef uint16_t Elf64_Section; + +typedef Elf32_Half Elf32_Versym; +typedef Elf64_Half Elf64_Versym; + +#define EI_NIDENT (16) + +typedef struct { + unsigned char e_ident[EI_NIDENT]; + Elf32_Half e_type; + Elf32_Half e_machine; + Elf32_Word e_version; + Elf32_Addr e_entry; + Elf32_Off e_phoff; + Elf32_Off e_shoff; + Elf32_Word e_flags; + Elf32_Half e_ehsize; + Elf32_Half e_phentsize; + Elf32_Half e_phnum; + Elf32_Half e_shentsize; + Elf32_Half e_shnum; + Elf32_Half e_shstrndx; +} Elf32_Ehdr; + +typedef struct { + unsigned char e_ident[EI_NIDENT]; + Elf64_Half e_type; + Elf64_Half e_machine; + Elf64_Word e_version; + Elf64_Addr e_entry; + Elf64_Off e_phoff; + Elf64_Off e_shoff; + Elf64_Word e_flags; + Elf64_Half e_ehsize; + Elf64_Half e_phentsize; + Elf64_Half e_phnum; + Elf64_Half e_shentsize; + Elf64_Half e_shnum; + Elf64_Half e_shstrndx; +} Elf64_Ehdr; + +#define EI_MAG0 0 +#define ELFMAG0 0x7f + +#define EI_MAG1 1 +#define ELFMAG1 'E' + +#define EI_MAG2 2 +#define ELFMAG2 'L' + +#define EI_MAG3 3 +#define ELFMAG3 'F' + + +#define ELFMAG "\177ELF" +#define SELFMAG 4 + +#define EI_CLASS 4 +#define ELFCLASSNONE 0 +#define ELFCLASS32 1 +#define ELFCLASS64 2 +#define ELFCLASSNUM 3 + +#define EI_DATA 5 +#define ELFDATANONE 0 +#define ELFDATA2LSB 1 +#define ELFDATA2MSB 2 +#define ELFDATANUM 3 + +#define EI_VERSION 6 + + +#define EI_OSABI 7 +#define ELFOSABI_NONE 0 +#define ELFOSABI_SYSV 0 +#define ELFOSABI_HPUX 1 +#define ELFOSABI_NETBSD 2 +#define ELFOSABI_LINUX 3 +#define ELFOSABI_GNU 3 +#define ELFOSABI_SOLARIS 6 +#define ELFOSABI_AIX 7 +#define ELFOSABI_IRIX 8 +#define ELFOSABI_FREEBSD 9 +#define ELFOSABI_TRU64 10 +#define ELFOSABI_MODESTO 11 +#define ELFOSABI_OPENBSD 12 +#define ELFOSABI_ARM 97 +#define ELFOSABI_STANDALONE 255 + +#define EI_ABIVERSION 8 + +#define EI_PAD 9 + + + +#define ET_NONE 0 +#define ET_REL 1 +#define ET_EXEC 2 +#define ET_DYN 3 +#define ET_CORE 4 +#define ET_NUM 5 +#define ET_LOOS 0xfe00 +#define ET_HIOS 0xfeff +#define ET_LOPROC 0xff00 +#define ET_HIPROC 0xffff + + + +#define EM_NONE 0 +#define EM_M32 1 +#define EM_SPARC 2 +#define EM_386 3 +#define EM_68K 4 +#define EM_88K 5 +#define EM_860 7 +#define EM_MIPS 8 +#define EM_S370 9 +#define EM_MIPS_RS3_LE 10 + +#define EM_PARISC 15 +#define EM_VPP500 17 +#define EM_SPARC32PLUS 18 +#define EM_960 19 +#define EM_PPC 20 +#define EM_PPC64 21 +#define EM_S390 22 + +#define EM_V800 36 +#define EM_FR20 37 +#define EM_RH32 38 +#define EM_RCE 39 +#define EM_ARM 40 +#define EM_FAKE_ALPHA 41 +#define EM_SH 42 +#define EM_SPARCV9 43 +#define EM_TRICORE 44 +#define EM_ARC 45 +#define EM_H8_300 46 +#define EM_H8_300H 47 +#define EM_H8S 48 +#define EM_H8_500 49 +#define EM_IA_64 50 +#define EM_MIPS_X 51 +#define EM_COLDFIRE 52 +#define EM_68HC12 53 +#define EM_MMA 54 +#define EM_PCP 55 +#define EM_NCPU 56 +#define EM_NDR1 57 +#define EM_STARCORE 58 +#define EM_ME16 59 +#define EM_ST100 60 +#define EM_TINYJ 61 +#define EM_X86_64 62 +#define EM_PDSP 63 + +#define EM_FX66 66 +#define EM_ST9PLUS 67 +#define EM_ST7 68 +#define EM_68HC16 69 +#define EM_68HC11 70 +#define EM_68HC08 71 +#define EM_68HC05 72 +#define EM_SVX 73 +#define EM_ST19 74 +#define EM_VAX 75 +#define EM_CRIS 76 +#define EM_JAVELIN 77 +#define EM_FIREPATH 78 +#define EM_ZSP 79 +#define EM_MMIX 80 +#define EM_HUANY 81 +#define EM_PRISM 82 +#define EM_AVR 83 +#define EM_FR30 84 +#define EM_D10V 85 +#define EM_D30V 86 +#define EM_V850 87 +#define EM_M32R 88 +#define EM_MN10300 89 +#define EM_MN10200 90 +#define EM_PJ 91 +#define EM_OR1K 92 +#define EM_OPENRISC 92 +#define EM_ARC_A5 93 +#define EM_ARC_COMPACT 93 +#define EM_XTENSA 94 +#define EM_VIDEOCORE 95 +#define EM_TMM_GPP 96 +#define EM_NS32K 97 +#define EM_TPC 98 +#define EM_SNP1K 99 +#define EM_ST200 100 +#define EM_IP2K 101 +#define EM_MAX 102 +#define EM_CR 103 +#define EM_F2MC16 104 +#define EM_MSP430 105 +#define EM_BLACKFIN 106 +#define EM_SE_C33 107 +#define EM_SEP 108 +#define EM_ARCA 109 +#define EM_UNICORE 110 +#define EM_EXCESS 111 +#define EM_DXP 112 +#define EM_ALTERA_NIOS2 113 +#define EM_CRX 114 +#define EM_XGATE 115 +#define EM_C166 116 +#define EM_M16C 117 +#define EM_DSPIC30F 118 +#define EM_CE 119 +#define EM_M32C 120 +#define EM_TSK3000 131 +#define EM_RS08 132 +#define EM_SHARC 133 +#define EM_ECOG2 134 +#define EM_SCORE7 135 +#define EM_DSP24 136 +#define EM_VIDEOCORE3 137 +#define EM_LATTICEMICO32 138 +#define EM_SE_C17 139 +#define EM_TI_C6000 140 +#define EM_TI_C2000 141 +#define EM_TI_C5500 142 +#define EM_TI_ARP32 143 +#define EM_TI_PRU 144 +#define EM_MMDSP_PLUS 160 +#define EM_CYPRESS_M8C 161 +#define EM_R32C 162 +#define EM_TRIMEDIA 163 +#define EM_QDSP6 164 +#define EM_8051 165 +#define EM_STXP7X 166 +#define EM_NDS32 167 +#define EM_ECOG1X 168 +#define EM_MAXQ30 169 +#define EM_XIMO16 170 +#define EM_MANIK 171 +#define EM_CRAYNV2 172 +#define EM_RX 173 +#define EM_METAG 174 +#define EM_MCST_ELBRUS 175 +#define EM_ECOG16 176 +#define EM_CR16 177 +#define EM_ETPU 178 +#define EM_SLE9X 179 +#define EM_L10M 180 +#define EM_K10M 181 +#define EM_AARCH64 183 +#define EM_AVR32 185 +#define EM_STM8 186 +#define EM_TILE64 187 +#define EM_TILEPRO 188 +#define EM_MICROBLAZE 189 +#define EM_CUDA 190 +#define EM_TILEGX 191 +#define EM_CLOUDSHIELD 192 +#define EM_COREA_1ST 193 +#define EM_COREA_2ND 194 +#define EM_ARC_COMPACT2 195 +#define EM_OPEN8 196 +#define EM_RL78 197 +#define EM_VIDEOCORE5 198 +#define EM_78KOR 199 +#define EM_56800EX 200 +#define EM_BA1 201 +#define EM_BA2 202 +#define EM_XCORE 203 +#define EM_MCHP_PIC 204 +#define EM_KM32 210 +#define EM_KMX32 211 +#define EM_EMX16 212 +#define EM_EMX8 213 +#define EM_KVARC 214 +#define EM_CDP 215 +#define EM_COGE 216 +#define EM_COOL 217 +#define EM_NORC 218 +#define EM_CSR_KALIMBA 219 +#define EM_Z80 220 +#define EM_VISIUM 221 +#define EM_FT32 222 +#define EM_MOXIE 223 +#define EM_AMDGPU 224 +#define EM_RISCV 243 +#define EM_BPF 247 +#define EM_NUM 248 + +#define EM_ALPHA 0x9026 + +#define EV_NONE 0 +#define EV_CURRENT 1 +#define EV_NUM 2 + +typedef struct { + Elf32_Word sh_name; + Elf32_Word sh_type; + Elf32_Word sh_flags; + Elf32_Addr sh_addr; + Elf32_Off sh_offset; + Elf32_Word sh_size; + Elf32_Word sh_link; + Elf32_Word sh_info; + Elf32_Word sh_addralign; + Elf32_Word sh_entsize; +} Elf32_Shdr; + +typedef struct { + Elf64_Word sh_name; + Elf64_Word sh_type; + Elf64_Xword sh_flags; + Elf64_Addr sh_addr; + Elf64_Off sh_offset; + Elf64_Xword sh_size; + Elf64_Word sh_link; + Elf64_Word sh_info; + Elf64_Xword sh_addralign; + Elf64_Xword sh_entsize; +} Elf64_Shdr; + + + +#define SHN_UNDEF 0 +#define SHN_LORESERVE 0xff00 +#define SHN_LOPROC 0xff00 +#define SHN_BEFORE 0xff00 + +#define SHN_AFTER 0xff01 + +#define SHN_HIPROC 0xff1f +#define SHN_LOOS 0xff20 +#define SHN_HIOS 0xff3f +#define SHN_ABS 0xfff1 +#define SHN_COMMON 0xfff2 +#define SHN_XINDEX 0xffff +#define SHN_HIRESERVE 0xffff + + + +#define SHT_NULL 0 +#define SHT_PROGBITS 1 +#define SHT_SYMTAB 2 +#define SHT_STRTAB 3 +#define SHT_RELA 4 +#define SHT_HASH 5 +#define SHT_DYNAMIC 6 +#define SHT_NOTE 7 +#define SHT_NOBITS 8 +#define SHT_REL 9 +#define SHT_SHLIB 10 +#define SHT_DYNSYM 11 +#define SHT_INIT_ARRAY 14 +#define SHT_FINI_ARRAY 15 +#define SHT_PREINIT_ARRAY 16 +#define SHT_GROUP 17 +#define SHT_SYMTAB_SHNDX 18 +#define SHT_NUM 19 +#define SHT_LOOS 0x60000000 +#define SHT_GNU_ATTRIBUTES 0x6ffffff5 +#define SHT_GNU_HASH 0x6ffffff6 +#define SHT_GNU_LIBLIST 0x6ffffff7 +#define SHT_CHECKSUM 0x6ffffff8 +#define SHT_LOSUNW 0x6ffffffa +#define SHT_SUNW_move 0x6ffffffa +#define SHT_SUNW_COMDAT 0x6ffffffb +#define SHT_SUNW_syminfo 0x6ffffffc +#define SHT_GNU_verdef 0x6ffffffd +#define SHT_GNU_verneed 0x6ffffffe +#define SHT_GNU_versym 0x6fffffff +#define SHT_HISUNW 0x6fffffff +#define SHT_HIOS 0x6fffffff +#define SHT_LOPROC 0x70000000 +#define SHT_HIPROC 0x7fffffff +#define SHT_LOUSER 0x80000000 +#define SHT_HIUSER 0x8fffffff + +#define SHF_WRITE (1 << 0) +#define SHF_ALLOC (1 << 1) +#define SHF_EXECINSTR (1 << 2) +#define SHF_MERGE (1 << 4) +#define SHF_STRINGS (1 << 5) +#define SHF_INFO_LINK (1 << 6) +#define SHF_LINK_ORDER (1 << 7) +#define SHF_OS_NONCONFORMING (1 << 8) + +#define SHF_GROUP (1 << 9) +#define SHF_TLS (1 << 10) +#define SHF_COMPRESSED (1 << 11) +#define SHF_MASKOS 0x0ff00000 +#define SHF_MASKPROC 0xf0000000 +#define SHF_ORDERED (1 << 30) +#define SHF_EXCLUDE (1U << 31) + +typedef struct { + Elf32_Word ch_type; + Elf32_Word ch_size; + Elf32_Word ch_addralign; +} Elf32_Chdr; + +typedef struct { + Elf64_Word ch_type; + Elf64_Word ch_reserved; + Elf64_Xword ch_size; + Elf64_Xword ch_addralign; +} Elf64_Chdr; + +#define ELFCOMPRESS_ZLIB 1 +#define ELFCOMPRESS_LOOS 0x60000000 +#define ELFCOMPRESS_HIOS 0x6fffffff +#define ELFCOMPRESS_LOPROC 0x70000000 +#define ELFCOMPRESS_HIPROC 0x7fffffff + + +#define GRP_COMDAT 0x1 + +typedef struct { + Elf32_Word st_name; + Elf32_Addr st_value; + Elf32_Word st_size; + unsigned char st_info; + unsigned char st_other; + Elf32_Section st_shndx; +} Elf32_Sym; + +typedef struct { + Elf64_Word st_name; + unsigned char st_info; + unsigned char st_other; + Elf64_Section st_shndx; + Elf64_Addr st_value; + Elf64_Xword st_size; +} Elf64_Sym; + +typedef struct { + Elf32_Half si_boundto; + Elf32_Half si_flags; +} Elf32_Syminfo; + +typedef struct { + Elf64_Half si_boundto; + Elf64_Half si_flags; +} Elf64_Syminfo; + +#define SYMINFO_BT_SELF 0xffff +#define SYMINFO_BT_PARENT 0xfffe +#define SYMINFO_BT_LOWRESERVE 0xff00 + +#define SYMINFO_FLG_DIRECT 0x0001 +#define SYMINFO_FLG_PASSTHRU 0x0002 +#define SYMINFO_FLG_COPY 0x0004 +#define SYMINFO_FLG_LAZYLOAD 0x0008 + +#define SYMINFO_NONE 0 +#define SYMINFO_CURRENT 1 +#define SYMINFO_NUM 2 + +#define ELF32_ST_BIND(val) (((unsigned char) (val)) >> 4) +#define ELF32_ST_TYPE(val) ((val) & 0xf) +#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf)) + +#define ELF64_ST_BIND(val) ELF32_ST_BIND (val) +#define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val) +#define ELF64_ST_INFO(bind, type) ELF32_ST_INFO ((bind), (type)) + +#define STB_LOCAL 0 +#define STB_GLOBAL 1 +#define STB_WEAK 2 +#define STB_NUM 3 +#define STB_LOOS 10 +#define STB_GNU_UNIQUE 10 +#define STB_HIOS 12 +#define STB_LOPROC 13 +#define STB_HIPROC 15 + +#define STT_NOTYPE 0 +#define STT_OBJECT 1 +#define STT_FUNC 2 +#define STT_SECTION 3 +#define STT_FILE 4 +#define STT_COMMON 5 +#define STT_TLS 6 +#define STT_NUM 7 +#define STT_LOOS 10 +#define STT_GNU_IFUNC 10 +#define STT_HIOS 12 +#define STT_LOPROC 13 +#define STT_HIPROC 15 + +#define STN_UNDEF 0 + +#define ELF32_ST_VISIBILITY(o) ((o) & 0x03) +#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o) + +#define STV_DEFAULT 0 +#define STV_INTERNAL 1 +#define STV_HIDDEN 2 +#define STV_PROTECTED 3 + + + + +typedef struct { + Elf32_Addr r_offset; + Elf32_Word r_info; +} Elf32_Rel; + +typedef struct { + Elf64_Addr r_offset; + Elf64_Xword r_info; +} Elf64_Rel; + + + +typedef struct { + Elf32_Addr r_offset; + Elf32_Word r_info; + Elf32_Sword r_addend; +} Elf32_Rela; + +typedef struct { + Elf64_Addr r_offset; + Elf64_Xword r_info; + Elf64_Sxword r_addend; +} Elf64_Rela; + + + +#define ELF32_R_SYM(val) ((val) >> 8) +#define ELF32_R_TYPE(val) ((val) & 0xff) +#define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff)) + +#define ELF64_R_SYM(i) ((i) >> 32) +#define ELF64_R_TYPE(i) ((i) & 0xffffffff) +#define ELF64_R_INFO(sym,type) ((((Elf64_Xword) (sym)) << 32) + (type)) + + + +typedef struct { + Elf32_Word p_type; + Elf32_Off p_offset; + Elf32_Addr p_vaddr; + Elf32_Addr p_paddr; + Elf32_Word p_filesz; + Elf32_Word p_memsz; + Elf32_Word p_flags; + Elf32_Word p_align; +} Elf32_Phdr; + +typedef struct { + Elf64_Word p_type; + Elf64_Word p_flags; + Elf64_Off p_offset; + Elf64_Addr p_vaddr; + Elf64_Addr p_paddr; + Elf64_Xword p_filesz; + Elf64_Xword p_memsz; + Elf64_Xword p_align; +} Elf64_Phdr; + + + +#define PT_NULL 0 +#define PT_LOAD 1 +#define PT_DYNAMIC 2 +#define PT_INTERP 3 +#define PT_NOTE 4 +#define PT_SHLIB 5 +#define PT_PHDR 6 +#define PT_TLS 7 +#define PT_NUM 8 +#define PT_LOOS 0x60000000 +#define PT_GNU_EH_FRAME 0x6474e550 +#define PT_GNU_STACK 0x6474e551 +#define PT_GNU_RELRO 0x6474e552 +#define PT_LOSUNW 0x6ffffffa +#define PT_SUNWBSS 0x6ffffffa +#define PT_SUNWSTACK 0x6ffffffb +#define PT_HISUNW 0x6fffffff +#define PT_HIOS 0x6fffffff +#define PT_LOPROC 0x70000000 +#define PT_HIPROC 0x7fffffff + + +#define PN_XNUM 0xffff + + +#define PF_X (1 << 0) +#define PF_W (1 << 1) +#define PF_R (1 << 2) +#define PF_MASKOS 0x0ff00000 +#define PF_MASKPROC 0xf0000000 + + + +#define NT_PRSTATUS 1 +#define NT_FPREGSET 2 +#define NT_PRPSINFO 3 +#define NT_PRXREG 4 +#define NT_TASKSTRUCT 4 +#define NT_PLATFORM 5 +#define NT_AUXV 6 +#define NT_GWINDOWS 7 +#define NT_ASRS 8 +#define NT_PSTATUS 10 +#define NT_PSINFO 13 +#define NT_PRCRED 14 +#define NT_UTSNAME 15 +#define NT_LWPSTATUS 16 +#define NT_LWPSINFO 17 +#define NT_PRFPXREG 20 +#define NT_SIGINFO 0x53494749 +#define NT_FILE 0x46494c45 +#define NT_PRXFPREG 0x46e62b7f +#define NT_PPC_VMX 0x100 +#define NT_PPC_SPE 0x101 +#define NT_PPC_VSX 0x102 +#define NT_386_TLS 0x200 +#define NT_386_IOPERM 0x201 +#define NT_X86_XSTATE 0x202 +#define NT_S390_HIGH_GPRS 0x300 +#define NT_S390_TIMER 0x301 +#define NT_S390_TODCMP 0x302 +#define NT_S390_TODPREG 0x303 +#define NT_S390_CTRS 0x304 +#define NT_S390_PREFIX 0x305 +#define NT_S390_LAST_BREAK 0x306 +#define NT_S390_SYSTEM_CALL 0x307 +#define NT_S390_TDB 0x308 +#define NT_ARM_VFP 0x400 +#define NT_ARM_TLS 0x401 +#define NT_ARM_HW_BREAK 0x402 +#define NT_ARM_HW_WATCH 0x403 +#define NT_ARM_SYSTEM_CALL 0x404 +#define NT_ARM_SVE 0x405 +#define NT_METAG_CBUF 0x500 +#define NT_METAG_RPIPE 0x501 +#define NT_METAG_TLS 0x502 +#define NT_VERSION 1 + + + + +typedef struct { + Elf32_Sword d_tag; + union { + Elf32_Word d_val; + Elf32_Addr d_ptr; + } d_un; +} Elf32_Dyn; + +typedef struct { + Elf64_Sxword d_tag; + union { + Elf64_Xword d_val; + Elf64_Addr d_ptr; + } d_un; +} Elf64_Dyn; + + + +#define DT_NULL 0 +#define DT_NEEDED 1 +#define DT_PLTRELSZ 2 +#define DT_PLTGOT 3 +#define DT_HASH 4 +#define DT_STRTAB 5 +#define DT_SYMTAB 6 +#define DT_RELA 7 +#define DT_RELASZ 8 +#define DT_RELAENT 9 +#define DT_STRSZ 10 +#define DT_SYMENT 11 +#define DT_INIT 12 +#define DT_FINI 13 +#define DT_SONAME 14 +#define DT_RPATH 15 +#define DT_SYMBOLIC 16 +#define DT_REL 17 +#define DT_RELSZ 18 +#define DT_RELENT 19 +#define DT_PLTREL 20 +#define DT_DEBUG 21 +#define DT_TEXTREL 22 +#define DT_JMPREL 23 +#define DT_BIND_NOW 24 +#define DT_INIT_ARRAY 25 +#define DT_FINI_ARRAY 26 +#define DT_INIT_ARRAYSZ 27 +#define DT_FINI_ARRAYSZ 28 +#define DT_RUNPATH 29 +#define DT_FLAGS 30 +#define DT_ENCODING 32 +#define DT_PREINIT_ARRAY 32 +#define DT_PREINIT_ARRAYSZ 33 +#define DT_NUM 34 +#define DT_LOOS 0x6000000d +#define DT_HIOS 0x6ffff000 +#define DT_LOPROC 0x70000000 +#define DT_HIPROC 0x7fffffff +#define DT_PROCNUM DT_MIPS_NUM + +#define DT_VALRNGLO 0x6ffffd00 +#define DT_GNU_PRELINKED 0x6ffffdf5 +#define DT_GNU_CONFLICTSZ 0x6ffffdf6 +#define DT_GNU_LIBLISTSZ 0x6ffffdf7 +#define DT_CHECKSUM 0x6ffffdf8 +#define DT_PLTPADSZ 0x6ffffdf9 +#define DT_MOVEENT 0x6ffffdfa +#define DT_MOVESZ 0x6ffffdfb +#define DT_FEATURE_1 0x6ffffdfc +#define DT_POSFLAG_1 0x6ffffdfd + +#define DT_SYMINSZ 0x6ffffdfe +#define DT_SYMINENT 0x6ffffdff +#define DT_VALRNGHI 0x6ffffdff +#define DT_VALTAGIDX(tag) (DT_VALRNGHI - (tag)) +#define DT_VALNUM 12 + +#define DT_ADDRRNGLO 0x6ffffe00 +#define DT_GNU_HASH 0x6ffffef5 +#define DT_TLSDESC_PLT 0x6ffffef6 +#define DT_TLSDESC_GOT 0x6ffffef7 +#define DT_GNU_CONFLICT 0x6ffffef8 +#define DT_GNU_LIBLIST 0x6ffffef9 +#define DT_CONFIG 0x6ffffefa +#define DT_DEPAUDIT 0x6ffffefb +#define DT_AUDIT 0x6ffffefc +#define DT_PLTPAD 0x6ffffefd +#define DT_MOVETAB 0x6ffffefe +#define DT_SYMINFO 0x6ffffeff +#define DT_ADDRRNGHI 0x6ffffeff +#define DT_ADDRTAGIDX(tag) (DT_ADDRRNGHI - (tag)) +#define DT_ADDRNUM 11 + + + +#define DT_VERSYM 0x6ffffff0 + +#define DT_RELACOUNT 0x6ffffff9 +#define DT_RELCOUNT 0x6ffffffa + + +#define DT_FLAGS_1 0x6ffffffb +#define DT_VERDEF 0x6ffffffc + +#define DT_VERDEFNUM 0x6ffffffd +#define DT_VERNEED 0x6ffffffe + +#define DT_VERNEEDNUM 0x6fffffff +#define DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag)) +#define DT_VERSIONTAGNUM 16 + + + +#define DT_AUXILIARY 0x7ffffffd +#define DT_FILTER 0x7fffffff +#define DT_EXTRATAGIDX(tag) ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1) +#define DT_EXTRANUM 3 + + +#define DF_ORIGIN 0x00000001 +#define DF_SYMBOLIC 0x00000002 +#define DF_TEXTREL 0x00000004 +#define DF_BIND_NOW 0x00000008 +#define DF_STATIC_TLS 0x00000010 + + + +#define DF_1_NOW 0x00000001 +#define DF_1_GLOBAL 0x00000002 +#define DF_1_GROUP 0x00000004 +#define DF_1_NODELETE 0x00000008 +#define DF_1_LOADFLTR 0x00000010 +#define DF_1_INITFIRST 0x00000020 +#define DF_1_NOOPEN 0x00000040 +#define DF_1_ORIGIN 0x00000080 +#define DF_1_DIRECT 0x00000100 +#define DF_1_TRANS 0x00000200 +#define DF_1_INTERPOSE 0x00000400 +#define DF_1_NODEFLIB 0x00000800 +#define DF_1_NODUMP 0x00001000 +#define DF_1_CONFALT 0x00002000 +#define DF_1_ENDFILTEE 0x00004000 +#define DF_1_DISPRELDNE 0x00008000 +#define DF_1_DISPRELPND 0x00010000 +#define DF_1_NODIRECT 0x00020000 +#define DF_1_IGNMULDEF 0x00040000 +#define DF_1_NOKSYMS 0x00080000 +#define DF_1_NOHDR 0x00100000 +#define DF_1_EDITED 0x00200000 +#define DF_1_NORELOC 0x00400000 +#define DF_1_SYMINTPOSE 0x00800000 +#define DF_1_GLOBAUDIT 0x01000000 +#define DF_1_SINGLETON 0x02000000 + +#define DTF_1_PARINIT 0x00000001 +#define DTF_1_CONFEXP 0x00000002 + + +#define DF_P1_LAZYLOAD 0x00000001 +#define DF_P1_GROUPPERM 0x00000002 + + + + +typedef struct { + Elf32_Half vd_version; + Elf32_Half vd_flags; + Elf32_Half vd_ndx; + Elf32_Half vd_cnt; + Elf32_Word vd_hash; + Elf32_Word vd_aux; + Elf32_Word vd_next; +} Elf32_Verdef; + +typedef struct { + Elf64_Half vd_version; + Elf64_Half vd_flags; + Elf64_Half vd_ndx; + Elf64_Half vd_cnt; + Elf64_Word vd_hash; + Elf64_Word vd_aux; + Elf64_Word vd_next; +} Elf64_Verdef; + + + +#define VER_DEF_NONE 0 +#define VER_DEF_CURRENT 1 +#define VER_DEF_NUM 2 + + +#define VER_FLG_BASE 0x1 +#define VER_FLG_WEAK 0x2 + + +#define VER_NDX_LOCAL 0 +#define VER_NDX_GLOBAL 1 +#define VER_NDX_LORESERVE 0xff00 +#define VER_NDX_ELIMINATE 0xff01 + + + +typedef struct { + Elf32_Word vda_name; + Elf32_Word vda_next; +} Elf32_Verdaux; + +typedef struct { + Elf64_Word vda_name; + Elf64_Word vda_next; +} Elf64_Verdaux; + + + + +typedef struct { + Elf32_Half vn_version; + Elf32_Half vn_cnt; + Elf32_Word vn_file; + Elf32_Word vn_aux; + Elf32_Word vn_next; +} Elf32_Verneed; + +typedef struct { + Elf64_Half vn_version; + Elf64_Half vn_cnt; + Elf64_Word vn_file; + Elf64_Word vn_aux; + Elf64_Word vn_next; +} Elf64_Verneed; + + + +#define VER_NEED_NONE 0 +#define VER_NEED_CURRENT 1 +#define VER_NEED_NUM 2 + + + +typedef struct { + Elf32_Word vna_hash; + Elf32_Half vna_flags; + Elf32_Half vna_other; + Elf32_Word vna_name; + Elf32_Word vna_next; +} Elf32_Vernaux; + +typedef struct { + Elf64_Word vna_hash; + Elf64_Half vna_flags; + Elf64_Half vna_other; + Elf64_Word vna_name; + Elf64_Word vna_next; +} Elf64_Vernaux; + + + +#define VER_FLG_WEAK 0x2 + + + +typedef struct { + uint32_t a_type; + union { + uint32_t a_val; + } a_un; +} Elf32_auxv_t; + +typedef struct { + uint64_t a_type; + union { + uint64_t a_val; + } a_un; +} Elf64_auxv_t; + + + +#define AT_NULL 0 +#define AT_IGNORE 1 +#define AT_EXECFD 2 +#define AT_PHDR 3 +#define AT_PHENT 4 +#define AT_PHNUM 5 +#define AT_PAGESZ 6 +#define AT_BASE 7 +#define AT_FLAGS 8 +#define AT_ENTRY 9 +#define AT_NOTELF 10 +#define AT_UID 11 +#define AT_EUID 12 +#define AT_GID 13 +#define AT_EGID 14 +#define AT_CLKTCK 17 + + +#define AT_PLATFORM 15 +#define AT_HWCAP 16 + + + + +#define AT_FPUCW 18 + + +#define AT_DCACHEBSIZE 19 +#define AT_ICACHEBSIZE 20 +#define AT_UCACHEBSIZE 21 + + + +#define AT_IGNOREPPC 22 + +#define AT_SECURE 23 + +#define AT_BASE_PLATFORM 24 + +#define AT_RANDOM 25 + +#define AT_HWCAP2 26 + +#define AT_EXECFN 31 + + + +#define AT_SYSINFO 32 +#define AT_SYSINFO_EHDR 33 + + + +#define AT_L1I_CACHESHAPE 34 +#define AT_L1D_CACHESHAPE 35 +#define AT_L2_CACHESHAPE 36 +#define AT_L3_CACHESHAPE 37 + + + + +typedef struct { + Elf32_Word n_namesz; + Elf32_Word n_descsz; + Elf32_Word n_type; +} Elf32_Nhdr; + +typedef struct { + Elf64_Word n_namesz; + Elf64_Word n_descsz; + Elf64_Word n_type; +} Elf64_Nhdr; + + + + +#define ELF_NOTE_SOLARIS "SUNW Solaris" + + +#define ELF_NOTE_GNU "GNU" + + + + + +#define ELF_NOTE_PAGESIZE_HINT 1 + + +#define NT_GNU_ABI_TAG 1 +#define ELF_NOTE_ABI NT_GNU_ABI_TAG + + + +#define ELF_NOTE_OS_LINUX 0 +#define ELF_NOTE_OS_GNU 1 +#define ELF_NOTE_OS_SOLARIS2 2 +#define ELF_NOTE_OS_FREEBSD 3 + +#define NT_GNU_BUILD_ID 3 +#define NT_GNU_GOLD_VERSION 4 + + + +typedef struct { + Elf32_Xword m_value; + Elf32_Word m_info; + Elf32_Word m_poffset; + Elf32_Half m_repeat; + Elf32_Half m_stride; +} Elf32_Move; + +typedef struct { + Elf64_Xword m_value; + Elf64_Xword m_info; + Elf64_Xword m_poffset; + Elf64_Half m_repeat; + Elf64_Half m_stride; +} Elf64_Move; + + +#define ELF32_M_SYM(info) ((info) >> 8) +#define ELF32_M_SIZE(info) ((unsigned char) (info)) +#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size)) + +#define ELF64_M_SYM(info) ELF32_M_SYM (info) +#define ELF64_M_SIZE(info) ELF32_M_SIZE (info) +#define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size) + +#define EF_CPU32 0x00810000 + +#define R_68K_NONE 0 +#define R_68K_32 1 +#define R_68K_16 2 +#define R_68K_8 3 +#define R_68K_PC32 4 +#define R_68K_PC16 5 +#define R_68K_PC8 6 +#define R_68K_GOT32 7 +#define R_68K_GOT16 8 +#define R_68K_GOT8 9 +#define R_68K_GOT32O 10 +#define R_68K_GOT16O 11 +#define R_68K_GOT8O 12 +#define R_68K_PLT32 13 +#define R_68K_PLT16 14 +#define R_68K_PLT8 15 +#define R_68K_PLT32O 16 +#define R_68K_PLT16O 17 +#define R_68K_PLT8O 18 +#define R_68K_COPY 19 +#define R_68K_GLOB_DAT 20 +#define R_68K_JMP_SLOT 21 +#define R_68K_RELATIVE 22 +#define R_68K_NUM 23 + +#define R_386_NONE 0 +#define R_386_32 1 +#define R_386_PC32 2 +#define R_386_GOT32 3 +#define R_386_PLT32 4 +#define R_386_COPY 5 +#define R_386_GLOB_DAT 6 +#define R_386_JMP_SLOT 7 +#define R_386_RELATIVE 8 +#define R_386_GOTOFF 9 +#define R_386_GOTPC 10 +#define R_386_32PLT 11 +#define R_386_TLS_TPOFF 14 +#define R_386_TLS_IE 15 +#define R_386_TLS_GOTIE 16 +#define R_386_TLS_LE 17 +#define R_386_TLS_GD 18 +#define R_386_TLS_LDM 19 +#define R_386_16 20 +#define R_386_PC16 21 +#define R_386_8 22 +#define R_386_PC8 23 +#define R_386_TLS_GD_32 24 +#define R_386_TLS_GD_PUSH 25 +#define R_386_TLS_GD_CALL 26 +#define R_386_TLS_GD_POP 27 +#define R_386_TLS_LDM_32 28 +#define R_386_TLS_LDM_PUSH 29 +#define R_386_TLS_LDM_CALL 30 +#define R_386_TLS_LDM_POP 31 +#define R_386_TLS_LDO_32 32 +#define R_386_TLS_IE_32 33 +#define R_386_TLS_LE_32 34 +#define R_386_TLS_DTPMOD32 35 +#define R_386_TLS_DTPOFF32 36 +#define R_386_TLS_TPOFF32 37 +#define R_386_SIZE32 38 +#define R_386_TLS_GOTDESC 39 +#define R_386_TLS_DESC_CALL 40 +#define R_386_TLS_DESC 41 +#define R_386_IRELATIVE 42 +#define R_386_GOT32X 43 +#define R_386_NUM 44 + + + + + +#define STT_SPARC_REGISTER 13 + + + +#define EF_SPARCV9_MM 3 +#define EF_SPARCV9_TSO 0 +#define EF_SPARCV9_PSO 1 +#define EF_SPARCV9_RMO 2 +#define EF_SPARC_LEDATA 0x800000 +#define EF_SPARC_EXT_MASK 0xFFFF00 +#define EF_SPARC_32PLUS 0x000100 +#define EF_SPARC_SUN_US1 0x000200 +#define EF_SPARC_HAL_R1 0x000400 +#define EF_SPARC_SUN_US3 0x000800 + + + +#define R_SPARC_NONE 0 +#define R_SPARC_8 1 +#define R_SPARC_16 2 +#define R_SPARC_32 3 +#define R_SPARC_DISP8 4 +#define R_SPARC_DISP16 5 +#define R_SPARC_DISP32 6 +#define R_SPARC_WDISP30 7 +#define R_SPARC_WDISP22 8 +#define R_SPARC_HI22 9 +#define R_SPARC_22 10 +#define R_SPARC_13 11 +#define R_SPARC_LO10 12 +#define R_SPARC_GOT10 13 +#define R_SPARC_GOT13 14 +#define R_SPARC_GOT22 15 +#define R_SPARC_PC10 16 +#define R_SPARC_PC22 17 +#define R_SPARC_WPLT30 18 +#define R_SPARC_COPY 19 +#define R_SPARC_GLOB_DAT 20 +#define R_SPARC_JMP_SLOT 21 +#define R_SPARC_RELATIVE 22 +#define R_SPARC_UA32 23 + + + +#define R_SPARC_PLT32 24 +#define R_SPARC_HIPLT22 25 +#define R_SPARC_LOPLT10 26 +#define R_SPARC_PCPLT32 27 +#define R_SPARC_PCPLT22 28 +#define R_SPARC_PCPLT10 29 +#define R_SPARC_10 30 +#define R_SPARC_11 31 +#define R_SPARC_64 32 +#define R_SPARC_OLO10 33 +#define R_SPARC_HH22 34 +#define R_SPARC_HM10 35 +#define R_SPARC_LM22 36 +#define R_SPARC_PC_HH22 37 +#define R_SPARC_PC_HM10 38 +#define R_SPARC_PC_LM22 39 +#define R_SPARC_WDISP16 40 +#define R_SPARC_WDISP19 41 +#define R_SPARC_GLOB_JMP 42 +#define R_SPARC_7 43 +#define R_SPARC_5 44 +#define R_SPARC_6 45 +#define R_SPARC_DISP64 46 +#define R_SPARC_PLT64 47 +#define R_SPARC_HIX22 48 +#define R_SPARC_LOX10 49 +#define R_SPARC_H44 50 +#define R_SPARC_M44 51 +#define R_SPARC_L44 52 +#define R_SPARC_REGISTER 53 +#define R_SPARC_UA64 54 +#define R_SPARC_UA16 55 +#define R_SPARC_TLS_GD_HI22 56 +#define R_SPARC_TLS_GD_LO10 57 +#define R_SPARC_TLS_GD_ADD 58 +#define R_SPARC_TLS_GD_CALL 59 +#define R_SPARC_TLS_LDM_HI22 60 +#define R_SPARC_TLS_LDM_LO10 61 +#define R_SPARC_TLS_LDM_ADD 62 +#define R_SPARC_TLS_LDM_CALL 63 +#define R_SPARC_TLS_LDO_HIX22 64 +#define R_SPARC_TLS_LDO_LOX10 65 +#define R_SPARC_TLS_LDO_ADD 66 +#define R_SPARC_TLS_IE_HI22 67 +#define R_SPARC_TLS_IE_LO10 68 +#define R_SPARC_TLS_IE_LD 69 +#define R_SPARC_TLS_IE_LDX 70 +#define R_SPARC_TLS_IE_ADD 71 +#define R_SPARC_TLS_LE_HIX22 72 +#define R_SPARC_TLS_LE_LOX10 73 +#define R_SPARC_TLS_DTPMOD32 74 +#define R_SPARC_TLS_DTPMOD64 75 +#define R_SPARC_TLS_DTPOFF32 76 +#define R_SPARC_TLS_DTPOFF64 77 +#define R_SPARC_TLS_TPOFF32 78 +#define R_SPARC_TLS_TPOFF64 79 +#define R_SPARC_GOTDATA_HIX22 80 +#define R_SPARC_GOTDATA_LOX10 81 +#define R_SPARC_GOTDATA_OP_HIX22 82 +#define R_SPARC_GOTDATA_OP_LOX10 83 +#define R_SPARC_GOTDATA_OP 84 +#define R_SPARC_H34 85 +#define R_SPARC_SIZE32 86 +#define R_SPARC_SIZE64 87 +#define R_SPARC_GNU_VTINHERIT 250 +#define R_SPARC_GNU_VTENTRY 251 +#define R_SPARC_REV32 252 + +#define R_SPARC_NUM 253 + + + +#define DT_SPARC_REGISTER 0x70000001 +#define DT_SPARC_NUM 2 + + +#define EF_MIPS_NOREORDER 1 +#define EF_MIPS_PIC 2 +#define EF_MIPS_CPIC 4 +#define EF_MIPS_XGOT 8 +#define EF_MIPS_64BIT_WHIRL 16 +#define EF_MIPS_ABI2 32 +#define EF_MIPS_ABI_ON32 64 +#define EF_MIPS_FP64 512 +#define EF_MIPS_NAN2008 1024 +#define EF_MIPS_ARCH 0xf0000000 + + + +#define EF_MIPS_ARCH_1 0x00000000 +#define EF_MIPS_ARCH_2 0x10000000 +#define EF_MIPS_ARCH_3 0x20000000 +#define EF_MIPS_ARCH_4 0x30000000 +#define EF_MIPS_ARCH_5 0x40000000 +#define EF_MIPS_ARCH_32 0x50000000 +#define EF_MIPS_ARCH_64 0x60000000 +#define EF_MIPS_ARCH_32R2 0x70000000 +#define EF_MIPS_ARCH_64R2 0x80000000 + + +#define E_MIPS_ARCH_1 0x00000000 +#define E_MIPS_ARCH_2 0x10000000 +#define E_MIPS_ARCH_3 0x20000000 +#define E_MIPS_ARCH_4 0x30000000 +#define E_MIPS_ARCH_5 0x40000000 +#define E_MIPS_ARCH_32 0x50000000 +#define E_MIPS_ARCH_64 0x60000000 + + + +#define SHN_MIPS_ACOMMON 0xff00 +#define SHN_MIPS_TEXT 0xff01 +#define SHN_MIPS_DATA 0xff02 +#define SHN_MIPS_SCOMMON 0xff03 +#define SHN_MIPS_SUNDEFINED 0xff04 + + + +#define SHT_MIPS_LIBLIST 0x70000000 +#define SHT_MIPS_MSYM 0x70000001 +#define SHT_MIPS_CONFLICT 0x70000002 +#define SHT_MIPS_GPTAB 0x70000003 +#define SHT_MIPS_UCODE 0x70000004 +#define SHT_MIPS_DEBUG 0x70000005 +#define SHT_MIPS_REGINFO 0x70000006 +#define SHT_MIPS_PACKAGE 0x70000007 +#define SHT_MIPS_PACKSYM 0x70000008 +#define SHT_MIPS_RELD 0x70000009 +#define SHT_MIPS_IFACE 0x7000000b +#define SHT_MIPS_CONTENT 0x7000000c +#define SHT_MIPS_OPTIONS 0x7000000d +#define SHT_MIPS_SHDR 0x70000010 +#define SHT_MIPS_FDESC 0x70000011 +#define SHT_MIPS_EXTSYM 0x70000012 +#define SHT_MIPS_DENSE 0x70000013 +#define SHT_MIPS_PDESC 0x70000014 +#define SHT_MIPS_LOCSYM 0x70000015 +#define SHT_MIPS_AUXSYM 0x70000016 +#define SHT_MIPS_OPTSYM 0x70000017 +#define SHT_MIPS_LOCSTR 0x70000018 +#define SHT_MIPS_LINE 0x70000019 +#define SHT_MIPS_RFDESC 0x7000001a +#define SHT_MIPS_DELTASYM 0x7000001b +#define SHT_MIPS_DELTAINST 0x7000001c +#define SHT_MIPS_DELTACLASS 0x7000001d +#define SHT_MIPS_DWARF 0x7000001e +#define SHT_MIPS_DELTADECL 0x7000001f +#define SHT_MIPS_SYMBOL_LIB 0x70000020 +#define SHT_MIPS_EVENTS 0x70000021 +#define SHT_MIPS_TRANSLATE 0x70000022 +#define SHT_MIPS_PIXIE 0x70000023 +#define SHT_MIPS_XLATE 0x70000024 +#define SHT_MIPS_XLATE_DEBUG 0x70000025 +#define SHT_MIPS_WHIRL 0x70000026 +#define SHT_MIPS_EH_REGION 0x70000027 +#define SHT_MIPS_XLATE_OLD 0x70000028 +#define SHT_MIPS_PDR_EXCEPTION 0x70000029 + + + +#define SHF_MIPS_GPREL 0x10000000 +#define SHF_MIPS_MERGE 0x20000000 +#define SHF_MIPS_ADDR 0x40000000 +#define SHF_MIPS_STRINGS 0x80000000 +#define SHF_MIPS_NOSTRIP 0x08000000 +#define SHF_MIPS_LOCAL 0x04000000 +#define SHF_MIPS_NAMES 0x02000000 +#define SHF_MIPS_NODUPE 0x01000000 + + + + + +#define STO_MIPS_DEFAULT 0x0 +#define STO_MIPS_INTERNAL 0x1 +#define STO_MIPS_HIDDEN 0x2 +#define STO_MIPS_PROTECTED 0x3 +#define STO_MIPS_PLT 0x8 +#define STO_MIPS_SC_ALIGN_UNUSED 0xff + + +#define STB_MIPS_SPLIT_COMMON 13 + + + +typedef union { + struct { + Elf32_Word gt_current_g_value; + Elf32_Word gt_unused; + } gt_header; + struct { + Elf32_Word gt_g_value; + Elf32_Word gt_bytes; + } gt_entry; +} Elf32_gptab; + + + +typedef struct { + Elf32_Word ri_gprmask; + Elf32_Word ri_cprmask[4]; + Elf32_Sword ri_gp_value; +} Elf32_RegInfo; + + + +typedef struct { + unsigned char kind; + + unsigned char size; + Elf32_Section section; + + Elf32_Word info; +} Elf_Options; + + + +#define ODK_NULL 0 +#define ODK_REGINFO 1 +#define ODK_EXCEPTIONS 2 +#define ODK_PAD 3 +#define ODK_HWPATCH 4 +#define ODK_FILL 5 +#define ODK_TAGS 6 +#define ODK_HWAND 7 +#define ODK_HWOR 8 + + + +#define OEX_FPU_MIN 0x1f +#define OEX_FPU_MAX 0x1f00 +#define OEX_PAGE0 0x10000 +#define OEX_SMM 0x20000 +#define OEX_FPDBUG 0x40000 +#define OEX_PRECISEFP OEX_FPDBUG +#define OEX_DISMISS 0x80000 + +#define OEX_FPU_INVAL 0x10 +#define OEX_FPU_DIV0 0x08 +#define OEX_FPU_OFLO 0x04 +#define OEX_FPU_UFLO 0x02 +#define OEX_FPU_INEX 0x01 + + + +#define OHW_R4KEOP 0x1 +#define OHW_R8KPFETCH 0x2 +#define OHW_R5KEOP 0x4 +#define OHW_R5KCVTL 0x8 + +#define OPAD_PREFIX 0x1 +#define OPAD_POSTFIX 0x2 +#define OPAD_SYMBOL 0x4 + + + +typedef struct { + Elf32_Word hwp_flags1; + Elf32_Word hwp_flags2; +} Elf_Options_Hw; + + + +#define OHWA0_R4KEOP_CHECKED 0x00000001 +#define OHWA1_R4KEOP_CLEAN 0x00000002 + + + +#define R_MIPS_NONE 0 +#define R_MIPS_16 1 +#define R_MIPS_32 2 +#define R_MIPS_REL32 3 +#define R_MIPS_26 4 +#define R_MIPS_HI16 5 +#define R_MIPS_LO16 6 +#define R_MIPS_GPREL16 7 +#define R_MIPS_LITERAL 8 +#define R_MIPS_GOT16 9 +#define R_MIPS_PC16 10 +#define R_MIPS_CALL16 11 +#define R_MIPS_GPREL32 12 + +#define R_MIPS_SHIFT5 16 +#define R_MIPS_SHIFT6 17 +#define R_MIPS_64 18 +#define R_MIPS_GOT_DISP 19 +#define R_MIPS_GOT_PAGE 20 +#define R_MIPS_GOT_OFST 21 +#define R_MIPS_GOT_HI16 22 +#define R_MIPS_GOT_LO16 23 +#define R_MIPS_SUB 24 +#define R_MIPS_INSERT_A 25 +#define R_MIPS_INSERT_B 26 +#define R_MIPS_DELETE 27 +#define R_MIPS_HIGHER 28 +#define R_MIPS_HIGHEST 29 +#define R_MIPS_CALL_HI16 30 +#define R_MIPS_CALL_LO16 31 +#define R_MIPS_SCN_DISP 32 +#define R_MIPS_REL16 33 +#define R_MIPS_ADD_IMMEDIATE 34 +#define R_MIPS_PJUMP 35 +#define R_MIPS_RELGOT 36 +#define R_MIPS_JALR 37 +#define R_MIPS_TLS_DTPMOD32 38 +#define R_MIPS_TLS_DTPREL32 39 +#define R_MIPS_TLS_DTPMOD64 40 +#define R_MIPS_TLS_DTPREL64 41 +#define R_MIPS_TLS_GD 42 +#define R_MIPS_TLS_LDM 43 +#define R_MIPS_TLS_DTPREL_HI16 44 +#define R_MIPS_TLS_DTPREL_LO16 45 +#define R_MIPS_TLS_GOTTPREL 46 +#define R_MIPS_TLS_TPREL32 47 +#define R_MIPS_TLS_TPREL64 48 +#define R_MIPS_TLS_TPREL_HI16 49 +#define R_MIPS_TLS_TPREL_LO16 50 +#define R_MIPS_GLOB_DAT 51 +#define R_MIPS_COPY 126 +#define R_MIPS_JUMP_SLOT 127 + +#define R_MIPS_NUM 128 + + + +#define PT_MIPS_REGINFO 0x70000000 +#define PT_MIPS_RTPROC 0x70000001 +#define PT_MIPS_OPTIONS 0x70000002 +#define PT_MIPS_ABIFLAGS 0x70000003 + + + +#define PF_MIPS_LOCAL 0x10000000 + + + +#define DT_MIPS_RLD_VERSION 0x70000001 +#define DT_MIPS_TIME_STAMP 0x70000002 +#define DT_MIPS_ICHECKSUM 0x70000003 +#define DT_MIPS_IVERSION 0x70000004 +#define DT_MIPS_FLAGS 0x70000005 +#define DT_MIPS_BASE_ADDRESS 0x70000006 +#define DT_MIPS_MSYM 0x70000007 +#define DT_MIPS_CONFLICT 0x70000008 +#define DT_MIPS_LIBLIST 0x70000009 +#define DT_MIPS_LOCAL_GOTNO 0x7000000a +#define DT_MIPS_CONFLICTNO 0x7000000b +#define DT_MIPS_LIBLISTNO 0x70000010 +#define DT_MIPS_SYMTABNO 0x70000011 +#define DT_MIPS_UNREFEXTNO 0x70000012 +#define DT_MIPS_GOTSYM 0x70000013 +#define DT_MIPS_HIPAGENO 0x70000014 +#define DT_MIPS_RLD_MAP 0x70000016 +#define DT_MIPS_DELTA_CLASS 0x70000017 +#define DT_MIPS_DELTA_CLASS_NO 0x70000018 + +#define DT_MIPS_DELTA_INSTANCE 0x70000019 +#define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a + +#define DT_MIPS_DELTA_RELOC 0x7000001b +#define DT_MIPS_DELTA_RELOC_NO 0x7000001c + +#define DT_MIPS_DELTA_SYM 0x7000001d + +#define DT_MIPS_DELTA_SYM_NO 0x7000001e + +#define DT_MIPS_DELTA_CLASSSYM 0x70000020 + +#define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 + +#define DT_MIPS_CXX_FLAGS 0x70000022 +#define DT_MIPS_PIXIE_INIT 0x70000023 +#define DT_MIPS_SYMBOL_LIB 0x70000024 +#define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025 +#define DT_MIPS_LOCAL_GOTIDX 0x70000026 +#define DT_MIPS_HIDDEN_GOTIDX 0x70000027 +#define DT_MIPS_PROTECTED_GOTIDX 0x70000028 +#define DT_MIPS_OPTIONS 0x70000029 +#define DT_MIPS_INTERFACE 0x7000002a +#define DT_MIPS_DYNSTR_ALIGN 0x7000002b +#define DT_MIPS_INTERFACE_SIZE 0x7000002c +#define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d + +#define DT_MIPS_PERF_SUFFIX 0x7000002e + +#define DT_MIPS_COMPACT_SIZE 0x7000002f +#define DT_MIPS_GP_VALUE 0x70000030 +#define DT_MIPS_AUX_DYNAMIC 0x70000031 + +#define DT_MIPS_PLTGOT 0x70000032 + +#define DT_MIPS_RWPLT 0x70000034 +#define DT_MIPS_RLD_MAP_REL 0x70000035 +#define DT_MIPS_NUM 0x36 + + + +#define RHF_NONE 0 +#define RHF_QUICKSTART (1 << 0) +#define RHF_NOTPOT (1 << 1) +#define RHF_NO_LIBRARY_REPLACEMENT (1 << 2) +#define RHF_NO_MOVE (1 << 3) +#define RHF_SGI_ONLY (1 << 4) +#define RHF_GUARANTEE_INIT (1 << 5) +#define RHF_DELTA_C_PLUS_PLUS (1 << 6) +#define RHF_GUARANTEE_START_INIT (1 << 7) +#define RHF_PIXIE (1 << 8) +#define RHF_DEFAULT_DELAY_LOAD (1 << 9) +#define RHF_REQUICKSTART (1 << 10) +#define RHF_REQUICKSTARTED (1 << 11) +#define RHF_CORD (1 << 12) +#define RHF_NO_UNRES_UNDEF (1 << 13) +#define RHF_RLD_ORDER_SAFE (1 << 14) + + + +typedef struct { + Elf32_Word l_name; + Elf32_Word l_time_stamp; + Elf32_Word l_checksum; + Elf32_Word l_version; + Elf32_Word l_flags; +} Elf32_Lib; + +typedef struct { + Elf64_Word l_name; + Elf64_Word l_time_stamp; + Elf64_Word l_checksum; + Elf64_Word l_version; + Elf64_Word l_flags; +} Elf64_Lib; + + + + +#define LL_NONE 0 +#define LL_EXACT_MATCH (1 << 0) +#define LL_IGNORE_INT_VER (1 << 1) +#define LL_REQUIRE_MINOR (1 << 2) +#define LL_EXPORTS (1 << 3) +#define LL_DELAY_LOAD (1 << 4) +#define LL_DELTA (1 << 5) + + + +typedef Elf32_Addr Elf32_Conflict; + +typedef struct { + Elf32_Half version; + unsigned char isa_level; + unsigned char isa_rev; + unsigned char gpr_size; + unsigned char cpr1_size; + unsigned char cpr2_size; + unsigned char fp_abi; + Elf32_Word isa_ext; + Elf32_Word ases; + Elf32_Word flags1; + Elf32_Word flags2; +} Elf_MIPS_ABIFlags_v0; + +#define MIPS_AFL_REG_NONE 0x00 +#define MIPS_AFL_REG_32 0x01 +#define MIPS_AFL_REG_64 0x02 +#define MIPS_AFL_REG_128 0x03 + +#define MIPS_AFL_ASE_DSP 0x00000001 +#define MIPS_AFL_ASE_DSPR2 0x00000002 +#define MIPS_AFL_ASE_EVA 0x00000004 +#define MIPS_AFL_ASE_MCU 0x00000008 +#define MIPS_AFL_ASE_MDMX 0x00000010 +#define MIPS_AFL_ASE_MIPS3D 0x00000020 +#define MIPS_AFL_ASE_MT 0x00000040 +#define MIPS_AFL_ASE_SMARTMIPS 0x00000080 +#define MIPS_AFL_ASE_VIRT 0x00000100 +#define MIPS_AFL_ASE_MSA 0x00000200 +#define MIPS_AFL_ASE_MIPS16 0x00000400 +#define MIPS_AFL_ASE_MICROMIPS 0x00000800 +#define MIPS_AFL_ASE_XPA 0x00001000 +#define MIPS_AFL_ASE_MASK 0x00001fff + +#define MIPS_AFL_EXT_XLR 1 +#define MIPS_AFL_EXT_OCTEON2 2 +#define MIPS_AFL_EXT_OCTEONP 3 +#define MIPS_AFL_EXT_LOONGSON_3A 4 +#define MIPS_AFL_EXT_OCTEON 5 +#define MIPS_AFL_EXT_5900 6 +#define MIPS_AFL_EXT_4650 7 +#define MIPS_AFL_EXT_4010 8 +#define MIPS_AFL_EXT_4100 9 +#define MIPS_AFL_EXT_3900 10 +#define MIPS_AFL_EXT_10000 11 +#define MIPS_AFL_EXT_SB1 12 +#define MIPS_AFL_EXT_4111 13 +#define MIPS_AFL_EXT_4120 14 +#define MIPS_AFL_EXT_5400 15 +#define MIPS_AFL_EXT_5500 16 +#define MIPS_AFL_EXT_LOONGSON_2E 17 +#define MIPS_AFL_EXT_LOONGSON_2F 18 + +#define MIPS_AFL_FLAGS1_ODDSPREG 1 + +enum +{ + Val_GNU_MIPS_ABI_FP_ANY = 0, + Val_GNU_MIPS_ABI_FP_DOUBLE = 1, + Val_GNU_MIPS_ABI_FP_SINGLE = 2, + Val_GNU_MIPS_ABI_FP_SOFT = 3, + Val_GNU_MIPS_ABI_FP_OLD_64 = 4, + Val_GNU_MIPS_ABI_FP_XX = 5, + Val_GNU_MIPS_ABI_FP_64 = 6, + Val_GNU_MIPS_ABI_FP_64A = 7, + Val_GNU_MIPS_ABI_FP_MAX = 7 +}; + + + + +#define EF_PARISC_TRAPNIL 0x00010000 +#define EF_PARISC_EXT 0x00020000 +#define EF_PARISC_LSB 0x00040000 +#define EF_PARISC_WIDE 0x00080000 +#define EF_PARISC_NO_KABP 0x00100000 + +#define EF_PARISC_LAZYSWAP 0x00400000 +#define EF_PARISC_ARCH 0x0000ffff + + + +#define EFA_PARISC_1_0 0x020b +#define EFA_PARISC_1_1 0x0210 +#define EFA_PARISC_2_0 0x0214 + + + +#define SHN_PARISC_ANSI_COMMON 0xff00 + +#define SHN_PARISC_HUGE_COMMON 0xff01 + + + +#define SHT_PARISC_EXT 0x70000000 +#define SHT_PARISC_UNWIND 0x70000001 +#define SHT_PARISC_DOC 0x70000002 + + + +#define SHF_PARISC_SHORT 0x20000000 +#define SHF_PARISC_HUGE 0x40000000 +#define SHF_PARISC_SBP 0x80000000 + + + +#define STT_PARISC_MILLICODE 13 + +#define STT_HP_OPAQUE (STT_LOOS + 0x1) +#define STT_HP_STUB (STT_LOOS + 0x2) + + + +#define R_PARISC_NONE 0 +#define R_PARISC_DIR32 1 +#define R_PARISC_DIR21L 2 +#define R_PARISC_DIR17R 3 +#define R_PARISC_DIR17F 4 +#define R_PARISC_DIR14R 6 +#define R_PARISC_PCREL32 9 +#define R_PARISC_PCREL21L 10 +#define R_PARISC_PCREL17R 11 +#define R_PARISC_PCREL17F 12 +#define R_PARISC_PCREL14R 14 +#define R_PARISC_DPREL21L 18 +#define R_PARISC_DPREL14R 22 +#define R_PARISC_GPREL21L 26 +#define R_PARISC_GPREL14R 30 +#define R_PARISC_LTOFF21L 34 +#define R_PARISC_LTOFF14R 38 +#define R_PARISC_SECREL32 41 +#define R_PARISC_SEGBASE 48 +#define R_PARISC_SEGREL32 49 +#define R_PARISC_PLTOFF21L 50 +#define R_PARISC_PLTOFF14R 54 +#define R_PARISC_LTOFF_FPTR32 57 +#define R_PARISC_LTOFF_FPTR21L 58 +#define R_PARISC_LTOFF_FPTR14R 62 +#define R_PARISC_FPTR64 64 +#define R_PARISC_PLABEL32 65 +#define R_PARISC_PLABEL21L 66 +#define R_PARISC_PLABEL14R 70 +#define R_PARISC_PCREL64 72 +#define R_PARISC_PCREL22F 74 +#define R_PARISC_PCREL14WR 75 +#define R_PARISC_PCREL14DR 76 +#define R_PARISC_PCREL16F 77 +#define R_PARISC_PCREL16WF 78 +#define R_PARISC_PCREL16DF 79 +#define R_PARISC_DIR64 80 +#define R_PARISC_DIR14WR 83 +#define R_PARISC_DIR14DR 84 +#define R_PARISC_DIR16F 85 +#define R_PARISC_DIR16WF 86 +#define R_PARISC_DIR16DF 87 +#define R_PARISC_GPREL64 88 +#define R_PARISC_GPREL14WR 91 +#define R_PARISC_GPREL14DR 92 +#define R_PARISC_GPREL16F 93 +#define R_PARISC_GPREL16WF 94 +#define R_PARISC_GPREL16DF 95 +#define R_PARISC_LTOFF64 96 +#define R_PARISC_LTOFF14WR 99 +#define R_PARISC_LTOFF14DR 100 +#define R_PARISC_LTOFF16F 101 +#define R_PARISC_LTOFF16WF 102 +#define R_PARISC_LTOFF16DF 103 +#define R_PARISC_SECREL64 104 +#define R_PARISC_SEGREL64 112 +#define R_PARISC_PLTOFF14WR 115 +#define R_PARISC_PLTOFF14DR 116 +#define R_PARISC_PLTOFF16F 117 +#define R_PARISC_PLTOFF16WF 118 +#define R_PARISC_PLTOFF16DF 119 +#define R_PARISC_LTOFF_FPTR64 120 +#define R_PARISC_LTOFF_FPTR14WR 123 +#define R_PARISC_LTOFF_FPTR14DR 124 +#define R_PARISC_LTOFF_FPTR16F 125 +#define R_PARISC_LTOFF_FPTR16WF 126 +#define R_PARISC_LTOFF_FPTR16DF 127 +#define R_PARISC_LORESERVE 128 +#define R_PARISC_COPY 128 +#define R_PARISC_IPLT 129 +#define R_PARISC_EPLT 130 +#define R_PARISC_TPREL32 153 +#define R_PARISC_TPREL21L 154 +#define R_PARISC_TPREL14R 158 +#define R_PARISC_LTOFF_TP21L 162 +#define R_PARISC_LTOFF_TP14R 166 +#define R_PARISC_LTOFF_TP14F 167 +#define R_PARISC_TPREL64 216 +#define R_PARISC_TPREL14WR 219 +#define R_PARISC_TPREL14DR 220 +#define R_PARISC_TPREL16F 221 +#define R_PARISC_TPREL16WF 222 +#define R_PARISC_TPREL16DF 223 +#define R_PARISC_LTOFF_TP64 224 +#define R_PARISC_LTOFF_TP14WR 227 +#define R_PARISC_LTOFF_TP14DR 228 +#define R_PARISC_LTOFF_TP16F 229 +#define R_PARISC_LTOFF_TP16WF 230 +#define R_PARISC_LTOFF_TP16DF 231 +#define R_PARISC_GNU_VTENTRY 232 +#define R_PARISC_GNU_VTINHERIT 233 +#define R_PARISC_TLS_GD21L 234 +#define R_PARISC_TLS_GD14R 235 +#define R_PARISC_TLS_GDCALL 236 +#define R_PARISC_TLS_LDM21L 237 +#define R_PARISC_TLS_LDM14R 238 +#define R_PARISC_TLS_LDMCALL 239 +#define R_PARISC_TLS_LDO21L 240 +#define R_PARISC_TLS_LDO14R 241 +#define R_PARISC_TLS_DTPMOD32 242 +#define R_PARISC_TLS_DTPMOD64 243 +#define R_PARISC_TLS_DTPOFF32 244 +#define R_PARISC_TLS_DTPOFF64 245 +#define R_PARISC_TLS_LE21L R_PARISC_TPREL21L +#define R_PARISC_TLS_LE14R R_PARISC_TPREL14R +#define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L +#define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R +#define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32 +#define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64 +#define R_PARISC_HIRESERVE 255 + + + +#define PT_HP_TLS (PT_LOOS + 0x0) +#define PT_HP_CORE_NONE (PT_LOOS + 0x1) +#define PT_HP_CORE_VERSION (PT_LOOS + 0x2) +#define PT_HP_CORE_KERNEL (PT_LOOS + 0x3) +#define PT_HP_CORE_COMM (PT_LOOS + 0x4) +#define PT_HP_CORE_PROC (PT_LOOS + 0x5) +#define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6) +#define PT_HP_CORE_STACK (PT_LOOS + 0x7) +#define PT_HP_CORE_SHM (PT_LOOS + 0x8) +#define PT_HP_CORE_MMF (PT_LOOS + 0x9) +#define PT_HP_PARALLEL (PT_LOOS + 0x10) +#define PT_HP_FASTBIND (PT_LOOS + 0x11) +#define PT_HP_OPT_ANNOT (PT_LOOS + 0x12) +#define PT_HP_HSL_ANNOT (PT_LOOS + 0x13) +#define PT_HP_STACK (PT_LOOS + 0x14) + +#define PT_PARISC_ARCHEXT 0x70000000 +#define PT_PARISC_UNWIND 0x70000001 + + + +#define PF_PARISC_SBP 0x08000000 + +#define PF_HP_PAGE_SIZE 0x00100000 +#define PF_HP_FAR_SHARED 0x00200000 +#define PF_HP_NEAR_SHARED 0x00400000 +#define PF_HP_CODE 0x01000000 +#define PF_HP_MODIFY 0x02000000 +#define PF_HP_LAZYSWAP 0x04000000 +#define PF_HP_SBP 0x08000000 + + + + + + +#define EF_ALPHA_32BIT 1 +#define EF_ALPHA_CANRELAX 2 + + + + +#define SHT_ALPHA_DEBUG 0x70000001 +#define SHT_ALPHA_REGINFO 0x70000002 + + + +#define SHF_ALPHA_GPREL 0x10000000 + + +#define STO_ALPHA_NOPV 0x80 +#define STO_ALPHA_STD_GPLOAD 0x88 + + + +#define R_ALPHA_NONE 0 +#define R_ALPHA_REFLONG 1 +#define R_ALPHA_REFQUAD 2 +#define R_ALPHA_GPREL32 3 +#define R_ALPHA_LITERAL 4 +#define R_ALPHA_LITUSE 5 +#define R_ALPHA_GPDISP 6 +#define R_ALPHA_BRADDR 7 +#define R_ALPHA_HINT 8 +#define R_ALPHA_SREL16 9 +#define R_ALPHA_SREL32 10 +#define R_ALPHA_SREL64 11 +#define R_ALPHA_GPRELHIGH 17 +#define R_ALPHA_GPRELLOW 18 +#define R_ALPHA_GPREL16 19 +#define R_ALPHA_COPY 24 +#define R_ALPHA_GLOB_DAT 25 +#define R_ALPHA_JMP_SLOT 26 +#define R_ALPHA_RELATIVE 27 +#define R_ALPHA_TLS_GD_HI 28 +#define R_ALPHA_TLSGD 29 +#define R_ALPHA_TLS_LDM 30 +#define R_ALPHA_DTPMOD64 31 +#define R_ALPHA_GOTDTPREL 32 +#define R_ALPHA_DTPREL64 33 +#define R_ALPHA_DTPRELHI 34 +#define R_ALPHA_DTPRELLO 35 +#define R_ALPHA_DTPREL16 36 +#define R_ALPHA_GOTTPREL 37 +#define R_ALPHA_TPREL64 38 +#define R_ALPHA_TPRELHI 39 +#define R_ALPHA_TPRELLO 40 +#define R_ALPHA_TPREL16 41 + +#define R_ALPHA_NUM 46 + + +#define LITUSE_ALPHA_ADDR 0 +#define LITUSE_ALPHA_BASE 1 +#define LITUSE_ALPHA_BYTOFF 2 +#define LITUSE_ALPHA_JSR 3 +#define LITUSE_ALPHA_TLS_GD 4 +#define LITUSE_ALPHA_TLS_LDM 5 + + +#define DT_ALPHA_PLTRO (DT_LOPROC + 0) +#define DT_ALPHA_NUM 1 + + + + +#define EF_PPC_EMB 0x80000000 + + +#define EF_PPC_RELOCATABLE 0x00010000 +#define EF_PPC_RELOCATABLE_LIB 0x00008000 + + + +#define R_PPC_NONE 0 +#define R_PPC_ADDR32 1 +#define R_PPC_ADDR24 2 +#define R_PPC_ADDR16 3 +#define R_PPC_ADDR16_LO 4 +#define R_PPC_ADDR16_HI 5 +#define R_PPC_ADDR16_HA 6 +#define R_PPC_ADDR14 7 +#define R_PPC_ADDR14_BRTAKEN 8 +#define R_PPC_ADDR14_BRNTAKEN 9 +#define R_PPC_REL24 10 +#define R_PPC_REL14 11 +#define R_PPC_REL14_BRTAKEN 12 +#define R_PPC_REL14_BRNTAKEN 13 +#define R_PPC_GOT16 14 +#define R_PPC_GOT16_LO 15 +#define R_PPC_GOT16_HI 16 +#define R_PPC_GOT16_HA 17 +#define R_PPC_PLTREL24 18 +#define R_PPC_COPY 19 +#define R_PPC_GLOB_DAT 20 +#define R_PPC_JMP_SLOT 21 +#define R_PPC_RELATIVE 22 +#define R_PPC_LOCAL24PC 23 +#define R_PPC_UADDR32 24 +#define R_PPC_UADDR16 25 +#define R_PPC_REL32 26 +#define R_PPC_PLT32 27 +#define R_PPC_PLTREL32 28 +#define R_PPC_PLT16_LO 29 +#define R_PPC_PLT16_HI 30 +#define R_PPC_PLT16_HA 31 +#define R_PPC_SDAREL16 32 +#define R_PPC_SECTOFF 33 +#define R_PPC_SECTOFF_LO 34 +#define R_PPC_SECTOFF_HI 35 +#define R_PPC_SECTOFF_HA 36 + + +#define R_PPC_TLS 67 +#define R_PPC_DTPMOD32 68 +#define R_PPC_TPREL16 69 +#define R_PPC_TPREL16_LO 70 +#define R_PPC_TPREL16_HI 71 +#define R_PPC_TPREL16_HA 72 +#define R_PPC_TPREL32 73 +#define R_PPC_DTPREL16 74 +#define R_PPC_DTPREL16_LO 75 +#define R_PPC_DTPREL16_HI 76 +#define R_PPC_DTPREL16_HA 77 +#define R_PPC_DTPREL32 78 +#define R_PPC_GOT_TLSGD16 79 +#define R_PPC_GOT_TLSGD16_LO 80 +#define R_PPC_GOT_TLSGD16_HI 81 +#define R_PPC_GOT_TLSGD16_HA 82 +#define R_PPC_GOT_TLSLD16 83 +#define R_PPC_GOT_TLSLD16_LO 84 +#define R_PPC_GOT_TLSLD16_HI 85 +#define R_PPC_GOT_TLSLD16_HA 86 +#define R_PPC_GOT_TPREL16 87 +#define R_PPC_GOT_TPREL16_LO 88 +#define R_PPC_GOT_TPREL16_HI 89 +#define R_PPC_GOT_TPREL16_HA 90 +#define R_PPC_GOT_DTPREL16 91 +#define R_PPC_GOT_DTPREL16_LO 92 +#define R_PPC_GOT_DTPREL16_HI 93 +#define R_PPC_GOT_DTPREL16_HA 94 +#define R_PPC_TLSGD 95 +#define R_PPC_TLSLD 96 + + +#define R_PPC_EMB_NADDR32 101 +#define R_PPC_EMB_NADDR16 102 +#define R_PPC_EMB_NADDR16_LO 103 +#define R_PPC_EMB_NADDR16_HI 104 +#define R_PPC_EMB_NADDR16_HA 105 +#define R_PPC_EMB_SDAI16 106 +#define R_PPC_EMB_SDA2I16 107 +#define R_PPC_EMB_SDA2REL 108 +#define R_PPC_EMB_SDA21 109 +#define R_PPC_EMB_MRKREF 110 +#define R_PPC_EMB_RELSEC16 111 +#define R_PPC_EMB_RELST_LO 112 +#define R_PPC_EMB_RELST_HI 113 +#define R_PPC_EMB_RELST_HA 114 +#define R_PPC_EMB_BIT_FLD 115 +#define R_PPC_EMB_RELSDA 116 + + +#define R_PPC_DIAB_SDA21_LO 180 +#define R_PPC_DIAB_SDA21_HI 181 +#define R_PPC_DIAB_SDA21_HA 182 +#define R_PPC_DIAB_RELSDA_LO 183 +#define R_PPC_DIAB_RELSDA_HI 184 +#define R_PPC_DIAB_RELSDA_HA 185 + + +#define R_PPC_IRELATIVE 248 + + +#define R_PPC_REL16 249 +#define R_PPC_REL16_LO 250 +#define R_PPC_REL16_HI 251 +#define R_PPC_REL16_HA 252 + + + +#define R_PPC_TOC16 255 + + +#define DT_PPC_GOT (DT_LOPROC + 0) +#define DT_PPC_OPT (DT_LOPROC + 1) +#define DT_PPC_NUM 2 + +#define PPC_OPT_TLS 1 + + +#define R_PPC64_NONE R_PPC_NONE +#define R_PPC64_ADDR32 R_PPC_ADDR32 +#define R_PPC64_ADDR24 R_PPC_ADDR24 +#define R_PPC64_ADDR16 R_PPC_ADDR16 +#define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO +#define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI +#define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA +#define R_PPC64_ADDR14 R_PPC_ADDR14 +#define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN +#define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN +#define R_PPC64_REL24 R_PPC_REL24 +#define R_PPC64_REL14 R_PPC_REL14 +#define R_PPC64_REL14_BRTAKEN R_PPC_REL14_BRTAKEN +#define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN +#define R_PPC64_GOT16 R_PPC_GOT16 +#define R_PPC64_GOT16_LO R_PPC_GOT16_LO +#define R_PPC64_GOT16_HI R_PPC_GOT16_HI +#define R_PPC64_GOT16_HA R_PPC_GOT16_HA + +#define R_PPC64_COPY R_PPC_COPY +#define R_PPC64_GLOB_DAT R_PPC_GLOB_DAT +#define R_PPC64_JMP_SLOT R_PPC_JMP_SLOT +#define R_PPC64_RELATIVE R_PPC_RELATIVE + +#define R_PPC64_UADDR32 R_PPC_UADDR32 +#define R_PPC64_UADDR16 R_PPC_UADDR16 +#define R_PPC64_REL32 R_PPC_REL32 +#define R_PPC64_PLT32 R_PPC_PLT32 +#define R_PPC64_PLTREL32 R_PPC_PLTREL32 +#define R_PPC64_PLT16_LO R_PPC_PLT16_LO +#define R_PPC64_PLT16_HI R_PPC_PLT16_HI +#define R_PPC64_PLT16_HA R_PPC_PLT16_HA + +#define R_PPC64_SECTOFF R_PPC_SECTOFF +#define R_PPC64_SECTOFF_LO R_PPC_SECTOFF_LO +#define R_PPC64_SECTOFF_HI R_PPC_SECTOFF_HI +#define R_PPC64_SECTOFF_HA R_PPC_SECTOFF_HA +#define R_PPC64_ADDR30 37 +#define R_PPC64_ADDR64 38 +#define R_PPC64_ADDR16_HIGHER 39 +#define R_PPC64_ADDR16_HIGHERA 40 +#define R_PPC64_ADDR16_HIGHEST 41 +#define R_PPC64_ADDR16_HIGHESTA 42 +#define R_PPC64_UADDR64 43 +#define R_PPC64_REL64 44 +#define R_PPC64_PLT64 45 +#define R_PPC64_PLTREL64 46 +#define R_PPC64_TOC16 47 +#define R_PPC64_TOC16_LO 48 +#define R_PPC64_TOC16_HI 49 +#define R_PPC64_TOC16_HA 50 +#define R_PPC64_TOC 51 +#define R_PPC64_PLTGOT16 52 +#define R_PPC64_PLTGOT16_LO 53 +#define R_PPC64_PLTGOT16_HI 54 +#define R_PPC64_PLTGOT16_HA 55 + +#define R_PPC64_ADDR16_DS 56 +#define R_PPC64_ADDR16_LO_DS 57 +#define R_PPC64_GOT16_DS 58 +#define R_PPC64_GOT16_LO_DS 59 +#define R_PPC64_PLT16_LO_DS 60 +#define R_PPC64_SECTOFF_DS 61 +#define R_PPC64_SECTOFF_LO_DS 62 +#define R_PPC64_TOC16_DS 63 +#define R_PPC64_TOC16_LO_DS 64 +#define R_PPC64_PLTGOT16_DS 65 +#define R_PPC64_PLTGOT16_LO_DS 66 + + +#define R_PPC64_TLS 67 +#define R_PPC64_DTPMOD64 68 +#define R_PPC64_TPREL16 69 +#define R_PPC64_TPREL16_LO 70 +#define R_PPC64_TPREL16_HI 71 +#define R_PPC64_TPREL16_HA 72 +#define R_PPC64_TPREL64 73 +#define R_PPC64_DTPREL16 74 +#define R_PPC64_DTPREL16_LO 75 +#define R_PPC64_DTPREL16_HI 76 +#define R_PPC64_DTPREL16_HA 77 +#define R_PPC64_DTPREL64 78 +#define R_PPC64_GOT_TLSGD16 79 +#define R_PPC64_GOT_TLSGD16_LO 80 +#define R_PPC64_GOT_TLSGD16_HI 81 +#define R_PPC64_GOT_TLSGD16_HA 82 +#define R_PPC64_GOT_TLSLD16 83 +#define R_PPC64_GOT_TLSLD16_LO 84 +#define R_PPC64_GOT_TLSLD16_HI 85 +#define R_PPC64_GOT_TLSLD16_HA 86 +#define R_PPC64_GOT_TPREL16_DS 87 +#define R_PPC64_GOT_TPREL16_LO_DS 88 +#define R_PPC64_GOT_TPREL16_HI 89 +#define R_PPC64_GOT_TPREL16_HA 90 +#define R_PPC64_GOT_DTPREL16_DS 91 +#define R_PPC64_GOT_DTPREL16_LO_DS 92 +#define R_PPC64_GOT_DTPREL16_HI 93 +#define R_PPC64_GOT_DTPREL16_HA 94 +#define R_PPC64_TPREL16_DS 95 +#define R_PPC64_TPREL16_LO_DS 96 +#define R_PPC64_TPREL16_HIGHER 97 +#define R_PPC64_TPREL16_HIGHERA 98 +#define R_PPC64_TPREL16_HIGHEST 99 +#define R_PPC64_TPREL16_HIGHESTA 100 +#define R_PPC64_DTPREL16_DS 101 +#define R_PPC64_DTPREL16_LO_DS 102 +#define R_PPC64_DTPREL16_HIGHER 103 +#define R_PPC64_DTPREL16_HIGHERA 104 +#define R_PPC64_DTPREL16_HIGHEST 105 +#define R_PPC64_DTPREL16_HIGHESTA 106 +#define R_PPC64_TLSGD 107 +#define R_PPC64_TLSLD 108 +#define R_PPC64_TOCSAVE 109 +#define R_PPC64_ADDR16_HIGH 110 +#define R_PPC64_ADDR16_HIGHA 111 +#define R_PPC64_TPREL16_HIGH 112 +#define R_PPC64_TPREL16_HIGHA 113 +#define R_PPC64_DTPREL16_HIGH 114 +#define R_PPC64_DTPREL16_HIGHA 115 + + +#define R_PPC64_JMP_IREL 247 +#define R_PPC64_IRELATIVE 248 +#define R_PPC64_REL16 249 +#define R_PPC64_REL16_LO 250 +#define R_PPC64_REL16_HI 251 +#define R_PPC64_REL16_HA 252 + +#define EF_PPC64_ABI 3 + +#define DT_PPC64_GLINK (DT_LOPROC + 0) +#define DT_PPC64_OPD (DT_LOPROC + 1) +#define DT_PPC64_OPDSZ (DT_LOPROC + 2) +#define DT_PPC64_OPT (DT_LOPROC + 3) +#define DT_PPC64_NUM 4 + +#define PPC64_OPT_TLS 1 +#define PPC64_OPT_MULTI_TOC 2 + +#define STO_PPC64_LOCAL_BIT 5 +#define STO_PPC64_LOCAL_MASK 0xe0 +#define PPC64_LOCAL_ENTRY_OFFSET(x) (1 << (((x)&0xe0)>>5) & 0xfc) + + +#define EF_ARM_RELEXEC 0x01 +#define EF_ARM_HASENTRY 0x02 +#define EF_ARM_INTERWORK 0x04 +#define EF_ARM_APCS_26 0x08 +#define EF_ARM_APCS_FLOAT 0x10 +#define EF_ARM_PIC 0x20 +#define EF_ARM_ALIGN8 0x40 +#define EF_ARM_NEW_ABI 0x80 +#define EF_ARM_OLD_ABI 0x100 +#define EF_ARM_SOFT_FLOAT 0x200 +#define EF_ARM_VFP_FLOAT 0x400 +#define EF_ARM_MAVERICK_FLOAT 0x800 + +#define EF_ARM_ABI_FLOAT_SOFT 0x200 +#define EF_ARM_ABI_FLOAT_HARD 0x400 + + +#define EF_ARM_SYMSARESORTED 0x04 +#define EF_ARM_DYNSYMSUSESEGIDX 0x08 +#define EF_ARM_MAPSYMSFIRST 0x10 +#define EF_ARM_EABIMASK 0XFF000000 + + +#define EF_ARM_BE8 0x00800000 +#define EF_ARM_LE8 0x00400000 + +#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK) +#define EF_ARM_EABI_UNKNOWN 0x00000000 +#define EF_ARM_EABI_VER1 0x01000000 +#define EF_ARM_EABI_VER2 0x02000000 +#define EF_ARM_EABI_VER3 0x03000000 +#define EF_ARM_EABI_VER4 0x04000000 +#define EF_ARM_EABI_VER5 0x05000000 + + +#define STT_ARM_TFUNC STT_LOPROC +#define STT_ARM_16BIT STT_HIPROC + + +#define SHF_ARM_ENTRYSECT 0x10000000 +#define SHF_ARM_COMDEF 0x80000000 + + + +#define PF_ARM_SB 0x10000000 + +#define PF_ARM_PI 0x20000000 +#define PF_ARM_ABS 0x40000000 + + +#define PT_ARM_EXIDX (PT_LOPROC + 1) + + +#define SHT_ARM_EXIDX (SHT_LOPROC + 1) +#define SHT_ARM_PREEMPTMAP (SHT_LOPROC + 2) +#define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) + +#define R_AARCH64_NONE 0 +#define R_AARCH64_P32_ABS32 1 +#define R_AARCH64_P32_COPY 180 +#define R_AARCH64_P32_GLOB_DAT 181 +#define R_AARCH64_P32_JUMP_SLOT 182 +#define R_AARCH64_P32_RELATIVE 183 +#define R_AARCH64_P32_TLS_DTPMOD 184 +#define R_AARCH64_P32_TLS_DTPREL 185 +#define R_AARCH64_P32_TLS_TPREL 186 +#define R_AARCH64_P32_TLSDESC 187 +#define R_AARCH64_P32_IRELATIVE 188 +#define R_AARCH64_ABS64 257 +#define R_AARCH64_ABS32 258 +#define R_AARCH64_ABS16 259 +#define R_AARCH64_PREL64 260 +#define R_AARCH64_PREL32 261 +#define R_AARCH64_PREL16 262 +#define R_AARCH64_MOVW_UABS_G0 263 +#define R_AARCH64_MOVW_UABS_G0_NC 264 +#define R_AARCH64_MOVW_UABS_G1 265 +#define R_AARCH64_MOVW_UABS_G1_NC 266 +#define R_AARCH64_MOVW_UABS_G2 267 +#define R_AARCH64_MOVW_UABS_G2_NC 268 +#define R_AARCH64_MOVW_UABS_G3 269 +#define R_AARCH64_MOVW_SABS_G0 270 +#define R_AARCH64_MOVW_SABS_G1 271 +#define R_AARCH64_MOVW_SABS_G2 272 +#define R_AARCH64_LD_PREL_LO19 273 +#define R_AARCH64_ADR_PREL_LO21 274 +#define R_AARCH64_ADR_PREL_PG_HI21 275 +#define R_AARCH64_ADR_PREL_PG_HI21_NC 276 +#define R_AARCH64_ADD_ABS_LO12_NC 277 +#define R_AARCH64_LDST8_ABS_LO12_NC 278 +#define R_AARCH64_TSTBR14 279 +#define R_AARCH64_CONDBR19 280 +#define R_AARCH64_JUMP26 282 +#define R_AARCH64_CALL26 283 +#define R_AARCH64_LDST16_ABS_LO12_NC 284 +#define R_AARCH64_LDST32_ABS_LO12_NC 285 +#define R_AARCH64_LDST64_ABS_LO12_NC 286 +#define R_AARCH64_MOVW_PREL_G0 287 +#define R_AARCH64_MOVW_PREL_G0_NC 288 +#define R_AARCH64_MOVW_PREL_G1 289 +#define R_AARCH64_MOVW_PREL_G1_NC 290 +#define R_AARCH64_MOVW_PREL_G2 291 +#define R_AARCH64_MOVW_PREL_G2_NC 292 +#define R_AARCH64_MOVW_PREL_G3 293 +#define R_AARCH64_LDST128_ABS_LO12_NC 299 +#define R_AARCH64_MOVW_GOTOFF_G0 300 +#define R_AARCH64_MOVW_GOTOFF_G0_NC 301 +#define R_AARCH64_MOVW_GOTOFF_G1 302 +#define R_AARCH64_MOVW_GOTOFF_G1_NC 303 +#define R_AARCH64_MOVW_GOTOFF_G2 304 +#define R_AARCH64_MOVW_GOTOFF_G2_NC 305 +#define R_AARCH64_MOVW_GOTOFF_G3 306 +#define R_AARCH64_GOTREL64 307 +#define R_AARCH64_GOTREL32 308 +#define R_AARCH64_GOT_LD_PREL19 309 +#define R_AARCH64_LD64_GOTOFF_LO15 310 +#define R_AARCH64_ADR_GOT_PAGE 311 +#define R_AARCH64_LD64_GOT_LO12_NC 312 +#define R_AARCH64_LD64_GOTPAGE_LO15 313 +#define R_AARCH64_TLSGD_ADR_PREL21 512 +#define R_AARCH64_TLSGD_ADR_PAGE21 513 +#define R_AARCH64_TLSGD_ADD_LO12_NC 514 +#define R_AARCH64_TLSGD_MOVW_G1 515 +#define R_AARCH64_TLSGD_MOVW_G0_NC 516 +#define R_AARCH64_TLSLD_ADR_PREL21 517 +#define R_AARCH64_TLSLD_ADR_PAGE21 518 +#define R_AARCH64_TLSLD_ADD_LO12_NC 519 +#define R_AARCH64_TLSLD_MOVW_G1 520 +#define R_AARCH64_TLSLD_MOVW_G0_NC 521 +#define R_AARCH64_TLSLD_LD_PREL19 522 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G2 523 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G1 524 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC 525 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G0 526 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC 527 +#define R_AARCH64_TLSLD_ADD_DTPREL_HI12 528 +#define R_AARCH64_TLSLD_ADD_DTPREL_LO12 529 +#define R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC 530 +#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12 531 +#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC 532 +#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12 533 +#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC 534 +#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12 535 +#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC 536 +#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12 537 +#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC 538 +#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 539 +#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC 540 +#define R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 541 +#define R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC 542 +#define R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 543 +#define R_AARCH64_TLSLE_MOVW_TPREL_G2 544 +#define R_AARCH64_TLSLE_MOVW_TPREL_G1 545 +#define R_AARCH64_TLSLE_MOVW_TPREL_G1_NC 546 +#define R_AARCH64_TLSLE_MOVW_TPREL_G0 547 +#define R_AARCH64_TLSLE_MOVW_TPREL_G0_NC 548 +#define R_AARCH64_TLSLE_ADD_TPREL_HI12 549 +#define R_AARCH64_TLSLE_ADD_TPREL_LO12 550 +#define R_AARCH64_TLSLE_ADD_TPREL_LO12_NC 551 +#define R_AARCH64_TLSLE_LDST8_TPREL_LO12 552 +#define R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC 553 +#define R_AARCH64_TLSLE_LDST16_TPREL_LO12 554 +#define R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC 555 +#define R_AARCH64_TLSLE_LDST32_TPREL_LO12 556 +#define R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC 557 +#define R_AARCH64_TLSLE_LDST64_TPREL_LO12 558 +#define R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC 559 +#define R_AARCH64_TLSDESC_LD_PREL19 560 +#define R_AARCH64_TLSDESC_ADR_PREL21 561 +#define R_AARCH64_TLSDESC_ADR_PAGE21 562 +#define R_AARCH64_TLSDESC_LD64_LO12 563 +#define R_AARCH64_TLSDESC_ADD_LO12 564 +#define R_AARCH64_TLSDESC_OFF_G1 565 +#define R_AARCH64_TLSDESC_OFF_G0_NC 566 +#define R_AARCH64_TLSDESC_LDR 567 +#define R_AARCH64_TLSDESC_ADD 568 +#define R_AARCH64_TLSDESC_CALL 569 +#define R_AARCH64_TLSLE_LDST128_TPREL_LO12 570 +#define R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC 571 +#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12 572 +#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC 573 +#define R_AARCH64_COPY 1024 +#define R_AARCH64_GLOB_DAT 1025 +#define R_AARCH64_JUMP_SLOT 1026 +#define R_AARCH64_RELATIVE 1027 +#define R_AARCH64_TLS_DTPMOD 1028 +#define R_AARCH64_TLS_DTPMOD64 1028 +#define R_AARCH64_TLS_DTPREL 1029 +#define R_AARCH64_TLS_DTPREL64 1029 +#define R_AARCH64_TLS_TPREL 1030 +#define R_AARCH64_TLS_TPREL64 1030 +#define R_AARCH64_TLSDESC 1031 + + +#define R_ARM_NONE 0 +#define R_ARM_PC24 1 +#define R_ARM_ABS32 2 +#define R_ARM_REL32 3 +#define R_ARM_PC13 4 +#define R_ARM_ABS16 5 +#define R_ARM_ABS12 6 +#define R_ARM_THM_ABS5 7 +#define R_ARM_ABS8 8 +#define R_ARM_SBREL32 9 +#define R_ARM_THM_PC22 10 +#define R_ARM_THM_PC8 11 +#define R_ARM_AMP_VCALL9 12 +#define R_ARM_TLS_DESC 13 +#define R_ARM_THM_SWI8 14 +#define R_ARM_XPC25 15 +#define R_ARM_THM_XPC22 16 +#define R_ARM_TLS_DTPMOD32 17 +#define R_ARM_TLS_DTPOFF32 18 +#define R_ARM_TLS_TPOFF32 19 +#define R_ARM_COPY 20 +#define R_ARM_GLOB_DAT 21 +#define R_ARM_JUMP_SLOT 22 +#define R_ARM_RELATIVE 23 +#define R_ARM_GOTOFF 24 +#define R_ARM_GOTPC 25 +#define R_ARM_GOT32 26 +#define R_ARM_PLT32 27 +#define R_ARM_CALL 28 +#define R_ARM_JUMP24 29 +#define R_ARM_THM_JUMP24 30 +#define R_ARM_BASE_ABS 31 +#define R_ARM_ALU_PCREL_7_0 32 +#define R_ARM_ALU_PCREL_15_8 33 +#define R_ARM_ALU_PCREL_23_15 34 +#define R_ARM_LDR_SBREL_11_0 35 +#define R_ARM_ALU_SBREL_19_12 36 +#define R_ARM_ALU_SBREL_27_20 37 +#define R_ARM_TARGET1 38 +#define R_ARM_SBREL31 39 +#define R_ARM_V4BX 40 +#define R_ARM_TARGET2 41 +#define R_ARM_PREL31 42 +#define R_ARM_MOVW_ABS_NC 43 +#define R_ARM_MOVT_ABS 44 +#define R_ARM_MOVW_PREL_NC 45 +#define R_ARM_MOVT_PREL 46 +#define R_ARM_THM_MOVW_ABS_NC 47 +#define R_ARM_THM_MOVT_ABS 48 +#define R_ARM_THM_MOVW_PREL_NC 49 +#define R_ARM_THM_MOVT_PREL 50 +#define R_ARM_THM_JUMP19 51 +#define R_ARM_THM_JUMP6 52 +#define R_ARM_THM_ALU_PREL_11_0 53 +#define R_ARM_THM_PC12 54 +#define R_ARM_ABS32_NOI 55 +#define R_ARM_REL32_NOI 56 +#define R_ARM_ALU_PC_G0_NC 57 +#define R_ARM_ALU_PC_G0 58 +#define R_ARM_ALU_PC_G1_NC 59 +#define R_ARM_ALU_PC_G1 60 +#define R_ARM_ALU_PC_G2 61 +#define R_ARM_LDR_PC_G1 62 +#define R_ARM_LDR_PC_G2 63 +#define R_ARM_LDRS_PC_G0 64 +#define R_ARM_LDRS_PC_G1 65 +#define R_ARM_LDRS_PC_G2 66 +#define R_ARM_LDC_PC_G0 67 +#define R_ARM_LDC_PC_G1 68 +#define R_ARM_LDC_PC_G2 69 +#define R_ARM_ALU_SB_G0_NC 70 +#define R_ARM_ALU_SB_G0 71 +#define R_ARM_ALU_SB_G1_NC 72 +#define R_ARM_ALU_SB_G1 73 +#define R_ARM_ALU_SB_G2 74 +#define R_ARM_LDR_SB_G0 75 +#define R_ARM_LDR_SB_G1 76 +#define R_ARM_LDR_SB_G2 77 +#define R_ARM_LDRS_SB_G0 78 +#define R_ARM_LDRS_SB_G1 79 +#define R_ARM_LDRS_SB_G2 80 +#define R_ARM_LDC_SB_G0 81 +#define R_ARM_LDC_SB_G1 82 +#define R_ARM_LDC_SB_G2 83 +#define R_ARM_MOVW_BREL_NC 84 +#define R_ARM_MOVT_BREL 85 +#define R_ARM_MOVW_BREL 86 +#define R_ARM_THM_MOVW_BREL_NC 87 +#define R_ARM_THM_MOVT_BREL 88 +#define R_ARM_THM_MOVW_BREL 89 +#define R_ARM_TLS_GOTDESC 90 +#define R_ARM_TLS_CALL 91 +#define R_ARM_TLS_DESCSEQ 92 +#define R_ARM_THM_TLS_CALL 93 +#define R_ARM_PLT32_ABS 94 +#define R_ARM_GOT_ABS 95 +#define R_ARM_GOT_PREL 96 +#define R_ARM_GOT_BREL12 97 +#define R_ARM_GOTOFF12 98 +#define R_ARM_GOTRELAX 99 +#define R_ARM_GNU_VTENTRY 100 +#define R_ARM_GNU_VTINHERIT 101 +#define R_ARM_THM_PC11 102 +#define R_ARM_THM_PC9 103 +#define R_ARM_TLS_GD32 104 + +#define R_ARM_TLS_LDM32 105 + +#define R_ARM_TLS_LDO32 106 + +#define R_ARM_TLS_IE32 107 + +#define R_ARM_TLS_LE32 108 +#define R_ARM_TLS_LDO12 109 +#define R_ARM_TLS_LE12 110 +#define R_ARM_TLS_IE12GP 111 +#define R_ARM_ME_TOO 128 +#define R_ARM_THM_TLS_DESCSEQ 129 +#define R_ARM_THM_TLS_DESCSEQ16 129 +#define R_ARM_THM_TLS_DESCSEQ32 130 +#define R_ARM_THM_GOT_BREL12 131 +#define R_ARM_IRELATIVE 160 +#define R_ARM_RXPC25 249 +#define R_ARM_RSBREL32 250 +#define R_ARM_THM_RPC22 251 +#define R_ARM_RREL32 252 +#define R_ARM_RABS22 253 +#define R_ARM_RPC24 254 +#define R_ARM_RBASE 255 + +#define R_ARM_NUM 256 + + + + +#define EF_IA_64_MASKOS 0x0000000f +#define EF_IA_64_ABI64 0x00000010 +#define EF_IA_64_ARCH 0xff000000 + + +#define PT_IA_64_ARCHEXT (PT_LOPROC + 0) +#define PT_IA_64_UNWIND (PT_LOPROC + 1) +#define PT_IA_64_HP_OPT_ANOT (PT_LOOS + 0x12) +#define PT_IA_64_HP_HSL_ANOT (PT_LOOS + 0x13) +#define PT_IA_64_HP_STACK (PT_LOOS + 0x14) + + +#define PF_IA_64_NORECOV 0x80000000 + + +#define SHT_IA_64_EXT (SHT_LOPROC + 0) +#define SHT_IA_64_UNWIND (SHT_LOPROC + 1) + + +#define SHF_IA_64_SHORT 0x10000000 +#define SHF_IA_64_NORECOV 0x20000000 + + +#define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0) +#define DT_IA_64_NUM 1 + + +#define R_IA64_NONE 0x00 +#define R_IA64_IMM14 0x21 +#define R_IA64_IMM22 0x22 +#define R_IA64_IMM64 0x23 +#define R_IA64_DIR32MSB 0x24 +#define R_IA64_DIR32LSB 0x25 +#define R_IA64_DIR64MSB 0x26 +#define R_IA64_DIR64LSB 0x27 +#define R_IA64_GPREL22 0x2a +#define R_IA64_GPREL64I 0x2b +#define R_IA64_GPREL32MSB 0x2c +#define R_IA64_GPREL32LSB 0x2d +#define R_IA64_GPREL64MSB 0x2e +#define R_IA64_GPREL64LSB 0x2f +#define R_IA64_LTOFF22 0x32 +#define R_IA64_LTOFF64I 0x33 +#define R_IA64_PLTOFF22 0x3a +#define R_IA64_PLTOFF64I 0x3b +#define R_IA64_PLTOFF64MSB 0x3e +#define R_IA64_PLTOFF64LSB 0x3f +#define R_IA64_FPTR64I 0x43 +#define R_IA64_FPTR32MSB 0x44 +#define R_IA64_FPTR32LSB 0x45 +#define R_IA64_FPTR64MSB 0x46 +#define R_IA64_FPTR64LSB 0x47 +#define R_IA64_PCREL60B 0x48 +#define R_IA64_PCREL21B 0x49 +#define R_IA64_PCREL21M 0x4a +#define R_IA64_PCREL21F 0x4b +#define R_IA64_PCREL32MSB 0x4c +#define R_IA64_PCREL32LSB 0x4d +#define R_IA64_PCREL64MSB 0x4e +#define R_IA64_PCREL64LSB 0x4f +#define R_IA64_LTOFF_FPTR22 0x52 +#define R_IA64_LTOFF_FPTR64I 0x53 +#define R_IA64_LTOFF_FPTR32MSB 0x54 +#define R_IA64_LTOFF_FPTR32LSB 0x55 +#define R_IA64_LTOFF_FPTR64MSB 0x56 +#define R_IA64_LTOFF_FPTR64LSB 0x57 +#define R_IA64_SEGREL32MSB 0x5c +#define R_IA64_SEGREL32LSB 0x5d +#define R_IA64_SEGREL64MSB 0x5e +#define R_IA64_SEGREL64LSB 0x5f +#define R_IA64_SECREL32MSB 0x64 +#define R_IA64_SECREL32LSB 0x65 +#define R_IA64_SECREL64MSB 0x66 +#define R_IA64_SECREL64LSB 0x67 +#define R_IA64_REL32MSB 0x6c +#define R_IA64_REL32LSB 0x6d +#define R_IA64_REL64MSB 0x6e +#define R_IA64_REL64LSB 0x6f +#define R_IA64_LTV32MSB 0x74 +#define R_IA64_LTV32LSB 0x75 +#define R_IA64_LTV64MSB 0x76 +#define R_IA64_LTV64LSB 0x77 +#define R_IA64_PCREL21BI 0x79 +#define R_IA64_PCREL22 0x7a +#define R_IA64_PCREL64I 0x7b +#define R_IA64_IPLTMSB 0x80 +#define R_IA64_IPLTLSB 0x81 +#define R_IA64_COPY 0x84 +#define R_IA64_SUB 0x85 +#define R_IA64_LTOFF22X 0x86 +#define R_IA64_LDXMOV 0x87 +#define R_IA64_TPREL14 0x91 +#define R_IA64_TPREL22 0x92 +#define R_IA64_TPREL64I 0x93 +#define R_IA64_TPREL64MSB 0x96 +#define R_IA64_TPREL64LSB 0x97 +#define R_IA64_LTOFF_TPREL22 0x9a +#define R_IA64_DTPMOD64MSB 0xa6 +#define R_IA64_DTPMOD64LSB 0xa7 +#define R_IA64_LTOFF_DTPMOD22 0xaa +#define R_IA64_DTPREL14 0xb1 +#define R_IA64_DTPREL22 0xb2 +#define R_IA64_DTPREL64I 0xb3 +#define R_IA64_DTPREL32MSB 0xb4 +#define R_IA64_DTPREL32LSB 0xb5 +#define R_IA64_DTPREL64MSB 0xb6 +#define R_IA64_DTPREL64LSB 0xb7 +#define R_IA64_LTOFF_DTPREL22 0xba + + +#define EF_SH_MACH_MASK 0x1f +#define EF_SH_UNKNOWN 0x0 +#define EF_SH1 0x1 +#define EF_SH2 0x2 +#define EF_SH3 0x3 +#define EF_SH_DSP 0x4 +#define EF_SH3_DSP 0x5 +#define EF_SH4AL_DSP 0x6 +#define EF_SH3E 0x8 +#define EF_SH4 0x9 +#define EF_SH2E 0xb +#define EF_SH4A 0xc +#define EF_SH2A 0xd +#define EF_SH4_NOFPU 0x10 +#define EF_SH4A_NOFPU 0x11 +#define EF_SH4_NOMMU_NOFPU 0x12 +#define EF_SH2A_NOFPU 0x13 +#define EF_SH3_NOMMU 0x14 +#define EF_SH2A_SH4_NOFPU 0x15 +#define EF_SH2A_SH3_NOFPU 0x16 +#define EF_SH2A_SH4 0x17 +#define EF_SH2A_SH3E 0x18 + +#define R_SH_NONE 0 +#define R_SH_DIR32 1 +#define R_SH_REL32 2 +#define R_SH_DIR8WPN 3 +#define R_SH_IND12W 4 +#define R_SH_DIR8WPL 5 +#define R_SH_DIR8WPZ 6 +#define R_SH_DIR8BP 7 +#define R_SH_DIR8W 8 +#define R_SH_DIR8L 9 +#define R_SH_SWITCH16 25 +#define R_SH_SWITCH32 26 +#define R_SH_USES 27 +#define R_SH_COUNT 28 +#define R_SH_ALIGN 29 +#define R_SH_CODE 30 +#define R_SH_DATA 31 +#define R_SH_LABEL 32 +#define R_SH_SWITCH8 33 +#define R_SH_GNU_VTINHERIT 34 +#define R_SH_GNU_VTENTRY 35 +#define R_SH_TLS_GD_32 144 +#define R_SH_TLS_LD_32 145 +#define R_SH_TLS_LDO_32 146 +#define R_SH_TLS_IE_32 147 +#define R_SH_TLS_LE_32 148 +#define R_SH_TLS_DTPMOD32 149 +#define R_SH_TLS_DTPOFF32 150 +#define R_SH_TLS_TPOFF32 151 +#define R_SH_GOT32 160 +#define R_SH_PLT32 161 +#define R_SH_COPY 162 +#define R_SH_GLOB_DAT 163 +#define R_SH_JMP_SLOT 164 +#define R_SH_RELATIVE 165 +#define R_SH_GOTOFF 166 +#define R_SH_GOTPC 167 +#define R_SH_GOT20 201 +#define R_SH_GOTOFF20 202 +#define R_SH_GOTFUNCDESC 203 +#define R_SH_GOTFUNCDEST20 204 +#define R_SH_GOTOFFFUNCDESC 205 +#define R_SH_GOTOFFFUNCDEST20 206 +#define R_SH_FUNCDESC 207 +#define R_SH_FUNCDESC_VALUE 208 + +#define R_SH_NUM 256 + + + +#define R_390_NONE 0 +#define R_390_8 1 +#define R_390_12 2 +#define R_390_16 3 +#define R_390_32 4 +#define R_390_PC32 5 +#define R_390_GOT12 6 +#define R_390_GOT32 7 +#define R_390_PLT32 8 +#define R_390_COPY 9 +#define R_390_GLOB_DAT 10 +#define R_390_JMP_SLOT 11 +#define R_390_RELATIVE 12 +#define R_390_GOTOFF32 13 +#define R_390_GOTPC 14 +#define R_390_GOT16 15 +#define R_390_PC16 16 +#define R_390_PC16DBL 17 +#define R_390_PLT16DBL 18 +#define R_390_PC32DBL 19 +#define R_390_PLT32DBL 20 +#define R_390_GOTPCDBL 21 +#define R_390_64 22 +#define R_390_PC64 23 +#define R_390_GOT64 24 +#define R_390_PLT64 25 +#define R_390_GOTENT 26 +#define R_390_GOTOFF16 27 +#define R_390_GOTOFF64 28 +#define R_390_GOTPLT12 29 +#define R_390_GOTPLT16 30 +#define R_390_GOTPLT32 31 +#define R_390_GOTPLT64 32 +#define R_390_GOTPLTENT 33 +#define R_390_PLTOFF16 34 +#define R_390_PLTOFF32 35 +#define R_390_PLTOFF64 36 +#define R_390_TLS_LOAD 37 +#define R_390_TLS_GDCALL 38 + +#define R_390_TLS_LDCALL 39 + +#define R_390_TLS_GD32 40 + +#define R_390_TLS_GD64 41 + +#define R_390_TLS_GOTIE12 42 + +#define R_390_TLS_GOTIE32 43 + +#define R_390_TLS_GOTIE64 44 + +#define R_390_TLS_LDM32 45 + +#define R_390_TLS_LDM64 46 + +#define R_390_TLS_IE32 47 + +#define R_390_TLS_IE64 48 + +#define R_390_TLS_IEENT 49 + +#define R_390_TLS_LE32 50 + +#define R_390_TLS_LE64 51 + +#define R_390_TLS_LDO32 52 + +#define R_390_TLS_LDO64 53 + +#define R_390_TLS_DTPMOD 54 +#define R_390_TLS_DTPOFF 55 +#define R_390_TLS_TPOFF 56 + +#define R_390_20 57 +#define R_390_GOT20 58 +#define R_390_GOTPLT20 59 +#define R_390_TLS_GOTIE20 60 + + +#define R_390_NUM 61 + + + +#define R_CRIS_NONE 0 +#define R_CRIS_8 1 +#define R_CRIS_16 2 +#define R_CRIS_32 3 +#define R_CRIS_8_PCREL 4 +#define R_CRIS_16_PCREL 5 +#define R_CRIS_32_PCREL 6 +#define R_CRIS_GNU_VTINHERIT 7 +#define R_CRIS_GNU_VTENTRY 8 +#define R_CRIS_COPY 9 +#define R_CRIS_GLOB_DAT 10 +#define R_CRIS_JUMP_SLOT 11 +#define R_CRIS_RELATIVE 12 +#define R_CRIS_16_GOT 13 +#define R_CRIS_32_GOT 14 +#define R_CRIS_16_GOTPLT 15 +#define R_CRIS_32_GOTPLT 16 +#define R_CRIS_32_GOTREL 17 +#define R_CRIS_32_PLT_GOTREL 18 +#define R_CRIS_32_PLT_PCREL 19 + +#define R_CRIS_NUM 20 + + + +#define R_X86_64_NONE 0 +#define R_X86_64_64 1 +#define R_X86_64_PC32 2 +#define R_X86_64_GOT32 3 +#define R_X86_64_PLT32 4 +#define R_X86_64_COPY 5 +#define R_X86_64_GLOB_DAT 6 +#define R_X86_64_JUMP_SLOT 7 +#define R_X86_64_RELATIVE 8 +#define R_X86_64_GOTPCREL 9 + +#define R_X86_64_32 10 +#define R_X86_64_32S 11 +#define R_X86_64_16 12 +#define R_X86_64_PC16 13 +#define R_X86_64_8 14 +#define R_X86_64_PC8 15 +#define R_X86_64_DTPMOD64 16 +#define R_X86_64_DTPOFF64 17 +#define R_X86_64_TPOFF64 18 +#define R_X86_64_TLSGD 19 + +#define R_X86_64_TLSLD 20 + +#define R_X86_64_DTPOFF32 21 +#define R_X86_64_GOTTPOFF 22 + +#define R_X86_64_TPOFF32 23 +#define R_X86_64_PC64 24 +#define R_X86_64_GOTOFF64 25 +#define R_X86_64_GOTPC32 26 +#define R_X86_64_GOT64 27 +#define R_X86_64_GOTPCREL64 28 +#define R_X86_64_GOTPC64 29 +#define R_X86_64_GOTPLT64 30 +#define R_X86_64_PLTOFF64 31 +#define R_X86_64_SIZE32 32 +#define R_X86_64_SIZE64 33 + +#define R_X86_64_GOTPC32_TLSDESC 34 +#define R_X86_64_TLSDESC_CALL 35 + +#define R_X86_64_TLSDESC 36 +#define R_X86_64_IRELATIVE 37 +#define R_X86_64_RELATIVE64 38 +#define R_X86_64_GOTPCRELX 41 +#define R_X86_64_REX_GOTPCRELX 42 +#define R_X86_64_NUM 43 + + + +#define R_MN10300_NONE 0 +#define R_MN10300_32 1 +#define R_MN10300_16 2 +#define R_MN10300_8 3 +#define R_MN10300_PCREL32 4 +#define R_MN10300_PCREL16 5 +#define R_MN10300_PCREL8 6 +#define R_MN10300_GNU_VTINHERIT 7 +#define R_MN10300_GNU_VTENTRY 8 +#define R_MN10300_24 9 +#define R_MN10300_GOTPC32 10 +#define R_MN10300_GOTPC16 11 +#define R_MN10300_GOTOFF32 12 +#define R_MN10300_GOTOFF24 13 +#define R_MN10300_GOTOFF16 14 +#define R_MN10300_PLT32 15 +#define R_MN10300_PLT16 16 +#define R_MN10300_GOT32 17 +#define R_MN10300_GOT24 18 +#define R_MN10300_GOT16 19 +#define R_MN10300_COPY 20 +#define R_MN10300_GLOB_DAT 21 +#define R_MN10300_JMP_SLOT 22 +#define R_MN10300_RELATIVE 23 + +#define R_MN10300_NUM 24 + + + +#define R_M32R_NONE 0 +#define R_M32R_16 1 +#define R_M32R_32 2 +#define R_M32R_24 3 +#define R_M32R_10_PCREL 4 +#define R_M32R_18_PCREL 5 +#define R_M32R_26_PCREL 6 +#define R_M32R_HI16_ULO 7 +#define R_M32R_HI16_SLO 8 +#define R_M32R_LO16 9 +#define R_M32R_SDA16 10 +#define R_M32R_GNU_VTINHERIT 11 +#define R_M32R_GNU_VTENTRY 12 + +#define R_M32R_16_RELA 33 +#define R_M32R_32_RELA 34 +#define R_M32R_24_RELA 35 +#define R_M32R_10_PCREL_RELA 36 +#define R_M32R_18_PCREL_RELA 37 +#define R_M32R_26_PCREL_RELA 38 +#define R_M32R_HI16_ULO_RELA 39 +#define R_M32R_HI16_SLO_RELA 40 +#define R_M32R_LO16_RELA 41 +#define R_M32R_SDA16_RELA 42 +#define R_M32R_RELA_GNU_VTINHERIT 43 +#define R_M32R_RELA_GNU_VTENTRY 44 +#define R_M32R_REL32 45 + +#define R_M32R_GOT24 48 +#define R_M32R_26_PLTREL 49 +#define R_M32R_COPY 50 +#define R_M32R_GLOB_DAT 51 +#define R_M32R_JMP_SLOT 52 +#define R_M32R_RELATIVE 53 +#define R_M32R_GOTOFF 54 +#define R_M32R_GOTPC24 55 +#define R_M32R_GOT16_HI_ULO 56 + +#define R_M32R_GOT16_HI_SLO 57 + +#define R_M32R_GOT16_LO 58 +#define R_M32R_GOTPC_HI_ULO 59 + +#define R_M32R_GOTPC_HI_SLO 60 + +#define R_M32R_GOTPC_LO 61 + +#define R_M32R_GOTOFF_HI_ULO 62 + +#define R_M32R_GOTOFF_HI_SLO 63 + +#define R_M32R_GOTOFF_LO 64 +#define R_M32R_NUM 256 + +#define R_MICROBLAZE_NONE 0 +#define R_MICROBLAZE_32 1 +#define R_MICROBLAZE_32_PCREL 2 +#define R_MICROBLAZE_64_PCREL 3 +#define R_MICROBLAZE_32_PCREL_LO 4 +#define R_MICROBLAZE_64 5 +#define R_MICROBLAZE_32_LO 6 +#define R_MICROBLAZE_SRO32 7 +#define R_MICROBLAZE_SRW32 8 +#define R_MICROBLAZE_64_NONE 9 +#define R_MICROBLAZE_32_SYM_OP_SYM 10 +#define R_MICROBLAZE_GNU_VTINHERIT 11 +#define R_MICROBLAZE_GNU_VTENTRY 12 +#define R_MICROBLAZE_GOTPC_64 13 +#define R_MICROBLAZE_GOT_64 14 +#define R_MICROBLAZE_PLT_64 15 +#define R_MICROBLAZE_REL 16 +#define R_MICROBLAZE_JUMP_SLOT 17 +#define R_MICROBLAZE_GLOB_DAT 18 +#define R_MICROBLAZE_GOTOFF_64 19 +#define R_MICROBLAZE_GOTOFF_32 20 +#define R_MICROBLAZE_COPY 21 +#define R_MICROBLAZE_TLS 22 +#define R_MICROBLAZE_TLSGD 23 +#define R_MICROBLAZE_TLSLD 24 +#define R_MICROBLAZE_TLSDTPMOD32 25 +#define R_MICROBLAZE_TLSDTPREL32 26 +#define R_MICROBLAZE_TLSDTPREL64 27 +#define R_MICROBLAZE_TLSGOTTPREL32 28 +#define R_MICROBLAZE_TLSTPREL32 29 + +#define DT_NIOS2_GP 0x70000002 + +#define R_NIOS2_NONE 0 +#define R_NIOS2_S16 1 +#define R_NIOS2_U16 2 +#define R_NIOS2_PCREL16 3 +#define R_NIOS2_CALL26 4 +#define R_NIOS2_IMM5 5 +#define R_NIOS2_CACHE_OPX 6 +#define R_NIOS2_IMM6 7 +#define R_NIOS2_IMM8 8 +#define R_NIOS2_HI16 9 +#define R_NIOS2_LO16 10 +#define R_NIOS2_HIADJ16 11 +#define R_NIOS2_BFD_RELOC_32 12 +#define R_NIOS2_BFD_RELOC_16 13 +#define R_NIOS2_BFD_RELOC_8 14 +#define R_NIOS2_GPREL 15 +#define R_NIOS2_GNU_VTINHERIT 16 +#define R_NIOS2_GNU_VTENTRY 17 +#define R_NIOS2_UJMP 18 +#define R_NIOS2_CJMP 19 +#define R_NIOS2_CALLR 20 +#define R_NIOS2_ALIGN 21 +#define R_NIOS2_GOT16 22 +#define R_NIOS2_CALL16 23 +#define R_NIOS2_GOTOFF_LO 24 +#define R_NIOS2_GOTOFF_HA 25 +#define R_NIOS2_PCREL_LO 26 +#define R_NIOS2_PCREL_HA 27 +#define R_NIOS2_TLS_GD16 28 +#define R_NIOS2_TLS_LDM16 29 +#define R_NIOS2_TLS_LDO16 30 +#define R_NIOS2_TLS_IE16 31 +#define R_NIOS2_TLS_LE16 32 +#define R_NIOS2_TLS_DTPMOD 33 +#define R_NIOS2_TLS_DTPREL 34 +#define R_NIOS2_TLS_TPREL 35 +#define R_NIOS2_COPY 36 +#define R_NIOS2_GLOB_DAT 37 +#define R_NIOS2_JUMP_SLOT 38 +#define R_NIOS2_RELATIVE 39 +#define R_NIOS2_GOTOFF 40 +#define R_NIOS2_CALL26_NOAT 41 +#define R_NIOS2_GOT_LO 42 +#define R_NIOS2_GOT_HA 43 +#define R_NIOS2_CALL_LO 44 +#define R_NIOS2_CALL_HA 45 + +#define R_OR1K_NONE 0 +#define R_OR1K_32 1 +#define R_OR1K_16 2 +#define R_OR1K_8 3 +#define R_OR1K_LO_16_IN_INSN 4 +#define R_OR1K_HI_16_IN_INSN 5 +#define R_OR1K_INSN_REL_26 6 +#define R_OR1K_GNU_VTENTRY 7 +#define R_OR1K_GNU_VTINHERIT 8 +#define R_OR1K_32_PCREL 9 +#define R_OR1K_16_PCREL 10 +#define R_OR1K_8_PCREL 11 +#define R_OR1K_GOTPC_HI16 12 +#define R_OR1K_GOTPC_LO16 13 +#define R_OR1K_GOT16 14 +#define R_OR1K_PLT26 15 +#define R_OR1K_GOTOFF_HI16 16 +#define R_OR1K_GOTOFF_LO16 17 +#define R_OR1K_COPY 18 +#define R_OR1K_GLOB_DAT 19 +#define R_OR1K_JMP_SLOT 20 +#define R_OR1K_RELATIVE 21 +#define R_OR1K_TLS_GD_HI16 22 +#define R_OR1K_TLS_GD_LO16 23 +#define R_OR1K_TLS_LDM_HI16 24 +#define R_OR1K_TLS_LDM_LO16 25 +#define R_OR1K_TLS_LDO_HI16 26 +#define R_OR1K_TLS_LDO_LO16 27 +#define R_OR1K_TLS_IE_HI16 28 +#define R_OR1K_TLS_IE_LO16 29 +#define R_OR1K_TLS_LE_HI16 30 +#define R_OR1K_TLS_LE_LO16 31 +#define R_OR1K_TLS_TPOFF 32 +#define R_OR1K_TLS_DTPOFF 33 +#define R_OR1K_TLS_DTPMOD 34 + +#define R_BPF_NONE 0 +#define R_BPF_MAP_FD 1 + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index 2c49b1dde8..841b7328e5 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -32,6 +33,7 @@ #include #include #include +#include "elf.h" #define min(a, b) ((a) < (b) ? (a) : (b)) @@ -69,10 +71,103 @@ struct Runner char assumeFailed_FilenameLine[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH]; }; +struct Symbol { + const char *name; + uint32_t address; + size_t size; +}; + +struct SymbolTable { + struct Symbol *symbols; + size_t symbols_n; +}; + static unsigned nrunners = 0; static unsigned runners_digits = 0; static struct Runner *runners = NULL; +// TODO: Build the symbol table on demand. +static struct SymbolTable symbol_table = { NULL, 0 }; + +static const struct Symbol *lookup_address(uint32_t address) +{ + int lo = 0, hi = symbol_table.symbols_n; + while (lo < hi) + { + int mi = lo + (hi - lo) / 2; + const struct Symbol *symbol = &symbol_table.symbols[mi]; + if (address < symbol->address) + hi = mi; + else if (address >= symbol->address + symbol->size) + lo = mi + 1; + else + return symbol; + } + return NULL; +} + +// Similar to 'fwrite(buffer, 1, size, f)' except that anything which +// looks like the output of '%p' (i.e. '<0x\d{7}>') is translated into +// the name of a symbol (if it represents one). +static void fprint_buffer(FILE *f, const char *buffer, size_t size) +{ + const char *buffer_end = buffer + size; + while (buffer < buffer_end) + { + // Find the next '<0x'. + char *buffer_ = memmem(buffer, buffer_end - buffer, "<0x", 3); + + // No '<0x' or could not possibly match, print everything. + if (buffer_ == NULL || buffer_end - buffer_ < 11 || buffer_[10] != '>') + { + fwrite(buffer, 1, buffer_end - buffer, f); + break; + } + + // Print everything before the '<0x'. + fwrite(buffer, 1, buffer_ - buffer, f); + buffer = buffer_; + + unsigned long address = strtoul(buffer + 3, &buffer_, 16); + // Un-mirror EWRAM/IWRAM/ROM addresses. + switch (address & 0xF000000) + { + case 0x2000000: address = address & 0x203FFFF; break; + case 0x3000000: address = address & 0x3007FFF; break; + case 0x7000000: address = address & 0x70003FF; break; + case 0xA000000: address = address & 0x9FFFFFF; break; + case 0xB000000: address = address & 0x9FFFFFF; break; + case 0xC000000: address = address & 0x9FFFFFF; break; + case 0xD000000: address = address & 0x9FFFFFF; break; + } + + // Not a 7-digit address, print the '<0x' part and loop. + if (buffer_ != buffer + 10) + { + fwrite(buffer, 1, 3, f); + buffer += 3; + continue; + } + + const struct Symbol *symbol = lookup_address(address); + + // Not a symbol, print the parsed part and loop. + if (symbol == NULL) + { + fwrite(buffer, 1, 11, f); + buffer += 11; + continue; + } + + if (symbol->address == address) + fprintf(f, "<%s>", symbol->name); + else + fprintf(f, "<%s+0x%lx>", symbol->name, address - symbol->address); + + buffer += 11; + } +} + static void handle_read(int i, struct Runner *runner) { char *sol = runner->input_buffer; @@ -156,7 +251,7 @@ add_to_results: soc += 2; fprintf(stdout, "[%0*d] %s: ", runners_digits, i, runner->test_name); fwrite(soc, 1, eol - soc, stdout); - fwrite(runner->output_buffer, 1, runner->output_buffer_size, stdout); + fprint_buffer(stdout, runner->output_buffer, runner->output_buffer_size); strcpy(runner->test_name, "WAITING..."); runner->output_buffer_size = 0; break; @@ -186,11 +281,7 @@ buffer_output: } else { - if (write(STDOUT_FILENO, sol, eol - sol) == -1) - { - perror("write failed"); - exit(2); - } + fwrite(sol, 1, eol - sol, stdout); } sol += n; consumed += n; @@ -233,12 +324,80 @@ static void exit2(int _) exit(2); } -int compare_strings(const void * a, const void * b) +static int compare_addresses(const void *a, const void *b) { - const char *arg1 = (const char *) a; - const char *arg2 = (const char *) b; + const struct Symbol *sa = a, *sb = b; + if (sa->address < sb->address) + return -1; + else if (sa->address == sb->address) + return 0; + else + return 1; +} - return strcmp(arg1, arg2); +static void build_symbol_table(void *elf) +{ + if (memcmp(elf, ELFMAG, 4) != 0) + goto error; + + size_t symbol_table_symbols_c = 1024; + symbol_table.symbols = malloc(symbol_table_symbols_c * sizeof(*symbol_table.symbols)); + if (symbol_table.symbols == NULL) + goto error; + + const Elf32_Ehdr *ehdr = (Elf32_Ehdr *)elf; + const Elf32_Shdr *shdrs = (Elf32_Shdr *)(elf + ehdr->e_shoff); + + if (ehdr->e_shstrndx == SHN_UNDEF) + goto error; + const Elf32_Shdr *shdr_shstr = &shdrs[ehdr->e_shstrndx]; + const char *shstr = (const char *)(elf + shdr_shstr->sh_offset); + const Elf32_Shdr *shdr_symtab = NULL; + const Elf32_Shdr *shdr_strtab = NULL; + for (int i = 0; i < ehdr->e_shnum; i++) + { + const char *sh_name = shstr + shdrs[i].sh_name; + if (strcmp(sh_name, ".symtab") == 0) + shdr_symtab = &shdrs[i]; + else if (strcmp(sh_name, ".strtab") == 0) + shdr_strtab = &shdrs[i]; + } + if (!shdr_symtab) + goto error; + if (!shdr_strtab) + goto error; + + const Elf32_Sym *symtab = (Elf32_Sym *)(elf + shdr_symtab->sh_offset); + const char *strtab = (const char *)(elf + shdr_strtab->sh_offset); + for (int i = 0; i < shdr_symtab->sh_size / shdr_symtab->sh_entsize; i++) + { + if (symtab[i].st_name == 0) continue; + if (symtab[i].st_shndx > ehdr->e_shnum) continue; + if (symtab[i].st_value < 0x2000000 || symtab[i].st_size == 0) continue; + struct Symbol symbol = + { + .name = strtab + symtab[i].st_name, + .address = symtab[i].st_value, + .size = symtab[i].st_size, + }; + if (symbol_table.symbols_n == symbol_table_symbols_c) + { + symbol_table_symbols_c *= 2; + void *symbols = realloc(symbol_table.symbols, symbol_table_symbols_c * sizeof(*symbol_table.symbols)); + if (symbols == NULL) + goto error; + symbol_table.symbols = symbols; + } + symbol_table.symbols[symbol_table.symbols_n++] = symbol; + } + + qsort(symbol_table.symbols, symbol_table.symbols_n, sizeof(*symbol_table.symbols), compare_addresses); + return; + +error: + free(symbol_table.symbols); + symbol_table.symbols = NULL; + symbol_table.symbols_n = 0; } int main(int argc, char *argv[]) @@ -292,6 +451,8 @@ int main(int argc, char *argv[]) exit(2); } + build_symbol_table(elf); + nrunners = 1; const char *makeflags = getenv("MAKEFLAGS"); if (makeflags) From 111a95951cdb78a5d9f8464ede89368e83f834c6 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Tue, 22 Oct 2024 13:25:46 +0100 Subject: [PATCH 13/50] Fallback memmem implementation --- tools/mgba-rom-test-hydra/Makefile | 2 +- tools/mgba-rom-test-hydra/main.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/tools/mgba-rom-test-hydra/Makefile b/tools/mgba-rom-test-hydra/Makefile index f93f991d9b..ef0523adc9 100644 --- a/tools/mgba-rom-test-hydra/Makefile +++ b/tools/mgba-rom-test-hydra/Makefile @@ -12,7 +12,7 @@ all: mgba-rom-test-hydra$(EXE) @: mgba-rom-test-hydra$(EXE): $(SRCS) - $(CC) $(SRCS) -o $@ -lm $(LDFLAGS) + $(CC) $(SRCS) -Werror=implicit-function-declaration -o $@ -lm $(LDFLAGS) clean: $(RM) mgba-rom-test-hydra$(EXE) diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index 841b7328e5..d4c0f4e080 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -106,6 +106,28 @@ static const struct Symbol *lookup_address(uint32_t address) return NULL; } +#ifndef _GNU_SOURCE +// Very naive implementation of 'memmem' for systems which don't make it +// available by default. +void *memmem(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen) +{ + const char *haystack_ = haystack; + const char *needle_ = needle; + for (size_t i = 0; i < haystacklen - needlelen; i++) + { + size_t j; + for (j = 0; j < needlelen; j++) + { + if (haystack_[i+j] != needle_[j]) + break; + } + if (j == needlelen) + return (void *)&haystack_[i]; + } + return NULL; +} +#endif + // Similar to 'fwrite(buffer, 1, size, f)' except that anything which // looks like the output of '%p' (i.e. '<0x\d{7}>') is translated into // the name of a symbol (if it represents one). From 6de4222c22e182976d6f3a11870990025fc0b161 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Tue, 22 Oct 2024 10:24:48 -0400 Subject: [PATCH 14/50] Fix AnimTask_HorizontalShake uses for shaking screen in battle anims (#5562) Co-authored-by: ghoulslash --- data/battle_anim_scripts.s | 50 +++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 1fa813e44f..68f804e8ed 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -9288,8 +9288,8 @@ Move_THOUSAND_ARROWS:: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER waitforvisualfinish delay 0x30 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 10, 0x32 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 10, 0x32 + createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 10, 0x32 + createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 10, 0x32 call ThousandArrowsDown call ThousandArrowsDown call ThousandArrowsDown @@ -9489,8 +9489,8 @@ Move_LANDS_WRATH:: fadetobg BG_FISSURE waitbgfadeout playsewithpan SE_M_EARTHQUAKE, 0x0 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 10, 0x32 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 10, 0x32 + createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 10, 0x32 + createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 10, 0x32 createvisualtask AnimTask_PositionFissureBgOnBattler, 5, ANIM_TARGET, 5, -1 waitbgfadein waitforvisualfinish @@ -9657,8 +9657,8 @@ Move_PRECIPICE_BLADES:: fadetobg 0x15 waitbgfadeout createvisualtask AnimTask_PositionFissureBgOnBattler, 5, ANIM_TARGET, 5, -1 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 10, 0x5 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 10, 0x5 + createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 10, 0x5 + createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 10, 0x5 playsewithpan SE_M_EARTHQUAKE, 0x0 createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7, ANIM_TARGET, PrecipiceBladesOpponent @@ -11771,8 +11771,8 @@ Move_STOMPING_TANTRUM:: monbg ANIM_TARGET createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 3 delay 0x5 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 10, 0x5 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 10, 0x5 + createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 10, 0x5 + createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 10, 0x5 createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x1 createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x2 @@ -11907,8 +11907,8 @@ Move_PRISMATIC_LASER:: unloadspritegfx ANIM_TAG_ICE_CHUNK unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT delay 0x1E - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 10, 0x32 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 10, 0x32 + createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 10, 0x32 + createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 10, 0x32 playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER call PrismaticLaserRain call PrismaticLaserRain @@ -16157,8 +16157,8 @@ Move_GIGATON_HAMMER:: delay 18 createvisualtask AnimTask_SquishTarget, 0x2 delay 6 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 10, 50 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 10, 50 + createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 10, 50 + createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 10, 50 call GigatonHammerImpact waitforvisualfinish end @@ -19839,8 +19839,8 @@ Move_LOW_KICK:: end Move_EARTHQUAKE:: - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 10, 50 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 10, 50 + createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 10, 50 + createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 10, 50 playsewithpan SE_M_EARTHQUAKE, 0 delay 10 createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 @@ -19850,8 +19850,8 @@ Move_EARTHQUAKE:: Move_FISSURE:: loadspritegfx ANIM_TAG_MUD_SAND - createvisualtask AnimTask_HorizontalShake, 3, ANIM_PLAYER_RIGHT, 10, 50 - createvisualtask AnimTask_HorizontalShake, 3, ANIM_TARGET, 10, 50 + createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 10, 50 + createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 10, 50 playsewithpan SE_M_EARTHQUAKE, SOUND_PAN_TARGET delay 8 call FissureDirtPlumeFar @@ -20577,13 +20577,13 @@ Move_MAGNITUDE:: MagnitudeEnd: end MagnitudeRegular: - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 0, 50 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 0, 50 + createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 0, 50 + createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 0, 50 loopsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET, 8, 10 goto MagnitudeEnd MagnitudeIntense: - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 0, 50 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 0, 50 + createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 0, 50 + createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 0, 50 loopsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET, 8, 10 delay 10 createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 @@ -21056,8 +21056,8 @@ Move_ERUPTION:: createsprite gEruptionFallingRockSpriteTemplate, ANIM_ATTACKER, 40, 110, -32, 64, 50, 0 createsprite gEruptionFallingRockSpriteTemplate, ANIM_ATTACKER, 40, 60, -32, 80, 70, 1 delay 22 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 8, 60 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 8, 60 + createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 8, 60 + createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 8, 60 loopsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET, 16, 12 delay 80 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 40, F_PAL_BG | F_PAL_BATTLERS, 4, 4, 0, RGB_RED @@ -21087,7 +21087,7 @@ Move_IMPRISON:: waitforvisualfinish delay 4 createsprite gRedXSpriteTemplate, ANIM_ATTACKER, 5, ANIM_ATTACKER, 40 - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 1, 10 + createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 1, 10 playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_ATTACKER clearmonbg ANIM_DEF_PARTNER call UnsetPsychicBg @@ -28522,8 +28522,8 @@ Move_BREAKNECK_BLITZ:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_FLAT_ROCK - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 5, 32 @ shake screen - createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 5, 32 @ shake banks + createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 5, 32 @ shake screen + createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 5, 32 @ shake banks playsewithpan SE_M_EARTHQUAKE, 0x0 monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER From afc89f53b065ac6f1d5fae79e9ee403f5d9f1ba3 Mon Sep 17 00:00:00 2001 From: RavePossum <145081120+ravepossum@users.noreply.github.com> Date: Tue, 22 Oct 2024 10:27:10 -0400 Subject: [PATCH 15/50] Fix weather genie move anims and springtide storm targets (#5553) --- src/battle_anim_flying.c | 8 ++++++-- src/data/moves_info.h | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index 1fd587fa4c..1591887855 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -356,10 +356,14 @@ const struct SpriteTemplate gSkyAttackBirdSpriteTemplate = .callback = AnimSkyAttackBird, }; -// same as AnimEllipticalGust but centered on targets +// same as AnimEllipticalGust but centered on targets in a double battle static void AnimEllipticalGustCentered(struct Sprite *sprite) { - InitSpritePosToAnimTargetsCentre(sprite, FALSE); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + InitSpritePosToAnimTargetsCentre(sprite, FALSE); + else + InitSpritePosToAnimTarget(sprite, FALSE); + sprite->y += 20; sprite->data[1] = 191; sprite->callback = AnimEllipticalGust_Step; diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 22ca581df4..4eee90a802 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -18800,7 +18800,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .type = TYPE_FAIRY, .accuracy = 80, .pp = 5, - .target = MOVE_TARGET_SELECTED, + .target = MOVE_TARGET_BOTH, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .windMove = TRUE, From 0ad77db4b4e4563750924ff1d75ed1207e9c0443 Mon Sep 17 00:00:00 2001 From: RavePossum <145081120+ravepossum@users.noreply.github.com> Date: Tue, 22 Oct 2024 10:28:11 -0400 Subject: [PATCH 16/50] Fix HGSS dex search printing wrong mon after selecting evos (#5552) --- src/pokedex_plus_hgss.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/pokedex_plus_hgss.c b/src/pokedex_plus_hgss.c index e3b7793bbd..74b57fa3a5 100644 --- a/src/pokedex_plus_hgss.c +++ b/src/pokedex_plus_hgss.c @@ -460,7 +460,8 @@ struct PokedexView u16 maxScrollTimer; u16 scrollSpeed; u16 unkArr1[4]; // Cleared, never read - u8 filler[8]; + u16 originalSearchSelectionNum; + u8 filler[6]; u8 currentPage; u8 currentPageBackup; bool8 isSearchResults:1; @@ -2139,6 +2140,7 @@ static void ResetPokedexView(struct PokedexView *pokedexView) pokedexView->unkArr2[i] = 0; for (i = 0; i < ARRAY_COUNT(pokedexView->unkArr3); i++) pokedexView->unkArr3[i] = 0; + pokedexView->originalSearchSelectionNum = 0; } static void VBlankCB_Pokedex(void) @@ -2438,6 +2440,13 @@ static bool8 LoadPokedexListPage(u8 page) case 3: if (page == PAGE_MAIN) CreatePokedexList(sPokedexView->dexMode, sPokedexView->dexOrder); + if (sPokedexView->originalSearchSelectionNum != 0) + { + // when returning to search results after selecting an evo, we have to restore + // the original dexNum because the search results page doesn't rebuild the list + sPokedexListItem->dexNum = sPokedexView->originalSearchSelectionNum; + sPokedexView->originalSearchSelectionNum = 0; + } CreateMonSpritesAtPos(sPokedexView->selectedPokemon, 0xE); sPokedexView->statBarsSpriteId = 0xFF; //stat bars CreateStatBars(&sPokedexView->pokedexList[sPokedexView->selectedPokemon]); //stat bars @@ -6146,6 +6155,9 @@ static void Task_HandleEvolutionScreenInput(u8 taskId) { u16 targetSpecies = sPokedexView->sEvoScreenData.targetSpecies[sPokedexView->sEvoScreenData.menuPos]; u16 dexNum = SpeciesToNationalPokedexNum(targetSpecies); + if (sPokedexView->isSearchResults && sPokedexView->originalSearchSelectionNum == 0) + sPokedexView->originalSearchSelectionNum = sPokedexListItem->dexNum; + sPokedexListItem->dexNum = dexNum; sPokedexListItem->seen = GetSetPokedexFlag(dexNum, FLAG_GET_SEEN); sPokedexListItem->owned = GetSetPokedexFlag(dexNum, FLAG_GET_CAUGHT); @@ -6881,6 +6893,9 @@ static void Task_HandleFormsScreenInput(u8 taskId) { u8 formId = sPokedexView->sFormScreenData.formIds[menuPos]; u16 formSpecies = GetFormSpeciesId(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), formId); + if (sPokedexView->isSearchResults && sPokedexView->originalSearchSelectionNum == 0) + sPokedexView->originalSearchSelectionNum = sPokedexListItem->dexNum; + if (formSpecies == GetFormSpeciesId(formSpecies, 0)) sPokedexView->formSpecies = 0; else From bcfdf41078aa6725d631143f505e12c861836299 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Tue, 22 Oct 2024 17:38:06 +0200 Subject: [PATCH 17/50] Follower female fix (#5475) Co-authored-by: Hedara --- include/event_object_movement.h | 8 ++++ include/global.fieldmap.h | 2 +- src/event_object_movement.c | 76 ++++++++++++++++++++------------- src/pokemon_sprite_visualizer.c | 10 +++-- 4 files changed, 63 insertions(+), 33 deletions(-) diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 1dc604138b..4b1b3e1f9f 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -107,6 +107,13 @@ struct LockedAnimObjectEvents u8 count; }; +struct FollowerSpriteVisualizerData +{ + u16 currentmonId; + bool8 isShiny; + bool8 isFemale; +}; + extern const struct OamData gObjectEventBaseOam_32x8; extern const struct OamData gObjectEventBaseOam_32x32; extern const struct OamData gObjectEventBaseOam_64x64; @@ -146,6 +153,7 @@ void RemoveFollowingPokemon(void); struct ObjectEvent *GetFollowerObject(void); void TrySpawnObjectEvents(s16 cameraX, s16 cameraY); u8 CreateObjectGraphicsSprite(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority); +u8 CreateObjectGraphicsFollowerSpriteForVisualizer(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority, struct FollowerSpriteVisualizerData *data); u8 TrySpawnObjectEvent(u8 localId, u8 mapNum, u8 mapGroup); u8 SpawnSpecialObjectEventParameterized(u16 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 elevation); u8 SpawnSpecialObjectEvent(struct ObjectEventTemplate *); diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index a9b859209b..d686a624a2 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -196,7 +196,7 @@ struct ObjectEvent u32 hideReflection:1; u32 shiny:1; // OW mon shininess u32 padding:3; - /*0x04*/ u16 graphicsId; // 11 bits for species; high 5 bits for form + /*0x04*/ u16 graphicsId; // 12 bits for species; high 4 bits for form /*0x06*/ u8 movementType; /*0x07*/ u8 trainerType; /*0x08*/ u8 localId; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 08a5920dbf..9a4f9980f5 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -202,7 +202,6 @@ static const struct ObjectEventGraphicsInfo *SpeciesToGraphicsInfo(u16 species, static bool8 NpcTakeStep(struct Sprite *); static bool8 IsElevationMismatchAt(u8, s16, s16); static bool8 AreElevationsCompatible(u8, u8); -static u16 PackGraphicsId(const struct ObjectEventTemplate *template); static void CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(u16 graphicsId, u16 movementType, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables); static const struct SpriteFrameImage sPicTable_PechaBerryTree[]; @@ -1403,7 +1402,7 @@ static u8 InitObjectEventStateFromTemplate(const struct ObjectEventTemplate *tem y = template->y + MAP_OFFSET; objectEvent->active = TRUE; objectEvent->triggerGroundEffectsOnMove = TRUE; - objectEvent->graphicsId = PackGraphicsId(template); + objectEvent->graphicsId = template->graphicsId; SetObjectEventDynamicGraphicsId(objectEvent); if (IS_OW_MON_OBJ(objectEvent)) { @@ -1721,33 +1720,10 @@ static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEven return objectEventId; } -// Pack pokemon form info into a graphicsId, from a template's script -static u16 PackGraphicsId(const struct ObjectEventTemplate *template) -{ - u16 graphicsId = template->graphicsId; - u32 form = 0; - // set form based on template's script, - // if first command is bufferspeciesname - if (IS_OW_MON_OBJ(template)) - { - if (template->script && template->script[0] == 0x7d) - { - form = T1_READ_16(&template->script[2]); - form = (form >> 10) & 0x1F; - } - else if (template->trainerRange_berryTreeId) - { - form = template->trainerRange_berryTreeId & 0x1F; - } - graphicsId |= form << OBJ_EVENT_GFX_SPECIES_BITS; - } - return graphicsId; -} - static u8 TrySpawnObjectEventTemplate(const struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) { u8 objectEventId; - u16 graphicsId = PackGraphicsId(objectEventTemplate); + u16 graphicsId = objectEventTemplate->graphicsId; struct SpriteTemplate spriteTemplate; struct SpriteFrameImage spriteFrameImage; const struct ObjectEventGraphicsInfo *graphicsInfo; @@ -1894,6 +1870,51 @@ u8 CreateObjectGraphicsSprite(u16 graphicsId, void (*callback)(struct Sprite *), return spriteId; } +// Horrible workaround for sprite the visualizer, this should probably be reworked later +u8 CreateObjectGraphicsFollowerSpriteForVisualizer(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, struct FollowerSpriteVisualizerData *data) +{ + struct SpriteTemplate *spriteTemplate; + const struct SubspriteTable *subspriteTables; + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); + struct Sprite *sprite; + u8 spriteId; + bool32 isShiny = data->isShiny; + + spriteTemplate = Alloc(sizeof(struct SpriteTemplate)); + CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, callback, spriteTemplate, &subspriteTables); + + if (OW_GFX_COMPRESS) + { + // Checking only for compressed here so as not to mess with decorations + if (graphicsInfo->compressed) + spriteTemplate->tileTag = LoadSheetGraphicsInfo(graphicsInfo, graphicsId, NULL); + } + + if (spriteTemplate->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) + { + u32 paletteNum = LoadDynamicFollowerPaletteFromGraphicsId(graphicsId, isShiny, spriteTemplate); + spriteTemplate->paletteTag = GetSpritePaletteTagByPaletteNum(paletteNum); + } + else if (spriteTemplate->paletteTag != TAG_NONE) + { + LoadObjectEventPalette(spriteTemplate->paletteTag); + } + + spriteId = CreateSprite(spriteTemplate, x, y, subpriority); + + Free(spriteTemplate); + + if (spriteId != MAX_SPRITES && subspriteTables != NULL) + { + sprite = &gSprites[spriteId]; + if (OW_GFX_COMPRESS && graphicsInfo->compressed) + sprite->sheetSpan = GetSpanPerImage(sprite->oam.shape, sprite->oam.size); + SetSubspriteTables(sprite, subspriteTables); + sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; + } + return spriteId; +} + #define sVirtualObjId data[0] #define sVirtualObjElev data[1] @@ -2871,9 +2892,6 @@ const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u16 graphicsId) if (graphicsId >= OBJ_EVENT_GFX_VARS && graphicsId <= OBJ_EVENT_GFX_VAR_F) graphicsId = VarGetObjectEventGraphicsId(graphicsId - OBJ_EVENT_GFX_VARS); - if (graphicsId >= OBJ_EVENT_GFX_MON_BASE + SPECIES_SHINY_TAG) - graphicsId -= SPECIES_SHINY_TAG; - // graphicsId may contain mon form info if (graphicsId > OBJ_EVENT_GFX_SPECIES_MASK) { form = graphicsId >> OBJ_EVENT_GFX_SPECIES_BITS; diff --git a/src/pokemon_sprite_visualizer.c b/src/pokemon_sprite_visualizer.c index d1ec14fe0d..c6bb39faaf 100644 --- a/src/pokemon_sprite_visualizer.c +++ b/src/pokemon_sprite_visualizer.c @@ -2002,13 +2002,17 @@ static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data) //Follower Sprite u16 graphicsId = (OBJ_EVENT_GFX_MON_BASE + species) & OBJ_EVENT_GFX_SPECIES_MASK; + struct FollowerSpriteVisualizerData followerData; + followerData.currentmonId = graphicsId; + followerData.isFemale = data->isFemale; + followerData.isShiny = data->isShiny; graphicsId |= data->isFemale << OBJ_EVENT_GFX_SPECIES_BITS; - graphicsId += data->isShiny ? SPECIES_SHINY_TAG : 0; - data->followerspriteId = CreateObjectGraphicsSprite(graphicsId, + data->followerspriteId = CreateObjectGraphicsFollowerSpriteForVisualizer(graphicsId, SpriteCB_Follower, VISUALIZER_FOLLOWER_X, VISUALIZER_FOLLOWER_Y, - 0); + 0, + &followerData); gSprites[data->followerspriteId].oam.priority = 0; gSprites[data->followerspriteId].anims = sAnims_Follower; From 03eda5749d06e0dc7368f10904a2204b10d73585 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Tue, 22 Oct 2024 13:02:28 -0400 Subject: [PATCH 18/50] Healer ability tests (#5559) --- include/random.h | 1 + src/battle_util.c | 2 +- test/battle/ability/healer.c | 53 ++++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 test/battle/ability/healer.c diff --git a/include/random.h b/include/random.h index 81fdbce896..bdfbe95181 100644 --- a/include/random.h +++ b/include/random.h @@ -169,6 +169,7 @@ enum RandomTag RNG_AI_SWITCH_SEEDED, RNG_SHELL_SIDE_ARM, RNG_RANDOM_TARGET, + RNG_HEALER, }; #define RandomWeighted(tag, ...) \ diff --git a/src/battle_util.c b/src/battle_util.c index 880c066cf9..103f45050c 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5225,7 +5225,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gBattleScripting.battler = BATTLE_PARTNER(battler); if (IsBattlerAlive(gBattleScripting.battler) && gBattleMons[gBattleScripting.battler].status1 & STATUS1_ANY - && (Random() % 100) < 30) + && RandomPercentage(RNG_HEALER, 30)) { BattleScriptPushCursorAndCallback(BattleScript_HealerActivates); effect++; diff --git a/test/battle/ability/healer.c b/test/battle/ability/healer.c new file mode 100644 index 0000000000..9626783ec5 --- /dev/null +++ b/test/battle/ability/healer.c @@ -0,0 +1,53 @@ +#include "global.h" +#include "test/battle.h" + +DOUBLE_BATTLE_TEST("Healer cures adjacent ally's status condition 30% of the time") +{ + u16 status; + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_BURN; } + // PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_FROSTBITE; } + PASSES_RANDOMLY(30, 100, RNG_HEALER); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Status1(status); } + OPPONENT(SPECIES_CHANSEY) { Ability(ABILITY_HEALER); } + } WHEN { + TURN { } + } SCENE { + MESSAGE("The opposing Chansey's Healer cured the opposing Wobbuffet's problem!"); + } +} + +DOUBLE_BATTLE_TEST("Healer cures status condition before burn or poison damage is dealt") +{ + KNOWN_FAILING; // According to Bulbapedia, Healer should trigger before status damage and Wobbuffet should live + // Source: https://bulbapedia.bulbagarden.net/wiki/Healer_(Ability)#Effect + u16 status; + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_FROSTBITE; } + PASSES_RANDOMLY(30, 100, RNG_HEALER); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); Status1(status); } + OPPONENT(SPECIES_CHANSEY) { Ability(ABILITY_HEALER); } + } WHEN { + TURN {} + } SCENE { + NOT { + MESSAGE("The opposing Wobbuffet fainted!"); + } + MESSAGE("The opposing Chansey's Healer cured Foe Wobbuffet's problem!"); + } +} + +// Triple battles +TO_DO_BATTLE_TEST("Healer has a 30% chance of curing each of its ally's status conditions independently"); From 83439a7f3ed58bde2545f4acf3b66503d952df4c Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 23 Oct 2024 05:50:36 -0300 Subject: [PATCH 19/50] Removed remaining line breaks from #3240 + Prefix wrap fix (#5556) --- src/battle_message.c | 62 +++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 518cd1c218..74aa26d6dd 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -169,9 +169,9 @@ static const u8 sText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} clamped down o static const u8 sText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by {B_BUFF1}!"); static const u8 sText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed from {B_BUFF1}!"); static const u8 sText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going and crashed!"); -const u8 gText_PkmnShroudedInMist[] = _("{B_ATK_TEAM1} team became\nshrouded in mist!"); +const u8 gText_PkmnShroudedInMist[] = _("{B_ATK_TEAM1} team became shrouded in mist!"); static const u8 sText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected by the mist!"); -const u8 gText_PkmnGettingPumped[] = _("{B_DEF_NAME_WITH_PREFIX} is getting\npumped!"); +const u8 gText_PkmnGettingPumped[] = _("{B_DEF_NAME_WITH_PREFIX} is getting pumped!"); static const u8 sText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} was damaged by the recoil!"); static const u8 sText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected itself!"); static const u8 sText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted by the sandstorm!"); @@ -312,7 +312,7 @@ static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} static const u8 sText_ItSuckedLiquidOoze[] = _("{B_ATK_NAME_WITH_PREFIX} sucked up the liquid ooze!"); static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!"); static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} took the attack!"); //In gen 5+ but without naming the ability -const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1} is preventing switching out\nwith its {B_LAST_ABILITY} Ability!\p"); +const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1} is preventing switching out with its {B_LAST_ABILITY} Ability!\p"); static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevented {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s {B_BUFF1} from working!"); //unused static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} made it ineffective!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY} prevents flinching!"); //not in gen 5+, ability popup @@ -325,7 +325,7 @@ const u8 gText_StatRose[] = _("rose!"); static const u8 sText_StatHarshly[] = _("harshly "); const u8 sText_StatFell[] = _("fell!"); static const u8 sText_AttackersStatRose[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}"); -const u8 gText_DefendersStatRose[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} {B_BUFF2}"); +const u8 gText_DefendersStatRose[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}"); static const u8 sText_UsingItemTheStatOfPkmnRose[] = _("Using {B_LAST_ITEM}, the {B_BUFF1} of {B_SCR_ACTIVE_NAME_WITH_PREFIX2} {B_BUFF2}"); //todo: update this, will require code changes static const u8 sText_AttackersStatFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}"); static const u8 sText_DefendersStatFell[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}"); @@ -581,31 +581,31 @@ static const u8 sText_PkmnSurroundedWithVeilOfWater[] = _("{B_ATK_NAME_WITH_PREF static const u8 sText_PkmnLevitatedOnElectromagnetism[] = _("{B_ATK_NAME_WITH_PREFIX} levitated with electromagnetism!"); static const u8 sText_PkmnTwistedDimensions[] = _("{B_ATK_NAME_WITH_PREFIX} twisted the dimensions!"); static const u8 sText_DimensionsWereTwisted[] = _("The dimensions were twisted!"); -static const u8 sText_PointedStonesFloat[] =_("Pointed stones float in the air\naround {B_DEF_TEAM2} team!"); -static const u8 sText_CloakedInMysticalMoonlight[] =_("{B_ATK_NAME_WITH_PREFIX} became\ncloaked in mystical moonlight!"); -static const u8 sText_TrappedBySwirlingMagma[] =_("{B_DEF_NAME_WITH_PREFIX} became\ntrapped by swirling magma!"); -static const u8 sText_VanishedInstantly[] =_("{B_ATK_NAME_WITH_PREFIX} vanished\ninstantly!"); -static const u8 sText_ProtectedTeam[] =_("{B_CURRENT_MOVE} protected\n{B_ATK_TEAM2} team!"); -static const u8 sText_SharedItsGuard[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\nguard with the target!"); -static const u8 sText_SharedItsPower[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\npower with the target!"); -static const u8 sText_SwapsDefAndSpDefOfAllPkmn[] =_("It created a bizarre area in which\nDefense and Sp. Def stats are swapped!"); -static const u8 sText_BizzareAreaCreated[] =_("A bizarre area was created in which\nDefense and Sp. Def stats are swapped!"); +static const u8 sText_PointedStonesFloat[] =_("Pointed stones float in the air around {B_DEF_TEAM2} team!"); +static const u8 sText_CloakedInMysticalMoonlight[] =_("{B_ATK_NAME_WITH_PREFIX} became cloaked in mystical moonlight!"); +static const u8 sText_TrappedBySwirlingMagma[] =_("{B_DEF_NAME_WITH_PREFIX} became trapped by swirling magma!"); +static const u8 sText_VanishedInstantly[] =_("{B_ATK_NAME_WITH_PREFIX} vanished instantly!"); +static const u8 sText_ProtectedTeam[] =_("{B_CURRENT_MOVE} protected {B_ATK_TEAM2} team!"); +static const u8 sText_SharedItsGuard[] =_("{B_ATK_NAME_WITH_PREFIX} shared its guard with the target!"); +static const u8 sText_SharedItsPower[] =_("{B_ATK_NAME_WITH_PREFIX} shared its power with the target!"); +static const u8 sText_SwapsDefAndSpDefOfAllPkmn[] =_("It created a bizarre area in which Defense and Sp. Def stats are swapped!"); +static const u8 sText_BizzareAreaCreated[] =_("A bizarre area was created in which Defense and Sp. Def stats are swapped!"); static const u8 sText_BecameNimble[] =_("{B_ATK_NAME_WITH_PREFIX} became nimble!"); -static const u8 sText_HurledIntoTheAir[] =_("{B_DEF_NAME_WITH_PREFIX} was hurled\ninto the air!"); -static const u8 sText_HeldItemsLoseEffects[] =_("It created a bizarre area in which\nPokémon's held items lose their effects!"); -static const u8 sText_BizarreArenaCreated[] =_("A bizarre area was created in which\nPokémon's held items lose their effects!"); -static const u8 sText_FellStraightDown[] =_("{B_DEF_NAME_WITH_PREFIX} fell\nstraight down!"); -static const u8 sText_TargetChangedType[] =_("{B_DEF_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!"); -static const u8 sText_PkmnAcquiredSimple[] =_("{B_DEF_NAME_WITH_PREFIX} acquired\nSimple!"); //shouldn't directly use the name -static const u8 sText_KindOffer[] =_("{B_DEF_NAME_WITH_PREFIX}\ntook the kind offer!"); -static const u8 sText_ResetsTargetsStatLevels[] =_("{B_DEF_NAME_WITH_PREFIX}'s stat changes\nwere removed!"); -static const u8 sText_AllySwitchPosition[] =_("{B_ATK_NAME_WITH_PREFIX} and\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2} switched places!"); +static const u8 sText_HurledIntoTheAir[] =_("{B_DEF_NAME_WITH_PREFIX} was hurled into the air!"); +static const u8 sText_HeldItemsLoseEffects[] =_("It created a bizarre area in which Pokémon's held items lose their effects!"); +static const u8 sText_BizarreArenaCreated[] =_("A bizarre area was created in which Pokémon's held items lose their effects!"); +static const u8 sText_FellStraightDown[] =_("{B_DEF_NAME_WITH_PREFIX} fell straight down!"); +static const u8 sText_TargetChangedType[] =_("{B_DEF_NAME_WITH_PREFIX} transformed into the {B_BUFF1} type!"); +static const u8 sText_PkmnAcquiredSimple[] =_("{B_DEF_NAME_WITH_PREFIX} acquired Simple!"); //shouldn't directly use the name +static const u8 sText_KindOffer[] =_("{B_DEF_NAME_WITH_PREFIX} took the kind offer!"); +static const u8 sText_ResetsTargetsStatLevels[] =_("{B_DEF_NAME_WITH_PREFIX}'s stat changes were removed!"); +static const u8 sText_AllySwitchPosition[] =_("{B_ATK_NAME_WITH_PREFIX} and {B_SCR_ACTIVE_NAME_WITH_PREFIX2} switched places!"); static const u8 sText_RestoreTargetsHealth[] =_("{B_DEF_NAME_WITH_PREFIX}'s HP was restored!"); -static const u8 sText_TookPkmnIntoTheSky[] =_("{B_ATK_NAME_WITH_PREFIX} took\n{B_DEF_NAME_WITH_PREFIX2} into the sky!"); -static const u8 sText_FreedFromSkyDrop[] =_("{B_DEF_NAME_WITH_PREFIX} was freed\nfrom the Sky Drop!"); -static const u8 sText_PostponeTargetMove[] =_("{B_DEF_NAME_WITH_PREFIX}'s move\nwas postponed!"); -static const u8 sText_ReflectTargetsType[] =_("{B_ATK_NAME_WITH_PREFIX} became the\nsame type as {B_DEF_NAME_WITH_PREFIX2}!"); -static const u8 sText_TransferHeldItem[] =_("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX2}"); +static const u8 sText_TookPkmnIntoTheSky[] =_("{B_ATK_NAME_WITH_PREFIX} took {B_DEF_NAME_WITH_PREFIX2} into the sky!"); +static const u8 sText_FreedFromSkyDrop[] =_("{B_DEF_NAME_WITH_PREFIX} was freed from the Sky Drop!"); +static const u8 sText_PostponeTargetMove[] =_("{B_DEF_NAME_WITH_PREFIX}'s move was postponed!"); +static const u8 sText_ReflectTargetsType[] =_("{B_ATK_NAME_WITH_PREFIX} became the same type as {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_TransferHeldItem[] =_("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM} from {B_ATK_NAME_WITH_PREFIX2}"); static const u8 sText_EmbargoEnds[] = _("{B_ATK_NAME_WITH_PREFIX} can use items again!"); static const u8 sText_Electromagnetism[] = _("electromagnetism"); static const u8 sText_BufferEnds[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} wore off!"); @@ -761,7 +761,7 @@ static const u8 sText_StickyBarbTransfer[] = _("The {B_LAST_ITEM} attached itsel static const u8 sText_PkmnBurnHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s burn was cured!"); static const u8 sText_RedCardActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} held up its Red Card against {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_EjectButtonActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is switched out with the {B_LAST_ITEM}!"); -static const u8 sText_AttackerGotOverInfatuation[] =_("{B_ATK_NAME_WITH_PREFIX} got over\nits infatuation!"); +static const u8 sText_AttackerGotOverInfatuation[] =_("{B_ATK_NAME_WITH_PREFIX} got over its infatuation!"); static const u8 sText_TormentedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is no longer tormented!"); static const u8 sText_HealBlockedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is cured of its heal block!"); static const u8 sText_AttackerBecameFullyCharged[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged due to its bond with its trainer!\p"); @@ -3163,7 +3163,8 @@ static void GetBattlerNick(u32 battler, u8 *dst) } \ } \ GetBattlerNick(battler, text); \ - toCpy = text; + toCpy = text; \ + dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize, FALSE); #define HANDLE_NICKNAME_STRING_LOWERCASE(battler) \ if (GetBattlerSide(battler) != B_SIDE_PLAYER) \ @@ -3180,7 +3181,8 @@ static void GetBattlerNick(u32 battler, u8 *dst) } \ } \ GetBattlerNick(battler, text); \ - toCpy = text; + toCpy = text; \ + dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize, FALSE); static const u8 *BattleStringGetOpponentNameByTrainerId(u16 trainerId, u8 *text, u8 multiplayerId, u8 battler) { From f1b639a504934807a7558566388b8945e62ec595 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Wed, 23 Oct 2024 05:46:58 -0400 Subject: [PATCH 20/50] Add basic Steam Engine, Guard Dog Tests (#5569) Co-authored-by: ghoulslash Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- test/battle/ability/guard_dog.c | 28 ++++++++++++++++++++++++++++ test/battle/ability/steam_engine.c | 23 +++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 test/battle/ability/guard_dog.c create mode 100644 test/battle/ability/steam_engine.c diff --git a/test/battle/ability/guard_dog.c b/test/battle/ability/guard_dog.c new file mode 100644 index 0000000000..c4b44417af --- /dev/null +++ b/test/battle/ability/guard_dog.c @@ -0,0 +1,28 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Guard Dog raises Attack when intimidated", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_INTIMIDATE; } + PARAMETRIZE { ability = ABILITY_SHED_SKIN; } + GIVEN { + PLAYER(SPECIES_OKIDOGI) { Ability(ABILITY_GUARD_DOG); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ARBOK) { Ability(ability); } + } WHEN { + TURN { SWITCH(opponent, 1); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + if (ability == ABILITY_INTIMIDATE) + { + ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + ABILITY_POPUP(player, ABILITY_GUARD_DOG); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Okidogi's Attack rose!"); + } + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(1.5), results[0].damage); + } +} diff --git a/test/battle/ability/steam_engine.c b/test/battle/ability/steam_engine.c new file mode 100644 index 0000000000..bda470af2e --- /dev/null +++ b/test/battle/ability/steam_engine.c @@ -0,0 +1,23 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Steam Engine raises speed when hit by a Fire or Water move") +{ + u16 move; + + PARAMETRIZE { move = MOVE_EMBER; } + PARAMETRIZE { move = MOVE_WATER_GUN; } + + GIVEN { + PLAYER(SPECIES_COALOSSAL) { Ability(ABILITY_STEAM_ENGINE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ABILITY_POPUP(player, ABILITY_STEAM_ENGINE); + MESSAGE("Coalossal's Speed drastically rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 6); + } +} From 2a610443ab06bd94808522decfe96fc804af962a Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Wed, 23 Oct 2024 20:09:29 +0100 Subject: [PATCH 21/50] Missing string_util.h include in mini_printf.c --- src/mini_printf.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mini_printf.c b/src/mini_printf.c index 57ae3e58b0..c5b1e09bdc 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -37,6 +37,7 @@ #include "gba/defines.h" #include "config/general.h" #include "constants/characters.h" +#include "string_util.h" #ifndef NDEBUG From b892ad4da62ad3e818e779e4c6804212854fcc67 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Thu, 24 Oct 2024 05:59:49 -0400 Subject: [PATCH 22/50] Shed Skin chance fix (#5558) --- src/battle_util.c | 2 +- test/battle/ability/shed_skin.c | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 2f00f48cf9..079a9dd436 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5019,7 +5019,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_SHED_SKIN: if ((gBattleMons[battler].status1 & STATUS1_ANY) - && (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_SHED_SKIN, 30) : RandomChance(RNG_SHED_SKIN, 1, 3))) + && (B_ABILITY_TRIGGER_CHANCE == GEN_4 ? RandomPercentage(RNG_SHED_SKIN, 30) : RandomChance(RNG_SHED_SKIN, 1, 3))) { ABILITY_HEAL_MON_STATUS: if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON)) diff --git a/test/battle/ability/shed_skin.c b/test/battle/ability/shed_skin.c index d3030b9baf..279da677ea 100644 --- a/test/battle/ability/shed_skin.c +++ b/test/battle/ability/shed_skin.c @@ -1,11 +1,13 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Shed Skin triggers 30% of the time") +SINGLE_BATTLE_TEST("Shed Skin triggers 33% of the time") { - PASSES_RANDOMLY(3, 10, RNG_SHED_SKIN); + if (B_ABILITY_TRIGGER_CHANCE == GEN_4) + PASSES_RANDOMLY(30, 100, RNG_SHED_SKIN); + else + PASSES_RANDOMLY(33, 100, RNG_SHED_SKIN); GIVEN { - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_4); ASSUME(gMovesInfo[MOVE_TACKLE].makesContact); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_ARBOK) { Status1(STATUS1_POISON); Ability(ABILITY_SHED_SKIN); } From be98de71d519f9db00c52290889d3a67116d4cf4 Mon Sep 17 00:00:00 2001 From: GhoulMage Date: Thu, 24 Oct 2024 18:12:31 +0200 Subject: [PATCH 23/50] Fixed damage test (#5574) --- test/battle/move_effect/fixed_damage_arg.c | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 test/battle/move_effect/fixed_damage_arg.c diff --git a/test/battle/move_effect/fixed_damage_arg.c b/test/battle/move_effect/fixed_damage_arg.c new file mode 100644 index 0000000000..6d96b435db --- /dev/null +++ b/test/battle/move_effect/fixed_damage_arg.c @@ -0,0 +1,41 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_SONIC_BOOM].effect == EFFECT_FIXED_DAMAGE_ARG); +} + +SINGLE_BATTLE_TEST("Sonic Boom deals fixed damage", s16 damage) +{ + u16 mon; + PARAMETRIZE { mon = SPECIES_RATTATA; } + PARAMETRIZE { mon = SPECIES_ARON; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_SONIC_BOOM].argument == 20); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(mon); + } WHEN { + TURN { MOVE(player, MOVE_SONIC_BOOM); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SONIC_BOOM, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT(results[0].damage == 20); + EXPECT(results[1].damage == 20); + } +} + +SINGLE_BATTLE_TEST("Sonic Boom doesn't affect ghost types") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GASTLY); + } WHEN { + TURN { MOVE(player, MOVE_SONIC_BOOM); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SONIC_BOOM, player); + MESSAGE("It doesn't affect Foe Gastly…"); + } +} From 7413d107aedb7b3e5dde29cc0e2da228d2639cd3 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Fri, 25 Oct 2024 07:04:42 -0400 Subject: [PATCH 24/50] Should switch refactor to facilitate switch prediction (#5466) Co-authored-by: Martin Griffin --- include/battle.h | 2 +- include/battle_ai_main.h | 1 - include/battle_ai_switch_items.h | 2 +- include/random.h | 7 +- src/battle_ai_main.c | 21 +- src/battle_ai_switch_items.c | 609 +++++++++++-------------------- src/battle_ai_util.c | 34 +- src/battle_main.c | 19 +- src/battle_tv.c | 6 +- test/battle/ai/ai.c | 1 + test/battle/ai/ai_flag_risky.c | 2 +- test/battle/ai/ai_switching.c | 343 ++++++++++++++++- test/test_runner_battle.c | 4 + 13 files changed, 589 insertions(+), 462 deletions(-) diff --git a/include/battle.h b/include/battle.h index 364ee9ecd4..d45e6037c3 100644 --- a/include/battle.h +++ b/include/battle.h @@ -361,7 +361,7 @@ struct AiLogicData u16 items[MAX_BATTLERS_COUNT]; u16 holdEffects[MAX_BATTLERS_COUNT]; u8 holdEffectParams[MAX_BATTLERS_COUNT]; - u16 predictedMoves[MAX_BATTLERS_COUNT]; + u16 lastUsedMove[MAX_BATTLERS_COUNT]; u8 hpPercents[MAX_BATTLERS_COUNT]; u16 partnerMove; u16 speedStats[MAX_BATTLERS_COUNT]; // Speed stats for all battles, calculated only once, same way as damages diff --git a/include/battle_ai_main.h b/include/battle_ai_main.h index 2f16fe28ff..3617be910f 100644 --- a/include/battle_ai_main.h +++ b/include/battle_ai_main.h @@ -95,7 +95,6 @@ typedef s32 (*AiScoreFunc)(u32, u32, u32, s32); return score; \ } -u32 ComputeBattleAiScores(u32 battler); void BattleAI_SetupItems(void); void BattleAI_SetupFlags(void); void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler); diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h index 3c70132afe..28eb318b2f 100644 --- a/include/battle_ai_switch_items.h +++ b/include/battle_ai_switch_items.h @@ -4,7 +4,7 @@ void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId); void AI_TrySwitchOrUseItem(u32 battler); u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd); -bool32 ShouldSwitch(u32 battler, bool32 emitResult); +bool32 ShouldSwitch(u32 battler); bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2); #endif // GUARD_BATTLE_AI_SWITCH_ITEMS_H diff --git a/include/random.h b/include/random.h index bdfbe95181..2409a1a883 100644 --- a/include/random.h +++ b/include/random.h @@ -162,11 +162,16 @@ enum RandomTag RNG_FICKLE_BEAM, RNG_AI_ABILITY, RNG_AI_SWITCH_HASBADODDS, - RNG_AI_SWITCH_WONDER_GUARD, RNG_AI_SWITCH_BADLY_POISONED, RNG_AI_SWITCH_CURSED, RNG_AI_SWITCH_NIGHTMARE, RNG_AI_SWITCH_SEEDED, + RNG_AI_SWITCH_ABSORBING, + RNG_AI_SWITCH_NATURAL_CURE, + RNG_AI_SWITCH_REGENERATOR, + RNG_AI_SWITCH_ENCORE, + RNG_AI_SWITCH_STATS_LOWERED, + RNG_AI_SWITCH_SE_DEFENSIVE, RNG_SHELL_SIDE_ARM, RNG_RANDOM_TARGET, RNG_HEALER, diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index f69a8640f8..3ffcecd996 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -232,7 +232,6 @@ void BattleAI_SetupFlags(void) } } -// sBattler_AI set in ComputeBattleAiScores void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler) { s32 i; @@ -287,14 +286,6 @@ u32 BattleAI_ChooseMoveOrAction(void) return ret; } -// damages/other info computed in GetAIDataAndCalcDmg -u32 ComputeBattleAiScores(u32 battler) -{ - sBattler_AI = battler; - BattleAI_SetupAIData(0xF, sBattler_AI); - return BattleAI_ChooseMoveOrAction(); -} - static void CopyBattlerDataToAIParty(u32 bPosition, u32 side) { u32 battler = GetBattlerAtPosition(bPosition); @@ -397,7 +388,7 @@ void SetBattlerAiData(u32 battler, struct AiLogicData *aiData) aiData->items[battler] = gBattleMons[battler].item; holdEffect = aiData->holdEffects[battler] = AI_DecideHoldEffectForTurn(battler); aiData->holdEffectParams[battler] = GetBattlerHoldEffectParam(battler); - aiData->predictedMoves[battler] = gLastMoves[battler]; + aiData->lastUsedMove[battler] = gLastMoves[battler]; aiData->hpPercents[battler] = GetHealthPercentage(battler); aiData->moveLimitations[battler] = CheckMoveLimitations(battler, 0, MOVE_LIMITATIONS_ALL); aiData->speedStats[battler] = GetBattlerTotalSpeedStatArgs(battler, ability, holdEffect); @@ -729,7 +720,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) bool32 isDoubleBattle = IsValidDoubleBattle(battlerAtk); u32 i; u32 weather; - u32 predictedMove = aiData->predictedMoves[battlerDef]; + u32 predictedMove = aiData->lastUsedMove[battlerDef]; if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) return score; @@ -2661,7 +2652,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) bool32 partnerProtecting = (gMovesInfo[aiData->partnerMove].effect == EFFECT_PROTECT); bool32 attackerHasBadAbility = (gAbilitiesInfo[aiData->abilities[battlerAtk]].aiRating < 0); bool32 partnerHasBadAbility = (gAbilitiesInfo[atkPartnerAbility].aiRating < 0); - u32 predictedMove = aiData->predictedMoves[battlerDef]; + u32 predictedMove = aiData->lastUsedMove[battlerDef]; SetTypeBeforeUsingMove(move, battlerAtk); moveType = GetMoveType(move); @@ -3195,7 +3186,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) u32 effectiveness = aiData->effectiveness[battlerAtk][battlerDef][movesetIndex]; s32 score = 0; - u32 predictedMove = aiData->predictedMoves[battlerDef]; + u32 predictedMove = aiData->lastUsedMove[battlerDef]; u32 predictedMoveSlot = GetMoveSlot(GetMovesArray(battlerDef), predictedMove); bool32 isDoubleBattle = IsValidDoubleBattle(battlerAtk); u32 i; @@ -4369,7 +4360,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_MAGNET_RISE: if (IsBattlerGrounded(battlerAtk) && HasDamagingMoveOfType(battlerDef, TYPE_ELECTRIC) - && !(AI_GetTypeEffectiveness(MOVE_EARTHQUAKE, battlerDef, battlerAtk) == AI_EFFECTIVENESS_x0)) // Doesn't resist ground move + && !(AI_GetMoveEffectiveness(MOVE_EARTHQUAKE, battlerDef, battlerAtk) == AI_EFFECTIVENESS_x0)) // Doesn't resist ground move { if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker goes first { @@ -4387,7 +4378,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_CAMOUFLAGE: if (predictedMove != MOVE_NONE && AI_IsFaster(battlerAtk, battlerDef, move) // Attacker goes first - && !IS_MOVE_STATUS(move) && AI_GetTypeEffectiveness(predictedMove, battlerDef, battlerAtk) != AI_EFFECTIVENESS_x0) + && !IS_MOVE_STATUS(move) && AI_GetMoveEffectiveness(predictedMove, battlerDef, battlerAtk) != AI_EFFECTIVENESS_x0) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_TOXIC_THREAD: diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index c80b531d55..125f488589 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -23,7 +23,7 @@ // this file's functions static bool32 HasSuperEffectiveMoveAgainstOpponents(u32 battler, bool32 noRng); -static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 moduloPercent, bool32 emitResult); +static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 moduloPercent); static bool32 ShouldUseItem(u32 battler); static bool32 AiExpectsToFaintPlayer(u32 battler); static bool32 AI_ShouldHeal(u32 battler, u32 healAmount); @@ -65,30 +65,16 @@ void GetAIPartyIndexes(u32 battler, s32 *firstId, s32 *lastId) } } -bool32 IsSwitchinIdValid(u32 battler, u32 switchinId) +static inline bool32 SetSwitchinAndSwitch(u32 battler, u32 switchinId) { - if (IsDoubleBattle()) - { - u32 partner = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerAtPosition(battler))); - // Edge case: See if partner already chose to switch into the same mon - if (switchinId == PARTY_SIZE) // Generic switch - { - if ((AI_DATA->shouldSwitch & (1u << partner)) && AI_DATA->monToSwitchInId[partner] == AI_DATA->mostSuitableMonId[battler]) - return FALSE; - } - else - { - if ((AI_DATA->shouldSwitch & (1u << partner)) && AI_DATA->monToSwitchInId[partner] == switchinId) - return FALSE; - } - } + gBattleStruct->AI_monToSwitchIntoId[battler] = switchinId; return TRUE; } // Note that as many return statements as possible are INTENTIONALLY put after all of the loops; // the function can take a max of about 0.06s to run, and this prevents the player from identifying // whether the mon will switch or not by seeing how long the delay is before they select a move -static bool32 HasBadOdds(u32 battler, bool32 emitResult) +static bool32 ShouldSwitchIfHasBadOdds(u32 battler) { //Variable initialization u8 opposingPosition, atkType1, atkType2, defType1, defType2, effectiveness; @@ -136,7 +122,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) if (gMovesInfo[aiMove].power != 0) { // Check if mon has a super effective move - if (AI_GetTypeEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0)) + if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) hasSuperEffectiveMove = TRUE; // Get maximum damage mon can deal @@ -204,13 +190,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) return FALSE; // Switch mon out - gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; - } + return SetSwitchinAndSwitch(battler, PARTY_SIZE); } // General bad type matchups have more wiggle room @@ -230,88 +210,61 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) return FALSE; // Switch mon out - gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; - } + return SetSwitchinAndSwitch(battler, PARTY_SIZE); } } return FALSE; } -static bool32 ShouldSwitchIfAllMovesBad(u32 battler, bool32 emitResult) +static bool32 ShouldSwitchIfTruant(u32 battler) { - u32 battlerIndex, moveIndex; - bool32 switchOut = FALSE; - - // Consider switching if all moves are worthless to use. - if (GetTotalBaseStat(gBattleMons[battler].species) >= 310 // Mon is not weak. - && gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2) // Mon has more than 50% of its HP - { - s32 cap = AI_THINKING_STRUCT->aiFlags[battler] & (AI_FLAG_CHECK_VIABILITY) ? 95 : 93; - if (IsDoubleBattle()) - { - for (battlerIndex = 0; battlerIndex < MAX_BATTLERS_COUNT; battlerIndex++) - { - if (battlerIndex != battler && IsBattlerAlive(battlerIndex)) - { - for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) - { - if (gBattleStruct->aiFinalScore[battler][battlerIndex][moveIndex] > cap) - break; - } - if (moveIndex != MAX_MON_MOVES) - break; - } - } - if (battlerIndex == MAX_BATTLERS_COUNT && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE) - switchOut = TRUE; - } - else - { - for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) - { - if (AI_THINKING_STRUCT->score[moveIndex] > cap) - break; - } - - if (moveIndex == MAX_MON_MOVES && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE) - switchOut = TRUE; - } - } - - // Consider switching if your mon with truant is bodied by Protect spam. - // Or is using a double turn semi invulnerable move(such as Fly) and is faster. + // Switch if mon with truant is bodied by Protect or invulnerability spam if (AI_DATA->abilities[battler] == ABILITY_TRUANT && IsTruantMonVulnerable(battler, gBattlerTarget) && gDisableStructs[battler].truantCounter && gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2 && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE) { - switchOut = TRUE; - } - - if (switchOut) - { - // Switch mon out - gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; - } + return SetSwitchinAndSwitch(battler, PARTY_SIZE); } return FALSE; } -static bool32 ShouldSwitchIfWonderGuard(u32 battler, bool32 emitResult) +static bool32 ShouldSwitchIfAllMovesBad(u32 battler) { - u8 opposingPosition; - u8 opposingBattler; + u32 moveIndex; + u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + u32 aiMove; + + // Switch if no moves affect opponents + if (IsDoubleBattle()) + { + u32 opposingPartner = GetBattlerAtPosition(BATTLE_PARTNER(opposingBattler)); + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) + { + aiMove = gBattleMons[battler].moves[moveIndex]; + if ((AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) > AI_EFFECTIVENESS_x0 + || AI_GetMoveEffectiveness(aiMove, battler, opposingPartner) > AI_EFFECTIVENESS_x0) + && aiMove != MOVE_NONE) + return FALSE; + } + } + else + { + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) + { + aiMove = gBattleMons[battler].moves[moveIndex]; + if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) > AI_EFFECTIVENESS_x0 && aiMove != MOVE_NONE) + return FALSE; + } + } + + return SetSwitchinAndSwitch(battler, PARTY_SIZE); +} + +static bool32 FindMonThatHitsWonderGuard(u32 battler) +{ + u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); s32 i, j; s32 firstId; s32 lastId; // + 1 @@ -321,29 +274,23 @@ static bool32 ShouldSwitchIfWonderGuard(u32 battler, bool32 emitResult) if (IsDoubleBattle()) return FALSE; - opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battler)); - - if (AI_DATA->abilities[GetBattlerAtPosition(opposingPosition)] != ABILITY_WONDER_GUARD) + if (AI_DATA->abilities[opposingBattler] != ABILITY_WONDER_GUARD) return FALSE; // Check if Pokémon has a super effective move. - for (opposingBattler = GetBattlerAtPosition(opposingPosition), i = 0; i < MAX_MON_MOVES; i++) + for (i = 0; i < MAX_MON_MOVES; i++) { move = gBattleMons[battler].moves[i]; if (move != MOVE_NONE) { - if (AI_GetTypeEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0)) + if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) return FALSE; } } // Get party information. GetAIPartyIndexes(battler, &firstId, &lastId); - - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(battler); // Find a Pokémon in the party that has a super effective move. for (i = firstId; i < lastId; i++) @@ -355,22 +302,14 @@ static bool32 ShouldSwitchIfWonderGuard(u32 battler, bool32 emitResult) if (IsAceMon(battler, i)) continue; - for (opposingBattler = GetBattlerAtPosition(opposingPosition), j = 0; j < MAX_MON_MOVES; j++) + for (j = 0; j < MAX_MON_MOVES; j++) { move = GetMonData(&party[i], MON_DATA_MOVE1 + j); if (move != MOVE_NONE) { - if (AI_GetTypeEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0) && (RandomPercentage(RNG_AI_SWITCH_WONDER_GUARD, 66) || ((AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_SWITCHING)))) - { - // We found a mon. - gBattleStruct->AI_monToSwitchIntoId[battler] = i; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); - return TRUE; - } - } + // Found a mon + if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) + return SetSwitchinAndSwitch(battler, i); } } } @@ -378,23 +317,24 @@ static bool32 ShouldSwitchIfWonderGuard(u32 battler, bool32 emitResult) return FALSE; // There is not a single Pokémon in the party that has a super effective move against a mon with Wonder Guard. } -static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler, bool32 emitResult) +static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler) { u8 battlerIn1, battlerIn2; u8 numAbsorbingAbilities = 0; u16 absorbingTypeAbilities[3]; // Array size is maximum number of absorbing abilities for a single type s32 firstId; - s32 lastId; // + 1 + s32 lastId; struct Pokemon *party; + u16 monAbility; + u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + u32 incomingMove = AI_DATA->lastUsedMove[opposingBattler]; + u32 predictedMove = incomingMove; // Update for move prediction + bool32 isOpposingBattlerChargingOrInvulnerable = (IsSemiInvulnerable(opposingBattler, incomingMove) || IsTwoTurnNotSemiInvulnerableMove(opposingBattler, incomingMove)); s32 i, j; - if (HasSuperEffectiveMoveAgainstOpponents(battler, TRUE) && Random() % 3 != 0) + if (!(AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_SWITCHING)) return FALSE; - if (gLastLandedMoves[battler] == MOVE_NONE) - return FALSE; - if (gLastLandedMoves[battler] == MOVE_UNAVAILABLE) - return FALSE; - if (IS_MOVE_STATUS(gLastLandedMoves[battler])) + if (HasSuperEffectiveMoveAgainstOpponents(battler, TRUE) && RandomPercentage(RNG_AI_SWITCH_ABSORBING, 66)) return FALSE; if (IsDoubleBattle()) @@ -412,29 +352,29 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler, bool32 emitResult) } // Create an array of possible absorb abilities so the AI considers all of them - if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_FIRE) + if (gMovesInfo[predictedMove].type == TYPE_FIRE) { absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_FLASH_FIRE; } - else if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_WATER) + else if (gMovesInfo[predictedMove].type == TYPE_WATER || (isOpposingBattlerChargingOrInvulnerable && gMovesInfo[incomingMove].type == TYPE_WATER)) { absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_WATER_ABSORB; absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_DRY_SKIN; if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_STORM_DRAIN; } - else if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_ELECTRIC) + else if (gMovesInfo[predictedMove].type == TYPE_ELECTRIC || (isOpposingBattlerChargingOrInvulnerable && gMovesInfo[incomingMove].type == TYPE_ELECTRIC)) { absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_VOLT_ABSORB; absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_MOTOR_DRIVE; if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_LIGHTNING_ROD; } - else if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_GRASS) + else if (gMovesInfo[predictedMove].type == TYPE_GRASS || (isOpposingBattlerChargingOrInvulnerable && gMovesInfo[incomingMove].type == TYPE_GRASS)) { absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_SAP_SIPPER; } - else if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_GROUND) + else if (gMovesInfo[predictedMove].type == TYPE_GROUND || (isOpposingBattlerChargingOrInvulnerable && gMovesInfo[incomingMove].type == TYPE_GROUND)) { absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_EARTH_EATER; } @@ -446,21 +386,16 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler, bool32 emitResult) // Check current mon for all absorbing abilities for (i = 0; i < numAbsorbingAbilities; i++) { - if (AI_DATA->abilities[battler] == absorbingTypeAbilities[i]) + if (gBattleMons[battler].ability == absorbingTypeAbilities[i]) return FALSE; } + // Check party for mon with ability that absorbs move GetAIPartyIndexes(battler, &firstId, &lastId); - - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(battler); for (i = firstId; i < lastId; i++) { - u16 monAbility; - if (!IsValidForBattle(&party[i])) continue; if (i == gBattlerPartyIndexes[battlerIn1]) @@ -478,23 +413,30 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler, bool32 emitResult) for (j = 0; j < numAbsorbingAbilities; j++) { - if (absorbingTypeAbilities[j] == monAbility && Random() & 1) - { - // we found a mon. - gBattleStruct->AI_monToSwitchIntoId[battler] = i; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; - } - } + // Found a mon + if (absorbingTypeAbilities[j] == monAbility) + return SetSwitchinAndSwitch(battler, i); } } return FALSE; } -static bool32 FindMonThatTrapsOpponent(u32 battler, bool32 emitResult) +static bool32 ShouldSwitchIfOpponentChargingOrInvulnerable(u32 battler) +{ + u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + u32 incomingMove = AI_DATA->lastUsedMove[opposingBattler]; + bool32 isOpposingBattlerChargingOrInvulnerable = (IsSemiInvulnerable(opposingBattler, incomingMove) || IsTwoTurnNotSemiInvulnerableMove(opposingBattler, incomingMove)); + + if (IsDoubleBattle() || !(AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_SWITCHING)) + return FALSE; + + if (isOpposingBattlerChargingOrInvulnerable && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE) + return SetSwitchinAndSwitch(battler, PARTY_SIZE); + + return FALSE; +} + +static bool32 ShouldSwitchIfTrapperInParty(u32 battler) { s32 firstId; s32 lastId; @@ -513,45 +455,33 @@ static bool32 FindMonThatTrapsOpponent(u32 battler, bool32 emitResult) // Check party for mon with ability that traps opponent GetAIPartyIndexes(battler, &firstId, &lastId); - - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(battler); for (i = firstId; i < lastId; i++) { + if (IsAceMon(battler, i)) + return FALSE; + monAbility = GetMonAbility(&party[i]); + if (CanAbilityTrapOpponent(monAbility, opposingBattler)) { - if (i == AI_DATA->mostSuitableMonId[battler]) // If mon in slot i is the most suitable switchin candidate, then it's a trapper than wins 1v1 - { - gBattleStruct->AI_monToSwitchIntoId[battler] = i; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; - } - } + // If mon in slot i is the most suitable switchin candidate, then it's a trapper than wins 1v1 + if (i == AI_DATA->mostSuitableMonId[battler]) + return SetSwitchinAndSwitch(battler, PARTY_SIZE); } } return FALSE; } -static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult) +static bool32 ShouldSwitchIfBadlyStatused(u32 battler) { bool32 switchMon = FALSE; - bool32 monIdChosen = FALSE; // Id of the mon to switch into. u16 monAbility = AI_DATA->abilities[battler]; u16 holdEffect = AI_DATA->holdEffects[battler]; u8 opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battler)); u8 opposingBattler = GetBattlerAtPosition(opposingPosition); bool32 hasStatRaised = AnyStatIsRaised(battler); - s32 firstId; - s32 lastId; - s32 i; - struct Pokemon *party; //Perish Song if (gStatuses3[battler] & STATUS3_PERISH_SONG @@ -568,73 +498,24 @@ static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult) { switchMon = TRUE; - //Double Battles - //Check if partner can prevent sleep - if (IsDoubleBattle()) - { - if (IsBattlerAlive(BATTLE_PARTNER(battler)) - && (GetAIChosenMove(BATTLE_PARTNER(battler)) == MOVE_UPROAR) - ) - switchMon = FALSE; - - if (IsBattlerAlive(BATTLE_PARTNER(battler)) - && (gMovesInfo[AI_DATA->partnerMove].effect == EFFECT_MISTY_TERRAIN - || gMovesInfo[AI_DATA->partnerMove].effect == EFFECT_ELECTRIC_TERRAIN) - && IsBattlerGrounded(battler) - ) - switchMon = FALSE; - - if (*(gBattleStruct->AI_monToSwitchIntoId + BATTLE_PARTNER(battler)) != PARTY_SIZE) //Partner is switching - { - GetAIPartyIndexes(battler, &firstId, &lastId); - - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - party = gPlayerParty; - - for (i = firstId; i < lastId; i++) - { - if (IsAceMon(battler, i)) - continue; - - //Look for mon in party that is able to be switched into and has ability that sets terrain - if (IsValidForBattle(&party[i]) - && i != gBattlerPartyIndexes[battler] - && i != gBattlerPartyIndexes[BATTLE_PARTNER(battler)] - && IsBattlerGrounded(battler) - && (GetMonAbility(&party[i]) == ABILITY_MISTY_SURGE - || GetMonAbility(&party[i]) == ABILITY_ELECTRIC_SURGE)) //Ally has Misty or Electric Surge - { - *(gBattleStruct->AI_monToSwitchIntoId + BATTLE_PARTNER(battler)) = i; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); - switchMon = FALSE; - } - break; - } - } - } - } - - //Check if Active Pokemon can KO opponent instead of switching - //Will still fall asleep, but take out opposing Pokemon first + // Check if Active Pokemon can KO opponent instead of switching + // Will still fall asleep, but take out opposing Pokemon first if (AiExpectsToFaintPlayer(battler)) switchMon = FALSE; - //Checks to see if active Pokemon can do something against sleep + // Checks to see if active Pokemon can do something against sleep if ((monAbility == ABILITY_NATURAL_CURE || monAbility == ABILITY_SHED_SKIN || monAbility == ABILITY_EARLY_BIRD) || holdEffect == (HOLD_EFFECT_CURE_SLP | HOLD_EFFECT_CURE_STATUS) || HasMove(battler, MOVE_SLEEP_TALK) - || (HasMoveEffect(battler, MOVE_SNORE) && AI_GetTypeEffectiveness(MOVE_SNORE, battler, opposingBattler) >= UQ_4_12(1.0)) + || (HasMoveEffect(battler, MOVE_SNORE) && AI_GetMoveEffectiveness(MOVE_SNORE, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) || (IsBattlerGrounded(battler) && (HasMove(battler, MOVE_MISTY_TERRAIN) || HasMove(battler, MOVE_ELECTRIC_TERRAIN))) ) switchMon = FALSE; - //Check if Active Pokemon evasion boosted and might be able to dodge until awake + // Check if Active Pokemon evasion boosted and might be able to dodge until awake if (gBattleMons[battler].statStages[STAT_EVASION] > (DEFAULT_STAT_STAGE + 3) && AI_DATA->abilities[opposingBattler] != ABILITY_UNAWARE && AI_DATA->abilities[opposingBattler] != ABILITY_KEEN_EYE @@ -643,16 +524,16 @@ static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult) && !(gBattleMons[battler].status2 & STATUS2_FORESIGHT) && !(gStatuses3[battler] & STATUS3_MIRACLE_EYED)) switchMon = FALSE; - } - //Secondary Damage + // Secondary Damage if (monAbility != ABILITY_MAGIC_GUARD && !AiExpectsToFaintPlayer(battler)) { //Toxic if (((gBattleMons[battler].status1 & STATUS1_TOXIC_COUNTER) >= STATUS1_TOXIC_TURN(2)) && gBattleMons[battler].hp >= (gBattleMons[battler].maxHP / 3) + && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_BADLY_POISONED, 20) : RandomPercentage(RNG_AI_SWITCH_BADLY_POISONED, 50))) switchMon = TRUE; @@ -672,85 +553,51 @@ static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult) switchMon = TRUE; } - //Infatuation + // Infatuation if (gBattleMons[battler].status2 & STATUS2_INFATUATION && !AiExpectsToFaintPlayer(battler)) switchMon = TRUE; - - //Todo - //Pass Wish Heal - - //Semi-Invulnerable - if (gStatuses3[opposingBattler] & STATUS3_SEMI_INVULNERABLE) - { - if (FindMonThatAbsorbsOpponentsMove(battler, FALSE)) // Switch if absorber found. Note: FindMonThatAbsorbsOpponentsMove already provides id of the mon to switch into to gBattleStruct->AI_monToSwitchIntoId. - switchMon = TRUE, monIdChosen = TRUE; - if (!AI_OpponentCanFaintAiWithMod(battler, 0) - && hasStatRaised) - switchMon = FALSE; - if (AiExpectsToFaintPlayer(battler) - && AI_IsSlower(battler, opposingBattler, 0) - && !AI_OpponentCanFaintAiWithMod(battler, 0)) - switchMon = FALSE; - } } if (switchMon) - { - if (!monIdChosen) - gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); - return TRUE; - } - return FALSE; - } + return SetSwitchinAndSwitch(battler, PARTY_SIZE); else - { return FALSE; - } } -static bool32 ShouldSwitchIfAbilityBenefit(u32 battler, bool32 emitResult) +static bool32 ShouldSwitchIfAbilityBenefit(u32 battler) { - s32 moduloChance = 4; //25% Chance Default - s32 chanceReducer = 1; //No Reduce default. Increase to reduce - - if (AnyStatIsRaised(battler)) - chanceReducer = 5; // Reduce switchout probability by factor of 5 if setup + bool32 hasStatRaised = AnyStatIsRaised(battler); //Check if ability is blocked if (gStatuses3[battler] & STATUS3_GASTRO_ACID - ||IsNeutralizingGasOnField()) + || IsNeutralizingGasOnField()) return FALSE; switch(AI_DATA->abilities[battler]) { case ABILITY_NATURAL_CURE: - moduloChance = 4; //25% //Attempt to cure bad ailment if (gBattleMons[battler].status1 & (STATUS1_SLEEP | STATUS1_FREEZE | STATUS1_TOXIC_POISON) - && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE) + && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE + && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_NATURAL_CURE, 10) : RandomPercentage(RNG_AI_SWITCH_NATURAL_CURE, 66))) break; //Attempt to cure lesser ailment if ((gBattleMons[battler].status1 & STATUS1_ANY) && (gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2) && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE - && Random() % (moduloChance*chanceReducer) == 0) + && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_NATURAL_CURE, 10) : RandomPercentage(RNG_AI_SWITCH_NATURAL_CURE, 25))) break; return FALSE; case ABILITY_REGENERATOR: - moduloChance = 2; //50% //Don't switch if ailment if (gBattleMons[battler].status1 & STATUS1_ANY) return FALSE; if ((gBattleMons[battler].hp <= ((gBattleMons[battler].maxHP * 2) / 3)) && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE - && Random() % (moduloChance*chanceReducer) == 0) + && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_REGENERATOR, 20) : RandomPercentage(RNG_AI_SWITCH_REGENERATOR, 50))) break; return FALSE; @@ -759,14 +606,7 @@ static bool32 ShouldSwitchIfAbilityBenefit(u32 battler, bool32 emitResult) return FALSE; } - gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); - return TRUE; - } - return FALSE; + return SetSwitchinAndSwitch(battler, PARTY_SIZE); } static bool32 HasSuperEffectiveMoveAgainstOpponents(u32 battler, bool32 noRng) @@ -785,7 +625,7 @@ static bool32 HasSuperEffectiveMoveAgainstOpponents(u32 battler, bool32 noRng) if (move == MOVE_NONE) continue; - if (AI_GetTypeEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0)) + if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) { if (noRng) return TRUE; @@ -807,7 +647,7 @@ static bool32 HasSuperEffectiveMoveAgainstOpponents(u32 battler, bool32 noRng) if (move == MOVE_NONE) continue; - if (AI_GetTypeEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0)) + if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) { if (noRng) return TRUE; @@ -834,7 +674,7 @@ static bool32 AreStatsRaised(u32 battler) return (buffedStatsValue > 3); } -static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 moduloPercent, bool32 emitResult) +static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 percentChance) { u32 battlerIn1, battlerIn2; s32 firstId; @@ -843,6 +683,10 @@ static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 modu s32 i, j; u16 move; + // Similar functionality handled more thoroughly by ShouldSwitchIfHasBadOdds + if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_SWITCHING) + return FALSE; + if (gLastLandedMoves[battler] == MOVE_NONE) return FALSE; if (gLastLandedMoves[battler] == MOVE_UNAVAILABLE) @@ -867,11 +711,7 @@ static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 modu } GetAIPartyIndexes(battler, &firstId, &lastId); - - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(battler); for (i = firstId; i < lastId; i++) { @@ -903,16 +743,8 @@ static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 modu if (move == 0) continue; - if (AI_GetTypeEffectiveness(move, battler, battlerIn1) >= UQ_4_12(2.0) && Random() % moduloPercent == 0) - { - gBattleStruct->AI_monToSwitchIntoId[battler] = i; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); - return TRUE; - } - } + if (AI_GetMoveEffectiveness(move, battler, battlerIn1) >= AI_EFFECTIVENESS_x2 && RandomPercentage(RNG_AI_SWITCH_SE_DEFENSIVE, percentChance)) + return SetSwitchinAndSwitch(battler, i); } } } @@ -986,55 +818,49 @@ static bool32 CanMonSurviveHazardSwitchin(u32 battler) return TRUE; } -static bool32 ShouldSwitchIfEncored(u32 battler, bool32 emitResult) +static bool32 ShouldSwitchIfEncored(u32 battler) { + u32 encoredMove = gDisableStructs[battler].encoredMove; + u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); + // Only use this if AI_FLAG_SMART_SWITCHING is set for the trainer if (!(AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_SWITCHING)) return FALSE; - // If not Encored or if no good switchin, don't switch - if (gDisableStructs[battler].encoredMove == MOVE_NONE || AI_DATA->mostSuitableMonId[battler] == PARTY_SIZE) + // If not Encore'd don't switch + if (encoredMove == MOVE_NONE) return FALSE; - // Otherwise 50% chance to switch out - if (Random() & 1) - { - gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; - } - } + // Switch out if status move + if (gMovesInfo[encoredMove].category == DAMAGE_CATEGORY_STATUS) + return SetSwitchinAndSwitch(battler, PARTY_SIZE); + + // Stay in if effective move + else if (AI_GetMoveEffectiveness(encoredMove, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) + return FALSE; + + // Switch out 50% of the time otherwise + else if (RandomPercentage(RNG_AI_SWITCH_ENCORE, 50) && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE) + return SetSwitchinAndSwitch(battler, PARTY_SIZE); return FALSE; } -static bool32 ShouldSwitchIfBadChoiceLock(u32 battler, bool32 emitResult) +static bool32 ShouldSwitchIfBadChoiceLock(u32 battler) { u32 holdEffect = GetBattlerHoldEffect(battler, FALSE); if (HOLD_EFFECT_CHOICE(holdEffect) && gBattleMons[battler].ability != ABILITY_KLUTZ) { if (gMovesInfo[gLastUsedMove].category == DAMAGE_CATEGORY_STATUS) - { - gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; - } - - } + return SetSwitchinAndSwitch(battler, PARTY_SIZE); } return FALSE; } // AI should switch if it's become setup fodder and has something better to switch to -static bool32 AreAttackingStatsLowered(u32 battler, bool32 emitResult) +static bool32 ShouldSwitchIfAttackingStatsLowered(u32 battler) { s8 attackingStage = gBattleMons[battler].statStages[STAT_ATK]; s8 spAttackingStage = gBattleMons[battler].statStages[STAT_SPATK]; @@ -1052,28 +878,12 @@ static bool32 AreAttackingStatsLowered(u32 battler, bool32 emitResult) // 50% chance if attack at -2 and have a good candidate mon else if (attackingStage == DEFAULT_STAT_STAGE - 2) { - if (AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE && (Random() & 1)) - { - gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; - } - } + if (AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE && RandomPercentage(RNG_AI_SWITCH_STATS_LOWERED, 50)) + return SetSwitchinAndSwitch(battler, PARTY_SIZE); } // If at -3 or worse, switch out regardless else if (attackingStage < DEFAULT_STAT_STAGE - 2) - { - gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; - } - } + return SetSwitchinAndSwitch(battler, PARTY_SIZE); } // Special attacker @@ -1085,33 +895,17 @@ static bool32 AreAttackingStatsLowered(u32 battler, bool32 emitResult) // 50% chance if attack at -2 and have a good candidate mon else if (spAttackingStage == DEFAULT_STAT_STAGE - 2) { - if (AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE && (Random() & 1)) - { - gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; - } - } + if (AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE && RandomPercentage(RNG_AI_SWITCH_STATS_LOWERED, 50)) + return SetSwitchinAndSwitch(battler, PARTY_SIZE); } // If at -3 or worse, switch out regardless else if (spAttackingStage < DEFAULT_STAT_STAGE - 2) - { - gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) - { - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; - } - } + return SetSwitchinAndSwitch(battler, PARTY_SIZE); } return FALSE; } -bool32 ShouldSwitch(u32 battler, bool32 emitResult) +bool32 ShouldSwitch(u32 battler) { u32 battlerIn1, battlerIn2; s32 firstId; @@ -1152,11 +946,7 @@ bool32 ShouldSwitch(u32 battler, bool32 emitResult) } GetAIPartyIndexes(battler, &firstId, &lastId); - - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(battler); for (i = firstId; i < lastId; i++) { @@ -1187,51 +977,82 @@ bool32 ShouldSwitch(u32 battler, bool32 emitResult) return FALSE; } - //NOTE: The sequence of the below functions matter! Do not change unless you have carefully considered the outcome. - //Since the order is sequencial, and some of these functions prompt switch to specific party members. + // NOTE: The sequence of the below functions matter! Do not change unless you have carefully considered the outcome. + // Since the order is sequencial, and some of these functions prompt switch to specific party members. - //These Functions can prompt switch to specific party members - if (ShouldSwitchIfWonderGuard(battler, emitResult)) + // These Functions can prompt switch to specific party members that override GetMostSuitableMonToSwitchInto + if (FindMonThatHitsWonderGuard(battler)) return TRUE; - if (ShouldSwitchIfGameStatePrompt(battler, emitResult)) - return TRUE; - if (FindMonThatTrapsOpponent(battler, emitResult)) - return TRUE; - if (FindMonThatAbsorbsOpponentsMove(battler, emitResult)) + if (FindMonThatAbsorbsOpponentsMove(battler)) return TRUE; - //These Functions can prompt switch to generic pary members + // These Functions can prompt switch to party member returned by GetMostSuitableMonToSwitchInto if ((AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_SWITCHING) && (CanMonSurviveHazardSwitchin(battler) == FALSE)) return FALSE; - if (ShouldSwitchIfAllMovesBad(battler, emitResult)) + if (ShouldSwitchIfTrapperInParty(battler)) return TRUE; - if (ShouldSwitchIfAbilityBenefit(battler, emitResult)) + if (ShouldSwitchIfOpponentChargingOrInvulnerable(battler)) return TRUE; - if (HasBadOdds(battler, emitResult)) + if (ShouldSwitchIfTruant(battler)) return TRUE; - if (ShouldSwitchIfEncored(battler, emitResult)) + if (ShouldSwitchIfAllMovesBad(battler)) return TRUE; - if (ShouldSwitchIfBadChoiceLock(battler, emitResult)) + if (ShouldSwitchIfBadlyStatused(battler)) return TRUE; - if (AreAttackingStatsLowered(battler, emitResult)) + if (ShouldSwitchIfAbilityBenefit(battler)) + return TRUE; + if (ShouldSwitchIfHasBadOdds(battler)) + return TRUE; + if (ShouldSwitchIfEncored(battler)) + return TRUE; + if (ShouldSwitchIfBadChoiceLock(battler)) + return TRUE; + if (ShouldSwitchIfAttackingStatsLowered(battler)) return TRUE; // Removing switch capabilites under specific conditions // These Functions prevent the "FindMonWithFlagsAndSuperEffective" from getting out of hand. + // We don't use FindMonWithFlagsAndSuperEffective with AI_FLAG_SMART_SWITCHING, so we can bail early. + if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_SWITCHING) + return FALSE; if (HasSuperEffectiveMoveAgainstOpponents(battler, FALSE)) return FALSE; if (AreStatsRaised(battler)) return FALSE; - //Default Function - //Can prompt switch if AI has a pokemon in party that resists current opponent & has super effective move - if (FindMonWithFlagsAndSuperEffective(battler, MOVE_RESULT_DOESNT_AFFECT_FOE, 2, emitResult) - || FindMonWithFlagsAndSuperEffective(battler, MOVE_RESULT_NOT_VERY_EFFECTIVE, 3, emitResult)) + // Default Function + // Can prompt switch if AI has a pokemon in party that resists current opponent & has super effective move + if (FindMonWithFlagsAndSuperEffective(battler, MOVE_RESULT_DOESNT_AFFECT_FOE, 50) + || FindMonWithFlagsAndSuperEffective(battler, MOVE_RESULT_NOT_VERY_EFFECTIVE, 33)) return TRUE; return FALSE; } +bool32 IsSwitchinValid(u32 battler) +{ + // Edge case: See if partner already chose to switch into the same mon + if (IsDoubleBattle()) + { + u32 partner = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerAtPosition(battler))); + if (gBattleStruct->AI_monToSwitchIntoId[battler] == PARTY_SIZE) // Generic switch + { + if ((AI_DATA->shouldSwitch & (1u << partner)) && AI_DATA->monToSwitchInId[partner] == AI_DATA->mostSuitableMonId[battler]) + { + return FALSE; + } + } + else // Override switch + { + if ((AI_DATA->shouldSwitch & (1u << partner)) && AI_DATA->monToSwitchInId[partner] == gBattleStruct->AI_monToSwitchIntoId[battler]) + { + return FALSE; + } + } + } + return TRUE; +} + void AI_TrySwitchOrUseItem(u32 battler) { struct Pokemon *party; @@ -1239,16 +1060,13 @@ void AI_TrySwitchOrUseItem(u32 battler) s32 firstId; s32 lastId; // + 1 u8 battlerPosition = GetBattlerPosition(battler); - - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(battler); if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - if (ShouldSwitch(battler, TRUE)) + if (AI_DATA->shouldSwitch & (1u << battler) && IsSwitchinValid(battler)) { + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); if (gBattleStruct->AI_monToSwitchIntoId[battler] == PARTY_SIZE) { s32 monToSwitchId = AI_DATA->mostSuitableMonId[battler]; @@ -1379,7 +1197,7 @@ static u32 GetBestMonTypeMatchup(struct Pokemon *party, int firstId, int lastId, for (i = 0; i < MAX_MON_MOVES; i++) { u32 move = GetMonData(&party[bestMonId], MON_DATA_MOVE1 + i); - if (move != MOVE_NONE && AI_GetTypeEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0)) + if (move != MOVE_NONE && AI_GetMoveEffectiveness(move, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) break; } @@ -2035,7 +1853,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, { if (typeMatchup < bestResistEffective) { - if (AI_GetTypeEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0)) + if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) { if (canSwitchinWin1v1) { @@ -2179,11 +1997,7 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) } GetAIPartyIndexes(battler, &firstId, &lastId); - - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(battler); if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SEQUENCE_SWITCHING) { @@ -2284,10 +2098,7 @@ static bool32 ShouldUseItem(u32 battler) if (AiExpectsToFaintPlayer(battler)) return FALSE; - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(battler); for (i = 0; i < PARTY_SIZE; i++) { diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 193071e7c5..01adcfffd9 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -3070,10 +3070,7 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) struct Pokemon *party; u32 i, battlerOnField1, battlerOnField2; - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(battlerId); if (IsDoubleBattle()) { @@ -3361,11 +3358,7 @@ bool32 ShouldUseWishAromatherapy(u32 battlerAtk, u32 battlerDef, u32 move) bool32 needHealing = FALSE; GetAIPartyIndexes(battlerAtk, &firstId, &lastId); - - if (GetBattlerSide(battlerAtk) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(battlerAtk); if (CountUsablePartyMons(battlerAtk) == 0 && (CanTargetFaintAi(battlerDef, battlerAtk) || BattlerWillFaintFromSecondaryDamage(battlerAtk, AI_DATA->abilities[battlerAtk]))) @@ -3440,20 +3433,27 @@ s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct Battl { gBattleMons[battlerAtk] = switchinCandidate; AI_THINKING_STRUCT->saved[battlerDef].saved = TRUE; - SetBattlerAiData(battlerDef, AI_DATA); // set known opposing battler data + SetBattlerAiData(battlerAtk, AI_DATA); // set known opposing battler data AI_THINKING_STRUCT->saved[battlerDef].saved = FALSE; } else { gBattleMons[battlerDef] = switchinCandidate; AI_THINKING_STRUCT->saved[battlerAtk].saved = TRUE; - SetBattlerAiData(battlerAtk, AI_DATA); // set known opposing battler data + SetBattlerAiData(battlerDef, AI_DATA); // set known opposing battler data AI_THINKING_STRUCT->saved[battlerAtk].saved = FALSE; } + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, FALSE, AI_GetWeather(AI_DATA), rollType); // restores original gBattleMon struct FreeRestoreBattleMons(savedBattleMons); + + if (isPartyMonAttacker) + SetBattlerAiData(battlerAtk, AI_DATA); + else + SetBattlerAiData(battlerDef, AI_DATA); + return dmg.expected; } @@ -3473,11 +3473,7 @@ s32 CountUsablePartyMons(u32 battlerId) { s32 battlerOnField1, battlerOnField2, i, ret; struct Pokemon *party; - - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(battlerId); if (IsDoubleBattle()) { @@ -3509,11 +3505,7 @@ bool32 IsPartyFullyHealedExceptBattler(u32 battlerId) { struct Pokemon *party; u32 i; - - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(battlerId); for (i = 0; i < PARTY_SIZE; i++) { diff --git a/src/battle_main.c b/src/battle_main.c index 7a074c9645..d60b239981 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4209,20 +4209,25 @@ static void HandleTurnActionSelectionState(void) case STATE_TURN_START_RECORD: // Recorded battle related action on start of every turn. RecordedBattle_CopyBattlerMoves(battler); gBattleCommunication[battler] = STATE_BEFORE_ACTION_CHOSEN; + u32 isAiRisky = AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_RISKY; // Risky AI switches aggressively even mid battle // Do AI score computations here so we can use them in AI_TrySwitchOrUseItem if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) && (BattlerHasAi(battler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) { AI_DATA->aiCalcInProgress = TRUE; - if (ShouldSwitch(battler, FALSE)) - AI_DATA->shouldSwitch |= (1u << battler); - if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_RISKY) // Risky AI switches aggressively even mid battle - AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, TRUE); - else - AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, FALSE); - gBattleStruct->aiMoveOrAction[battler] = ComputeBattleAiScores(battler); + // Setup battler data + sBattler_AI = battler; + BattleAI_SetupAIData(0xF, sBattler_AI); + + // Setup switching data + AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, isAiRisky); + if (ShouldSwitch(battler)) + AI_DATA->shouldSwitch |= (1u << battler); + + // Do scoring + gBattleStruct->aiMoveOrAction[battler] = BattleAI_ChooseMoveOrAction(); AI_DATA->aiCalcInProgress = FALSE; } // fallthrough diff --git a/src/battle_tv.c b/src/battle_tv.c index 22e5ab1c31..6134b492c4 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -1353,11 +1353,7 @@ u8 GetBattlerMoveSlotId(u8 battlerId, u16 moveId) { s32 i; struct Pokemon *party; - - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) - party = gPlayerParty; - else - party = gEnemyParty; + party = GetBattlerParty(battlerId); i = 0; while (1) diff --git a/test/battle/ai/ai.c b/test/battle/ai/ai.c index 7f1a46f06a..71c960fcc5 100644 --- a/test/battle/ai/ai.c +++ b/test/battle/ai/ai.c @@ -739,6 +739,7 @@ AI_SINGLE_BATTLE_TEST("AI calculates guaranteed criticals and detects critical i AI_DOUBLE_BATTLE_TEST("AI recognizes Volt Absorb received from Trace") { + KNOWN_FAILING; // MGriffin's PR that switched two turn charging moves in AI tests broke this test, waiting on a fix GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_MAGNETON); diff --git a/test/battle/ai/ai_flag_risky.c b/test/battle/ai/ai_flag_risky.c index e1ceeb2161..87be344ab8 100644 --- a/test/battle/ai/ai_flag_risky.c +++ b/test/battle/ai/ai_flag_risky.c @@ -68,7 +68,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: Mid-battle switches prioritize offensive o PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); } OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); SpDefense(41); } // Mid battle, AI sends out Aron - OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } + OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); Ability(ABILITY_STATIC); } } WHEN { TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, aiRiskyFlag? 2 : 1); } } diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 18bf386847..787c5d505d 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -473,12 +473,14 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if mon would } } -AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if it can't deal damage to a mon with Wonder Guard 66% of the time") +AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if it can't deal damage to a mon with Wonder Guard") { - PASSES_RANDOMLY(66, 100, RNG_AI_SWITCH_WONDER_GUARD); GIVEN { ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].types[0] == TYPE_BUG); ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].types[1] == TYPE_GHOST); + ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].abilities[0] == ABILITY_WONDER_GUARD); + ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].abilities[1] == ABILITY_NONE); + ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].abilities[2] == ABILITY_NONE); ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); ASSUME(gMovesInfo[MOVE_SHADOW_BALL].type == TYPE_GHOST); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); @@ -490,9 +492,8 @@ AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if it can't deal damage to } } -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it can't deal damage to a mon with Wonder Guard 100% of the time") +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it can't deal damage to a mon with Wonder Guard") { - PASSES_RANDOMLY(100, 100, RNG_AI_SWITCH_WONDER_GUARD); GIVEN { ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].types[0] == TYPE_BUG); ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].types[1] == TYPE_GHOST); @@ -510,19 +511,22 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it can't d } } -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Toxic'd for at least two turns 50% of the time with more than 1/3 HP remaining") +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Toxic'd for at least two turns 50% of the time with more than 1/3 HP remaining with good switchin") { - PASSES_RANDOMLY(50, 100, RNG_AI_SWITCH_BADLY_POISONED); + u32 species = SPECIES_NONE, odds = 0; + PARAMETRIZE { species = SPECIES_ZIGZAGOON, odds = 0; } + PARAMETRIZE { species = SPECIES_HARIYAMA, odds = 50; } + PASSES_RANDOMLY(odds, 100, RNG_AI_SWITCH_BADLY_POISONED); GIVEN { ASSUME(gMovesInfo[MOVE_TOXIC].effect == EFFECT_TOXIC); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); - PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE, MOVE_CELEBRATE, MOVE_TOXIC); } - OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE, MOVE_CELEBRATE, MOVE_TOXIC, MOVE_AURA_SPHERE); } OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + OPPONENT(species) { Moves(MOVE_ROCK_SMASH); } } WHEN { TURN { MOVE(player, MOVE_TOXIC); EXPECT_MOVE(opponent, MOVE_TACKLE); } - TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_TACKLE); } - TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); } + TURN { MOVE(player, MOVE_AURA_SPHERE); EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_AURA_SPHERE); EXPECT_SWITCH(opponent, 1); } } } @@ -571,3 +575,322 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has bee TURN { MOVE(player, MOVE_LEECH_SEED); EXPECT_SWITCH(opponent, 1); } } } + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been infatuated") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_ATTRACT].effect == EFFECT_ATTRACT); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_LUVDISC) { Moves(MOVE_ATTRACT); Gender(MON_FEMALE); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); Gender(MON_MALE); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); Gender(MON_MALE); } + } WHEN { + TURN { MOVE(player, MOVE_ATTRACT) ; EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_ATTRACT) ; EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Yawn'd with more than 1/3 HP remaining") +{ + u32 hp; + PARAMETRIZE { hp = 30; } + PARAMETRIZE { hp = 10; } + GIVEN { + ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_SLAKOTH) { Moves(MOVE_TACKLE, MOVE_YAWN); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); HP(hp); MaxHP(30); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + } WHEN { + TURN { MOVE(player, MOVE_YAWN) ; EXPECT_MOVE(opponent, MOVE_TACKLE); } + if (hp == 30) + TURN { MOVE(player, MOVE_YAWN) ; EXPECT_SWITCH(opponent, 1); } + else + TURN { MOVE(player, MOVE_YAWN) ; EXPECT_MOVE(opponent, MOVE_TACKLE); } + } +} + +AI_DOUBLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Yawn'd with more than 1/3 HP remaining (Doubles)") +{ + u32 hp; + PARAMETRIZE { hp = 30; } + PARAMETRIZE { hp = 10; } + GIVEN { + ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_SLAKOTH) { Moves(MOVE_TACKLE, MOVE_CELEBRATE, MOVE_YAWN); } + PLAYER(SPECIES_SLAKOTH) { Moves(MOVE_TACKLE, MOVE_CELEBRATE, MOVE_YAWN); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); HP(hp); MaxHP(30); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_YAWN, target: opponentLeft); MOVE(playerRight, MOVE_CELEBRATE, target: opponentLeft); } + if (hp == 30) + TURN { MOVE(playerLeft, MOVE_YAWN, target: opponentLeft); MOVE(playerRight, MOVE_CELEBRATE, target: opponentLeft); EXPECT_SWITCH(opponentLeft, 2); } + else + TURN { MOVE(playerLeft, MOVE_YAWN, target: opponentLeft); MOVE(playerRight, MOVE_CELEBRATE, target: opponentLeft); EXPECT_MOVE(opponentLeft, MOVE_TACKLE); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if player's mon is semi-invulnerable and it has an absorber") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DIVE].type == TYPE_WATER); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_LUVDISC) { Moves(MOVE_DIVE); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_MANTINE) { Moves(MOVE_TACKLE); Ability(ABILITY_WATER_ABSORB); } + } WHEN { + TURN { MOVE(player, MOVE_DIVE) ; EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { SKIP_TURN(player); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has an absorber but current mon has SE move 33% of the time") +{ + PASSES_RANDOMLY(33, 100, RNG_AI_SWITCH_ABSORBING); + GIVEN { + ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_LUVDISC) { Moves(MOVE_WATER_GUN); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_SHOCK_WAVE); } + OPPONENT(SPECIES_MANTINE) { Moves(MOVE_TACKLE); Ability(ABILITY_WATER_ABSORB); } + } WHEN { + TURN { MOVE(player, MOVE_WATER_GUN) ; EXPECT_MOVE(opponent, MOVE_SHOCK_WAVE); } + TURN { MOVE(player, MOVE_WATER_GUN) ; EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if player's mon is charging and it has an absorber") +{ + PASSES_RANDOMLY(100, 100, RNG_AI_SWITCH_ABSORBING); + GIVEN { + ASSUME(gMovesInfo[MOVE_SOLAR_BEAM].type == TYPE_GRASS); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_BELLOSSOM) { Moves(MOVE_SOLAR_BEAM); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_AZUMARILL) { Moves(MOVE_PLAY_ROUGH); Ability(ABILITY_SAP_SIPPER); } + } WHEN { + TURN { MOVE(player, MOVE_SOLAR_BEAM) ; EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { SKIP_TURN(player); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if player's mon is charging and it has a good switchin immunity (type)") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DIG].type == TYPE_GROUND); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_SANDSHREW) { Moves(MOVE_DIG); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_SWELLOW) { Moves(MOVE_WING_ATTACK); } + } WHEN { + TURN { MOVE(player, MOVE_DIG) ; EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { SKIP_TURN(player); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if player's mon is charging and it has a good switchin immunity (ability)") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DIG].type == TYPE_GROUND); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_SANDSHREW) { Moves(MOVE_DIG); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_BRONZONG) { Moves(MOVE_PSYCHIC); Ability(ABILITY_LEVITATE); } + } WHEN { + TURN { MOVE(player, MOVE_DIG) ; EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { SKIP_TURN(player); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has an absorber") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_LUVDISC) { Moves(MOVE_WATER_GUN); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_MANTINE) { Moves(MOVE_TACKLE); Ability(ABILITY_WATER_ABSORB); } + } WHEN { + TURN { MOVE(player, MOVE_WATER_GUN) ; EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_WATER_GUN) ; EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if opponent uses two-turn move and it has a switchin that wins 1v1") +{ + u32 move; + PARAMETRIZE { move = MOVE_SKY_ATTACK; } + PARAMETRIZE { move = MOVE_FLY; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_FLY].effect == EFFECT_SEMI_INVULNERABLE); + ASSUME(gMovesInfo[MOVE_SKY_ATTACK].effect == EFFECT_TWO_TURNS_ATTACK); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_SWELLOW) { Moves(move); } + OPPONENT(SPECIES_MILOTIC) { Moves(MOVE_SURF); } + OPPONENT(SPECIES_LAIRON) { Moves(MOVE_ROCK_SLIDE); } + } WHEN { + TURN { MOVE(player, move); EXPECT_MOVE(opponent, MOVE_SURF); } + TURN { SKIP_TURN(player); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if badly statused with >= 50% HP remaining and has Natural Cure and a good switchin 66% of the time") +{ + PASSES_RANDOMLY(66, 100, RNG_AI_SWITCH_NATURAL_CURE); + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_ODDISH) { Moves(MOVE_TOXIC, MOVE_TACKLE); } + OPPONENT(SPECIES_SWABLU) { Ability(ABILITY_NATURAL_CURE); Moves(MOVE_TACKLE, MOVE_PECK); } + OPPONENT(SPECIES_SWABLU) { Ability(ABILITY_NATURAL_CURE); Moves(MOVE_TACKLE); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC); EXPECT_MOVE(opponent, MOVE_PECK); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if it has <= 66% HP remaining and has Regenerator and a good switchin 50% of the time") +{ + PASSES_RANDOMLY(50, 100, RNG_AI_SWITCH_REGENERATOR); + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_SLOWBRO) { MaxHP(100); HP(65); Ability(ABILITY_REGENERATOR); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_SLOWBRO) { Ability(ABILITY_REGENERATOR); Moves(MOVE_TACKLE); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Encore'd into a status move") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_ENCORE].effect == EFFECT_ENCORE); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_AZURILL) { Moves(MOVE_TACKLE, MOVE_ENCORE); } + OPPONENT(SPECIES_ODDISH) { Moves(MOVE_TOXIC, MOVE_SWEET_SCENT, MOVE_INGRAIN, MOVE_TACKLE); } + OPPONENT(SPECIES_ARON) { Moves(MOVE_METAL_CLAW); } + } WHEN { + TURN { EXPECT_MOVE(opponent, MOVE_TOXIC); MOVE(player, MOVE_ENCORE); } + TURN { MOVE(player, MOVE_ENCORE); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will stay in if Encore'd into super effective move") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_ENCORE].effect == EFFECT_ENCORE); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_AZURILL) { Moves(MOVE_TACKLE, MOVE_ENCORE); } + OPPONENT(SPECIES_ODDISH) { Moves(MOVE_ACID); } + OPPONENT(SPECIES_ARON) { Moves(MOVE_METAL_CLAW); } + } WHEN { + TURN { EXPECT_MOVE(opponent, MOVE_ACID); MOVE(player, MOVE_ENCORE); } + TURN { EXPECT_MOVE(opponent, MOVE_ACID); MOVE(player, MOVE_TACKLE); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if Encore'd into neutral move with good switchin 50% of the time") +{ + KNOWN_FAILING; // AI still switches even if ShouldSwitch is set to immediately return FALSE, something external seems to be triggering this + PASSES_RANDOMLY(50, 100, RNG_AI_SWITCH_ENCORE); + GIVEN { + ASSUME(gMovesInfo[MOVE_ENCORE].effect == EFFECT_ENCORE); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_AZURILL) { Moves(MOVE_TACKLE, MOVE_ENCORE); } + OPPONENT(SPECIES_ODDISH) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_ARON) { Moves(MOVE_METAL_CLAW); } + } WHEN { + TURN { EXPECT_MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_ENCORE); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if mon has Truant and opponent has Protect") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_ARON) { Moves(MOVE_TACKLE, MOVE_PROTECT); } + OPPONENT(SPECIES_SLAKING) { Ability(ABILITY_TRUANT); Moves(MOVE_BRICK_BREAK); } + OPPONENT(SPECIES_ARON) { Moves(MOVE_TACKLE); } + } WHEN { + TURN { EXPECT_MOVE(opponent, MOVE_BRICK_BREAK); MOVE(player, MOVE_PROTECT); } + TURN { EXPECT_SWITCH(opponent, 1); MOVE(player, MOVE_TACKLE); } + } +} + +AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if mon has Truant and opponent has invulnerability move and is faster") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_SWELLOW) { Speed(5); Moves(MOVE_FLY); } + OPPONENT(SPECIES_SLAKING) { Speed(4); Ability(ABILITY_TRUANT); Moves(MOVE_ROCK_SLIDE); } + OPPONENT(SPECIES_ARON) { Speed(4); Moves(MOVE_TACKLE); } + } WHEN { + TURN { MOVE(player, MOVE_FLY); EXPECT_MOVE(opponent, MOVE_ROCK_SLIDE); } + TURN { SKIP_TURN(player); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if main attacking stat lowered by 2 stages with good switchin candidate 50% of the time") +{ + u32 aiSpecies = SPECIES_NONE, aiMove = MOVE_NONE, move = MOVE_NONE; + + PASSES_RANDOMLY(50, 100, RNG_AI_SWITCH_STATS_LOWERED); + PARAMETRIZE {move = MOVE_CHARM; aiSpecies = SPECIES_FLAREON; aiMove = MOVE_FIRE_FANG; }; + PARAMETRIZE {move = MOVE_EERIE_IMPULSE; aiSpecies = SPECIES_ESPEON; aiMove = MOVE_CONFUSION; }; + + GIVEN { + ASSUME(gMovesInfo[MOVE_CHARM].effect == EFFECT_ATTACK_DOWN_2); + ASSUME(gMovesInfo[MOVE_EERIE_IMPULSE].effect == EFFECT_SPECIAL_ATTACK_DOWN_2); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_ARON) { Moves(move, MOVE_TACKLE); } + OPPONENT(aiSpecies) { Moves(aiMove); } + OPPONENT(SPECIES_MILOTIC) { Moves(MOVE_SURF); } + } WHEN { + TURN { MOVE(player, move); EXPECT_MOVE(opponent, aiMove); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if main attacking stat lowered by 3+ stages") +{ + u32 aiSpecies = SPECIES_NONE, aiMove = MOVE_NONE, move = MOVE_NONE, move2 = MOVE_NONE; + + PASSES_RANDOMLY(100, 100, RNG_AI_SWITCH_STATS_LOWERED); + PARAMETRIZE {move = MOVE_GROWL; move2 = MOVE_CHARM; aiSpecies = SPECIES_FLAREON; aiMove = MOVE_FIRE_FANG; }; + PARAMETRIZE {move = MOVE_CONFIDE; move2 = MOVE_EERIE_IMPULSE; aiSpecies = SPECIES_ESPEON; aiMove = MOVE_STORED_POWER; }; + + GIVEN { + ASSUME(gMovesInfo[MOVE_CHARM].effect == EFFECT_ATTACK_DOWN_2); + ASSUME(gMovesInfo[MOVE_EERIE_IMPULSE].effect == EFFECT_SPECIAL_ATTACK_DOWN_2); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_ARON) { Moves(move, move2, MOVE_TACKLE); } + OPPONENT(aiSpecies) { Moves(aiMove); } + OPPONENT(SPECIES_MILOTIC) { Moves(MOVE_SURF); } + } WHEN { + TURN { MOVE(player, move); EXPECT_MOVE(opponent, aiMove); } + TURN { MOVE(player, move2); EXPECT_MOVE(opponent, aiMove); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch into mon with good type matchup and SE move if current mon has no SE move and no stats raised") +{ + u32 odds = 0, species = SPECIES_NONE, move = MOVE_NONE; + PARAMETRIZE { odds = 33; species = SPECIES_SCIZOR; move = MOVE_X_SCISSOR; } + PARAMETRIZE { odds = 50; species = SPECIES_DUSCLOPS; move = MOVE_SHADOW_BALL; } + PASSES_RANDOMLY(odds, 100, RNG_AI_SWITCH_SE_DEFENSIVE); + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_MUNNA) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_MUNNA) { Moves(MOVE_TACKLE); } + OPPONENT(species) { Moves(move); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); } + } +} diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 7124077a41..fcb35ecd9d 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -780,6 +780,8 @@ void TestRunner_Battle_CheckChosenMove(u32 battlerId, u32 moveId, u32 target) if (!expectedAction->actionSet) return; + DATA.trial.lastActionTurn = gBattleResults.battleTurnCounter; + if (!expectedAction->pass) { u32 i, expectedMoveId = 0, countExpected; @@ -849,6 +851,8 @@ void TestRunner_Battle_CheckSwitch(u32 battlerId, u32 partyIndex) if (!expectedAction->actionSet) return; + DATA.trial.lastActionTurn = gBattleResults.battleTurnCounter; + if (!expectedAction->pass) { if (expectedAction->type != B_ACTION_SWITCH) From 09c424b70fab5ca88122e6dc72cd059123e46e10 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Fri, 25 Oct 2024 12:05:19 +0100 Subject: [PATCH 25/50] Mark all tests as used (#5531) --- include/test/battle.h | 4 ++-- include/test/test.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/test/battle.h b/include/test/battle.h index ac9711b19d..c2ad0cd0c7 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -748,7 +748,7 @@ extern struct BattleTestRunnerState *const gBattleTestRunnerState; #define BATTLE_TEST_ARGS_SINGLE(_name, _type, ...) \ struct CAT(Result, __LINE__) { RECURSIVELY(R_FOR_EACH(APPEND_SEMICOLON, __VA_ARGS__)) }; \ static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, const u32, struct BattlePokemon *, struct BattlePokemon *); \ - __attribute__((section(".tests"))) static const struct Test CAT(sTest, __LINE__) = \ + __attribute__((section(".tests"), used)) static const struct Test CAT(sTest, __LINE__) = \ { \ .name = _name, \ .filename = __FILE__, \ @@ -766,7 +766,7 @@ extern struct BattleTestRunnerState *const gBattleTestRunnerState; #define BATTLE_TEST_ARGS_DOUBLE(_name, _type, ...) \ struct CAT(Result, __LINE__) { RECURSIVELY(R_FOR_EACH(APPEND_SEMICOLON, __VA_ARGS__)) }; \ static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, const u32, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *); \ - __attribute__((section(".tests"))) static const struct Test CAT(sTest, __LINE__) = \ + __attribute__((section(".tests"), used)) static const struct Test CAT(sTest, __LINE__) = \ { \ .name = _name, \ .filename = __FILE__, \ diff --git a/include/test/test.h b/include/test/test.h index 401c65ce9e..1a9d8a237e 100644 --- a/include/test/test.h +++ b/include/test/test.h @@ -83,7 +83,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); #define TEST(_name) \ static void CAT(Test, __LINE__)(void); \ - __attribute__((section(".tests"))) static const struct Test CAT(sTest, __LINE__) = \ + __attribute__((section(".tests"), used)) static const struct Test CAT(sTest, __LINE__) = \ { \ .name = _name, \ .filename = __FILE__, \ @@ -95,7 +95,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); #define ASSUMPTIONS \ static void Assumptions(void); \ - __attribute__((section(".tests"))) static const struct Test sAssumptions = \ + __attribute__((section(".tests"), used)) static const struct Test sAssumptions = \ { \ .name = "ASSUMPTIONS: " __FILE__, \ .filename = __FILE__, \ From 5dcf3e766444a1260f1e5db9f2bce8acba548717 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Fri, 25 Oct 2024 14:42:06 +0200 Subject: [PATCH 26/50] Fixed Shiny Pokemon not being shiny after transforming with a gimmick (#5573) Co-authored-by: Hedara --- src/battle_gfx_sfx_util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index cb3349ee32..aa47a73540 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -897,7 +897,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo if (GetBattlerSide(battlerAtk) == B_SIDE_PLAYER) { - if (B_TRANSFORM_SHINY >= GEN_4 && trackEnemyPersonality) + if (B_TRANSFORM_SHINY >= GEN_4 && trackEnemyPersonality && !megaEvo) { personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_PERSONALITY); isShiny = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_IS_SHINY); @@ -915,7 +915,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo } else { - if (B_TRANSFORM_SHINY >= GEN_4 && trackEnemyPersonality) + if (B_TRANSFORM_SHINY >= GEN_4 && trackEnemyPersonality && !megaEvo) { personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_PERSONALITY); isShiny = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_IS_SHINY); From ad16fa76f20ed2507ca9cc2a3bffcf282e2dbd21 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 26 Oct 2024 10:11:45 +0200 Subject: [PATCH 27/50] Fixes Magic Guard not preventing Salt Cure (#5583) --- src/battle_util.c | 55 +++++++++++++++-------------- test/battle/move_effect/salt_cure.c | 18 ++++++++++ 2 files changed, 47 insertions(+), 26 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 079a9dd436..5284909ddd 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2318,14 +2318,14 @@ s32 GetDrainedBigRootHp(u32 battler, s32 hp) return hp * -1; } -#define MAGIC_GUARD_CHECK \ -if (ability == ABILITY_MAGIC_GUARD) \ -{\ - RecordAbilityBattle(battler, ability);\ - gBattleStruct->turnEffectsTracker++;\ - break;\ -} +static inline bool32 IsBattlerProtectedByMagicGuard(u32 battler, u32 ability) +{ + if (ability != ABILITY_MAGIC_GUARD) + return FALSE; + RecordAbilityBattle(battler, ability); + return TRUE; +} u8 DoBattlerEndTurnEffects(void) { @@ -2453,10 +2453,9 @@ u8 DoBattlerEndTurnEffects(void) case ENDTURN_LEECH_SEED: // leech seed if ((gStatuses3[battler] & STATUS3_LEECHSEED) && IsBattlerAlive(gStatuses3[battler] & STATUS3_LEECHSEED_BATTLER) - && IsBattlerAlive(battler)) + && IsBattlerAlive(battler) + && !IsBattlerProtectedByMagicGuard(battler, ability)) { - MAGIC_GUARD_CHECK; - gBattlerTarget = gStatuses3[battler] & STATUS3_LEECHSEED_BATTLER; // Notice gBattlerTarget is actually the HP receiver. gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 8; if (gBattleMoveDamage == 0) @@ -2470,10 +2469,9 @@ u8 DoBattlerEndTurnEffects(void) break; case ENDTURN_POISON: // poison if ((gBattleMons[battler].status1 & STATUS1_POISON) - && IsBattlerAlive(battler)) + && IsBattlerAlive(battler) + && !IsBattlerProtectedByMagicGuard(battler, ability)) { - MAGIC_GUARD_CHECK; - if (ability == ABILITY_POISON_HEAL) { if (!BATTLER_MAX_HP(battler) && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) @@ -2499,10 +2497,9 @@ u8 DoBattlerEndTurnEffects(void) break; case ENDTURN_BAD_POISON: // toxic poison if ((gBattleMons[battler].status1 & STATUS1_TOXIC_POISON) - && IsBattlerAlive(battler)) + && IsBattlerAlive(battler) + && !IsBattlerProtectedByMagicGuard(battler, ability)) { - MAGIC_GUARD_CHECK; - if (ability == ABILITY_POISON_HEAL) { if (!BATTLER_MAX_HP(battler) && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) @@ -2531,9 +2528,9 @@ u8 DoBattlerEndTurnEffects(void) break; case ENDTURN_BURN: // burn if ((gBattleMons[battler].status1 & STATUS1_BURN) - && IsBattlerAlive(battler)) + && IsBattlerAlive(battler) + && !IsBattlerProtectedByMagicGuard(battler, ability)) { - MAGIC_GUARD_CHECK; gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / (B_BURN_DAMAGE >= GEN_7 ? 16 : 8); if (ability == ABILITY_HEATPROOF) { @@ -2550,9 +2547,9 @@ u8 DoBattlerEndTurnEffects(void) break; case ENDTURN_FROSTBITE: // burn if ((gBattleMons[battler].status1 & STATUS1_FROSTBITE) - && IsBattlerAlive(battler)) + && IsBattlerAlive(battler) + && !IsBattlerProtectedByMagicGuard(battler, ability)) { - MAGIC_GUARD_CHECK; gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / (B_BURN_DAMAGE >= GEN_7 ? 16 : 8); if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -2563,9 +2560,9 @@ u8 DoBattlerEndTurnEffects(void) break; case ENDTURN_NIGHTMARES: // spooky nightmares if ((gBattleMons[battler].status2 & STATUS2_NIGHTMARE) - && IsBattlerAlive(battler)) + && IsBattlerAlive(battler) + && !IsBattlerProtectedByMagicGuard(battler, ability)) { - MAGIC_GUARD_CHECK; // R/S does not perform this sleep check, which causes the nightmare effect to // persist even after the affected Pokémon has been awakened by Shed Skin. if (gBattleMons[battler].status1 & STATUS1_SLEEP) @@ -2585,9 +2582,9 @@ u8 DoBattlerEndTurnEffects(void) break; case ENDTURN_CURSE: // curse if ((gBattleMons[battler].status2 & STATUS2_CURSED) - && IsBattlerAlive(battler)) + && IsBattlerAlive(battler) + && !IsBattlerProtectedByMagicGuard(battler, ability)) { - MAGIC_GUARD_CHECK; gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -2601,7 +2598,11 @@ u8 DoBattlerEndTurnEffects(void) { if (--gDisableStructs[battler].wrapTurns != 0) // damaged by wrap { - MAGIC_GUARD_CHECK; + if (IsBattlerProtectedByMagicGuard(battler, ability)) + { + gBattleStruct->turnEffectsTracker++; + break; + } gBattleScripting.animArg1 = gBattleStruct->wrappedMove[battler]; gBattleScripting.animArg2 = gBattleStruct->wrappedMove[battler] >> 8; @@ -2905,7 +2906,9 @@ u8 DoBattlerEndTurnEffects(void) gBattleStruct->turnEffectsTracker++; break; case ENDTURN_SALT_CURE: - if (gStatuses4[battler] & STATUS4_SALT_CURE && IsBattlerAlive(battler)) + if (gStatuses4[battler] & STATUS4_SALT_CURE + && IsBattlerAlive(battler) + && !IsBattlerProtectedByMagicGuard(battler, ability)) { gBattlerTarget = battler; if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_STEEL) || IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_WATER)) diff --git a/test/battle/move_effect/salt_cure.c b/test/battle/move_effect/salt_cure.c index 939e32f0a6..7385bb16e8 100644 --- a/test/battle/move_effect/salt_cure.c +++ b/test/battle/move_effect/salt_cure.c @@ -99,3 +99,21 @@ SINGLE_BATTLE_TEST("Salt Cure does not get applied if hitting a Substitute") NOT MESSAGE("Foe Wobbuffet is being salt cured!"); } } + +SINGLE_BATTLE_TEST("Salt Cure residual damage does not inflict any damage against Magic Guard") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_CLEFABLE) { Ability(ABILITY_MAGIC_GUARD); }; + } WHEN { + TURN { MOVE(player, MOVE_SALT_CURE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SALT_CURE, player); + HP_BAR(opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SALT_CURE_DAMAGE, opponent); + HP_BAR(opponent); + MESSAGE("Foe Clefable is hurt by Salt Cure!"); + } + } +} From a2c64b0ed06d5180adca7418b83ace1bbc3377a2 Mon Sep 17 00:00:00 2001 From: RavePossum Date: Sat, 26 Oct 2024 18:13:04 -0400 Subject: [PATCH 28/50] Fix unnecessary dependency scanning for test build and test rom names --- Makefile | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index a807cbf8bf..4052e81a2e 100644 --- a/Makefile +++ b/Makefile @@ -86,8 +86,8 @@ ELF_NAME := $(ROM_NAME:.gba=.elf) MAP_NAME := $(ROM_NAME:.gba=.map) MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) -TESTELF = $(ROM_NAME:.gba=-test.elf) -HEADLESSELF = $(ROM_NAME:.gba=-test-headless.elf) +TESTELF = $(MODERN_ROM_NAME:.gba=-test.elf) +HEADLESSELF = $(MODERN_ROM_NAME:.gba=-test-headless.elf) # Pick our active variables ifeq ($(MODERN),0) @@ -407,6 +407,13 @@ ifneq ($(NODEP),1) -include $(addprefix $(OBJ_DIR)/,$(C_SRCS:.c=.d)) endif +$(TEST_BUILDDIR)/%.o: $(TEST_SUBDIR)/%.c + @echo "$(CC1) -o $@ $<" + @$(CPP) $(CPPFLAGS) $< | $(PREPROC) -i $< charmap.txt | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ - + +$(TEST_BUILDDIR)/%.d: $(TEST_SUBDIR)/%.c + $(SCANINC) -M $@ $(INCLUDE_SCANINC_ARGS) -I tools/agbcc/include $< + $(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $(AS) $(ASFLAGS) -o $@ $< @@ -450,14 +457,6 @@ $(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt $(DATA_SRC_SUBDIR)/pokemon/teachable_learnsets.h: $(DATA_ASM_BUILDDIR)/event_scripts.o python3 $(TOOLS_DIR)/learnset_helpers/teachable.py -# NOTE: Based on C_DEP above, but without NODEP and KEEP_TEMPS handling. -define TEST_DEP -$1: $2 $$(shell $(SCANINC) -I include -I $(TOOLS_DIR)/agbcc/include $2) - @echo "$$(CC1) -o $$@ $$<" - @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - -endef -$(foreach src, $(TEST_SRCS), $(eval $(call TEST_DEP,$(patsubst $(TEST_SUBDIR)/%.c,$(TEST_BUILDDIR)/%.o,$(src)),$(src),$(patsubst $(TEST_SUBDIR)/%.c,%,$(src))))) - # Linker script ifeq ($(MODERN),0) LD_SCRIPT := ld_script.ld From 9ec9a9a4f9f414624e923a7b098ba2abfde71bba Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sat, 26 Oct 2024 17:50:20 -0500 Subject: [PATCH 29/50] More post-#3240 cleanup (#5593) --- src/battle_message.c | 12 ++++++------ test/battle/ability/contrary.c | 4 ++-- test/battle/ability/defiant.c | 16 ++++++++-------- test/battle/ability/intimidate.c | 20 ++++++++++---------- test/battle/ability/opportunist.c | 4 ++-- test/battle/ability/rattled.c | 2 +- 6 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 74aa26d6dd..fc730c19df 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -295,7 +295,7 @@ static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}' static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents confusion!"); //not in gen 5+, ability popup static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} raised the power of Fire-type moves!"); //not in gen 5+, ability popup static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors itself with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cuts {B_DEF_NAME_WITH_PREFIX2}'s attack!"); //not in gen 5+, ability popup +static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cuts {B_DEF_NAME_WITH_PREFIX2}'s Attack!"); //not in gen 5+, ability popup static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents stat loss!"); //not in gen 5+, ability popup static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); static const u8 sText_PkmnTraced[] = _("It traced {B_BUFF1}'s {B_BUFF2}!"); @@ -767,19 +767,19 @@ static const u8 sText_HealBlockedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is cured static const u8 sText_AttackerBecameFullyCharged[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged due to its bond with its trainer!\p"); static const u8 sText_AttackerBecameAshSpecies[] = _("{B_ATK_NAME_WITH_PREFIX} became Ash-Greninja!\p"); static const u8 sText_ExtremelyHarshSunlight[] = _("The sunlight turned extremely harsh!"); -static const u8 sText_ExtremeSunlightFaded[] = _("The extremely harsh sunlight faded!{PAUSE 64}"); +static const u8 sText_ExtremeSunlightFaded[] = _("The extremely harsh sunlight faded!"); static const u8 sText_MoveEvaporatedInTheHarshSunlight[] = _("The Water-type attack evaporated in the extremely harsh sunlight!"); static const u8 sText_ExtremelyHarshSunlightWasNotLessened[] = _("The extremely harsh sunlight was not lessened at all!"); static const u8 sText_HeavyRain[] = _("A heavy rain began to fall!"); -static const u8 sText_HeavyRainLifted[] = _("The heavy rain has lifted!{PAUSE 64}"); +static const u8 sText_HeavyRainLifted[] = _("The heavy rain has lifted!"); static const u8 sText_MoveFizzledOutInTheHeavyRain[] = _("The Fire-type attack fizzled out in the heavy rain!"); static const u8 sText_NoReliefFromHeavyRain[] = _("There is no relief from this heavy rain!"); static const u8 sText_MysteriousAirCurrent[] = _("Mysterious strong winds are protecting Flying-type Pokémon!"); -static const u8 sText_StrongWindsDissipated[] = _("The mysterious strong winds have dissipated!{PAUSE 64}"); +static const u8 sText_StrongWindsDissipated[] = _("The mysterious strong winds have dissipated!"); static const u8 sText_MysteriousAirCurrentBlowsOn[] = _("The mysterious strong winds blow on regardless!"); -static const u8 sText_AttackWeakenedByStrongWinds[] = _("The mysterious strong winds weakened the attack!!"); +static const u8 sText_AttackWeakenedByStrongWinds[] = _("The mysterious strong winds weakened the attack!"); static const u8 sText_StuffCheeksCantSelect[] = _("It can't use the move because it doesn't have a Berry!\p"); -static const u8 sText_PkmnRevertedToPrimal[] = _("{B_ATK_NAME_WITH_PREFIX}’s Primal Reversion! It reverted to its primal state!"); +static const u8 sText_PkmnRevertedToPrimal[] = _("{B_ATK_NAME_WITH_PREFIX}'s Primal Reversion! It reverted to its primal state!"); static const u8 sText_ButPokemonCantUseTheMove[] = _("But {B_ATK_NAME_WITH_PREFIX2} can't use the move!"); static const u8 sText_ButHoopaCantUseIt[] = _("But {B_ATK_NAME_WITH_PREFIX2} can't use it the way it is now!"); static const u8 sText_BrokeThroughProtection[] = _("It broke through {B_DEF_NAME_WITH_PREFIX2}'s protection!"); diff --git a/test/battle/ability/contrary.c b/test/battle/ability/contrary.c index 5e44b12b48..56eb6abf65 100644 --- a/test/battle/ability/contrary.c +++ b/test/battle/ability/contrary.c @@ -54,7 +54,7 @@ DOUBLE_BATTLE_TEST("Contrary raises Attack when Intimidated in a double battle", MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's attack!"); + MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's Attack!"); } if (abilityRight == ABILITY_CONTRARY) { ABILITY_POPUP(opponentRight, ABILITY_CONTRARY); @@ -62,7 +62,7 @@ DOUBLE_BATTLE_TEST("Contrary raises Attack when Intimidated in a double battle", MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's attack!"); + MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's Attack!"); } HP_BAR(playerLeft, captureDamage: &results[i].damageLeft); HP_BAR(playerRight, captureDamage: &results[i].damageRight); diff --git a/test/battle/ability/defiant.c b/test/battle/ability/defiant.c index e43810ef9a..9b767b8323 100644 --- a/test/battle/ability/defiant.c +++ b/test/battle/ability/defiant.c @@ -21,14 +21,14 @@ DOUBLE_BATTLE_TEST("Defiant sharply raises player's Attack after Intimidate") //1st mon Intimidate ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("The opposing Gyarados's Intimidate cuts Mankey's attack!"); + MESSAGE("The opposing Gyarados's Intimidate cuts Mankey's Attack!"); if (abilityLeft == ABILITY_DEFIANT) { ABILITY_POPUP(playerLeft, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Mankey's Attack sharply rose!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("The opposing Gyarados's Intimidate cuts Primeape's attack!"); + MESSAGE("The opposing Gyarados's Intimidate cuts Primeape's Attack!"); if (abilityRight == ABILITY_DEFIANT) { ABILITY_POPUP(playerRight, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); @@ -38,14 +38,14 @@ DOUBLE_BATTLE_TEST("Defiant sharply raises player's Attack after Intimidate") //2nd mon Intimidate ABILITY_POPUP(opponentRight, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("The opposing Arbok's Intimidate cuts Mankey's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Mankey's Attack!"); if (abilityLeft == ABILITY_DEFIANT) { ABILITY_POPUP(playerLeft, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Mankey's Attack sharply rose!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("The opposing Arbok's Intimidate cuts Primeape's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Primeape's Attack!"); if (abilityRight == ABILITY_DEFIANT) { ABILITY_POPUP(playerRight, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); @@ -79,14 +79,14 @@ DOUBLE_BATTLE_TEST("Defiant sharply raises opponent's Attack after Intimidate") //1st mon Intimidate ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Gyarados's Intimidate cuts the opposing Mankey's attack!"); + MESSAGE("Gyarados's Intimidate cuts the opposing Mankey's Attack!"); if (abilityLeft == ABILITY_DEFIANT) { ABILITY_POPUP(opponentLeft, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); MESSAGE("The opposing Mankey's Attack sharply rose!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Gyarados's Intimidate cuts the opposing Primeape's attack!"); + MESSAGE("Gyarados's Intimidate cuts the opposing Primeape's Attack!"); if (abilityRight == ABILITY_DEFIANT) { ABILITY_POPUP(opponentRight, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); @@ -96,14 +96,14 @@ DOUBLE_BATTLE_TEST("Defiant sharply raises opponent's Attack after Intimidate") //2nd mon Intimidate ABILITY_POPUP(playerRight, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Arbok's Intimidate cuts the opposing Mankey's attack!"); + MESSAGE("Arbok's Intimidate cuts the opposing Mankey's Attack!"); if (abilityLeft == ABILITY_DEFIANT) { ABILITY_POPUP(opponentLeft, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); MESSAGE("The opposing Mankey's Attack sharply rose!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Arbok's Intimidate cuts the opposing Primeape's attack!"); + MESSAGE("Arbok's Intimidate cuts the opposing Primeape's Attack!"); if (abilityRight == ABILITY_DEFIANT) { ABILITY_POPUP(opponentRight, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index b7d979b4f3..1278a45866 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after switch ou { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("The opposing Arbok's Intimidate cuts Wobbuffet's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Wobbuffet's Attack!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after KO", s16 { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("The opposing Arbok's Intimidate cuts Wobbuffet's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Wobbuffet's Attack!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -92,15 +92,15 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba // Intimidate activates after all battlers have been brought out ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Ekans's Intimidate cuts the opposing Arbok's attack!"); + MESSAGE("Ekans's Intimidate cuts the opposing Arbok's Attack!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Ekans's Intimidate cuts the opposing Wynaut's attack!"); + MESSAGE("Ekans's Intimidate cuts the opposing Wynaut's Attack!"); ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("The opposing Arbok's Intimidate cuts Ekans's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Ekans's Attack!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("The opposing Arbok's Intimidate cuts Abra's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Abra's Attack!"); } } @@ -123,7 +123,7 @@ SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); MESSAGE("2 sent out Hitmontop!"); ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); - MESSAGE("The opposing Hitmontop's Intimidate cuts Wobbuffet's attack!"); + MESSAGE("The opposing Hitmontop's Intimidate cuts Wobbuffet's Attack!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); MESSAGE("The opposing Hitmontop used Tackle!"); @@ -161,10 +161,10 @@ DOUBLE_BATTLE_TEST("Intimidate activates on an empty slot") SEND_IN_MESSAGE("Hitmontop"); ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); NONE_OF { - MESSAGE("Hitmontop's Intimidate cuts the opposing Ralts's attack!"); + MESSAGE("Hitmontop's Intimidate cuts the opposing Ralts's Attack!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Hitmontop's Intimidate cuts the opposing Azurill's attack!"); + MESSAGE("Hitmontop's Intimidate cuts the opposing Azurill's Attack!"); } } @@ -209,7 +209,7 @@ SINGLE_BATTLE_TEST("Intimidate can not further lower opponents Atk stat if it is ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("The opposing Arbok's Intimidate cuts Wobbuffet's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Wobbuffet's Attack!"); } MESSAGE("Wobbuffet's Attack won't go any lower!"); } THEN { diff --git a/test/battle/ability/opportunist.c b/test/battle/ability/opportunist.c index 54bc57929f..662d442dbc 100644 --- a/test/battle/ability/opportunist.c +++ b/test/battle/ability/opportunist.c @@ -64,7 +64,7 @@ DOUBLE_BATTLE_TEST("Opportunist raises Attack only once when partner has Intimid MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's attack!"); + MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's Attack!"); } if (abilityRight == ABILITY_CONTRARY) { ABILITY_POPUP(opponentRight, ABILITY_CONTRARY); @@ -72,7 +72,7 @@ DOUBLE_BATTLE_TEST("Opportunist raises Attack only once when partner has Intimid MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's attack!"); + MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's Attack!"); } if ((abilityLeft == ABILITY_CONTRARY && abilityRight != ABILITY_CONTRARY) diff --git a/test/battle/ability/rattled.c b/test/battle/ability/rattled.c index f2aeff105c..5d3e47db33 100644 --- a/test/battle/ability/rattled.c +++ b/test/battle/ability/rattled.c @@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when affected by Intimidate") } SCENE { ABILITY_POPUP(player, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Gyarados's Intimidate cuts the opposing Sudowoodo's attack!"); + MESSAGE("Gyarados's Intimidate cuts the opposing Sudowoodo's Attack!"); ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Sudowoodo's Speed rose!"); From 2ccc91e0915720f7c52216886a6be4cab6032708 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Sun, 27 Oct 2024 10:36:31 +0100 Subject: [PATCH 30/50] Fixed broken Starting Terrain test (#5582) Co-authored-by: Hedara --- test/battle/terrain/starting_terrain.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/battle/terrain/starting_terrain.c b/test/battle/terrain/starting_terrain.c index 37caa20bc7..f6c4412563 100644 --- a/test/battle/terrain/starting_terrain.c +++ b/test/battle/terrain/starting_terrain.c @@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Terrain started after the one which started the battle lasts VarSet(B_VAR_STARTING_STATUS_TIMER, 0); GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Ability(viaMove == TRUE ? ABILITY_SHADOW_TAG : ABILITY_GRASSY_SURGE); } + PLAYER(SPECIES_TAPU_BULU) { Ability(viaMove == TRUE ? ABILITY_TELEPATHY : ABILITY_GRASSY_SURGE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { // More than 5 turns @@ -84,7 +84,7 @@ SINGLE_BATTLE_TEST("Terrain started after the one which started the battle lasts ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG); // Player uses Grassy Terrain if (viaMove) { - MESSAGE("Wobbuffet used GrssyTerrain!"); + MESSAGE("Tapu Bulu used Grassy Terrain!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASSY_TERRAIN, player); MESSAGE("Grass grew to cover the battlefield!"); } else { @@ -94,13 +94,13 @@ SINGLE_BATTLE_TEST("Terrain started after the one which started the battle lasts } // 5 turns - MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Tapu Bulu used Celebrate!"); MESSAGE("Foe Wobbuffet used Celebrate!"); - MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Tapu Bulu used Celebrate!"); MESSAGE("Foe Wobbuffet used Celebrate!"); - MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Tapu Bulu used Celebrate!"); MESSAGE("Foe Wobbuffet used Celebrate!"); MESSAGE("The grass disappeared from the battlefield."); From c6ccc29c936111e6d51d0481468ff45edb838ef7 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Sun, 27 Oct 2024 15:24:40 +0100 Subject: [PATCH 31/50] Fixed 64px uncompressed followers (#5601) Co-authored-by: Hedara --- .../object_event_pic_tables_followers.h | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/src/data/object_events/object_event_pic_tables_followers.h b/src/data/object_events/object_event_pic_tables_followers.h index 6ad602a629..a456c17e01 100644 --- a/src/data/object_events/object_event_pic_tables_followers.h +++ b/src/data/object_events/object_event_pic_tables_followers.h @@ -702,7 +702,7 @@ static const struct SpriteFrameImage sPicTable_Onix[] = { }; #if P_GEN_2_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Steelix[] = { - overworld_ascending_frames(gObjectEventPic_Steelix, 4, 4), + overworld_ascending_frames(gObjectEventPic_Steelix, 8, 8), }; #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_SteelixMega[] = { @@ -761,7 +761,7 @@ static const struct SpriteFrameImage sPicTable_Exeggutor[] = { }; #if P_ALOLAN_FORMS static const struct SpriteFrameImage sPicTable_ExeggutorAlolan[] = { - overworld_ascending_frames(gObjectEventPic_ExeggutorAlolan, 4, 4), + overworld_ascending_frames(gObjectEventPic_ExeggutorAlolan, 8, 8), }; #endif //P_ALOLAN_FORMS #endif //P_FAMILY_EXEGGCUTE @@ -1833,13 +1833,13 @@ static const struct SpriteFrameImage sPicTable_Tyranitar[] = { #if P_FAMILY_LUGIA static const struct SpriteFrameImage sPicTable_Lugia[] = { - overworld_ascending_frames(gObjectEventPic_Lugia, 4, 4), + overworld_ascending_frames(gObjectEventPic_Lugia, 8, 8), }; #endif //P_FAMILY_LUGIA #if P_FAMILY_HO_OH static const struct SpriteFrameImage sPicTable_HoOh[] = { - overworld_ascending_frames(gObjectEventPic_HoOh, 4, 4), + overworld_ascending_frames(gObjectEventPic_HoOh, 8, 8), }; #endif //P_FAMILY_HO_OH @@ -2233,7 +2233,7 @@ static const struct SpriteFrameImage sPicTable_Wailmer[] = { overworld_ascending_frames(gObjectEventPic_Wailmer, 4, 4), }; static const struct SpriteFrameImage sPicTable_Wailord[] = { - overworld_ascending_frames(gObjectEventPic_Wailord, 4, 4), + overworld_ascending_frames(gObjectEventPic_Wailord, 8, 8), }; #endif //P_FAMILY_WAILMER @@ -2594,7 +2594,7 @@ static const struct SpriteFrameImage sPicTable_Latios[] = { #if P_FAMILY_KYOGRE static const struct SpriteFrameImage sPicTable_Kyogre[] = { - overworld_ascending_frames(gObjectEventPic_Kyogre, 4, 4), + overworld_ascending_frames(gObjectEventPic_Kyogre, 8, 8), }; #if P_PRIMAL_REVERSIONS /*static const struct SpriteFrameImage sPicTable_KyogrePrimal[] = { @@ -2605,7 +2605,7 @@ static const struct SpriteFrameImage sPicTable_Kyogre[] = { #if P_FAMILY_GROUDON static const struct SpriteFrameImage sPicTable_Groudon[] = { - overworld_ascending_frames(gObjectEventPic_Groudon, 4, 4), + overworld_ascending_frames(gObjectEventPic_Groudon, 8, 8), }; #if P_PRIMAL_REVERSIONS /*static const struct SpriteFrameImage sPicTable_GroudonPrimal[] = { @@ -2616,7 +2616,7 @@ static const struct SpriteFrameImage sPicTable_Groudon[] = { #if P_FAMILY_RAYQUAZA static const struct SpriteFrameImage sPicTable_Rayquaza[] = { - overworld_ascending_frames(gObjectEventPic_Rayquaza, 4, 4), + overworld_ascending_frames(gObjectEventPic_Rayquaza, 8, 8), }; #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_RayquazaMega[] = { @@ -3016,19 +3016,19 @@ static const struct SpriteFrameImage sPicTable_Azelf[] = { #if P_FAMILY_DIALGA static const struct SpriteFrameImage sPicTable_Dialga[] = { - overworld_ascending_frames(gObjectEventPic_Dialga, 4, 4), + overworld_ascending_frames(gObjectEventPic_Dialga, 8, 8), }; static const struct SpriteFrameImage sPicTable_DialgaOrigin[] = { - overworld_ascending_frames(gObjectEventPic_DialgaOrigin, 4, 4), + overworld_ascending_frames(gObjectEventPic_DialgaOrigin, 8, 8), }; #endif //P_FAMILY_DIALGA #if P_FAMILY_PALKIA static const struct SpriteFrameImage sPicTable_Palkia[] = { - overworld_ascending_frames(gObjectEventPic_Palkia, 4, 4), + overworld_ascending_frames(gObjectEventPic_Palkia, 8, 8), }; static const struct SpriteFrameImage sPicTable_PalkiaOrigin[] = { - overworld_ascending_frames(gObjectEventPic_PalkiaOrigin, 4, 4), + overworld_ascending_frames(gObjectEventPic_PalkiaOrigin, 8, 8), }; #endif //P_FAMILY_PALKIA @@ -3040,16 +3040,16 @@ static const struct SpriteFrameImage sPicTable_Heatran[] = { #if P_FAMILY_REGIGIGAS static const struct SpriteFrameImage sPicTable_Regigigas[] = { - overworld_ascending_frames(gObjectEventPic_Regigigas, 4, 4), + overworld_ascending_frames(gObjectEventPic_Regigigas, 8, 8), }; #endif //P_FAMILY_REGIGIGAS #if P_FAMILY_GIRATINA static const struct SpriteFrameImage sPicTable_GiratinaAltered[] = { - overworld_ascending_frames(gObjectEventPic_GiratinaAltered, 4, 4), + overworld_ascending_frames(gObjectEventPic_GiratinaAltered, 8, 8), }; static const struct SpriteFrameImage sPicTable_GiratinaOrigin[] = { - overworld_ascending_frames(gObjectEventPic_GiratinaOrigin, 4, 4), + overworld_ascending_frames(gObjectEventPic_GiratinaOrigin, 8, 8), }; #endif //P_FAMILY_GIRATINA @@ -3086,58 +3086,58 @@ static const struct SpriteFrameImage sPicTable_ShayminSky[] = { #if P_FAMILY_ARCEUS static const struct SpriteFrameImage sPicTable_ArceusNormal[] = { - overworld_ascending_frames(gObjectEventPic_ArceusNormal, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusNormal, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusFighting[] = { - overworld_ascending_frames(gObjectEventPic_ArceusFighting, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusFighting, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusFlying[] = { - overworld_ascending_frames(gObjectEventPic_ArceusFlying, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusFlying, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusPoison[] = { - overworld_ascending_frames(gObjectEventPic_ArceusPoison, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusPoison, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusGround[] = { - overworld_ascending_frames(gObjectEventPic_ArceusGround, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusGround, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusRock[] = { - overworld_ascending_frames(gObjectEventPic_ArceusRock, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusRock, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusBug[] = { - overworld_ascending_frames(gObjectEventPic_ArceusBug, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusBug, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusGhost[] = { - overworld_ascending_frames(gObjectEventPic_ArceusGhost, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusGhost, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusSteel[] = { - overworld_ascending_frames(gObjectEventPic_ArceusSteel, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusSteel, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusFire[] = { - overworld_ascending_frames(gObjectEventPic_ArceusFire, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusFire, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusWater[] = { - overworld_ascending_frames(gObjectEventPic_ArceusWater, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusWater, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusGrass[] = { - overworld_ascending_frames(gObjectEventPic_ArceusGrass, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusGrass, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusElectric[] = { - overworld_ascending_frames(gObjectEventPic_ArceusElectric, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusElectric, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusPsychic[] = { - overworld_ascending_frames(gObjectEventPic_ArceusPsychic, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusPsychic, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusIce[] = { - overworld_ascending_frames(gObjectEventPic_ArceusIce, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusIce, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusDragon[] = { - overworld_ascending_frames(gObjectEventPic_ArceusDragon, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusDragon, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusDark[] = { - overworld_ascending_frames(gObjectEventPic_ArceusDark, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusDark, 8, 8), }; static const struct SpriteFrameImage sPicTable_ArceusFairy[] = { - overworld_ascending_frames(gObjectEventPic_ArceusFairy, 4, 4), + overworld_ascending_frames(gObjectEventPic_ArceusFairy, 8, 8), }; #endif //P_FAMILY_ARCEUS @@ -3915,7 +3915,7 @@ static const struct SpriteFrameImage sPicTable_TornadusIncarnate[] = { overworld_ascending_frames(gObjectEventPic_TornadusIncarnate, 4, 4), }; static const struct SpriteFrameImage sPicTable_TornadusTherian[] = { - overworld_ascending_frames(gObjectEventPic_TornadusTherian, 4, 4), + overworld_ascending_frames(gObjectEventPic_TornadusTherian, 8, 8), }; #endif //P_FAMILY_TORNADUS @@ -3925,19 +3925,19 @@ static const struct SpriteFrameImage sPicTable_ThundurusIncarnate[] = { overworld_ascending_frames(gObjectEventPic_ThundurusIncarnate, 4, 4), }; static const struct SpriteFrameImage sPicTable_ThundurusTherian[] = { - overworld_ascending_frames(gObjectEventPic_ThundurusTherian, 4, 4), + overworld_ascending_frames(gObjectEventPic_ThundurusTherian, 8, 8), }; #endif //P_FAMILY_THUNDURUS #if P_FAMILY_RESHIRAM static const struct SpriteFrameImage sPicTable_Reshiram[] = { - overworld_ascending_frames(gObjectEventPic_Reshiram, 4, 4), + overworld_ascending_frames(gObjectEventPic_Reshiram, 8, 8), }; #endif //P_FAMILY_RESHIRAM #if P_FAMILY_ZEKROM static const struct SpriteFrameImage sPicTable_Zekrom[] = { - overworld_ascending_frames(gObjectEventPic_Zekrom, 4, 4), + overworld_ascending_frames(gObjectEventPic_Zekrom, 8, 8), }; #endif //P_FAMILY_ZEKROM @@ -3953,16 +3953,16 @@ static const struct SpriteFrameImage sPicTable_LandorusTherian[] = { #if P_FAMILY_ENAMORUS static const struct SpriteFrameImage sPicTable_EnamorusIncarnate[] = { - overworld_ascending_frames(gObjectEventPic_EnamorusIncarnate, 4, 4), + overworld_ascending_frames(gObjectEventPic_EnamorusIncarnate, 8, 8), }; static const struct SpriteFrameImage sPicTable_EnamorusTherian[] = { - overworld_ascending_frames(gObjectEventPic_EnamorusTherian, 4, 4), + overworld_ascending_frames(gObjectEventPic_EnamorusTherian, 8, 8), }; #endif //P_FAMILY_ENAMORUS #if P_FAMILY_KYUREM static const struct SpriteFrameImage sPicTable_Kyurem[] = { - overworld_ascending_frames(gObjectEventPic_Kyurem, 4, 4), + overworld_ascending_frames(gObjectEventPic_Kyurem, 8, 8), }; #if P_FUSION_FORMS static const struct SpriteFrameImage sPicTable_KyuremWhite[] = { @@ -4466,23 +4466,23 @@ static const struct SpriteFrameImage sPicTable_Noivern[] = { #if P_FAMILY_XERNEAS static const struct SpriteFrameImage sPicTable_XerneasNeutral[] = { - overworld_ascending_frames(gObjectEventPic_XerneasNeutral, 4, 4), + overworld_ascending_frames(gObjectEventPic_XerneasNeutral, 8, 8), }; static const struct SpriteFrameImage sPicTable_XerneasActive[] = { - overworld_ascending_frames(gObjectEventPic_XerneasActive, 4, 4), + overworld_ascending_frames(gObjectEventPic_XerneasActive, 8, 8), }; #endif //P_FAMILY_XERNEAS #if P_FAMILY_YVELTAL static const struct SpriteFrameImage sPicTable_Yveltal[] = { - overworld_ascending_frames(gObjectEventPic_Yveltal, 4, 4), + overworld_ascending_frames(gObjectEventPic_Yveltal, 8, 8), }; #endif //P_FAMILY_YVELTAL #if P_FAMILY_ZYGARDE static const struct SpriteFrameImage sPicTable_Zygarde50[] = { - overworld_ascending_frames(gObjectEventPic_Zygarde50, 4, 4), + overworld_ascending_frames(gObjectEventPic_Zygarde50, 8, 8), }; static const struct SpriteFrameImage sPicTable_Zygarde10[] = { overworld_ascending_frames(gObjectEventPic_Zygarde10, 4, 4), @@ -4509,7 +4509,7 @@ static const struct SpriteFrameImage sPicTable_HoopaConfined[] = { overworld_ascending_frames(gObjectEventPic_HoopaConfined, 4, 4), }; static const struct SpriteFrameImage sPicTable_HoopaUnbound[] = { - overworld_ascending_frames(gObjectEventPic_HoopaUnbound, 4, 4), + overworld_ascending_frames(gObjectEventPic_HoopaUnbound, 8, 8), }; #endif //P_FAMILY_HOOPA From 6819dd3c37a7395457564c9e5ced9827115da7f2 Mon Sep 17 00:00:00 2001 From: GhoulMage Date: Sun, 27 Oct 2024 16:32:45 +0100 Subject: [PATCH 32/50] =?UTF-8?q?New=20AI=20flag=20for=20marking=20the=20t?= =?UTF-8?q?wo=20last=20Pok=C3=A9mon=20as=20Ace=20Pok=C3=A9mon.=20(#5587)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/tutorials/ai_flags.md | 3 + include/constants/battle_ai.h | 3 +- src/battle_ai_switch_items.c | 4 ++ src/battle_controller_opponent.c | 4 ++ test/battle/ai/ai_double_ace.c | 96 ++++++++++++++++++++++++++++++++ 5 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 test/battle/ai/ai_double_ace.c diff --git a/docs/tutorials/ai_flags.md b/docs/tutorials/ai_flags.md index 8559ff36f9..fdbfc27fac 100644 --- a/docs/tutorials/ai_flags.md +++ b/docs/tutorials/ai_flags.md @@ -136,6 +136,9 @@ Affects when the AI chooses to switch. AI will make smarter decisions about when ## `AI_FLAG_ACE_POKEMON` Marks the last Pokemon in the party as the Ace Pokemon. It will not be used unless it is the last one remaining, or is forced to be switched in (Roar, U-Turn with 1 mon remaining, etc.) +## `AI_FLAG_DOUBLE_ACE_POKEMON` +Marks the last two Pokémon in the party as Ace Pokémon, with the same behaviour as `AI_FLAG_ACE_POKEMON`. Intented for double battles where you battle one trainer id that represents two trainers, ie Twins, Couples. + ## `AI_FLAG_OMNISCIENT` AI has full knowledge of player moves, abilities, and hold items, and can use this knowledge when making decisions. diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index ca469cadeb..df6069ead9 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -48,8 +48,9 @@ #define AI_FLAG_SMART_MON_CHOICES (1 << 17) // AI will make smarter decisions when choosing which mon to send out mid-battle and after a KO, which are separate decisions. Automatically included by AI_FLAG_SMART_SWITCHING. #define AI_FLAG_CONSERVATIVE (1 << 18) // AI assumes all moves will low roll damage. #define AI_FLAG_SEQUENCE_SWITCHING (1 << 19) // AI switches in mons in exactly party order, and never switches mid-battle. +#define AI_FLAG_DOUBLE_ACE_POKEMON (1 << 20) // AI has *two* Ace Pokémon. The last two Pokémons in the party won't be used unless they're the last ones remaining. Goes well in battles where the trainer ID equals to twins, couples, etc. -#define AI_FLAG_COUNT 20 +#define AI_FLAG_COUNT 21 // The following options are enough to have a basic/smart trainer. Any other addtion could make the trainer worse/better depending on the flag #define AI_FLAG_BASIC_TRAINER (AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 125f488589..06a69e4f60 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -43,6 +43,10 @@ static bool32 IsAceMon(u32 battler, u32 monPartyId) && !(gBattleStruct->forcedSwitch & (1u << battler)) && monPartyId == CalculateEnemyPartyCount()-1) return TRUE; + if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_DOUBLE_ACE_POKEMON + && !(gBattleStruct->forcedSwitch & (1u << battler)) + && (monPartyId == CalculateEnemyPartyCount()-1 || monPartyId == CalculateEnemyPartyCount()-2)) + return TRUE; return FALSE; } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index b0586a8584..4ede13e590 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -688,6 +688,10 @@ static void OpponentHandleChoosePokemon(u32 battler) if ((AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_ACE_POKEMON) && ((chosenMonId != CalculateEnemyPartyCount() - 1) || CountAIAliveNonEggMonsExcept(PARTY_SIZE) == pokemonInBattle)) continue; + if ((AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_DOUBLE_ACE_POKEMON) + && (((chosenMonId != CalculateEnemyPartyCount() - 1) || (chosenMonId != CalculateEnemyPartyCount() - 1)) + || CountAIAliveNonEggMonsExcept(PARTY_SIZE) == pokemonInBattle)) + continue; // mon is valid break; } diff --git a/test/battle/ai/ai_double_ace.c b/test/battle/ai/ai_double_ace.c new file mode 100644 index 0000000000..aec37b9307 --- /dev/null +++ b/test/battle/ai/ai_double_ace.c @@ -0,0 +1,96 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS { + ASSUME(gMovesInfo[MOVE_U_TURN].effect == EFFECT_HIT_ESCAPE); + ASSUME(gMovesInfo[MOVE_CRUNCH].type == TYPE_DARK); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] == TYPE_PSYCHIC); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[1] == TYPE_PSYCHIC); +} + +AI_DOUBLE_BATTLE_TEST("AI_FLAG_DOUBLE_ACE_POKEMON: U-Turn won't send out any of the Ace Mons if other options exist") +{ + u32 flag; + + PARAMETRIZE { flag = AI_FLAG_DOUBLE_ACE_POKEMON; } + PARAMETRIZE { flag = 0; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_SMART_SWITCHING | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES | flag); + + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + + OPPONENT(SPECIES_GASTLY) { Moves(MOVE_U_TURN); } + OPPONENT(SPECIES_DUSKULL) { Moves(MOVE_U_TURN); } + + OPPONENT(SPECIES_HAUNTER) { Moves(MOVE_U_TURN); } + OPPONENT(SPECIES_GENGAR) { Moves(MOVE_U_TURN); } + + // Aces + // Crunch is super effective against Wobbuffet Psychic type, so normally the AI would switch them in + OPPONENT(SPECIES_POOCHYENA) { Moves(MOVE_CRUNCH); } + OPPONENT(SPECIES_MIGHTYENA) { Moves(MOVE_CRUNCH); } + } WHEN { + TURN { + EXPECT_MOVE(opponentLeft, MOVE_U_TURN); + EXPECT_MOVE(opponentRight, MOVE_U_TURN); + + if(flag == AI_FLAG_DOUBLE_ACE_POKEMON) { + EXPECT_SEND_OUT(opponentLeft, 3); + EXPECT_SEND_OUT(opponentRight, 2); + } else { + EXPECT_SEND_OUT(opponentLeft, 4); + EXPECT_SEND_OUT(opponentRight, 5); + } + } + } +} + +AI_DOUBLE_BATTLE_TEST("AI_FLAG_DOUBLE_ACE_POKEMON: U-Turn will send out an Ace Mon if no other options remain") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_SMART_SWITCHING | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_DOUBLE_ACE_POKEMON); + + PLAYER(SPECIES_WOBBUFFET) { Level(50); } + PLAYER(SPECIES_WOBBUFFET) { Level(50); } + + OPPONENT(SPECIES_GASTLY) { Moves(MOVE_U_TURN); Level(50); } + OPPONENT(SPECIES_DUSKULL) { Moves(MOVE_U_TURN); Level(5); } + + // Aces + // Should choose Poochyena as its level is higher. + OPPONENT(SPECIES_MIGHTYENA) { Moves(MOVE_CRUNCH); Level(5); } + OPPONENT(SPECIES_POOCHYENA) { Moves(MOVE_CRUNCH); Level(50); } + } WHEN { + TURN { + EXPECT_MOVE(opponentLeft, MOVE_U_TURN); + EXPECT_MOVE(opponentRight, MOVE_U_TURN); + + EXPECT_SEND_OUT(opponentLeft, 3); + EXPECT_SEND_OUT(opponentRight, 0); + } + } +} + +AI_DOUBLE_BATTLE_TEST("AI_FLAG_DOUBLE_ACE_POKEMON: Ace mons won't be switched in even if they are the best candidates") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_GENGAR].types[0] == TYPE_GHOST); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_SMART_SWITCHING | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_DOUBLE_ACE_POKEMON); + + PLAYER(SPECIES_GENGAR) { Level(10); } + PLAYER(SPECIES_GENGAR) { Level(10); } + + OPPONENT(SPECIES_RATTATA) { Moves(MOVE_TACKLE); Level(10); } + OPPONENT(SPECIES_PSYDUCK) { Moves(MOVE_TACKLE); Level(10); } + + OPPONENT(SPECIES_ABRA) { Moves(MOVE_ABSORB); Level(20); } + + // Aces + OPPONENT(SPECIES_MIGHTYENA) { Moves(MOVE_CRUNCH); Level(50); } + OPPONENT(SPECIES_POOCHYENA) { Moves(MOVE_CRUNCH); Level(50); } + } WHEN { + TURN { EXPECT_SWITCH(opponentLeft, 2); } + } +} From 13d3245204dd99e9a96a796129c7715f0a675e11 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 27 Oct 2024 15:04:33 -0300 Subject: [PATCH 33/50] Added compressed OW mon VRAM notice in config file (#5599) --- include/config/overworld.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/config/overworld.h b/include/config/overworld.h index c792c76678..f88118007a 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -39,6 +39,7 @@ #define OW_LARGE_OW_SUPPORT TRUE // If true, adds a small amount of overhead to OW code so that large (48x48, 64x64) OWs will display correctly under bridges, etc. #define OW_PKMN_OBJECTS_SHARE_PALETTES FALSE // [WIP!! NOT ALL PALETTES HAVE BEEN ADJUSTED FOR THIS!!] If TRUE, follower palettes are taken from battle sprites. #define OW_GFX_COMPRESS TRUE // Adds support for compressed OW graphics, (Also compresses pokemon follower graphics). + // IMPORTANT: Gfx are loaded into VRAM to avoid continous decompression. If you require more VRAM or want to use a lot of overworld Pokémon at once, you should disable this config. // Compressed gfx are incompatible with non-power-of-two sprite sizes: // (You should not use 48x48 sprites/tables for compressed gfx) // 16x32, 32x32, 64x64 etc are fine From 3442b09852c846bf1c7d99ce9188599bf15a0757 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 27 Oct 2024 16:15:11 -0300 Subject: [PATCH 34/50] Renamed folders and symbols to match species defines (#5581) --- .../competitive_defines/rename_subfolders.py | 21 + .../alcremie/{gigantamax => gmax}/back.png | Bin .../alcremie/{gigantamax => gmax}/front.png | Bin .../alcremie/{gigantamax => gmax}/icon.png | Bin .../alcremie/{gigantamax => gmax}/normal.pal | 0 .../alcremie/{gigantamax => gmax}/shiny.pal | 0 .../appletun/{gigantamax => gmax}/back.png | Bin .../appletun/{gigantamax => gmax}/front.png | Bin .../appletun/{gigantamax => gmax}/icon.png | Bin .../appletun/{gigantamax => gmax}/normal.pal | 0 .../appletun/{gigantamax => gmax}/shiny.pal | 0 .../arcanine/{hisuian => hisui}/back.png | Bin .../arcanine/{hisuian => hisui}/front.png | Bin .../arcanine/{hisuian => hisui}/icon.png | Bin .../arcanine/{hisuian => hisui}/normal.pal | 0 .../arcanine/{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../arcanine/{hisuian => hisui}/shiny.pal | 0 .../articuno/{galarian => galar}/back.png | Bin .../articuno/{galarian => galar}/front.png | Bin .../articuno/{galarian => galar}/icon.png | Bin .../articuno/{galarian => galar}/normal.pal | 0 .../{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../articuno/{galarian => galar}/shiny.pal | 0 .../avalugg/{hisuian => hisui}/back.png | Bin .../avalugg/{hisuian => hisui}/front.png | Bin .../avalugg/{hisuian => hisui}/icon.png | Bin .../avalugg/{hisuian => hisui}/normal.pal | 0 .../avalugg/{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../avalugg/{hisuian => hisui}/shiny.pal | 0 .../basculegion/{female => f}/back.png | Bin .../basculegion/{female => f}/front.png | Bin .../basculegion/{female => f}/icon.png | Bin .../basculegion/{female => f}/normal.pal | 0 .../basculegion/{female => f}/overworld.png | Bin .../{female => f}/overworld_normal.pal | 0 .../{female => f}/overworld_shiny.pal | 0 .../basculegion/{female => f}/shiny.pal | 0 .../basculin/{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../blastoise/{gigantamax => gmax}/back.png | Bin .../blastoise/{gigantamax => gmax}/front.png | Bin .../blastoise/{gigantamax => gmax}/icon.png | Bin .../blastoise/{gigantamax => gmax}/normal.pal | 0 .../blastoise/{gigantamax => gmax}/shiny.pal | 0 .../braviary/{hisuian => hisui}/back.png | Bin .../braviary/{hisuian => hisui}/front.png | Bin .../braviary/{hisuian => hisui}/icon.png | Bin .../braviary/{hisuian => hisui}/normal.pal | 0 .../braviary/{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../braviary/{hisuian => hisui}/shiny.pal | 0 .../pokemon/burmy/{plant => }/footprint.png | Bin .../{sandy_cloak => sandy}/anim_front.png | Bin .../burmy/{sandy_cloak => sandy}/back.png | Bin .../burmy/{sandy_cloak => sandy}/icon.png | Bin .../burmy/{sandy_cloak => sandy}/normal.pal | 0 .../{sandy_cloak => sandy}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../burmy/{sandy_cloak => sandy}/shiny.pal | 0 .../{trash_cloak => trash}/anim_front.png | Bin .../burmy/{trash_cloak => trash}/back.png | Bin .../burmy/{trash_cloak => trash}/icon.png | Bin .../burmy/{trash_cloak => trash}/normal.pal | 0 .../{trash_cloak => trash}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../burmy/{trash_cloak => trash}/shiny.pal | 0 .../butterfree/{gigantamax => gmax}/back.png | Bin .../butterfree/{gigantamax => gmax}/front.png | Bin .../butterfree/{gigantamax => gmax}/icon.png | Bin .../{gigantamax => gmax}/normal.pal | 0 .../butterfree/{gigantamax => gmax}/shiny.pal | 0 .../calyrex/{ice_rider => ice}/back.png | Bin .../calyrex/{ice_rider => ice}/front.png | Bin .../calyrex/{ice_rider => ice}/icon.png | Bin .../calyrex/{ice_rider => ice}/normal.pal | 0 .../calyrex/{ice_rider => ice}/overworld.png | Bin .../{ice_rider => ice}/overworld_normal.pal | 0 .../{ice_rider => ice}/overworld_shiny.pal | 0 .../calyrex/{ice_rider => ice}/shiny.pal | 0 .../calyrex/{shadow_rider => shadow}/back.png | Bin .../{shadow_rider => shadow}/front.png | Bin .../calyrex/{shadow_rider => shadow}/icon.png | Bin .../{shadow_rider => shadow}/normal.pal | 0 .../{shadow_rider => shadow}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../{shadow_rider => shadow}/shiny.pal | 0 .../centiskorch/{gigantamax => gmax}/back.png | Bin .../{gigantamax => gmax}/front.png | Bin .../centiskorch/{gigantamax => gmax}/icon.png | Bin .../{gigantamax => gmax}/normal.pal | 0 .../{gigantamax => gmax}/shiny.pal | 0 .../charizard/{gigantamax => gmax}/back.png | Bin .../charizard/{gigantamax => gmax}/front.png | Bin .../charizard/{gigantamax => gmax}/icon.png | Bin .../charizard/{gigantamax => gmax}/normal.pal | 0 .../charizard/{gigantamax => gmax}/shiny.pal | 0 .../cinderace/{gigantamax => gmax}/back.png | Bin .../cinderace/{gigantamax => gmax}/front.png | Bin .../cinderace/{gigantamax => gmax}/icon.png | Bin .../cinderace/{gigantamax => gmax}/normal.pal | 0 .../cinderace/{gigantamax => gmax}/shiny.pal | 0 .../coalossal/{gigantamax => gmax}/back.png | Bin .../coalossal/{gigantamax => gmax}/front.png | Bin .../coalossal/{gigantamax => gmax}/icon.png | Bin .../coalossal/{gigantamax => gmax}/normal.pal | 0 .../coalossal/{gigantamax => gmax}/shiny.pal | 0 .../copperajah/{gigantamax => gmax}/back.png | Bin .../copperajah/{gigantamax => gmax}/front.png | Bin .../copperajah/{gigantamax => gmax}/icon.png | Bin .../{gigantamax => gmax}/normal.pal | 0 .../copperajah/{gigantamax => gmax}/shiny.pal | 0 .../corsola/{galarian => galar}/back.png | Bin .../corsola/{galarian => galar}/front.png | Bin .../corsola/{galarian => galar}/icon.png | Bin .../corsola/{galarian => galar}/normal.pal | 0 .../corsola/{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../corsola/{galarian => galar}/shiny.pal | 0 .../corviknight/{gigantamax => gmax}/back.png | Bin .../{gigantamax => gmax}/front.png | Bin .../corviknight/{gigantamax => gmax}/icon.png | Bin .../{gigantamax => gmax}/normal.pal | 0 .../{gigantamax => gmax}/shiny.pal | 0 .../{galarian => galar_standard}/back.png | Bin .../{galarian => galar_standard}/front.png | Bin .../{galarian => galar_standard}/icon.png | Bin .../{galarian => galar_standard}/normal.pal | 0 .../overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../{galarian => galar_standard}/shiny.pal | 0 .../{zen_mode/galarian => galar_zen}/back.png | Bin .../galarian => galar_zen}/front.png | Bin .../{zen_mode/galarian => galar_zen}/icon.png | Bin .../galarian => galar_zen}/normal.pal | 0 .../galarian => galar_zen}/shiny.pal | 0 .../{zen_mode => zen}/anim_front.png | Bin .../darmanitan/{zen_mode => zen}/back.png | Bin .../darmanitan/{zen_mode => zen}/icon.png | Bin .../darmanitan/{zen_mode => zen}/normal.pal | 0 .../darmanitan/{zen_mode => zen}/shiny.pal | 0 .../darumaka/{galarian => galar}/back.png | Bin .../darumaka/{galarian => galar}/front.png | Bin .../darumaka/{galarian => galar}/icon.png | Bin .../darumaka/{galarian => galar}/normal.pal | 0 .../{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../darumaka/{galarian => galar}/shiny.pal | 0 .../decidueye/{hisuian => hisui}/back.png | Bin .../decidueye/{hisuian => hisui}/front.png | Bin .../decidueye/{hisuian => hisui}/icon.png | Bin .../decidueye/{hisuian => hisui}/normal.pal | 0 .../{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../decidueye/{hisuian => hisui}/shiny.pal | 0 .../diglett/{alolan => alola}/back.png | Bin .../diglett/{alolan => alola}/front.png | Bin .../diglett/{alolan => alola}/icon.png | Bin .../diglett/{alolan => alola}/normal.pal | 0 .../diglett/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../diglett/{alolan => alola}/shiny.pal | 0 .../drednaw/{gigantamax => gmax}/back.png | Bin .../drednaw/{gigantamax => gmax}/front.png | Bin .../drednaw/{gigantamax => gmax}/icon.png | Bin .../drednaw/{gigantamax => gmax}/normal.pal | 0 .../drednaw/{gigantamax => gmax}/shiny.pal | 0 .../dugtrio/{alolan => alola}/back.png | Bin .../dugtrio/{alolan => alola}/front.png | Bin .../dugtrio/{alolan => alola}/icon.png | Bin .../dugtrio/{alolan => alola}/normal.pal | 0 .../dugtrio/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../dugtrio/{alolan => alola}/shiny.pal | 0 .../duraludon/{gigantamax => gmax}/back.png | Bin .../duraludon/{gigantamax => gmax}/front.png | Bin .../duraludon/{gigantamax => gmax}/icon.png | Bin .../duraludon/{gigantamax => gmax}/normal.pal | 0 .../duraludon/{gigantamax => gmax}/shiny.pal | 0 .../eevee/{gigantamax => gmax}/back.png | Bin .../eevee/{gigantamax => gmax}/front.png | Bin .../eevee/{gigantamax => gmax}/icon.png | Bin .../eevee/{gigantamax => gmax}/normal.pal | 0 .../eevee/{gigantamax => gmax}/shiny.pal | 0 .../electrode/{hisuian => hisui}/back.png | Bin .../electrode/{hisuian => hisui}/front.png | Bin .../electrode/{hisuian => hisui}/icon.png | Bin .../electrode/{hisuian => hisui}/normal.pal | 0 .../{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../electrode/{hisuian => hisui}/shiny.pal | 0 .../{alolan => alola}/anim_front.png | Bin .../exeggutor/{alolan => alola}/back.png | Bin .../exeggutor/{alolan => alola}/icon.png | Bin .../exeggutor/{alolan => alola}/normal.pal | 0 .../exeggutor/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../exeggutor/{alolan => alola}/shiny.pal | 0 .../farfetchd/{galarian => galar}/back.png | Bin .../farfetchd/{galarian => galar}/front.png | Bin .../farfetchd/{galarian => galar}/icon.png | Bin .../farfetchd/{galarian => galar}/normal.pal | 0 .../{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../farfetchd/{galarian => galar}/shiny.pal | 0 .../flabebe/{blue_flower => blue}/icon.png | Bin .../flabebe/{blue_flower => blue}/normal.pal | 0 .../{blue_flower => blue}/overworld.png | Bin .../overworld_normal.pal | 0 .../{blue_flower => blue}/overworld_shiny.pal | 0 .../flabebe/{blue_flower => blue}/shiny.pal | 0 .../{orange_flower => orange}/icon.png | Bin .../{orange_flower => orange}/normal.pal | 0 .../{orange_flower => orange}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../{orange_flower => orange}/shiny.pal | 0 .../flabebe/{white_flower => white}/icon.png | Bin .../{white_flower => white}/normal.pal | 0 .../{white_flower => white}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../flabebe/{white_flower => white}/shiny.pal | 0 .../{yellow_flower => yellow}/icon.png | Bin .../{yellow_flower => yellow}/normal.pal | 0 .../{yellow_flower => yellow}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../{yellow_flower => yellow}/shiny.pal | 0 .../flapple/{gigantamax => gmax}/back.png | Bin .../flapple/{gigantamax => gmax}/front.png | Bin .../flapple/{gigantamax => gmax}/icon.png | Bin .../flapple/{gigantamax => gmax}/normal.pal | 0 .../flapple/{gigantamax => gmax}/shiny.pal | 0 .../floette/{blue_flower => blue}/icon.png | Bin .../floette/{blue_flower => blue}/normal.pal | 0 .../{blue_flower => blue}/overworld.png | Bin .../overworld_normal.pal | 0 .../{blue_flower => blue}/overworld_shiny.pal | 0 .../floette/{blue_flower => blue}/shiny.pal | 0 .../anim_front.png | Bin .../{eternal_flower => eternal}/back.png | Bin .../{eternal_flower => eternal}/icon.png | Bin .../{eternal_flower => eternal}/normal.pal | 0 .../{eternal_flower => eternal}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../{eternal_flower => eternal}/shiny.pal | 0 .../{orange_flower => orange}/icon.png | Bin .../{orange_flower => orange}/normal.pal | 0 .../{orange_flower => orange}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../{orange_flower => orange}/shiny.pal | 0 .../floette/{white_flower => white}/icon.png | Bin .../{white_flower => white}/normal.pal | 0 .../{white_flower => white}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../floette/{white_flower => white}/shiny.pal | 0 .../{yellow_flower => yellow}/icon.png | Bin .../{yellow_flower => yellow}/normal.pal | 0 .../{yellow_flower => yellow}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../{yellow_flower => yellow}/shiny.pal | 0 .../florges/{blue_flower => blue}/icon.png | Bin .../florges/{blue_flower => blue}/normal.pal | 0 .../{blue_flower => blue}/overworld.png | Bin .../overworld_normal.pal | 0 .../{blue_flower => blue}/overworld_shiny.pal | 0 .../florges/{blue_flower => blue}/shiny.pal | 0 .../{orange_flower => orange}/icon.png | Bin .../{orange_flower => orange}/normal.pal | 0 .../{orange_flower => orange}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../{orange_flower => orange}/shiny.pal | 0 .../florges/{white_flower => white}/icon.png | Bin .../{white_flower => white}/normal.pal | 0 .../{white_flower => white}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../florges/{white_flower => white}/shiny.pal | 0 .../{yellow_flower => yellow}/icon.png | Bin .../{yellow_flower => yellow}/normal.pal | 0 .../{yellow_flower => yellow}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../{yellow_flower => yellow}/shiny.pal | 0 .../garbodor/{gigantamax => gmax}/back.png | Bin .../garbodor/{gigantamax => gmax}/front.png | Bin .../garbodor/{gigantamax => gmax}/icon.png | Bin .../garbodor/{gigantamax => gmax}/normal.pal | 0 .../garbodor/{gigantamax => gmax}/shiny.pal | 0 .../{east_sea => east}/anim_front.png | Bin .../gastrodon/{east_sea => east}/back.png | Bin .../gastrodon/{east_sea => east}/icon.png | Bin .../gastrodon/{east_sea => east}/normal.pal | 0 .../{east_sea => east}/overworld.png | Bin .../{east_sea => east}/overworld_normal.pal | 0 .../{east_sea => east}/overworld_shiny.pal | 0 .../gastrodon/{east_sea => east}/shiny.pal | 0 .../gengar/{gigantamax => gmax}/back.png | Bin .../gengar/{gigantamax => gmax}/front.png | Bin .../gengar/{gigantamax => gmax}/icon.png | Bin .../gengar/{gigantamax => gmax}/normal.pal | 0 .../gengar/{gigantamax => gmax}/shiny.pal | 0 .../geodude/{alolan => alola}/back.png | Bin .../geodude/{alolan => alola}/front.png | Bin .../geodude/{alolan => alola}/icon.png | Bin .../geodude/{alolan => alola}/normal.pal | 0 .../geodude/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../geodude/{alolan => alola}/shiny.pal | 0 .../pokemon/golem/{alolan => alola}/back.png | Bin .../pokemon/golem/{alolan => alola}/front.png | Bin .../pokemon/golem/{alolan => alola}/icon.png | Bin .../golem/{alolan => alola}/normal.pal | 0 .../golem/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../pokemon/golem/{alolan => alola}/shiny.pal | 0 .../goodra/{hisuian => hisui}/back.png | Bin .../goodra/{hisuian => hisui}/front.png | Bin .../goodra/{hisuian => hisui}/icon.png | Bin .../goodra/{hisuian => hisui}/normal.pal | 0 .../goodra/{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../goodra/{hisuian => hisui}/shiny.pal | 0 .../graveler/{alolan => alola}/back.png | Bin .../graveler/{alolan => alola}/front.png | Bin .../graveler/{alolan => alola}/icon.png | Bin .../graveler/{alolan => alola}/normal.pal | 0 .../graveler/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../graveler/{alolan => alola}/shiny.pal | 0 .../pokemon/grimer/{alolan => alola}/back.png | Bin .../grimer/{alolan => alola}/front.png | Bin .../pokemon/grimer/{alolan => alola}/icon.png | Bin .../grimer/{alolan => alola}/normal.pal | 0 .../grimer/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../grimer/{alolan => alola}/shiny.pal | 0 .../grimmsnarl/{gigantamax => gmax}/back.png | Bin .../grimmsnarl/{gigantamax => gmax}/front.png | Bin .../grimmsnarl/{gigantamax => gmax}/icon.png | Bin .../{gigantamax => gmax}/normal.pal | 0 .../grimmsnarl/{gigantamax => gmax}/shiny.pal | 0 .../growlithe/{hisuian => hisui}/back.png | Bin .../growlithe/{hisuian => hisui}/front.png | Bin .../growlithe/{hisuian => hisui}/icon.png | Bin .../growlithe/{hisuian => hisui}/normal.pal | 0 .../{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../growlithe/{hisuian => hisui}/shiny.pal | 0 .../hatterene/{gigantamax => gmax}/back.png | Bin .../hatterene/{gigantamax => gmax}/front.png | Bin .../hatterene/{gigantamax => gmax}/icon.png | Bin .../hatterene/{gigantamax => gmax}/normal.pal | 0 .../hatterene/{gigantamax => gmax}/shiny.pal | 0 .../pokemon/indeedee/{female => f}/back.png | Bin .../pokemon/indeedee/{female => f}/front.png | Bin .../pokemon/indeedee/{female => f}/icon.png | Bin .../pokemon/indeedee/{female => f}/normal.pal | 0 .../indeedee/{female => f}/overworld.png | Bin .../{female => f}/overworld_normal.pal | 0 .../{female => f}/overworld_shiny.pal | 0 .../pokemon/indeedee/{female => f}/shiny.pal | 0 .../inteleon/{gigantamax => gmax}/back.png | Bin .../inteleon/{gigantamax => gmax}/front.png | Bin .../inteleon/{gigantamax => gmax}/icon.png | Bin .../inteleon/{gigantamax => gmax}/normal.pal | 0 .../inteleon/{gigantamax => gmax}/shiny.pal | 0 .../kingler/{gigantamax => gmax}/back.png | Bin .../kingler/{gigantamax => gmax}/front.png | Bin .../kingler/{gigantamax => gmax}/icon.png | Bin .../kingler/{gigantamax => gmax}/normal.pal | 0 .../kingler/{gigantamax => gmax}/shiny.pal | 0 .../lapras/{gigantamax => gmax}/back.png | Bin .../lapras/{gigantamax => gmax}/front.png | Bin .../lapras/{gigantamax => gmax}/icon.png | Bin .../lapras/{gigantamax => gmax}/normal.pal | 0 .../lapras/{gigantamax => gmax}/shiny.pal | 0 .../lilligant/{hisuian => hisui}/back.png | Bin .../lilligant/{hisuian => hisui}/front.png | Bin .../lilligant/{hisuian => hisui}/icon.png | Bin .../lilligant/{hisuian => hisui}/normal.pal | 0 .../{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../lilligant/{hisuian => hisui}/shiny.pal | 0 .../linoone/{galarian => galar}/back.png | Bin .../linoone/{galarian => galar}/front.png | Bin .../linoone/{galarian => galar}/icon.png | Bin .../linoone/{galarian => galar}/normal.pal | 0 .../linoone/{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../linoone/{galarian => galar}/shiny.pal | 0 .../machamp/{gigantamax => gmax}/back.png | Bin .../machamp/{gigantamax => gmax}/front.png | Bin .../machamp/{gigantamax => gmax}/icon.png | Bin .../machamp/{gigantamax => gmax}/normal.pal | 0 .../machamp/{gigantamax => gmax}/shiny.pal | 0 .../marowak/{alolan => alola}/back.png | Bin .../marowak/{alolan => alola}/front.png | Bin .../marowak/{alolan => alola}/icon.png | Bin .../marowak/{alolan => alola}/normal.pal | 0 .../marowak/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../marowak/{alolan => alola}/shiny.pal | 0 .../melmetal/{gigantamax => gmax}/back.png | Bin .../melmetal/{gigantamax => gmax}/front.png | Bin .../melmetal/{gigantamax => gmax}/icon.png | Bin .../melmetal/{gigantamax => gmax}/normal.pal | 0 .../melmetal/{gigantamax => gmax}/shiny.pal | 0 .../meowstic/{female => f}/anim_front.png | Bin .../pokemon/meowstic/{female => f}/back.png | Bin .../pokemon/meowstic/{female => f}/icon.png | Bin .../pokemon/meowstic/{female => f}/normal.pal | 0 .../meowstic/{female => f}/overworld.png | Bin .../{female => f}/overworld_normal.pal | 0 .../{female => f}/overworld_shiny.pal | 0 .../pokemon/meowstic/{female => f}/shiny.pal | 0 .../pokemon/meowth/{alolan => alola}/back.png | Bin .../meowth/{alolan => alola}/front.png | Bin .../pokemon/meowth/{alolan => alola}/icon.png | Bin .../meowth/{alolan => alola}/normal.pal | 0 .../meowth/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../meowth/{alolan => alola}/shiny.pal | 0 .../meowth/{galarian => galar}/back.png | Bin .../meowth/{galarian => galar}/front.png | Bin .../meowth/{galarian => galar}/icon.png | Bin .../meowth/{galarian => galar}/normal.pal | 0 .../meowth/{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../meowth/{galarian => galar}/shiny.pal | 0 .../meowth/{gigantamax => gmax}/back.png | Bin .../meowth/{gigantamax => gmax}/front.png | Bin .../meowth/{gigantamax => gmax}/icon.png | Bin .../meowth/{gigantamax => gmax}/normal.pal | 0 .../meowth/{gigantamax => gmax}/shiny.pal | 0 .../moltres/{galarian => galar}/back.png | Bin .../moltres/{galarian => galar}/front.png | Bin .../moltres/{galarian => galar}/icon.png | Bin .../moltres/{galarian => galar}/normal.pal | 0 .../moltres/{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../moltres/{galarian => galar}/shiny.pal | 0 .../mr_mime/{galarian => galar}/back.png | Bin .../mr_mime/{galarian => galar}/front.png | Bin .../mr_mime/{galarian => galar}/icon.png | Bin .../mr_mime/{galarian => galar}/normal.pal | 0 .../mr_mime/{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../mr_mime/{galarian => galar}/shiny.pal | 0 .../pokemon/muk/{alolan => alola}/back.png | Bin .../pokemon/muk/{alolan => alola}/front.png | Bin .../pokemon/muk/{alolan => alola}/icon.png | Bin .../pokemon/muk/{alolan => alola}/normal.pal | 0 .../muk/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../muk/{alolan => alola}/overworld_shiny.pal | 0 .../pokemon/muk/{alolan => alola}/shiny.pal | 0 .../ninetales/{alolan => alola}/back.png | Bin .../ninetales/{alolan => alola}/front.png | Bin .../ninetales/{alolan => alola}/icon.png | Bin .../ninetales/{alolan => alola}/normal.pal | 0 .../ninetales/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../ninetales/{alolan => alola}/shiny.pal | 0 .../tera => cornerstone_tera}/back.png | Bin .../tera => cornerstone_tera}/front.png | Bin .../tera => cornerstone_tera}/normal.pal | 0 .../tera => cornerstone_tera}/shiny.pal | 0 .../tera => hearthflame_tera}/back.png | Bin .../tera => hearthflame_tera}/front.png | Bin .../tera => hearthflame_tera}/normal.pal | 0 .../tera => hearthflame_tera}/shiny.pal | 0 .../ogerpon/{tera => teal_tera}/back.png | Bin .../ogerpon/{tera => teal_tera}/front.png | Bin .../ogerpon/{tera => teal_tera}/normal.pal | 0 .../ogerpon/{tera => teal_tera}/shiny.pal | 0 .../tera => wellspring_tera}/back.png | Bin .../tera => wellspring_tera}/front.png | Bin .../tera => wellspring_tera}/normal.pal | 0 .../tera => wellspring_tera}/shiny.pal | 0 .../pokemon/oinkologne/{female => f}/back.png | Bin .../oinkologne/{female => f}/front.png | Bin .../pokemon/oinkologne/{female => f}/icon.png | Bin .../oinkologne/{female => f}/normal.pal | 0 .../oinkologne/{female => f}/overworld.png | Bin .../{female => f}/overworld_normal.pal | 0 .../{female => f}/overworld_shiny.pal | 0 .../oinkologne/{female => f}/shiny.pal | 0 .../orbeetle/{gigantamax => gmax}/back.png | Bin .../orbeetle/{gigantamax => gmax}/front.png | Bin .../orbeetle/{gigantamax => gmax}/icon.png | Bin .../orbeetle/{gigantamax => gmax}/normal.pal | 0 .../orbeetle/{gigantamax => gmax}/shiny.pal | 0 .../persian/{alolan => alola}/back.png | Bin .../persian/{alolan => alola}/front.png | Bin .../persian/{alolan => alola}/icon.png | Bin .../persian/{alolan => alola}/normal.pal | 0 .../persian/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../persian/{alolan => alola}/shiny.pal | 0 .../pikachu/{alola_cap => alola}/back.png | Bin .../pikachu/{alola_cap => alola}/front.png | Bin .../pikachu/{alola_cap => alola}/icon.png | Bin .../pikachu/{alola_cap => alola}/normal.pal | 0 .../pikachu/{alola_cap => alola}/shiny.pal | 0 .../pikachu/{gigantamax => gmax}/back.png | Bin .../pikachu/{gigantamax => gmax}/front.png | Bin .../pikachu/{gigantamax => gmax}/icon.png | Bin .../pikachu/{gigantamax => gmax}/normal.pal | 0 .../pikachu/{gigantamax => gmax}/shiny.pal | 0 .../pikachu/{hoenn_cap => hoenn}/back.png | Bin .../pikachu/{hoenn_cap => hoenn}/front.png | Bin .../pikachu/{hoenn_cap => hoenn}/icon.png | Bin .../pikachu/{hoenn_cap => hoenn}/normal.pal | 0 .../pikachu/{hoenn_cap => hoenn}/shiny.pal | 0 .../pikachu/{kalos_cap => kalos}/back.png | Bin .../pikachu/{kalos_cap => kalos}/front.png | Bin .../pikachu/{kalos_cap => kalos}/icon.png | Bin .../pikachu/{kalos_cap => kalos}/normal.pal | 0 .../pikachu/{kalos_cap => kalos}/shiny.pal | 0 .../{original_cap => original}/back.png | Bin .../{original_cap => original}/front.png | Bin .../{original_cap => original}/icon.png | Bin .../{original_cap => original}/normal.pal | 0 .../{original_cap => original}/shiny.pal | 0 .../pikachu/{partner_cap => partner}/back.png | Bin .../{partner_cap => partner}/front.png | Bin graphics/pokemon/pikachu/partner/icon.png | Bin 388 -> 444 bytes .../{partner_cap => partner}/normal.pal | 0 .../{partner_cap => partner}/shiny.pal | 0 graphics/pokemon/pikachu/partner_cap/icon.png | Bin 444 -> 0 bytes .../pokemon/pikachu/{ph_d => phd}/back.png | Bin .../pokemon/pikachu/{ph_d => phd}/front.png | Bin .../pokemon/pikachu/{ph_d => phd}/icon.png | Bin .../pokemon/pikachu/{ph_d => phd}/normal.pal | 0 .../pokemon/pikachu/{ph_d => phd}/shiny.pal | 0 .../pikachu/{sinnoh_cap => sinnoh}/back.png | Bin .../pikachu/{sinnoh_cap => sinnoh}/front.png | Bin .../pikachu/{sinnoh_cap => sinnoh}/icon.png | Bin .../pikachu/{sinnoh_cap => sinnoh}/normal.pal | 0 .../pikachu/{sinnoh_cap => sinnoh}/shiny.pal | 0 graphics/pokemon/pikachu/starter/icon.png | Bin 0 -> 388 bytes .../pikachu/{partner => starter}/iconf.png | Bin .../pikachu/{unova_cap => unova}/back.png | Bin .../pikachu/{unova_cap => unova}/front.png | Bin .../pikachu/{unova_cap => unova}/icon.png | Bin .../pikachu/{unova_cap => unova}/normal.pal | 0 .../pikachu/{unova_cap => unova}/shiny.pal | 0 .../pikachu/{world_cap => world}/back.png | Bin .../pikachu/{world_cap => world}/front.png | Bin .../pikachu/{world_cap => world}/icon.png | Bin .../pikachu/{world_cap => world}/normal.pal | 0 .../pikachu/{world_cap => world}/shiny.pal | 0 .../ponyta/{galarian => galar}/back.png | Bin .../ponyta/{galarian => galar}/front.png | Bin .../ponyta/{galarian => galar}/icon.png | Bin .../ponyta/{galarian => galar}/normal.pal | 0 .../ponyta/{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../ponyta/{galarian => galar}/shiny.pal | 0 .../qwilfish/{hisuian => hisui}/back.png | Bin .../qwilfish/{hisuian => hisui}/front.png | Bin .../qwilfish/{hisuian => hisui}/icon.png | Bin .../qwilfish/{hisuian => hisui}/normal.pal | 0 .../qwilfish/{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../qwilfish/{hisuian => hisui}/shiny.pal | 0 .../pokemon/raichu/{alolan => alola}/back.png | Bin .../raichu/{alolan => alola}/front.png | Bin .../pokemon/raichu/{alolan => alola}/icon.png | Bin .../raichu/{alolan => alola}/normal.pal | 0 .../raichu/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../raichu/{alolan => alola}/shiny.pal | 0 .../rapidash/{galarian => galar}/back.png | Bin .../rapidash/{galarian => galar}/front.png | Bin .../rapidash/{galarian => galar}/icon.png | Bin .../rapidash/{galarian => galar}/normal.pal | 0 .../{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../rapidash/{galarian => galar}/shiny.pal | 0 .../raticate/{alolan => alola}/back.png | Bin .../raticate/{alolan => alola}/front.png | Bin .../raticate/{alolan => alola}/icon.png | Bin .../raticate/{alolan => alola}/normal.pal | 0 .../raticate/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../raticate/{alolan => alola}/shiny.pal | 0 .../rattata/{alolan => alola}/back.png | Bin .../rattata/{alolan => alola}/front.png | Bin .../rattata/{alolan => alola}/icon.png | Bin .../rattata/{alolan => alola}/normal.pal | 0 .../rattata/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../rattata/{alolan => alola}/shiny.pal | 0 .../rillaboom/{gigantamax => gmax}/back.png | Bin .../rillaboom/{gigantamax => gmax}/front.png | Bin .../rillaboom/{gigantamax => gmax}/icon.png | Bin .../rillaboom/{gigantamax => gmax}/normal.pal | 0 .../rillaboom/{gigantamax => gmax}/shiny.pal | 0 .../samurott/{hisuian => hisui}/back.png | Bin .../samurott/{hisuian => hisui}/front.png | Bin .../samurott/{hisuian => hisui}/icon.png | Bin .../samurott/{hisuian => hisui}/normal.pal | 0 .../samurott/{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../samurott/{hisuian => hisui}/shiny.pal | 0 .../sandaconda/{gigantamax => gmax}/back.png | Bin .../sandaconda/{gigantamax => gmax}/front.png | Bin .../sandaconda/{gigantamax => gmax}/icon.png | Bin .../{gigantamax => gmax}/normal.pal | 0 .../sandaconda/{gigantamax => gmax}/shiny.pal | 0 .../sandshrew/{alolan => alola}/back.png | Bin .../sandshrew/{alolan => alola}/front.png | Bin .../sandshrew/{alolan => alola}/icon.png | Bin .../sandshrew/{alolan => alola}/normal.pal | 0 .../sandshrew/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../sandshrew/{alolan => alola}/shiny.pal | 0 .../sandslash/{alolan => alola}/back.png | Bin .../sandslash/{alolan => alola}/front.png | Bin .../sandslash/{alolan => alola}/icon.png | Bin .../sandslash/{alolan => alola}/normal.pal | 0 .../sandslash/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../sandslash/{alolan => alola}/shiny.pal | 0 .../shellos/{east_sea => east}/anim_front.png | Bin .../shellos/{east_sea => east}/back.png | Bin .../shellos/{east_sea => east}/icon.png | Bin .../shellos/{east_sea => east}/normal.pal | 0 .../shellos/{east_sea => east}/overworld.png | Bin .../{east_sea => east}/overworld_normal.pal | 0 .../{east_sea => east}/overworld_shiny.pal | 0 .../shellos/{east_sea => east}/shiny.pal | 0 .../sliggoo/{hisuian => hisui}/back.png | Bin .../sliggoo/{hisuian => hisui}/front.png | Bin .../sliggoo/{hisuian => hisui}/icon.png | Bin .../sliggoo/{hisuian => hisui}/normal.pal | 0 .../sliggoo/{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../sliggoo/{hisuian => hisui}/shiny.pal | 0 .../slowbro/{galarian => galar}/back.png | Bin .../slowbro/{galarian => galar}/front.png | Bin .../slowbro/{galarian => galar}/icon.png | Bin .../slowbro/{galarian => galar}/normal.pal | 0 .../slowbro/{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../slowbro/{galarian => galar}/shiny.pal | 0 .../slowking/{galarian => galar}/back.png | Bin .../slowking/{galarian => galar}/front.png | Bin .../slowking/{galarian => galar}/icon.png | Bin .../slowking/{galarian => galar}/normal.pal | 0 .../{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../slowking/{galarian => galar}/shiny.pal | 0 .../slowpoke/{galarian => galar}/back.png | Bin .../slowpoke/{galarian => galar}/front.png | Bin .../slowpoke/{galarian => galar}/icon.png | Bin .../slowpoke/{galarian => galar}/normal.pal | 0 .../{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../slowpoke/{galarian => galar}/shiny.pal | 0 .../sneasel/{hisuian => hisui}/back.png | Bin .../sneasel/{hisuian => hisui}/backf.png | Bin .../sneasel/{hisuian => hisui}/front.png | Bin .../sneasel/{hisuian => hisui}/frontf.png | Bin .../sneasel/{hisuian => hisui}/icon.png | Bin .../sneasel/{hisuian => hisui}/normal.pal | 0 .../sneasel/{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../sneasel/{hisuian => hisui}/overworldf.png | Bin .../sneasel/{hisuian => hisui}/shiny.pal | 0 .../snorlax/{gigantamax => gmax}/back.png | Bin .../snorlax/{gigantamax => gmax}/front.png | Bin .../snorlax/{gigantamax => gmax}/icon.png | Bin .../snorlax/{gigantamax => gmax}/normal.pal | 0 .../snorlax/{gigantamax => gmax}/shiny.pal | 0 .../{blue_plumage => blue}/icon.png | Bin .../{blue_plumage => blue}/normal.pal | 0 .../{blue_plumage => blue}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../{blue_plumage => blue}/shiny.pal | 0 .../{white_plumage => white}/icon.png | Bin .../{white_plumage => white}/normal.pal | 0 .../{white_plumage => white}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../{white_plumage => white}/shiny.pal | 0 .../{yellow_plumage => yellow}/icon.png | Bin .../{yellow_plumage => yellow}/normal.pal | 0 .../{yellow_plumage => yellow}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../{yellow_plumage => yellow}/shiny.pal | 0 .../stunfisk/{galarian => galar}/back.png | Bin .../stunfisk/{galarian => galar}/front.png | Bin .../stunfisk/{galarian => galar}/icon.png | Bin .../stunfisk/{galarian => galar}/normal.pal | 0 .../{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../stunfisk/{galarian => galar}/shiny.pal | 0 .../back.png | Bin .../front.png | Bin .../icon.png | Bin .../normal.pal | 0 .../overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../shiny.pal | 0 .../back.png | Bin .../front.png | Bin .../icon.png | Bin .../normal.pal | 0 .../overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../shiny.pal | 0 .../back.png | Bin .../front.png | Bin .../icon.png | Bin .../normal.pal | 0 .../overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../shiny.pal | 0 .../toxtricity/{gigantamax => gmax}/back.png | Bin .../toxtricity/{gigantamax => gmax}/front.png | Bin .../toxtricity/{gigantamax => gmax}/icon.png | Bin .../{gigantamax => gmax}/normal.pal | 0 .../toxtricity/{gigantamax => gmax}/shiny.pal | 0 .../typhlosion/{hisuian => hisui}/back.png | Bin .../typhlosion/{hisuian => hisui}/front.png | Bin .../typhlosion/{hisuian => hisui}/icon.png | Bin .../typhlosion/{hisuian => hisui}/normal.pal | 0 .../{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../typhlosion/{hisuian => hisui}/shiny.pal | 0 .../back.png | Bin .../front.png | Bin .../icon.png | Bin .../overworld.png | Bin .../{question_mark => question}/back.png | Bin .../{question_mark => question}/front.png | Bin .../{question_mark => question}/icon.png | Bin .../{question_mark => question}/overworld.png | Bin .../back.png | Bin .../front.png | Bin .../normal.pal | 0 .../shiny.pal | 0 .../back.png | Bin .../front.png | Bin .../icon.png | Bin .../normal.pal | 0 .../shiny.pal | 0 .../back.png | Bin .../front.png | Bin .../icon.png | Bin .../normal.pal | 0 .../shiny.pal | 0 .../venusaur/{gigantamax => gmax}/back.png | Bin .../venusaur/{gigantamax => gmax}/front.png | Bin .../venusaur/{gigantamax => gmax}/icon.png | Bin .../venusaur/{gigantamax => gmax}/normal.pal | 0 .../venusaur/{gigantamax => gmax}/shiny.pal | 0 .../voltorb/{hisuian => hisui}/back.png | Bin .../voltorb/{hisuian => hisui}/front.png | Bin .../voltorb/{hisuian => hisui}/icon.png | Bin .../voltorb/{hisuian => hisui}/normal.pal | 0 .../voltorb/{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../voltorb/{hisuian => hisui}/shiny.pal | 0 .../pokemon/vulpix/{alolan => alola}/back.png | Bin .../vulpix/{alolan => alola}/front.png | Bin .../pokemon/vulpix/{alolan => alola}/icon.png | Bin .../vulpix/{alolan => alola}/normal.pal | 0 .../vulpix/{alolan => alola}/overworld.png | Bin .../{alolan => alola}/overworld_normal.pal | 0 .../{alolan => alola}/overworld_shiny.pal | 0 .../vulpix/{alolan => alola}/shiny.pal | 0 .../weezing/{galarian => galar}/back.png | Bin .../weezing/{galarian => galar}/front.png | Bin .../weezing/{galarian => galar}/icon.png | Bin .../weezing/{galarian => galar}/normal.pal | 0 .../weezing/{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../weezing/{galarian => galar}/shiny.pal | 0 .../{wooper_paldean => paldea}/back.png | Bin .../{wooper_paldean => paldea}/front.png | Bin .../{wooper_paldean => paldea}/icon.png | Bin .../{wooper_paldean => paldea}/normal.pal | 0 .../{wooper_paldean => paldea}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../{wooper_paldean => paldea}/shiny.pal | 0 .../wormadam/{plant => }/footprint.png | Bin .../{sandy_cloak => sandy}/anim_front.png | Bin .../wormadam/{sandy_cloak => sandy}/back.png | Bin .../wormadam/{sandy_cloak => sandy}/icon.png | Bin .../{sandy_cloak => sandy}/normal.pal | 0 .../{sandy_cloak => sandy}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../wormadam/{sandy_cloak => sandy}/shiny.pal | 0 .../{trash_cloak => trash}/anim_front.png | Bin .../wormadam/{trash_cloak => trash}/back.png | Bin .../wormadam/{trash_cloak => trash}/icon.png | Bin .../{trash_cloak => trash}/normal.pal | 0 .../{trash_cloak => trash}/overworld.png | Bin .../overworld_normal.pal | 0 .../overworld_shiny.pal | 0 .../wormadam/{trash_cloak => trash}/shiny.pal | 0 .../yamask/{galarian => galar}/back.png | Bin .../yamask/{galarian => galar}/front.png | Bin .../yamask/{galarian => galar}/icon.png | Bin .../yamask/{galarian => galar}/normal.pal | 0 .../yamask/{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../yamask/{galarian => galar}/shiny.pal | 0 .../zapdos/{galarian => galar}/back.png | Bin .../zapdos/{galarian => galar}/front.png | Bin .../zapdos/{galarian => galar}/icon.png | Bin .../zapdos/{galarian => galar}/normal.pal | 0 .../zapdos/{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../zapdos/{galarian => galar}/shiny.pal | 0 .../zigzagoon/{galarian => galar}/back.png | Bin .../zigzagoon/{galarian => galar}/front.png | Bin .../zigzagoon/{galarian => galar}/icon.png | Bin .../zigzagoon/{galarian => galar}/normal.pal | 0 .../{galarian => galar}/overworld.png | Bin .../{galarian => galar}/overworld_normal.pal | 0 .../{galarian => galar}/overworld_shiny.pal | 0 .../zigzagoon/{galarian => galar}/shiny.pal | 0 .../zoroark/{hisuian => hisui}/back.png | Bin .../zoroark/{hisuian => hisui}/front.png | Bin .../zoroark/{hisuian => hisui}/icon.png | Bin .../zoroark/{hisuian => hisui}/normal.pal | 0 .../zoroark/{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../zoroark/{hisuian => hisui}/shiny.pal | 0 .../pokemon/zorua/{hisuian => hisui}/back.png | Bin .../zorua/{hisuian => hisui}/front.png | Bin .../pokemon/zorua/{hisuian => hisui}/icon.png | Bin .../zorua/{hisuian => hisui}/normal.pal | 0 .../zorua/{hisuian => hisui}/overworld.png | Bin .../{hisuian => hisui}/overworld_normal.pal | 0 .../{hisuian => hisui}/overworld_shiny.pal | 0 .../zorua/{hisuian => hisui}/shiny.pal | 0 include/constants/cries.h | 18 +- include/constants/species.h | 2 +- sound/cry_tables.inc | 72 +- sound/direct_sound_data.inc | 56 +- ...{calyrex_ice_rider.aif => calyrex_ice.aif} | Bin ...ex_shadow_rider.aif => calyrex_shadow.aif} | Bin ...eternal_flower.aif => floette_eternal.aif} | Bin ...d_family_of_four.aif => maushold_four.aif} | Bin ...family_of_three.aif => maushold_three.aif} | Bin ...oinkologne_female.aif => oinkologne_f.aif} | Bin .../{oinkologne_male.aif => oinkologne_m.aif} | Bin ...owpoke_galarian.aif => slowpoke_galar.aif} | Bin ...ike_style.aif => urshifu_rapid_strike.aif} | Bin ...ke_style.aif => urshifu_single_strike.aif} | Bin spritesheet_rules.mk | 176 +- src/battle_z_move.c | 2 +- src/data/graphics/pokemon.h | 2394 ++++++++--------- .../object_event_pic_tables_followers.h | 628 ++--- src/data/pokemon/egg_moves.h | 44 +- src/data/pokemon/form_change_tables.h | 2 +- src/data/pokemon/form_species_tables.h | 2 +- src/data/pokemon/level_up_learnsets/gen_1.h | 140 +- src/data/pokemon/level_up_learnsets/gen_2.h | 140 +- src/data/pokemon/level_up_learnsets/gen_3.h | 140 +- src/data/pokemon/level_up_learnsets/gen_4.h | 140 +- src/data/pokemon/level_up_learnsets/gen_5.h | 140 +- src/data/pokemon/level_up_learnsets/gen_6.h | 140 +- src/data/pokemon/level_up_learnsets/gen_7.h | 140 +- src/data/pokemon/level_up_learnsets/gen_8.h | 140 +- src/data/pokemon/level_up_learnsets/gen_9.h | 140 +- src/data/pokemon/pokedex_orders.h | 198 +- .../pokemon/species_info/gen_1_families.h | 1144 ++++---- .../pokemon/species_info/gen_2_families.h | 176 +- .../pokemon/species_info/gen_3_families.h | 46 +- .../pokemon/species_info/gen_4_families.h | 104 +- .../pokemon/species_info/gen_5_families.h | 298 +- .../pokemon/species_info/gen_6_families.h | 156 +- .../pokemon/species_info/gen_7_families.h | 50 +- .../pokemon/species_info/gen_8_families.h | 460 ++-- .../pokemon/species_info/gen_9_families.h | 148 +- .../pokemon/species_info/shared_dex_text.h | 4 +- src/data/pokemon/teachable_learnsets.h | 136 +- src/data/pokemon_graphics/front_pic_anims.h | 396 +-- src/pokemon_jump.c | 44 +- test/battle/gimmick/zmove.c | 2 +- .../porymoves_files/b2w2.json | 4 +- .../porymoves_files/bdsp.json | 4 +- .../learnset_helpers/porymoves_files/bw.json | 4 +- .../learnset_helpers/porymoves_files/dp.json | 4 +- .../porymoves_files/hgss.json | 4 +- .../learnset_helpers/porymoves_files/la.json | 126 +- .../porymoves_files/lgpe.json | 36 +- .../porymoves_files/oras.json | 10 +- .../learnset_helpers/porymoves_files/pt.json | 4 +- .../learnset_helpers/porymoves_files/sm.json | 46 +- .../learnset_helpers/porymoves_files/sv.json | 138 +- .../porymoves_files/swsh.json | 76 +- .../porymoves_files/usum.json | 46 +- .../learnset_helpers/porymoves_files/xy.json | 10 +- 968 files changed, 4286 insertions(+), 4265 deletions(-) create mode 100644 dev_scripts/competitive_defines/rename_subfolders.py rename graphics/pokemon/alcremie/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/alcremie/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/alcremie/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/alcremie/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/alcremie/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/appletun/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/appletun/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/appletun/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/appletun/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/appletun/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/arcanine/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/arcanine/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/arcanine/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/arcanine/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/arcanine/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/arcanine/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/arcanine/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/arcanine/{hisuian => hisui}/shiny.pal (100%) rename graphics/pokemon/articuno/{galarian => galar}/back.png (100%) rename graphics/pokemon/articuno/{galarian => galar}/front.png (100%) rename graphics/pokemon/articuno/{galarian => galar}/icon.png (100%) rename graphics/pokemon/articuno/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/articuno/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/articuno/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/articuno/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/articuno/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/avalugg/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/avalugg/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/avalugg/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/avalugg/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/avalugg/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/avalugg/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/avalugg/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/avalugg/{hisuian => hisui}/shiny.pal (100%) rename graphics/pokemon/basculegion/{female => f}/back.png (100%) rename graphics/pokemon/basculegion/{female => f}/front.png (100%) rename graphics/pokemon/basculegion/{female => f}/icon.png (100%) rename graphics/pokemon/basculegion/{female => f}/normal.pal (100%) rename graphics/pokemon/basculegion/{female => f}/overworld.png (100%) rename graphics/pokemon/basculegion/{female => f}/overworld_normal.pal (100%) rename graphics/pokemon/basculegion/{female => f}/overworld_shiny.pal (100%) rename graphics/pokemon/basculegion/{female => f}/shiny.pal (100%) rename graphics/pokemon/basculin/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/basculin/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/blastoise/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/blastoise/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/blastoise/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/blastoise/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/blastoise/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/braviary/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/braviary/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/braviary/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/braviary/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/braviary/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/braviary/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/braviary/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/braviary/{hisuian => hisui}/shiny.pal (100%) rename graphics/pokemon/burmy/{plant => }/footprint.png (100%) rename graphics/pokemon/burmy/{sandy_cloak => sandy}/anim_front.png (100%) rename graphics/pokemon/burmy/{sandy_cloak => sandy}/back.png (100%) rename graphics/pokemon/burmy/{sandy_cloak => sandy}/icon.png (100%) rename graphics/pokemon/burmy/{sandy_cloak => sandy}/normal.pal (100%) rename graphics/pokemon/burmy/{sandy_cloak => sandy}/overworld.png (100%) rename graphics/pokemon/burmy/{sandy_cloak => sandy}/overworld_normal.pal (100%) rename graphics/pokemon/burmy/{sandy_cloak => sandy}/overworld_shiny.pal (100%) rename graphics/pokemon/burmy/{sandy_cloak => sandy}/shiny.pal (100%) rename graphics/pokemon/burmy/{trash_cloak => trash}/anim_front.png (100%) rename graphics/pokemon/burmy/{trash_cloak => trash}/back.png (100%) rename graphics/pokemon/burmy/{trash_cloak => trash}/icon.png (100%) rename graphics/pokemon/burmy/{trash_cloak => trash}/normal.pal (100%) rename graphics/pokemon/burmy/{trash_cloak => trash}/overworld.png (100%) rename graphics/pokemon/burmy/{trash_cloak => trash}/overworld_normal.pal (100%) rename graphics/pokemon/burmy/{trash_cloak => trash}/overworld_shiny.pal (100%) rename graphics/pokemon/burmy/{trash_cloak => trash}/shiny.pal (100%) rename graphics/pokemon/butterfree/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/butterfree/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/butterfree/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/butterfree/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/butterfree/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/calyrex/{ice_rider => ice}/back.png (100%) rename graphics/pokemon/calyrex/{ice_rider => ice}/front.png (100%) rename graphics/pokemon/calyrex/{ice_rider => ice}/icon.png (100%) rename graphics/pokemon/calyrex/{ice_rider => ice}/normal.pal (100%) rename graphics/pokemon/calyrex/{ice_rider => ice}/overworld.png (100%) rename graphics/pokemon/calyrex/{ice_rider => ice}/overworld_normal.pal (100%) rename graphics/pokemon/calyrex/{ice_rider => ice}/overworld_shiny.pal (100%) rename graphics/pokemon/calyrex/{ice_rider => ice}/shiny.pal (100%) rename graphics/pokemon/calyrex/{shadow_rider => shadow}/back.png (100%) rename graphics/pokemon/calyrex/{shadow_rider => shadow}/front.png (100%) rename graphics/pokemon/calyrex/{shadow_rider => shadow}/icon.png (100%) rename graphics/pokemon/calyrex/{shadow_rider => shadow}/normal.pal (100%) rename graphics/pokemon/calyrex/{shadow_rider => shadow}/overworld.png (100%) rename graphics/pokemon/calyrex/{shadow_rider => shadow}/overworld_normal.pal (100%) rename graphics/pokemon/calyrex/{shadow_rider => shadow}/overworld_shiny.pal (100%) rename graphics/pokemon/calyrex/{shadow_rider => shadow}/shiny.pal (100%) rename graphics/pokemon/centiskorch/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/centiskorch/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/centiskorch/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/centiskorch/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/centiskorch/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/charizard/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/charizard/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/charizard/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/charizard/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/charizard/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/cinderace/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/cinderace/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/cinderace/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/cinderace/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/cinderace/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/coalossal/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/coalossal/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/coalossal/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/coalossal/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/coalossal/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/copperajah/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/copperajah/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/copperajah/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/copperajah/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/copperajah/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/corsola/{galarian => galar}/back.png (100%) rename graphics/pokemon/corsola/{galarian => galar}/front.png (100%) rename graphics/pokemon/corsola/{galarian => galar}/icon.png (100%) rename graphics/pokemon/corsola/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/corsola/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/corsola/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/corsola/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/corsola/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/corviknight/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/corviknight/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/corviknight/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/corviknight/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/corviknight/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/darmanitan/{galarian => galar_standard}/back.png (100%) rename graphics/pokemon/darmanitan/{galarian => galar_standard}/front.png (100%) rename graphics/pokemon/darmanitan/{galarian => galar_standard}/icon.png (100%) rename graphics/pokemon/darmanitan/{galarian => galar_standard}/normal.pal (100%) rename graphics/pokemon/darmanitan/{galarian => galar_standard}/overworld.png (100%) rename graphics/pokemon/darmanitan/{galarian => galar_standard}/overworld_normal.pal (100%) rename graphics/pokemon/darmanitan/{galarian => galar_standard}/overworld_shiny.pal (100%) rename graphics/pokemon/darmanitan/{galarian => galar_standard}/shiny.pal (100%) rename graphics/pokemon/darmanitan/{zen_mode/galarian => galar_zen}/back.png (100%) rename graphics/pokemon/darmanitan/{zen_mode/galarian => galar_zen}/front.png (100%) rename graphics/pokemon/darmanitan/{zen_mode/galarian => galar_zen}/icon.png (100%) rename graphics/pokemon/darmanitan/{zen_mode/galarian => galar_zen}/normal.pal (100%) rename graphics/pokemon/darmanitan/{zen_mode/galarian => galar_zen}/shiny.pal (100%) rename graphics/pokemon/darmanitan/{zen_mode => zen}/anim_front.png (100%) rename graphics/pokemon/darmanitan/{zen_mode => zen}/back.png (100%) rename graphics/pokemon/darmanitan/{zen_mode => zen}/icon.png (100%) rename graphics/pokemon/darmanitan/{zen_mode => zen}/normal.pal (100%) rename graphics/pokemon/darmanitan/{zen_mode => zen}/shiny.pal (100%) rename graphics/pokemon/darumaka/{galarian => galar}/back.png (100%) rename graphics/pokemon/darumaka/{galarian => galar}/front.png (100%) rename graphics/pokemon/darumaka/{galarian => galar}/icon.png (100%) rename graphics/pokemon/darumaka/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/darumaka/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/darumaka/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/darumaka/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/darumaka/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/decidueye/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/decidueye/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/decidueye/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/decidueye/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/decidueye/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/decidueye/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/decidueye/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/decidueye/{hisuian => hisui}/shiny.pal (100%) rename graphics/pokemon/diglett/{alolan => alola}/back.png (100%) rename graphics/pokemon/diglett/{alolan => alola}/front.png (100%) rename graphics/pokemon/diglett/{alolan => alola}/icon.png (100%) rename graphics/pokemon/diglett/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/diglett/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/diglett/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/diglett/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/diglett/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/drednaw/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/drednaw/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/drednaw/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/drednaw/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/drednaw/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/dugtrio/{alolan => alola}/back.png (100%) rename graphics/pokemon/dugtrio/{alolan => alola}/front.png (100%) rename graphics/pokemon/dugtrio/{alolan => alola}/icon.png (100%) rename graphics/pokemon/dugtrio/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/dugtrio/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/dugtrio/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/dugtrio/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/dugtrio/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/duraludon/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/duraludon/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/duraludon/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/duraludon/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/duraludon/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/eevee/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/eevee/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/eevee/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/eevee/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/eevee/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/electrode/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/electrode/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/electrode/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/electrode/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/electrode/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/electrode/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/electrode/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/electrode/{hisuian => hisui}/shiny.pal (100%) rename graphics/pokemon/exeggutor/{alolan => alola}/anim_front.png (100%) rename graphics/pokemon/exeggutor/{alolan => alola}/back.png (100%) rename graphics/pokemon/exeggutor/{alolan => alola}/icon.png (100%) rename graphics/pokemon/exeggutor/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/exeggutor/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/exeggutor/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/exeggutor/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/exeggutor/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/farfetchd/{galarian => galar}/back.png (100%) rename graphics/pokemon/farfetchd/{galarian => galar}/front.png (100%) rename graphics/pokemon/farfetchd/{galarian => galar}/icon.png (100%) rename graphics/pokemon/farfetchd/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/farfetchd/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/farfetchd/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/farfetchd/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/farfetchd/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/flabebe/{blue_flower => blue}/icon.png (100%) rename graphics/pokemon/flabebe/{blue_flower => blue}/normal.pal (100%) rename graphics/pokemon/flabebe/{blue_flower => blue}/overworld.png (100%) rename graphics/pokemon/flabebe/{blue_flower => blue}/overworld_normal.pal (100%) rename graphics/pokemon/flabebe/{blue_flower => blue}/overworld_shiny.pal (100%) rename graphics/pokemon/flabebe/{blue_flower => blue}/shiny.pal (100%) rename graphics/pokemon/flabebe/{orange_flower => orange}/icon.png (100%) rename graphics/pokemon/flabebe/{orange_flower => orange}/normal.pal (100%) rename graphics/pokemon/flabebe/{orange_flower => orange}/overworld.png (100%) rename graphics/pokemon/flabebe/{orange_flower => orange}/overworld_normal.pal (100%) rename graphics/pokemon/flabebe/{orange_flower => orange}/overworld_shiny.pal (100%) rename graphics/pokemon/flabebe/{orange_flower => orange}/shiny.pal (100%) rename graphics/pokemon/flabebe/{white_flower => white}/icon.png (100%) rename graphics/pokemon/flabebe/{white_flower => white}/normal.pal (100%) rename graphics/pokemon/flabebe/{white_flower => white}/overworld.png (100%) rename graphics/pokemon/flabebe/{white_flower => white}/overworld_normal.pal (100%) rename graphics/pokemon/flabebe/{white_flower => white}/overworld_shiny.pal (100%) rename graphics/pokemon/flabebe/{white_flower => white}/shiny.pal (100%) rename graphics/pokemon/flabebe/{yellow_flower => yellow}/icon.png (100%) rename graphics/pokemon/flabebe/{yellow_flower => yellow}/normal.pal (100%) rename graphics/pokemon/flabebe/{yellow_flower => yellow}/overworld.png (100%) rename graphics/pokemon/flabebe/{yellow_flower => yellow}/overworld_normal.pal (100%) rename graphics/pokemon/flabebe/{yellow_flower => yellow}/overworld_shiny.pal (100%) rename graphics/pokemon/flabebe/{yellow_flower => yellow}/shiny.pal (100%) rename graphics/pokemon/flapple/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/flapple/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/flapple/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/flapple/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/flapple/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/floette/{blue_flower => blue}/icon.png (100%) rename graphics/pokemon/floette/{blue_flower => blue}/normal.pal (100%) rename graphics/pokemon/floette/{blue_flower => blue}/overworld.png (100%) rename graphics/pokemon/floette/{blue_flower => blue}/overworld_normal.pal (100%) rename graphics/pokemon/floette/{blue_flower => blue}/overworld_shiny.pal (100%) rename graphics/pokemon/floette/{blue_flower => blue}/shiny.pal (100%) rename graphics/pokemon/floette/{eternal_flower => eternal}/anim_front.png (100%) rename graphics/pokemon/floette/{eternal_flower => eternal}/back.png (100%) rename graphics/pokemon/floette/{eternal_flower => eternal}/icon.png (100%) rename graphics/pokemon/floette/{eternal_flower => eternal}/normal.pal (100%) rename graphics/pokemon/floette/{eternal_flower => eternal}/overworld.png (100%) rename graphics/pokemon/floette/{eternal_flower => eternal}/overworld_normal.pal (100%) rename graphics/pokemon/floette/{eternal_flower => eternal}/overworld_shiny.pal (100%) rename graphics/pokemon/floette/{eternal_flower => eternal}/shiny.pal (100%) rename graphics/pokemon/floette/{orange_flower => orange}/icon.png (100%) rename graphics/pokemon/floette/{orange_flower => orange}/normal.pal (100%) rename graphics/pokemon/floette/{orange_flower => orange}/overworld.png (100%) rename graphics/pokemon/floette/{orange_flower => orange}/overworld_normal.pal (100%) rename graphics/pokemon/floette/{orange_flower => orange}/overworld_shiny.pal (100%) rename graphics/pokemon/floette/{orange_flower => orange}/shiny.pal (100%) rename graphics/pokemon/floette/{white_flower => white}/icon.png (100%) rename graphics/pokemon/floette/{white_flower => white}/normal.pal (100%) rename graphics/pokemon/floette/{white_flower => white}/overworld.png (100%) rename graphics/pokemon/floette/{white_flower => white}/overworld_normal.pal (100%) rename graphics/pokemon/floette/{white_flower => white}/overworld_shiny.pal (100%) rename graphics/pokemon/floette/{white_flower => white}/shiny.pal (100%) rename graphics/pokemon/floette/{yellow_flower => yellow}/icon.png (100%) rename graphics/pokemon/floette/{yellow_flower => yellow}/normal.pal (100%) rename graphics/pokemon/floette/{yellow_flower => yellow}/overworld.png (100%) rename graphics/pokemon/floette/{yellow_flower => yellow}/overworld_normal.pal (100%) rename graphics/pokemon/floette/{yellow_flower => yellow}/overworld_shiny.pal (100%) rename graphics/pokemon/floette/{yellow_flower => yellow}/shiny.pal (100%) rename graphics/pokemon/florges/{blue_flower => blue}/icon.png (100%) rename graphics/pokemon/florges/{blue_flower => blue}/normal.pal (100%) rename graphics/pokemon/florges/{blue_flower => blue}/overworld.png (100%) rename graphics/pokemon/florges/{blue_flower => blue}/overworld_normal.pal (100%) rename graphics/pokemon/florges/{blue_flower => blue}/overworld_shiny.pal (100%) rename graphics/pokemon/florges/{blue_flower => blue}/shiny.pal (100%) rename graphics/pokemon/florges/{orange_flower => orange}/icon.png (100%) rename graphics/pokemon/florges/{orange_flower => orange}/normal.pal (100%) rename graphics/pokemon/florges/{orange_flower => orange}/overworld.png (100%) rename graphics/pokemon/florges/{orange_flower => orange}/overworld_normal.pal (100%) rename graphics/pokemon/florges/{orange_flower => orange}/overworld_shiny.pal (100%) rename graphics/pokemon/florges/{orange_flower => orange}/shiny.pal (100%) rename graphics/pokemon/florges/{white_flower => white}/icon.png (100%) rename graphics/pokemon/florges/{white_flower => white}/normal.pal (100%) rename graphics/pokemon/florges/{white_flower => white}/overworld.png (100%) rename graphics/pokemon/florges/{white_flower => white}/overworld_normal.pal (100%) rename graphics/pokemon/florges/{white_flower => white}/overworld_shiny.pal (100%) rename graphics/pokemon/florges/{white_flower => white}/shiny.pal (100%) rename graphics/pokemon/florges/{yellow_flower => yellow}/icon.png (100%) rename graphics/pokemon/florges/{yellow_flower => yellow}/normal.pal (100%) rename graphics/pokemon/florges/{yellow_flower => yellow}/overworld.png (100%) rename graphics/pokemon/florges/{yellow_flower => yellow}/overworld_normal.pal (100%) rename graphics/pokemon/florges/{yellow_flower => yellow}/overworld_shiny.pal (100%) rename graphics/pokemon/florges/{yellow_flower => yellow}/shiny.pal (100%) rename graphics/pokemon/garbodor/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/garbodor/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/garbodor/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/garbodor/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/garbodor/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/gastrodon/{east_sea => east}/anim_front.png (100%) rename graphics/pokemon/gastrodon/{east_sea => east}/back.png (100%) rename graphics/pokemon/gastrodon/{east_sea => east}/icon.png (100%) rename graphics/pokemon/gastrodon/{east_sea => east}/normal.pal (100%) rename graphics/pokemon/gastrodon/{east_sea => east}/overworld.png (100%) rename graphics/pokemon/gastrodon/{east_sea => east}/overworld_normal.pal (100%) rename graphics/pokemon/gastrodon/{east_sea => east}/overworld_shiny.pal (100%) rename graphics/pokemon/gastrodon/{east_sea => east}/shiny.pal (100%) rename graphics/pokemon/gengar/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/gengar/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/gengar/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/gengar/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/gengar/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/geodude/{alolan => alola}/back.png (100%) rename graphics/pokemon/geodude/{alolan => alola}/front.png (100%) rename graphics/pokemon/geodude/{alolan => alola}/icon.png (100%) rename graphics/pokemon/geodude/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/geodude/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/geodude/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/geodude/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/geodude/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/golem/{alolan => alola}/back.png (100%) rename graphics/pokemon/golem/{alolan => alola}/front.png (100%) rename graphics/pokemon/golem/{alolan => alola}/icon.png (100%) rename graphics/pokemon/golem/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/golem/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/golem/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/golem/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/golem/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/goodra/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/goodra/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/goodra/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/goodra/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/goodra/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/goodra/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/goodra/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/goodra/{hisuian => hisui}/shiny.pal (100%) rename graphics/pokemon/graveler/{alolan => alola}/back.png (100%) rename graphics/pokemon/graveler/{alolan => alola}/front.png (100%) rename graphics/pokemon/graveler/{alolan => alola}/icon.png (100%) rename graphics/pokemon/graveler/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/graveler/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/graveler/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/graveler/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/graveler/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/grimer/{alolan => alola}/back.png (100%) rename graphics/pokemon/grimer/{alolan => alola}/front.png (100%) rename graphics/pokemon/grimer/{alolan => alola}/icon.png (100%) rename graphics/pokemon/grimer/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/grimer/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/grimer/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/grimer/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/grimer/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/grimmsnarl/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/grimmsnarl/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/grimmsnarl/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/grimmsnarl/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/grimmsnarl/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/growlithe/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/growlithe/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/growlithe/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/growlithe/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/growlithe/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/growlithe/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/growlithe/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/growlithe/{hisuian => hisui}/shiny.pal (100%) rename graphics/pokemon/hatterene/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/hatterene/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/hatterene/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/hatterene/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/hatterene/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/indeedee/{female => f}/back.png (100%) rename graphics/pokemon/indeedee/{female => f}/front.png (100%) rename graphics/pokemon/indeedee/{female => f}/icon.png (100%) rename graphics/pokemon/indeedee/{female => f}/normal.pal (100%) rename graphics/pokemon/indeedee/{female => f}/overworld.png (100%) rename graphics/pokemon/indeedee/{female => f}/overworld_normal.pal (100%) rename graphics/pokemon/indeedee/{female => f}/overworld_shiny.pal (100%) rename graphics/pokemon/indeedee/{female => f}/shiny.pal (100%) rename graphics/pokemon/inteleon/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/inteleon/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/inteleon/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/inteleon/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/inteleon/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/kingler/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/kingler/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/kingler/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/kingler/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/kingler/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/lapras/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/lapras/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/lapras/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/lapras/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/lapras/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/lilligant/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/lilligant/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/lilligant/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/lilligant/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/lilligant/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/lilligant/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/lilligant/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/lilligant/{hisuian => hisui}/shiny.pal (100%) rename graphics/pokemon/linoone/{galarian => galar}/back.png (100%) rename graphics/pokemon/linoone/{galarian => galar}/front.png (100%) rename graphics/pokemon/linoone/{galarian => galar}/icon.png (100%) rename graphics/pokemon/linoone/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/linoone/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/linoone/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/linoone/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/linoone/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/machamp/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/machamp/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/machamp/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/machamp/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/machamp/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/marowak/{alolan => alola}/back.png (100%) rename graphics/pokemon/marowak/{alolan => alola}/front.png (100%) rename graphics/pokemon/marowak/{alolan => alola}/icon.png (100%) rename graphics/pokemon/marowak/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/marowak/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/marowak/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/marowak/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/marowak/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/melmetal/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/melmetal/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/melmetal/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/melmetal/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/melmetal/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/meowstic/{female => f}/anim_front.png (100%) rename graphics/pokemon/meowstic/{female => f}/back.png (100%) rename graphics/pokemon/meowstic/{female => f}/icon.png (100%) rename graphics/pokemon/meowstic/{female => f}/normal.pal (100%) rename graphics/pokemon/meowstic/{female => f}/overworld.png (100%) rename graphics/pokemon/meowstic/{female => f}/overworld_normal.pal (100%) rename graphics/pokemon/meowstic/{female => f}/overworld_shiny.pal (100%) rename graphics/pokemon/meowstic/{female => f}/shiny.pal (100%) rename graphics/pokemon/meowth/{alolan => alola}/back.png (100%) rename graphics/pokemon/meowth/{alolan => alola}/front.png (100%) rename graphics/pokemon/meowth/{alolan => alola}/icon.png (100%) rename graphics/pokemon/meowth/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/meowth/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/meowth/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/meowth/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/meowth/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/meowth/{galarian => galar}/back.png (100%) rename graphics/pokemon/meowth/{galarian => galar}/front.png (100%) rename graphics/pokemon/meowth/{galarian => galar}/icon.png (100%) rename graphics/pokemon/meowth/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/meowth/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/meowth/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/meowth/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/meowth/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/meowth/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/meowth/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/meowth/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/meowth/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/meowth/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/moltres/{galarian => galar}/back.png (100%) rename graphics/pokemon/moltres/{galarian => galar}/front.png (100%) rename graphics/pokemon/moltres/{galarian => galar}/icon.png (100%) rename graphics/pokemon/moltres/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/moltres/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/moltres/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/moltres/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/moltres/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/mr_mime/{galarian => galar}/back.png (100%) rename graphics/pokemon/mr_mime/{galarian => galar}/front.png (100%) rename graphics/pokemon/mr_mime/{galarian => galar}/icon.png (100%) rename graphics/pokemon/mr_mime/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/mr_mime/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/mr_mime/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/mr_mime/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/mr_mime/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/muk/{alolan => alola}/back.png (100%) rename graphics/pokemon/muk/{alolan => alola}/front.png (100%) rename graphics/pokemon/muk/{alolan => alola}/icon.png (100%) rename graphics/pokemon/muk/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/muk/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/muk/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/muk/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/muk/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/ninetales/{alolan => alola}/back.png (100%) rename graphics/pokemon/ninetales/{alolan => alola}/front.png (100%) rename graphics/pokemon/ninetales/{alolan => alola}/icon.png (100%) rename graphics/pokemon/ninetales/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/ninetales/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/ninetales/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/ninetales/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/ninetales/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/ogerpon/{cornerstone/tera => cornerstone_tera}/back.png (100%) rename graphics/pokemon/ogerpon/{cornerstone/tera => cornerstone_tera}/front.png (100%) rename graphics/pokemon/ogerpon/{cornerstone/tera => cornerstone_tera}/normal.pal (100%) rename graphics/pokemon/ogerpon/{cornerstone/tera => cornerstone_tera}/shiny.pal (100%) rename graphics/pokemon/ogerpon/{hearthflame/tera => hearthflame_tera}/back.png (100%) rename graphics/pokemon/ogerpon/{hearthflame/tera => hearthflame_tera}/front.png (100%) rename graphics/pokemon/ogerpon/{hearthflame/tera => hearthflame_tera}/normal.pal (100%) rename graphics/pokemon/ogerpon/{hearthflame/tera => hearthflame_tera}/shiny.pal (100%) rename graphics/pokemon/ogerpon/{tera => teal_tera}/back.png (100%) rename graphics/pokemon/ogerpon/{tera => teal_tera}/front.png (100%) rename graphics/pokemon/ogerpon/{tera => teal_tera}/normal.pal (100%) rename graphics/pokemon/ogerpon/{tera => teal_tera}/shiny.pal (100%) rename graphics/pokemon/ogerpon/{wellspring/tera => wellspring_tera}/back.png (100%) rename graphics/pokemon/ogerpon/{wellspring/tera => wellspring_tera}/front.png (100%) rename graphics/pokemon/ogerpon/{wellspring/tera => wellspring_tera}/normal.pal (100%) rename graphics/pokemon/ogerpon/{wellspring/tera => wellspring_tera}/shiny.pal (100%) rename graphics/pokemon/oinkologne/{female => f}/back.png (100%) rename graphics/pokemon/oinkologne/{female => f}/front.png (100%) rename graphics/pokemon/oinkologne/{female => f}/icon.png (100%) rename graphics/pokemon/oinkologne/{female => f}/normal.pal (100%) rename graphics/pokemon/oinkologne/{female => f}/overworld.png (100%) rename graphics/pokemon/oinkologne/{female => f}/overworld_normal.pal (100%) rename graphics/pokemon/oinkologne/{female => f}/overworld_shiny.pal (100%) rename graphics/pokemon/oinkologne/{female => f}/shiny.pal (100%) rename graphics/pokemon/orbeetle/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/orbeetle/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/orbeetle/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/orbeetle/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/orbeetle/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/persian/{alolan => alola}/back.png (100%) rename graphics/pokemon/persian/{alolan => alola}/front.png (100%) rename graphics/pokemon/persian/{alolan => alola}/icon.png (100%) rename graphics/pokemon/persian/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/persian/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/persian/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/persian/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/persian/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/pikachu/{alola_cap => alola}/back.png (100%) rename graphics/pokemon/pikachu/{alola_cap => alola}/front.png (100%) rename graphics/pokemon/pikachu/{alola_cap => alola}/icon.png (100%) rename graphics/pokemon/pikachu/{alola_cap => alola}/normal.pal (100%) rename graphics/pokemon/pikachu/{alola_cap => alola}/shiny.pal (100%) rename graphics/pokemon/pikachu/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/pikachu/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/pikachu/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/pikachu/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/pikachu/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/pikachu/{hoenn_cap => hoenn}/back.png (100%) rename graphics/pokemon/pikachu/{hoenn_cap => hoenn}/front.png (100%) rename graphics/pokemon/pikachu/{hoenn_cap => hoenn}/icon.png (100%) rename graphics/pokemon/pikachu/{hoenn_cap => hoenn}/normal.pal (100%) rename graphics/pokemon/pikachu/{hoenn_cap => hoenn}/shiny.pal (100%) rename graphics/pokemon/pikachu/{kalos_cap => kalos}/back.png (100%) rename graphics/pokemon/pikachu/{kalos_cap => kalos}/front.png (100%) rename graphics/pokemon/pikachu/{kalos_cap => kalos}/icon.png (100%) rename graphics/pokemon/pikachu/{kalos_cap => kalos}/normal.pal (100%) rename graphics/pokemon/pikachu/{kalos_cap => kalos}/shiny.pal (100%) rename graphics/pokemon/pikachu/{original_cap => original}/back.png (100%) rename graphics/pokemon/pikachu/{original_cap => original}/front.png (100%) rename graphics/pokemon/pikachu/{original_cap => original}/icon.png (100%) rename graphics/pokemon/pikachu/{original_cap => original}/normal.pal (100%) rename graphics/pokemon/pikachu/{original_cap => original}/shiny.pal (100%) rename graphics/pokemon/pikachu/{partner_cap => partner}/back.png (100%) rename graphics/pokemon/pikachu/{partner_cap => partner}/front.png (100%) rename graphics/pokemon/pikachu/{partner_cap => partner}/normal.pal (100%) rename graphics/pokemon/pikachu/{partner_cap => partner}/shiny.pal (100%) delete mode 100644 graphics/pokemon/pikachu/partner_cap/icon.png rename graphics/pokemon/pikachu/{ph_d => phd}/back.png (100%) rename graphics/pokemon/pikachu/{ph_d => phd}/front.png (100%) rename graphics/pokemon/pikachu/{ph_d => phd}/icon.png (100%) rename graphics/pokemon/pikachu/{ph_d => phd}/normal.pal (100%) rename graphics/pokemon/pikachu/{ph_d => phd}/shiny.pal (100%) rename graphics/pokemon/pikachu/{sinnoh_cap => sinnoh}/back.png (100%) rename graphics/pokemon/pikachu/{sinnoh_cap => sinnoh}/front.png (100%) rename graphics/pokemon/pikachu/{sinnoh_cap => sinnoh}/icon.png (100%) rename graphics/pokemon/pikachu/{sinnoh_cap => sinnoh}/normal.pal (100%) rename graphics/pokemon/pikachu/{sinnoh_cap => sinnoh}/shiny.pal (100%) create mode 100644 graphics/pokemon/pikachu/starter/icon.png rename graphics/pokemon/pikachu/{partner => starter}/iconf.png (100%) rename graphics/pokemon/pikachu/{unova_cap => unova}/back.png (100%) rename graphics/pokemon/pikachu/{unova_cap => unova}/front.png (100%) rename graphics/pokemon/pikachu/{unova_cap => unova}/icon.png (100%) rename graphics/pokemon/pikachu/{unova_cap => unova}/normal.pal (100%) rename graphics/pokemon/pikachu/{unova_cap => unova}/shiny.pal (100%) rename graphics/pokemon/pikachu/{world_cap => world}/back.png (100%) rename graphics/pokemon/pikachu/{world_cap => world}/front.png (100%) rename graphics/pokemon/pikachu/{world_cap => world}/icon.png (100%) rename graphics/pokemon/pikachu/{world_cap => world}/normal.pal (100%) rename graphics/pokemon/pikachu/{world_cap => world}/shiny.pal (100%) rename graphics/pokemon/ponyta/{galarian => galar}/back.png (100%) rename graphics/pokemon/ponyta/{galarian => galar}/front.png (100%) rename graphics/pokemon/ponyta/{galarian => galar}/icon.png (100%) rename graphics/pokemon/ponyta/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/ponyta/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/ponyta/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/ponyta/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/ponyta/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/qwilfish/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/qwilfish/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/qwilfish/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/qwilfish/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/qwilfish/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/qwilfish/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/qwilfish/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/qwilfish/{hisuian => hisui}/shiny.pal (100%) rename graphics/pokemon/raichu/{alolan => alola}/back.png (100%) rename graphics/pokemon/raichu/{alolan => alola}/front.png (100%) rename graphics/pokemon/raichu/{alolan => alola}/icon.png (100%) rename graphics/pokemon/raichu/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/raichu/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/raichu/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/raichu/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/raichu/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/rapidash/{galarian => galar}/back.png (100%) rename graphics/pokemon/rapidash/{galarian => galar}/front.png (100%) rename graphics/pokemon/rapidash/{galarian => galar}/icon.png (100%) rename graphics/pokemon/rapidash/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/rapidash/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/rapidash/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/rapidash/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/rapidash/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/raticate/{alolan => alola}/back.png (100%) rename graphics/pokemon/raticate/{alolan => alola}/front.png (100%) rename graphics/pokemon/raticate/{alolan => alola}/icon.png (100%) rename graphics/pokemon/raticate/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/raticate/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/raticate/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/raticate/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/raticate/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/rattata/{alolan => alola}/back.png (100%) rename graphics/pokemon/rattata/{alolan => alola}/front.png (100%) rename graphics/pokemon/rattata/{alolan => alola}/icon.png (100%) rename graphics/pokemon/rattata/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/rattata/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/rattata/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/rattata/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/rattata/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/rillaboom/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/rillaboom/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/rillaboom/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/rillaboom/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/rillaboom/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/samurott/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/samurott/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/samurott/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/samurott/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/samurott/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/samurott/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/samurott/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/samurott/{hisuian => hisui}/shiny.pal (100%) rename graphics/pokemon/sandaconda/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/sandaconda/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/sandaconda/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/sandaconda/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/sandaconda/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/sandshrew/{alolan => alola}/back.png (100%) rename graphics/pokemon/sandshrew/{alolan => alola}/front.png (100%) rename graphics/pokemon/sandshrew/{alolan => alola}/icon.png (100%) rename graphics/pokemon/sandshrew/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/sandshrew/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/sandshrew/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/sandshrew/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/sandshrew/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/sandslash/{alolan => alola}/back.png (100%) rename graphics/pokemon/sandslash/{alolan => alola}/front.png (100%) rename graphics/pokemon/sandslash/{alolan => alola}/icon.png (100%) rename graphics/pokemon/sandslash/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/sandslash/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/sandslash/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/sandslash/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/sandslash/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/shellos/{east_sea => east}/anim_front.png (100%) rename graphics/pokemon/shellos/{east_sea => east}/back.png (100%) rename graphics/pokemon/shellos/{east_sea => east}/icon.png (100%) rename graphics/pokemon/shellos/{east_sea => east}/normal.pal (100%) rename graphics/pokemon/shellos/{east_sea => east}/overworld.png (100%) rename graphics/pokemon/shellos/{east_sea => east}/overworld_normal.pal (100%) rename graphics/pokemon/shellos/{east_sea => east}/overworld_shiny.pal (100%) rename graphics/pokemon/shellos/{east_sea => east}/shiny.pal (100%) rename graphics/pokemon/sliggoo/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/sliggoo/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/sliggoo/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/sliggoo/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/sliggoo/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/sliggoo/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/sliggoo/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/sliggoo/{hisuian => hisui}/shiny.pal (100%) rename graphics/pokemon/slowbro/{galarian => galar}/back.png (100%) rename graphics/pokemon/slowbro/{galarian => galar}/front.png (100%) rename graphics/pokemon/slowbro/{galarian => galar}/icon.png (100%) rename graphics/pokemon/slowbro/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/slowbro/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/slowbro/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/slowbro/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/slowbro/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/slowking/{galarian => galar}/back.png (100%) rename graphics/pokemon/slowking/{galarian => galar}/front.png (100%) rename graphics/pokemon/slowking/{galarian => galar}/icon.png (100%) rename graphics/pokemon/slowking/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/slowking/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/slowking/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/slowking/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/slowking/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/slowpoke/{galarian => galar}/back.png (100%) rename graphics/pokemon/slowpoke/{galarian => galar}/front.png (100%) rename graphics/pokemon/slowpoke/{galarian => galar}/icon.png (100%) rename graphics/pokemon/slowpoke/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/slowpoke/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/slowpoke/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/slowpoke/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/slowpoke/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/sneasel/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/sneasel/{hisuian => hisui}/backf.png (100%) rename graphics/pokemon/sneasel/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/sneasel/{hisuian => hisui}/frontf.png (100%) rename graphics/pokemon/sneasel/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/sneasel/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/sneasel/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/sneasel/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/sneasel/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/sneasel/{hisuian => hisui}/overworldf.png (100%) rename graphics/pokemon/sneasel/{hisuian => hisui}/shiny.pal (100%) rename graphics/pokemon/snorlax/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/snorlax/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/snorlax/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/snorlax/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/snorlax/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/squawkabilly/{blue_plumage => blue}/icon.png (100%) rename graphics/pokemon/squawkabilly/{blue_plumage => blue}/normal.pal (100%) rename graphics/pokemon/squawkabilly/{blue_plumage => blue}/overworld.png (100%) rename graphics/pokemon/squawkabilly/{blue_plumage => blue}/overworld_normal.pal (100%) rename graphics/pokemon/squawkabilly/{blue_plumage => blue}/overworld_shiny.pal (100%) rename graphics/pokemon/squawkabilly/{blue_plumage => blue}/shiny.pal (100%) rename graphics/pokemon/squawkabilly/{white_plumage => white}/icon.png (100%) rename graphics/pokemon/squawkabilly/{white_plumage => white}/normal.pal (100%) rename graphics/pokemon/squawkabilly/{white_plumage => white}/overworld.png (100%) rename graphics/pokemon/squawkabilly/{white_plumage => white}/overworld_normal.pal (100%) rename graphics/pokemon/squawkabilly/{white_plumage => white}/overworld_shiny.pal (100%) rename graphics/pokemon/squawkabilly/{white_plumage => white}/shiny.pal (100%) rename graphics/pokemon/squawkabilly/{yellow_plumage => yellow}/icon.png (100%) rename graphics/pokemon/squawkabilly/{yellow_plumage => yellow}/normal.pal (100%) rename graphics/pokemon/squawkabilly/{yellow_plumage => yellow}/overworld.png (100%) rename graphics/pokemon/squawkabilly/{yellow_plumage => yellow}/overworld_normal.pal (100%) rename graphics/pokemon/squawkabilly/{yellow_plumage => yellow}/overworld_shiny.pal (100%) rename graphics/pokemon/squawkabilly/{yellow_plumage => yellow}/shiny.pal (100%) rename graphics/pokemon/stunfisk/{galarian => galar}/back.png (100%) rename graphics/pokemon/stunfisk/{galarian => galar}/front.png (100%) rename graphics/pokemon/stunfisk/{galarian => galar}/icon.png (100%) rename graphics/pokemon/stunfisk/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/stunfisk/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/stunfisk/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/stunfisk/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/stunfisk/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/tauros/{paldean_aqua_breed => paldea_aqua}/back.png (100%) rename graphics/pokemon/tauros/{paldean_aqua_breed => paldea_aqua}/front.png (100%) rename graphics/pokemon/tauros/{paldean_aqua_breed => paldea_aqua}/icon.png (100%) rename graphics/pokemon/tauros/{paldean_aqua_breed => paldea_aqua}/normal.pal (100%) rename graphics/pokemon/tauros/{paldean_aqua_breed => paldea_aqua}/overworld.png (100%) rename graphics/pokemon/tauros/{paldean_aqua_breed => paldea_aqua}/overworld_normal.pal (100%) rename graphics/pokemon/tauros/{paldean_aqua_breed => paldea_aqua}/overworld_shiny.pal (100%) rename graphics/pokemon/tauros/{paldean_aqua_breed => paldea_aqua}/shiny.pal (100%) rename graphics/pokemon/tauros/{paldean_blaze_breed => paldea_blaze}/back.png (100%) rename graphics/pokemon/tauros/{paldean_blaze_breed => paldea_blaze}/front.png (100%) rename graphics/pokemon/tauros/{paldean_blaze_breed => paldea_blaze}/icon.png (100%) rename graphics/pokemon/tauros/{paldean_blaze_breed => paldea_blaze}/normal.pal (100%) rename graphics/pokemon/tauros/{paldean_blaze_breed => paldea_blaze}/overworld.png (100%) rename graphics/pokemon/tauros/{paldean_blaze_breed => paldea_blaze}/overworld_normal.pal (100%) rename graphics/pokemon/tauros/{paldean_blaze_breed => paldea_blaze}/overworld_shiny.pal (100%) rename graphics/pokemon/tauros/{paldean_blaze_breed => paldea_blaze}/shiny.pal (100%) rename graphics/pokemon/tauros/{paldean_combat_breed => paldea_combat}/back.png (100%) rename graphics/pokemon/tauros/{paldean_combat_breed => paldea_combat}/front.png (100%) rename graphics/pokemon/tauros/{paldean_combat_breed => paldea_combat}/icon.png (100%) rename graphics/pokemon/tauros/{paldean_combat_breed => paldea_combat}/normal.pal (100%) rename graphics/pokemon/tauros/{paldean_combat_breed => paldea_combat}/overworld.png (100%) rename graphics/pokemon/tauros/{paldean_combat_breed => paldea_combat}/overworld_normal.pal (100%) rename graphics/pokemon/tauros/{paldean_combat_breed => paldea_combat}/overworld_shiny.pal (100%) rename graphics/pokemon/tauros/{paldean_combat_breed => paldea_combat}/shiny.pal (100%) rename graphics/pokemon/toxtricity/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/toxtricity/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/toxtricity/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/toxtricity/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/toxtricity/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/typhlosion/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/typhlosion/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/typhlosion/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/typhlosion/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/typhlosion/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/typhlosion/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/typhlosion/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/typhlosion/{hisuian => hisui}/shiny.pal (100%) rename graphics/pokemon/unown/{exclamation_mark => exclamation}/back.png (100%) rename graphics/pokemon/unown/{exclamation_mark => exclamation}/front.png (100%) rename graphics/pokemon/unown/{exclamation_mark => exclamation}/icon.png (100%) rename graphics/pokemon/unown/{exclamation_mark => exclamation}/overworld.png (100%) rename graphics/pokemon/unown/{question_mark => question}/back.png (100%) rename graphics/pokemon/unown/{question_mark => question}/front.png (100%) rename graphics/pokemon/unown/{question_mark => question}/icon.png (100%) rename graphics/pokemon/unown/{question_mark => question}/overworld.png (100%) rename graphics/pokemon/urshifu/{rapid_strike_style => rapid_strike}/back.png (100%) rename graphics/pokemon/urshifu/{rapid_strike_style => rapid_strike}/front.png (100%) rename graphics/pokemon/urshifu/{rapid_strike_style => rapid_strike}/normal.pal (100%) rename graphics/pokemon/urshifu/{rapid_strike_style => rapid_strike}/shiny.pal (100%) rename graphics/pokemon/urshifu/{rapid_strike_style_gigantamax => rapid_strike_gmax}/back.png (100%) rename graphics/pokemon/urshifu/{rapid_strike_style_gigantamax => rapid_strike_gmax}/front.png (100%) rename graphics/pokemon/urshifu/{rapid_strike_style_gigantamax => rapid_strike_gmax}/icon.png (100%) rename graphics/pokemon/urshifu/{rapid_strike_style_gigantamax => rapid_strike_gmax}/normal.pal (100%) rename graphics/pokemon/urshifu/{rapid_strike_style_gigantamax => rapid_strike_gmax}/shiny.pal (100%) rename graphics/pokemon/urshifu/{single_strike_style_gigantamax => single_strike_gmax}/back.png (100%) rename graphics/pokemon/urshifu/{single_strike_style_gigantamax => single_strike_gmax}/front.png (100%) rename graphics/pokemon/urshifu/{single_strike_style_gigantamax => single_strike_gmax}/icon.png (100%) rename graphics/pokemon/urshifu/{single_strike_style_gigantamax => single_strike_gmax}/normal.pal (100%) rename graphics/pokemon/urshifu/{single_strike_style_gigantamax => single_strike_gmax}/shiny.pal (100%) rename graphics/pokemon/venusaur/{gigantamax => gmax}/back.png (100%) rename graphics/pokemon/venusaur/{gigantamax => gmax}/front.png (100%) rename graphics/pokemon/venusaur/{gigantamax => gmax}/icon.png (100%) rename graphics/pokemon/venusaur/{gigantamax => gmax}/normal.pal (100%) rename graphics/pokemon/venusaur/{gigantamax => gmax}/shiny.pal (100%) rename graphics/pokemon/voltorb/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/voltorb/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/voltorb/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/voltorb/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/voltorb/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/voltorb/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/voltorb/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/voltorb/{hisuian => hisui}/shiny.pal (100%) rename graphics/pokemon/vulpix/{alolan => alola}/back.png (100%) rename graphics/pokemon/vulpix/{alolan => alola}/front.png (100%) rename graphics/pokemon/vulpix/{alolan => alola}/icon.png (100%) rename graphics/pokemon/vulpix/{alolan => alola}/normal.pal (100%) rename graphics/pokemon/vulpix/{alolan => alola}/overworld.png (100%) rename graphics/pokemon/vulpix/{alolan => alola}/overworld_normal.pal (100%) rename graphics/pokemon/vulpix/{alolan => alola}/overworld_shiny.pal (100%) rename graphics/pokemon/vulpix/{alolan => alola}/shiny.pal (100%) rename graphics/pokemon/weezing/{galarian => galar}/back.png (100%) rename graphics/pokemon/weezing/{galarian => galar}/front.png (100%) rename graphics/pokemon/weezing/{galarian => galar}/icon.png (100%) rename graphics/pokemon/weezing/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/weezing/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/weezing/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/weezing/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/weezing/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/wooper/{wooper_paldean => paldea}/back.png (100%) rename graphics/pokemon/wooper/{wooper_paldean => paldea}/front.png (100%) rename graphics/pokemon/wooper/{wooper_paldean => paldea}/icon.png (100%) rename graphics/pokemon/wooper/{wooper_paldean => paldea}/normal.pal (100%) rename graphics/pokemon/wooper/{wooper_paldean => paldea}/overworld.png (100%) rename graphics/pokemon/wooper/{wooper_paldean => paldea}/overworld_normal.pal (100%) rename graphics/pokemon/wooper/{wooper_paldean => paldea}/overworld_shiny.pal (100%) rename graphics/pokemon/wooper/{wooper_paldean => paldea}/shiny.pal (100%) rename graphics/pokemon/wormadam/{plant => }/footprint.png (100%) rename graphics/pokemon/wormadam/{sandy_cloak => sandy}/anim_front.png (100%) rename graphics/pokemon/wormadam/{sandy_cloak => sandy}/back.png (100%) rename graphics/pokemon/wormadam/{sandy_cloak => sandy}/icon.png (100%) rename graphics/pokemon/wormadam/{sandy_cloak => sandy}/normal.pal (100%) rename graphics/pokemon/wormadam/{sandy_cloak => sandy}/overworld.png (100%) rename graphics/pokemon/wormadam/{sandy_cloak => sandy}/overworld_normal.pal (100%) rename graphics/pokemon/wormadam/{sandy_cloak => sandy}/overworld_shiny.pal (100%) rename graphics/pokemon/wormadam/{sandy_cloak => sandy}/shiny.pal (100%) rename graphics/pokemon/wormadam/{trash_cloak => trash}/anim_front.png (100%) rename graphics/pokemon/wormadam/{trash_cloak => trash}/back.png (100%) rename graphics/pokemon/wormadam/{trash_cloak => trash}/icon.png (100%) rename graphics/pokemon/wormadam/{trash_cloak => trash}/normal.pal (100%) rename graphics/pokemon/wormadam/{trash_cloak => trash}/overworld.png (100%) rename graphics/pokemon/wormadam/{trash_cloak => trash}/overworld_normal.pal (100%) rename graphics/pokemon/wormadam/{trash_cloak => trash}/overworld_shiny.pal (100%) rename graphics/pokemon/wormadam/{trash_cloak => trash}/shiny.pal (100%) rename graphics/pokemon/yamask/{galarian => galar}/back.png (100%) rename graphics/pokemon/yamask/{galarian => galar}/front.png (100%) rename graphics/pokemon/yamask/{galarian => galar}/icon.png (100%) rename graphics/pokemon/yamask/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/yamask/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/yamask/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/yamask/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/yamask/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/zapdos/{galarian => galar}/back.png (100%) rename graphics/pokemon/zapdos/{galarian => galar}/front.png (100%) rename graphics/pokemon/zapdos/{galarian => galar}/icon.png (100%) rename graphics/pokemon/zapdos/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/zapdos/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/zapdos/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/zapdos/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/zapdos/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/zigzagoon/{galarian => galar}/back.png (100%) rename graphics/pokemon/zigzagoon/{galarian => galar}/front.png (100%) rename graphics/pokemon/zigzagoon/{galarian => galar}/icon.png (100%) rename graphics/pokemon/zigzagoon/{galarian => galar}/normal.pal (100%) rename graphics/pokemon/zigzagoon/{galarian => galar}/overworld.png (100%) rename graphics/pokemon/zigzagoon/{galarian => galar}/overworld_normal.pal (100%) rename graphics/pokemon/zigzagoon/{galarian => galar}/overworld_shiny.pal (100%) rename graphics/pokemon/zigzagoon/{galarian => galar}/shiny.pal (100%) rename graphics/pokemon/zoroark/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/zoroark/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/zoroark/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/zoroark/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/zoroark/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/zoroark/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/zoroark/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/zoroark/{hisuian => hisui}/shiny.pal (100%) rename graphics/pokemon/zorua/{hisuian => hisui}/back.png (100%) rename graphics/pokemon/zorua/{hisuian => hisui}/front.png (100%) rename graphics/pokemon/zorua/{hisuian => hisui}/icon.png (100%) rename graphics/pokemon/zorua/{hisuian => hisui}/normal.pal (100%) rename graphics/pokemon/zorua/{hisuian => hisui}/overworld.png (100%) rename graphics/pokemon/zorua/{hisuian => hisui}/overworld_normal.pal (100%) rename graphics/pokemon/zorua/{hisuian => hisui}/overworld_shiny.pal (100%) rename graphics/pokemon/zorua/{hisuian => hisui}/shiny.pal (100%) rename sound/direct_sound_samples/cries/{calyrex_ice_rider.aif => calyrex_ice.aif} (100%) rename sound/direct_sound_samples/cries/{calyrex_shadow_rider.aif => calyrex_shadow.aif} (100%) rename sound/direct_sound_samples/cries/{floette_eternal_flower.aif => floette_eternal.aif} (100%) rename sound/direct_sound_samples/cries/{maushold_family_of_four.aif => maushold_four.aif} (100%) rename sound/direct_sound_samples/cries/{maushold_family_of_three.aif => maushold_three.aif} (100%) rename sound/direct_sound_samples/cries/{oinkologne_female.aif => oinkologne_f.aif} (100%) rename sound/direct_sound_samples/cries/{oinkologne_male.aif => oinkologne_m.aif} (100%) rename sound/direct_sound_samples/cries/{slowpoke_galarian.aif => slowpoke_galar.aif} (100%) rename sound/direct_sound_samples/cries/{urshifu_rapid_strike_style.aif => urshifu_rapid_strike.aif} (100%) rename sound/direct_sound_samples/cries/{urshifu_single_strike_style.aif => urshifu_single_strike.aif} (100%) diff --git a/dev_scripts/competitive_defines/rename_subfolders.py b/dev_scripts/competitive_defines/rename_subfolders.py new file mode 100644 index 0000000000..5b818b5f7d --- /dev/null +++ b/dev_scripts/competitive_defines/rename_subfolders.py @@ -0,0 +1,21 @@ +import glob +import re +import json +import os +import subprocess + +def rename_subdirs(rootDir, old, new): + for root, dirs, files in os.walk(rootDir): + for name in files: + originalName = os.path.join(root, name) + if root.endswith(old) and os.path.isfile(originalName): + newName = originalName.replace(old + '/', new + '/') + print(originalName + " -> " + newName) + if (not os.path.isdir(root.replace(old, '') + new)): + os.mkdir(root.replace(old, '') + new) + os.rename(originalName, newName) + +rename_subdirs("graphics/pokemon", '/alolan', "/alola") +rename_subdirs("graphics/pokemon", '/galarian', "/galar") +rename_subdirs("graphics/pokemon", '/hisuian', "/hisui") +rename_subdirs("graphics/pokemon", '/gigantamax', "/gmax") diff --git a/graphics/pokemon/alcremie/gigantamax/back.png b/graphics/pokemon/alcremie/gmax/back.png similarity index 100% rename from graphics/pokemon/alcremie/gigantamax/back.png rename to graphics/pokemon/alcremie/gmax/back.png diff --git a/graphics/pokemon/alcremie/gigantamax/front.png b/graphics/pokemon/alcremie/gmax/front.png similarity index 100% rename from graphics/pokemon/alcremie/gigantamax/front.png rename to graphics/pokemon/alcremie/gmax/front.png diff --git a/graphics/pokemon/alcremie/gigantamax/icon.png b/graphics/pokemon/alcremie/gmax/icon.png similarity index 100% rename from graphics/pokemon/alcremie/gigantamax/icon.png rename to graphics/pokemon/alcremie/gmax/icon.png diff --git a/graphics/pokemon/alcremie/gigantamax/normal.pal b/graphics/pokemon/alcremie/gmax/normal.pal similarity index 100% rename from graphics/pokemon/alcremie/gigantamax/normal.pal rename to graphics/pokemon/alcremie/gmax/normal.pal diff --git a/graphics/pokemon/alcremie/gigantamax/shiny.pal b/graphics/pokemon/alcremie/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/alcremie/gigantamax/shiny.pal rename to graphics/pokemon/alcremie/gmax/shiny.pal diff --git a/graphics/pokemon/appletun/gigantamax/back.png b/graphics/pokemon/appletun/gmax/back.png similarity index 100% rename from graphics/pokemon/appletun/gigantamax/back.png rename to graphics/pokemon/appletun/gmax/back.png diff --git a/graphics/pokemon/appletun/gigantamax/front.png b/graphics/pokemon/appletun/gmax/front.png similarity index 100% rename from graphics/pokemon/appletun/gigantamax/front.png rename to graphics/pokemon/appletun/gmax/front.png diff --git a/graphics/pokemon/appletun/gigantamax/icon.png b/graphics/pokemon/appletun/gmax/icon.png similarity index 100% rename from graphics/pokemon/appletun/gigantamax/icon.png rename to graphics/pokemon/appletun/gmax/icon.png diff --git a/graphics/pokemon/appletun/gigantamax/normal.pal b/graphics/pokemon/appletun/gmax/normal.pal similarity index 100% rename from graphics/pokemon/appletun/gigantamax/normal.pal rename to graphics/pokemon/appletun/gmax/normal.pal diff --git a/graphics/pokemon/appletun/gigantamax/shiny.pal b/graphics/pokemon/appletun/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/appletun/gigantamax/shiny.pal rename to graphics/pokemon/appletun/gmax/shiny.pal diff --git a/graphics/pokemon/arcanine/hisuian/back.png b/graphics/pokemon/arcanine/hisui/back.png similarity index 100% rename from graphics/pokemon/arcanine/hisuian/back.png rename to graphics/pokemon/arcanine/hisui/back.png diff --git a/graphics/pokemon/arcanine/hisuian/front.png b/graphics/pokemon/arcanine/hisui/front.png similarity index 100% rename from graphics/pokemon/arcanine/hisuian/front.png rename to graphics/pokemon/arcanine/hisui/front.png diff --git a/graphics/pokemon/arcanine/hisuian/icon.png b/graphics/pokemon/arcanine/hisui/icon.png similarity index 100% rename from graphics/pokemon/arcanine/hisuian/icon.png rename to graphics/pokemon/arcanine/hisui/icon.png diff --git a/graphics/pokemon/arcanine/hisuian/normal.pal b/graphics/pokemon/arcanine/hisui/normal.pal similarity index 100% rename from graphics/pokemon/arcanine/hisuian/normal.pal rename to graphics/pokemon/arcanine/hisui/normal.pal diff --git a/graphics/pokemon/arcanine/hisuian/overworld.png b/graphics/pokemon/arcanine/hisui/overworld.png similarity index 100% rename from graphics/pokemon/arcanine/hisuian/overworld.png rename to graphics/pokemon/arcanine/hisui/overworld.png diff --git a/graphics/pokemon/arcanine/hisuian/overworld_normal.pal b/graphics/pokemon/arcanine/hisui/overworld_normal.pal similarity index 100% rename from graphics/pokemon/arcanine/hisuian/overworld_normal.pal rename to graphics/pokemon/arcanine/hisui/overworld_normal.pal diff --git a/graphics/pokemon/arcanine/hisuian/overworld_shiny.pal b/graphics/pokemon/arcanine/hisui/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/arcanine/hisuian/overworld_shiny.pal rename to graphics/pokemon/arcanine/hisui/overworld_shiny.pal diff --git a/graphics/pokemon/arcanine/hisuian/shiny.pal b/graphics/pokemon/arcanine/hisui/shiny.pal similarity index 100% rename from graphics/pokemon/arcanine/hisuian/shiny.pal rename to graphics/pokemon/arcanine/hisui/shiny.pal diff --git a/graphics/pokemon/articuno/galarian/back.png b/graphics/pokemon/articuno/galar/back.png similarity index 100% rename from graphics/pokemon/articuno/galarian/back.png rename to graphics/pokemon/articuno/galar/back.png diff --git a/graphics/pokemon/articuno/galarian/front.png b/graphics/pokemon/articuno/galar/front.png similarity index 100% rename from graphics/pokemon/articuno/galarian/front.png rename to graphics/pokemon/articuno/galar/front.png diff --git a/graphics/pokemon/articuno/galarian/icon.png b/graphics/pokemon/articuno/galar/icon.png similarity index 100% rename from graphics/pokemon/articuno/galarian/icon.png rename to graphics/pokemon/articuno/galar/icon.png diff --git a/graphics/pokemon/articuno/galarian/normal.pal b/graphics/pokemon/articuno/galar/normal.pal similarity index 100% rename from graphics/pokemon/articuno/galarian/normal.pal rename to graphics/pokemon/articuno/galar/normal.pal diff --git a/graphics/pokemon/articuno/galarian/overworld.png b/graphics/pokemon/articuno/galar/overworld.png similarity index 100% rename from graphics/pokemon/articuno/galarian/overworld.png rename to graphics/pokemon/articuno/galar/overworld.png diff --git a/graphics/pokemon/articuno/galarian/overworld_normal.pal b/graphics/pokemon/articuno/galar/overworld_normal.pal similarity index 100% rename from graphics/pokemon/articuno/galarian/overworld_normal.pal rename to graphics/pokemon/articuno/galar/overworld_normal.pal diff --git a/graphics/pokemon/articuno/galarian/overworld_shiny.pal b/graphics/pokemon/articuno/galar/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/articuno/galarian/overworld_shiny.pal rename to graphics/pokemon/articuno/galar/overworld_shiny.pal diff --git a/graphics/pokemon/articuno/galarian/shiny.pal b/graphics/pokemon/articuno/galar/shiny.pal similarity index 100% rename from graphics/pokemon/articuno/galarian/shiny.pal rename to graphics/pokemon/articuno/galar/shiny.pal diff --git a/graphics/pokemon/avalugg/hisuian/back.png b/graphics/pokemon/avalugg/hisui/back.png similarity index 100% rename from graphics/pokemon/avalugg/hisuian/back.png rename to graphics/pokemon/avalugg/hisui/back.png diff --git a/graphics/pokemon/avalugg/hisuian/front.png b/graphics/pokemon/avalugg/hisui/front.png similarity index 100% rename from graphics/pokemon/avalugg/hisuian/front.png rename to graphics/pokemon/avalugg/hisui/front.png diff --git a/graphics/pokemon/avalugg/hisuian/icon.png b/graphics/pokemon/avalugg/hisui/icon.png similarity index 100% rename from graphics/pokemon/avalugg/hisuian/icon.png rename to graphics/pokemon/avalugg/hisui/icon.png diff --git a/graphics/pokemon/avalugg/hisuian/normal.pal b/graphics/pokemon/avalugg/hisui/normal.pal similarity index 100% rename from graphics/pokemon/avalugg/hisuian/normal.pal rename to graphics/pokemon/avalugg/hisui/normal.pal diff --git a/graphics/pokemon/avalugg/hisuian/overworld.png b/graphics/pokemon/avalugg/hisui/overworld.png similarity index 100% rename from graphics/pokemon/avalugg/hisuian/overworld.png rename to graphics/pokemon/avalugg/hisui/overworld.png diff --git a/graphics/pokemon/avalugg/hisuian/overworld_normal.pal b/graphics/pokemon/avalugg/hisui/overworld_normal.pal similarity index 100% rename from graphics/pokemon/avalugg/hisuian/overworld_normal.pal rename to graphics/pokemon/avalugg/hisui/overworld_normal.pal diff --git a/graphics/pokemon/avalugg/hisuian/overworld_shiny.pal b/graphics/pokemon/avalugg/hisui/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/avalugg/hisuian/overworld_shiny.pal rename to graphics/pokemon/avalugg/hisui/overworld_shiny.pal diff --git a/graphics/pokemon/avalugg/hisuian/shiny.pal b/graphics/pokemon/avalugg/hisui/shiny.pal similarity index 100% rename from graphics/pokemon/avalugg/hisuian/shiny.pal rename to graphics/pokemon/avalugg/hisui/shiny.pal diff --git a/graphics/pokemon/basculegion/female/back.png b/graphics/pokemon/basculegion/f/back.png similarity index 100% rename from graphics/pokemon/basculegion/female/back.png rename to graphics/pokemon/basculegion/f/back.png diff --git a/graphics/pokemon/basculegion/female/front.png b/graphics/pokemon/basculegion/f/front.png similarity index 100% rename from graphics/pokemon/basculegion/female/front.png rename to graphics/pokemon/basculegion/f/front.png diff --git a/graphics/pokemon/basculegion/female/icon.png b/graphics/pokemon/basculegion/f/icon.png similarity index 100% rename from graphics/pokemon/basculegion/female/icon.png rename to graphics/pokemon/basculegion/f/icon.png diff --git a/graphics/pokemon/basculegion/female/normal.pal b/graphics/pokemon/basculegion/f/normal.pal similarity index 100% rename from graphics/pokemon/basculegion/female/normal.pal rename to graphics/pokemon/basculegion/f/normal.pal diff --git a/graphics/pokemon/basculegion/female/overworld.png b/graphics/pokemon/basculegion/f/overworld.png similarity index 100% rename from graphics/pokemon/basculegion/female/overworld.png rename to graphics/pokemon/basculegion/f/overworld.png diff --git a/graphics/pokemon/basculegion/female/overworld_normal.pal b/graphics/pokemon/basculegion/f/overworld_normal.pal similarity index 100% rename from graphics/pokemon/basculegion/female/overworld_normal.pal rename to graphics/pokemon/basculegion/f/overworld_normal.pal diff --git a/graphics/pokemon/basculegion/female/overworld_shiny.pal b/graphics/pokemon/basculegion/f/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/basculegion/female/overworld_shiny.pal rename to graphics/pokemon/basculegion/f/overworld_shiny.pal diff --git a/graphics/pokemon/basculegion/female/shiny.pal b/graphics/pokemon/basculegion/f/shiny.pal similarity index 100% rename from graphics/pokemon/basculegion/female/shiny.pal rename to graphics/pokemon/basculegion/f/shiny.pal diff --git a/graphics/pokemon/basculin/hisuian/overworld.png b/graphics/pokemon/basculin/hisui/overworld.png similarity index 100% rename from graphics/pokemon/basculin/hisuian/overworld.png rename to graphics/pokemon/basculin/hisui/overworld.png diff --git a/graphics/pokemon/basculin/hisuian/overworld_normal.pal b/graphics/pokemon/basculin/hisui/overworld_normal.pal similarity index 100% rename from graphics/pokemon/basculin/hisuian/overworld_normal.pal rename to graphics/pokemon/basculin/hisui/overworld_normal.pal diff --git a/graphics/pokemon/blastoise/gigantamax/back.png b/graphics/pokemon/blastoise/gmax/back.png similarity index 100% rename from graphics/pokemon/blastoise/gigantamax/back.png rename to graphics/pokemon/blastoise/gmax/back.png diff --git a/graphics/pokemon/blastoise/gigantamax/front.png b/graphics/pokemon/blastoise/gmax/front.png similarity index 100% rename from graphics/pokemon/blastoise/gigantamax/front.png rename to graphics/pokemon/blastoise/gmax/front.png diff --git a/graphics/pokemon/blastoise/gigantamax/icon.png b/graphics/pokemon/blastoise/gmax/icon.png similarity index 100% rename from graphics/pokemon/blastoise/gigantamax/icon.png rename to graphics/pokemon/blastoise/gmax/icon.png diff --git a/graphics/pokemon/blastoise/gigantamax/normal.pal b/graphics/pokemon/blastoise/gmax/normal.pal similarity index 100% rename from graphics/pokemon/blastoise/gigantamax/normal.pal rename to graphics/pokemon/blastoise/gmax/normal.pal diff --git a/graphics/pokemon/blastoise/gigantamax/shiny.pal b/graphics/pokemon/blastoise/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/blastoise/gigantamax/shiny.pal rename to graphics/pokemon/blastoise/gmax/shiny.pal diff --git a/graphics/pokemon/braviary/hisuian/back.png b/graphics/pokemon/braviary/hisui/back.png similarity index 100% rename from graphics/pokemon/braviary/hisuian/back.png rename to graphics/pokemon/braviary/hisui/back.png diff --git a/graphics/pokemon/braviary/hisuian/front.png b/graphics/pokemon/braviary/hisui/front.png similarity index 100% rename from graphics/pokemon/braviary/hisuian/front.png rename to graphics/pokemon/braviary/hisui/front.png diff --git a/graphics/pokemon/braviary/hisuian/icon.png b/graphics/pokemon/braviary/hisui/icon.png similarity index 100% rename from graphics/pokemon/braviary/hisuian/icon.png rename to graphics/pokemon/braviary/hisui/icon.png diff --git a/graphics/pokemon/braviary/hisuian/normal.pal b/graphics/pokemon/braviary/hisui/normal.pal similarity index 100% rename from graphics/pokemon/braviary/hisuian/normal.pal rename to graphics/pokemon/braviary/hisui/normal.pal diff --git a/graphics/pokemon/braviary/hisuian/overworld.png b/graphics/pokemon/braviary/hisui/overworld.png similarity index 100% rename from graphics/pokemon/braviary/hisuian/overworld.png rename to graphics/pokemon/braviary/hisui/overworld.png diff --git a/graphics/pokemon/braviary/hisuian/overworld_normal.pal b/graphics/pokemon/braviary/hisui/overworld_normal.pal similarity index 100% rename from graphics/pokemon/braviary/hisuian/overworld_normal.pal rename to graphics/pokemon/braviary/hisui/overworld_normal.pal diff --git a/graphics/pokemon/braviary/hisuian/overworld_shiny.pal b/graphics/pokemon/braviary/hisui/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/braviary/hisuian/overworld_shiny.pal rename to graphics/pokemon/braviary/hisui/overworld_shiny.pal diff --git a/graphics/pokemon/braviary/hisuian/shiny.pal b/graphics/pokemon/braviary/hisui/shiny.pal similarity index 100% rename from graphics/pokemon/braviary/hisuian/shiny.pal rename to graphics/pokemon/braviary/hisui/shiny.pal diff --git a/graphics/pokemon/burmy/plant/footprint.png b/graphics/pokemon/burmy/footprint.png similarity index 100% rename from graphics/pokemon/burmy/plant/footprint.png rename to graphics/pokemon/burmy/footprint.png diff --git a/graphics/pokemon/burmy/sandy_cloak/anim_front.png b/graphics/pokemon/burmy/sandy/anim_front.png similarity index 100% rename from graphics/pokemon/burmy/sandy_cloak/anim_front.png rename to graphics/pokemon/burmy/sandy/anim_front.png diff --git a/graphics/pokemon/burmy/sandy_cloak/back.png b/graphics/pokemon/burmy/sandy/back.png similarity index 100% rename from graphics/pokemon/burmy/sandy_cloak/back.png rename to graphics/pokemon/burmy/sandy/back.png diff --git a/graphics/pokemon/burmy/sandy_cloak/icon.png b/graphics/pokemon/burmy/sandy/icon.png similarity index 100% rename from graphics/pokemon/burmy/sandy_cloak/icon.png rename to graphics/pokemon/burmy/sandy/icon.png diff --git a/graphics/pokemon/burmy/sandy_cloak/normal.pal b/graphics/pokemon/burmy/sandy/normal.pal similarity index 100% rename from graphics/pokemon/burmy/sandy_cloak/normal.pal rename to graphics/pokemon/burmy/sandy/normal.pal diff --git a/graphics/pokemon/burmy/sandy_cloak/overworld.png b/graphics/pokemon/burmy/sandy/overworld.png similarity index 100% rename from graphics/pokemon/burmy/sandy_cloak/overworld.png rename to graphics/pokemon/burmy/sandy/overworld.png diff --git a/graphics/pokemon/burmy/sandy_cloak/overworld_normal.pal b/graphics/pokemon/burmy/sandy/overworld_normal.pal similarity index 100% rename from graphics/pokemon/burmy/sandy_cloak/overworld_normal.pal rename to graphics/pokemon/burmy/sandy/overworld_normal.pal diff --git a/graphics/pokemon/burmy/sandy_cloak/overworld_shiny.pal b/graphics/pokemon/burmy/sandy/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/burmy/sandy_cloak/overworld_shiny.pal rename to graphics/pokemon/burmy/sandy/overworld_shiny.pal diff --git a/graphics/pokemon/burmy/sandy_cloak/shiny.pal b/graphics/pokemon/burmy/sandy/shiny.pal similarity index 100% rename from graphics/pokemon/burmy/sandy_cloak/shiny.pal rename to graphics/pokemon/burmy/sandy/shiny.pal diff --git a/graphics/pokemon/burmy/trash_cloak/anim_front.png b/graphics/pokemon/burmy/trash/anim_front.png similarity index 100% rename from graphics/pokemon/burmy/trash_cloak/anim_front.png rename to graphics/pokemon/burmy/trash/anim_front.png diff --git a/graphics/pokemon/burmy/trash_cloak/back.png b/graphics/pokemon/burmy/trash/back.png similarity index 100% rename from graphics/pokemon/burmy/trash_cloak/back.png rename to graphics/pokemon/burmy/trash/back.png diff --git a/graphics/pokemon/burmy/trash_cloak/icon.png b/graphics/pokemon/burmy/trash/icon.png similarity index 100% rename from graphics/pokemon/burmy/trash_cloak/icon.png rename to graphics/pokemon/burmy/trash/icon.png diff --git a/graphics/pokemon/burmy/trash_cloak/normal.pal b/graphics/pokemon/burmy/trash/normal.pal similarity index 100% rename from graphics/pokemon/burmy/trash_cloak/normal.pal rename to graphics/pokemon/burmy/trash/normal.pal diff --git a/graphics/pokemon/burmy/trash_cloak/overworld.png b/graphics/pokemon/burmy/trash/overworld.png similarity index 100% rename from graphics/pokemon/burmy/trash_cloak/overworld.png rename to graphics/pokemon/burmy/trash/overworld.png diff --git a/graphics/pokemon/burmy/trash_cloak/overworld_normal.pal b/graphics/pokemon/burmy/trash/overworld_normal.pal similarity index 100% rename from graphics/pokemon/burmy/trash_cloak/overworld_normal.pal rename to graphics/pokemon/burmy/trash/overworld_normal.pal diff --git a/graphics/pokemon/burmy/trash_cloak/overworld_shiny.pal b/graphics/pokemon/burmy/trash/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/burmy/trash_cloak/overworld_shiny.pal rename to graphics/pokemon/burmy/trash/overworld_shiny.pal diff --git a/graphics/pokemon/burmy/trash_cloak/shiny.pal b/graphics/pokemon/burmy/trash/shiny.pal similarity index 100% rename from graphics/pokemon/burmy/trash_cloak/shiny.pal rename to graphics/pokemon/burmy/trash/shiny.pal diff --git a/graphics/pokemon/butterfree/gigantamax/back.png b/graphics/pokemon/butterfree/gmax/back.png similarity index 100% rename from graphics/pokemon/butterfree/gigantamax/back.png rename to graphics/pokemon/butterfree/gmax/back.png diff --git a/graphics/pokemon/butterfree/gigantamax/front.png b/graphics/pokemon/butterfree/gmax/front.png similarity index 100% rename from graphics/pokemon/butterfree/gigantamax/front.png rename to graphics/pokemon/butterfree/gmax/front.png diff --git a/graphics/pokemon/butterfree/gigantamax/icon.png b/graphics/pokemon/butterfree/gmax/icon.png similarity index 100% rename from graphics/pokemon/butterfree/gigantamax/icon.png rename to graphics/pokemon/butterfree/gmax/icon.png diff --git a/graphics/pokemon/butterfree/gigantamax/normal.pal b/graphics/pokemon/butterfree/gmax/normal.pal similarity index 100% rename from graphics/pokemon/butterfree/gigantamax/normal.pal rename to graphics/pokemon/butterfree/gmax/normal.pal diff --git a/graphics/pokemon/butterfree/gigantamax/shiny.pal b/graphics/pokemon/butterfree/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/butterfree/gigantamax/shiny.pal rename to graphics/pokemon/butterfree/gmax/shiny.pal diff --git a/graphics/pokemon/calyrex/ice_rider/back.png b/graphics/pokemon/calyrex/ice/back.png similarity index 100% rename from graphics/pokemon/calyrex/ice_rider/back.png rename to graphics/pokemon/calyrex/ice/back.png diff --git a/graphics/pokemon/calyrex/ice_rider/front.png b/graphics/pokemon/calyrex/ice/front.png similarity index 100% rename from graphics/pokemon/calyrex/ice_rider/front.png rename to graphics/pokemon/calyrex/ice/front.png diff --git a/graphics/pokemon/calyrex/ice_rider/icon.png b/graphics/pokemon/calyrex/ice/icon.png similarity index 100% rename from graphics/pokemon/calyrex/ice_rider/icon.png rename to graphics/pokemon/calyrex/ice/icon.png diff --git a/graphics/pokemon/calyrex/ice_rider/normal.pal b/graphics/pokemon/calyrex/ice/normal.pal similarity index 100% rename from graphics/pokemon/calyrex/ice_rider/normal.pal rename to graphics/pokemon/calyrex/ice/normal.pal diff --git a/graphics/pokemon/calyrex/ice_rider/overworld.png b/graphics/pokemon/calyrex/ice/overworld.png similarity index 100% rename from graphics/pokemon/calyrex/ice_rider/overworld.png rename to graphics/pokemon/calyrex/ice/overworld.png diff --git a/graphics/pokemon/calyrex/ice_rider/overworld_normal.pal b/graphics/pokemon/calyrex/ice/overworld_normal.pal similarity index 100% rename from graphics/pokemon/calyrex/ice_rider/overworld_normal.pal rename to graphics/pokemon/calyrex/ice/overworld_normal.pal diff --git a/graphics/pokemon/calyrex/ice_rider/overworld_shiny.pal b/graphics/pokemon/calyrex/ice/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/calyrex/ice_rider/overworld_shiny.pal rename to graphics/pokemon/calyrex/ice/overworld_shiny.pal diff --git a/graphics/pokemon/calyrex/ice_rider/shiny.pal b/graphics/pokemon/calyrex/ice/shiny.pal similarity index 100% rename from graphics/pokemon/calyrex/ice_rider/shiny.pal rename to graphics/pokemon/calyrex/ice/shiny.pal diff --git a/graphics/pokemon/calyrex/shadow_rider/back.png b/graphics/pokemon/calyrex/shadow/back.png similarity index 100% rename from graphics/pokemon/calyrex/shadow_rider/back.png rename to graphics/pokemon/calyrex/shadow/back.png diff --git a/graphics/pokemon/calyrex/shadow_rider/front.png b/graphics/pokemon/calyrex/shadow/front.png similarity index 100% rename from graphics/pokemon/calyrex/shadow_rider/front.png rename to graphics/pokemon/calyrex/shadow/front.png diff --git a/graphics/pokemon/calyrex/shadow_rider/icon.png b/graphics/pokemon/calyrex/shadow/icon.png similarity index 100% rename from graphics/pokemon/calyrex/shadow_rider/icon.png rename to graphics/pokemon/calyrex/shadow/icon.png diff --git a/graphics/pokemon/calyrex/shadow_rider/normal.pal b/graphics/pokemon/calyrex/shadow/normal.pal similarity index 100% rename from graphics/pokemon/calyrex/shadow_rider/normal.pal rename to graphics/pokemon/calyrex/shadow/normal.pal diff --git a/graphics/pokemon/calyrex/shadow_rider/overworld.png b/graphics/pokemon/calyrex/shadow/overworld.png similarity index 100% rename from graphics/pokemon/calyrex/shadow_rider/overworld.png rename to graphics/pokemon/calyrex/shadow/overworld.png diff --git a/graphics/pokemon/calyrex/shadow_rider/overworld_normal.pal b/graphics/pokemon/calyrex/shadow/overworld_normal.pal similarity index 100% rename from graphics/pokemon/calyrex/shadow_rider/overworld_normal.pal rename to graphics/pokemon/calyrex/shadow/overworld_normal.pal diff --git a/graphics/pokemon/calyrex/shadow_rider/overworld_shiny.pal b/graphics/pokemon/calyrex/shadow/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/calyrex/shadow_rider/overworld_shiny.pal rename to graphics/pokemon/calyrex/shadow/overworld_shiny.pal diff --git a/graphics/pokemon/calyrex/shadow_rider/shiny.pal b/graphics/pokemon/calyrex/shadow/shiny.pal similarity index 100% rename from graphics/pokemon/calyrex/shadow_rider/shiny.pal rename to graphics/pokemon/calyrex/shadow/shiny.pal diff --git a/graphics/pokemon/centiskorch/gigantamax/back.png b/graphics/pokemon/centiskorch/gmax/back.png similarity index 100% rename from graphics/pokemon/centiskorch/gigantamax/back.png rename to graphics/pokemon/centiskorch/gmax/back.png diff --git a/graphics/pokemon/centiskorch/gigantamax/front.png b/graphics/pokemon/centiskorch/gmax/front.png similarity index 100% rename from graphics/pokemon/centiskorch/gigantamax/front.png rename to graphics/pokemon/centiskorch/gmax/front.png diff --git a/graphics/pokemon/centiskorch/gigantamax/icon.png b/graphics/pokemon/centiskorch/gmax/icon.png similarity index 100% rename from graphics/pokemon/centiskorch/gigantamax/icon.png rename to graphics/pokemon/centiskorch/gmax/icon.png diff --git a/graphics/pokemon/centiskorch/gigantamax/normal.pal b/graphics/pokemon/centiskorch/gmax/normal.pal similarity index 100% rename from graphics/pokemon/centiskorch/gigantamax/normal.pal rename to graphics/pokemon/centiskorch/gmax/normal.pal diff --git a/graphics/pokemon/centiskorch/gigantamax/shiny.pal b/graphics/pokemon/centiskorch/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/centiskorch/gigantamax/shiny.pal rename to graphics/pokemon/centiskorch/gmax/shiny.pal diff --git a/graphics/pokemon/charizard/gigantamax/back.png b/graphics/pokemon/charizard/gmax/back.png similarity index 100% rename from graphics/pokemon/charizard/gigantamax/back.png rename to graphics/pokemon/charizard/gmax/back.png diff --git a/graphics/pokemon/charizard/gigantamax/front.png b/graphics/pokemon/charizard/gmax/front.png similarity index 100% rename from graphics/pokemon/charizard/gigantamax/front.png rename to graphics/pokemon/charizard/gmax/front.png diff --git a/graphics/pokemon/charizard/gigantamax/icon.png b/graphics/pokemon/charizard/gmax/icon.png similarity index 100% rename from graphics/pokemon/charizard/gigantamax/icon.png rename to graphics/pokemon/charizard/gmax/icon.png diff --git a/graphics/pokemon/charizard/gigantamax/normal.pal b/graphics/pokemon/charizard/gmax/normal.pal similarity index 100% rename from graphics/pokemon/charizard/gigantamax/normal.pal rename to graphics/pokemon/charizard/gmax/normal.pal diff --git a/graphics/pokemon/charizard/gigantamax/shiny.pal b/graphics/pokemon/charizard/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/charizard/gigantamax/shiny.pal rename to graphics/pokemon/charizard/gmax/shiny.pal diff --git a/graphics/pokemon/cinderace/gigantamax/back.png b/graphics/pokemon/cinderace/gmax/back.png similarity index 100% rename from graphics/pokemon/cinderace/gigantamax/back.png rename to graphics/pokemon/cinderace/gmax/back.png diff --git a/graphics/pokemon/cinderace/gigantamax/front.png b/graphics/pokemon/cinderace/gmax/front.png similarity index 100% rename from graphics/pokemon/cinderace/gigantamax/front.png rename to graphics/pokemon/cinderace/gmax/front.png diff --git a/graphics/pokemon/cinderace/gigantamax/icon.png b/graphics/pokemon/cinderace/gmax/icon.png similarity index 100% rename from graphics/pokemon/cinderace/gigantamax/icon.png rename to graphics/pokemon/cinderace/gmax/icon.png diff --git a/graphics/pokemon/cinderace/gigantamax/normal.pal b/graphics/pokemon/cinderace/gmax/normal.pal similarity index 100% rename from graphics/pokemon/cinderace/gigantamax/normal.pal rename to graphics/pokemon/cinderace/gmax/normal.pal diff --git a/graphics/pokemon/cinderace/gigantamax/shiny.pal b/graphics/pokemon/cinderace/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/cinderace/gigantamax/shiny.pal rename to graphics/pokemon/cinderace/gmax/shiny.pal diff --git a/graphics/pokemon/coalossal/gigantamax/back.png b/graphics/pokemon/coalossal/gmax/back.png similarity index 100% rename from graphics/pokemon/coalossal/gigantamax/back.png rename to graphics/pokemon/coalossal/gmax/back.png diff --git a/graphics/pokemon/coalossal/gigantamax/front.png b/graphics/pokemon/coalossal/gmax/front.png similarity index 100% rename from graphics/pokemon/coalossal/gigantamax/front.png rename to graphics/pokemon/coalossal/gmax/front.png diff --git a/graphics/pokemon/coalossal/gigantamax/icon.png b/graphics/pokemon/coalossal/gmax/icon.png similarity index 100% rename from graphics/pokemon/coalossal/gigantamax/icon.png rename to graphics/pokemon/coalossal/gmax/icon.png diff --git a/graphics/pokemon/coalossal/gigantamax/normal.pal b/graphics/pokemon/coalossal/gmax/normal.pal similarity index 100% rename from graphics/pokemon/coalossal/gigantamax/normal.pal rename to graphics/pokemon/coalossal/gmax/normal.pal diff --git a/graphics/pokemon/coalossal/gigantamax/shiny.pal b/graphics/pokemon/coalossal/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/coalossal/gigantamax/shiny.pal rename to graphics/pokemon/coalossal/gmax/shiny.pal diff --git a/graphics/pokemon/copperajah/gigantamax/back.png b/graphics/pokemon/copperajah/gmax/back.png similarity index 100% rename from graphics/pokemon/copperajah/gigantamax/back.png rename to graphics/pokemon/copperajah/gmax/back.png diff --git a/graphics/pokemon/copperajah/gigantamax/front.png b/graphics/pokemon/copperajah/gmax/front.png similarity index 100% rename from graphics/pokemon/copperajah/gigantamax/front.png rename to graphics/pokemon/copperajah/gmax/front.png diff --git a/graphics/pokemon/copperajah/gigantamax/icon.png b/graphics/pokemon/copperajah/gmax/icon.png similarity index 100% rename from graphics/pokemon/copperajah/gigantamax/icon.png rename to graphics/pokemon/copperajah/gmax/icon.png diff --git a/graphics/pokemon/copperajah/gigantamax/normal.pal b/graphics/pokemon/copperajah/gmax/normal.pal similarity index 100% rename from graphics/pokemon/copperajah/gigantamax/normal.pal rename to graphics/pokemon/copperajah/gmax/normal.pal diff --git a/graphics/pokemon/copperajah/gigantamax/shiny.pal b/graphics/pokemon/copperajah/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/copperajah/gigantamax/shiny.pal rename to graphics/pokemon/copperajah/gmax/shiny.pal diff --git a/graphics/pokemon/corsola/galarian/back.png b/graphics/pokemon/corsola/galar/back.png similarity index 100% rename from graphics/pokemon/corsola/galarian/back.png rename to graphics/pokemon/corsola/galar/back.png diff --git a/graphics/pokemon/corsola/galarian/front.png b/graphics/pokemon/corsola/galar/front.png similarity index 100% rename from graphics/pokemon/corsola/galarian/front.png rename to graphics/pokemon/corsola/galar/front.png diff --git a/graphics/pokemon/corsola/galarian/icon.png b/graphics/pokemon/corsola/galar/icon.png similarity index 100% rename from graphics/pokemon/corsola/galarian/icon.png rename to graphics/pokemon/corsola/galar/icon.png diff --git a/graphics/pokemon/corsola/galarian/normal.pal b/graphics/pokemon/corsola/galar/normal.pal similarity index 100% rename from graphics/pokemon/corsola/galarian/normal.pal rename to graphics/pokemon/corsola/galar/normal.pal diff --git a/graphics/pokemon/corsola/galarian/overworld.png b/graphics/pokemon/corsola/galar/overworld.png similarity index 100% rename from graphics/pokemon/corsola/galarian/overworld.png rename to graphics/pokemon/corsola/galar/overworld.png diff --git a/graphics/pokemon/corsola/galarian/overworld_normal.pal b/graphics/pokemon/corsola/galar/overworld_normal.pal similarity index 100% rename from graphics/pokemon/corsola/galarian/overworld_normal.pal rename to graphics/pokemon/corsola/galar/overworld_normal.pal diff --git a/graphics/pokemon/corsola/galarian/overworld_shiny.pal b/graphics/pokemon/corsola/galar/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/corsola/galarian/overworld_shiny.pal rename to graphics/pokemon/corsola/galar/overworld_shiny.pal diff --git a/graphics/pokemon/corsola/galarian/shiny.pal b/graphics/pokemon/corsola/galar/shiny.pal similarity index 100% rename from graphics/pokemon/corsola/galarian/shiny.pal rename to graphics/pokemon/corsola/galar/shiny.pal diff --git a/graphics/pokemon/corviknight/gigantamax/back.png b/graphics/pokemon/corviknight/gmax/back.png similarity index 100% rename from graphics/pokemon/corviknight/gigantamax/back.png rename to graphics/pokemon/corviknight/gmax/back.png diff --git a/graphics/pokemon/corviknight/gigantamax/front.png b/graphics/pokemon/corviknight/gmax/front.png similarity index 100% rename from graphics/pokemon/corviknight/gigantamax/front.png rename to graphics/pokemon/corviknight/gmax/front.png diff --git a/graphics/pokemon/corviknight/gigantamax/icon.png b/graphics/pokemon/corviknight/gmax/icon.png similarity index 100% rename from graphics/pokemon/corviknight/gigantamax/icon.png rename to graphics/pokemon/corviknight/gmax/icon.png diff --git a/graphics/pokemon/corviknight/gigantamax/normal.pal b/graphics/pokemon/corviknight/gmax/normal.pal similarity index 100% rename from graphics/pokemon/corviknight/gigantamax/normal.pal rename to graphics/pokemon/corviknight/gmax/normal.pal diff --git a/graphics/pokemon/corviknight/gigantamax/shiny.pal b/graphics/pokemon/corviknight/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/corviknight/gigantamax/shiny.pal rename to graphics/pokemon/corviknight/gmax/shiny.pal diff --git a/graphics/pokemon/darmanitan/galarian/back.png b/graphics/pokemon/darmanitan/galar_standard/back.png similarity index 100% rename from graphics/pokemon/darmanitan/galarian/back.png rename to graphics/pokemon/darmanitan/galar_standard/back.png diff --git a/graphics/pokemon/darmanitan/galarian/front.png b/graphics/pokemon/darmanitan/galar_standard/front.png similarity index 100% rename from graphics/pokemon/darmanitan/galarian/front.png rename to graphics/pokemon/darmanitan/galar_standard/front.png diff --git a/graphics/pokemon/darmanitan/galarian/icon.png b/graphics/pokemon/darmanitan/galar_standard/icon.png similarity index 100% rename from graphics/pokemon/darmanitan/galarian/icon.png rename to graphics/pokemon/darmanitan/galar_standard/icon.png diff --git a/graphics/pokemon/darmanitan/galarian/normal.pal b/graphics/pokemon/darmanitan/galar_standard/normal.pal similarity index 100% rename from graphics/pokemon/darmanitan/galarian/normal.pal rename to graphics/pokemon/darmanitan/galar_standard/normal.pal diff --git a/graphics/pokemon/darmanitan/galarian/overworld.png b/graphics/pokemon/darmanitan/galar_standard/overworld.png similarity index 100% rename from graphics/pokemon/darmanitan/galarian/overworld.png rename to graphics/pokemon/darmanitan/galar_standard/overworld.png diff --git a/graphics/pokemon/darmanitan/galarian/overworld_normal.pal b/graphics/pokemon/darmanitan/galar_standard/overworld_normal.pal similarity index 100% rename from graphics/pokemon/darmanitan/galarian/overworld_normal.pal rename to graphics/pokemon/darmanitan/galar_standard/overworld_normal.pal diff --git a/graphics/pokemon/darmanitan/galarian/overworld_shiny.pal b/graphics/pokemon/darmanitan/galar_standard/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/darmanitan/galarian/overworld_shiny.pal rename to graphics/pokemon/darmanitan/galar_standard/overworld_shiny.pal diff --git a/graphics/pokemon/darmanitan/galarian/shiny.pal b/graphics/pokemon/darmanitan/galar_standard/shiny.pal similarity index 100% rename from graphics/pokemon/darmanitan/galarian/shiny.pal rename to graphics/pokemon/darmanitan/galar_standard/shiny.pal diff --git a/graphics/pokemon/darmanitan/zen_mode/galarian/back.png b/graphics/pokemon/darmanitan/galar_zen/back.png similarity index 100% rename from graphics/pokemon/darmanitan/zen_mode/galarian/back.png rename to graphics/pokemon/darmanitan/galar_zen/back.png diff --git a/graphics/pokemon/darmanitan/zen_mode/galarian/front.png b/graphics/pokemon/darmanitan/galar_zen/front.png similarity index 100% rename from graphics/pokemon/darmanitan/zen_mode/galarian/front.png rename to graphics/pokemon/darmanitan/galar_zen/front.png diff --git a/graphics/pokemon/darmanitan/zen_mode/galarian/icon.png b/graphics/pokemon/darmanitan/galar_zen/icon.png similarity index 100% rename from graphics/pokemon/darmanitan/zen_mode/galarian/icon.png rename to graphics/pokemon/darmanitan/galar_zen/icon.png diff --git a/graphics/pokemon/darmanitan/zen_mode/galarian/normal.pal b/graphics/pokemon/darmanitan/galar_zen/normal.pal similarity index 100% rename from graphics/pokemon/darmanitan/zen_mode/galarian/normal.pal rename to graphics/pokemon/darmanitan/galar_zen/normal.pal diff --git a/graphics/pokemon/darmanitan/zen_mode/galarian/shiny.pal b/graphics/pokemon/darmanitan/galar_zen/shiny.pal similarity index 100% rename from graphics/pokemon/darmanitan/zen_mode/galarian/shiny.pal rename to graphics/pokemon/darmanitan/galar_zen/shiny.pal diff --git a/graphics/pokemon/darmanitan/zen_mode/anim_front.png b/graphics/pokemon/darmanitan/zen/anim_front.png similarity index 100% rename from graphics/pokemon/darmanitan/zen_mode/anim_front.png rename to graphics/pokemon/darmanitan/zen/anim_front.png diff --git a/graphics/pokemon/darmanitan/zen_mode/back.png b/graphics/pokemon/darmanitan/zen/back.png similarity index 100% rename from graphics/pokemon/darmanitan/zen_mode/back.png rename to graphics/pokemon/darmanitan/zen/back.png diff --git a/graphics/pokemon/darmanitan/zen_mode/icon.png b/graphics/pokemon/darmanitan/zen/icon.png similarity index 100% rename from graphics/pokemon/darmanitan/zen_mode/icon.png rename to graphics/pokemon/darmanitan/zen/icon.png diff --git a/graphics/pokemon/darmanitan/zen_mode/normal.pal b/graphics/pokemon/darmanitan/zen/normal.pal similarity index 100% rename from graphics/pokemon/darmanitan/zen_mode/normal.pal rename to graphics/pokemon/darmanitan/zen/normal.pal diff --git a/graphics/pokemon/darmanitan/zen_mode/shiny.pal b/graphics/pokemon/darmanitan/zen/shiny.pal similarity index 100% rename from graphics/pokemon/darmanitan/zen_mode/shiny.pal rename to graphics/pokemon/darmanitan/zen/shiny.pal diff --git a/graphics/pokemon/darumaka/galarian/back.png b/graphics/pokemon/darumaka/galar/back.png similarity index 100% rename from graphics/pokemon/darumaka/galarian/back.png rename to graphics/pokemon/darumaka/galar/back.png diff --git a/graphics/pokemon/darumaka/galarian/front.png b/graphics/pokemon/darumaka/galar/front.png similarity index 100% rename from graphics/pokemon/darumaka/galarian/front.png rename to graphics/pokemon/darumaka/galar/front.png diff --git a/graphics/pokemon/darumaka/galarian/icon.png b/graphics/pokemon/darumaka/galar/icon.png similarity index 100% rename from graphics/pokemon/darumaka/galarian/icon.png rename to graphics/pokemon/darumaka/galar/icon.png diff --git a/graphics/pokemon/darumaka/galarian/normal.pal b/graphics/pokemon/darumaka/galar/normal.pal similarity index 100% rename from graphics/pokemon/darumaka/galarian/normal.pal rename to graphics/pokemon/darumaka/galar/normal.pal diff --git a/graphics/pokemon/darumaka/galarian/overworld.png b/graphics/pokemon/darumaka/galar/overworld.png similarity index 100% rename from graphics/pokemon/darumaka/galarian/overworld.png rename to graphics/pokemon/darumaka/galar/overworld.png diff --git a/graphics/pokemon/darumaka/galarian/overworld_normal.pal b/graphics/pokemon/darumaka/galar/overworld_normal.pal similarity index 100% rename from graphics/pokemon/darumaka/galarian/overworld_normal.pal rename to graphics/pokemon/darumaka/galar/overworld_normal.pal diff --git a/graphics/pokemon/darumaka/galarian/overworld_shiny.pal b/graphics/pokemon/darumaka/galar/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/darumaka/galarian/overworld_shiny.pal rename to graphics/pokemon/darumaka/galar/overworld_shiny.pal diff --git a/graphics/pokemon/darumaka/galarian/shiny.pal b/graphics/pokemon/darumaka/galar/shiny.pal similarity index 100% rename from graphics/pokemon/darumaka/galarian/shiny.pal rename to graphics/pokemon/darumaka/galar/shiny.pal diff --git a/graphics/pokemon/decidueye/hisuian/back.png b/graphics/pokemon/decidueye/hisui/back.png similarity index 100% rename from graphics/pokemon/decidueye/hisuian/back.png rename to graphics/pokemon/decidueye/hisui/back.png diff --git a/graphics/pokemon/decidueye/hisuian/front.png b/graphics/pokemon/decidueye/hisui/front.png similarity index 100% rename from graphics/pokemon/decidueye/hisuian/front.png rename to graphics/pokemon/decidueye/hisui/front.png diff --git a/graphics/pokemon/decidueye/hisuian/icon.png b/graphics/pokemon/decidueye/hisui/icon.png similarity index 100% rename from graphics/pokemon/decidueye/hisuian/icon.png rename to graphics/pokemon/decidueye/hisui/icon.png diff --git a/graphics/pokemon/decidueye/hisuian/normal.pal b/graphics/pokemon/decidueye/hisui/normal.pal similarity index 100% rename from graphics/pokemon/decidueye/hisuian/normal.pal rename to graphics/pokemon/decidueye/hisui/normal.pal diff --git a/graphics/pokemon/decidueye/hisuian/overworld.png b/graphics/pokemon/decidueye/hisui/overworld.png similarity index 100% rename from graphics/pokemon/decidueye/hisuian/overworld.png rename to graphics/pokemon/decidueye/hisui/overworld.png diff --git a/graphics/pokemon/decidueye/hisuian/overworld_normal.pal b/graphics/pokemon/decidueye/hisui/overworld_normal.pal similarity index 100% rename from graphics/pokemon/decidueye/hisuian/overworld_normal.pal rename to graphics/pokemon/decidueye/hisui/overworld_normal.pal diff --git a/graphics/pokemon/decidueye/hisuian/overworld_shiny.pal b/graphics/pokemon/decidueye/hisui/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/decidueye/hisuian/overworld_shiny.pal rename to graphics/pokemon/decidueye/hisui/overworld_shiny.pal diff --git a/graphics/pokemon/decidueye/hisuian/shiny.pal b/graphics/pokemon/decidueye/hisui/shiny.pal similarity index 100% rename from graphics/pokemon/decidueye/hisuian/shiny.pal rename to graphics/pokemon/decidueye/hisui/shiny.pal diff --git a/graphics/pokemon/diglett/alolan/back.png b/graphics/pokemon/diglett/alola/back.png similarity index 100% rename from graphics/pokemon/diglett/alolan/back.png rename to graphics/pokemon/diglett/alola/back.png diff --git a/graphics/pokemon/diglett/alolan/front.png b/graphics/pokemon/diglett/alola/front.png similarity index 100% rename from graphics/pokemon/diglett/alolan/front.png rename to graphics/pokemon/diglett/alola/front.png diff --git a/graphics/pokemon/diglett/alolan/icon.png b/graphics/pokemon/diglett/alola/icon.png similarity index 100% rename from graphics/pokemon/diglett/alolan/icon.png rename to graphics/pokemon/diglett/alola/icon.png diff --git a/graphics/pokemon/diglett/alolan/normal.pal b/graphics/pokemon/diglett/alola/normal.pal similarity index 100% rename from graphics/pokemon/diglett/alolan/normal.pal rename to graphics/pokemon/diglett/alola/normal.pal diff --git a/graphics/pokemon/diglett/alolan/overworld.png b/graphics/pokemon/diglett/alola/overworld.png similarity index 100% rename from graphics/pokemon/diglett/alolan/overworld.png rename to graphics/pokemon/diglett/alola/overworld.png diff --git a/graphics/pokemon/diglett/alolan/overworld_normal.pal b/graphics/pokemon/diglett/alola/overworld_normal.pal similarity index 100% rename from graphics/pokemon/diglett/alolan/overworld_normal.pal rename to graphics/pokemon/diglett/alola/overworld_normal.pal diff --git a/graphics/pokemon/diglett/alolan/overworld_shiny.pal b/graphics/pokemon/diglett/alola/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/diglett/alolan/overworld_shiny.pal rename to graphics/pokemon/diglett/alola/overworld_shiny.pal diff --git a/graphics/pokemon/diglett/alolan/shiny.pal b/graphics/pokemon/diglett/alola/shiny.pal similarity index 100% rename from graphics/pokemon/diglett/alolan/shiny.pal rename to graphics/pokemon/diglett/alola/shiny.pal diff --git a/graphics/pokemon/drednaw/gigantamax/back.png b/graphics/pokemon/drednaw/gmax/back.png similarity index 100% rename from graphics/pokemon/drednaw/gigantamax/back.png rename to graphics/pokemon/drednaw/gmax/back.png diff --git a/graphics/pokemon/drednaw/gigantamax/front.png b/graphics/pokemon/drednaw/gmax/front.png similarity index 100% rename from graphics/pokemon/drednaw/gigantamax/front.png rename to graphics/pokemon/drednaw/gmax/front.png diff --git a/graphics/pokemon/drednaw/gigantamax/icon.png b/graphics/pokemon/drednaw/gmax/icon.png similarity index 100% rename from graphics/pokemon/drednaw/gigantamax/icon.png rename to graphics/pokemon/drednaw/gmax/icon.png diff --git a/graphics/pokemon/drednaw/gigantamax/normal.pal b/graphics/pokemon/drednaw/gmax/normal.pal similarity index 100% rename from graphics/pokemon/drednaw/gigantamax/normal.pal rename to graphics/pokemon/drednaw/gmax/normal.pal diff --git a/graphics/pokemon/drednaw/gigantamax/shiny.pal b/graphics/pokemon/drednaw/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/drednaw/gigantamax/shiny.pal rename to graphics/pokemon/drednaw/gmax/shiny.pal diff --git a/graphics/pokemon/dugtrio/alolan/back.png b/graphics/pokemon/dugtrio/alola/back.png similarity index 100% rename from graphics/pokemon/dugtrio/alolan/back.png rename to graphics/pokemon/dugtrio/alola/back.png diff --git a/graphics/pokemon/dugtrio/alolan/front.png b/graphics/pokemon/dugtrio/alola/front.png similarity index 100% rename from graphics/pokemon/dugtrio/alolan/front.png rename to graphics/pokemon/dugtrio/alola/front.png diff --git a/graphics/pokemon/dugtrio/alolan/icon.png b/graphics/pokemon/dugtrio/alola/icon.png similarity index 100% rename from graphics/pokemon/dugtrio/alolan/icon.png rename to graphics/pokemon/dugtrio/alola/icon.png diff --git a/graphics/pokemon/dugtrio/alolan/normal.pal b/graphics/pokemon/dugtrio/alola/normal.pal similarity index 100% rename from graphics/pokemon/dugtrio/alolan/normal.pal rename to graphics/pokemon/dugtrio/alola/normal.pal diff --git a/graphics/pokemon/dugtrio/alolan/overworld.png b/graphics/pokemon/dugtrio/alola/overworld.png similarity index 100% rename from graphics/pokemon/dugtrio/alolan/overworld.png rename to graphics/pokemon/dugtrio/alola/overworld.png diff --git a/graphics/pokemon/dugtrio/alolan/overworld_normal.pal b/graphics/pokemon/dugtrio/alola/overworld_normal.pal similarity index 100% rename from graphics/pokemon/dugtrio/alolan/overworld_normal.pal rename to graphics/pokemon/dugtrio/alola/overworld_normal.pal diff --git a/graphics/pokemon/dugtrio/alolan/overworld_shiny.pal b/graphics/pokemon/dugtrio/alola/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/dugtrio/alolan/overworld_shiny.pal rename to graphics/pokemon/dugtrio/alola/overworld_shiny.pal diff --git a/graphics/pokemon/dugtrio/alolan/shiny.pal b/graphics/pokemon/dugtrio/alola/shiny.pal similarity index 100% rename from graphics/pokemon/dugtrio/alolan/shiny.pal rename to graphics/pokemon/dugtrio/alola/shiny.pal diff --git a/graphics/pokemon/duraludon/gigantamax/back.png b/graphics/pokemon/duraludon/gmax/back.png similarity index 100% rename from graphics/pokemon/duraludon/gigantamax/back.png rename to graphics/pokemon/duraludon/gmax/back.png diff --git a/graphics/pokemon/duraludon/gigantamax/front.png b/graphics/pokemon/duraludon/gmax/front.png similarity index 100% rename from graphics/pokemon/duraludon/gigantamax/front.png rename to graphics/pokemon/duraludon/gmax/front.png diff --git a/graphics/pokemon/duraludon/gigantamax/icon.png b/graphics/pokemon/duraludon/gmax/icon.png similarity index 100% rename from graphics/pokemon/duraludon/gigantamax/icon.png rename to graphics/pokemon/duraludon/gmax/icon.png diff --git a/graphics/pokemon/duraludon/gigantamax/normal.pal b/graphics/pokemon/duraludon/gmax/normal.pal similarity index 100% rename from graphics/pokemon/duraludon/gigantamax/normal.pal rename to graphics/pokemon/duraludon/gmax/normal.pal diff --git a/graphics/pokemon/duraludon/gigantamax/shiny.pal b/graphics/pokemon/duraludon/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/duraludon/gigantamax/shiny.pal rename to graphics/pokemon/duraludon/gmax/shiny.pal diff --git a/graphics/pokemon/eevee/gigantamax/back.png b/graphics/pokemon/eevee/gmax/back.png similarity index 100% rename from graphics/pokemon/eevee/gigantamax/back.png rename to graphics/pokemon/eevee/gmax/back.png diff --git a/graphics/pokemon/eevee/gigantamax/front.png b/graphics/pokemon/eevee/gmax/front.png similarity index 100% rename from graphics/pokemon/eevee/gigantamax/front.png rename to graphics/pokemon/eevee/gmax/front.png diff --git a/graphics/pokemon/eevee/gigantamax/icon.png b/graphics/pokemon/eevee/gmax/icon.png similarity index 100% rename from graphics/pokemon/eevee/gigantamax/icon.png rename to graphics/pokemon/eevee/gmax/icon.png diff --git a/graphics/pokemon/eevee/gigantamax/normal.pal b/graphics/pokemon/eevee/gmax/normal.pal similarity index 100% rename from graphics/pokemon/eevee/gigantamax/normal.pal rename to graphics/pokemon/eevee/gmax/normal.pal diff --git a/graphics/pokemon/eevee/gigantamax/shiny.pal b/graphics/pokemon/eevee/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/eevee/gigantamax/shiny.pal rename to graphics/pokemon/eevee/gmax/shiny.pal diff --git a/graphics/pokemon/electrode/hisuian/back.png b/graphics/pokemon/electrode/hisui/back.png similarity index 100% rename from graphics/pokemon/electrode/hisuian/back.png rename to graphics/pokemon/electrode/hisui/back.png diff --git a/graphics/pokemon/electrode/hisuian/front.png b/graphics/pokemon/electrode/hisui/front.png similarity index 100% rename from graphics/pokemon/electrode/hisuian/front.png rename to graphics/pokemon/electrode/hisui/front.png diff --git a/graphics/pokemon/electrode/hisuian/icon.png b/graphics/pokemon/electrode/hisui/icon.png similarity index 100% rename from graphics/pokemon/electrode/hisuian/icon.png rename to graphics/pokemon/electrode/hisui/icon.png diff --git a/graphics/pokemon/electrode/hisuian/normal.pal b/graphics/pokemon/electrode/hisui/normal.pal similarity index 100% rename from graphics/pokemon/electrode/hisuian/normal.pal rename to graphics/pokemon/electrode/hisui/normal.pal diff --git a/graphics/pokemon/electrode/hisuian/overworld.png b/graphics/pokemon/electrode/hisui/overworld.png similarity index 100% rename from graphics/pokemon/electrode/hisuian/overworld.png rename to graphics/pokemon/electrode/hisui/overworld.png diff --git a/graphics/pokemon/electrode/hisuian/overworld_normal.pal b/graphics/pokemon/electrode/hisui/overworld_normal.pal similarity index 100% rename from graphics/pokemon/electrode/hisuian/overworld_normal.pal rename to graphics/pokemon/electrode/hisui/overworld_normal.pal diff --git a/graphics/pokemon/electrode/hisuian/overworld_shiny.pal b/graphics/pokemon/electrode/hisui/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/electrode/hisuian/overworld_shiny.pal rename to graphics/pokemon/electrode/hisui/overworld_shiny.pal diff --git a/graphics/pokemon/electrode/hisuian/shiny.pal b/graphics/pokemon/electrode/hisui/shiny.pal similarity index 100% rename from graphics/pokemon/electrode/hisuian/shiny.pal rename to graphics/pokemon/electrode/hisui/shiny.pal diff --git a/graphics/pokemon/exeggutor/alolan/anim_front.png b/graphics/pokemon/exeggutor/alola/anim_front.png similarity index 100% rename from graphics/pokemon/exeggutor/alolan/anim_front.png rename to graphics/pokemon/exeggutor/alola/anim_front.png diff --git a/graphics/pokemon/exeggutor/alolan/back.png b/graphics/pokemon/exeggutor/alola/back.png similarity index 100% rename from graphics/pokemon/exeggutor/alolan/back.png rename to graphics/pokemon/exeggutor/alola/back.png diff --git a/graphics/pokemon/exeggutor/alolan/icon.png b/graphics/pokemon/exeggutor/alola/icon.png similarity index 100% rename from graphics/pokemon/exeggutor/alolan/icon.png rename to graphics/pokemon/exeggutor/alola/icon.png diff --git a/graphics/pokemon/exeggutor/alolan/normal.pal b/graphics/pokemon/exeggutor/alola/normal.pal similarity index 100% rename from graphics/pokemon/exeggutor/alolan/normal.pal rename to graphics/pokemon/exeggutor/alola/normal.pal diff --git a/graphics/pokemon/exeggutor/alolan/overworld.png b/graphics/pokemon/exeggutor/alola/overworld.png similarity index 100% rename from graphics/pokemon/exeggutor/alolan/overworld.png rename to graphics/pokemon/exeggutor/alola/overworld.png diff --git a/graphics/pokemon/exeggutor/alolan/overworld_normal.pal b/graphics/pokemon/exeggutor/alola/overworld_normal.pal similarity index 100% rename from graphics/pokemon/exeggutor/alolan/overworld_normal.pal rename to graphics/pokemon/exeggutor/alola/overworld_normal.pal diff --git a/graphics/pokemon/exeggutor/alolan/overworld_shiny.pal b/graphics/pokemon/exeggutor/alola/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/exeggutor/alolan/overworld_shiny.pal rename to graphics/pokemon/exeggutor/alola/overworld_shiny.pal diff --git a/graphics/pokemon/exeggutor/alolan/shiny.pal b/graphics/pokemon/exeggutor/alola/shiny.pal similarity index 100% rename from graphics/pokemon/exeggutor/alolan/shiny.pal rename to graphics/pokemon/exeggutor/alola/shiny.pal diff --git a/graphics/pokemon/farfetchd/galarian/back.png b/graphics/pokemon/farfetchd/galar/back.png similarity index 100% rename from graphics/pokemon/farfetchd/galarian/back.png rename to graphics/pokemon/farfetchd/galar/back.png diff --git a/graphics/pokemon/farfetchd/galarian/front.png b/graphics/pokemon/farfetchd/galar/front.png similarity index 100% rename from graphics/pokemon/farfetchd/galarian/front.png rename to graphics/pokemon/farfetchd/galar/front.png diff --git a/graphics/pokemon/farfetchd/galarian/icon.png b/graphics/pokemon/farfetchd/galar/icon.png similarity index 100% rename from graphics/pokemon/farfetchd/galarian/icon.png rename to graphics/pokemon/farfetchd/galar/icon.png diff --git a/graphics/pokemon/farfetchd/galarian/normal.pal b/graphics/pokemon/farfetchd/galar/normal.pal similarity index 100% rename from graphics/pokemon/farfetchd/galarian/normal.pal rename to graphics/pokemon/farfetchd/galar/normal.pal diff --git a/graphics/pokemon/farfetchd/galarian/overworld.png b/graphics/pokemon/farfetchd/galar/overworld.png similarity index 100% rename from graphics/pokemon/farfetchd/galarian/overworld.png rename to graphics/pokemon/farfetchd/galar/overworld.png diff --git a/graphics/pokemon/farfetchd/galarian/overworld_normal.pal b/graphics/pokemon/farfetchd/galar/overworld_normal.pal similarity index 100% rename from graphics/pokemon/farfetchd/galarian/overworld_normal.pal rename to graphics/pokemon/farfetchd/galar/overworld_normal.pal diff --git a/graphics/pokemon/farfetchd/galarian/overworld_shiny.pal b/graphics/pokemon/farfetchd/galar/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/farfetchd/galarian/overworld_shiny.pal rename to graphics/pokemon/farfetchd/galar/overworld_shiny.pal diff --git a/graphics/pokemon/farfetchd/galarian/shiny.pal b/graphics/pokemon/farfetchd/galar/shiny.pal similarity index 100% rename from graphics/pokemon/farfetchd/galarian/shiny.pal rename to graphics/pokemon/farfetchd/galar/shiny.pal diff --git a/graphics/pokemon/flabebe/blue_flower/icon.png b/graphics/pokemon/flabebe/blue/icon.png similarity index 100% rename from graphics/pokemon/flabebe/blue_flower/icon.png rename to graphics/pokemon/flabebe/blue/icon.png diff --git a/graphics/pokemon/flabebe/blue_flower/normal.pal b/graphics/pokemon/flabebe/blue/normal.pal similarity index 100% rename from graphics/pokemon/flabebe/blue_flower/normal.pal rename to graphics/pokemon/flabebe/blue/normal.pal diff --git a/graphics/pokemon/flabebe/blue_flower/overworld.png b/graphics/pokemon/flabebe/blue/overworld.png similarity index 100% rename from graphics/pokemon/flabebe/blue_flower/overworld.png rename to graphics/pokemon/flabebe/blue/overworld.png diff --git a/graphics/pokemon/flabebe/blue_flower/overworld_normal.pal b/graphics/pokemon/flabebe/blue/overworld_normal.pal similarity index 100% rename from graphics/pokemon/flabebe/blue_flower/overworld_normal.pal rename to graphics/pokemon/flabebe/blue/overworld_normal.pal diff --git a/graphics/pokemon/flabebe/blue_flower/overworld_shiny.pal b/graphics/pokemon/flabebe/blue/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/flabebe/blue_flower/overworld_shiny.pal rename to graphics/pokemon/flabebe/blue/overworld_shiny.pal diff --git a/graphics/pokemon/flabebe/blue_flower/shiny.pal b/graphics/pokemon/flabebe/blue/shiny.pal similarity index 100% rename from graphics/pokemon/flabebe/blue_flower/shiny.pal rename to graphics/pokemon/flabebe/blue/shiny.pal diff --git a/graphics/pokemon/flabebe/orange_flower/icon.png b/graphics/pokemon/flabebe/orange/icon.png similarity index 100% rename from graphics/pokemon/flabebe/orange_flower/icon.png rename to graphics/pokemon/flabebe/orange/icon.png diff --git a/graphics/pokemon/flabebe/orange_flower/normal.pal b/graphics/pokemon/flabebe/orange/normal.pal similarity index 100% rename from graphics/pokemon/flabebe/orange_flower/normal.pal rename to graphics/pokemon/flabebe/orange/normal.pal diff --git a/graphics/pokemon/flabebe/orange_flower/overworld.png b/graphics/pokemon/flabebe/orange/overworld.png similarity index 100% rename from graphics/pokemon/flabebe/orange_flower/overworld.png rename to graphics/pokemon/flabebe/orange/overworld.png diff --git a/graphics/pokemon/flabebe/orange_flower/overworld_normal.pal b/graphics/pokemon/flabebe/orange/overworld_normal.pal similarity index 100% rename from graphics/pokemon/flabebe/orange_flower/overworld_normal.pal rename to graphics/pokemon/flabebe/orange/overworld_normal.pal diff --git a/graphics/pokemon/flabebe/orange_flower/overworld_shiny.pal b/graphics/pokemon/flabebe/orange/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/flabebe/orange_flower/overworld_shiny.pal rename to graphics/pokemon/flabebe/orange/overworld_shiny.pal diff --git a/graphics/pokemon/flabebe/orange_flower/shiny.pal b/graphics/pokemon/flabebe/orange/shiny.pal similarity index 100% rename from graphics/pokemon/flabebe/orange_flower/shiny.pal rename to graphics/pokemon/flabebe/orange/shiny.pal diff --git a/graphics/pokemon/flabebe/white_flower/icon.png b/graphics/pokemon/flabebe/white/icon.png similarity index 100% rename from graphics/pokemon/flabebe/white_flower/icon.png rename to graphics/pokemon/flabebe/white/icon.png diff --git a/graphics/pokemon/flabebe/white_flower/normal.pal b/graphics/pokemon/flabebe/white/normal.pal similarity index 100% rename from graphics/pokemon/flabebe/white_flower/normal.pal rename to graphics/pokemon/flabebe/white/normal.pal diff --git a/graphics/pokemon/flabebe/white_flower/overworld.png b/graphics/pokemon/flabebe/white/overworld.png similarity index 100% rename from graphics/pokemon/flabebe/white_flower/overworld.png rename to graphics/pokemon/flabebe/white/overworld.png diff --git a/graphics/pokemon/flabebe/white_flower/overworld_normal.pal b/graphics/pokemon/flabebe/white/overworld_normal.pal similarity index 100% rename from graphics/pokemon/flabebe/white_flower/overworld_normal.pal rename to graphics/pokemon/flabebe/white/overworld_normal.pal diff --git a/graphics/pokemon/flabebe/white_flower/overworld_shiny.pal b/graphics/pokemon/flabebe/white/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/flabebe/white_flower/overworld_shiny.pal rename to graphics/pokemon/flabebe/white/overworld_shiny.pal diff --git a/graphics/pokemon/flabebe/white_flower/shiny.pal b/graphics/pokemon/flabebe/white/shiny.pal similarity index 100% rename from graphics/pokemon/flabebe/white_flower/shiny.pal rename to graphics/pokemon/flabebe/white/shiny.pal diff --git a/graphics/pokemon/flabebe/yellow_flower/icon.png b/graphics/pokemon/flabebe/yellow/icon.png similarity index 100% rename from graphics/pokemon/flabebe/yellow_flower/icon.png rename to graphics/pokemon/flabebe/yellow/icon.png diff --git a/graphics/pokemon/flabebe/yellow_flower/normal.pal b/graphics/pokemon/flabebe/yellow/normal.pal similarity index 100% rename from graphics/pokemon/flabebe/yellow_flower/normal.pal rename to graphics/pokemon/flabebe/yellow/normal.pal diff --git a/graphics/pokemon/flabebe/yellow_flower/overworld.png b/graphics/pokemon/flabebe/yellow/overworld.png similarity index 100% rename from graphics/pokemon/flabebe/yellow_flower/overworld.png rename to graphics/pokemon/flabebe/yellow/overworld.png diff --git a/graphics/pokemon/flabebe/yellow_flower/overworld_normal.pal b/graphics/pokemon/flabebe/yellow/overworld_normal.pal similarity index 100% rename from graphics/pokemon/flabebe/yellow_flower/overworld_normal.pal rename to graphics/pokemon/flabebe/yellow/overworld_normal.pal diff --git a/graphics/pokemon/flabebe/yellow_flower/overworld_shiny.pal b/graphics/pokemon/flabebe/yellow/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/flabebe/yellow_flower/overworld_shiny.pal rename to graphics/pokemon/flabebe/yellow/overworld_shiny.pal diff --git a/graphics/pokemon/flabebe/yellow_flower/shiny.pal b/graphics/pokemon/flabebe/yellow/shiny.pal similarity index 100% rename from graphics/pokemon/flabebe/yellow_flower/shiny.pal rename to graphics/pokemon/flabebe/yellow/shiny.pal diff --git a/graphics/pokemon/flapple/gigantamax/back.png b/graphics/pokemon/flapple/gmax/back.png similarity index 100% rename from graphics/pokemon/flapple/gigantamax/back.png rename to graphics/pokemon/flapple/gmax/back.png diff --git a/graphics/pokemon/flapple/gigantamax/front.png b/graphics/pokemon/flapple/gmax/front.png similarity index 100% rename from graphics/pokemon/flapple/gigantamax/front.png rename to graphics/pokemon/flapple/gmax/front.png diff --git a/graphics/pokemon/flapple/gigantamax/icon.png b/graphics/pokemon/flapple/gmax/icon.png similarity index 100% rename from graphics/pokemon/flapple/gigantamax/icon.png rename to graphics/pokemon/flapple/gmax/icon.png diff --git a/graphics/pokemon/flapple/gigantamax/normal.pal b/graphics/pokemon/flapple/gmax/normal.pal similarity index 100% rename from graphics/pokemon/flapple/gigantamax/normal.pal rename to graphics/pokemon/flapple/gmax/normal.pal diff --git a/graphics/pokemon/flapple/gigantamax/shiny.pal b/graphics/pokemon/flapple/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/flapple/gigantamax/shiny.pal rename to graphics/pokemon/flapple/gmax/shiny.pal diff --git a/graphics/pokemon/floette/blue_flower/icon.png b/graphics/pokemon/floette/blue/icon.png similarity index 100% rename from graphics/pokemon/floette/blue_flower/icon.png rename to graphics/pokemon/floette/blue/icon.png diff --git a/graphics/pokemon/floette/blue_flower/normal.pal b/graphics/pokemon/floette/blue/normal.pal similarity index 100% rename from graphics/pokemon/floette/blue_flower/normal.pal rename to graphics/pokemon/floette/blue/normal.pal diff --git a/graphics/pokemon/floette/blue_flower/overworld.png b/graphics/pokemon/floette/blue/overworld.png similarity index 100% rename from graphics/pokemon/floette/blue_flower/overworld.png rename to graphics/pokemon/floette/blue/overworld.png diff --git a/graphics/pokemon/floette/blue_flower/overworld_normal.pal b/graphics/pokemon/floette/blue/overworld_normal.pal similarity index 100% rename from graphics/pokemon/floette/blue_flower/overworld_normal.pal rename to graphics/pokemon/floette/blue/overworld_normal.pal diff --git a/graphics/pokemon/floette/blue_flower/overworld_shiny.pal b/graphics/pokemon/floette/blue/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/floette/blue_flower/overworld_shiny.pal rename to graphics/pokemon/floette/blue/overworld_shiny.pal diff --git a/graphics/pokemon/floette/blue_flower/shiny.pal b/graphics/pokemon/floette/blue/shiny.pal similarity index 100% rename from graphics/pokemon/floette/blue_flower/shiny.pal rename to graphics/pokemon/floette/blue/shiny.pal diff --git a/graphics/pokemon/floette/eternal_flower/anim_front.png b/graphics/pokemon/floette/eternal/anim_front.png similarity index 100% rename from graphics/pokemon/floette/eternal_flower/anim_front.png rename to graphics/pokemon/floette/eternal/anim_front.png diff --git a/graphics/pokemon/floette/eternal_flower/back.png b/graphics/pokemon/floette/eternal/back.png similarity index 100% rename from graphics/pokemon/floette/eternal_flower/back.png rename to graphics/pokemon/floette/eternal/back.png diff --git a/graphics/pokemon/floette/eternal_flower/icon.png b/graphics/pokemon/floette/eternal/icon.png similarity index 100% rename from graphics/pokemon/floette/eternal_flower/icon.png rename to graphics/pokemon/floette/eternal/icon.png diff --git a/graphics/pokemon/floette/eternal_flower/normal.pal b/graphics/pokemon/floette/eternal/normal.pal similarity index 100% rename from graphics/pokemon/floette/eternal_flower/normal.pal rename to graphics/pokemon/floette/eternal/normal.pal diff --git a/graphics/pokemon/floette/eternal_flower/overworld.png b/graphics/pokemon/floette/eternal/overworld.png similarity index 100% rename from graphics/pokemon/floette/eternal_flower/overworld.png rename to graphics/pokemon/floette/eternal/overworld.png diff --git a/graphics/pokemon/floette/eternal_flower/overworld_normal.pal b/graphics/pokemon/floette/eternal/overworld_normal.pal similarity index 100% rename from graphics/pokemon/floette/eternal_flower/overworld_normal.pal rename to graphics/pokemon/floette/eternal/overworld_normal.pal diff --git a/graphics/pokemon/floette/eternal_flower/overworld_shiny.pal b/graphics/pokemon/floette/eternal/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/floette/eternal_flower/overworld_shiny.pal rename to graphics/pokemon/floette/eternal/overworld_shiny.pal diff --git a/graphics/pokemon/floette/eternal_flower/shiny.pal b/graphics/pokemon/floette/eternal/shiny.pal similarity index 100% rename from graphics/pokemon/floette/eternal_flower/shiny.pal rename to graphics/pokemon/floette/eternal/shiny.pal diff --git a/graphics/pokemon/floette/orange_flower/icon.png b/graphics/pokemon/floette/orange/icon.png similarity index 100% rename from graphics/pokemon/floette/orange_flower/icon.png rename to graphics/pokemon/floette/orange/icon.png diff --git a/graphics/pokemon/floette/orange_flower/normal.pal b/graphics/pokemon/floette/orange/normal.pal similarity index 100% rename from graphics/pokemon/floette/orange_flower/normal.pal rename to graphics/pokemon/floette/orange/normal.pal diff --git a/graphics/pokemon/floette/orange_flower/overworld.png b/graphics/pokemon/floette/orange/overworld.png similarity index 100% rename from graphics/pokemon/floette/orange_flower/overworld.png rename to graphics/pokemon/floette/orange/overworld.png diff --git a/graphics/pokemon/floette/orange_flower/overworld_normal.pal b/graphics/pokemon/floette/orange/overworld_normal.pal similarity index 100% rename from graphics/pokemon/floette/orange_flower/overworld_normal.pal rename to graphics/pokemon/floette/orange/overworld_normal.pal diff --git a/graphics/pokemon/floette/orange_flower/overworld_shiny.pal b/graphics/pokemon/floette/orange/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/floette/orange_flower/overworld_shiny.pal rename to graphics/pokemon/floette/orange/overworld_shiny.pal diff --git a/graphics/pokemon/floette/orange_flower/shiny.pal b/graphics/pokemon/floette/orange/shiny.pal similarity index 100% rename from graphics/pokemon/floette/orange_flower/shiny.pal rename to graphics/pokemon/floette/orange/shiny.pal diff --git a/graphics/pokemon/floette/white_flower/icon.png b/graphics/pokemon/floette/white/icon.png similarity index 100% rename from graphics/pokemon/floette/white_flower/icon.png rename to graphics/pokemon/floette/white/icon.png diff --git a/graphics/pokemon/floette/white_flower/normal.pal b/graphics/pokemon/floette/white/normal.pal similarity index 100% rename from graphics/pokemon/floette/white_flower/normal.pal rename to graphics/pokemon/floette/white/normal.pal diff --git a/graphics/pokemon/floette/white_flower/overworld.png b/graphics/pokemon/floette/white/overworld.png similarity index 100% rename from graphics/pokemon/floette/white_flower/overworld.png rename to graphics/pokemon/floette/white/overworld.png diff --git a/graphics/pokemon/floette/white_flower/overworld_normal.pal b/graphics/pokemon/floette/white/overworld_normal.pal similarity index 100% rename from graphics/pokemon/floette/white_flower/overworld_normal.pal rename to graphics/pokemon/floette/white/overworld_normal.pal diff --git a/graphics/pokemon/floette/white_flower/overworld_shiny.pal b/graphics/pokemon/floette/white/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/floette/white_flower/overworld_shiny.pal rename to graphics/pokemon/floette/white/overworld_shiny.pal diff --git a/graphics/pokemon/floette/white_flower/shiny.pal b/graphics/pokemon/floette/white/shiny.pal similarity index 100% rename from graphics/pokemon/floette/white_flower/shiny.pal rename to graphics/pokemon/floette/white/shiny.pal diff --git a/graphics/pokemon/floette/yellow_flower/icon.png b/graphics/pokemon/floette/yellow/icon.png similarity index 100% rename from graphics/pokemon/floette/yellow_flower/icon.png rename to graphics/pokemon/floette/yellow/icon.png diff --git a/graphics/pokemon/floette/yellow_flower/normal.pal b/graphics/pokemon/floette/yellow/normal.pal similarity index 100% rename from graphics/pokemon/floette/yellow_flower/normal.pal rename to graphics/pokemon/floette/yellow/normal.pal diff --git a/graphics/pokemon/floette/yellow_flower/overworld.png b/graphics/pokemon/floette/yellow/overworld.png similarity index 100% rename from graphics/pokemon/floette/yellow_flower/overworld.png rename to graphics/pokemon/floette/yellow/overworld.png diff --git a/graphics/pokemon/floette/yellow_flower/overworld_normal.pal b/graphics/pokemon/floette/yellow/overworld_normal.pal similarity index 100% rename from graphics/pokemon/floette/yellow_flower/overworld_normal.pal rename to graphics/pokemon/floette/yellow/overworld_normal.pal diff --git a/graphics/pokemon/floette/yellow_flower/overworld_shiny.pal b/graphics/pokemon/floette/yellow/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/floette/yellow_flower/overworld_shiny.pal rename to graphics/pokemon/floette/yellow/overworld_shiny.pal diff --git a/graphics/pokemon/floette/yellow_flower/shiny.pal b/graphics/pokemon/floette/yellow/shiny.pal similarity index 100% rename from graphics/pokemon/floette/yellow_flower/shiny.pal rename to graphics/pokemon/floette/yellow/shiny.pal diff --git a/graphics/pokemon/florges/blue_flower/icon.png b/graphics/pokemon/florges/blue/icon.png similarity index 100% rename from graphics/pokemon/florges/blue_flower/icon.png rename to graphics/pokemon/florges/blue/icon.png diff --git a/graphics/pokemon/florges/blue_flower/normal.pal b/graphics/pokemon/florges/blue/normal.pal similarity index 100% rename from graphics/pokemon/florges/blue_flower/normal.pal rename to graphics/pokemon/florges/blue/normal.pal diff --git a/graphics/pokemon/florges/blue_flower/overworld.png b/graphics/pokemon/florges/blue/overworld.png similarity index 100% rename from graphics/pokemon/florges/blue_flower/overworld.png rename to graphics/pokemon/florges/blue/overworld.png diff --git a/graphics/pokemon/florges/blue_flower/overworld_normal.pal b/graphics/pokemon/florges/blue/overworld_normal.pal similarity index 100% rename from graphics/pokemon/florges/blue_flower/overworld_normal.pal rename to graphics/pokemon/florges/blue/overworld_normal.pal diff --git a/graphics/pokemon/florges/blue_flower/overworld_shiny.pal b/graphics/pokemon/florges/blue/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/florges/blue_flower/overworld_shiny.pal rename to graphics/pokemon/florges/blue/overworld_shiny.pal diff --git a/graphics/pokemon/florges/blue_flower/shiny.pal b/graphics/pokemon/florges/blue/shiny.pal similarity index 100% rename from graphics/pokemon/florges/blue_flower/shiny.pal rename to graphics/pokemon/florges/blue/shiny.pal diff --git a/graphics/pokemon/florges/orange_flower/icon.png b/graphics/pokemon/florges/orange/icon.png similarity index 100% rename from graphics/pokemon/florges/orange_flower/icon.png rename to graphics/pokemon/florges/orange/icon.png diff --git a/graphics/pokemon/florges/orange_flower/normal.pal b/graphics/pokemon/florges/orange/normal.pal similarity index 100% rename from graphics/pokemon/florges/orange_flower/normal.pal rename to graphics/pokemon/florges/orange/normal.pal diff --git a/graphics/pokemon/florges/orange_flower/overworld.png b/graphics/pokemon/florges/orange/overworld.png similarity index 100% rename from graphics/pokemon/florges/orange_flower/overworld.png rename to graphics/pokemon/florges/orange/overworld.png diff --git a/graphics/pokemon/florges/orange_flower/overworld_normal.pal b/graphics/pokemon/florges/orange/overworld_normal.pal similarity index 100% rename from graphics/pokemon/florges/orange_flower/overworld_normal.pal rename to graphics/pokemon/florges/orange/overworld_normal.pal diff --git a/graphics/pokemon/florges/orange_flower/overworld_shiny.pal b/graphics/pokemon/florges/orange/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/florges/orange_flower/overworld_shiny.pal rename to graphics/pokemon/florges/orange/overworld_shiny.pal diff --git a/graphics/pokemon/florges/orange_flower/shiny.pal b/graphics/pokemon/florges/orange/shiny.pal similarity index 100% rename from graphics/pokemon/florges/orange_flower/shiny.pal rename to graphics/pokemon/florges/orange/shiny.pal diff --git a/graphics/pokemon/florges/white_flower/icon.png b/graphics/pokemon/florges/white/icon.png similarity index 100% rename from graphics/pokemon/florges/white_flower/icon.png rename to graphics/pokemon/florges/white/icon.png diff --git a/graphics/pokemon/florges/white_flower/normal.pal b/graphics/pokemon/florges/white/normal.pal similarity index 100% rename from graphics/pokemon/florges/white_flower/normal.pal rename to graphics/pokemon/florges/white/normal.pal diff --git a/graphics/pokemon/florges/white_flower/overworld.png b/graphics/pokemon/florges/white/overworld.png similarity index 100% rename from graphics/pokemon/florges/white_flower/overworld.png rename to graphics/pokemon/florges/white/overworld.png diff --git a/graphics/pokemon/florges/white_flower/overworld_normal.pal b/graphics/pokemon/florges/white/overworld_normal.pal similarity index 100% rename from graphics/pokemon/florges/white_flower/overworld_normal.pal rename to graphics/pokemon/florges/white/overworld_normal.pal diff --git a/graphics/pokemon/florges/white_flower/overworld_shiny.pal b/graphics/pokemon/florges/white/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/florges/white_flower/overworld_shiny.pal rename to graphics/pokemon/florges/white/overworld_shiny.pal diff --git a/graphics/pokemon/florges/white_flower/shiny.pal b/graphics/pokemon/florges/white/shiny.pal similarity index 100% rename from graphics/pokemon/florges/white_flower/shiny.pal rename to graphics/pokemon/florges/white/shiny.pal diff --git a/graphics/pokemon/florges/yellow_flower/icon.png b/graphics/pokemon/florges/yellow/icon.png similarity index 100% rename from graphics/pokemon/florges/yellow_flower/icon.png rename to graphics/pokemon/florges/yellow/icon.png diff --git a/graphics/pokemon/florges/yellow_flower/normal.pal b/graphics/pokemon/florges/yellow/normal.pal similarity index 100% rename from graphics/pokemon/florges/yellow_flower/normal.pal rename to graphics/pokemon/florges/yellow/normal.pal diff --git a/graphics/pokemon/florges/yellow_flower/overworld.png b/graphics/pokemon/florges/yellow/overworld.png similarity index 100% rename from graphics/pokemon/florges/yellow_flower/overworld.png rename to graphics/pokemon/florges/yellow/overworld.png diff --git a/graphics/pokemon/florges/yellow_flower/overworld_normal.pal b/graphics/pokemon/florges/yellow/overworld_normal.pal similarity index 100% rename from graphics/pokemon/florges/yellow_flower/overworld_normal.pal rename to graphics/pokemon/florges/yellow/overworld_normal.pal diff --git a/graphics/pokemon/florges/yellow_flower/overworld_shiny.pal b/graphics/pokemon/florges/yellow/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/florges/yellow_flower/overworld_shiny.pal rename to graphics/pokemon/florges/yellow/overworld_shiny.pal diff --git a/graphics/pokemon/florges/yellow_flower/shiny.pal b/graphics/pokemon/florges/yellow/shiny.pal similarity index 100% rename from graphics/pokemon/florges/yellow_flower/shiny.pal rename to graphics/pokemon/florges/yellow/shiny.pal diff --git a/graphics/pokemon/garbodor/gigantamax/back.png b/graphics/pokemon/garbodor/gmax/back.png similarity index 100% rename from graphics/pokemon/garbodor/gigantamax/back.png rename to graphics/pokemon/garbodor/gmax/back.png diff --git a/graphics/pokemon/garbodor/gigantamax/front.png b/graphics/pokemon/garbodor/gmax/front.png similarity index 100% rename from graphics/pokemon/garbodor/gigantamax/front.png rename to graphics/pokemon/garbodor/gmax/front.png diff --git a/graphics/pokemon/garbodor/gigantamax/icon.png b/graphics/pokemon/garbodor/gmax/icon.png similarity index 100% rename from graphics/pokemon/garbodor/gigantamax/icon.png rename to graphics/pokemon/garbodor/gmax/icon.png diff --git a/graphics/pokemon/garbodor/gigantamax/normal.pal b/graphics/pokemon/garbodor/gmax/normal.pal similarity index 100% rename from graphics/pokemon/garbodor/gigantamax/normal.pal rename to graphics/pokemon/garbodor/gmax/normal.pal diff --git a/graphics/pokemon/garbodor/gigantamax/shiny.pal b/graphics/pokemon/garbodor/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/garbodor/gigantamax/shiny.pal rename to graphics/pokemon/garbodor/gmax/shiny.pal diff --git a/graphics/pokemon/gastrodon/east_sea/anim_front.png b/graphics/pokemon/gastrodon/east/anim_front.png similarity index 100% rename from graphics/pokemon/gastrodon/east_sea/anim_front.png rename to graphics/pokemon/gastrodon/east/anim_front.png diff --git a/graphics/pokemon/gastrodon/east_sea/back.png b/graphics/pokemon/gastrodon/east/back.png similarity index 100% rename from graphics/pokemon/gastrodon/east_sea/back.png rename to graphics/pokemon/gastrodon/east/back.png diff --git a/graphics/pokemon/gastrodon/east_sea/icon.png b/graphics/pokemon/gastrodon/east/icon.png similarity index 100% rename from graphics/pokemon/gastrodon/east_sea/icon.png rename to graphics/pokemon/gastrodon/east/icon.png diff --git a/graphics/pokemon/gastrodon/east_sea/normal.pal b/graphics/pokemon/gastrodon/east/normal.pal similarity index 100% rename from graphics/pokemon/gastrodon/east_sea/normal.pal rename to graphics/pokemon/gastrodon/east/normal.pal diff --git a/graphics/pokemon/gastrodon/east_sea/overworld.png b/graphics/pokemon/gastrodon/east/overworld.png similarity index 100% rename from graphics/pokemon/gastrodon/east_sea/overworld.png rename to graphics/pokemon/gastrodon/east/overworld.png diff --git a/graphics/pokemon/gastrodon/east_sea/overworld_normal.pal b/graphics/pokemon/gastrodon/east/overworld_normal.pal similarity index 100% rename from graphics/pokemon/gastrodon/east_sea/overworld_normal.pal rename to graphics/pokemon/gastrodon/east/overworld_normal.pal diff --git a/graphics/pokemon/gastrodon/east_sea/overworld_shiny.pal b/graphics/pokemon/gastrodon/east/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/gastrodon/east_sea/overworld_shiny.pal rename to graphics/pokemon/gastrodon/east/overworld_shiny.pal diff --git a/graphics/pokemon/gastrodon/east_sea/shiny.pal b/graphics/pokemon/gastrodon/east/shiny.pal similarity index 100% rename from graphics/pokemon/gastrodon/east_sea/shiny.pal rename to graphics/pokemon/gastrodon/east/shiny.pal diff --git a/graphics/pokemon/gengar/gigantamax/back.png b/graphics/pokemon/gengar/gmax/back.png similarity index 100% rename from graphics/pokemon/gengar/gigantamax/back.png rename to graphics/pokemon/gengar/gmax/back.png diff --git a/graphics/pokemon/gengar/gigantamax/front.png b/graphics/pokemon/gengar/gmax/front.png similarity index 100% rename from graphics/pokemon/gengar/gigantamax/front.png rename to graphics/pokemon/gengar/gmax/front.png diff --git a/graphics/pokemon/gengar/gigantamax/icon.png b/graphics/pokemon/gengar/gmax/icon.png similarity index 100% rename from graphics/pokemon/gengar/gigantamax/icon.png rename to graphics/pokemon/gengar/gmax/icon.png diff --git a/graphics/pokemon/gengar/gigantamax/normal.pal b/graphics/pokemon/gengar/gmax/normal.pal similarity index 100% rename from graphics/pokemon/gengar/gigantamax/normal.pal rename to graphics/pokemon/gengar/gmax/normal.pal diff --git a/graphics/pokemon/gengar/gigantamax/shiny.pal b/graphics/pokemon/gengar/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/gengar/gigantamax/shiny.pal rename to graphics/pokemon/gengar/gmax/shiny.pal diff --git a/graphics/pokemon/geodude/alolan/back.png b/graphics/pokemon/geodude/alola/back.png similarity index 100% rename from graphics/pokemon/geodude/alolan/back.png rename to graphics/pokemon/geodude/alola/back.png diff --git a/graphics/pokemon/geodude/alolan/front.png b/graphics/pokemon/geodude/alola/front.png similarity index 100% rename from graphics/pokemon/geodude/alolan/front.png rename to graphics/pokemon/geodude/alola/front.png diff --git a/graphics/pokemon/geodude/alolan/icon.png b/graphics/pokemon/geodude/alola/icon.png similarity index 100% rename from graphics/pokemon/geodude/alolan/icon.png rename to graphics/pokemon/geodude/alola/icon.png diff --git a/graphics/pokemon/geodude/alolan/normal.pal b/graphics/pokemon/geodude/alola/normal.pal similarity index 100% rename from graphics/pokemon/geodude/alolan/normal.pal rename to graphics/pokemon/geodude/alola/normal.pal diff --git a/graphics/pokemon/geodude/alolan/overworld.png b/graphics/pokemon/geodude/alola/overworld.png similarity index 100% rename from graphics/pokemon/geodude/alolan/overworld.png rename to graphics/pokemon/geodude/alola/overworld.png diff --git a/graphics/pokemon/geodude/alolan/overworld_normal.pal b/graphics/pokemon/geodude/alola/overworld_normal.pal similarity index 100% rename from graphics/pokemon/geodude/alolan/overworld_normal.pal rename to graphics/pokemon/geodude/alola/overworld_normal.pal diff --git a/graphics/pokemon/geodude/alolan/overworld_shiny.pal b/graphics/pokemon/geodude/alola/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/geodude/alolan/overworld_shiny.pal rename to graphics/pokemon/geodude/alola/overworld_shiny.pal diff --git a/graphics/pokemon/geodude/alolan/shiny.pal b/graphics/pokemon/geodude/alola/shiny.pal similarity index 100% rename from graphics/pokemon/geodude/alolan/shiny.pal rename to graphics/pokemon/geodude/alola/shiny.pal diff --git a/graphics/pokemon/golem/alolan/back.png b/graphics/pokemon/golem/alola/back.png similarity index 100% rename from graphics/pokemon/golem/alolan/back.png rename to graphics/pokemon/golem/alola/back.png diff --git a/graphics/pokemon/golem/alolan/front.png b/graphics/pokemon/golem/alola/front.png similarity index 100% rename from graphics/pokemon/golem/alolan/front.png rename to graphics/pokemon/golem/alola/front.png diff --git a/graphics/pokemon/golem/alolan/icon.png b/graphics/pokemon/golem/alola/icon.png similarity index 100% rename from graphics/pokemon/golem/alolan/icon.png rename to graphics/pokemon/golem/alola/icon.png diff --git a/graphics/pokemon/golem/alolan/normal.pal b/graphics/pokemon/golem/alola/normal.pal similarity index 100% rename from graphics/pokemon/golem/alolan/normal.pal rename to graphics/pokemon/golem/alola/normal.pal diff --git a/graphics/pokemon/golem/alolan/overworld.png b/graphics/pokemon/golem/alola/overworld.png similarity index 100% rename from graphics/pokemon/golem/alolan/overworld.png rename to graphics/pokemon/golem/alola/overworld.png diff --git a/graphics/pokemon/golem/alolan/overworld_normal.pal b/graphics/pokemon/golem/alola/overworld_normal.pal similarity index 100% rename from graphics/pokemon/golem/alolan/overworld_normal.pal rename to graphics/pokemon/golem/alola/overworld_normal.pal diff --git a/graphics/pokemon/golem/alolan/overworld_shiny.pal b/graphics/pokemon/golem/alola/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/golem/alolan/overworld_shiny.pal rename to graphics/pokemon/golem/alola/overworld_shiny.pal diff --git a/graphics/pokemon/golem/alolan/shiny.pal b/graphics/pokemon/golem/alola/shiny.pal similarity index 100% rename from graphics/pokemon/golem/alolan/shiny.pal rename to graphics/pokemon/golem/alola/shiny.pal diff --git a/graphics/pokemon/goodra/hisuian/back.png b/graphics/pokemon/goodra/hisui/back.png similarity index 100% rename from graphics/pokemon/goodra/hisuian/back.png rename to graphics/pokemon/goodra/hisui/back.png diff --git a/graphics/pokemon/goodra/hisuian/front.png b/graphics/pokemon/goodra/hisui/front.png similarity index 100% rename from graphics/pokemon/goodra/hisuian/front.png rename to graphics/pokemon/goodra/hisui/front.png diff --git a/graphics/pokemon/goodra/hisuian/icon.png b/graphics/pokemon/goodra/hisui/icon.png similarity index 100% rename from graphics/pokemon/goodra/hisuian/icon.png rename to graphics/pokemon/goodra/hisui/icon.png diff --git a/graphics/pokemon/goodra/hisuian/normal.pal b/graphics/pokemon/goodra/hisui/normal.pal similarity index 100% rename from graphics/pokemon/goodra/hisuian/normal.pal rename to graphics/pokemon/goodra/hisui/normal.pal diff --git a/graphics/pokemon/goodra/hisuian/overworld.png b/graphics/pokemon/goodra/hisui/overworld.png similarity index 100% rename from graphics/pokemon/goodra/hisuian/overworld.png rename to graphics/pokemon/goodra/hisui/overworld.png diff --git a/graphics/pokemon/goodra/hisuian/overworld_normal.pal b/graphics/pokemon/goodra/hisui/overworld_normal.pal similarity index 100% rename from graphics/pokemon/goodra/hisuian/overworld_normal.pal rename to graphics/pokemon/goodra/hisui/overworld_normal.pal diff --git a/graphics/pokemon/goodra/hisuian/overworld_shiny.pal b/graphics/pokemon/goodra/hisui/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/goodra/hisuian/overworld_shiny.pal rename to graphics/pokemon/goodra/hisui/overworld_shiny.pal diff --git a/graphics/pokemon/goodra/hisuian/shiny.pal b/graphics/pokemon/goodra/hisui/shiny.pal similarity index 100% rename from graphics/pokemon/goodra/hisuian/shiny.pal rename to graphics/pokemon/goodra/hisui/shiny.pal diff --git a/graphics/pokemon/graveler/alolan/back.png b/graphics/pokemon/graveler/alola/back.png similarity index 100% rename from graphics/pokemon/graveler/alolan/back.png rename to graphics/pokemon/graveler/alola/back.png diff --git a/graphics/pokemon/graveler/alolan/front.png b/graphics/pokemon/graveler/alola/front.png similarity index 100% rename from graphics/pokemon/graveler/alolan/front.png rename to graphics/pokemon/graveler/alola/front.png diff --git a/graphics/pokemon/graveler/alolan/icon.png b/graphics/pokemon/graveler/alola/icon.png similarity index 100% rename from graphics/pokemon/graveler/alolan/icon.png rename to graphics/pokemon/graveler/alola/icon.png diff --git a/graphics/pokemon/graveler/alolan/normal.pal b/graphics/pokemon/graveler/alola/normal.pal similarity index 100% rename from graphics/pokemon/graveler/alolan/normal.pal rename to graphics/pokemon/graveler/alola/normal.pal diff --git a/graphics/pokemon/graveler/alolan/overworld.png b/graphics/pokemon/graveler/alola/overworld.png similarity index 100% rename from graphics/pokemon/graveler/alolan/overworld.png rename to graphics/pokemon/graveler/alola/overworld.png diff --git a/graphics/pokemon/graveler/alolan/overworld_normal.pal b/graphics/pokemon/graveler/alola/overworld_normal.pal similarity index 100% rename from graphics/pokemon/graveler/alolan/overworld_normal.pal rename to graphics/pokemon/graveler/alola/overworld_normal.pal diff --git a/graphics/pokemon/graveler/alolan/overworld_shiny.pal b/graphics/pokemon/graveler/alola/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/graveler/alolan/overworld_shiny.pal rename to graphics/pokemon/graveler/alola/overworld_shiny.pal diff --git a/graphics/pokemon/graveler/alolan/shiny.pal b/graphics/pokemon/graveler/alola/shiny.pal similarity index 100% rename from graphics/pokemon/graveler/alolan/shiny.pal rename to graphics/pokemon/graveler/alola/shiny.pal diff --git a/graphics/pokemon/grimer/alolan/back.png b/graphics/pokemon/grimer/alola/back.png similarity index 100% rename from graphics/pokemon/grimer/alolan/back.png rename to graphics/pokemon/grimer/alola/back.png diff --git a/graphics/pokemon/grimer/alolan/front.png b/graphics/pokemon/grimer/alola/front.png similarity index 100% rename from graphics/pokemon/grimer/alolan/front.png rename to graphics/pokemon/grimer/alola/front.png diff --git a/graphics/pokemon/grimer/alolan/icon.png b/graphics/pokemon/grimer/alola/icon.png similarity index 100% rename from graphics/pokemon/grimer/alolan/icon.png rename to graphics/pokemon/grimer/alola/icon.png diff --git a/graphics/pokemon/grimer/alolan/normal.pal b/graphics/pokemon/grimer/alola/normal.pal similarity index 100% rename from graphics/pokemon/grimer/alolan/normal.pal rename to graphics/pokemon/grimer/alola/normal.pal diff --git a/graphics/pokemon/grimer/alolan/overworld.png b/graphics/pokemon/grimer/alola/overworld.png similarity index 100% rename from graphics/pokemon/grimer/alolan/overworld.png rename to graphics/pokemon/grimer/alola/overworld.png diff --git a/graphics/pokemon/grimer/alolan/overworld_normal.pal b/graphics/pokemon/grimer/alola/overworld_normal.pal similarity index 100% rename from graphics/pokemon/grimer/alolan/overworld_normal.pal rename to graphics/pokemon/grimer/alola/overworld_normal.pal diff --git a/graphics/pokemon/grimer/alolan/overworld_shiny.pal b/graphics/pokemon/grimer/alola/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/grimer/alolan/overworld_shiny.pal rename to graphics/pokemon/grimer/alola/overworld_shiny.pal diff --git a/graphics/pokemon/grimer/alolan/shiny.pal b/graphics/pokemon/grimer/alola/shiny.pal similarity index 100% rename from graphics/pokemon/grimer/alolan/shiny.pal rename to graphics/pokemon/grimer/alola/shiny.pal diff --git a/graphics/pokemon/grimmsnarl/gigantamax/back.png b/graphics/pokemon/grimmsnarl/gmax/back.png similarity index 100% rename from graphics/pokemon/grimmsnarl/gigantamax/back.png rename to graphics/pokemon/grimmsnarl/gmax/back.png diff --git a/graphics/pokemon/grimmsnarl/gigantamax/front.png b/graphics/pokemon/grimmsnarl/gmax/front.png similarity index 100% rename from graphics/pokemon/grimmsnarl/gigantamax/front.png rename to graphics/pokemon/grimmsnarl/gmax/front.png diff --git a/graphics/pokemon/grimmsnarl/gigantamax/icon.png b/graphics/pokemon/grimmsnarl/gmax/icon.png similarity index 100% rename from graphics/pokemon/grimmsnarl/gigantamax/icon.png rename to graphics/pokemon/grimmsnarl/gmax/icon.png diff --git a/graphics/pokemon/grimmsnarl/gigantamax/normal.pal b/graphics/pokemon/grimmsnarl/gmax/normal.pal similarity index 100% rename from graphics/pokemon/grimmsnarl/gigantamax/normal.pal rename to graphics/pokemon/grimmsnarl/gmax/normal.pal diff --git a/graphics/pokemon/grimmsnarl/gigantamax/shiny.pal b/graphics/pokemon/grimmsnarl/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/grimmsnarl/gigantamax/shiny.pal rename to graphics/pokemon/grimmsnarl/gmax/shiny.pal diff --git a/graphics/pokemon/growlithe/hisuian/back.png b/graphics/pokemon/growlithe/hisui/back.png similarity index 100% rename from graphics/pokemon/growlithe/hisuian/back.png rename to graphics/pokemon/growlithe/hisui/back.png diff --git a/graphics/pokemon/growlithe/hisuian/front.png b/graphics/pokemon/growlithe/hisui/front.png similarity index 100% rename from graphics/pokemon/growlithe/hisuian/front.png rename to graphics/pokemon/growlithe/hisui/front.png diff --git a/graphics/pokemon/growlithe/hisuian/icon.png b/graphics/pokemon/growlithe/hisui/icon.png similarity index 100% rename from graphics/pokemon/growlithe/hisuian/icon.png rename to graphics/pokemon/growlithe/hisui/icon.png diff --git a/graphics/pokemon/growlithe/hisuian/normal.pal b/graphics/pokemon/growlithe/hisui/normal.pal similarity index 100% rename from graphics/pokemon/growlithe/hisuian/normal.pal rename to graphics/pokemon/growlithe/hisui/normal.pal diff --git a/graphics/pokemon/growlithe/hisuian/overworld.png b/graphics/pokemon/growlithe/hisui/overworld.png similarity index 100% rename from graphics/pokemon/growlithe/hisuian/overworld.png rename to graphics/pokemon/growlithe/hisui/overworld.png diff --git a/graphics/pokemon/growlithe/hisuian/overworld_normal.pal b/graphics/pokemon/growlithe/hisui/overworld_normal.pal similarity index 100% rename from graphics/pokemon/growlithe/hisuian/overworld_normal.pal rename to graphics/pokemon/growlithe/hisui/overworld_normal.pal diff --git a/graphics/pokemon/growlithe/hisuian/overworld_shiny.pal b/graphics/pokemon/growlithe/hisui/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/growlithe/hisuian/overworld_shiny.pal rename to graphics/pokemon/growlithe/hisui/overworld_shiny.pal diff --git a/graphics/pokemon/growlithe/hisuian/shiny.pal b/graphics/pokemon/growlithe/hisui/shiny.pal similarity index 100% rename from graphics/pokemon/growlithe/hisuian/shiny.pal rename to graphics/pokemon/growlithe/hisui/shiny.pal diff --git a/graphics/pokemon/hatterene/gigantamax/back.png b/graphics/pokemon/hatterene/gmax/back.png similarity index 100% rename from graphics/pokemon/hatterene/gigantamax/back.png rename to graphics/pokemon/hatterene/gmax/back.png diff --git a/graphics/pokemon/hatterene/gigantamax/front.png b/graphics/pokemon/hatterene/gmax/front.png similarity index 100% rename from graphics/pokemon/hatterene/gigantamax/front.png rename to graphics/pokemon/hatterene/gmax/front.png diff --git a/graphics/pokemon/hatterene/gigantamax/icon.png b/graphics/pokemon/hatterene/gmax/icon.png similarity index 100% rename from graphics/pokemon/hatterene/gigantamax/icon.png rename to graphics/pokemon/hatterene/gmax/icon.png diff --git a/graphics/pokemon/hatterene/gigantamax/normal.pal b/graphics/pokemon/hatterene/gmax/normal.pal similarity index 100% rename from graphics/pokemon/hatterene/gigantamax/normal.pal rename to graphics/pokemon/hatterene/gmax/normal.pal diff --git a/graphics/pokemon/hatterene/gigantamax/shiny.pal b/graphics/pokemon/hatterene/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/hatterene/gigantamax/shiny.pal rename to graphics/pokemon/hatterene/gmax/shiny.pal diff --git a/graphics/pokemon/indeedee/female/back.png b/graphics/pokemon/indeedee/f/back.png similarity index 100% rename from graphics/pokemon/indeedee/female/back.png rename to graphics/pokemon/indeedee/f/back.png diff --git a/graphics/pokemon/indeedee/female/front.png b/graphics/pokemon/indeedee/f/front.png similarity index 100% rename from graphics/pokemon/indeedee/female/front.png rename to graphics/pokemon/indeedee/f/front.png diff --git a/graphics/pokemon/indeedee/female/icon.png b/graphics/pokemon/indeedee/f/icon.png similarity index 100% rename from graphics/pokemon/indeedee/female/icon.png rename to graphics/pokemon/indeedee/f/icon.png diff --git a/graphics/pokemon/indeedee/female/normal.pal b/graphics/pokemon/indeedee/f/normal.pal similarity index 100% rename from graphics/pokemon/indeedee/female/normal.pal rename to graphics/pokemon/indeedee/f/normal.pal diff --git a/graphics/pokemon/indeedee/female/overworld.png b/graphics/pokemon/indeedee/f/overworld.png similarity index 100% rename from graphics/pokemon/indeedee/female/overworld.png rename to graphics/pokemon/indeedee/f/overworld.png diff --git a/graphics/pokemon/indeedee/female/overworld_normal.pal b/graphics/pokemon/indeedee/f/overworld_normal.pal similarity index 100% rename from graphics/pokemon/indeedee/female/overworld_normal.pal rename to graphics/pokemon/indeedee/f/overworld_normal.pal diff --git a/graphics/pokemon/indeedee/female/overworld_shiny.pal b/graphics/pokemon/indeedee/f/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/indeedee/female/overworld_shiny.pal rename to graphics/pokemon/indeedee/f/overworld_shiny.pal diff --git a/graphics/pokemon/indeedee/female/shiny.pal b/graphics/pokemon/indeedee/f/shiny.pal similarity index 100% rename from graphics/pokemon/indeedee/female/shiny.pal rename to graphics/pokemon/indeedee/f/shiny.pal diff --git a/graphics/pokemon/inteleon/gigantamax/back.png b/graphics/pokemon/inteleon/gmax/back.png similarity index 100% rename from graphics/pokemon/inteleon/gigantamax/back.png rename to graphics/pokemon/inteleon/gmax/back.png diff --git a/graphics/pokemon/inteleon/gigantamax/front.png b/graphics/pokemon/inteleon/gmax/front.png similarity index 100% rename from graphics/pokemon/inteleon/gigantamax/front.png rename to graphics/pokemon/inteleon/gmax/front.png diff --git a/graphics/pokemon/inteleon/gigantamax/icon.png b/graphics/pokemon/inteleon/gmax/icon.png similarity index 100% rename from graphics/pokemon/inteleon/gigantamax/icon.png rename to graphics/pokemon/inteleon/gmax/icon.png diff --git a/graphics/pokemon/inteleon/gigantamax/normal.pal b/graphics/pokemon/inteleon/gmax/normal.pal similarity index 100% rename from graphics/pokemon/inteleon/gigantamax/normal.pal rename to graphics/pokemon/inteleon/gmax/normal.pal diff --git a/graphics/pokemon/inteleon/gigantamax/shiny.pal b/graphics/pokemon/inteleon/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/inteleon/gigantamax/shiny.pal rename to graphics/pokemon/inteleon/gmax/shiny.pal diff --git a/graphics/pokemon/kingler/gigantamax/back.png b/graphics/pokemon/kingler/gmax/back.png similarity index 100% rename from graphics/pokemon/kingler/gigantamax/back.png rename to graphics/pokemon/kingler/gmax/back.png diff --git a/graphics/pokemon/kingler/gigantamax/front.png b/graphics/pokemon/kingler/gmax/front.png similarity index 100% rename from graphics/pokemon/kingler/gigantamax/front.png rename to graphics/pokemon/kingler/gmax/front.png diff --git a/graphics/pokemon/kingler/gigantamax/icon.png b/graphics/pokemon/kingler/gmax/icon.png similarity index 100% rename from graphics/pokemon/kingler/gigantamax/icon.png rename to graphics/pokemon/kingler/gmax/icon.png diff --git a/graphics/pokemon/kingler/gigantamax/normal.pal b/graphics/pokemon/kingler/gmax/normal.pal similarity index 100% rename from graphics/pokemon/kingler/gigantamax/normal.pal rename to graphics/pokemon/kingler/gmax/normal.pal diff --git a/graphics/pokemon/kingler/gigantamax/shiny.pal b/graphics/pokemon/kingler/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/kingler/gigantamax/shiny.pal rename to graphics/pokemon/kingler/gmax/shiny.pal diff --git a/graphics/pokemon/lapras/gigantamax/back.png b/graphics/pokemon/lapras/gmax/back.png similarity index 100% rename from graphics/pokemon/lapras/gigantamax/back.png rename to graphics/pokemon/lapras/gmax/back.png diff --git a/graphics/pokemon/lapras/gigantamax/front.png b/graphics/pokemon/lapras/gmax/front.png similarity index 100% rename from graphics/pokemon/lapras/gigantamax/front.png rename to graphics/pokemon/lapras/gmax/front.png diff --git a/graphics/pokemon/lapras/gigantamax/icon.png b/graphics/pokemon/lapras/gmax/icon.png similarity index 100% rename from graphics/pokemon/lapras/gigantamax/icon.png rename to graphics/pokemon/lapras/gmax/icon.png diff --git a/graphics/pokemon/lapras/gigantamax/normal.pal b/graphics/pokemon/lapras/gmax/normal.pal similarity index 100% rename from graphics/pokemon/lapras/gigantamax/normal.pal rename to graphics/pokemon/lapras/gmax/normal.pal diff --git a/graphics/pokemon/lapras/gigantamax/shiny.pal b/graphics/pokemon/lapras/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/lapras/gigantamax/shiny.pal rename to graphics/pokemon/lapras/gmax/shiny.pal diff --git a/graphics/pokemon/lilligant/hisuian/back.png b/graphics/pokemon/lilligant/hisui/back.png similarity index 100% rename from graphics/pokemon/lilligant/hisuian/back.png rename to graphics/pokemon/lilligant/hisui/back.png diff --git a/graphics/pokemon/lilligant/hisuian/front.png b/graphics/pokemon/lilligant/hisui/front.png similarity index 100% rename from graphics/pokemon/lilligant/hisuian/front.png rename to graphics/pokemon/lilligant/hisui/front.png diff --git a/graphics/pokemon/lilligant/hisuian/icon.png b/graphics/pokemon/lilligant/hisui/icon.png similarity index 100% rename from graphics/pokemon/lilligant/hisuian/icon.png rename to graphics/pokemon/lilligant/hisui/icon.png diff --git a/graphics/pokemon/lilligant/hisuian/normal.pal b/graphics/pokemon/lilligant/hisui/normal.pal similarity index 100% rename from graphics/pokemon/lilligant/hisuian/normal.pal rename to graphics/pokemon/lilligant/hisui/normal.pal diff --git a/graphics/pokemon/lilligant/hisuian/overworld.png b/graphics/pokemon/lilligant/hisui/overworld.png similarity index 100% rename from graphics/pokemon/lilligant/hisuian/overworld.png rename to graphics/pokemon/lilligant/hisui/overworld.png diff --git a/graphics/pokemon/lilligant/hisuian/overworld_normal.pal b/graphics/pokemon/lilligant/hisui/overworld_normal.pal similarity index 100% rename from graphics/pokemon/lilligant/hisuian/overworld_normal.pal rename to graphics/pokemon/lilligant/hisui/overworld_normal.pal diff --git a/graphics/pokemon/lilligant/hisuian/overworld_shiny.pal b/graphics/pokemon/lilligant/hisui/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/lilligant/hisuian/overworld_shiny.pal rename to graphics/pokemon/lilligant/hisui/overworld_shiny.pal diff --git a/graphics/pokemon/lilligant/hisuian/shiny.pal b/graphics/pokemon/lilligant/hisui/shiny.pal similarity index 100% rename from graphics/pokemon/lilligant/hisuian/shiny.pal rename to graphics/pokemon/lilligant/hisui/shiny.pal diff --git a/graphics/pokemon/linoone/galarian/back.png b/graphics/pokemon/linoone/galar/back.png similarity index 100% rename from graphics/pokemon/linoone/galarian/back.png rename to graphics/pokemon/linoone/galar/back.png diff --git a/graphics/pokemon/linoone/galarian/front.png b/graphics/pokemon/linoone/galar/front.png similarity index 100% rename from graphics/pokemon/linoone/galarian/front.png rename to graphics/pokemon/linoone/galar/front.png diff --git a/graphics/pokemon/linoone/galarian/icon.png b/graphics/pokemon/linoone/galar/icon.png similarity index 100% rename from graphics/pokemon/linoone/galarian/icon.png rename to graphics/pokemon/linoone/galar/icon.png diff --git a/graphics/pokemon/linoone/galarian/normal.pal b/graphics/pokemon/linoone/galar/normal.pal similarity index 100% rename from graphics/pokemon/linoone/galarian/normal.pal rename to graphics/pokemon/linoone/galar/normal.pal diff --git a/graphics/pokemon/linoone/galarian/overworld.png b/graphics/pokemon/linoone/galar/overworld.png similarity index 100% rename from graphics/pokemon/linoone/galarian/overworld.png rename to graphics/pokemon/linoone/galar/overworld.png diff --git a/graphics/pokemon/linoone/galarian/overworld_normal.pal b/graphics/pokemon/linoone/galar/overworld_normal.pal similarity index 100% rename from graphics/pokemon/linoone/galarian/overworld_normal.pal rename to graphics/pokemon/linoone/galar/overworld_normal.pal diff --git a/graphics/pokemon/linoone/galarian/overworld_shiny.pal b/graphics/pokemon/linoone/galar/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/linoone/galarian/overworld_shiny.pal rename to graphics/pokemon/linoone/galar/overworld_shiny.pal diff --git a/graphics/pokemon/linoone/galarian/shiny.pal b/graphics/pokemon/linoone/galar/shiny.pal similarity index 100% rename from graphics/pokemon/linoone/galarian/shiny.pal rename to graphics/pokemon/linoone/galar/shiny.pal diff --git a/graphics/pokemon/machamp/gigantamax/back.png b/graphics/pokemon/machamp/gmax/back.png similarity index 100% rename from graphics/pokemon/machamp/gigantamax/back.png rename to graphics/pokemon/machamp/gmax/back.png diff --git a/graphics/pokemon/machamp/gigantamax/front.png b/graphics/pokemon/machamp/gmax/front.png similarity index 100% rename from graphics/pokemon/machamp/gigantamax/front.png rename to graphics/pokemon/machamp/gmax/front.png diff --git a/graphics/pokemon/machamp/gigantamax/icon.png b/graphics/pokemon/machamp/gmax/icon.png similarity index 100% rename from graphics/pokemon/machamp/gigantamax/icon.png rename to graphics/pokemon/machamp/gmax/icon.png diff --git a/graphics/pokemon/machamp/gigantamax/normal.pal b/graphics/pokemon/machamp/gmax/normal.pal similarity index 100% rename from graphics/pokemon/machamp/gigantamax/normal.pal rename to graphics/pokemon/machamp/gmax/normal.pal diff --git a/graphics/pokemon/machamp/gigantamax/shiny.pal b/graphics/pokemon/machamp/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/machamp/gigantamax/shiny.pal rename to graphics/pokemon/machamp/gmax/shiny.pal diff --git a/graphics/pokemon/marowak/alolan/back.png b/graphics/pokemon/marowak/alola/back.png similarity index 100% rename from graphics/pokemon/marowak/alolan/back.png rename to graphics/pokemon/marowak/alola/back.png diff --git a/graphics/pokemon/marowak/alolan/front.png b/graphics/pokemon/marowak/alola/front.png similarity index 100% rename from graphics/pokemon/marowak/alolan/front.png rename to graphics/pokemon/marowak/alola/front.png diff --git a/graphics/pokemon/marowak/alolan/icon.png b/graphics/pokemon/marowak/alola/icon.png similarity index 100% rename from graphics/pokemon/marowak/alolan/icon.png rename to graphics/pokemon/marowak/alola/icon.png diff --git a/graphics/pokemon/marowak/alolan/normal.pal b/graphics/pokemon/marowak/alola/normal.pal similarity index 100% rename from graphics/pokemon/marowak/alolan/normal.pal rename to graphics/pokemon/marowak/alola/normal.pal diff --git a/graphics/pokemon/marowak/alolan/overworld.png b/graphics/pokemon/marowak/alola/overworld.png similarity index 100% rename from graphics/pokemon/marowak/alolan/overworld.png rename to graphics/pokemon/marowak/alola/overworld.png diff --git a/graphics/pokemon/marowak/alolan/overworld_normal.pal b/graphics/pokemon/marowak/alola/overworld_normal.pal similarity index 100% rename from graphics/pokemon/marowak/alolan/overworld_normal.pal rename to graphics/pokemon/marowak/alola/overworld_normal.pal diff --git a/graphics/pokemon/marowak/alolan/overworld_shiny.pal b/graphics/pokemon/marowak/alola/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/marowak/alolan/overworld_shiny.pal rename to graphics/pokemon/marowak/alola/overworld_shiny.pal diff --git a/graphics/pokemon/marowak/alolan/shiny.pal b/graphics/pokemon/marowak/alola/shiny.pal similarity index 100% rename from graphics/pokemon/marowak/alolan/shiny.pal rename to graphics/pokemon/marowak/alola/shiny.pal diff --git a/graphics/pokemon/melmetal/gigantamax/back.png b/graphics/pokemon/melmetal/gmax/back.png similarity index 100% rename from graphics/pokemon/melmetal/gigantamax/back.png rename to graphics/pokemon/melmetal/gmax/back.png diff --git a/graphics/pokemon/melmetal/gigantamax/front.png b/graphics/pokemon/melmetal/gmax/front.png similarity index 100% rename from graphics/pokemon/melmetal/gigantamax/front.png rename to graphics/pokemon/melmetal/gmax/front.png diff --git a/graphics/pokemon/melmetal/gigantamax/icon.png b/graphics/pokemon/melmetal/gmax/icon.png similarity index 100% rename from graphics/pokemon/melmetal/gigantamax/icon.png rename to graphics/pokemon/melmetal/gmax/icon.png diff --git a/graphics/pokemon/melmetal/gigantamax/normal.pal b/graphics/pokemon/melmetal/gmax/normal.pal similarity index 100% rename from graphics/pokemon/melmetal/gigantamax/normal.pal rename to graphics/pokemon/melmetal/gmax/normal.pal diff --git a/graphics/pokemon/melmetal/gigantamax/shiny.pal b/graphics/pokemon/melmetal/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/melmetal/gigantamax/shiny.pal rename to graphics/pokemon/melmetal/gmax/shiny.pal diff --git a/graphics/pokemon/meowstic/female/anim_front.png b/graphics/pokemon/meowstic/f/anim_front.png similarity index 100% rename from graphics/pokemon/meowstic/female/anim_front.png rename to graphics/pokemon/meowstic/f/anim_front.png diff --git a/graphics/pokemon/meowstic/female/back.png b/graphics/pokemon/meowstic/f/back.png similarity index 100% rename from graphics/pokemon/meowstic/female/back.png rename to graphics/pokemon/meowstic/f/back.png diff --git a/graphics/pokemon/meowstic/female/icon.png b/graphics/pokemon/meowstic/f/icon.png similarity index 100% rename from graphics/pokemon/meowstic/female/icon.png rename to graphics/pokemon/meowstic/f/icon.png diff --git a/graphics/pokemon/meowstic/female/normal.pal b/graphics/pokemon/meowstic/f/normal.pal similarity index 100% rename from graphics/pokemon/meowstic/female/normal.pal rename to graphics/pokemon/meowstic/f/normal.pal diff --git a/graphics/pokemon/meowstic/female/overworld.png b/graphics/pokemon/meowstic/f/overworld.png similarity index 100% rename from graphics/pokemon/meowstic/female/overworld.png rename to graphics/pokemon/meowstic/f/overworld.png diff --git a/graphics/pokemon/meowstic/female/overworld_normal.pal b/graphics/pokemon/meowstic/f/overworld_normal.pal similarity index 100% rename from graphics/pokemon/meowstic/female/overworld_normal.pal rename to graphics/pokemon/meowstic/f/overworld_normal.pal diff --git a/graphics/pokemon/meowstic/female/overworld_shiny.pal b/graphics/pokemon/meowstic/f/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/meowstic/female/overworld_shiny.pal rename to graphics/pokemon/meowstic/f/overworld_shiny.pal diff --git a/graphics/pokemon/meowstic/female/shiny.pal b/graphics/pokemon/meowstic/f/shiny.pal similarity index 100% rename from graphics/pokemon/meowstic/female/shiny.pal rename to graphics/pokemon/meowstic/f/shiny.pal diff --git a/graphics/pokemon/meowth/alolan/back.png b/graphics/pokemon/meowth/alola/back.png similarity index 100% rename from graphics/pokemon/meowth/alolan/back.png rename to graphics/pokemon/meowth/alola/back.png diff --git a/graphics/pokemon/meowth/alolan/front.png b/graphics/pokemon/meowth/alola/front.png similarity index 100% rename from graphics/pokemon/meowth/alolan/front.png rename to graphics/pokemon/meowth/alola/front.png diff --git a/graphics/pokemon/meowth/alolan/icon.png b/graphics/pokemon/meowth/alola/icon.png similarity index 100% rename from graphics/pokemon/meowth/alolan/icon.png rename to graphics/pokemon/meowth/alola/icon.png diff --git a/graphics/pokemon/meowth/alolan/normal.pal b/graphics/pokemon/meowth/alola/normal.pal similarity index 100% rename from graphics/pokemon/meowth/alolan/normal.pal rename to graphics/pokemon/meowth/alola/normal.pal diff --git a/graphics/pokemon/meowth/alolan/overworld.png b/graphics/pokemon/meowth/alola/overworld.png similarity index 100% rename from graphics/pokemon/meowth/alolan/overworld.png rename to graphics/pokemon/meowth/alola/overworld.png diff --git a/graphics/pokemon/meowth/alolan/overworld_normal.pal b/graphics/pokemon/meowth/alola/overworld_normal.pal similarity index 100% rename from graphics/pokemon/meowth/alolan/overworld_normal.pal rename to graphics/pokemon/meowth/alola/overworld_normal.pal diff --git a/graphics/pokemon/meowth/alolan/overworld_shiny.pal b/graphics/pokemon/meowth/alola/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/meowth/alolan/overworld_shiny.pal rename to graphics/pokemon/meowth/alola/overworld_shiny.pal diff --git a/graphics/pokemon/meowth/alolan/shiny.pal b/graphics/pokemon/meowth/alola/shiny.pal similarity index 100% rename from graphics/pokemon/meowth/alolan/shiny.pal rename to graphics/pokemon/meowth/alola/shiny.pal diff --git a/graphics/pokemon/meowth/galarian/back.png b/graphics/pokemon/meowth/galar/back.png similarity index 100% rename from graphics/pokemon/meowth/galarian/back.png rename to graphics/pokemon/meowth/galar/back.png diff --git a/graphics/pokemon/meowth/galarian/front.png b/graphics/pokemon/meowth/galar/front.png similarity index 100% rename from graphics/pokemon/meowth/galarian/front.png rename to graphics/pokemon/meowth/galar/front.png diff --git a/graphics/pokemon/meowth/galarian/icon.png b/graphics/pokemon/meowth/galar/icon.png similarity index 100% rename from graphics/pokemon/meowth/galarian/icon.png rename to graphics/pokemon/meowth/galar/icon.png diff --git a/graphics/pokemon/meowth/galarian/normal.pal b/graphics/pokemon/meowth/galar/normal.pal similarity index 100% rename from graphics/pokemon/meowth/galarian/normal.pal rename to graphics/pokemon/meowth/galar/normal.pal diff --git a/graphics/pokemon/meowth/galarian/overworld.png b/graphics/pokemon/meowth/galar/overworld.png similarity index 100% rename from graphics/pokemon/meowth/galarian/overworld.png rename to graphics/pokemon/meowth/galar/overworld.png diff --git a/graphics/pokemon/meowth/galarian/overworld_normal.pal b/graphics/pokemon/meowth/galar/overworld_normal.pal similarity index 100% rename from graphics/pokemon/meowth/galarian/overworld_normal.pal rename to graphics/pokemon/meowth/galar/overworld_normal.pal diff --git a/graphics/pokemon/meowth/galarian/overworld_shiny.pal b/graphics/pokemon/meowth/galar/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/meowth/galarian/overworld_shiny.pal rename to graphics/pokemon/meowth/galar/overworld_shiny.pal diff --git a/graphics/pokemon/meowth/galarian/shiny.pal b/graphics/pokemon/meowth/galar/shiny.pal similarity index 100% rename from graphics/pokemon/meowth/galarian/shiny.pal rename to graphics/pokemon/meowth/galar/shiny.pal diff --git a/graphics/pokemon/meowth/gigantamax/back.png b/graphics/pokemon/meowth/gmax/back.png similarity index 100% rename from graphics/pokemon/meowth/gigantamax/back.png rename to graphics/pokemon/meowth/gmax/back.png diff --git a/graphics/pokemon/meowth/gigantamax/front.png b/graphics/pokemon/meowth/gmax/front.png similarity index 100% rename from graphics/pokemon/meowth/gigantamax/front.png rename to graphics/pokemon/meowth/gmax/front.png diff --git a/graphics/pokemon/meowth/gigantamax/icon.png b/graphics/pokemon/meowth/gmax/icon.png similarity index 100% rename from graphics/pokemon/meowth/gigantamax/icon.png rename to graphics/pokemon/meowth/gmax/icon.png diff --git a/graphics/pokemon/meowth/gigantamax/normal.pal b/graphics/pokemon/meowth/gmax/normal.pal similarity index 100% rename from graphics/pokemon/meowth/gigantamax/normal.pal rename to graphics/pokemon/meowth/gmax/normal.pal diff --git a/graphics/pokemon/meowth/gigantamax/shiny.pal b/graphics/pokemon/meowth/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/meowth/gigantamax/shiny.pal rename to graphics/pokemon/meowth/gmax/shiny.pal diff --git a/graphics/pokemon/moltres/galarian/back.png b/graphics/pokemon/moltres/galar/back.png similarity index 100% rename from graphics/pokemon/moltres/galarian/back.png rename to graphics/pokemon/moltres/galar/back.png diff --git a/graphics/pokemon/moltres/galarian/front.png b/graphics/pokemon/moltres/galar/front.png similarity index 100% rename from graphics/pokemon/moltres/galarian/front.png rename to graphics/pokemon/moltres/galar/front.png diff --git a/graphics/pokemon/moltres/galarian/icon.png b/graphics/pokemon/moltres/galar/icon.png similarity index 100% rename from graphics/pokemon/moltres/galarian/icon.png rename to graphics/pokemon/moltres/galar/icon.png diff --git a/graphics/pokemon/moltres/galarian/normal.pal b/graphics/pokemon/moltres/galar/normal.pal similarity index 100% rename from graphics/pokemon/moltres/galarian/normal.pal rename to graphics/pokemon/moltres/galar/normal.pal diff --git a/graphics/pokemon/moltres/galarian/overworld.png b/graphics/pokemon/moltres/galar/overworld.png similarity index 100% rename from graphics/pokemon/moltres/galarian/overworld.png rename to graphics/pokemon/moltres/galar/overworld.png diff --git a/graphics/pokemon/moltres/galarian/overworld_normal.pal b/graphics/pokemon/moltres/galar/overworld_normal.pal similarity index 100% rename from graphics/pokemon/moltres/galarian/overworld_normal.pal rename to graphics/pokemon/moltres/galar/overworld_normal.pal diff --git a/graphics/pokemon/moltres/galarian/overworld_shiny.pal b/graphics/pokemon/moltres/galar/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/moltres/galarian/overworld_shiny.pal rename to graphics/pokemon/moltres/galar/overworld_shiny.pal diff --git a/graphics/pokemon/moltres/galarian/shiny.pal b/graphics/pokemon/moltres/galar/shiny.pal similarity index 100% rename from graphics/pokemon/moltres/galarian/shiny.pal rename to graphics/pokemon/moltres/galar/shiny.pal diff --git a/graphics/pokemon/mr_mime/galarian/back.png b/graphics/pokemon/mr_mime/galar/back.png similarity index 100% rename from graphics/pokemon/mr_mime/galarian/back.png rename to graphics/pokemon/mr_mime/galar/back.png diff --git a/graphics/pokemon/mr_mime/galarian/front.png b/graphics/pokemon/mr_mime/galar/front.png similarity index 100% rename from graphics/pokemon/mr_mime/galarian/front.png rename to graphics/pokemon/mr_mime/galar/front.png diff --git a/graphics/pokemon/mr_mime/galarian/icon.png b/graphics/pokemon/mr_mime/galar/icon.png similarity index 100% rename from graphics/pokemon/mr_mime/galarian/icon.png rename to graphics/pokemon/mr_mime/galar/icon.png diff --git a/graphics/pokemon/mr_mime/galarian/normal.pal b/graphics/pokemon/mr_mime/galar/normal.pal similarity index 100% rename from graphics/pokemon/mr_mime/galarian/normal.pal rename to graphics/pokemon/mr_mime/galar/normal.pal diff --git a/graphics/pokemon/mr_mime/galarian/overworld.png b/graphics/pokemon/mr_mime/galar/overworld.png similarity index 100% rename from graphics/pokemon/mr_mime/galarian/overworld.png rename to graphics/pokemon/mr_mime/galar/overworld.png diff --git a/graphics/pokemon/mr_mime/galarian/overworld_normal.pal b/graphics/pokemon/mr_mime/galar/overworld_normal.pal similarity index 100% rename from graphics/pokemon/mr_mime/galarian/overworld_normal.pal rename to graphics/pokemon/mr_mime/galar/overworld_normal.pal diff --git a/graphics/pokemon/mr_mime/galarian/overworld_shiny.pal b/graphics/pokemon/mr_mime/galar/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/mr_mime/galarian/overworld_shiny.pal rename to graphics/pokemon/mr_mime/galar/overworld_shiny.pal diff --git a/graphics/pokemon/mr_mime/galarian/shiny.pal b/graphics/pokemon/mr_mime/galar/shiny.pal similarity index 100% rename from graphics/pokemon/mr_mime/galarian/shiny.pal rename to graphics/pokemon/mr_mime/galar/shiny.pal diff --git a/graphics/pokemon/muk/alolan/back.png b/graphics/pokemon/muk/alola/back.png similarity index 100% rename from graphics/pokemon/muk/alolan/back.png rename to graphics/pokemon/muk/alola/back.png diff --git a/graphics/pokemon/muk/alolan/front.png b/graphics/pokemon/muk/alola/front.png similarity index 100% rename from graphics/pokemon/muk/alolan/front.png rename to graphics/pokemon/muk/alola/front.png diff --git a/graphics/pokemon/muk/alolan/icon.png b/graphics/pokemon/muk/alola/icon.png similarity index 100% rename from graphics/pokemon/muk/alolan/icon.png rename to graphics/pokemon/muk/alola/icon.png diff --git a/graphics/pokemon/muk/alolan/normal.pal b/graphics/pokemon/muk/alola/normal.pal similarity index 100% rename from graphics/pokemon/muk/alolan/normal.pal rename to graphics/pokemon/muk/alola/normal.pal diff --git a/graphics/pokemon/muk/alolan/overworld.png b/graphics/pokemon/muk/alola/overworld.png similarity index 100% rename from graphics/pokemon/muk/alolan/overworld.png rename to graphics/pokemon/muk/alola/overworld.png diff --git a/graphics/pokemon/muk/alolan/overworld_normal.pal b/graphics/pokemon/muk/alola/overworld_normal.pal similarity index 100% rename from graphics/pokemon/muk/alolan/overworld_normal.pal rename to graphics/pokemon/muk/alola/overworld_normal.pal diff --git a/graphics/pokemon/muk/alolan/overworld_shiny.pal b/graphics/pokemon/muk/alola/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/muk/alolan/overworld_shiny.pal rename to graphics/pokemon/muk/alola/overworld_shiny.pal diff --git a/graphics/pokemon/muk/alolan/shiny.pal b/graphics/pokemon/muk/alola/shiny.pal similarity index 100% rename from graphics/pokemon/muk/alolan/shiny.pal rename to graphics/pokemon/muk/alola/shiny.pal diff --git a/graphics/pokemon/ninetales/alolan/back.png b/graphics/pokemon/ninetales/alola/back.png similarity index 100% rename from graphics/pokemon/ninetales/alolan/back.png rename to graphics/pokemon/ninetales/alola/back.png diff --git a/graphics/pokemon/ninetales/alolan/front.png b/graphics/pokemon/ninetales/alola/front.png similarity index 100% rename from graphics/pokemon/ninetales/alolan/front.png rename to graphics/pokemon/ninetales/alola/front.png diff --git a/graphics/pokemon/ninetales/alolan/icon.png b/graphics/pokemon/ninetales/alola/icon.png similarity index 100% rename from graphics/pokemon/ninetales/alolan/icon.png rename to graphics/pokemon/ninetales/alola/icon.png diff --git a/graphics/pokemon/ninetales/alolan/normal.pal b/graphics/pokemon/ninetales/alola/normal.pal similarity index 100% rename from graphics/pokemon/ninetales/alolan/normal.pal rename to graphics/pokemon/ninetales/alola/normal.pal diff --git a/graphics/pokemon/ninetales/alolan/overworld.png b/graphics/pokemon/ninetales/alola/overworld.png similarity index 100% rename from graphics/pokemon/ninetales/alolan/overworld.png rename to graphics/pokemon/ninetales/alola/overworld.png diff --git a/graphics/pokemon/ninetales/alolan/overworld_normal.pal b/graphics/pokemon/ninetales/alola/overworld_normal.pal similarity index 100% rename from graphics/pokemon/ninetales/alolan/overworld_normal.pal rename to graphics/pokemon/ninetales/alola/overworld_normal.pal diff --git a/graphics/pokemon/ninetales/alolan/overworld_shiny.pal b/graphics/pokemon/ninetales/alola/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/ninetales/alolan/overworld_shiny.pal rename to graphics/pokemon/ninetales/alola/overworld_shiny.pal diff --git a/graphics/pokemon/ninetales/alolan/shiny.pal b/graphics/pokemon/ninetales/alola/shiny.pal similarity index 100% rename from graphics/pokemon/ninetales/alolan/shiny.pal rename to graphics/pokemon/ninetales/alola/shiny.pal diff --git a/graphics/pokemon/ogerpon/cornerstone/tera/back.png b/graphics/pokemon/ogerpon/cornerstone_tera/back.png similarity index 100% rename from graphics/pokemon/ogerpon/cornerstone/tera/back.png rename to graphics/pokemon/ogerpon/cornerstone_tera/back.png diff --git a/graphics/pokemon/ogerpon/cornerstone/tera/front.png b/graphics/pokemon/ogerpon/cornerstone_tera/front.png similarity index 100% rename from graphics/pokemon/ogerpon/cornerstone/tera/front.png rename to graphics/pokemon/ogerpon/cornerstone_tera/front.png diff --git a/graphics/pokemon/ogerpon/cornerstone/tera/normal.pal b/graphics/pokemon/ogerpon/cornerstone_tera/normal.pal similarity index 100% rename from graphics/pokemon/ogerpon/cornerstone/tera/normal.pal rename to graphics/pokemon/ogerpon/cornerstone_tera/normal.pal diff --git a/graphics/pokemon/ogerpon/cornerstone/tera/shiny.pal b/graphics/pokemon/ogerpon/cornerstone_tera/shiny.pal similarity index 100% rename from graphics/pokemon/ogerpon/cornerstone/tera/shiny.pal rename to graphics/pokemon/ogerpon/cornerstone_tera/shiny.pal diff --git a/graphics/pokemon/ogerpon/hearthflame/tera/back.png b/graphics/pokemon/ogerpon/hearthflame_tera/back.png similarity index 100% rename from graphics/pokemon/ogerpon/hearthflame/tera/back.png rename to graphics/pokemon/ogerpon/hearthflame_tera/back.png diff --git a/graphics/pokemon/ogerpon/hearthflame/tera/front.png b/graphics/pokemon/ogerpon/hearthflame_tera/front.png similarity index 100% rename from graphics/pokemon/ogerpon/hearthflame/tera/front.png rename to graphics/pokemon/ogerpon/hearthflame_tera/front.png diff --git a/graphics/pokemon/ogerpon/hearthflame/tera/normal.pal b/graphics/pokemon/ogerpon/hearthflame_tera/normal.pal similarity index 100% rename from graphics/pokemon/ogerpon/hearthflame/tera/normal.pal rename to graphics/pokemon/ogerpon/hearthflame_tera/normal.pal diff --git a/graphics/pokemon/ogerpon/hearthflame/tera/shiny.pal b/graphics/pokemon/ogerpon/hearthflame_tera/shiny.pal similarity index 100% rename from graphics/pokemon/ogerpon/hearthflame/tera/shiny.pal rename to graphics/pokemon/ogerpon/hearthflame_tera/shiny.pal diff --git a/graphics/pokemon/ogerpon/tera/back.png b/graphics/pokemon/ogerpon/teal_tera/back.png similarity index 100% rename from graphics/pokemon/ogerpon/tera/back.png rename to graphics/pokemon/ogerpon/teal_tera/back.png diff --git a/graphics/pokemon/ogerpon/tera/front.png b/graphics/pokemon/ogerpon/teal_tera/front.png similarity index 100% rename from graphics/pokemon/ogerpon/tera/front.png rename to graphics/pokemon/ogerpon/teal_tera/front.png diff --git a/graphics/pokemon/ogerpon/tera/normal.pal b/graphics/pokemon/ogerpon/teal_tera/normal.pal similarity index 100% rename from graphics/pokemon/ogerpon/tera/normal.pal rename to graphics/pokemon/ogerpon/teal_tera/normal.pal diff --git a/graphics/pokemon/ogerpon/tera/shiny.pal b/graphics/pokemon/ogerpon/teal_tera/shiny.pal similarity index 100% rename from graphics/pokemon/ogerpon/tera/shiny.pal rename to graphics/pokemon/ogerpon/teal_tera/shiny.pal diff --git a/graphics/pokemon/ogerpon/wellspring/tera/back.png b/graphics/pokemon/ogerpon/wellspring_tera/back.png similarity index 100% rename from graphics/pokemon/ogerpon/wellspring/tera/back.png rename to graphics/pokemon/ogerpon/wellspring_tera/back.png diff --git a/graphics/pokemon/ogerpon/wellspring/tera/front.png b/graphics/pokemon/ogerpon/wellspring_tera/front.png similarity index 100% rename from graphics/pokemon/ogerpon/wellspring/tera/front.png rename to graphics/pokemon/ogerpon/wellspring_tera/front.png diff --git a/graphics/pokemon/ogerpon/wellspring/tera/normal.pal b/graphics/pokemon/ogerpon/wellspring_tera/normal.pal similarity index 100% rename from graphics/pokemon/ogerpon/wellspring/tera/normal.pal rename to graphics/pokemon/ogerpon/wellspring_tera/normal.pal diff --git a/graphics/pokemon/ogerpon/wellspring/tera/shiny.pal b/graphics/pokemon/ogerpon/wellspring_tera/shiny.pal similarity index 100% rename from graphics/pokemon/ogerpon/wellspring/tera/shiny.pal rename to graphics/pokemon/ogerpon/wellspring_tera/shiny.pal diff --git a/graphics/pokemon/oinkologne/female/back.png b/graphics/pokemon/oinkologne/f/back.png similarity index 100% rename from graphics/pokemon/oinkologne/female/back.png rename to graphics/pokemon/oinkologne/f/back.png diff --git a/graphics/pokemon/oinkologne/female/front.png b/graphics/pokemon/oinkologne/f/front.png similarity index 100% rename from graphics/pokemon/oinkologne/female/front.png rename to graphics/pokemon/oinkologne/f/front.png diff --git a/graphics/pokemon/oinkologne/female/icon.png b/graphics/pokemon/oinkologne/f/icon.png similarity index 100% rename from graphics/pokemon/oinkologne/female/icon.png rename to graphics/pokemon/oinkologne/f/icon.png diff --git a/graphics/pokemon/oinkologne/female/normal.pal b/graphics/pokemon/oinkologne/f/normal.pal similarity index 100% rename from graphics/pokemon/oinkologne/female/normal.pal rename to graphics/pokemon/oinkologne/f/normal.pal diff --git a/graphics/pokemon/oinkologne/female/overworld.png b/graphics/pokemon/oinkologne/f/overworld.png similarity index 100% rename from graphics/pokemon/oinkologne/female/overworld.png rename to graphics/pokemon/oinkologne/f/overworld.png diff --git a/graphics/pokemon/oinkologne/female/overworld_normal.pal b/graphics/pokemon/oinkologne/f/overworld_normal.pal similarity index 100% rename from graphics/pokemon/oinkologne/female/overworld_normal.pal rename to graphics/pokemon/oinkologne/f/overworld_normal.pal diff --git a/graphics/pokemon/oinkologne/female/overworld_shiny.pal b/graphics/pokemon/oinkologne/f/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/oinkologne/female/overworld_shiny.pal rename to graphics/pokemon/oinkologne/f/overworld_shiny.pal diff --git a/graphics/pokemon/oinkologne/female/shiny.pal b/graphics/pokemon/oinkologne/f/shiny.pal similarity index 100% rename from graphics/pokemon/oinkologne/female/shiny.pal rename to graphics/pokemon/oinkologne/f/shiny.pal diff --git a/graphics/pokemon/orbeetle/gigantamax/back.png b/graphics/pokemon/orbeetle/gmax/back.png similarity index 100% rename from graphics/pokemon/orbeetle/gigantamax/back.png rename to graphics/pokemon/orbeetle/gmax/back.png diff --git a/graphics/pokemon/orbeetle/gigantamax/front.png b/graphics/pokemon/orbeetle/gmax/front.png similarity index 100% rename from graphics/pokemon/orbeetle/gigantamax/front.png rename to graphics/pokemon/orbeetle/gmax/front.png diff --git a/graphics/pokemon/orbeetle/gigantamax/icon.png b/graphics/pokemon/orbeetle/gmax/icon.png similarity index 100% rename from graphics/pokemon/orbeetle/gigantamax/icon.png rename to graphics/pokemon/orbeetle/gmax/icon.png diff --git a/graphics/pokemon/orbeetle/gigantamax/normal.pal b/graphics/pokemon/orbeetle/gmax/normal.pal similarity index 100% rename from graphics/pokemon/orbeetle/gigantamax/normal.pal rename to graphics/pokemon/orbeetle/gmax/normal.pal diff --git a/graphics/pokemon/orbeetle/gigantamax/shiny.pal b/graphics/pokemon/orbeetle/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/orbeetle/gigantamax/shiny.pal rename to graphics/pokemon/orbeetle/gmax/shiny.pal diff --git a/graphics/pokemon/persian/alolan/back.png b/graphics/pokemon/persian/alola/back.png similarity index 100% rename from graphics/pokemon/persian/alolan/back.png rename to graphics/pokemon/persian/alola/back.png diff --git a/graphics/pokemon/persian/alolan/front.png b/graphics/pokemon/persian/alola/front.png similarity index 100% rename from graphics/pokemon/persian/alolan/front.png rename to graphics/pokemon/persian/alola/front.png diff --git a/graphics/pokemon/persian/alolan/icon.png b/graphics/pokemon/persian/alola/icon.png similarity index 100% rename from graphics/pokemon/persian/alolan/icon.png rename to graphics/pokemon/persian/alola/icon.png diff --git a/graphics/pokemon/persian/alolan/normal.pal b/graphics/pokemon/persian/alola/normal.pal similarity index 100% rename from graphics/pokemon/persian/alolan/normal.pal rename to graphics/pokemon/persian/alola/normal.pal diff --git a/graphics/pokemon/persian/alolan/overworld.png b/graphics/pokemon/persian/alola/overworld.png similarity index 100% rename from graphics/pokemon/persian/alolan/overworld.png rename to graphics/pokemon/persian/alola/overworld.png diff --git a/graphics/pokemon/persian/alolan/overworld_normal.pal b/graphics/pokemon/persian/alola/overworld_normal.pal similarity index 100% rename from graphics/pokemon/persian/alolan/overworld_normal.pal rename to graphics/pokemon/persian/alola/overworld_normal.pal diff --git a/graphics/pokemon/persian/alolan/overworld_shiny.pal b/graphics/pokemon/persian/alola/overworld_shiny.pal similarity index 100% rename from graphics/pokemon/persian/alolan/overworld_shiny.pal rename to graphics/pokemon/persian/alola/overworld_shiny.pal diff --git a/graphics/pokemon/persian/alolan/shiny.pal b/graphics/pokemon/persian/alola/shiny.pal similarity index 100% rename from graphics/pokemon/persian/alolan/shiny.pal rename to graphics/pokemon/persian/alola/shiny.pal diff --git a/graphics/pokemon/pikachu/alola_cap/back.png b/graphics/pokemon/pikachu/alola/back.png similarity index 100% rename from graphics/pokemon/pikachu/alola_cap/back.png rename to graphics/pokemon/pikachu/alola/back.png diff --git a/graphics/pokemon/pikachu/alola_cap/front.png b/graphics/pokemon/pikachu/alola/front.png similarity index 100% rename from graphics/pokemon/pikachu/alola_cap/front.png rename to graphics/pokemon/pikachu/alola/front.png diff --git a/graphics/pokemon/pikachu/alola_cap/icon.png b/graphics/pokemon/pikachu/alola/icon.png similarity index 100% rename from graphics/pokemon/pikachu/alola_cap/icon.png rename to graphics/pokemon/pikachu/alola/icon.png diff --git a/graphics/pokemon/pikachu/alola_cap/normal.pal b/graphics/pokemon/pikachu/alola/normal.pal similarity index 100% rename from graphics/pokemon/pikachu/alola_cap/normal.pal rename to graphics/pokemon/pikachu/alola/normal.pal diff --git a/graphics/pokemon/pikachu/alola_cap/shiny.pal b/graphics/pokemon/pikachu/alola/shiny.pal similarity index 100% rename from graphics/pokemon/pikachu/alola_cap/shiny.pal rename to graphics/pokemon/pikachu/alola/shiny.pal diff --git a/graphics/pokemon/pikachu/gigantamax/back.png b/graphics/pokemon/pikachu/gmax/back.png similarity index 100% rename from graphics/pokemon/pikachu/gigantamax/back.png rename to graphics/pokemon/pikachu/gmax/back.png diff --git a/graphics/pokemon/pikachu/gigantamax/front.png b/graphics/pokemon/pikachu/gmax/front.png similarity index 100% rename from graphics/pokemon/pikachu/gigantamax/front.png rename to graphics/pokemon/pikachu/gmax/front.png diff --git a/graphics/pokemon/pikachu/gigantamax/icon.png b/graphics/pokemon/pikachu/gmax/icon.png similarity index 100% rename from graphics/pokemon/pikachu/gigantamax/icon.png rename to graphics/pokemon/pikachu/gmax/icon.png diff --git a/graphics/pokemon/pikachu/gigantamax/normal.pal b/graphics/pokemon/pikachu/gmax/normal.pal similarity index 100% rename from graphics/pokemon/pikachu/gigantamax/normal.pal rename to graphics/pokemon/pikachu/gmax/normal.pal diff --git a/graphics/pokemon/pikachu/gigantamax/shiny.pal b/graphics/pokemon/pikachu/gmax/shiny.pal similarity index 100% rename from graphics/pokemon/pikachu/gigantamax/shiny.pal rename to graphics/pokemon/pikachu/gmax/shiny.pal diff --git a/graphics/pokemon/pikachu/hoenn_cap/back.png b/graphics/pokemon/pikachu/hoenn/back.png similarity index 100% rename from graphics/pokemon/pikachu/hoenn_cap/back.png rename to graphics/pokemon/pikachu/hoenn/back.png diff --git a/graphics/pokemon/pikachu/hoenn_cap/front.png b/graphics/pokemon/pikachu/hoenn/front.png similarity index 100% rename from graphics/pokemon/pikachu/hoenn_cap/front.png rename to graphics/pokemon/pikachu/hoenn/front.png diff --git a/graphics/pokemon/pikachu/hoenn_cap/icon.png b/graphics/pokemon/pikachu/hoenn/icon.png similarity index 100% rename from graphics/pokemon/pikachu/hoenn_cap/icon.png rename to graphics/pokemon/pikachu/hoenn/icon.png diff --git a/graphics/pokemon/pikachu/hoenn_cap/normal.pal b/graphics/pokemon/pikachu/hoenn/normal.pal similarity index 100% rename from graphics/pokemon/pikachu/hoenn_cap/normal.pal rename to graphics/pokemon/pikachu/hoenn/normal.pal diff --git a/graphics/pokemon/pikachu/hoenn_cap/shiny.pal b/graphics/pokemon/pikachu/hoenn/shiny.pal similarity index 100% rename from graphics/pokemon/pikachu/hoenn_cap/shiny.pal rename to graphics/pokemon/pikachu/hoenn/shiny.pal diff --git a/graphics/pokemon/pikachu/kalos_cap/back.png b/graphics/pokemon/pikachu/kalos/back.png similarity index 100% rename from graphics/pokemon/pikachu/kalos_cap/back.png rename to graphics/pokemon/pikachu/kalos/back.png diff --git a/graphics/pokemon/pikachu/kalos_cap/front.png b/graphics/pokemon/pikachu/kalos/front.png similarity index 100% rename from graphics/pokemon/pikachu/kalos_cap/front.png rename to graphics/pokemon/pikachu/kalos/front.png diff --git a/graphics/pokemon/pikachu/kalos_cap/icon.png b/graphics/pokemon/pikachu/kalos/icon.png similarity index 100% rename from graphics/pokemon/pikachu/kalos_cap/icon.png rename to graphics/pokemon/pikachu/kalos/icon.png diff --git a/graphics/pokemon/pikachu/kalos_cap/normal.pal b/graphics/pokemon/pikachu/kalos/normal.pal similarity index 100% rename from graphics/pokemon/pikachu/kalos_cap/normal.pal rename to graphics/pokemon/pikachu/kalos/normal.pal diff --git a/graphics/pokemon/pikachu/kalos_cap/shiny.pal b/graphics/pokemon/pikachu/kalos/shiny.pal similarity index 100% rename from graphics/pokemon/pikachu/kalos_cap/shiny.pal rename to graphics/pokemon/pikachu/kalos/shiny.pal diff --git a/graphics/pokemon/pikachu/original_cap/back.png b/graphics/pokemon/pikachu/original/back.png similarity index 100% rename from graphics/pokemon/pikachu/original_cap/back.png rename to graphics/pokemon/pikachu/original/back.png diff --git a/graphics/pokemon/pikachu/original_cap/front.png b/graphics/pokemon/pikachu/original/front.png similarity index 100% rename from graphics/pokemon/pikachu/original_cap/front.png rename to graphics/pokemon/pikachu/original/front.png diff --git a/graphics/pokemon/pikachu/original_cap/icon.png b/graphics/pokemon/pikachu/original/icon.png similarity index 100% rename from graphics/pokemon/pikachu/original_cap/icon.png rename to graphics/pokemon/pikachu/original/icon.png diff --git a/graphics/pokemon/pikachu/original_cap/normal.pal b/graphics/pokemon/pikachu/original/normal.pal similarity index 100% rename from graphics/pokemon/pikachu/original_cap/normal.pal rename to graphics/pokemon/pikachu/original/normal.pal diff --git a/graphics/pokemon/pikachu/original_cap/shiny.pal b/graphics/pokemon/pikachu/original/shiny.pal similarity index 100% rename from graphics/pokemon/pikachu/original_cap/shiny.pal rename to graphics/pokemon/pikachu/original/shiny.pal diff --git a/graphics/pokemon/pikachu/partner_cap/back.png b/graphics/pokemon/pikachu/partner/back.png similarity index 100% rename from graphics/pokemon/pikachu/partner_cap/back.png rename to graphics/pokemon/pikachu/partner/back.png diff --git a/graphics/pokemon/pikachu/partner_cap/front.png b/graphics/pokemon/pikachu/partner/front.png similarity index 100% rename from graphics/pokemon/pikachu/partner_cap/front.png rename to graphics/pokemon/pikachu/partner/front.png diff --git a/graphics/pokemon/pikachu/partner/icon.png b/graphics/pokemon/pikachu/partner/icon.png index 891f0d1b3e870760b696c9a5b4cb5ba286147e4d..09ae0c691aa0b47cc20b7324d87dbb68b53f1dda 100644 GIT binary patch delta 430 zcmV;f0a5;h1H1!}7=Hu<0001qplF={001yhOjJc;oP&ddbG^O2|NsBJq(S!fDb->@ z_LM1$d;ele&F*uY|Foo}#s6xooMK{HK|w)TsgPs<000SaNLh0L04^f{04^f|c%?sf z00007bV*G`2j>O{4GsiEG&V;700AFKL_t(I%iWT(PQx$|hJXDA_YfVJ5K>Rdh8S?x zX35W(OgLM*(UEs-XBLQ86VW7FV_X!+iFYK#Ezy1Y9r@0m5P!OC8}*yJ6(QapUawzI zFGsEpuIaN0oS72`D3?>@!l&e=6}_AQy}xY|Wv!Ick)i(Jq%KV31Im@rrSSn_Rc%sa zot*D7>ihvE&3_5er5J&>n*jk&&nUx@uDOC;7G|*$8fX>+c01_&b1`q18u!=b0whqZ zfbCJPmqt3;qA=p07TKu(+OEl&Z?1aG!jOCXAA`Iw#LSfgvoLhJ=V~v4Fyrl!)jkMA z$}lT!j1LUXm)c-#ybd%d(;&A&7&3V5VS_M~qtxytgC{UOpb!aDBN9dzu`n7dVSd|> YZy(2?6>g_8IsgCw07*qoM6N<$g3A275dZ)H delta 373 zcmV-*0gC>-1B3&R7=H)@0000?P=%ZT0004VQb$4nuFf3k0000mP)t-sVw{6}dwadT zwEzGAb92q4toF2nTJFV*#jGjz_9^yaQj~km#iY%>DV$55?Qk}i(rCv<7kSdw34VYe*CnO_SxV5K0NE1d2y=$M_ zjl?0$P@`Uo9Z(xFQqMY2?C3wm#|V1wuv1Kzkf3^Ly|?C$F~&Kdd6|KuelS#j9p?dO zhwAL7^`-u8HN6D1^O}x{`UH8;=puvZ1dk=i5U**H}vwU~~O`{m0 T84N)W00000NkvXXu0mjfVU($* diff --git a/graphics/pokemon/pikachu/partner_cap/normal.pal b/graphics/pokemon/pikachu/partner/normal.pal similarity index 100% rename from graphics/pokemon/pikachu/partner_cap/normal.pal rename to graphics/pokemon/pikachu/partner/normal.pal diff --git a/graphics/pokemon/pikachu/partner_cap/shiny.pal b/graphics/pokemon/pikachu/partner/shiny.pal similarity index 100% rename from graphics/pokemon/pikachu/partner_cap/shiny.pal rename to graphics/pokemon/pikachu/partner/shiny.pal diff --git a/graphics/pokemon/pikachu/partner_cap/icon.png b/graphics/pokemon/pikachu/partner_cap/icon.png deleted file mode 100644 index 09ae0c691aa0b47cc20b7324d87dbb68b53f1dda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 444 zcmV;t0Ymi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00009 za7bBm001r{001r{0eGc9b^rhX2XskIMF-~w2MrDcL^L)>0003WNklRdh8S?xX35W(OgLM*(UEs-XBLQ86VW7FV_X!+iFYK#Ezy1Y9r@0m z5P!OC8}*yJ6(QapUawzIFGsEpuIaN0oS72`D3?>@!l&e=6}_AQy}xY|Wv!Ick)i(J zq%KV31Im@rrSSn_Rc%saot*D7>ihvE%?Z(^7=gB%0Rd0XD8rGixq@95X0Z|)Xchx@ zJLvp#F>jX|_t)hDBv7n??NP3mMmpM}FyfyU*{J{8uF08iu6oSEkbC?egS;@r%#{PP zFm$@-YA=E?6U m2~#5yMi;R#8Y^Lb+mCM_$DkE%r!qPK0000Px#Fi=cXMPi(TdwYAmy|n-T|8sNAq^$O|gIeyzi^Z%d_Vy|EVp5cQ&Bdh6y(yex zVp>5#LFq)aUjP6B0!c(cR7i>Kl-&x$FbIVUfkboRdH=Van*M873WLFzklmcKQ%&nP zO+Qz_jV=!iSr~{givUw}fGS)T5hjWb2x%~whaL55?Qk}i(rCv<7kSdw34VYe* zCnO_SxV5K0NE1d2y=$M_jl?0$P@`Uo9Z(xFQqMY2?C3wm#|V1wuv1Kzkf3^Ly|?C$ zF~&Kdd6|KuelS#j9p?dOhwA= GEN_6); ASSUME(gMovesInfo[MOVE_10_000_000_VOLT_THUNDERBOLT].criticalHitStage == 2); - PLAYER(SPECIES_PIKACHU_PARTNER_CAP) { Item(ITEM_PIKASHUNIUM_Z); } + PLAYER(SPECIES_PIKACHU_PARTNER) { Item(ITEM_PIKASHUNIUM_Z); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_THUNDERBOLT, gimmick: GIMMICK_Z_MOVE); } diff --git a/tools/learnset_helpers/porymoves_files/b2w2.json b/tools/learnset_helpers/porymoves_files/b2w2.json index 809671a6fc..976b125c6c 100644 --- a/tools/learnset_helpers/porymoves_files/b2w2.json +++ b/tools/learnset_helpers/porymoves_files/b2w2.json @@ -80324,7 +80324,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "WORMADAM_SANDY_CLOAK": { + "WORMADAM_SANDY": { "LevelMoves": [ { "Level": 1, @@ -80426,7 +80426,7 @@ "MOVE_UPROAR" ] }, - "WORMADAM_TRASH_CLOAK": { + "WORMADAM_TRASH": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/bdsp.json b/tools/learnset_helpers/porymoves_files/bdsp.json index 0109e99ed8..8e4ac589d3 100644 --- a/tools/learnset_helpers/porymoves_files/bdsp.json +++ b/tools/learnset_helpers/porymoves_files/bdsp.json @@ -55908,7 +55908,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_SANDY_CLOAK": { + "WORMADAM_SANDY": { "LevelMoves": [ { "Level": 0, @@ -56023,7 +56023,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_TRASH_CLOAK": { + "WORMADAM_TRASH": { "LevelMoves": [ { "Level": 0, diff --git a/tools/learnset_helpers/porymoves_files/bw.json b/tools/learnset_helpers/porymoves_files/bw.json index 7be5d6eb6f..7728235c5f 100644 --- a/tools/learnset_helpers/porymoves_files/bw.json +++ b/tools/learnset_helpers/porymoves_files/bw.json @@ -72003,7 +72003,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_SANDY_CLOAK": { + "WORMADAM_SANDY": { "LevelMoves": [ { "Level": 1, @@ -72094,7 +72094,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_TRASH_CLOAK": { + "WORMADAM_TRASH": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/dp.json b/tools/learnset_helpers/porymoves_files/dp.json index d39759df4f..666a6dda58 100644 --- a/tools/learnset_helpers/porymoves_files/dp.json +++ b/tools/learnset_helpers/porymoves_files/dp.json @@ -53246,7 +53246,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_SANDY_CLOAK": { + "WORMADAM_SANDY": { "LevelMoves": [ { "Level": 1, @@ -53335,7 +53335,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_TRASH_CLOAK": { + "WORMADAM_TRASH": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/hgss.json b/tools/learnset_helpers/porymoves_files/hgss.json index 2bd6e7d926..b0241c96f4 100644 --- a/tools/learnset_helpers/porymoves_files/hgss.json +++ b/tools/learnset_helpers/porymoves_files/hgss.json @@ -59645,7 +59645,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "WORMADAM_SANDY_CLOAK": { + "WORMADAM_SANDY": { "LevelMoves": [ { "Level": 1, @@ -59749,7 +59749,7 @@ "MOVE_UPROAR" ] }, - "WORMADAM_TRASH_CLOAK": { + "WORMADAM_TRASH": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/la.json b/tools/learnset_helpers/porymoves_files/la.json index cfd51dc2f4..599596a902 100644 --- a/tools/learnset_helpers/porymoves_files/la.json +++ b/tools/learnset_helpers/porymoves_files/la.json @@ -14495,7 +14495,7 @@ "EggMoves": [], "TutorMoves": [] }, - "MEOWSTIC_MALE": { + "MEOWSTIC_M": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], @@ -16049,7 +16049,7 @@ "EggMoves": [], "TutorMoves": [] }, - "INDEEDEE_MALE": { + "INDEEDEE_M": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], @@ -16161,7 +16161,7 @@ "EggMoves": [], "TutorMoves": [] }, - "URSHIFU_SINGLE_STRIKE_STYLE": { + "URSHIFU_SINGLE_STRIKE": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], @@ -16630,21 +16630,21 @@ "MOVE_ZEN_HEADBUTT" ] }, - "RATTATA_ALOLAN": { + "RATTATA_ALOLA": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "RATICATE_ALOLAN": { + "RATICATE_ALOLA": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "RAICHU_ALOLAN": { + "RAICHU_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -16699,21 +16699,21 @@ "MOVE_WILD_CHARGE" ] }, - "SANDSHREW_ALOLAN": { + "SANDSHREW_ALOLA": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "SANDSLASH_ALOLAN": { + "SANDSLASH_ALOLA": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "VULPIX_ALOLAN": { + "VULPIX_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -16765,7 +16765,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "NINETALES_ALOLAN": { + "NINETALES_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -16820,35 +16820,35 @@ "MOVE_ZEN_HEADBUTT" ] }, - "DIGLETT_ALOLAN": { + "DIGLETT_ALOLA": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "DUGTRIO_ALOLAN": { + "DUGTRIO_ALOLA": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "MEOWTH_ALOLAN": { + "MEOWTH_ALOLA": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "PERSIAN_ALOLAN": { + "PERSIAN_ALOLA": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "GEODUDE_ALOLAN": { + "GEODUDE_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -16903,7 +16903,7 @@ "MOVE_THUNDER_PUNCH" ] }, - "GRAVELER_ALOLAN": { + "GRAVELER_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -16958,7 +16958,7 @@ "MOVE_THUNDER_PUNCH" ] }, - "GOLEM_ALOLAN": { + "GOLEM_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -17020,42 +17020,42 @@ "MOVE_THUNDER_PUNCH" ] }, - "GRIMER_ALOLAN": { + "GRIMER_ALOLA": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "MUK_ALOLAN": { + "MUK_ALOLA": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "EXEGGUTOR_ALOLAN": { + "EXEGGUTOR_ALOLA": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "MAROWAK_ALOLAN": { + "MAROWAK_ALOLA": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "MEOWTH_GALARIAN": { + "MEOWTH_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "PONYTA_GALARIAN": { + "PONYTA_GALAR": { "LevelMoves": [ { "Level": 1, @@ -17103,7 +17103,7 @@ "MOVE_WILD_CHARGE" ] }, - "RAPIDASH_GALARIAN": { + "RAPIDASH_GALAR": { "LevelMoves": [ { "Level": 1, @@ -17155,105 +17155,105 @@ "MOVE_WILD_CHARGE" ] }, - "SLOWPOKE_GALARIAN": { + "SLOWPOKE_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "SLOWBRO_GALARIAN": { + "SLOWBRO_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "FARFETCHD_GALARIAN": { + "FARFETCHD_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "WEEZING_GALARIAN": { + "WEEZING_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "ARTICUNO_GALARIAN": { + "ARTICUNO_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "ZAPDOS_GALARIAN": { + "ZAPDOS_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "MOLTRES_GALARIAN": { + "MOLTRES_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "SLOWKING_GALARIAN": { + "SLOWKING_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "CORSOLA_GALARIAN": { + "CORSOLA_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "ZIGZAGOON_GALARIAN": { + "ZIGZAGOON_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "LINOONE_GALARIAN": { + "LINOONE_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "DARUMAKA_GALARIAN": { + "DARUMAKA_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "DARMANITAN_GALARIAN": { + "DARMANITAN_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "YAMASK_GALARIAN": { + "YAMASK_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "STUNFISK_GALARIAN": { + "STUNFISK_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], @@ -17281,7 +17281,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_SANDY_CLOAK": { + "WORMADAM_SANDY": { "LevelMoves": [ { "Level": 1, @@ -17326,7 +17326,7 @@ "MOVE_STEALTH_ROCK" ] }, - "WORMADAM_TRASH_CLOAK": { + "WORMADAM_TRASH": { "LevelMoves": [ { "Level": 1, @@ -17661,14 +17661,14 @@ "EggMoves": [], "TutorMoves": [] }, - "FLOETTE_ETERNAL_FLOWER": { + "FLOETTE_ETERNAL": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "MEOWSTIC_FEMALE": { + "MEOWSTIC_F": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], @@ -17703,35 +17703,35 @@ "EggMoves": [], "TutorMoves": [] }, - "INDEEDEE_FEMALE": { + "INDEEDEE_F": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "URSHIFU_RAPID_STRIKE_STYLE": { + "URSHIFU_RAPID_STRIKE": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "CALYREX_ICE_RIDER": { + "CALYREX_ICE": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "CALYREX_SHADOW_RIDER": { + "CALYREX_SHADOW": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "GROWLITHE_HISUIAN": { + "GROWLITHE_HISUI": { "LevelMoves": [ { "Level": 1, @@ -17784,7 +17784,7 @@ "MOVE_WILD_CHARGE" ] }, - "ARCANINE_HISUIAN": { + "ARCANINE_HISUI": { "LevelMoves": [ { "Level": 1, @@ -17847,7 +17847,7 @@ "MOVE_WILD_CHARGE" ] }, - "VOLTORB_HISUIAN": { + "VOLTORB_HISUI": { "LevelMoves": [ { "Level": 1, @@ -17896,7 +17896,7 @@ "MOVE_WILD_CHARGE" ] }, - "ELECTRODE_HISUIAN": { + "ELECTRODE_HISUI": { "LevelMoves": [ { "Level": 1, @@ -17951,7 +17951,7 @@ "MOVE_WILD_CHARGE" ] }, - "TYPHLOSION_HISUIAN": { + "TYPHLOSION_HISUI": { "LevelMoves": [ { "Level": 0, @@ -18019,7 +18019,7 @@ "MOVE_WILD_CHARGE" ] }, - "QWILFISH_HISUIAN": { + "QWILFISH_HISUI": { "LevelMoves": [ { "Level": 1, @@ -18080,7 +18080,7 @@ "MOVE_WATER_PULSE" ] }, - "SNEASEL_HISUIAN": { + "SNEASEL_HISUI": { "LevelMoves": [ { "Level": 1, @@ -18132,7 +18132,7 @@ "MOVE_X_SCISSOR" ] }, - "SAMUROTT_HISUIAN": { + "SAMUROTT_HISUI": { "LevelMoves": [ { "Level": 0, @@ -18198,7 +18198,7 @@ "MOVE_X_SCISSOR" ] }, - "LILLIGANT_HISUIAN": { + "LILLIGANT_HISUI": { "LevelMoves": [ { "Level": 0, @@ -18318,7 +18318,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "ZORUA_HISUIAN": { + "ZORUA_HISUI": { "LevelMoves": [ { "Level": 1, @@ -18364,7 +18364,7 @@ "MOVE_SWIFT" ] }, - "ZOROARK_HISUIAN": { + "ZOROARK_HISUI": { "LevelMoves": [ { "Level": 1, @@ -18423,7 +18423,7 @@ "MOVE_SWIFT" ] }, - "BRAVIARY_HISUIAN": { + "BRAVIARY_HISUI": { "LevelMoves": [ { "Level": 1, @@ -18487,7 +18487,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "SLIGGOO_HISUIAN": { + "SLIGGOO_HISUI": { "LevelMoves": [ { "Level": 1, @@ -18539,7 +18539,7 @@ "MOVE_WATER_PULSE" ] }, - "GOODRA_HISUIAN": { + "GOODRA_HISUI": { "LevelMoves": [ { "Level": 1, @@ -18598,7 +18598,7 @@ "MOVE_WATER_PULSE" ] }, - "AVALUGG_HISUIAN": { + "AVALUGG_HISUI": { "LevelMoves": [ { "Level": 0, @@ -18669,7 +18669,7 @@ "MOVE_WATER_PULSE" ] }, - "DECIDUEYE_HISUIAN": { + "DECIDUEYE_HISUI": { "LevelMoves": [ { "Level": 0, diff --git a/tools/learnset_helpers/porymoves_files/lgpe.json b/tools/learnset_helpers/porymoves_files/lgpe.json index 9cb68528bc..f94ef03c94 100644 --- a/tools/learnset_helpers/porymoves_files/lgpe.json +++ b/tools/learnset_helpers/porymoves_files/lgpe.json @@ -11337,7 +11337,7 @@ "EggMoves": [], "TutorMoves": [] }, - "RATTATA_ALOLAN": { + "RATTATA_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -11401,7 +11401,7 @@ "EggMoves": [], "TutorMoves": [] }, - "RATICATE_ALOLAN": { + "RATICATE_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -11491,7 +11491,7 @@ "EggMoves": [], "TutorMoves": [] }, - "RAICHU_ALOLAN": { + "RAICHU_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -11554,7 +11554,7 @@ "EggMoves": [], "TutorMoves": [] }, - "SANDSHREW_ALOLAN": { + "SANDSHREW_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -11625,7 +11625,7 @@ "EggMoves": [], "TutorMoves": [] }, - "SANDSLASH_ALOLAN": { + "SANDSLASH_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -11674,7 +11674,7 @@ "EggMoves": [], "TutorMoves": [] }, - "VULPIX_ALOLAN": { + "VULPIX_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -11737,7 +11737,7 @@ "EggMoves": [], "TutorMoves": [] }, - "NINETALES_ALOLAN": { + "NINETALES_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -11787,7 +11787,7 @@ "EggMoves": [], "TutorMoves": [] }, - "DIGLETT_ALOLAN": { + "DIGLETT_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -11848,7 +11848,7 @@ "EggMoves": [], "TutorMoves": [] }, - "DUGTRIO_ALOLAN": { + "DUGTRIO_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -11935,7 +11935,7 @@ "EggMoves": [], "TutorMoves": [] }, - "MEOWTH_ALOLAN": { + "MEOWTH_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -12017,7 +12017,7 @@ "EggMoves": [], "TutorMoves": [] }, - "PERSIAN_ALOLAN": { + "PERSIAN_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -12116,7 +12116,7 @@ "EggMoves": [], "TutorMoves": [] }, - "GEODUDE_ALOLAN": { + "GEODUDE_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -12194,7 +12194,7 @@ "EggMoves": [], "TutorMoves": [] }, - "GRAVELER_ALOLAN": { + "GRAVELER_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -12280,7 +12280,7 @@ "EggMoves": [], "TutorMoves": [] }, - "GOLEM_ALOLAN": { + "GOLEM_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -12371,7 +12371,7 @@ "EggMoves": [], "TutorMoves": [] }, - "GRIMER_ALOLAN": { + "GRIMER_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -12440,7 +12440,7 @@ "EggMoves": [], "TutorMoves": [] }, - "MUK_ALOLAN": { + "MUK_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -12529,7 +12529,7 @@ "EggMoves": [], "TutorMoves": [] }, - "EXEGGUTOR_ALOLAN": { + "EXEGGUTOR_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -12594,7 +12594,7 @@ "EggMoves": [], "TutorMoves": [] }, - "MAROWAK_ALOLAN": { + "MAROWAK_ALOLA": { "LevelMoves": [ { "Level": 0, diff --git a/tools/learnset_helpers/porymoves_files/oras.json b/tools/learnset_helpers/porymoves_files/oras.json index e61d499654..11a737628e 100644 --- a/tools/learnset_helpers/porymoves_files/oras.json +++ b/tools/learnset_helpers/porymoves_files/oras.json @@ -88631,7 +88631,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "MEOWSTIC_MALE": { + "MEOWSTIC_M": { "LevelMoves": [ { "Level": 1, @@ -94735,7 +94735,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "WORMADAM_SANDY_CLOAK": { + "WORMADAM_SANDY": { "LevelMoves": [ { "Level": 1, @@ -94840,7 +94840,7 @@ "MOVE_UPROAR" ] }, - "WORMADAM_TRASH_CLOAK": { + "WORMADAM_TRASH": { "LevelMoves": [ { "Level": 1, @@ -95859,7 +95859,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "FLOETTE_ETERNAL_FLOWER": { + "FLOETTE_ETERNAL": { "LevelMoves": [ { "Level": 1, @@ -95967,7 +95967,7 @@ "MOVE_WORRY_SEED" ] }, - "MEOWSTIC_FEMALE": { + "MEOWSTIC_F": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/pt.json b/tools/learnset_helpers/porymoves_files/pt.json index f230c7ead2..e969777fa6 100644 --- a/tools/learnset_helpers/porymoves_files/pt.json +++ b/tools/learnset_helpers/porymoves_files/pt.json @@ -58146,7 +58146,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "WORMADAM_SANDY_CLOAK": { + "WORMADAM_SANDY": { "LevelMoves": [ { "Level": 1, @@ -58248,7 +58248,7 @@ "MOVE_UPROAR" ] }, - "WORMADAM_TRASH_CLOAK": { + "WORMADAM_TRASH": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/sm.json b/tools/learnset_helpers/porymoves_files/sm.json index c1fd671b7e..65255a69fa 100644 --- a/tools/learnset_helpers/porymoves_files/sm.json +++ b/tools/learnset_helpers/porymoves_files/sm.json @@ -79371,7 +79371,7 @@ ], "TutorMoves": [] }, - "MEOWSTIC_MALE": { + "MEOWSTIC_M": { "LevelMoves": [ { "Level": 1, @@ -93399,7 +93399,7 @@ "EggMoves": [], "TutorMoves": [] }, - "RATTATA_ALOLAN": { + "RATTATA_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -93502,7 +93502,7 @@ ], "TutorMoves": [] }, - "RATICATE_ALOLAN": { + "RATICATE_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -93632,7 +93632,7 @@ ], "TutorMoves": [] }, - "RAICHU_ALOLAN": { + "RAICHU_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -93741,7 +93741,7 @@ ], "TutorMoves": [] }, - "SANDSHREW_ALOLAN": { + "SANDSHREW_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -93864,7 +93864,7 @@ ], "TutorMoves": [] }, - "SANDSLASH_ALOLAN": { + "SANDSLASH_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -93968,7 +93968,7 @@ ], "TutorMoves": [] }, - "VULPIX_ALOLAN": { + "VULPIX_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -94097,7 +94097,7 @@ ], "TutorMoves": [] }, - "NINETALES_ALOLAN": { + "NINETALES_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -94200,7 +94200,7 @@ ], "TutorMoves": [] }, - "DIGLETT_ALOLAN": { + "DIGLETT_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -94304,7 +94304,7 @@ ], "TutorMoves": [] }, - "DUGTRIO_ALOLAN": { + "DUGTRIO_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -94436,7 +94436,7 @@ ], "TutorMoves": [] }, - "MEOWTH_ALOLAN": { + "MEOWTH_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -94555,7 +94555,7 @@ ], "TutorMoves": [] }, - "PERSIAN_ALOLAN": { + "PERSIAN_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -94708,7 +94708,7 @@ ], "TutorMoves": [] }, - "GEODUDE_ALOLAN": { + "GEODUDE_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -94827,7 +94827,7 @@ ], "TutorMoves": [] }, - "GRAVELER_ALOLAN": { + "GRAVELER_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -94954,7 +94954,7 @@ ], "TutorMoves": [] }, - "GOLEM_ALOLAN": { + "GOLEM_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -95097,7 +95097,7 @@ ], "TutorMoves": [] }, - "GRIMER_ALOLAN": { + "GRIMER_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -95221,7 +95221,7 @@ ], "TutorMoves": [] }, - "MUK_ALOLAN": { + "MUK_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -95366,7 +95366,7 @@ ], "TutorMoves": [] }, - "EXEGGUTOR_ALOLAN": { + "EXEGGUTOR_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -95484,7 +95484,7 @@ "MOVE_DRACO_METEOR" ] }, - "MAROWAK_ALOLAN": { + "MAROWAK_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -95978,7 +95978,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_SANDY_CLOAK": { + "WORMADAM_SANDY": { "LevelMoves": [ { "Level": 0, @@ -96093,7 +96093,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_TRASH_CLOAK": { + "WORMADAM_TRASH": { "LevelMoves": [ { "Level": 0, @@ -97019,7 +97019,7 @@ "MOVE_DRACO_METEOR" ] }, - "FLOETTE_ETERNAL_FLOWER": { + "FLOETTE_ETERNAL": { "LevelMoves": [ { "Level": 1, @@ -97117,7 +97117,7 @@ ], "TutorMoves": [] }, - "MEOWSTIC_FEMALE": { + "MEOWSTIC_F": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/sv.json b/tools/learnset_helpers/porymoves_files/sv.json index 035fc16998..04bc72f9e6 100644 --- a/tools/learnset_helpers/porymoves_files/sv.json +++ b/tools/learnset_helpers/porymoves_files/sv.json @@ -58132,7 +58132,7 @@ ], "TutorMoves": [] }, - "MEOWSTIC_MALE": { + "MEOWSTIC_M": { "LevelMoves": [ { "Level": 1, @@ -72171,7 +72171,7 @@ ], "TutorMoves": [] }, - "INDEEDEE_MALE": { + "INDEEDEE_M": { "LevelMoves": [ { "Level": 1, @@ -73494,7 +73494,7 @@ "EggMoves": [], "TutorMoves": [] }, - "URSHIFU_SINGLE_STRIKE_STYLE": { + "URSHIFU_SINGLE_STRIKE": { "LevelMoves": [ { "Level": 0, @@ -89091,21 +89091,21 @@ "EggMoves": [], "TutorMoves": [] }, - "RATTATA_ALOLAN": { + "RATTATA_ALOLA": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "RATICATE_ALOLAN": { + "RATICATE_ALOLA": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "RAICHU_ALOLAN": { + "RAICHU_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -89263,7 +89263,7 @@ ], "TutorMoves": [] }, - "SANDSHREW_ALOLAN": { + "SANDSHREW_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -89398,7 +89398,7 @@ ], "TutorMoves": [] }, - "SANDSLASH_ALOLAN": { + "SANDSLASH_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -89568,7 +89568,7 @@ ], "TutorMoves": [] }, - "VULPIX_ALOLAN": { + "VULPIX_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -89687,7 +89687,7 @@ ], "TutorMoves": [] }, - "NINETALES_ALOLAN": { + "NINETALES_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -89833,7 +89833,7 @@ ], "TutorMoves": [] }, - "DIGLETT_ALOLAN": { + "DIGLETT_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -89944,7 +89944,7 @@ ], "TutorMoves": [] }, - "DUGTRIO_ALOLAN": { + "DUGTRIO_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -90075,7 +90075,7 @@ ], "TutorMoves": [] }, - "MEOWTH_ALOLAN": { + "MEOWTH_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -90192,7 +90192,7 @@ ], "TutorMoves": [] }, - "PERSIAN_ALOLAN": { + "PERSIAN_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -90327,7 +90327,7 @@ ], "TutorMoves": [] }, - "GEODUDE_ALOLAN": { + "GEODUDE_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -90453,7 +90453,7 @@ ], "TutorMoves": [] }, - "GRAVELER_ALOLAN": { + "GRAVELER_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -90585,7 +90585,7 @@ ], "TutorMoves": [] }, - "GOLEM_ALOLAN": { + "GOLEM_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -90723,7 +90723,7 @@ ], "TutorMoves": [] }, - "GRIMER_ALOLAN": { + "GRIMER_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -90862,7 +90862,7 @@ ], "TutorMoves": [] }, - "MUK_ALOLAN": { + "MUK_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -91005,7 +91005,7 @@ ], "TutorMoves": [] }, - "EXEGGUTOR_ALOLAN": { + "EXEGGUTOR_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -91150,14 +91150,14 @@ "EggMoves": [], "TutorMoves": [] }, - "MAROWAK_ALOLAN": { + "MAROWAK_ALOLA": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "MEOWTH_GALARIAN": { + "MEOWTH_GALAR": { "LevelMoves": [ { "Level": 1, @@ -91279,21 +91279,21 @@ ], "TutorMoves": [] }, - "PONYTA_GALARIAN": { + "PONYTA_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "RAPIDASH_GALARIAN": { + "RAPIDASH_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "SLOWPOKE_GALARIAN": { + "SLOWPOKE_GALAR": { "LevelMoves": [ { "Level": 1, @@ -91427,7 +91427,7 @@ ], "TutorMoves": [] }, - "SLOWBRO_GALARIAN": { + "SLOWBRO_GALAR": { "LevelMoves": [ { "Level": 0, @@ -91596,14 +91596,14 @@ ], "TutorMoves": [] }, - "FARFETCHD_GALARIAN": { + "FARFETCHD_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "WEEZING_GALARIAN": { + "WEEZING_GALAR": { "LevelMoves": [ { "Level": 0, @@ -91750,7 +91750,7 @@ ], "TutorMoves": [] }, - "ARTICUNO_GALARIAN": { + "ARTICUNO_GALAR": { "LevelMoves": [ { "Level": 1, @@ -91860,7 +91860,7 @@ "EggMoves": [], "TutorMoves": [] }, - "ZAPDOS_GALARIAN": { + "ZAPDOS_GALAR": { "LevelMoves": [ { "Level": 1, @@ -91973,7 +91973,7 @@ "EggMoves": [], "TutorMoves": [] }, - "MOLTRES_GALARIAN": { + "MOLTRES_GALAR": { "LevelMoves": [ { "Level": 1, @@ -92085,7 +92085,7 @@ "EggMoves": [], "TutorMoves": [] }, - "SLOWKING_GALARIAN": { + "SLOWKING_GALAR": { "LevelMoves": [ { "Level": 0, @@ -92280,56 +92280,56 @@ ], "TutorMoves": [] }, - "CORSOLA_GALARIAN": { + "CORSOLA_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "ZIGZAGOON_GALARIAN": { + "ZIGZAGOON_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "LINOONE_GALARIAN": { + "LINOONE_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "DARUMAKA_GALARIAN": { + "DARUMAKA_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "DARMANITAN_GALARIAN": { + "DARMANITAN_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "YAMASK_GALARIAN": { + "YAMASK_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "STUNFISK_GALARIAN": { + "STUNFISK_GALAR": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "GROWLITHE_HISUIAN": { + "GROWLITHE_HISUI": { "LevelMoves": [ { "Level": 1, @@ -92448,7 +92448,7 @@ ], "TutorMoves": [] }, - "ARCANINE_HISUIAN": { + "ARCANINE_HISUI": { "LevelMoves": [ { "Level": 0, @@ -92594,7 +92594,7 @@ ], "TutorMoves": [] }, - "VOLTORB_HISUIAN": { + "VOLTORB_HISUI": { "LevelMoves": [ { "Level": 1, @@ -92711,7 +92711,7 @@ ], "TutorMoves": [] }, - "ELECTRODE_HISUIAN": { + "ELECTRODE_HISUI": { "LevelMoves": [ { "Level": 0, @@ -92837,7 +92837,7 @@ ], "TutorMoves": [] }, - "TYPHLOSION_HISUIAN": { + "TYPHLOSION_HISUI": { "LevelMoves": [ { "Level": 0, @@ -92982,7 +92982,7 @@ ], "TutorMoves": [] }, - "QWILFISH_HISUIAN": { + "QWILFISH_HISUI": { "LevelMoves": [ { "Level": 1, @@ -93118,7 +93118,7 @@ ], "TutorMoves": [] }, - "SNEASEL_HISUIAN": { + "SNEASEL_HISUI": { "LevelMoves": [ { "Level": 1, @@ -93237,7 +93237,7 @@ ], "TutorMoves": [] }, - "SAMUROTT_HISUIAN": { + "SAMUROTT_HISUI": { "LevelMoves": [ { "Level": 0, @@ -93379,7 +93379,7 @@ ], "TutorMoves": [] }, - "LILLIGANT_HISUIAN": { + "LILLIGANT_HISUI": { "LevelMoves": [ { "Level": 0, @@ -93642,7 +93642,7 @@ ], "TutorMoves": [] }, - "ZORUA_HISUIAN": { + "ZORUA_HISUI": { "LevelMoves": [ { "Level": 1, @@ -93754,7 +93754,7 @@ ], "TutorMoves": [] }, - "ZOROARK_HISUIAN": { + "ZOROARK_HISUI": { "LevelMoves": [ { "Level": 0, @@ -93894,7 +93894,7 @@ ], "TutorMoves": [] }, - "BRAVIARY_HISUIAN": { + "BRAVIARY_HISUI": { "LevelMoves": [ { "Level": 0, @@ -94030,7 +94030,7 @@ ], "TutorMoves": [] }, - "SLIGGOO_HISUIAN": { + "SLIGGOO_HISUI": { "LevelMoves": [ { "Level": 0, @@ -94135,7 +94135,7 @@ ], "TutorMoves": [] }, - "GOODRA_HISUIAN": { + "GOODRA_HISUI": { "LevelMoves": [ { "Level": 0, @@ -94280,7 +94280,7 @@ ], "TutorMoves": [] }, - "AVALUGG_HISUIAN": { + "AVALUGG_HISUI": { "LevelMoves": [ { "Level": 0, @@ -94416,7 +94416,7 @@ ], "TutorMoves": [] }, - "DECIDUEYE_HISUIAN": { + "DECIDUEYE_HISUI": { "LevelMoves": [ { "Level": 0, @@ -94555,7 +94555,7 @@ ], "TutorMoves": [] }, - "TAUROS_PALDEAN_COMBAT_BREED": { + "TAUROS_PALDEA_COMBAT": { "LevelMoves": [ { "Level": 1, @@ -94664,7 +94664,7 @@ ], "TutorMoves": [] }, - "TAUROS_PALDEAN_BLAZE_BREED": { + "TAUROS_PALDEA_BLAZE": { "LevelMoves": [ { "Level": 1, @@ -94779,7 +94779,7 @@ ], "TutorMoves": [] }, - "TAUROS_PALDEAN_AQUA_BREED": { + "TAUROS_PALDEA_AQUA": { "LevelMoves": [ { "Level": 1, @@ -94891,7 +94891,7 @@ ], "TutorMoves": [] }, - "WOOPER_PALDEAN": { + "WOOPER_PALDEA": { "LevelMoves": [ { "Level": 1, @@ -95417,14 +95417,14 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_SANDY_CLOAK": { + "WORMADAM_SANDY": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_TRASH_CLOAK": { + "WORMADAM_TRASH": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], @@ -96274,7 +96274,7 @@ "EggMoves": [], "TutorMoves": [] }, - "FLOETTE_ETERNAL_FLOWER": { + "FLOETTE_ETERNAL": { "LevelMoves": [ { "Level": 1, @@ -96381,7 +96381,7 @@ ], "TutorMoves": [] }, - "MEOWSTIC_FEMALE": { + "MEOWSTIC_F": { "LevelMoves": [ { "Level": 1, @@ -97091,7 +97091,7 @@ ], "TutorMoves": [] }, - "INDEEDEE_FEMALE": { + "INDEEDEE_F": { "LevelMoves": [ { "Level": 1, @@ -97190,7 +97190,7 @@ ], "TutorMoves": [] }, - "URSHIFU_RAPID_STRIKE_STYLE": { + "URSHIFU_RAPID_STRIKE": { "LevelMoves": [ { "Level": 0, @@ -97318,7 +97318,7 @@ "EggMoves": [], "TutorMoves": [] }, - "CALYREX_ICE_RIDER": { + "CALYREX_ICE": { "LevelMoves": [ { "Level": 1, @@ -97525,7 +97525,7 @@ "EggMoves": [], "TutorMoves": [] }, - "CALYREX_SHADOW_RIDER": { + "CALYREX_SHADOW": { "LevelMoves": [ { "Level": 1, @@ -97873,7 +97873,7 @@ ], "TutorMoves": [] }, - "OINKOLOGNE_MALE": { + "OINKOLOGNE_M": { "LevelMoves": [ { "Level": 1, @@ -97941,7 +97941,7 @@ "EggMoves": [], "TutorMoves": [] }, - "OINKOLOGNE_FEMALE": { + "OINKOLOGNE_F": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/swsh.json b/tools/learnset_helpers/porymoves_files/swsh.json index 7d344777f0..cf32f3d552 100644 --- a/tools/learnset_helpers/porymoves_files/swsh.json +++ b/tools/learnset_helpers/porymoves_files/swsh.json @@ -54679,7 +54679,7 @@ "MOVE_EXPANDING_FORCE" ] }, - "MEOWSTIC_MALE": { + "MEOWSTIC_M": { "LevelMoves": [ { "Level": 1, @@ -75050,7 +75050,7 @@ ], "TutorMoves": [] }, - "INDEEDEE_MALE": { + "INDEEDEE_M": { "LevelMoves": [ { "Level": 1, @@ -76790,7 +76790,7 @@ "MOVE_COACHING" ] }, - "URSHIFU_SINGLE_STRIKE_STYLE": { + "URSHIFU_SINGLE_STRIKE": { "LevelMoves": [ { "Level": 0, @@ -77588,7 +77588,7 @@ "MOVE_EXPANDING_FORCE" ] }, - "RAICHU_ALOLAN": { + "RAICHU_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -77747,7 +77747,7 @@ ], "TutorMoves": [] }, - "SANDSHREW_ALOLAN": { + "SANDSHREW_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -77873,7 +77873,7 @@ "MOVE_STEEL_BEAM" ] }, - "SANDSLASH_ALOLAN": { + "SANDSLASH_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -78022,7 +78022,7 @@ "MOVE_STEEL_BEAM" ] }, - "VULPIX_ALOLAN": { + "VULPIX_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -78135,7 +78135,7 @@ ], "TutorMoves": [] }, - "NINETALES_ALOLAN": { + "NINETALES_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -78272,7 +78272,7 @@ ], "TutorMoves": [] }, - "DIGLETT_ALOLAN": { + "DIGLETT_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -78376,7 +78376,7 @@ "MOVE_STEEL_BEAM" ] }, - "DUGTRIO_ALOLAN": { + "DUGTRIO_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -78503,7 +78503,7 @@ "MOVE_STEEL_BEAM" ] }, - "MEOWTH_ALOLAN": { + "MEOWTH_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -78611,7 +78611,7 @@ ], "TutorMoves": [] }, - "PERSIAN_ALOLAN": { + "PERSIAN_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -78741,7 +78741,7 @@ ], "TutorMoves": [] }, - "EXEGGUTOR_ALOLAN": { + "EXEGGUTOR_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -78885,7 +78885,7 @@ "MOVE_DRACO_METEOR" ] }, - "MAROWAK_ALOLAN": { + "MAROWAK_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -79045,7 +79045,7 @@ ], "TutorMoves": [] }, - "MEOWTH_GALARIAN": { + "MEOWTH_GALAR": { "LevelMoves": [ { "Level": 1, @@ -79158,7 +79158,7 @@ "MOVE_LASH_OUT" ] }, - "PONYTA_GALARIAN": { + "PONYTA_GALAR": { "LevelMoves": [ { "Level": 1, @@ -79256,7 +79256,7 @@ "MOVE_EXPANDING_FORCE" ] }, - "RAPIDASH_GALARIAN": { + "RAPIDASH_GALAR": { "LevelMoves": [ { "Level": 0, @@ -79385,7 +79385,7 @@ "MOVE_EXPANDING_FORCE" ] }, - "SLOWPOKE_GALARIAN": { + "SLOWPOKE_GALAR": { "LevelMoves": [ { "Level": 1, @@ -79522,7 +79522,7 @@ "MOVE_EXPANDING_FORCE" ] }, - "SLOWBRO_GALARIAN": { + "SLOWBRO_GALAR": { "LevelMoves": [ { "Level": 0, @@ -79690,7 +79690,7 @@ "MOVE_EXPANDING_FORCE" ] }, - "FARFETCHD_GALARIAN": { + "FARFETCHD_GALAR": { "LevelMoves": [ { "Level": 1, @@ -79801,7 +79801,7 @@ "MOVE_DUAL_WINGBEAT" ] }, - "WEEZING_GALARIAN": { + "WEEZING_GALAR": { "LevelMoves": [ { "Level": 0, @@ -79958,7 +79958,7 @@ "MOVE_MISTY_EXPLOSION" ] }, - "MR_MIME_GALARIAN": { + "MR_MIME_GALAR": { "LevelMoves": [ { "Level": 1, @@ -80147,7 +80147,7 @@ "MOVE_TRIPLE_AXEL" ] }, - "ARTICUNO_GALARIAN": { + "ARTICUNO_GALAR": { "LevelMoves": [ { "Level": 1, @@ -80258,7 +80258,7 @@ "MOVE_EXPANDING_FORCE" ] }, - "ZAPDOS_GALARIAN": { + "ZAPDOS_GALAR": { "LevelMoves": [ { "Level": 1, @@ -80373,7 +80373,7 @@ "MOVE_COACHING" ] }, - "MOLTRES_GALARIAN": { + "MOLTRES_GALAR": { "LevelMoves": [ { "Level": 1, @@ -80480,7 +80480,7 @@ "MOVE_LASH_OUT" ] }, - "SLOWKING_GALARIAN": { + "SLOWKING_GALAR": { "LevelMoves": [ { "Level": 0, @@ -80657,7 +80657,7 @@ "MOVE_EXPANDING_FORCE" ] }, - "CORSOLA_GALARIAN": { + "CORSOLA_GALAR": { "LevelMoves": [ { "Level": 1, @@ -80776,7 +80776,7 @@ "MOVE_METEOR_BEAM" ] }, - "ZIGZAGOON_GALARIAN": { + "ZIGZAGOON_GALAR": { "LevelMoves": [ { "Level": 1, @@ -80890,7 +80890,7 @@ "MOVE_LASH_OUT" ] }, - "LINOONE_GALARIAN": { + "LINOONE_GALAR": { "LevelMoves": [ { "Level": 0, @@ -81030,7 +81030,7 @@ "MOVE_LASH_OUT" ] }, - "DARUMAKA_GALARIAN": { + "DARUMAKA_GALAR": { "LevelMoves": [ { "Level": 1, @@ -81147,7 +81147,7 @@ ], "TutorMoves": [] }, - "DARMANITAN_GALARIAN": { + "DARMANITAN_GALAR": { "LevelMoves": [ { "Level": 0, @@ -81289,7 +81289,7 @@ "MOVE_LASH_OUT" ] }, - "YAMASK_GALARIAN": { + "YAMASK_GALAR": { "LevelMoves": [ { "Level": 1, @@ -81403,7 +81403,7 @@ "MOVE_POLTERGEIST" ] }, - "STUNFISK_GALARIAN": { + "STUNFISK_GALAR": { "LevelMoves": [ { "Level": 1, @@ -82254,7 +82254,7 @@ "MOVE_SCALE_SHOT" ] }, - "MEOWSTIC_FEMALE": { + "MEOWSTIC_F": { "LevelMoves": [ { "Level": 1, @@ -82839,7 +82839,7 @@ "MOVE_RISING_VOLTAGE" ] }, - "INDEEDEE_FEMALE": { + "INDEEDEE_F": { "LevelMoves": [ { "Level": 1, @@ -82945,7 +82945,7 @@ "MOVE_EXPANDING_FORCE" ] }, - "URSHIFU_RAPID_STRIKE_STYLE": { + "URSHIFU_RAPID_STRIKE": { "LevelMoves": [ { "Level": 0, @@ -83081,7 +83081,7 @@ "MOVE_COACHING" ] }, - "CALYREX_ICE_RIDER": { + "CALYREX_ICE": { "LevelMoves": [ { "Level": 1, @@ -83292,7 +83292,7 @@ "MOVE_LASH_OUT" ] }, - "CALYREX_SHADOW_RIDER": { + "CALYREX_SHADOW": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/usum.json b/tools/learnset_helpers/porymoves_files/usum.json index a659a4261c..ed4cfb69e0 100644 --- a/tools/learnset_helpers/porymoves_files/usum.json +++ b/tools/learnset_helpers/porymoves_files/usum.json @@ -88196,7 +88196,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "MEOWSTIC_MALE": { + "MEOWSTIC_M": { "LevelMoves": [ { "Level": 1, @@ -104427,7 +104427,7 @@ "MOVE_THUNDER_PUNCH" ] }, - "RATTATA_ALOLAN": { + "RATTATA_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -104542,7 +104542,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "RATICATE_ALOLAN": { + "RATICATE_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -104687,7 +104687,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "RAICHU_ALOLAN": { + "RAICHU_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -104815,7 +104815,7 @@ "MOVE_THUNDER_PUNCH" ] }, - "SANDSHREW_ALOLAN": { + "SANDSHREW_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -104953,7 +104953,7 @@ "MOVE_THROAT_CHOP" ] }, - "SANDSLASH_ALOLAN": { + "SANDSLASH_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -105073,7 +105073,7 @@ "MOVE_THROAT_CHOP" ] }, - "VULPIX_ALOLAN": { + "VULPIX_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -105214,7 +105214,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "NINETALES_ALOLAN": { + "NINETALES_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -105331,7 +105331,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "DIGLETT_ALOLAN": { + "DIGLETT_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -105442,7 +105442,7 @@ "MOVE_STOMPING_TANTRUM" ] }, - "DUGTRIO_ALOLAN": { + "DUGTRIO_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -105581,7 +105581,7 @@ "MOVE_STOMPING_TANTRUM" ] }, - "MEOWTH_ALOLAN": { + "MEOWTH_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -105717,7 +105717,7 @@ "MOVE_WATER_PULSE" ] }, - "PERSIAN_ALOLAN": { + "PERSIAN_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -105887,7 +105887,7 @@ "MOVE_WATER_PULSE" ] }, - "GEODUDE_ALOLAN": { + "GEODUDE_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -106018,7 +106018,7 @@ "MOVE_THUNDER_PUNCH" ] }, - "GRAVELER_ALOLAN": { + "GRAVELER_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -106160,7 +106160,7 @@ "MOVE_THUNDER_PUNCH" ] }, - "GOLEM_ALOLAN": { + "GOLEM_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -106319,7 +106319,7 @@ "MOVE_THUNDER_PUNCH" ] }, - "GRIMER_ALOLAN": { + "GRIMER_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -106456,7 +106456,7 @@ "MOVE_THUNDER_PUNCH" ] }, - "MUK_ALOLAN": { + "MUK_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -106617,7 +106617,7 @@ "MOVE_THUNDER_PUNCH" ] }, - "EXEGGUTOR_ALOLAN": { + "EXEGGUTOR_ALOLA": { "LevelMoves": [ { "Level": 0, @@ -106754,7 +106754,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "MAROWAK_ALOLAN": { + "MAROWAK_ALOLA": { "LevelMoves": [ { "Level": 1, @@ -107351,7 +107351,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "WORMADAM_SANDY_CLOAK": { + "WORMADAM_SANDY": { "LevelMoves": [ { "Level": 0, @@ -107478,7 +107478,7 @@ "MOVE_UPROAR" ] }, - "WORMADAM_TRASH_CLOAK": { + "WORMADAM_TRASH": { "LevelMoves": [ { "Level": 0, @@ -108522,7 +108522,7 @@ "MOVE_ZEN_HEADBUTT" ] }, - "FLOETTE_ETERNAL_FLOWER": { + "FLOETTE_ETERNAL": { "LevelMoves": [ { "Level": 1, @@ -108634,7 +108634,7 @@ "MOVE_WORRY_SEED" ] }, - "MEOWSTIC_FEMALE": { + "MEOWSTIC_F": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/xy.json b/tools/learnset_helpers/porymoves_files/xy.json index 5494457f75..8be594e6d7 100644 --- a/tools/learnset_helpers/porymoves_files/xy.json +++ b/tools/learnset_helpers/porymoves_files/xy.json @@ -79310,7 +79310,7 @@ ], "TutorMoves": [] }, - "MEOWSTIC_MALE": { + "MEOWSTIC_M": { "LevelMoves": [ { "Level": 1, @@ -84805,7 +84805,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_SANDY_CLOAK": { + "WORMADAM_SANDY": { "LevelMoves": [ { "Level": 1, @@ -84899,7 +84899,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_TRASH_CLOAK": { + "WORMADAM_TRASH": { "LevelMoves": [ { "Level": 1, @@ -85811,7 +85811,7 @@ "MOVE_DRACO_METEOR" ] }, - "FLOETTE_ETERNAL_FLOWER": { + "FLOETTE_ETERNAL": { "LevelMoves": [ { "Level": 1, @@ -85906,7 +85906,7 @@ ], "TutorMoves": [] }, - "MEOWSTIC_FEMALE": { + "MEOWSTIC_F": { "LevelMoves": [ { "Level": 1, From e9ab070e7d5bf43b06b631cecdd9b84c14d36019 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 27 Oct 2024 22:47:02 +0100 Subject: [PATCH 35/50] Fix damage calc modifiers (#5604) Co-authored-by: Eduardo Quezada --- src/battle_util.c | 102 ++++++++++++++++--------------- test/battle/ability/transistor.c | 42 ++++++++++--- 2 files changed, 88 insertions(+), 56 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 5284909ddd..4a16b235c6 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9255,53 +9255,6 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 if (moveType == TYPE_STEEL) modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); break; - case ABILITY_TRANSISTOR: - if (moveType == TYPE_ELECTRIC) - { - if (B_TRANSISTOR_BOOST >= GEN_9) - modifier = uq4_12_multiply(modifier, UQ_4_12(5325 / 4096)); - else - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); - } - break; - case ABILITY_DRAGONS_MAW: - if (moveType == TYPE_DRAGON) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); - break; - case ABILITY_GORILLA_TACTICS: - if (IS_MOVE_PHYSICAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); - break; - case ABILITY_ROCKY_PAYLOAD: - if (moveType == TYPE_ROCK) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); - break; - case ABILITY_PROTOSYNTHESIS: - { - u8 atkHighestStat = GetHighestStatId(battlerAtk); - if (((weather & B_WEATHER_SUN && WEATHER_HAS_EFFECT) || gBattleStruct->boosterEnergyActivates & (1u << battlerAtk)) - && ((IS_MOVE_PHYSICAL(move) && atkHighestStat == STAT_ATK) || (IS_MOVE_SPECIAL(move) && atkHighestStat == STAT_SPATK)) - && !(gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); - } - break; - case ABILITY_QUARK_DRIVE: - { - u8 atkHighestStat = GetHighestStatId(battlerAtk); - if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & (1u << battlerAtk)) - && ((IS_MOVE_PHYSICAL(move) && atkHighestStat == STAT_ATK) || (IS_MOVE_SPECIAL(move) && atkHighestStat == STAT_SPATK)) - && !(gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); - } - break; - case ABILITY_ORICHALCUM_PULSE: - if (weather & B_WEATHER_SUN && WEATHER_HAS_EFFECT && IS_MOVE_PHYSICAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); - break; - case ABILITY_HADRON_ENGINE: - if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && IS_MOVE_SPECIAL(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); - break; case ABILITY_SHARPNESS: if (gMovesInfo[move].slicingMove) modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); @@ -9468,7 +9421,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 return uq4_12_multiply_by_int_half_down(modifier, basePower); } -static inline u32 CalcAttackStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, bool32 isCrit, bool32 updateFlags, u32 atkAbility, u32 defAbility, u32 holdEffectAtk) +static inline u32 CalcAttackStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, bool32 isCrit, bool32 updateFlags, u32 atkAbility, u32 defAbility, u32 holdEffectAtk, u32 weather) { u8 atkStage; u32 atkStat; @@ -9608,6 +9561,57 @@ static inline u32 CalcAttackStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 m if (gBattleMons[battlerAtk].status1 & STATUS1_ANY && IS_MOVE_PHYSICAL(move)) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; + case ABILITY_TRANSISTOR: + if (moveType == TYPE_ELECTRIC) + { + if (B_TRANSISTOR_BOOST >= GEN_9) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + else + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + } + break; + case ABILITY_DRAGONS_MAW: + if (moveType == TYPE_DRAGON) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + break; + case ABILITY_GORILLA_TACTICS: + if (IS_MOVE_PHYSICAL(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + break; + case ABILITY_ROCKY_PAYLOAD: + if (moveType == TYPE_ROCK) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + break; + case ABILITY_PROTOSYNTHESIS: + if (!(gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED)) + { + u32 atkHighestStat = GetHighestStatId(battlerAtk); + if (((weather & B_WEATHER_SUN) && WEATHER_HAS_EFFECT) || gBattleStruct->boosterEnergyActivates & (1u << battlerAtk)) + { + if ((IS_MOVE_PHYSICAL(move) && atkHighestStat == STAT_ATK) || (IS_MOVE_SPECIAL(move) && atkHighestStat == STAT_SPATK)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + } + } + break; + case ABILITY_QUARK_DRIVE: + if (!(gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED)) + { + u32 atkHighestStat = GetHighestStatId(battlerAtk); + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & (1u << battlerAtk)) + { + if ((IS_MOVE_PHYSICAL(move) && atkHighestStat == STAT_ATK) || (IS_MOVE_SPECIAL(move) && atkHighestStat == STAT_SPATK)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + } + } + break; + case ABILITY_ORICHALCUM_PULSE: + if ((weather & B_WEATHER_SUN) && WEATHER_HAS_EFFECT && IS_MOVE_PHYSICAL(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.33)); + break; + case ABILITY_HADRON_ENGINE: + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && IS_MOVE_SPECIAL(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.33)); + break; } // target's abilities @@ -10157,7 +10161,7 @@ static inline s32 DoMoveDamageCalcVars(u32 move, u32 battlerAtk, u32 battlerDef, else gBattleMovePower = CalcMoveBasePowerAfterModifiers(move, battlerAtk, battlerDef, moveType, updateFlags, abilityAtk, abilityDef, holdEffectAtk, weather); - userFinalAttack = CalcAttackStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags, abilityAtk, abilityDef, holdEffectAtk); + userFinalAttack = CalcAttackStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags, abilityAtk, abilityDef, holdEffectAtk, weather); targetFinalDefense = CalcDefenseStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags, abilityAtk, abilityDef, holdEffectDef, weather); dmg = CalculateBaseDamage(gBattleMovePower, userFinalAttack, gBattleMons[battlerAtk].level, targetFinalDefense); diff --git a/test/battle/ability/transistor.c b/test/battle/ability/transistor.c index 4588badcc9..f02743ab8c 100644 --- a/test/battle/ability/transistor.c +++ b/test/battle/ability/transistor.c @@ -1,6 +1,9 @@ #include "global.h" #include "test/battle.h" +#include "global.h" +#include "test/battle.h" + SINGLE_BATTLE_TEST("Transistor increases Electric-type move damage", s16 damage) { u32 move; @@ -27,12 +30,37 @@ SINGLE_BATTLE_TEST("Transistor increases Electric-type move damage", s16 damage) HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { EXPECT_EQ(results[0].damage, results[1].damage); // Tackle should be unaffected - #if B_TRANSISTOR_BOOST >= GEN_9 - EXPECT_MUL_EQ(results[2].damage, Q_4_12(5325 / 4096), results[3].damage); // Wild Charge should be affected - EXPECT_MUL_EQ(results[4].damage, Q_4_12(5325 / 4096), results[5].damage); // Thunder Shock should be affected - #else - EXPECT_MUL_EQ(results[2].damage, Q_4_12(1.5), results[3].damage); // Wild Charge should be affected - EXPECT_MUL_EQ(results[4].damage, Q_4_12(1.5), results[5].damage); // Thunder Shock should be affected - #endif + if (B_TRANSISTOR_BOOST >= GEN_9) + { + EXPECT_MUL_EQ(results[2].damage, Q_4_12(1.3), results[3].damage); // Wild Charge should be affected + EXPECT_MUL_EQ(results[4].damage, Q_4_12(1.3), results[5].damage); // Thunder Shock should be affected + } + else + { + EXPECT_MUL_EQ(results[2].damage, Q_4_12(1.5), results[3].damage); // Wild Charge should be affected + EXPECT_MUL_EQ(results[4].damage, Q_4_12(1.5), results[5].damage); // Thunder Shock should be affected + } + } +} + +SINGLE_BATTLE_TEST("Transistor boosts Electric type moves by 1.5 in Gen8 and 1.3 in Gen9+", s16 damage) +{ + u16 ability; + PARAMETRIZE { ability = ABILITY_NEUTRALIZING_GAS; } + PARAMETRIZE { ability = ABILITY_LEVITATE; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_THUNDER_SHOCK].type == TYPE_ELECTRIC); + PLAYER(SPECIES_REGIELEKI) { Ability(ABILITY_TRANSISTOR); } + OPPONENT(SPECIES_KOFFING) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_THUNDER_SHOCK); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + if (B_TRANSISTOR_BOOST >= GEN_9) + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.3), results[1].damage); + else + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); } } From 5b5ecaa6ee5a34ab677a83bd334fd1734685fff2 Mon Sep 17 00:00:00 2001 From: Eclipse <115349505+SubzeroEclipse@users.noreply.github.com> Date: Mon, 28 Oct 2024 13:22:07 +0100 Subject: [PATCH 36/50] Fixed some gba sprites (#5607) --- src/data/pokemon/species_info/gen_1_families.h | 6 ++++++ src/data/pokemon/species_info/gen_3_families.h | 9 ++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index 3aac067846..289346d7ab 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -1596,6 +1596,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 13 : 12, .frontAnimFrames = sAnims_Pidgey, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_V_SLIDE_SLOW : ANIM_V_STRETCH, + .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 16 : 0, .backPic = gMonBackPic_Pidgey, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(56, 48), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 8 : 11, @@ -11488,6 +11489,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 19 : 15, .frontAnimFrames = sAnims_Voltorb, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_V_SQUISH_AND_BOUNCE : ANIM_SWING_CONCAVE, + .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 10 : 0, .backPic = gMonBackPic_Voltorb, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(40, 40) : MON_COORDS_SIZE(48, 40), .backPicYOffset = 14, @@ -11551,6 +11553,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 14 : 11, .frontAnimFrames = sAnims_Electrode, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_V_SQUISH_AND_BOUNCE : ANIM_SHRINK_GROW_VIBRATE_SLOW, + .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 12 : 0, .backPic = gMonBackPic_Electrode, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 40) : MON_COORDS_SIZE(64, 40), .backPicYOffset = 13, @@ -17401,6 +17404,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 3 : 2, .frontAnimFrames = sAnims_Articuno, .frontAnimId = ANIM_GROW_VIBRATE, + .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 6 : 0, .backPic = gMonBackPic_Articuno, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 40) : MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 12 : 5, @@ -17685,6 +17689,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 0 : 1, .frontAnimFrames = sAnims_Moltres, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE_SLOW, + .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 5 : 0, .backPic = gMonBackPic_Moltres, .backPicSize = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 4 : 5, @@ -17952,6 +17957,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .frontPicYOffset = 0, .frontAnimFrames = sAnims_Dragonite, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_V_SLIDE_SLOW : ANIM_V_SHAKE, + .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 6 : 0, .backPic = gMonBackPic_Dragonite, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 56) : MON_COORDS_SIZE(64, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 6 : 1, diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h index d4e6d00975..b52c2d8024 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -6759,6 +6759,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 17 : 14, .frontAnimFrames = sAnims_Swablu, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_V_SLIDE : ANIM_GROW_VIBRATE, + .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 12 : 0, .backPic = gMonBackPic_Swablu, .backPicSize = MON_COORDS_SIZE(64, 48), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 9 : 11, @@ -6822,6 +6823,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 2 : 1, .frontAnimFrames = sAnims_Altaria, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_H_STRETCH : ANIM_V_STRETCH, + .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 8 : 0, .backPic = gMonBackPic_Altaria, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 56) : MON_COORDS_SIZE(64, 48), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 6 : 10, @@ -8451,6 +8453,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 12 : 7, .frontAnimFrames = sAnims_Banette, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_SWING_CONVEX : ANIM_CIRCULAR_STRETCH_TWICE, + .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 8 : 0, .backPic = gMonBackPic_Banette, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 40) : MON_COORDS_SIZE(64, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 12 : 5, @@ -8935,10 +8938,10 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .frontPicYOffset = 11, .frontAnimFrames = sAnims_Chimecho, .frontAnimId = ANIM_H_SLIDE_WOBBLE, - .enemyMonElevation = 16, + .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 12 : 16, .backPic = gMonBackPic_Chimecho, .backPicSize = MON_COORDS_SIZE(64, 56), - .backPicYOffset = 9, + .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 7 : 9, .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, .palette = gMonPalette_Chimecho, .shinyPalette = gMonShinyPalette_Chimecho, @@ -11433,7 +11436,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .frontAnimId = ANIM_GROW_VIBRATE, .backPic = gMonBackPic_DeoxysNormal, .backPicSize = MON_COORDS_SIZE(64, 56), - .backPicYOffset = 6, + .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 2 : 6, .backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE, .palette = gMonPalette_DeoxysNormal, .shinyPalette = gMonShinyPalette_DeoxysNormal, From 0b66f52ead15f82d914b133bcc6ad2fe6086d285 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 28 Oct 2024 16:35:31 +0100 Subject: [PATCH 37/50] Minor BattleStruct clean up (#5585) --- include/battle.h | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/include/battle.h b/include/battle.h index d45e6037c3..f7b41b3dce 100644 --- a/include/battle.h +++ b/include/battle.h @@ -374,7 +374,7 @@ struct AiLogicData struct SwitchinCandidate switchinCandidate; // Struct used for deciding which mon to switch to in battle_ai_switch_items.c u8 weatherHasEffect:1; // The same as WEATHER_HAS_EFFECT. Stored here, so it's called only once. u8 ejectButtonSwitch:1; // Tracks whether current switch out was from Eject Button - u8 ejectPackSwitch:1; // Tracks whether current switch out was from Eject Pack + u8 ejectPackSwitch:1; // Tracks whether current switch out was from Eject Pack u8 padding:5; u8 shouldSwitch; // Stores result of ShouldSwitch, which decides whether a mon should be switched out u8 aiCalcInProgress:1; @@ -716,11 +716,15 @@ struct BattleStruct } multiBuffer; u8 wishPerishSongState; u8 wishPerishSongBattlerId; - u8 overworldWeatherDone:1; + u8 startingStatus:6; // status to apply at battle start. defined in constants/battle.h u8 startingStatusDone:1; - u8 isAtkCancelerForCalledMove:1; // Certain cases in atk canceler should only be checked once, when the original move is called, however others need to be checked the twice. u8 terrainDone:1; - u8 startingStatus; // status to apply at battle start. defined in constants/battle.h + u8 overworldWeatherDone:1; + u8 obedienceResult:3; + u8 isAtkCancelerForCalledMove:1; // Certain cases in atk canceler should only be checked once, when the original move is called, however others need to be checked the twice. + u8 friskedAbility:1; // If identifies two mons, show the ability pop-up only once. + u8 fickleBeamBoosted:1; + u8 poisonPuppeteerConfusion:1; u8 startingStatusTimer; u8 atkCancellerTracker; struct BattleTvMovePoints tvMovePoints; @@ -743,12 +747,10 @@ struct BattleStruct bool8 ateBoost[MAX_BATTLERS_COUNT]; u8 activeAbilityPopUps; // as bits for each battler u8 abilityPopUpSpriteIds[MAX_BATTLERS_COUNT][2]; // two per battler - bool8 throwingPokeBall; struct ZMoveData zmove; struct DynamaxData dynamax; struct BattleGimmickData gimmick; const u8 *trainerSlideMsg; - bool8 trainerSlideLowHpMsgDone; enum BattleIntroStates introState:8; u8 ateBerry[2]; // array id determined by side, each party pokemon as bit u8 stolenStats[NUM_BATTLE_STATS]; // hp byte is used for which stats to raise, other inform about by how many stages @@ -756,14 +758,12 @@ struct BattleStruct u8 lastMoveTarget[MAX_BATTLERS_COUNT]; // The last target on which each mon used a move, for the sake of Instruct u16 tracedAbility[MAX_BATTLERS_COUNT]; u16 hpBefore[MAX_BATTLERS_COUNT]; // Hp of battlers before using a move. For Berserk and Anger Shell. - bool8 spriteIgnore0Hp; struct Illusion illusion[MAX_BATTLERS_COUNT]; s32 aiFinalScore[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // AI, target, moves to make debugging easier u8 aiMoveOrAction[MAX_BATTLERS_COUNT]; u8 aiChosenTarget[MAX_BATTLERS_COUNT]; u8 soulheartBattlerId; u8 friskedBattler; // Frisk needs to identify 2 battlers in double battles. - bool8 friskedAbility; // If identifies two mons, show the ability pop-up only once. u8 sameMoveTurns[MAX_BATTLERS_COUNT]; // For Metronome, number of times the same moves has been SUCCESFULLY used. u16 moveEffect2; // For Knock Off u16 changedSpecies[NUM_BATTLE_SIDES][PARTY_SIZE]; // For forms when multiple mons can change into the same pokemon. @@ -778,14 +778,16 @@ struct BattleStruct u8 descriptionSubmenu:1; // For Move Description window in move selection screen u8 ackBallUseBtn:1; // Used for the last used ball feature u8 ballSwapped:1; // Used for the last used ball feature + u8 throwingPokeBall:1; u8 ballSpriteIds[2]; // item gfx, window gfx u8 appearedInBattle; // Bitfield to track which Pokemon appeared in battle. Used for Burmy's form change u8 skyDropTargets[MAX_BATTLERS_COUNT]; // For Sky Drop, to account for if multiple Pokemon use Sky Drop in a double battle. // When using a move which hits multiple opponents which is then bounced by a target, we need to make sure, the move hits both opponents, the one with bounce, and the one without. u8 attackerBeforeBounce:2; u8 beatUpSlot:3; - bool8 hitSwitchTargetFailed:1; - bool8 effectsBeforeUsingMoveDone:1; // Mega Evo and Focus Punch/Shell Trap effects. + u8 hitSwitchTargetFailed:1; + u8 effectsBeforeUsingMoveDone:1; // Mega Evo and Focus Punch/Shell Trap effects. + u8 spriteIgnore0Hp:1; u8 targetsDone[MAX_BATTLERS_COUNT]; // Each battler as a bit. u16 overwrittenAbilities[MAX_BATTLERS_COUNT]; // abilities overwritten during battle (keep separate from battle history in case of switching) u8 battleBondTransformed[NUM_BATTLE_SIDES]; // Bitfield for each party. @@ -803,9 +805,9 @@ struct BattleStruct u8 trainerSlideZMoveMsgDone:1; u8 trainerSlideBeforeFirstTurnMsgDone:1; u8 trainerSlideDynamaxMsgDone:1; + u8 trainerSlideLowHpMsgDone:1; u8 pledgeMove:1; u8 isSkyBattle:1; - u8 poisonPuppeteerConfusion:1; u32 aiDelayTimer; // Counts number of frames AI takes to choose an action. u32 aiDelayFrames; // Number of frames it took to choose an action. u8 timesGotHit[NUM_BATTLE_SIDES][PARTY_SIZE]; @@ -826,9 +828,6 @@ struct BattleStruct u8 commandingDondozo; u16 commanderActive[NUM_BATTLE_SIDES]; u32 stellarBoostFlags[NUM_BATTLE_SIDES]; // stored as a bitfield of flags for all types for each side - u8 fickleBeamBoosted:1; - u8 obedienceResult:3; - u8 padding:4; u8 usedEjectItem; u8 usedMicleBerry; }; From 76eae8ed000c4cc55ae16d16a5b5c99907a41ddf Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 28 Oct 2024 18:03:15 +0100 Subject: [PATCH 38/50] Decouple Poke Ball ids from item ids (#5560) --- graphics/balls/strange.png | Bin 0 -> 358 bytes graphics/items/icon_palettes/strange_ball.pal | 19 ++ graphics/items/icons/strange_ball.png | Bin 0 -> 304 bytes include/battle_anim.h | 1 - include/constants/items.h | 10 +- include/graphics.h | 4 + include/item.h | 2 +- include/pokeball.h | 58 +++--- migration_scripts/README.md | 2 +- src/battle_anim_throw.c | 176 ++++++------------ src/battle_main.c | 22 +-- src/battle_script_commands.c | 62 +++--- src/data/graphics/items.h | 3 + src/data/graphics/pokeballs.h | 3 + src/data/items.h | 70 ++++--- src/daycare.c | 22 +-- src/debug.c | 8 +- src/egg_hatch.c | 3 +- src/event_object_movement.c | 4 +- src/item.c | 9 +- src/pokeball.c | 84 ++++++--- src/pokemon.c | 2 +- src/pokemon_summary_screen.c | 18 +- src/script_pokemon_util.c | 6 +- test/battle/trainer_control.c | 4 +- test/pokemon.c | 4 +- 26 files changed, 300 insertions(+), 296 deletions(-) create mode 100644 graphics/balls/strange.png create mode 100644 graphics/items/icon_palettes/strange_ball.pal create mode 100644 graphics/items/icons/strange_ball.png diff --git a/graphics/balls/strange.png b/graphics/balls/strange.png new file mode 100644 index 0000000000000000000000000000000000000000..a4d141bead9bd3714e7eb1cbd94eaad7c6b8e1f0 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ!VDx|6+TY^QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`bpw1tT>t<7@95~*cx6}Uxuuo2SM7a!F6!d^|Np-~`+aZg{cC(Z6Q4bQ zHfP<@?(Xj7eS58&jGh2Bau#?*7BevL9R^{>~VUO@=d$ zt`M5EMuj11$FyAyl1_Spx?WulZA-kadoAsBXuERe>hd%_79*9gwU%4CR1V#^xV1cd5a`e3SOe|Wn`0@woI5r~Vauci3xqn-m@>l|UNRXv>=JS0QJgTZ zyQyiDLTytyYa_>+XYXPiJ5DwU2x}JbGcz+>5;r>a#<`^p=o;^2UbTgz zu$W=)oUD6mG`H=II=3cj+ZGN62FHDSix2H(C~anFY-ZqLh_nCA2GlE1666>B9}S#U z+%yF!H{a96F+^kH)`E+tW$C=`h>Ao)+w|rJLf7-Y0 zw#CMh8G6&F2tHwcZNqONBW5Ann&{$XIJczl^D+_ZX{I(QY}~g}c*sTimer = 0; sprite->callback = SpriteCB_Ball_MonShrink; - ballId = ItemIdToBallId(gLastUsedItem); - switch (ballId) - { - case 0 ... POKEBALL_COUNT - 1: - AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 28, ballId); - LaunchBallFadeMonTask(FALSE, gBattleAnimTarget, 14, ballId); - break; - } + enum PokeBall ballId = ItemIdToBallId(gLastUsedItem); + AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 28, ballId); + LaunchBallFadeMonTask(FALSE, gBattleAnimTarget, 14, ballId); } } } @@ -1720,20 +1663,13 @@ static void SpriteCB_CaptureStar_Flicker(struct Sprite *sprite) // - Wild mon emerge from Poké Ball static void SpriteCB_Ball_Release_Step(struct Sprite *sprite) { - u8 ballId; - StartSpriteAnim(sprite, 1); StartSpriteAffineAnim(sprite, 0); sprite->callback = SpriteCB_Ball_Release_Wait; - ballId = ItemIdToBallId(gLastUsedItem); - switch (ballId) - { - case 0 ... POKEBALL_COUNT - 1: - AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 28, ballId); - LaunchBallFadeMonTask(TRUE, gBattleAnimTarget, 14, ballId); - break; - } + enum PokeBall ballId = ItemIdToBallId(gLastUsedItem); + AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 28, ballId); + LaunchBallFadeMonTask(TRUE, gBattleAnimTarget, 14, ballId); // Animate Pokémon emerging from Poké Ball gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = FALSE; diff --git a/src/battle_main.c b/src/battle_main.c index d60b239981..7b71b8449d 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -320,15 +320,15 @@ const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT] = TRAINER_CLASS(TRAINER_CLASS_HIKER, "HIKER", 10), TRAINER_CLASS(TRAINER_CLASS_TEAM_AQUA, "TEAM AQUA"), TRAINER_CLASS(TRAINER_CLASS_PKMN_BREEDER, "{PKMN} BREEDER", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_HEAL_BALL : ITEM_FRIEND_BALL), - TRAINER_CLASS(TRAINER_CLASS_COOLTRAINER, "COOLTRAINER", 12, ITEM_ULTRA_BALL), + TRAINER_CLASS(TRAINER_CLASS_COOLTRAINER, "COOLTRAINER", 12, BALL_ULTRA), TRAINER_CLASS(TRAINER_CLASS_BIRD_KEEPER, "BIRD KEEPER", 8), - TRAINER_CLASS(TRAINER_CLASS_COLLECTOR, "COLLECTOR", 15, ITEM_PREMIER_BALL), - TRAINER_CLASS(TRAINER_CLASS_SWIMMER_M, "SWIMMER♂", 2, ITEM_DIVE_BALL), + TRAINER_CLASS(TRAINER_CLASS_COLLECTOR, "COLLECTOR", 15, BALL_PREMIER), + TRAINER_CLASS(TRAINER_CLASS_SWIMMER_M, "SWIMMER♂", 2, BALL_DIVE), TRAINER_CLASS(TRAINER_CLASS_TEAM_MAGMA, "TEAM MAGMA"), TRAINER_CLASS(TRAINER_CLASS_EXPERT, "EXPERT", 10), TRAINER_CLASS(TRAINER_CLASS_AQUA_ADMIN, "AQUA ADMIN", 10), - TRAINER_CLASS(TRAINER_CLASS_BLACK_BELT, "BLACK BELT", 8, ITEM_ULTRA_BALL), - TRAINER_CLASS(TRAINER_CLASS_AQUA_LEADER, "AQUA LEADER", 20, ITEM_MASTER_BALL), + TRAINER_CLASS(TRAINER_CLASS_BLACK_BELT, "BLACK BELT", 8, BALL_ULTRA), + TRAINER_CLASS(TRAINER_CLASS_AQUA_LEADER, "AQUA LEADER", 20, BALL_MASTER), TRAINER_CLASS(TRAINER_CLASS_HEX_MANIAC, "HEX MANIAC", 6), TRAINER_CLASS(TRAINER_CLASS_AROMA_LADY, "AROMA LADY", 10), TRAINER_CLASS(TRAINER_CLASS_RUIN_MANIAC, "RUIN MANIAC", 15), @@ -345,8 +345,8 @@ const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT] = TRAINER_CLASS(TRAINER_CLASS_PICNICKER, "PICNICKER", 4), TRAINER_CLASS(TRAINER_CLASS_BUG_MANIAC, "BUG MANIAC", 15), TRAINER_CLASS(TRAINER_CLASS_PSYCHIC, "PSYCHIC", 6), - TRAINER_CLASS(TRAINER_CLASS_GENTLEMAN, "GENTLEMAN", 20, ITEM_LUXURY_BALL), - TRAINER_CLASS(TRAINER_CLASS_ELITE_FOUR, "ELITE FOUR", 25, ITEM_ULTRA_BALL), + TRAINER_CLASS(TRAINER_CLASS_GENTLEMAN, "GENTLEMAN", 20, BALL_LUXURY), + TRAINER_CLASS(TRAINER_CLASS_ELITE_FOUR, "ELITE FOUR", 25, BALL_ULTRA), TRAINER_CLASS(TRAINER_CLASS_LEADER, "LEADER", 25), TRAINER_CLASS(TRAINER_CLASS_SCHOOL_KID, "SCHOOL KID"), TRAINER_CLASS(TRAINER_CLASS_SR_AND_JR, "SR. AND JR.", 4), @@ -354,21 +354,21 @@ const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT] = TRAINER_CLASS(TRAINER_CLASS_POKEFAN, "POKéFAN", 20), TRAINER_CLASS(TRAINER_CLASS_YOUNGSTER, "YOUNGSTER", 4), TRAINER_CLASS(TRAINER_CLASS_CHAMPION, "CHAMPION", 50), - TRAINER_CLASS(TRAINER_CLASS_FISHERMAN, "FISHERMAN", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_DIVE_BALL : ITEM_LURE_BALL), + TRAINER_CLASS(TRAINER_CLASS_FISHERMAN, "FISHERMAN", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? BALL_DIVE : BALL_LURE), TRAINER_CLASS(TRAINER_CLASS_TRIATHLETE, "TRIATHLETE", 10), TRAINER_CLASS(TRAINER_CLASS_DRAGON_TAMER, "DRAGON TAMER", 12), TRAINER_CLASS(TRAINER_CLASS_NINJA_BOY, "NINJA BOY", 3), TRAINER_CLASS(TRAINER_CLASS_BATTLE_GIRL, "BATTLE GIRL", 6), TRAINER_CLASS(TRAINER_CLASS_PARASOL_LADY, "PARASOL LADY", 10), - TRAINER_CLASS(TRAINER_CLASS_SWIMMER_F, "SWIMMER♀", 2, ITEM_DIVE_BALL), + TRAINER_CLASS(TRAINER_CLASS_SWIMMER_F, "SWIMMER♀", 2, BALL_DIVE), TRAINER_CLASS(TRAINER_CLASS_TWINS, "TWINS", 3), TRAINER_CLASS(TRAINER_CLASS_SAILOR, "SAILOR", 8), - TRAINER_CLASS(TRAINER_CLASS_COOLTRAINER_2, "COOLTRAINER", 5, ITEM_ULTRA_BALL), + TRAINER_CLASS(TRAINER_CLASS_COOLTRAINER_2, "COOLTRAINER", 5, BALL_ULTRA), TRAINER_CLASS(TRAINER_CLASS_MAGMA_ADMIN, "MAGMA ADMIN", 10), TRAINER_CLASS(TRAINER_CLASS_RIVAL, "{PKMN} TRAINER", 15), TRAINER_CLASS(TRAINER_CLASS_BUG_CATCHER, "BUG CATCHER", 4), TRAINER_CLASS(TRAINER_CLASS_PKMN_RANGER, "{PKMN} RANGER", 12), - TRAINER_CLASS(TRAINER_CLASS_MAGMA_LEADER, "MAGMA LEADER", 20, ITEM_MASTER_BALL), + TRAINER_CLASS(TRAINER_CLASS_MAGMA_LEADER, "MAGMA LEADER", 20, BALL_MASTER), TRAINER_CLASS(TRAINER_CLASS_LASS, "LASS", 4), TRAINER_CLASS(TRAINER_CLASS_YOUNG_COUPLE, "YOUNG COUPLE", 8), TRAINER_CLASS(TRAINER_CLASS_OLD_COUPLE, "OLD COUPLE", 10), diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 005ee855a5..5424d1b499 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -15173,10 +15173,10 @@ static void Cmd_handleballthrow(void) else { u32 odds, i; - u8 catchRate; + u32 catchRate; + u32 ballId = ItemIdToBallId(gLastUsedItem); - gLastThrownBall = gLastUsedItem; - gBallToDisplay = gLastThrownBall; + gBallToDisplay = gLastThrownBall = gLastUsedItem; if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) catchRate = gBattleStruct->safariCatchFactor * 1275 / 100; else @@ -15184,39 +15184,39 @@ static void Cmd_handleballthrow(void) if (gSpeciesInfo[gBattleMons[gBattlerTarget].species].isUltraBeast) { - if (gLastUsedItem == ITEM_BEAST_BALL) + if (ballId == BALL_BEAST) ballMultiplier = 500; else ballMultiplier = 10; } else { - switch (gLastUsedItem) + switch (ballId) { - case ITEM_ULTRA_BALL: + case BALL_ULTRA: ballMultiplier = 200; break; - case ITEM_SPORT_BALL: + case BALL_SPORT: if (B_SPORT_BALL_MODIFIER <= GEN_7) ballMultiplier = 150; break; - case ITEM_GREAT_BALL: + case BALL_GREAT: ballMultiplier = 150; break; - case ITEM_SAFARI_BALL: + case BALL_SAFARI: if (B_SAFARI_BALL_MODIFIER <= GEN_7) ballMultiplier = 150; break; - case ITEM_NET_BALL: + case BALL_NET: if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_WATER) || IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_BUG)) ballMultiplier = B_NET_BALL_MODIFIER >= GEN_7 ? 350 : 300; break; - case ITEM_DIVE_BALL: + case BALL_DIVE: if (GetCurrentMapType() == MAP_TYPE_UNDERWATER || (B_DIVE_BALL_MODIFIER >= GEN_4 && (gIsFishingEncounter || gIsSurfingEncounter))) ballMultiplier = 350; break; - case ITEM_NEST_BALL: + case BALL_NEST: if (B_NEST_BALL_MODIFIER >= GEN_6) { //((41 - Pokémon's level) ÷ 10)× if Pokémon's level is between 1 and 29, 1× otherwise. @@ -15237,25 +15237,25 @@ static void Cmd_handleballthrow(void) ballMultiplier = 100; } break; - case ITEM_REPEAT_BALL: + case BALL_REPEAT: if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species), FLAG_GET_CAUGHT)) ballMultiplier = (B_REPEAT_BALL_MODIFIER >= GEN_7 ? 350 : 300); break; - case ITEM_TIMER_BALL: + case BALL_TIMER: ballMultiplier = 100 + (gBattleResults.battleTurnCounter * (B_TIMER_BALL_MODIFIER >= GEN_5 ? 30 : 10)); if (ballMultiplier > 400) ballMultiplier = 400; break; - case ITEM_DUSK_BALL: + case BALL_DUSK: i = GetTimeOfDay(); if (i == TIME_EVENING || i == TIME_NIGHT || gMapHeader.cave || gMapHeader.mapType == MAP_TYPE_UNDERGROUND) ballMultiplier = (B_DUSK_BALL_MODIFIER >= GEN_7 ? 300 : 350); break; - case ITEM_QUICK_BALL: + case BALL_QUICK: if (gBattleResults.battleTurnCounter == 0) ballMultiplier = (B_QUICK_BALL_MODIFIER >= GEN_5 ? 500 : 400); break; - case ITEM_LEVEL_BALL: + case BALL_LEVEL: if (gBattleMons[gBattlerAttacker].level >= 4 * gBattleMons[gBattlerTarget].level) ballMultiplier = 800; else if (gBattleMons[gBattlerAttacker].level > 2 * gBattleMons[gBattlerTarget].level) @@ -15263,7 +15263,7 @@ static void Cmd_handleballthrow(void) else if (gBattleMons[gBattlerAttacker].level > gBattleMons[gBattlerTarget].level) ballMultiplier = 200; break; - case ITEM_LURE_BALL: + case BALL_LURE: if (gIsFishingEncounter) { if (B_LURE_BALL_MODIFIER >= GEN_8) @@ -15274,7 +15274,7 @@ static void Cmd_handleballthrow(void) ballMultiplier = 300; } break; - case ITEM_MOON_BALL: + case BALL_MOON: { const struct Evolution *evolutions = GetSpeciesEvolutions(gBattleMons[gBattlerTarget].species); if (evolutions == NULL) @@ -15287,7 +15287,7 @@ static void Cmd_handleballthrow(void) } } break; - case ITEM_LOVE_BALL: + case BALL_LOVE: if (gBattleMons[gBattlerTarget].species == gBattleMons[gBattlerAttacker].species) { u8 gender1 = GetMonGender(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]); @@ -15297,11 +15297,11 @@ static void Cmd_handleballthrow(void) ballMultiplier = 800; } break; - case ITEM_FAST_BALL: + case BALL_FAST: if (gSpeciesInfo[gBattleMons[gBattlerTarget].species].baseSpeed >= 100) ballMultiplier = 400; break; - case ITEM_HEAVY_BALL: + case BALL_HEAVY: i = GetSpeciesWeight(gBattleMons[gBattlerTarget].species); if (B_HEAVY_BALL_MODIFIER >= GEN_7) { @@ -15339,11 +15339,11 @@ static void Cmd_handleballthrow(void) ballAddition = 40; } break; - case ITEM_DREAM_BALL: + case BALL_DREAM: if (B_DREAM_BALL_MODIFIER >= GEN_8 && (gBattleMons[gBattlerTarget].status1 & STATUS1_SLEEP || GetBattlerAbility(gBattlerTarget) == ABILITY_COMATOSE)) ballMultiplier = 400; break; - case ITEM_BEAST_BALL: + case BALL_BEAST: ballMultiplier = 10; break; } @@ -15364,8 +15364,8 @@ static void Cmd_handleballthrow(void) if (gBattleMons[gBattlerTarget].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON | STATUS1_FROSTBITE)) odds = (odds * 15) / 10; - if (gBattleResults.catchAttempts[gLastUsedItem - FIRST_BALL] < 255) - gBattleResults.catchAttempts[gLastUsedItem - FIRST_BALL]++; + if (gBattleResults.catchAttempts[ballId] < 255) + gBattleResults.catchAttempts[ballId]++; if (odds > 254) // mon caught { @@ -15373,14 +15373,14 @@ static void Cmd_handleballthrow(void) MarkBattlerForControllerExec(gBattlerAttacker); TryBattleFormChange(gBattlerTarget, FORM_CHANGE_END_BATTLE); gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; - SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); + SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &ballId); if (CalculatePlayerPartyCount() == PARTY_SIZE) gBattleCommunication[MULTISTRING_CHOOSER] = 0; else gBattleCommunication[MULTISTRING_CHOOSER] = 1; - if (gLastUsedItem == ITEM_HEAL_BALL) + if (gLastUsedItem == BALL_HEAL) { MonRestorePP(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]); HealStatusConditions(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], STATUS1_ANY, gBattlerTarget); @@ -15406,7 +15406,7 @@ static void Cmd_handleballthrow(void) maxShakes = BALL_3_SHAKES_SUCCESS; } - if (gLastUsedItem == ITEM_MASTER_BALL) + if (ballId == BALL_MASTER) { shakes = maxShakes; } @@ -15427,14 +15427,14 @@ static void Cmd_handleballthrow(void) TryBattleFormChange(gBattlerTarget, FORM_CHANGE_END_BATTLE); gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; - SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem); + SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &ballId); if (CalculatePlayerPartyCount() == PARTY_SIZE) gBattleCommunication[MULTISTRING_CHOOSER] = 0; else gBattleCommunication[MULTISTRING_CHOOSER] = 1; - if (gLastUsedItem == ITEM_HEAL_BALL) + if (ballId == BALL_HEAL) { MonRestorePP(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]); HealStatusConditions(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], STATUS1_ANY, gBattlerTarget); diff --git a/src/data/graphics/items.h b/src/data/graphics/items.h index 45e3ec0e2c..b508df90a1 100644 --- a/src/data/graphics/items.h +++ b/src/data/graphics/items.h @@ -6,6 +6,9 @@ const u32 gItemIconPalette_ReturnToFieldArrow[] = INCBIN_U32("graphics/items/ico // Poké Balls +const u32 gItemIcon_StrangeBall[] = INCBIN_U32("graphics/items/icons/strange_ball.4bpp.lz"); +const u32 gItemIconPalette_StrangeBall[] = INCBIN_U32("graphics/items/icon_palettes/strange_ball.gbapal.lz"); + const u32 gItemIcon_PokeBall[] = INCBIN_U32("graphics/items/icons/poke_ball.4bpp.lz"); const u32 gItemIconPalette_PokeBall[] = INCBIN_U32("graphics/items/icon_palettes/poke_ball.gbapal.lz"); diff --git a/src/data/graphics/pokeballs.h b/src/data/graphics/pokeballs.h index 44f47cde48..f09d635d21 100644 --- a/src/data/graphics/pokeballs.h +++ b/src/data/graphics/pokeballs.h @@ -1,3 +1,6 @@ +const u32 gBallGfx_Strange[] = INCBIN_U32("graphics/balls/strange.4bpp.lz"); +const u32 gBallPal_Strange[] = INCBIN_U32("graphics/balls/strange.gbapal.lz"); + const u32 gBallGfx_Poke[] = INCBIN_U32("graphics/balls/poke.4bpp.lz"); const u32 gBallPal_Poke[] = INCBIN_U32("graphics/balls/poke.gbapal.lz"); diff --git a/src/data/items.h b/src/data/items.h index 88a46efd7d..2b560ad9d5 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -154,6 +154,22 @@ const struct Item gItemsInfo[] = // Poké Balls + [ITEM_STRANGE_BALL] = + { + .name = _("Strange Ball"), + .price = 0, + .description = COMPOUND_STRING( + "An unusual Ball\n" + "warped through\n" + "space and time."), + .pocket = POCKET_POKE_BALLS, + .type = ITEM_USE_BAG_MENU, + .battleUsage = EFFECT_ITEM_THROW_BALL, + .secondaryId = BALL_STRANGE, + .iconPic = gItemIcon_StrangeBall, + .iconPalette = gItemIconPalette_StrangeBall, + }, + [ITEM_POKE_BALL] = { .name = _("Poké Ball"), @@ -165,7 +181,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_POKE_BALL - FIRST_BALL, + .secondaryId = BALL_POKE, .iconPic = gItemIcon_PokeBall, .iconPalette = gItemIconPalette_PokeBall, }, @@ -181,7 +197,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_GREAT_BALL - FIRST_BALL, + .secondaryId = BALL_GREAT, .iconPic = gItemIcon_GreatBall, .iconPalette = gItemIconPalette_GreatBall, }, @@ -197,7 +213,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_ULTRA_BALL - FIRST_BALL, + .secondaryId = BALL_ULTRA, .iconPic = gItemIcon_UltraBall, .iconPalette = gItemIconPalette_UltraBall, }, @@ -213,7 +229,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_MASTER_BALL - FIRST_BALL, + .secondaryId = BALL_MASTER, .iconPic = gItemIcon_MasterBall, .iconPalette = gItemIconPalette_MasterBall, }, @@ -229,7 +245,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_PREMIER_BALL - FIRST_BALL, + .secondaryId = BALL_PREMIER, .iconPic = gItemIcon_PremierBall, .iconPalette = gItemIconPalette_LuxuryBall, }, @@ -245,7 +261,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_HEAL_BALL - FIRST_BALL, + .secondaryId = BALL_HEAL, .iconPic = gItemIcon_HealBall, .iconPalette = gItemIconPalette_HealBall, }, @@ -261,7 +277,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_NET_BALL - FIRST_BALL, + .secondaryId = BALL_NET, .iconPic = gItemIcon_NetBall, .iconPalette = gItemIconPalette_NetBall, }, @@ -277,7 +293,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_NEST_BALL - FIRST_BALL, + .secondaryId = BALL_NEST, .iconPic = gItemIcon_NestBall, .iconPalette = gItemIconPalette_NestBall, }, @@ -293,7 +309,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_DIVE_BALL - FIRST_BALL, + .secondaryId = BALL_DIVE, .iconPic = gItemIcon_DiveBall, .iconPalette = gItemIconPalette_DiveBall, }, @@ -309,7 +325,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_DUSK_BALL - FIRST_BALL, + .secondaryId = BALL_DUSK, .iconPic = gItemIcon_DuskBall, .iconPalette = gItemIconPalette_DuskBall, }, @@ -325,7 +341,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_TIMER_BALL - FIRST_BALL, + .secondaryId = BALL_TIMER, .iconPic = gItemIcon_TimerBall, .iconPalette = gItemIconPalette_RepeatBall, }, @@ -341,7 +357,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_QUICK_BALL - FIRST_BALL, + .secondaryId = BALL_QUICK, .iconPic = gItemIcon_QuickBall, .iconPalette = gItemIconPalette_QuickBall, }, @@ -357,7 +373,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_REPEAT_BALL - FIRST_BALL, + .secondaryId = BALL_REPEAT, .iconPic = gItemIcon_RepeatBall, .iconPalette = gItemIconPalette_RepeatBall, }, @@ -373,7 +389,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_LUXURY_BALL - FIRST_BALL, + .secondaryId = BALL_LUXURY, .iconPic = gItemIcon_LuxuryBall, .iconPalette = gItemIconPalette_LuxuryBall, }, @@ -389,7 +405,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_LEVEL_BALL - FIRST_BALL, + .secondaryId = BALL_LEVEL, .iconPic = gItemIcon_LevelBall, .iconPalette = gItemIconPalette_LevelBall, }, @@ -405,7 +421,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_LURE_BALL - FIRST_BALL, + .secondaryId = BALL_LURE, .iconPic = gItemIcon_LureBall, .iconPalette = gItemIconPalette_LureBall, }, @@ -421,7 +437,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_MOON_BALL - FIRST_BALL, + .secondaryId = BALL_MOON, .iconPic = gItemIcon_MoonBall, .iconPalette = gItemIconPalette_MoonBall, }, @@ -437,7 +453,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_FRIEND_BALL - FIRST_BALL, + .secondaryId = BALL_FRIEND, .iconPic = gItemIcon_FriendBall, .iconPalette = gItemIconPalette_FriendBall, }, @@ -453,7 +469,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_LOVE_BALL - FIRST_BALL, + .secondaryId = BALL_LOVE, .iconPic = gItemIcon_LoveBall, .iconPalette = gItemIconPalette_LoveBall, }, @@ -469,7 +485,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_FAST_BALL - FIRST_BALL, + .secondaryId = BALL_FAST, .iconPic = gItemIcon_FastBall, .iconPalette = gItemIconPalette_FastBall, }, @@ -485,7 +501,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_HEAVY_BALL - FIRST_BALL, + .secondaryId = BALL_HEAVY, .iconPic = gItemIcon_HeavyBall, .iconPalette = gItemIconPalette_HeavyBall, }, @@ -506,7 +522,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_DREAM_BALL - FIRST_BALL, + .secondaryId = BALL_DREAM, .iconPic = gItemIcon_DreamBall, .iconPalette = gItemIconPalette_DreamBall, }, @@ -522,7 +538,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_SAFARI_BALL - FIRST_BALL, + .secondaryId = BALL_SAFARI, .iconPic = gItemIcon_SafariBall, .iconPalette = gItemIconPalette_SafariBall, }, @@ -538,7 +554,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_SPORT_BALL - FIRST_BALL, + .secondaryId = BALL_SPORT, .iconPic = gItemIcon_SportBall, .iconPalette = gItemIconPalette_SportBall, }, @@ -553,7 +569,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_PARK_BALL - FIRST_BALL, + .secondaryId = BALL_PARK, .iconPic = gItemIcon_ParkBall, .iconPalette = gItemIconPalette_ParkBall, }, @@ -568,7 +584,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_BEAST_BALL - FIRST_BALL, + .secondaryId = BALL_BEAST, .iconPic = gItemIcon_BeastBall, .iconPalette = gItemIconPalette_BeastBall, }, @@ -584,7 +600,7 @@ const struct Item gItemsInfo[] = .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, - .secondaryId = ITEM_CHERISH_BALL - FIRST_BALL, + .secondaryId = BALL_CHERISH, .iconPic = gItemIcon_CherishBall, .iconPalette = gItemIconPalette_CherishBall, }, diff --git a/src/daycare.c b/src/daycare.c index 780e69e44d..013e0b05ba 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -716,17 +716,17 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) static void InheritPokeball(struct Pokemon *egg, struct BoxPokemon *father, struct BoxPokemon *mother) { - u16 inheritBall = ITEM_POKE_BALL; - u16 fatherBall = GetBoxMonData(father, MON_DATA_POKEBALL); - u16 motherBall = GetBoxMonData(mother, MON_DATA_POKEBALL); + enum PokeBall inheritBall = BALL_POKE; + enum PokeBall fatherBall = GetBoxMonData(father, MON_DATA_POKEBALL); + enum PokeBall motherBall = GetBoxMonData(mother, MON_DATA_POKEBALL); u16 fatherSpecies = GetBoxMonData(father, MON_DATA_SPECIES); u16 motherSpecies = GetBoxMonData(mother, MON_DATA_SPECIES); - if (fatherBall == ITEM_MASTER_BALL || fatherBall == ITEM_CHERISH_BALL) - fatherBall = ITEM_POKE_BALL; + if (fatherBall == BALL_MASTER || fatherBall == BALL_CHERISH || fatherBall == BALL_STRANGE) + fatherBall = BALL_POKE; - if (motherBall == ITEM_MASTER_BALL || motherBall == ITEM_CHERISH_BALL) - motherBall = ITEM_POKE_BALL; + if (motherBall == BALL_MASTER || motherBall == BALL_CHERISH || motherBall == BALL_STRANGE) + motherBall = BALL_POKE; if (P_BALL_INHERITING >= GEN_7) { @@ -1087,14 +1087,14 @@ static void _GiveEggFromDaycare(struct DayCare *daycare) void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation) { u8 metLevel; - u16 ball; + enum PokeBall ball; u8 language; u8 metLocation; u8 isEgg; CreateMon(mon, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); metLevel = 0; - ball = ITEM_POKE_BALL; + ball = BALL_POKE; language = LANGUAGE_JAPANESE; SetMonData(mon, MON_DATA_POKEBALL, &ball); SetMonData(mon, MON_DATA_NICKNAME, sJapaneseEggNickname); @@ -1114,14 +1114,14 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation) static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare) { u32 personality; - u16 ball; + enum PokeBall ball; u8 metLevel; u8 language; personality = daycare->offspringPersonality; CreateMon(mon, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); metLevel = 0; - ball = ITEM_POKE_BALL; + ball = BALL_POKE; language = LANGUAGE_JAPANESE; SetMonData(mon, MON_DATA_POKEBALL, &ball); SetMonData(mon, MON_DATA_NICKNAME, sJapaneseEggNickname); diff --git a/src/debug.c b/src/debug.c index a3978fbd40..f1c403fc1e 100644 --- a/src/debug.c +++ b/src/debug.c @@ -4174,12 +4174,12 @@ static void DebugAction_PCBag_Fill_PocketItems(u8 taskId) static void DebugAction_PCBag_Fill_PocketPokeBalls(u8 taskId) { - u16 itemId; + u16 ballId; - for (itemId = FIRST_BALL; itemId < LAST_BALL; itemId++) + for (ballId = BALL_STRANGE; ballId < POKEBALL_COUNT; ballId++) { - if (CheckBagHasSpace(itemId, MAX_BAG_ITEM_CAPACITY)) - AddBagItem(itemId, MAX_BAG_ITEM_CAPACITY); + if (CheckBagHasSpace(ballId, MAX_BAG_ITEM_CAPACITY)) + AddBagItem(ballId, MAX_BAG_ITEM_CAPACITY); } } diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 88f2b329e9..ee45635ce7 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -314,7 +314,8 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { u16 species; u32 personality, pokerus; - u8 i, friendship, language, gameMet, markings, isModernFatefulEncounter, ball; + enum PokeBall ball; + u8 i, friendship, language, gameMet, markings, isModernFatefulEncounter; u16 moves[MAX_MON_MOVES]; u32 ivs[NUM_STATS]; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 9a4f9980f5..f1aefbb046 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -7344,12 +7344,12 @@ static u8 LoadFillColorPalette(u16 color, u16 paletteTag, struct Sprite *sprite) static void ObjectEventSetPokeballGfx(struct ObjectEvent *objEvent) { #if OW_FOLLOWERS_POKEBALLS - u32 ball = BALL_POKE; + enum PokeBall ball = BALL_STRANGE; if (objEvent->localId == OBJ_EVENT_ID_FOLLOWER) { struct Pokemon *mon = GetFirstLiveMon(); if (mon) - ball = ItemIdToBallId(GetMonData(mon, MON_DATA_POKEBALL)); + ball = GetMonData(mon, MON_DATA_POKEBALL); } if (ball != BALL_POKE && ball < POKEBALL_COUNT) diff --git a/src/item.c b/src/item.c index 36114e1591..b0135d8f83 100644 --- a/src/item.c +++ b/src/item.c @@ -1,6 +1,7 @@ #include "global.h" #include "item.h" #include "berry.h" +#include "pokeball.h" #include "string_util.h" #include "text.h" #include "event_data.h" @@ -166,11 +167,11 @@ bool8 HasAtLeastOneBerry(void) bool8 HasAtLeastOnePokeBall(void) { - u16 i; + u16 ballId; - for (i = FIRST_BALL; i <= LAST_BALL; i++) + for (ballId = BALL_STRANGE; ballId < POKEBALL_COUNT; ballId++) { - if (CheckBagHasItem(i, 1) == TRUE) + if (CheckBagHasItem(ballId, 1) == TRUE) return TRUE; } return FALSE; @@ -968,7 +969,7 @@ u8 ItemId_GetBattleUsage(u16 itemId) return gItemsInfo[item].battleUsage; } -u8 ItemId_GetSecondaryId(u16 itemId) +u32 ItemId_GetSecondaryId(u32 itemId) { return gItemsInfo[SanitizeItemId(itemId)].secondaryId; } diff --git a/src/pokeball.c b/src/pokeball.c index 21557d973a..2b168cd7e3 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -13,6 +13,7 @@ #include "trig.h" #include "util.h" #include "data.h" +#include "item.h" #include "constants/songs.h" static void Task_DoPokeballSendOutAnim(u8 taskId); @@ -47,36 +48,38 @@ static u16 GetBattlerPokeballItemId(u8 battlerId); // rom const data -#define GFX_TAG_POKE_BALL 55000 -#define GFX_TAG_GREAT_BALL 55001 -#define GFX_TAG_ULTRA_BALL 55002 -#define GFX_TAG_MASTER_BALL 55003 -#define GFX_TAG_PREMIER_BALL 55004 -#define GFX_TAG_HEAL_BALL 55005 -#define GFX_TAG_NET_BALL 55006 -#define GFX_TAG_NEST_BALL 55007 -#define GFX_TAG_DIVE_BALL 55008 -#define GFX_TAG_DUSK_BALL 55009 -#define GFX_TAG_TIMER_BALL 55010 -#define GFX_TAG_QUICK_BALL 55011 -#define GFX_TAG_REPEAT_BALL 55012 -#define GFX_TAG_LUXURY_BALL 55013 -#define GFX_TAG_LEVEL_BALL 55014 -#define GFX_TAG_LURE_BALL 55015 -#define GFX_TAG_MOON_BALL 55016 -#define GFX_TAG_FRIEND_BALL 55017 -#define GFX_TAG_LOVE_BALL 55018 -#define GFX_TAG_FAST_BALL 55019 -#define GFX_TAG_HEAVY_BALL 55020 -#define GFX_TAG_DREAM_BALL 55021 -#define GFX_TAG_SAFARI_BALL 55022 -#define GFX_TAG_SPORT_BALL 55023 -#define GFX_TAG_PARK_BALL 55024 -#define GFX_TAG_BEAST_BALL 55025 -#define GFX_TAG_CHERISH_BALL 55026 +#define GFX_TAG_STRANGE_BALL 55000 +#define GFX_TAG_POKE_BALL 55001 +#define GFX_TAG_GREAT_BALL 55002 +#define GFX_TAG_ULTRA_BALL 55003 +#define GFX_TAG_MASTER_BALL 55004 +#define GFX_TAG_PREMIER_BALL 55005 +#define GFX_TAG_HEAL_BALL 55006 +#define GFX_TAG_NET_BALL 55007 +#define GFX_TAG_NEST_BALL 55008 +#define GFX_TAG_DIVE_BALL 55009 +#define GFX_TAG_DUSK_BALL 55010 +#define GFX_TAG_TIMER_BALL 55011 +#define GFX_TAG_QUICK_BALL 55012 +#define GFX_TAG_REPEAT_BALL 55013 +#define GFX_TAG_LUXURY_BALL 55014 +#define GFX_TAG_LEVEL_BALL 55015 +#define GFX_TAG_LURE_BALL 55016 +#define GFX_TAG_MOON_BALL 55017 +#define GFX_TAG_FRIEND_BALL 55018 +#define GFX_TAG_LOVE_BALL 55019 +#define GFX_TAG_FAST_BALL 55020 +#define GFX_TAG_HEAVY_BALL 55021 +#define GFX_TAG_DREAM_BALL 55022 +#define GFX_TAG_SAFARI_BALL 55023 +#define GFX_TAG_SPORT_BALL 55024 +#define GFX_TAG_PARK_BALL 55025 +#define GFX_TAG_BEAST_BALL 55026 +#define GFX_TAG_CHERISH_BALL 55027 const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT] = { + [BALL_STRANGE] = {gBallGfx_Strange, 384, GFX_TAG_STRANGE_BALL}, [BALL_POKE] = {gBallGfx_Poke, 384, GFX_TAG_POKE_BALL}, [BALL_GREAT] = {gBallGfx_Great, 384, GFX_TAG_GREAT_BALL}, [BALL_ULTRA] = {gBallGfx_Ultra, 384, GFX_TAG_ULTRA_BALL}, @@ -108,6 +111,7 @@ const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT] = const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT] = { + [BALL_STRANGE] = {gBallPal_Strange, GFX_TAG_STRANGE_BALL}, [BALL_POKE] = {gBallPal_Poke, GFX_TAG_POKE_BALL}, [BALL_GREAT] = {gBallPal_Great, GFX_TAG_GREAT_BALL}, [BALL_ULTRA] = {gBallPal_Ultra, GFX_TAG_ULTRA_BALL}, @@ -252,6 +256,16 @@ static const union AffineAnimCmd *const sAffineAnim_BallRotate[] = const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] = { + [BALL_STRANGE] = + { + .tileTag = GFX_TAG_STRANGE_BALL, + .paletteTag = GFX_TAG_STRANGE_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sAffineAnim_BallRotate, + .callback = SpriteCB_BallThrow, + }, [BALL_POKE] = { .tileTag = GFX_TAG_POKE_BALL, @@ -562,7 +576,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) throwCaseId = gTasks[taskId].tThrowId; battlerId = gTasks[taskId].tBattler; - ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId)); + ballId = GetBattlerPokeballItemId(battlerId); LoadBallGfx(ballId); ballSpriteId = CreateSprite(&gBallSpriteTemplates[ballId], 32, 80, 29); gSprites[ballSpriteId].data[0] = 0x80; @@ -651,7 +665,7 @@ static void SpriteCB_BallThrow(struct Sprite *sprite) sprite->x2 = 0; sprite->y2 = 0; sprite->data[5] = 0; - ballId = ItemIdToBallId(GetBattlerPokeballItemId(opponentBattler)); + ballId = GetBattlerPokeballItemId(opponentBattler); AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 28, ballId); sprite->data[0] = LaunchBallFadeMonTask(FALSE, opponentBattler, 14, ballId); sprite->sBattler = opponentBattler; @@ -967,7 +981,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) u32 ballId; StartSpriteAnim(sprite, 1); - ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId)); + ballId = GetBattlerPokeballItemId(battlerId); AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 28, ballId); sprite->data[0] = LaunchBallFadeMonTask(TRUE, sprite->sBattler, 14, ballId); sprite->callback = HandleBallAnimEnd; @@ -1580,3 +1594,13 @@ static u16 GetBattlerPokeballItemId(u8 battlerId) return GetMonData(mon, MON_DATA_POKEBALL); } + +enum PokeBall ItemIdToBallId(u32 ballItem) +{ + enum PokeBall secondaryId = ItemId_GetSecondaryId(ballItem); + + if (secondaryId <= BALL_STRANGE || secondaryId >= POKEBALL_COUNT) + return BALL_STRANGE; + + return secondaryId; +} diff --git a/src/pokemon.c b/src/pokemon.c index c5dcbb1903..242d28d664 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1022,7 +1022,7 @@ STATIC_ASSERT(NUM_SPECIES < (1 << 11), PokemonSubstruct0_species_TooSmall); STATIC_ASSERT(NUMBER_OF_MON_TYPES + 1 <= (1 << 5), PokemonSubstruct0_teraType_TooSmall); STATIC_ASSERT(ITEMS_COUNT < (1 << 10), PokemonSubstruct0_heldItem_TooSmall); STATIC_ASSERT(MAX_LEVEL <= 100, PokemonSubstruct0_experience_PotentiallTooSmall); // Maximum of ~2 million exp. -STATIC_ASSERT(LAST_BALL < (1 << 6), PokemonSubstruct0_pokeball_TooSmall); +STATIC_ASSERT(POKEBALL_COUNT <= (1 << 6), PokemonSubstruct0_pokeball_TooSmall); STATIC_ASSERT(MOVES_COUNT_ALL < (1 << 11), PokemonSubstruct1_moves_TooSmall); STATIC_ASSERT(ARRAY_COUNT(sCompressedStatuses) <= (1 << 4), PokemonSubstruct3_compressedStatus_TooSmall); STATIC_ASSERT(MAX_LEVEL < (1 << 7), PokemonSubstruct3_metLevel_TooSmall); diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index d20e3299d2..4cfc17c707 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -1579,8 +1579,8 @@ static void SetDefaultTilemaps(void) SetBgTilemapBuffer(2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0]); SetBgAttribute(1, BG_ATTR_PRIORITY, 2); SetBgAttribute(2, BG_ATTR_PRIORITY, 1); - ChangeBgX(1, 0x10000, BG_COORD_ADD); - ChangeBgX(2, 0x10000, BG_COORD_ADD); + ChangeBgX(1, 0x10000, BG_COORD_ADD); + ChangeBgX(2, 0x10000, BG_COORD_ADD); ShowBg(1); ShowBg(2); } @@ -1591,8 +1591,8 @@ static void SetDefaultTilemaps(void) SetBgTilemapBuffer(2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0]); SetBgAttribute(1, BG_ATTR_PRIORITY, 1); SetBgAttribute(2, BG_ATTR_PRIORITY, 2); - ChangeBgX(1, 0x10000, BG_COORD_ADD); - ChangeBgX(2, 0x10000, BG_COORD_ADD); + ChangeBgX(1, 0x10000, BG_COORD_ADD); + ChangeBgX(2, 0x10000, BG_COORD_ADD); ShowBg(1); ShowBg(2); } @@ -4271,7 +4271,7 @@ static void RemoveAndCreateMonMarkingsSprite(struct Pokemon *mon) static void CreateCaughtBallSprite(struct Pokemon *mon) { - u8 ball = ItemIdToBallId(GetMonData(mon, MON_DATA_POKEBALL)); + enum PokeBall ball = GetMonData(mon, MON_DATA_POKEBALL); LoadBallGfx(ball); sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_BALL] = CreateSprite(&gBallSpriteTemplates[ball], 16, 136, 0); @@ -4392,7 +4392,7 @@ static inline bool32 ShouldShowMoveRelearner(void) && sMonSummaryScreen->mode != SUMMARY_MODE_BOX && sMonSummaryScreen->mode != SUMMARY_MODE_BOX_CURSOR && sMonSummaryScreen->relearnableMovesNum > 0 - && !InBattleFactory() + && !InBattleFactory() && !InSlateportBattleTent()); } @@ -4403,7 +4403,7 @@ static inline bool32 ShouldShowRename(void) && !sMonSummaryScreen->summary.isEgg && sMonSummaryScreen->mode != SUMMARY_MODE_BOX && sMonSummaryScreen->mode != SUMMARY_MODE_BOX_CURSOR - && !InBattleFactory() + && !InBattleFactory() && !InSlateportBattleTent() && GetPlayerIDAsU32() == sMonSummaryScreen->summary.OTID); } @@ -4431,7 +4431,7 @@ static void CB2_PssChangePokemonNickname(void) { GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3); GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar2); - DoNamingScreen(NAMING_SCREEN_NICKNAME, gStringVar2, GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES, NULL), - GetMonGender(&gPlayerParty[gSpecialVar_0x8004]), GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_PERSONALITY, NULL), + DoNamingScreen(NAMING_SCREEN_NICKNAME, gStringVar2, GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES, NULL), + GetMonGender(&gPlayerParty[gSpecialVar_0x8004]), GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_PERSONALITY, NULL), CB2_ReturnToSummaryScreenFromNamingScreen); } diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index 3d2c7d640c..020094389a 100644 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -317,7 +317,7 @@ void SetTeraType(struct ScriptContext *ctx) * if side/slot are assigned, it will create the mon at the assigned party location * if slot == PARTY_SIZE, it will give the mon to first available party or storage slot */ -static u32 ScriptGiveMonParameterized(u8 side, u8 slot, u16 species, u8 level, u16 item, u8 ball, u8 nature, u8 abilityNum, u8 gender, u8 *evs, u8 *ivs, u16 *moves, bool8 isShiny, bool8 ggMaxFactor, u8 teraType) +static u32 ScriptGiveMonParameterized(u8 side, u8 slot, u16 species, u8 level, u16 item, enum PokeBall ball, u8 nature, u8 abilityNum, u8 gender, u8 *evs, u8 *ivs, u16 *moves, bool8 isShiny, bool8 ggMaxFactor, u8 teraType) { u16 nationalDexNum; int sentToPc; @@ -396,8 +396,8 @@ static u32 ScriptGiveMonParameterized(u8 side, u8 slot, u16 species, u8 level, u SetMonData(&mon, MON_DATA_ABILITY_NUM, &abilityNum); // ball - if (ball > LAST_BALL) - ball = ITEM_POKE_BALL; + if (ball > POKEBALL_COUNT) + ball = BALL_POKE; SetMonData(&mon, MON_DATA_POKEBALL, &ball); // held item diff --git a/test/battle/trainer_control.c b/test/battle/trainer_control.c index e31d281efe..5344a26596 100644 --- a/test/battle/trainer_control.c +++ b/test/battle/trainer_control.c @@ -24,8 +24,8 @@ TEST("CreateNPCTrainerPartyForTrainer generates customized Pokémon") EXPECT(IsMonShiny(&testParty[0])); EXPECT(!IsMonShiny(&testParty[1])); - EXPECT(GetMonData(&testParty[0], MON_DATA_POKEBALL, 0) == ITEM_MASTER_BALL); - EXPECT(GetMonData(&testParty[1], MON_DATA_POKEBALL, 0) == ITEM_POKE_BALL); + EXPECT(GetMonData(&testParty[0], MON_DATA_POKEBALL, 0) == BALL_MASTER); + EXPECT(GetMonData(&testParty[1], MON_DATA_POKEBALL, 0) == BALL_POKE); EXPECT(GetMonData(&testParty[0], MON_DATA_SPECIES, 0) == SPECIES_WOBBUFFET); EXPECT(GetMonData(&testParty[1], MON_DATA_SPECIES, 0) == SPECIES_WOBBUFFET); diff --git a/test/pokemon.c b/test/pokemon.c index 8419b9c7e1..f5431559ee 100644 --- a/test/pokemon.c +++ b/test/pokemon.c @@ -237,7 +237,7 @@ TEST("givemon [all]") EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_WOBBUFFET); EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_LEVEL), 100); EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_HELD_ITEM), ITEM_LEFTOVERS); - EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_POKEBALL), ITEM_MASTER_BALL); + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_POKEBALL), BALL_MASTER); EXPECT_EQ(GetNature(&gPlayerParty[0]), NATURE_BOLD); EXPECT_EQ(GetMonAbility(&gPlayerParty[0]), gSpeciesInfo[SPECIES_WOBBUFFET].abilities[2]); EXPECT_EQ(GetMonGender(&gPlayerParty[0]), MON_MALE); @@ -300,7 +300,7 @@ TEST("givemon [vars]") EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_WOBBUFFET); EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_LEVEL), 100); EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_HELD_ITEM), ITEM_LEFTOVERS); - EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_POKEBALL), ITEM_MASTER_BALL); + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_POKEBALL), BALL_MASTER); EXPECT_EQ(GetNature(&gPlayerParty[0]), NATURE_BOLD); EXPECT_EQ(GetMonAbility(&gPlayerParty[0]), gSpeciesInfo[SPECIES_WOBBUFFET].abilities[2]); EXPECT_EQ(GetMonGender(&gPlayerParty[0]), MON_MALE); From 3d750f8770e57421b8bdd8472ec4394231005d24 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Tue, 29 Oct 2024 11:17:02 +0100 Subject: [PATCH 39/50] Fixed a ball update oversight (#5609) --- src/battle_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_main.c b/src/battle_main.c index 7b71b8449d..3cee7da264 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -319,7 +319,7 @@ const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT] = TRAINER_CLASS(TRAINER_CLASS_PKMN_TRAINER_2, "{PKMN} TRAINER"), TRAINER_CLASS(TRAINER_CLASS_HIKER, "HIKER", 10), TRAINER_CLASS(TRAINER_CLASS_TEAM_AQUA, "TEAM AQUA"), - TRAINER_CLASS(TRAINER_CLASS_PKMN_BREEDER, "{PKMN} BREEDER", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_HEAL_BALL : ITEM_FRIEND_BALL), + TRAINER_CLASS(TRAINER_CLASS_PKMN_BREEDER, "{PKMN} BREEDER", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? BALL_HEAL : BALL_FRIEND), TRAINER_CLASS(TRAINER_CLASS_COOLTRAINER, "COOLTRAINER", 12, BALL_ULTRA), TRAINER_CLASS(TRAINER_CLASS_BIRD_KEEPER, "BIRD KEEPER", 8), TRAINER_CLASS(TRAINER_CLASS_COLLECTOR, "COLLECTOR", 15, BALL_PREMIER), From dfa3690d74b441ca3b3059599797d4a453e7eab1 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 29 Oct 2024 11:38:26 -0300 Subject: [PATCH 40/50] Added config to disable gender differences (#5595) --- include/config/pokemon.h | 5 +- include/pokemon.h | 226 +++++++------- src/battle_anim_mons.c | 8 + src/data/graphics/pokemon.h | 210 ++++++++++++- .../object_event_pic_tables_followers.h | 197 +++++++++++- src/data/pokemon/species_info.h | 26 +- .../pokemon/species_info/gen_1_families.h | 286 +++++++++++------- .../pokemon/species_info/gen_2_families.h | 222 ++++++++------ .../pokemon/species_info/gen_3_families.h | 182 ++++++----- .../pokemon/species_info/gen_4_families.h | 210 ++++++++----- .../pokemon/species_info/gen_5_families.h | 48 +-- .../pokemon/species_info/gen_6_families.h | 12 +- src/decompress.c | 10 +- src/event_object_movement.c | 4 + src/pokemon.c | 12 +- src/pokemon_icon.c | 9 +- src/pokemon_storage_system.c | 6 +- 17 files changed, 1164 insertions(+), 509 deletions(-) diff --git a/include/config/pokemon.h b/include/config/pokemon.h index 311e7c7fe9..23015614c0 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -37,10 +37,11 @@ #define P_SHEDINJA_BALL GEN_LATEST // Since Gen 4, Shedinja requires a Poké Ball for its evolution. In Gen 3, Shedinja inherits Nincada's Ball. #define P_KADABRA_EVERSTONE GEN_LATEST // Since Gen 4, Kadabra can evolve even when holding an Everstone. #define P_SHUCKLE_BERRY_JUICE GEN_LATEST // In Gen 2, Shuckle had a 1/16 chance of converting Berry that it's holding into Berry Juice. Enabling this will allow Shuckle to do this with an Oran Berry, which is the spiritual succesor of the Berry item. -#define P_ARCEUS_UNIQUE_FORM_ICONS GEN_LATEST // Since Gen 9, Arceus additionally changes its icon to reflect its current form. // Species graphic settings -#define P_CUSTOM_GENDER_DIFF_ICONS TRUE // If TRUE, will give more Pokémon custom icons for their female forms, i.e. Hippopotas and Hippowdon +#define P_GENDER_DIFFERENCES TRUE // If TRUE, Pokémon will have graphical-only differences when they're female. Female *forms* such as Meowstic are not affected by this. +#define P_CUSTOM_GENDER_DIFF_ICONS TRUE // If TRUE, will give more Pokémon custom icons for their female differences, i.e. Hippopotas and Hippowdon +#define P_ARCEUS_UNIQUE_FORM_ICONS GEN_LATEST // Since Gen 9, Arceus additionally changes its icon to reflect its current form. #define P_FOOTPRINTS TRUE // If TRUE, Pokémon will have footprints (as was the case up to Gen 5 and in BDSP). Disabling this saves some ROM space. #define P_TWO_FRAME_FRONT_SPRITES TRUE // In Pokémon Emerald, Pokémon front sprites always consist of two frames. This config can revert it to only use the first frame, as is the case in the other Gen 3 games. #define P_GBA_STYLE_SPECIES_GFX FALSE // By default, Pokémon sprites use Gen 4/5's style. This config can revert them back to GBA-style. NOTE: B_ENEMY_MON_SHADOW_STYLE is disabled when using these sprites for now. diff --git a/include/pokemon.h b/include/pokemon.h index bb51fcce1c..700fad7a1b 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -351,118 +351,130 @@ struct Evolution struct SpeciesInfo /*0xC4*/ { - /* 0x00 */ u8 baseHP; - /* 0x01 */ u8 baseAttack; - /* 0x02 */ u8 baseDefense; - /* 0x03 */ u8 baseSpeed; - /* 0x04 */ u8 baseSpAttack; - /* 0x05 */ u8 baseSpDefense; - /* 0x06 */ u8 types[2]; - /* 0x08 */ u8 catchRate; - /* 0x09 */ u8 forceTeraType; - /* 0x0A */ u16 expYield; // expYield was changed from u8 to u16 for the new Exp System. - /* 0x0C */ u16 evYield_HP:2; - u16 evYield_Attack:2; - u16 evYield_Defense:2; - u16 evYield_Speed:2; - /* 0x0D */ u16 evYield_SpAttack:2; - u16 evYield_SpDefense:2; - u16 padding2:4; - /* 0x0E */ u16 itemCommon; - /* 0x10 */ u16 itemRare; - /* 0x12 */ u8 genderRatio; - /* 0x13 */ u8 eggCycles; - /* 0x14 */ u8 friendship; - /* 0x15 */ u8 growthRate; - /* 0x16 */ u8 eggGroups[2]; - /* 0x18 */ u16 abilities[NUM_ABILITY_SLOTS]; // 3 abilities, no longer u8 because we have over 255 abilities now. - /* 0x1E */ u8 safariZoneFleeRate; + u8 baseHP; + u8 baseAttack; + u8 baseDefense; + u8 baseSpeed; + u8 baseSpAttack; + u8 baseSpDefense; + u8 types[2]; + u8 catchRate; + u8 forceTeraType; + u16 expYield; // expYield was changed from u8 to u16 for the new Exp System. + u16 evYield_HP:2; + u16 evYield_Attack:2; + u16 evYield_Defense:2; + u16 evYield_Speed:2; + u16 evYield_SpAttack:2; + u16 evYield_SpDefense:2; + u16 padding2:4; + u16 itemCommon; + u16 itemRare; + u8 genderRatio; + u8 eggCycles; + u8 friendship; + u8 growthRate; + u8 eggGroups[2]; + u16 abilities[NUM_ABILITY_SLOTS]; // 3 abilities, no longer u8 because we have over 255 abilities now. + u8 safariZoneFleeRate; - // Pokédex data - /* 0x1F */ u8 categoryName[13]; - /* 0x1F */ u8 speciesName[POKEMON_NAME_LENGTH + 1]; - /* 0x2C */ u16 cryId; - /* 0x2E */ u16 natDexNum; - /* 0x30 */ u16 height; //in decimeters - /* 0x32 */ u16 weight; //in hectograms - /* 0x34 */ u16 pokemonScale; - /* 0x36 */ u16 pokemonOffset; - /* 0x38 */ u16 trainerScale; - /* 0x3A */ u16 trainerOffset; - /* 0x3C */ const u8 *description; - /* 0x40 */ u8 bodyColor:7; - // Graphical Data - u8 noFlip:1; - /* 0x41 */ u8 frontAnimDelay; - /* 0x42 */ u8 frontAnimId; - /* 0x43 */ u8 backAnimId; - /* 0x44 */ const union AnimCmd *const *frontAnimFrames; - /* 0x48 */ const u32 *frontPic; - /* 0x4C */ const u32 *frontPicFemale; - /* 0x50 */ const u32 *backPic; - /* 0x54 */ const u32 *backPicFemale; - /* 0x58 */ const u32 *palette; - /* 0x5C */ const u32 *paletteFemale; - /* 0x60 */ const u32 *shinyPalette; - /* 0x64 */ const u32 *shinyPaletteFemale; - /* 0x68 */ const u8 *iconSprite; - /* 0x6C */ const u8 *iconSpriteFemale; + // Pokédex data + u8 categoryName[13]; + u8 speciesName[POKEMON_NAME_LENGTH + 1]; + u16 cryId; + u16 natDexNum; + u16 height; //in decimeters + u16 weight; //in hectograms + u16 pokemonScale; + u16 pokemonOffset; + u16 trainerScale; + u16 trainerOffset; + const u8 *description; + u8 bodyColor:7; + // Graphical Data + u8 noFlip:1; + u8 frontAnimDelay; + u8 frontAnimId; + u8 backAnimId; + const union AnimCmd *const *frontAnimFrames; + const u32 *frontPic; + const u32 *backPic; + const u32 *palette; + const u32 *shinyPalette; + const u8 *iconSprite; +#if P_GENDER_DIFFERENCES + const u32 *frontPicFemale; + const u32 *backPicFemale; + const u32 *paletteFemale; + const u32 *shinyPaletteFemale; + const u8 *iconSpriteFemale; +#endif //P_GENDER_DIFFERENCES #if P_FOOTPRINTS - /* 0x70 */ const u8 *footprint; + const u8 *footprint; #endif - // All Pokémon pics are 64x64, but this data table defines where in this 64x64 frame the sprite's non-transparent pixels actually are. - /* 0x74 */ u8 frontPicSize; // The dimensions of this drawn pixel area. - /* 0x74 */ u8 frontPicSizeFemale; // The dimensions of this drawn pixel area. - /* 0x75 */ u8 frontPicYOffset; // The number of pixels between the drawn pixel area and the bottom edge. - /* 0x76 */ u8 backPicSize; // The dimensions of this drawn pixel area. - /* 0x76 */ u8 backPicSizeFemale; // The dimensions of this drawn pixel area. - /* 0x77 */ u8 backPicYOffset; // The number of pixels between the drawn pixel area and the bottom edge. - /* 0x78 */ u8 iconPalIndex:3; - u8 iconPalIndexFemale:3; - u8 padding3:2; - /* 0x79 */ u8 enemyMonElevation; // This determines how much higher above the usual position the enemy Pokémon is during battle. Species that float or fly have nonzero values. - // Flags - /* 0x7A */ u32 isLegendary:1; - u32 isMythical:1; - u32 isUltraBeast:1; - u32 isParadox:1; - u32 isTotem:1; - u32 isMegaEvolution:1; - u32 isPrimalReversion:1; - u32 isUltraBurst:1; - u32 isGigantamax:1; - u32 isTeraForm:1; - u32 isAlolanForm:1; - u32 isGalarianForm:1; - u32 isHisuianForm:1; - u32 isPaldeanForm:1; - u32 cannotBeTraded:1; - u32 perfectIVCount:3; // This species will always generate with the specified amount of perfect IVs. - u32 dexForceRequired:1; // This species will be taken into account for Pokédex ratings even if they have the "isMythical" flag set. - u32 tmIlliterate:1; // This species will be unable to learn the universal moves. - u32 isFrontierBanned:1; // This species is not allowed to participate in Battle Frontier facilities. - u32 padding4:11; - // Shadow settings - s8 enemyShadowXOffset; // This determines the X-offset for an enemy Pokémon's shadow during battle; negative values point left, positive values point right. - s8 enemyShadowYOffset; // This determines the Y-offset for an enemy Pokémon's shadow during battle; negative values point up, positive values point down. - u16 enemyShadowSize:3; // This determines the size of the shadow sprite used for an enemy Pokémon's front sprite during battle. - u16 suppressEnemyShadow:1; // If set to true, then a shadow will not be drawn beneath an enemy Pokémon's front sprite during battle. - u16 padding5:12; - // Move Data - /* 0x80 */ const struct LevelUpMove *levelUpLearnset; - /* 0x84 */ const u16 *teachableLearnset; - /* 0x88 */ const u16 *eggMoveLearnset; - /* 0x8C */ const struct Evolution *evolutions; - /* 0x90 */ const u16 *formSpeciesIdTable; - /* 0x94 */ const struct FormChange *formChangeTable; + // All Pokémon pics are 64x64, but this data table defines where in this 64x64 frame the sprite's non-transparent pixels actually are. + u8 frontPicSize; // The dimensions of this drawn pixel area. + u8 frontPicYOffset; // The number of pixels between the drawn pixel area and the bottom edge. + u8 backPicSize; // The dimensions of this drawn pixel area. + u8 backPicYOffset; // The number of pixels between the drawn pixel area and the bottom edge. +#if P_GENDER_DIFFERENCES + u8 frontPicSizeFemale; // The dimensions of this drawn pixel area. + u8 backPicSizeFemale; // The dimensions of this drawn pixel area. +#endif //P_GENDER_DIFFERENCES + u8 iconPalIndex:3; +#if P_GENDER_DIFFERENCES + u8 iconPalIndexFemale:3; +#else + u8 paddingF:3; +#endif //P_GENDER_DIFFERENCES + u8 padding3:2; + u8 enemyMonElevation; // This determines how much higher above the usual position the enemy Pokémon is during battle. Species that float or fly have nonzero values. + // Flags + u32 isLegendary:1; + u32 isMythical:1; + u32 isUltraBeast:1; + u32 isParadox:1; + u32 isTotem:1; + u32 isMegaEvolution:1; + u32 isPrimalReversion:1; + u32 isUltraBurst:1; + u32 isGigantamax:1; + u32 isTeraForm:1; + u32 isAlolanForm:1; + u32 isGalarianForm:1; + u32 isHisuianForm:1; + u32 isPaldeanForm:1; + u32 cannotBeTraded:1; + u32 perfectIVCount:3; // This species will always generate with the specified amount of perfect IVs. + u32 dexForceRequired:1; // This species will be taken into account for Pokédex ratings even if they have the "isMythical" flag set. + u32 tmIlliterate:1; // This species will be unable to learn the universal moves. + u32 isFrontierBanned:1; // This species is not allowed to participate in Battle Frontier facilities. + u32 padding4:11; + // Shadow settings + s8 enemyShadowXOffset; // This determines the X-offset for an enemy Pokémon's shadow during battle; negative values point left, positive values point right. + s8 enemyShadowYOffset; // This determines the Y-offset for an enemy Pokémon's shadow during battle; negative values point up, positive values point down. + u16 enemyShadowSize:3; // This determines the size of the shadow sprite used for an enemy Pokémon's front sprite during battle. + u16 suppressEnemyShadow:1; // If set to true, then a shadow will not be drawn beneath an enemy Pokémon's front sprite during battle. + u16 padding5:12; + // Move Data + const struct LevelUpMove *levelUpLearnset; + const u16 *teachableLearnset; + const u16 *eggMoveLearnset; + const struct Evolution *evolutions; + const u16 *formSpeciesIdTable; + const struct FormChange *formChangeTable; #if OW_POKEMON_OBJECT_EVENTS - /* 0x98 */ struct ObjectEventGraphicsInfo overworldData; - struct ObjectEventGraphicsInfo overworldDataFemale; + struct ObjectEventGraphicsInfo overworldData; +#if P_GENDER_DIFFERENCES + struct ObjectEventGraphicsInfo overworldDataFemale; +#endif //P_GENDER_DIFFERENCES #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - /* 0xBC */ const void* overworldPalette; - const void* overworldPaletteFemale; - /* 0xC0 */ const void* overworldShinyPalette; - const void* overworldShinyPaletteFemale; + const void* overworldPalette; + const void* overworldShinyPalette; +#if P_GENDER_DIFFERENCES + const void* overworldPaletteFemale; + const void* overworldShinyPaletteFemale; +#endif //P_GENDER_DIFFERENCES #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS }; diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index dec12e0dc6..928f050822 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -2134,10 +2134,14 @@ s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr) species = SanitizeSpeciesId(species); if (species == SPECIES_UNOWN) species = GetUnownSpeciesId(personality); + + #if P_GENDER_DIFFERENCES if (gSpeciesInfo[species].backPicFemale != NULL && IsPersonalityFemale(species, personality)) size = gSpeciesInfo[species].backPicSizeFemale; else + #endif size = gSpeciesInfo[species].backPicSize; + y_offset = gSpeciesInfo[species].backPicYOffset; } else @@ -2157,10 +2161,14 @@ s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr) species = SanitizeSpeciesId(species); if (species == SPECIES_UNOWN) species = GetUnownSpeciesId(personality); + + #if P_GENDER_DIFFERENCES if (gSpeciesInfo[species].frontPicFemale != NULL && IsPersonalityFemale(species, personality)) size = gSpeciesInfo[species].frontPicSizeFemale; else + #endif size = gSpeciesInfo[species].frontPicSize; + y_offset = gSpeciesInfo[species].frontPicYOffset; } } diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 1bee8c537f..39b11560d4 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -100,11 +100,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_VenusaurF[] = INCBIN_U32("graphics/pokemon/venusaur/anim_frontf.4bpp.lz"); const u32 gMonBackPic_VenusaurF[] = INCBIN_U32("graphics/pokemon/venusaur/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_VenusaurF[] = INCBIN_COMP("graphics/pokemon/venusaur/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/front.4bpp.lz"); @@ -454,11 +456,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_ButterfreeF[] = INCBIN_U32("graphics/pokemon/butterfree/anim_frontf.4bpp.lz"); const u32 gMonBackPic_ButterfreeF[] = INCBIN_U32("graphics/pokemon/butterfree/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_ButterfreeF[] = INCBIN_COMP("graphics/pokemon/butterfree/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_GIGANTAMAX_FORMS const u32 gMonFrontPic_ButterfreeGmax[] = INCBIN_U32("graphics/pokemon/butterfree/gmax/front.4bpp.lz"); @@ -700,11 +704,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_RattataF[] = INCBIN_U32("graphics/pokemon/rattata/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RattataF[] = INCBIN_U32("graphics/pokemon/rattata/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_RattataF[] = INCBIN_COMP("graphics/pokemon/rattata/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Raticate[] = INCBIN_U32("graphics/pokemon/raticate/anim_front.4bpp.lz"); @@ -733,11 +739,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_RaticateF[] = INCBIN_U32("graphics/pokemon/raticate/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RaticateF[] = INCBIN_U32("graphics/pokemon/raticate/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_RaticateF[] = INCBIN_COMP("graphics/pokemon/raticate/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_ALOLAN_FORMS const u32 gMonFrontPic_RattataAlola[] = INCBIN_U32("graphics/pokemon/rattata/alola/front.4bpp.lz"); @@ -950,6 +958,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_PikachuF[] = INCBIN_U32("graphics/pokemon/pikachu/anim_frontf.4bpp.lz"); const u32 gMonBackPic_PikachuF[] = INCBIN_U32("graphics/pokemon/pikachu/backf.4bpp.lz"); #if P_CUSTOM_GENDER_DIFF_ICONS @@ -958,6 +967,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_PikachuF[] = INCBIN_COMP("graphics/pokemon/pikachu/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_COSPLAY_PIKACHU_FORMS const u32 gMonFrontPic_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/front.4bpp.lz"); @@ -1083,9 +1093,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //P_GIGANTAMAX_FORMS const u8 gMonIcon_PikachuStarter[] = INCBIN_U8("graphics/pokemon/pikachu/starter/icon.4bpp"); - #if P_CUSTOM_GENDER_DIFF_ICONS - const u8 gMonIcon_PikachuStarterF[] = INCBIN_U8("graphics/pokemon/pikachu/starter/iconf.4bpp"); - #endif +#if P_GENDER_DIFFERENCES && P_CUSTOM_GENDER_DIFF_ICONS + const u8 gMonIcon_PikachuStarterF[] = INCBIN_U8("graphics/pokemon/pikachu/starter/iconf.4bpp"); +#endif //P_GENDER_DIFFERENCES && P_CUSTOM_GENDER_DIFF_ICONS #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Raichu[] = INCBIN_U32("graphics/pokemon/raichu/anim_front.4bpp.lz"); @@ -1114,10 +1124,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_RaichuF[] = INCBIN_U32("graphics/pokemon/raichu/anim_frontf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_RaichuF[] = INCBIN_COMP("graphics/pokemon/raichu/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_ALOLAN_FORMS const u32 gMonFrontPic_RaichuAlola[] = INCBIN_U32("graphics/pokemon/raichu/alola/front.4bpp.lz"); @@ -1665,11 +1677,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_ZubatF[] = INCBIN_U32("graphics/pokemon/zubat/anim_frontf.4bpp.lz"); const u32 gMonBackPic_ZubatF[] = INCBIN_U32("graphics/pokemon/zubat/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_ZubatF[] = INCBIN_COMP("graphics/pokemon/zubat/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Golbat[] = INCBIN_U32("graphics/pokemon/golbat/anim_front.4bpp.lz"); @@ -1698,11 +1712,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_GolbatF[] = INCBIN_U32("graphics/pokemon/golbat/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GolbatF[] = INCBIN_U32("graphics/pokemon/golbat/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_GolbatF[] = INCBIN_COMP("graphics/pokemon/golbat/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_GEN_2_CROSS_EVOS #if !P_GBA_STYLE_SPECIES_GFX @@ -1789,11 +1805,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_GloomF[] = INCBIN_U32("graphics/pokemon/gloom/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GloomF[] = INCBIN_U32("graphics/pokemon/gloom/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_GloomF[] = INCBIN_COMP("graphics/pokemon/gloom/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Vileplume[] = INCBIN_U32("graphics/pokemon/vileplume/anim_front.4bpp.lz"); @@ -1822,11 +1840,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_VileplumeF[] = INCBIN_U32("graphics/pokemon/vileplume/anim_frontf.4bpp.lz"); const u32 gMonBackPic_VileplumeF[] = INCBIN_U32("graphics/pokemon/vileplume/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_VileplumeF[] = INCBIN_COMP("graphics/pokemon/vileplume/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_GEN_2_CROSS_EVOS #if !P_GBA_STYLE_SPECIES_GFX @@ -2508,11 +2528,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_PolitoedF[] = INCBIN_U32("graphics/pokemon/politoed/anim_frontf.4bpp.lz"); const u32 gMonBackPic_PolitoedF[] = INCBIN_U32("graphics/pokemon/politoed/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_PolitoedF[] = INCBIN_COMP("graphics/pokemon/politoed/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_GEN_2_CROSS_EVOS #endif //P_FAMILY_POLIWAG @@ -2571,11 +2593,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_KadabraF[] = INCBIN_U32("graphics/pokemon/kadabra/anim_frontf.4bpp.lz"); const u32 gMonBackPic_KadabraF[] = INCBIN_U32("graphics/pokemon/kadabra/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_KadabraF[] = INCBIN_COMP("graphics/pokemon/kadabra/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Alakazam[] = INCBIN_U32("graphics/pokemon/alakazam/anim_front.4bpp.lz"); @@ -2604,11 +2628,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_AlakazamF[] = INCBIN_U32("graphics/pokemon/alakazam/anim_frontf.4bpp.lz"); const u32 gMonBackPic_AlakazamF[] = INCBIN_U32("graphics/pokemon/alakazam/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_AlakazamF[] = INCBIN_COMP("graphics/pokemon/alakazam/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/front.4bpp.lz"); @@ -3380,11 +3406,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_DoduoF[] = INCBIN_U32("graphics/pokemon/doduo/anim_frontf.4bpp.lz"); const u32 gMonBackPic_DoduoF[] = INCBIN_U32("graphics/pokemon/doduo/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_DoduoF[] = INCBIN_COMP("graphics/pokemon/doduo/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Dodrio[] = INCBIN_U32("graphics/pokemon/dodrio/anim_front.4bpp.lz"); @@ -3413,11 +3441,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_DodrioF[] = INCBIN_U32("graphics/pokemon/dodrio/anim_frontf.4bpp.lz"); const u32 gMonBackPic_DodrioF[] = INCBIN_U32("graphics/pokemon/dodrio/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_DodrioF[] = INCBIN_COMP("graphics/pokemon/dodrio/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_DODUO #if P_FAMILY_SEEL @@ -3785,11 +3815,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_SteelixF[] = INCBIN_U32("graphics/pokemon/steelix/anim_frontf.4bpp.lz"); const u32 gMonBackPic_SteelixF[] = INCBIN_U32("graphics/pokemon/steelix/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_SteelixF[] = INCBIN_COMP("graphics/pokemon/steelix/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/front.4bpp.lz"); @@ -3863,11 +3895,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_HypnoF[] = INCBIN_U32("graphics/pokemon/hypno/anim_frontf.4bpp.lz"); const u32 gMonBackPic_HypnoF[] = INCBIN_U32("graphics/pokemon/hypno/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_HypnoF[] = INCBIN_COMP("graphics/pokemon/hypno/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_DROWZEE #if P_FAMILY_KRABBY @@ -4427,11 +4461,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_RhyhornF[] = INCBIN_U32("graphics/pokemon/rhyhorn/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RhyhornF[] = INCBIN_U32("graphics/pokemon/rhyhorn/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_RhyhornF[] = INCBIN_COMP("graphics/pokemon/rhyhorn/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Rhydon[] = INCBIN_U32("graphics/pokemon/rhydon/anim_front.4bpp.lz"); @@ -4460,11 +4496,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_RhydonF[] = INCBIN_U32("graphics/pokemon/rhydon/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RhydonF[] = INCBIN_U32("graphics/pokemon/rhydon/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_RhydonF[] = INCBIN_COMP("graphics/pokemon/rhydon/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_GEN_4_CROSS_EVOS const u32 gMonFrontPic_Rhyperior[] = INCBIN_U32("graphics/pokemon/rhyperior/anim_front.4bpp.lz"); @@ -4483,11 +4521,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_RhyperiorF[] = INCBIN_U32("graphics/pokemon/rhyperior/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RhyperiorF[] = INCBIN_U32("graphics/pokemon/rhyperior/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_RhyperiorF[] = INCBIN_COMP("graphics/pokemon/rhyperior/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_RHYHORN @@ -4612,10 +4652,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_TangrowthF[] = INCBIN_U32("graphics/pokemon/tangrowth/anim_frontf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_TangrowthF[] = INCBIN_COMP("graphics/pokemon/tangrowth/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_TANGELA @@ -4776,11 +4818,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_GoldeenF[] = INCBIN_U32("graphics/pokemon/goldeen/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GoldeenF[] = INCBIN_U32("graphics/pokemon/goldeen/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_GoldeenF[] = INCBIN_COMP("graphics/pokemon/goldeen/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Seaking[] = INCBIN_U32("graphics/pokemon/seaking/anim_front.4bpp.lz"); @@ -4809,11 +4853,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_SeakingF[] = INCBIN_U32("graphics/pokemon/seaking/anim_frontf.4bpp.lz"); const u32 gMonBackPic_SeakingF[] = INCBIN_U32("graphics/pokemon/seaking/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_SeakingF[] = INCBIN_COMP("graphics/pokemon/seaking/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_GOLDEEN #if P_FAMILY_STARYU @@ -4978,10 +5024,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_ScytherF[] = INCBIN_U32("graphics/pokemon/scyther/anim_frontf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_ScytherF[] = INCBIN_COMP("graphics/pokemon/scyther/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_GEN_2_CROSS_EVOS #if !P_GBA_STYLE_SPECIES_GFX @@ -5011,10 +5059,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_ScizorF[] = INCBIN_U32("graphics/pokemon/scizor/anim_frontf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_ScizorF[] = INCBIN_COMP("graphics/pokemon/scizor/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/front.4bpp.lz"); @@ -5396,11 +5446,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_MagikarpF[] = INCBIN_U32("graphics/pokemon/magikarp/anim_frontf.4bpp.lz"); const u32 gMonBackPic_MagikarpF[] = INCBIN_U32("graphics/pokemon/magikarp/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_MagikarpF[] = INCBIN_COMP("graphics/pokemon/magikarp/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Gyarados[] = INCBIN_U32("graphics/pokemon/gyarados/anim_front.4bpp.lz"); @@ -5429,11 +5481,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_GyaradosF[] = INCBIN_U32("graphics/pokemon/gyarados/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GyaradosF[] = INCBIN_U32("graphics/pokemon/gyarados/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_GyaradosF[] = INCBIN_COMP("graphics/pokemon/gyarados/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/front.4bpp.lz"); @@ -5552,11 +5606,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_EeveeF[] = INCBIN_U32("graphics/pokemon/eevee/anim_frontf.4bpp.lz"); const u32 gMonBackPic_EeveeF[] = INCBIN_U32("graphics/pokemon/eevee/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_EeveeF[] = INCBIN_COMP("graphics/pokemon/eevee/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_GIGANTAMAX_FORMS const u32 gMonFrontPic_EeveeGmax[] = INCBIN_U32("graphics/pokemon/eevee/gmax/front.4bpp.lz"); @@ -5574,9 +5630,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //P_GIGANTAMAX_FORMS const u8 gMonIcon_EeveePartner[] = INCBIN_U8("graphics/pokemon/eevee/partner/icon.4bpp"); - #if P_CUSTOM_GENDER_DIFF_ICONS - const u8 gMonIcon_EeveePartnerF[] = INCBIN_U8("graphics/pokemon/eevee/partner/iconf.4bpp"); - #endif +#if P_GENDER_DIFFERENCES && P_CUSTOM_GENDER_DIFF_ICONS + const u8 gMonIcon_EeveePartnerF[] = INCBIN_U8("graphics/pokemon/eevee/partner/iconf.4bpp"); +#endif //P_GENDER_DIFFERENCES && P_CUSTOM_GENDER_DIFF_ICONS #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Vaporeon[] = INCBIN_U32("graphics/pokemon/vaporeon/anim_front.4bpp.lz"); @@ -6445,11 +6501,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_MeganiumF[] = INCBIN_U32("graphics/pokemon/meganium/anim_frontf.4bpp.lz"); const u32 gMonBackPic_MeganiumF[] = INCBIN_U32("graphics/pokemon/meganium/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_MeganiumF[] = INCBIN_COMP("graphics/pokemon/meganium/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_CHIKORITA #if P_FAMILY_CYNDAQUIL @@ -6773,11 +6831,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_LedybaF[] = INCBIN_U32("graphics/pokemon/ledyba/anim_frontf.4bpp.lz"); const u32 gMonBackPic_LedybaF[] = INCBIN_U32("graphics/pokemon/ledyba/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_LedybaF[] = INCBIN_COMP("graphics/pokemon/ledyba/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Ledian[] = INCBIN_U32("graphics/pokemon/ledian/anim_front.4bpp.lz"); @@ -6806,11 +6866,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_LedianF[] = INCBIN_U32("graphics/pokemon/ledian/anim_frontf.4bpp.lz"); const u32 gMonBackPic_LedianF[] = INCBIN_U32("graphics/pokemon/ledian/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_LedianF[] = INCBIN_COMP("graphics/pokemon/ledian/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_LEDYBA #if P_FAMILY_SPINARAK @@ -7054,10 +7116,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_XatuF[] = INCBIN_U32("graphics/pokemon/xatu/anim_frontf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_XatuF[] = INCBIN_COMP("graphics/pokemon/xatu/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_NATU #if P_FAMILY_MAREEP @@ -7289,11 +7353,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_SudowoodoF[] = INCBIN_U32("graphics/pokemon/sudowoodo/anim_frontf.4bpp.lz"); const u32 gMonBackPic_SudowoodoF[] = INCBIN_U32("graphics/pokemon/sudowoodo/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_SudowoodoF[] = INCBIN_COMP("graphics/pokemon/sudowoodo/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_SUDOWOODO #if P_FAMILY_HOPPIP @@ -7407,11 +7473,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_AipomF[] = INCBIN_U32("graphics/pokemon/aipom/anim_frontf.4bpp.lz"); const u32 gMonBackPic_AipomF[] = INCBIN_U32("graphics/pokemon/aipom/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_AipomF[] = INCBIN_COMP("graphics/pokemon/aipom/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_GEN_4_CROSS_EVOS const u32 gMonFrontPic_Ambipom[] = INCBIN_U32("graphics/pokemon/ambipom/anim_front.4bpp.lz"); @@ -7430,11 +7498,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_AmbipomF[] = INCBIN_U32("graphics/pokemon/ambipom/anim_frontf.4bpp.lz"); const u32 gMonBackPic_AmbipomF[] = INCBIN_U32("graphics/pokemon/ambipom/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_AmbipomF[] = INCBIN_COMP("graphics/pokemon/ambipom/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_AIPOM @@ -7569,11 +7639,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_WooperF[] = INCBIN_U32("graphics/pokemon/wooper/anim_frontf.4bpp.lz"); const u32 gMonBackPic_WooperF[] = INCBIN_U32("graphics/pokemon/wooper/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_WooperF[] = INCBIN_COMP("graphics/pokemon/wooper/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Quagsire[] = INCBIN_U32("graphics/pokemon/quagsire/anim_front.4bpp.lz"); @@ -7602,11 +7674,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_QuagsireF[] = INCBIN_U32("graphics/pokemon/quagsire/anim_frontf.4bpp.lz"); const u32 gMonBackPic_QuagsireF[] = INCBIN_U32("graphics/pokemon/quagsire/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_QuagsireF[] = INCBIN_COMP("graphics/pokemon/quagsire/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_PALDEAN_FORMS const u32 gMonFrontPic_WooperPaldea[] = INCBIN_U32("graphics/pokemon/wooper/paldea/front.4bpp.lz"); @@ -7668,11 +7742,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_MurkrowF[] = INCBIN_U32("graphics/pokemon/murkrow/anim_frontf.4bpp.lz"); const u32 gMonBackPic_MurkrowF[] = INCBIN_U32("graphics/pokemon/murkrow/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_MurkrowF[] = INCBIN_COMP("graphics/pokemon/murkrow/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_GEN_4_CROSS_EVOS const u32 gMonFrontPic_Honchkrow[] = INCBIN_U32("graphics/pokemon/honchkrow/anim_front.4bpp.lz"); @@ -7952,6 +8028,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_WobbuffetF[] = INCBIN_U32("graphics/pokemon/wobbuffet/anim_frontf.4bpp.lz"); const u32 gMonBackPic_WobbuffetF[] = INCBIN_U32("graphics/pokemon/wobbuffet/backf.4bpp.lz"); #if P_CUSTOM_GENDER_DIFF_ICONS @@ -7960,6 +8037,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_WobbuffetF[] = INCBIN_COMP("graphics/pokemon/wobbuffet/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_WOBBUFFET #if P_FAMILY_GIRAFARIG @@ -7990,11 +8068,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_GirafarigF[] = INCBIN_U32("graphics/pokemon/girafarig/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GirafarigF[] = INCBIN_U32("graphics/pokemon/girafarig/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_GirafarigF[] = INCBIN_COMP("graphics/pokemon/girafarig/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_GEN_9_CROSS_EVOS const u32 gMonFrontPic_Farigiraf[] = INCBIN_U32("graphics/pokemon/farigiraf/front.4bpp.lz"); @@ -8153,11 +8233,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_GligarF[] = INCBIN_U32("graphics/pokemon/gligar/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GligarF[] = INCBIN_U32("graphics/pokemon/gligar/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_GligarF[] = INCBIN_COMP("graphics/pokemon/gligar/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_GEN_4_CROSS_EVOS const u32 gMonFrontPic_Gliscor[] = INCBIN_U32("graphics/pokemon/gliscor/anim_front.4bpp.lz"); @@ -8351,11 +8433,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_HeracrossF[] = INCBIN_U32("graphics/pokemon/heracross/anim_frontf.4bpp.lz"); const u32 gMonBackPic_HeracrossF[] = INCBIN_U32("graphics/pokemon/heracross/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_HeracrossF[] = INCBIN_COMP("graphics/pokemon/heracross/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/front.4bpp.lz"); @@ -8401,11 +8485,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_SneaselF[] = INCBIN_U32("graphics/pokemon/sneasel/anim_frontf.4bpp.lz"); const u32 gMonBackPic_SneaselF[] = INCBIN_U32("graphics/pokemon/sneasel/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_SneaselF[] = INCBIN_COMP("graphics/pokemon/sneasel/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_GEN_4_CROSS_EVOS const u32 gMonFrontPic_Weavile[] = INCBIN_U32("graphics/pokemon/weavile/anim_front.4bpp.lz"); @@ -8424,11 +8510,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_WeavileF[] = INCBIN_U32("graphics/pokemon/weavile/anim_frontf.4bpp.lz"); const u32 gMonBackPic_WeavileF[] = INCBIN_U32("graphics/pokemon/weavile/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_WeavileF[] = INCBIN_COMP("graphics/pokemon/weavile/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_GEN_4_CROSS_EVOS #if P_HISUIAN_FORMS @@ -8445,11 +8533,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_SneaselHisuiF[] = INCBIN_U32("graphics/pokemon/sneasel/hisui/frontf.4bpp.lz"); const u32 gMonBackPic_SneaselHisuiF[] = INCBIN_U32("graphics/pokemon/sneasel/hisui/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_SneaselHisuiF[] = INCBIN_COMP("graphics/pokemon/sneasel/hisui/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/front.4bpp.lz"); const u32 gMonPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/normal.gbapal.lz"); @@ -8524,11 +8614,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_UrsaringF[] = INCBIN_U32("graphics/pokemon/ursaring/anim_frontf.4bpp.lz"); const u32 gMonBackPic_UrsaringF[] = INCBIN_U32("graphics/pokemon/ursaring/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_UrsaringF[] = INCBIN_COMP("graphics/pokemon/ursaring/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_GEN_8_CROSS_EVOS const u32 gMonFrontPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/front.4bpp.lz"); @@ -8673,11 +8765,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_PiloswineF[] = INCBIN_U32("graphics/pokemon/piloswine/anim_frontf.4bpp.lz"); const u32 gMonBackPic_PiloswineF[] = INCBIN_U32("graphics/pokemon/piloswine/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_PiloswineF[] = INCBIN_COMP("graphics/pokemon/piloswine/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_GEN_4_CROSS_EVOS const u32 gMonFrontPic_Mamoswine[] = INCBIN_U32("graphics/pokemon/mamoswine/anim_front.4bpp.lz"); @@ -8696,10 +8790,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_MamoswineF[] = INCBIN_U32("graphics/pokemon/mamoswine/anim_frontf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_MamoswineF[] = INCBIN_COMP("graphics/pokemon/mamoswine/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_SWINUB @@ -8818,11 +8914,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_OctilleryF[] = INCBIN_U32("graphics/pokemon/octillery/anim_frontf.4bpp.lz"); const u32 gMonBackPic_OctilleryF[] = INCBIN_U32("graphics/pokemon/octillery/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_OctilleryF[] = INCBIN_COMP("graphics/pokemon/octillery/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_REMORAID #if P_FAMILY_DELIBIRD @@ -8985,11 +9083,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_HoundoomF[] = INCBIN_U32("graphics/pokemon/houndoom/anim_frontf.4bpp.lz"); const u32 gMonBackPic_HoundoomF[] = INCBIN_U32("graphics/pokemon/houndoom/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_HoundoomF[] = INCBIN_COMP("graphics/pokemon/houndoom/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/front.4bpp.lz"); @@ -9062,11 +9162,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_DonphanF[] = INCBIN_U32("graphics/pokemon/donphan/anim_frontf.4bpp.lz"); const u32 gMonBackPic_DonphanF[] = INCBIN_U32("graphics/pokemon/donphan/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_DonphanF[] = INCBIN_COMP("graphics/pokemon/donphan/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_PHANPY #if P_FAMILY_STANTLER @@ -9572,10 +9674,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonBackPic_TorchicF[] = INCBIN_U32("graphics/pokemon/torchic/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_TorchicF[] = INCBIN_COMP("graphics/pokemon/torchic/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Combusken[] = INCBIN_U32("graphics/pokemon/combusken/anim_front.4bpp.lz"); @@ -9604,11 +9708,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_CombuskenF[] = INCBIN_U32("graphics/pokemon/combusken/anim_frontf.4bpp.lz"); const u32 gMonBackPic_CombuskenF[] = INCBIN_U32("graphics/pokemon/combusken/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_CombuskenF[] = INCBIN_COMP("graphics/pokemon/combusken/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Blaziken[] = INCBIN_U32("graphics/pokemon/blaziken/anim_front.4bpp.lz"); @@ -9637,11 +9743,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_BlazikenF[] = INCBIN_U32("graphics/pokemon/blaziken/anim_frontf.4bpp.lz"); const u32 gMonBackPic_BlazikenF[] = INCBIN_U32("graphics/pokemon/blaziken/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_BlazikenF[] = INCBIN_COMP("graphics/pokemon/blaziken/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/front.4bpp.lz"); @@ -9995,11 +10103,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_BeautiflyF[] = INCBIN_U32("graphics/pokemon/beautifly/anim_frontf.4bpp.lz"); const u32 gMonBackPic_BeautiflyF[] = INCBIN_U32("graphics/pokemon/beautifly/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_BeautiflyF[] = INCBIN_COMP("graphics/pokemon/beautifly/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Cascoon[] = INCBIN_U32("graphics/pokemon/cascoon/anim_front.4bpp.lz"); @@ -10055,11 +10165,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_DustoxF[] = INCBIN_U32("graphics/pokemon/dustox/anim_frontf.4bpp.lz"); const u32 gMonBackPic_DustoxF[] = INCBIN_U32("graphics/pokemon/dustox/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_DustoxF[] = INCBIN_COMP("graphics/pokemon/dustox/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_WURMPLE #if P_FAMILY_LOTAD @@ -10148,11 +10260,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_LudicoloF[] = INCBIN_U32("graphics/pokemon/ludicolo/anim_frontf.4bpp.lz"); const u32 gMonBackPic_LudicoloF[] = INCBIN_U32("graphics/pokemon/ludicolo/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_LudicoloF[] = INCBIN_COMP("graphics/pokemon/ludicolo/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_LOTAD #if P_FAMILY_SEEDOT @@ -10210,11 +10324,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_NuzleafF[] = INCBIN_U32("graphics/pokemon/nuzleaf/anim_frontf.4bpp.lz"); const u32 gMonBackPic_NuzleafF[] = INCBIN_U32("graphics/pokemon/nuzleaf/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_NuzleafF[] = INCBIN_COMP("graphics/pokemon/nuzleaf/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Shiftry[] = INCBIN_U32("graphics/pokemon/shiftry/anim_front.4bpp.lz"); @@ -10243,11 +10359,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_ShiftryF[] = INCBIN_U32("graphics/pokemon/shiftry/anim_frontf.4bpp.lz"); const u32 gMonBackPic_ShiftryF[] = INCBIN_U32("graphics/pokemon/shiftry/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_ShiftryF[] = INCBIN_COMP("graphics/pokemon/shiftry/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_SEEDOT #if P_FAMILY_TAILLOW @@ -11235,11 +11353,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_MedititeF[] = INCBIN_U32("graphics/pokemon/meditite/anim_frontf.4bpp.lz"); const u32 gMonBackPic_MedititeF[] = INCBIN_U32("graphics/pokemon/meditite/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_MedititeF[] = INCBIN_COMP("graphics/pokemon/meditite/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Medicham[] = INCBIN_U32("graphics/pokemon/medicham/anim_front.4bpp.lz"); @@ -11268,11 +11388,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_MedichamF[] = INCBIN_U32("graphics/pokemon/medicham/anim_frontf.4bpp.lz"); const u32 gMonBackPic_MedichamF[] = INCBIN_U32("graphics/pokemon/medicham/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_MedichamF[] = INCBIN_COMP("graphics/pokemon/medicham/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/front.4bpp.lz"); @@ -11521,11 +11643,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_RoseliaF[] = INCBIN_U32("graphics/pokemon/roselia/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RoseliaF[] = INCBIN_U32("graphics/pokemon/roselia/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_RoseliaF[] = INCBIN_COMP("graphics/pokemon/roselia/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_GEN_4_CROSS_EVOS const u32 gMonFrontPic_Roserade[] = INCBIN_U32("graphics/pokemon/roserade/anim_front.4bpp.lz"); @@ -11544,11 +11668,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_RoseradeF[] = INCBIN_U32("graphics/pokemon/roserade/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RoseradeF[] = INCBIN_U32("graphics/pokemon/roserade/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_RoseradeF[] = INCBIN_COMP("graphics/pokemon/roserade/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_ROSELIA @@ -11580,11 +11706,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_GulpinF[] = INCBIN_U32("graphics/pokemon/gulpin/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GulpinF[] = INCBIN_U32("graphics/pokemon/gulpin/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_GulpinF[] = INCBIN_COMP("graphics/pokemon/gulpin/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Swalot[] = INCBIN_U32("graphics/pokemon/swalot/anim_front.4bpp.lz"); @@ -11613,11 +11741,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_SwalotF[] = INCBIN_U32("graphics/pokemon/swalot/anim_frontf.4bpp.lz"); const u32 gMonBackPic_SwalotF[] = INCBIN_U32("graphics/pokemon/swalot/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_SwalotF[] = INCBIN_COMP("graphics/pokemon/swalot/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_GULPIN #if P_FAMILY_CARVANHA @@ -11775,11 +11905,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_NumelF[] = INCBIN_U32("graphics/pokemon/numel/anim_frontf.4bpp.lz"); const u32 gMonBackPic_NumelF[] = INCBIN_U32("graphics/pokemon/numel/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_NumelF[] = INCBIN_COMP("graphics/pokemon/numel/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if !P_GBA_STYLE_SPECIES_GFX const u32 gMonFrontPic_Camerupt[] = INCBIN_U32("graphics/pokemon/camerupt/anim_front.4bpp.lz"); @@ -11808,11 +11940,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_CameruptF[] = INCBIN_U32("graphics/pokemon/camerupt/anim_frontf.4bpp.lz"); const u32 gMonBackPic_CameruptF[] = INCBIN_U32("graphics/pokemon/camerupt/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_CameruptF[] = INCBIN_COMP("graphics/pokemon/camerupt/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/front.4bpp.lz"); @@ -12071,10 +12205,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_CacturneF[] = INCBIN_U32("graphics/pokemon/cacturne/anim_frontf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_CacturneF[] = INCBIN_COMP("graphics/pokemon/cacturne/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_CACNEA #if P_FAMILY_SWABLU @@ -12599,11 +12735,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_MiloticF[] = INCBIN_U32("graphics/pokemon/milotic/anim_frontf.4bpp.lz"); const u32 gMonBackPic_MiloticF[] = INCBIN_U32("graphics/pokemon/milotic/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_MiloticF[] = INCBIN_COMP("graphics/pokemon/milotic/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_FEEBAS #if P_FAMILY_CASTFORM @@ -13229,11 +13367,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_RelicanthF[] = INCBIN_U32("graphics/pokemon/relicanth/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RelicanthF[] = INCBIN_U32("graphics/pokemon/relicanth/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_RelicanthF[] = INCBIN_COMP("graphics/pokemon/relicanth/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_RELICANTH #if P_FAMILY_LUVDISC @@ -14021,11 +14161,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_StarlyF[] = INCBIN_U32("graphics/pokemon/starly/anim_frontf.4bpp.lz"); const u32 gMonBackPic_StarlyF[] = INCBIN_U32("graphics/pokemon/starly/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_StarlyF[] = INCBIN_COMP("graphics/pokemon/starly/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Staravia[] = INCBIN_U32("graphics/pokemon/staravia/anim_front.4bpp.lz"); const u32 gMonPalette_Staravia[] = INCBIN_U32("graphics/pokemon/staravia/normal.gbapal.lz"); @@ -14043,11 +14185,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_StaraviaF[] = INCBIN_U32("graphics/pokemon/staravia/anim_frontf.4bpp.lz"); const u32 gMonBackPic_StaraviaF[] = INCBIN_U32("graphics/pokemon/staravia/back.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_StaraviaF[] = INCBIN_COMP("graphics/pokemon/staravia/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Staraptor[] = INCBIN_U32("graphics/pokemon/staraptor/anim_front.4bpp.lz"); const u32 gMonPalette_Staraptor[] = INCBIN_U32("graphics/pokemon/staraptor/normal.gbapal.lz"); @@ -14065,10 +14209,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_StaraptorF[] = INCBIN_U32("graphics/pokemon/staraptor/anim_frontf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_StaraptorF[] = INCBIN_COMP("graphics/pokemon/staraptor/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_STARLY #if P_FAMILY_BIDOOF @@ -14088,11 +14234,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_BidoofF[] = INCBIN_U32("graphics/pokemon/bidoof/anim_frontf.4bpp.lz"); const u32 gMonBackPic_BidoofF[] = INCBIN_U32("graphics/pokemon/bidoof/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_BidoofF[] = INCBIN_COMP("graphics/pokemon/bidoof/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Bibarel[] = INCBIN_U32("graphics/pokemon/bibarel/anim_front.4bpp.lz"); const u32 gMonPalette_Bibarel[] = INCBIN_U32("graphics/pokemon/bibarel/normal.gbapal.lz"); @@ -14110,10 +14258,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_BibarelF[] = INCBIN_U32("graphics/pokemon/bibarel/anim_frontf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_BibarelF[] = INCBIN_COMP("graphics/pokemon/bibarel/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_BIDOOF #if P_FAMILY_KRICKETOT @@ -14133,11 +14283,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_KricketotF[] = INCBIN_U32("graphics/pokemon/kricketot/anim_frontf.4bpp.lz"); const u32 gMonBackPic_KricketotF[] = INCBIN_U32("graphics/pokemon/kricketot/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_KricketotF[] = INCBIN_COMP("graphics/pokemon/kricketot/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Kricketune[] = INCBIN_U32("graphics/pokemon/kricketune/anim_front.4bpp.lz"); const u32 gMonPalette_Kricketune[] = INCBIN_U32("graphics/pokemon/kricketune/normal.gbapal.lz"); @@ -14155,11 +14307,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_KricketuneF[] = INCBIN_U32("graphics/pokemon/kricketune/anim_frontf.4bpp.lz"); const u32 gMonBackPic_KricketuneF[] = INCBIN_U32("graphics/pokemon/kricketune/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_KricketuneF[] = INCBIN_COMP("graphics/pokemon/kricketune/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_KRICKETOT #if P_FAMILY_SHINX @@ -14179,11 +14333,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_ShinxF[] = INCBIN_U32("graphics/pokemon/shinx/anim_frontf.4bpp.lz"); const u32 gMonBackPic_ShinxF[] = INCBIN_U32("graphics/pokemon/shinx/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_ShinxF[] = INCBIN_COMP("graphics/pokemon/shinx/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Luxio[] = INCBIN_U32("graphics/pokemon/luxio/anim_front.4bpp.lz"); const u32 gMonPalette_Luxio[] = INCBIN_U32("graphics/pokemon/luxio/normal.gbapal.lz"); @@ -14201,11 +14357,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_LuxioF[] = INCBIN_U32("graphics/pokemon/luxio/anim_frontf.4bpp.lz"); const u32 gMonBackPic_LuxioF[] = INCBIN_U32("graphics/pokemon/luxio/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_LuxioF[] = INCBIN_COMP("graphics/pokemon/luxio/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Luxray[] = INCBIN_U32("graphics/pokemon/luxray/anim_front.4bpp.lz"); const u32 gMonPalette_Luxray[] = INCBIN_U32("graphics/pokemon/luxray/normal.gbapal.lz"); @@ -14223,11 +14381,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_LuxrayF[] = INCBIN_U32("graphics/pokemon/luxray/anim_frontf.4bpp.lz"); const u32 gMonBackPic_LuxrayF[] = INCBIN_U32("graphics/pokemon/luxray/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_LuxrayF[] = INCBIN_COMP("graphics/pokemon/luxray/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_SHINX #if P_FAMILY_CRANIDOS @@ -14403,11 +14563,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonPalette_CombeeF[] = INCBIN_U32("graphics/pokemon/combee/normalf.gbapal.lz"); const u32 gMonShinyPalette_CombeeF[] = INCBIN_U32("graphics/pokemon/combee/shinyf.gbapal.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_CombeeF[] = INCBIN_COMP("graphics/pokemon/combee/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Vespiquen[] = INCBIN_U32("graphics/pokemon/vespiquen/anim_front.4bpp.lz"); const u32 gMonPalette_Vespiquen[] = INCBIN_U32("graphics/pokemon/vespiquen/normal.gbapal.lz"); @@ -14443,10 +14605,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_PachirisuF[] = INCBIN_U32("graphics/pokemon/pachirisu/anim_frontf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_PachirisuF[] = INCBIN_COMP("graphics/pokemon/pachirisu/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_PACHIRISU #if P_FAMILY_BUIZEL @@ -14466,10 +14630,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonBackPic_BuizelF[] = INCBIN_U32("graphics/pokemon/buizel/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_BuizelF[] = INCBIN_COMP("graphics/pokemon/buizel/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Floatzel[] = INCBIN_U32("graphics/pokemon/floatzel/anim_front.4bpp.lz"); const u32 gMonPalette_Floatzel[] = INCBIN_U32("graphics/pokemon/floatzel/normal.gbapal.lz"); @@ -14487,10 +14653,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonBackPic_FloatzelF[] = INCBIN_U32("graphics/pokemon/floatzel/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_FloatzelF[] = INCBIN_COMP("graphics/pokemon/floatzel/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_BUIZEL #if P_FAMILY_CHERUBI @@ -14828,11 +14996,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_GibleF[] = INCBIN_U32("graphics/pokemon/gible/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GibleF[] = INCBIN_U32("graphics/pokemon/gible/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_GibleF[] = INCBIN_COMP("graphics/pokemon/gible/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Gabite[] = INCBIN_U32("graphics/pokemon/gabite/anim_front.4bpp.lz"); const u32 gMonPalette_Gabite[] = INCBIN_U32("graphics/pokemon/gabite/normal.gbapal.lz"); @@ -14850,11 +15020,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_GabiteF[] = INCBIN_U32("graphics/pokemon/gabite/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GabiteF[] = INCBIN_U32("graphics/pokemon/gabite/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_GabiteF[] = INCBIN_COMP("graphics/pokemon/gabite/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Garchomp[] = INCBIN_U32("graphics/pokemon/garchomp/anim_front.4bpp.lz"); const u32 gMonPalette_Garchomp[] = INCBIN_U32("graphics/pokemon/garchomp/normal.gbapal.lz"); @@ -14872,10 +15044,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_GarchompF[] = INCBIN_U32("graphics/pokemon/garchomp/anim_frontf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_GarchompF[] = INCBIN_COMP("graphics/pokemon/garchomp/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/front.4bpp.lz"); @@ -14959,6 +15133,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonPalette_HippopotasF[] = INCBIN_U32("graphics/pokemon/hippopotas/normalf.gbapal.lz"); const u32 gMonShinyPalette_HippopotasF[] = INCBIN_U32("graphics/pokemon/hippopotas/shinyf.gbapal.lz"); #if P_CUSTOM_GENDER_DIFF_ICONS @@ -14967,6 +15142,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_HippopotasF[] = INCBIN_COMP("graphics/pokemon/hippopotas/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Hippowdon[] = INCBIN_U32("graphics/pokemon/hippowdon/anim_front.4bpp.lz"); const u32 gMonPalette_Hippowdon[] = INCBIN_U32("graphics/pokemon/hippowdon/normal.gbapal.lz"); @@ -14984,6 +15160,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonPalette_HippowdonF[] = INCBIN_U32("graphics/pokemon/hippowdon/normalf.gbapal.lz"); const u32 gMonShinyPalette_HippowdonF[] = INCBIN_U32("graphics/pokemon/hippowdon/shinyf.gbapal.lz"); #if P_CUSTOM_GENDER_DIFF_ICONS @@ -14995,6 +15172,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gShinyOverworldPalette_HippowdonF[] = INCBIN_U32("graphics/pokemon/hippowdon/overworld_shinyf.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_HIPPOPOTAS #if P_FAMILY_SKORUPI @@ -15048,11 +15226,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_CroagunkF[] = INCBIN_U32("graphics/pokemon/croagunk/anim_frontf.4bpp.lz"); const u32 gMonBackPic_CroagunkF[] = INCBIN_U32("graphics/pokemon/croagunk/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_CroagunkF[] = INCBIN_COMP("graphics/pokemon/croagunk/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Toxicroak[] = INCBIN_U32("graphics/pokemon/toxicroak/anim_front.4bpp.lz"); const u32 gMonPalette_Toxicroak[] = INCBIN_U32("graphics/pokemon/toxicroak/normal.gbapal.lz"); @@ -15070,11 +15250,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_ToxicroakF[] = INCBIN_U32("graphics/pokemon/toxicroak/anim_frontf.4bpp.lz"); const u32 gMonBackPic_ToxicroakF[] = INCBIN_U32("graphics/pokemon/toxicroak/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_ToxicroakF[] = INCBIN_COMP("graphics/pokemon/toxicroak/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_CROAGUNK #if P_FAMILY_CARNIVINE @@ -15112,11 +15294,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_FinneonF[] = INCBIN_U32("graphics/pokemon/finneon/anim_frontf.4bpp.lz"); const u32 gMonBackPic_FinneonF[] = INCBIN_U32("graphics/pokemon/finneon/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_FinneonF[] = INCBIN_COMP("graphics/pokemon/finneon/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Lumineon[] = INCBIN_U32("graphics/pokemon/lumineon/anim_front.4bpp.lz"); const u32 gMonPalette_Lumineon[] = INCBIN_U32("graphics/pokemon/lumineon/normal.gbapal.lz"); @@ -15134,11 +15318,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_LumineonF[] = INCBIN_U32("graphics/pokemon/lumineon/anim_frontf.4bpp.lz"); const u32 gMonBackPic_LumineonF[] = INCBIN_U32("graphics/pokemon/lumineon/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_LumineonF[] = INCBIN_COMP("graphics/pokemon/lumineon/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_FINNEON #if P_FAMILY_SNOVER @@ -15158,11 +15344,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_SnoverF[] = INCBIN_U32("graphics/pokemon/snover/anim_frontf.4bpp.lz"); const u32 gMonBackPic_SnoverF[] = INCBIN_U32("graphics/pokemon/snover/backf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_SnoverF[] = INCBIN_COMP("graphics/pokemon/snover/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Abomasnow[] = INCBIN_U32("graphics/pokemon/abomasnow/anim_front.4bpp.lz"); const u32 gMonPalette_Abomasnow[] = INCBIN_U32("graphics/pokemon/abomasnow/normal.gbapal.lz"); @@ -15180,10 +15368,12 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_AbomasnowF[] = INCBIN_U32("graphics/pokemon/abomasnow/anim_frontf.4bpp.lz"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_AbomasnowF[] = INCBIN_COMP("graphics/pokemon/abomasnow/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/front.4bpp.lz"); @@ -16179,6 +16369,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_UnfezantF[] = INCBIN_U32("graphics/pokemon/unfezant/anim_frontf.4bpp.lz"); const u32 gMonPalette_UnfezantF[] = INCBIN_U32("graphics/pokemon/unfezant/normalf.gbapal.lz"); const u32 gMonBackPic_UnfezantF[] = INCBIN_U32("graphics/pokemon/unfezant/backf.4bpp.lz"); @@ -16191,6 +16382,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gShinyOverworldPalette_UnfezantF[] = INCBIN_U32("graphics/pokemon/unfezant/overworld_shinyf.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_PIDOVE #if P_FAMILY_BLITZLE @@ -17659,6 +17851,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_FrillishF[] = INCBIN_U32("graphics/pokemon/frillish/anim_frontf.4bpp.lz"); const u32 gMonPalette_FrillishF[] = INCBIN_U32("graphics/pokemon/frillish/normalf.gbapal.lz"); const u32 gMonBackPic_FrillishF[] = INCBIN_U32("graphics/pokemon/frillish/backf.4bpp.lz"); @@ -17671,6 +17864,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gShinyOverworldPalette_FrillishF[] = INCBIN_U32("graphics/pokemon/frillish/overworld_shinyf.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES const u32 gMonFrontPic_Jellicent[] = INCBIN_U32("graphics/pokemon/jellicent/anim_front.4bpp.lz"); const u32 gMonPalette_Jellicent[] = INCBIN_U32("graphics/pokemon/jellicent/normal.gbapal.lz"); @@ -17688,6 +17882,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_JellicentF[] = INCBIN_U32("graphics/pokemon/jellicent/anim_frontf.4bpp.lz"); const u32 gMonPalette_JellicentF[] = INCBIN_U32("graphics/pokemon/jellicent/normalf.gbapal.lz"); const u32 gMonBackPic_JellicentF[] = INCBIN_U32("graphics/pokemon/jellicent/backf.4bpp.lz"); @@ -17700,6 +17895,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gShinyOverworldPalette_JellicentF[] = INCBIN_U32("graphics/pokemon/jellicent/overworld_shinyf.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_FRILLISH #if P_FAMILY_ALOMOMOLA @@ -19354,12 +19550,14 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS +#if P_GENDER_DIFFERENCES const u32 gMonFrontPic_PyroarF[] = INCBIN_U32("graphics/pokemon/pyroar/anim_frontf.4bpp.lz"); const u32 gMonBackPic_PyroarF[] = INCBIN_U32("graphics/pokemon/pyroar/backf.4bpp.lz"); const u8 gMonIcon_PyroarF[] = INCBIN_U8("graphics/pokemon/pyroar/iconf.4bpp"); #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_PyroarF[] = INCBIN_COMP("graphics/pokemon/pyroar/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_LITLEO #if P_FAMILY_FLABEBE diff --git a/src/data/object_events/object_event_pic_tables_followers.h b/src/data/object_events/object_event_pic_tables_followers.h index ed53b34dde..276e8fcf65 100644 --- a/src/data/object_events/object_event_pic_tables_followers.h +++ b/src/data/object_events/object_event_pic_tables_followers.h @@ -13,9 +13,11 @@ static const struct SpriteFrameImage sPicTable_Ivysaur[] = { static const struct SpriteFrameImage sPicTable_Venusaur[] = { overworld_ascending_frames(gObjectEventPic_Venusaur, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_VenusaurF[] = { overworld_ascending_frames(gObjectEventPic_VenusaurF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_VenusaurMega[] = { overworld_ascending_frames(gObjectEventPic_VenusaurMega, 4, 4), @@ -85,9 +87,11 @@ static const struct SpriteFrameImage sPicTable_Metapod[] = { static const struct SpriteFrameImage sPicTable_Butterfree[] = { overworld_ascending_frames(gObjectEventPic_Butterfree, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_ButterfreeF[] = { overworld_ascending_frames(gObjectEventPic_ButterfreeF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_GIGANTAMAX_FORMS /*static const struct SpriteFrameImage sPicTable_ButterfreeGmax[] = { overworld_ascending_frames(gObjectEventPic_ButterfreeGmax, 4, 4), @@ -133,15 +137,19 @@ static const struct SpriteFrameImage sPicTable_Pidgeot[] = { static const struct SpriteFrameImage sPicTable_Rattata[] = { overworld_ascending_frames(gObjectEventPic_Rattata, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_RattataF[] = { overworld_ascending_frames(gObjectEventPic_RattataF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Raticate[] = { overworld_ascending_frames(gObjectEventPic_Raticate, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_RaticateF[] = { overworld_ascending_frames(gObjectEventPic_RaticateF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_ALOLAN_FORMS static const struct SpriteFrameImage sPicTable_RattataAlola[] = { overworld_ascending_frames(gObjectEventPic_RattataAlola, 4, 4), @@ -182,9 +190,11 @@ static const struct SpriteFrameImage sPicTable_PichuSpikyEared[] = { static const struct SpriteFrameImage sPicTable_Pikachu[] = { overworld_ascending_frames(gObjectEventPic_Pikachu, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_PikachuF[] = { overworld_ascending_frames(gObjectEventPic_PikachuF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_COSPLAY_PIKACHU_FORMS /*static const struct SpriteFrameImage sPicTable_PikachuCosplay[] = { overworld_ascending_frames(gObjectEventPic_PikachuCosplay, 4, 4), @@ -242,9 +252,11 @@ static const struct SpriteFrameImage sPicTable_PikachuWorld[] = { static const struct SpriteFrameImage sPicTable_Raichu[] = { overworld_ascending_frames(gObjectEventPic_Raichu, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_RaichuF[] = { overworld_ascending_frames(gObjectEventPic_RaichuF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_ALOLAN_FORMS static const struct SpriteFrameImage sPicTable_RaichuAlola[] = { overworld_ascending_frames(gObjectEventPic_RaichuAlola, 4, 4), @@ -339,15 +351,19 @@ static const struct SpriteFrameImage sPicTable_Wigglytuff[] = { static const struct SpriteFrameImage sPicTable_Zubat[] = { overworld_ascending_frames(gObjectEventPic_Zubat, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_ZubatF[] = { overworld_ascending_frames(gObjectEventPic_ZubatF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Golbat[] = { overworld_ascending_frames(gObjectEventPic_Golbat, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_GolbatF[] = { overworld_ascending_frames(gObjectEventPic_GolbatF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_GEN_2_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Crobat[] = { overworld_ascending_frames(gObjectEventPic_Crobat, 4, 4), @@ -362,15 +378,19 @@ static const struct SpriteFrameImage sPicTable_Oddish[] = { static const struct SpriteFrameImage sPicTable_Gloom[] = { overworld_ascending_frames(gObjectEventPic_Gloom, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_GloomF[] = { overworld_ascending_frames(gObjectEventPic_GloomF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Vileplume[] = { overworld_ascending_frames(gObjectEventPic_Vileplume, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_VileplumeF[] = { overworld_ascending_frames(gObjectEventPic_VileplumeF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_GEN_2_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Bellossom[] = { overworld_ascending_frames(gObjectEventPic_Bellossom, 4, 4), @@ -499,9 +519,11 @@ static const struct SpriteFrameImage sPicTable_Poliwrath[] = { static const struct SpriteFrameImage sPicTable_Politoed[] = { overworld_ascending_frames(gObjectEventPic_Politoed, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_PolitoedF[] = { overworld_ascending_frames(gObjectEventPic_PolitoedF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_GEN_2_CROSS_EVOS #endif //P_FAMILY_POLIWAG @@ -512,15 +534,19 @@ static const struct SpriteFrameImage sPicTable_Abra[] = { static const struct SpriteFrameImage sPicTable_Kadabra[] = { overworld_ascending_frames(gObjectEventPic_Kadabra, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_KadabraF[] = { overworld_ascending_frames(gObjectEventPic_KadabraF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Alakazam[] = { overworld_ascending_frames(gObjectEventPic_Alakazam, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_AlakazamF[] = { overworld_ascending_frames(gObjectEventPic_AlakazamF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_AlakazamMega[] = { overworld_ascending_frames(gObjectEventPic_AlakazamMega, 4, 4), @@ -672,15 +698,19 @@ static const struct SpriteFrameImage sPicTable_Sirfetchd[] = { static const struct SpriteFrameImage sPicTable_Doduo[] = { overworld_ascending_frames(gObjectEventPic_Doduo, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_DoduoF[] = { overworld_ascending_frames(gObjectEventPic_DoduoF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Dodrio[] = { overworld_ascending_frames(gObjectEventPic_Dodrio, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_DodrioF[] = { overworld_ascending_frames(gObjectEventPic_DodrioF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_DODUO #if P_FAMILY_SEEL @@ -748,9 +778,11 @@ static const struct SpriteFrameImage sPicTable_Onix[] = { static const struct SpriteFrameImage sPicTable_Steelix[] = { overworld_ascending_frames(gObjectEventPic_Steelix, 8, 8), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_SteelixF[] = { overworld_ascending_frames(gObjectEventPic_SteelixF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_SteelixMega[] = { overworld_ascending_frames(gObjectEventPic_SteelixMega, 4, 4), @@ -766,9 +798,11 @@ static const struct SpriteFrameImage sPicTable_Drowzee[] = { static const struct SpriteFrameImage sPicTable_Hypno[] = { overworld_ascending_frames(gObjectEventPic_Hypno, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_HypnoF[] = { overworld_ascending_frames(gObjectEventPic_HypnoF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_DROWZEE #if P_FAMILY_KRABBY @@ -878,22 +912,28 @@ static const struct SpriteFrameImage sPicTable_WeezingGalar[] = { static const struct SpriteFrameImage sPicTable_Rhyhorn[] = { overworld_ascending_frames(gObjectEventPic_Rhyhorn, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_RhyhornF[] = { overworld_ascending_frames(gObjectEventPic_RhyhornF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Rhydon[] = { overworld_ascending_frames(gObjectEventPic_Rhydon, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_RhydonF[] = { overworld_ascending_frames(gObjectEventPic_RhydonF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Rhyperior[] = { overworld_ascending_frames(gObjectEventPic_Rhyperior, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_RhyperiorF[] = { overworld_ascending_frames(gObjectEventPic_RhyperiorF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_RHYHORN @@ -921,9 +961,11 @@ static const struct SpriteFrameImage sPicTable_Tangela[] = { static const struct SpriteFrameImage sPicTable_Tangrowth[] = { overworld_ascending_frames(gObjectEventPic_Tangrowth, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_TangrowthF[] = { overworld_ascending_frames(gObjectEventPic_TangrowthF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_TANGELA @@ -956,15 +998,19 @@ static const struct SpriteFrameImage sPicTable_Kingdra[] = { static const struct SpriteFrameImage sPicTable_Goldeen[] = { overworld_ascending_frames(gObjectEventPic_Goldeen, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_GoldeenF[] = { overworld_ascending_frames(gObjectEventPic_GoldeenF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Seaking[] = { overworld_ascending_frames(gObjectEventPic_Seaking, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_SeakingF[] = { overworld_ascending_frames(gObjectEventPic_SeakingF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_GOLDEEN #if P_FAMILY_STARYU @@ -999,16 +1045,20 @@ static const struct SpriteFrameImage sPicTable_MrRime[] = { static const struct SpriteFrameImage sPicTable_Scyther[] = { overworld_ascending_frames(gObjectEventPic_Scyther, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_ScytherF[] = { overworld_ascending_frames(gObjectEventPic_ScytherF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_GEN_2_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Scizor[] = { overworld_ascending_frames(gObjectEventPic_Scizor, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_ScizorF[] = { overworld_ascending_frames(gObjectEventPic_ScizorF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_ScizorMega[] = { overworld_ascending_frames(gObjectEventPic_ScizorMega, 4, 4), @@ -1098,15 +1148,19 @@ static const struct SpriteFrameImage sPicTable_TaurosPaldeaAqua[] = { static const struct SpriteFrameImage sPicTable_Magikarp[] = { overworld_ascending_frames(gObjectEventPic_Magikarp, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_MagikarpF[] = { overworld_ascending_frames(gObjectEventPic_MagikarpF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Gyarados[] = { overworld_ascending_frames(gObjectEventPic_Gyarados, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_GyaradosF[] = { overworld_ascending_frames(gObjectEventPic_GyaradosF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_GyaradosMega[] = { overworld_ascending_frames(gObjectEventPic_GyaradosMega, 4, 4), @@ -1135,9 +1189,11 @@ static const struct SpriteFrameImage sPicTable_Ditto[] = { static const struct SpriteFrameImage sPicTable_Eevee[] = { overworld_ascending_frames(gObjectEventPic_Eevee, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_EeveeF[] = { overworld_ascending_frames(gObjectEventPic_EeveeF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_GIGANTAMAX_FORMS /*static const struct SpriteFrameImage sPicTable_EeveeGmax[] = { overworld_ascending_frames(gObjectEventPic_EeveeGmax, 4, 4), @@ -1314,9 +1370,11 @@ static const struct SpriteFrameImage sPicTable_Bayleef[] = { static const struct SpriteFrameImage sPicTable_Meganium[] = { overworld_ascending_frames(gObjectEventPic_Meganium, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_MeganiumF[] = { overworld_ascending_frames(gObjectEventPic_MeganiumF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_CHIKORITA #if P_FAMILY_CYNDAQUIL @@ -1370,15 +1428,19 @@ static const struct SpriteFrameImage sPicTable_Noctowl[] = { static const struct SpriteFrameImage sPicTable_Ledyba[] = { overworld_ascending_frames(gObjectEventPic_Ledyba, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_LedybaF[] = { overworld_ascending_frames(gObjectEventPic_LedybaF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Ledian[] = { overworld_ascending_frames(gObjectEventPic_Ledian, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_LedianF[] = { overworld_ascending_frames(gObjectEventPic_LedianF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_LEDYBA #if P_FAMILY_SPINARAK @@ -1420,9 +1482,11 @@ static const struct SpriteFrameImage sPicTable_Natu[] = { static const struct SpriteFrameImage sPicTable_Xatu[] = { overworld_ascending_frames(gObjectEventPic_Xatu, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_XatuF[] = { overworld_ascending_frames(gObjectEventPic_XatuF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_NATU #if P_FAMILY_MAREEP @@ -1465,9 +1529,11 @@ static const struct SpriteFrameImage sPicTable_Bonsly[] = { static const struct SpriteFrameImage sPicTable_Sudowoodo[] = { overworld_ascending_frames(gObjectEventPic_Sudowoodo, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_SudowoodoF[] = { overworld_ascending_frames(gObjectEventPic_SudowoodoF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_SUDOWOODO #if P_FAMILY_HOPPIP @@ -1486,16 +1552,20 @@ static const struct SpriteFrameImage sPicTable_Jumpluff[] = { static const struct SpriteFrameImage sPicTable_Aipom[] = { overworld_ascending_frames(gObjectEventPic_Aipom, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_AipomF[] = { overworld_ascending_frames(gObjectEventPic_AipomF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Ambipom[] = { overworld_ascending_frames(gObjectEventPic_Ambipom, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_AmbipomF[] = { overworld_ascending_frames(gObjectEventPic_AmbipomF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_AIPOM @@ -1523,15 +1593,19 @@ static const struct SpriteFrameImage sPicTable_Yanmega[] = { static const struct SpriteFrameImage sPicTable_Wooper[] = { overworld_ascending_frames(gObjectEventPic_Wooper, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_WooperF[] = { overworld_ascending_frames(gObjectEventPic_WooperF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Quagsire[] = { overworld_ascending_frames(gObjectEventPic_Quagsire, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_QuagsireF[] = { overworld_ascending_frames(gObjectEventPic_QuagsireF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_PALDEAN_FORMS static const struct SpriteFrameImage sPicTable_WooperPaldea[] = { overworld_ascending_frames(gObjectEventPic_WooperPaldea, 4, 4), @@ -1546,9 +1620,11 @@ static const struct SpriteFrameImage sPicTable_Clodsire[] = { static const struct SpriteFrameImage sPicTable_Murkrow[] = { overworld_ascending_frames(gObjectEventPic_Murkrow, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_MurkrowF[] = { overworld_ascending_frames(gObjectEventPic_MurkrowF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Honchkrow[] = { overworld_ascending_frames(gObjectEventPic_Honchkrow, 4, 4), @@ -1663,18 +1739,22 @@ static const struct SpriteFrameImage sPicTable_Wynaut[] = { static const struct SpriteFrameImage sPicTable_Wobbuffet[] = { overworld_ascending_frames(gObjectEventPic_Wobbuffet, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_WobbuffetF[] = { overworld_ascending_frames(gObjectEventPic_WobbuffetF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_WOBBUFFET #if P_FAMILY_GIRAFARIG static const struct SpriteFrameImage sPicTable_Girafarig[] = { overworld_ascending_frames(gObjectEventPic_Girafarig, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_GirafarigF[] = { overworld_ascending_frames(gObjectEventPic_GirafarigF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_GEN_9_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Farigiraf[] = { overworld_ascending_frames(gObjectEventPic_Farigiraf, 4, 4), @@ -1711,9 +1791,11 @@ static const struct SpriteFrameImage sPicTable_DudunsparceThreeSegment[] = { static const struct SpriteFrameImage sPicTable_Gligar[] = { overworld_ascending_frames(gObjectEventPic_Gligar, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_GligarF[] = { overworld_ascending_frames(gObjectEventPic_GligarF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Gliscor[] = { overworld_ascending_frames(gObjectEventPic_Gliscor, 4, 4), @@ -1754,9 +1836,11 @@ static const struct SpriteFrameImage sPicTable_Shuckle[] = { static const struct SpriteFrameImage sPicTable_Heracross[] = { overworld_ascending_frames(gObjectEventPic_Heracross, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_HeracrossF[] = { overworld_ascending_frames(gObjectEventPic_HeracrossF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_HeracrossMega[] = { overworld_ascending_frames(gObjectEventPic_HeracrossMega, 4, 4), @@ -1768,25 +1852,31 @@ static const struct SpriteFrameImage sPicTable_HeracrossF[] = { static const struct SpriteFrameImage sPicTable_Sneasel[] = { overworld_ascending_frames(gObjectEventPic_Sneasel, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_SneaselF[] = { overworld_ascending_frames(gObjectEventPic_SneaselF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Weavile[] = { overworld_ascending_frames(gObjectEventPic_Weavile, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_WeavileF[] = { overworld_ascending_frames(gObjectEventPic_WeavileF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_GEN_4_CROSS_EVOS #if P_HISUIAN_FORMS static const struct SpriteFrameImage sPicTable_SneaselHisui[] = { overworld_ascending_frames(gObjectEventPic_SneaselHisui, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_SneaselHisuiF[] = { overworld_ascending_frames(gObjectEventPic_SneaselHisuiF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Sneasler[] = { overworld_ascending_frames(gObjectEventPic_Sneasler, 4, 4), }; @@ -1800,9 +1890,11 @@ static const struct SpriteFrameImage sPicTable_Teddiursa[] = { static const struct SpriteFrameImage sPicTable_Ursaring[] = { overworld_ascending_frames(gObjectEventPic_Ursaring, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_UrsaringF[] = { overworld_ascending_frames(gObjectEventPic_UrsaringF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_GEN_8_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Ursaluna[] = { overworld_ascending_frames(gObjectEventPic_Ursaluna, 4, 4), @@ -1829,16 +1921,20 @@ static const struct SpriteFrameImage sPicTable_Swinub[] = { static const struct SpriteFrameImage sPicTable_Piloswine[] = { overworld_ascending_frames(gObjectEventPic_Piloswine, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_PiloswineF[] = { overworld_ascending_frames(gObjectEventPic_PiloswineF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Mamoswine[] = { overworld_ascending_frames(gObjectEventPic_Mamoswine, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_MamoswineF[] = { overworld_ascending_frames(gObjectEventPic_MamoswineF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_SWINUB @@ -1863,9 +1959,11 @@ static const struct SpriteFrameImage sPicTable_Remoraid[] = { static const struct SpriteFrameImage sPicTable_Octillery[] = { overworld_ascending_frames(gObjectEventPic_Octillery, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_OctilleryF[] = { overworld_ascending_frames(gObjectEventPic_OctilleryF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_REMORAID #if P_FAMILY_DELIBIRD @@ -1898,9 +1996,11 @@ static const struct SpriteFrameImage sPicTable_Houndour[] = { static const struct SpriteFrameImage sPicTable_Houndoom[] = { overworld_ascending_frames(gObjectEventPic_Houndoom, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_HoundoomF[] = { overworld_ascending_frames(gObjectEventPic_HoundoomF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_HoundoomMega[] = { overworld_ascending_frames(gObjectEventPic_HoundoomMega, 4, 4), @@ -1915,9 +2015,11 @@ static const struct SpriteFrameImage sPicTable_Phanpy[] = { static const struct SpriteFrameImage sPicTable_Donphan[] = { overworld_ascending_frames(gObjectEventPic_Donphan, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_DonphanF[] = { overworld_ascending_frames(gObjectEventPic_DonphanF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_PHANPY #if P_FAMILY_STANTLER @@ -2017,21 +2119,27 @@ static const struct SpriteFrameImage sPicTable_Sceptile[] = { static const struct SpriteFrameImage sPicTable_Torchic[] = { overworld_ascending_frames(gObjectEventPic_Torchic, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_TorchicF[] = { overworld_ascending_frames(gObjectEventPic_TorchicF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Combusken[] = { overworld_ascending_frames(gObjectEventPic_Combusken, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_CombuskenF[] = { overworld_ascending_frames(gObjectEventPic_CombuskenF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Blaziken[] = { overworld_ascending_frames(gObjectEventPic_Blaziken, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_BlazikenF[] = { overworld_ascending_frames(gObjectEventPic_BlazikenF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_BlazikenMega[] = { overworld_ascending_frames(gObjectEventPic_BlazikenMega, 4, 4), @@ -2095,18 +2203,22 @@ static const struct SpriteFrameImage sPicTable_Silcoon[] = { static const struct SpriteFrameImage sPicTable_Beautifly[] = { overworld_ascending_frames(gObjectEventPic_Beautifly, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_BeautiflyF[] = { overworld_ascending_frames(gObjectEventPic_BeautiflyF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Cascoon[] = { overworld_ascending_frames(gObjectEventPic_Cascoon, 4, 4), }; static const struct SpriteFrameImage sPicTable_Dustox[] = { overworld_ascending_frames(gObjectEventPic_Dustox, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_DustoxF[] = { overworld_ascending_frames(gObjectEventPic_DustoxF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_WURMPLE #if P_FAMILY_LOTAD @@ -2119,9 +2231,11 @@ static const struct SpriteFrameImage sPicTable_Lombre[] = { static const struct SpriteFrameImage sPicTable_Ludicolo[] = { overworld_ascending_frames(gObjectEventPic_Ludicolo, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_LudicoloF[] = { overworld_ascending_frames(gObjectEventPic_LudicoloF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_LOTAD #if P_FAMILY_SEEDOT @@ -2131,15 +2245,19 @@ static const struct SpriteFrameImage sPicTable_Seedot[] = { static const struct SpriteFrameImage sPicTable_Nuzleaf[] = { overworld_ascending_frames(gObjectEventPic_Nuzleaf, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_NuzleafF[] = { overworld_ascending_frames(gObjectEventPic_NuzleafF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Shiftry[] = { overworld_ascending_frames(gObjectEventPic_Shiftry, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_ShiftryF[] = { overworld_ascending_frames(gObjectEventPic_ShiftryF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_SEEDOT #if P_FAMILY_TAILLOW @@ -2314,15 +2432,19 @@ static const struct SpriteFrameImage sPicTable_Aggron[] = { static const struct SpriteFrameImage sPicTable_Meditite[] = { overworld_ascending_frames(gObjectEventPic_Meditite, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_MedititeF[] = { overworld_ascending_frames(gObjectEventPic_MedititeF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Medicham[] = { overworld_ascending_frames(gObjectEventPic_Medicham, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_MedichamF[] = { overworld_ascending_frames(gObjectEventPic_MedichamF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_MedichamMega[] = { overworld_ascending_frames(gObjectEventPic_MedichamMega, 4, 4), @@ -2374,17 +2496,20 @@ static const struct SpriteFrameImage sPicTable_Budew[] = { static const struct SpriteFrameImage sPicTable_Roselia[] = { overworld_ascending_frames(gObjectEventPic_Roselia, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_RoseliaF[] = { overworld_ascending_frames(gObjectEventPic_RoseliaF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Roserade[] = { overworld_ascending_frames(gObjectEventPic_Roserade, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_RoseradeF[] = { overworld_ascending_frames(gObjectEventPic_RoseradeF, 4, 4), }; - +#endif //P_GENDER_DIFFERENCES #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_ROSELIA @@ -2392,15 +2517,19 @@ static const struct SpriteFrameImage sPicTable_RoseradeF[] = { static const struct SpriteFrameImage sPicTable_Gulpin[] = { overworld_ascending_frames(gObjectEventPic_Gulpin, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_GulpinF[] = { overworld_ascending_frames(gObjectEventPic_GulpinF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Swalot[] = { overworld_ascending_frames(gObjectEventPic_Swalot, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_SwalotF[] = { overworld_ascending_frames(gObjectEventPic_SwalotF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_GULPIN #if P_FAMILY_CARVANHA @@ -2430,15 +2559,19 @@ static const struct SpriteFrameImage sPicTable_Wailord[] = { static const struct SpriteFrameImage sPicTable_Numel[] = { overworld_ascending_frames(gObjectEventPic_Numel, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_NumelF[] = { overworld_ascending_frames(gObjectEventPic_NumelF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Camerupt[] = { overworld_ascending_frames(gObjectEventPic_Camerupt, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_CameruptF[] = { overworld_ascending_frames(gObjectEventPic_CameruptF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_CameruptMega[] = { overworld_ascending_frames(gObjectEventPic_CameruptMega, 4, 4), @@ -2486,9 +2619,11 @@ static const struct SpriteFrameImage sPicTable_Cacnea[] = { static const struct SpriteFrameImage sPicTable_Cacturne[] = { overworld_ascending_frames(gObjectEventPic_Cacturne, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_CacturneF[] = { overworld_ascending_frames(gObjectEventPic_CacturneF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_CACNEA #if P_FAMILY_SWABLU @@ -2581,9 +2716,11 @@ static const struct SpriteFrameImage sPicTable_Feebas[] = { static const struct SpriteFrameImage sPicTable_Milotic[] = { overworld_ascending_frames(gObjectEventPic_Milotic, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_MiloticF[] = { overworld_ascending_frames(gObjectEventPic_MiloticF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_FEEBAS #if P_FAMILY_CASTFORM @@ -2711,9 +2848,11 @@ static const struct SpriteFrameImage sPicTable_Gorebyss[] = { static const struct SpriteFrameImage sPicTable_Relicanth[] = { overworld_ascending_frames(gObjectEventPic_Relicanth, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_RelicanthF[] = { overworld_ascending_frames(gObjectEventPic_RelicanthF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_RELICANTH #if P_FAMILY_LUVDISC @@ -2890,72 +3029,92 @@ static const struct SpriteFrameImage sPicTable_Empoleon[] = { static const struct SpriteFrameImage sPicTable_Starly[] = { overworld_ascending_frames(gObjectEventPic_Starly, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_StarlyF[] = { overworld_ascending_frames(gObjectEventPic_StarlyF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Staravia[] = { overworld_ascending_frames(gObjectEventPic_Staravia, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_StaraviaF[] = { overworld_ascending_frames(gObjectEventPic_StaraviaF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Staraptor[] = { overworld_ascending_frames(gObjectEventPic_Staraptor, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_StaraptorF[] = { overworld_ascending_frames(gObjectEventPic_StaraptorF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_STARLY #if P_FAMILY_BIDOOF static const struct SpriteFrameImage sPicTable_Bidoof[] = { overworld_ascending_frames(gObjectEventPic_Bidoof, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_BidoofF[] = { overworld_ascending_frames(gObjectEventPic_BidoofF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Bibarel[] = { overworld_ascending_frames(gObjectEventPic_Bibarel, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_BibarelF[] = { overworld_ascending_frames(gObjectEventPic_BibarelF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_BIDOOF #if P_FAMILY_KRICKETOT static const struct SpriteFrameImage sPicTable_Kricketot[] = { overworld_ascending_frames(gObjectEventPic_Kricketot, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_KricketotF[] = { overworld_ascending_frames(gObjectEventPic_KricketotF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Kricketune[] = { overworld_ascending_frames(gObjectEventPic_Kricketune, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_KricketuneF[] = { overworld_ascending_frames(gObjectEventPic_KricketuneF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_KRICKETOT #if P_FAMILY_SHINX static const struct SpriteFrameImage sPicTable_Shinx[] = { overworld_ascending_frames(gObjectEventPic_Shinx, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_ShinxF[] = { overworld_ascending_frames(gObjectEventPic_ShinxF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Luxio[] = { overworld_ascending_frames(gObjectEventPic_Luxio, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_LuxioF[] = { overworld_ascending_frames(gObjectEventPic_LuxioF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Luxray[] = { overworld_ascending_frames(gObjectEventPic_Luxray, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_LuxrayF[] = { overworld_ascending_frames(gObjectEventPic_LuxrayF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_SHINX #if P_FAMILY_CRANIDOS @@ -3004,9 +3163,11 @@ static const struct SpriteFrameImage sPicTable_Mothim[] = { static const struct SpriteFrameImage sPicTable_Combee[] = { overworld_ascending_frames(gObjectEventPic_Combee, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_CombeeF[] = { overworld_ascending_frames(gObjectEventPic_CombeeF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Vespiquen[] = { overworld_ascending_frames(gObjectEventPic_Vespiquen, 4, 4), }; @@ -3016,24 +3177,30 @@ static const struct SpriteFrameImage sPicTable_Vespiquen[] = { static const struct SpriteFrameImage sPicTable_Pachirisu[] = { overworld_ascending_frames(gObjectEventPic_Pachirisu, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_PachirisuF[] = { overworld_ascending_frames(gObjectEventPic_PachirisuF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_PACHIRISU #if P_FAMILY_BUIZEL static const struct SpriteFrameImage sPicTable_Buizel[] = { overworld_ascending_frames(gObjectEventPic_Buizel, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_BuizelF[] = { overworld_ascending_frames(gObjectEventPic_BuizelF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Floatzel[] = { overworld_ascending_frames(gObjectEventPic_Floatzel, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_FloatzelF[] = { overworld_ascending_frames(gObjectEventPic_FloatzelF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_BUIZEL #if P_FAMILY_CHERUBI @@ -3129,21 +3296,27 @@ static const struct SpriteFrameImage sPicTable_Spiritomb[] = { static const struct SpriteFrameImage sPicTable_Gible[] = { overworld_ascending_frames(gObjectEventPic_Gible, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_GibleF[] = { overworld_ascending_frames(gObjectEventPic_GibleF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Gabite[] = { overworld_ascending_frames(gObjectEventPic_Gabite, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_GabiteF[] = { overworld_ascending_frames(gObjectEventPic_GabiteF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Garchomp[] = { overworld_ascending_frames(gObjectEventPic_Garchomp, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_GarchompF[] = { overworld_ascending_frames(gObjectEventPic_GarchompF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_GarchompMega[] = { overworld_ascending_frames(gObjectEventPic_GarchompMega, 4, 4), @@ -3169,9 +3342,11 @@ static const struct SpriteFrameImage sPicTable_Lucario[] = { static const struct SpriteFrameImage sPicTable_Hippopotas[] = { overworld_ascending_frames(gObjectEventPic_Hippopotas, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_HippopotasF[] = { overworld_ascending_frames(gObjectEventPic_HippopotasF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Hippowdon[] = { overworld_ascending_frames(gObjectEventPic_Hippowdon, 4, 4), }; @@ -3190,15 +3365,19 @@ static const struct SpriteFrameImage sPicTable_Drapion[] = { static const struct SpriteFrameImage sPicTable_Croagunk[] = { overworld_ascending_frames(gObjectEventPic_Croagunk, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_CroagunkF[] = { overworld_ascending_frames(gObjectEventPic_CroagunkF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Toxicroak[] = { overworld_ascending_frames(gObjectEventPic_Toxicroak, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_ToxicroakF[] = { overworld_ascending_frames(gObjectEventPic_ToxicroakF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_CROAGUNK #if P_FAMILY_CARNIVINE @@ -3211,30 +3390,38 @@ static const struct SpriteFrameImage sPicTable_Carnivine[] = { static const struct SpriteFrameImage sPicTable_Finneon[] = { overworld_ascending_frames(gObjectEventPic_Finneon, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_FinneonF[] = { overworld_ascending_frames(gObjectEventPic_FinneonF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Lumineon[] = { overworld_ascending_frames(gObjectEventPic_Lumineon, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_LumineonF[] = { overworld_ascending_frames(gObjectEventPic_LumineonF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_FINNEON #if P_FAMILY_SNOVER static const struct SpriteFrameImage sPicTable_Snover[] = { overworld_ascending_frames(gObjectEventPic_Snover, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_SnoverF[] = { overworld_ascending_frames(gObjectEventPic_SnoverF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Abomasnow[] = { overworld_ascending_frames(gObjectEventPic_Abomasnow, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_AbomasnowF[] = { overworld_ascending_frames(gObjectEventPic_AbomasnowF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_AbomasnowMega[] = { overworld_ascending_frames(gObjectEventPic_AbomasnowMega, 4, 4), @@ -3532,9 +3719,11 @@ static const struct SpriteFrameImage sPicTable_Tranquill[] = { static const struct SpriteFrameImage sPicTable_Unfezant[] = { overworld_ascending_frames(gObjectEventPic_Unfezant, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_UnfezantF[] = { overworld_ascending_frames(gObjectEventPic_UnfezantF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_PIDOVE #if P_FAMILY_BLITZLE @@ -3931,15 +4120,19 @@ static const struct SpriteFrameImage sPicTable_Amoonguss[] = { static const struct SpriteFrameImage sPicTable_Frillish[] = { overworld_ascending_frames(gObjectEventPic_Frillish, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_FrillishF[] = { overworld_ascending_frames(gObjectEventPic_FrillishF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_Jellicent[] = { overworld_ascending_frames(gObjectEventPic_Jellicent, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_JellicentF[] = { overworld_ascending_frames(gObjectEventPic_JellicentF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_FRILLISH #if P_FAMILY_ALOMOMOLA @@ -4405,9 +4598,11 @@ static const struct SpriteFrameImage sPicTable_Litleo[] = { static const struct SpriteFrameImage sPicTable_Pyroar[] = { overworld_ascending_frames(gObjectEventPic_Pyroar, 4, 4), }; +#if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_PyroarF[] = { overworld_ascending_frames(gObjectEventPic_PyroarF, 4, 4), }; +#endif //P_GENDER_DIFFERENCES #endif //P_FAMILY_LITLEO #if P_FAMILY_FLABEBE diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 4c4b8d4b72..864fdc5297 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -30,10 +30,14 @@ #define OVERWORLD_PAL(...) \ .overworldPalette = DEFAULT(NULL, __VA_ARGS__), \ .overworldShinyPalette = DEFAULT_2(NULL, __VA_ARGS__), +#if P_GENDER_DIFFERENCES #define OVERWORLD_PAL_FEMALE(...) \ .overworldPaletteFemale = DEFAULT(NULL, __VA_ARGS__), \ .overworldShinyPaletteFemale = DEFAULT_2(NULL, __VA_ARGS__), #else +#define OVERWORLD_PAL_FEMALE(...) +#endif //P_GENDER_DIFFERENCES +#else #define OVERWORLD_PAL(...) #define OVERWORLD_PAL_FEMALE(...) #endif //OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE @@ -80,6 +84,7 @@ }, \ OVERWORLD_PAL(__VA_ARGS__) +#if P_GENDER_DIFFERENCES #define OVERWORLD_FEMALE(picTable, _size, shadow, _tracks, ...) \ .overworldDataFemale = { \ .tileTag = TAG_NONE, \ @@ -100,6 +105,9 @@ .affineAnims = gDummySpriteAffineAnimTable, \ }, \ OVERWORLD_PAL_FEMALE(__VA_ARGS__) +#else +#define OVERWORLD_FEMALE(picTable, _size, shadow, _tracks, ...) +#endif //P_GENDER_DIFFERENCES #else #define OVERWORLD(picTable, _size, shadow, _tracks, ...) @@ -238,25 +246,27 @@ const struct SpeciesInfo gSpeciesInfo[] = .trainerOffset = 0, .frontPic = gMonFrontPic_CircledQuestionMark, .frontPicSize = MON_COORDS_SIZE(64, 64), - //.frontPicFemale = gMonFrontPic_CircledQuestionMark, - //.frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 0, .frontAnimFrames = sAnims_None, //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_CircledQuestionMark, .backPicSize = MON_COORDS_SIZE(64, 64), - //.backPicFemale = gMonBackPic_CircledQuestionMarkF, - //.backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = 7, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_CircledQuestionMark, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_CircledQuestionMarkF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), + .paletteFemale = gMonPalette_CircledQuestionMarkF, + .shinyPaletteFemale = gMonShinyPalette_CircledQuestionMarkF, + .iconSpriteFemale = gMonIcon_QuestionMarkF, + .iconPalIndexFemale = 1, +#endif //P_GENDER_DIFFERENCES .backAnimId = BACK_ANIM_NONE, .palette = gMonPalette_CircledQuestionMark, .shinyPalette = gMonShinyPalette_CircledQuestionMark, - //.paletteFemale = gMonPalette_CircledQuestionMarkF, - .shinyPaletteFemale = gMonShinyPalette_CircledQuestionMarkF, .iconSprite = gMonIcon_QuestionMark, .iconPalIndex = 0, - //.iconSpriteFemale = gMonIcon_QuestionMarkF, - //.iconPalIndexFemale = 1, FOOTPRINT(QuestionMark) .levelUpLearnset = sNoneLevelUpLearnset, .teachableLearnset = sNoneTeachableLearnset, diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index 289346d7ab..fa8c8d9fde 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -172,22 +172,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 388, .trainerOffset = 6, .frontPic = gMonFrontPic_Venusaur, - .frontPicFemale = gMonFrontPic_VenusaurF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 3, .frontAnimFrames = sAnims_Venusaur, .frontAnimId = ANIM_ROTATE_UP_SLAM_DOWN, .backPic = gMonBackPic_Venusaur, - .backPicFemale = gMonBackPic_VenusaurF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 56) : MON_COORDS_SIZE(64, 48), - .backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 7 : 10, .backAnimId = BACK_ANIM_H_SHAKE, .palette = gMonPalette_Venusaur, .shinyPalette = gMonShinyPalette_Venusaur, .iconSprite = gMonIcon_Venusaur, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 4, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_VenusaurF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_VenusaurF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(2, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Venusaur) OVERWORLD( @@ -1184,23 +1186,25 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Butterfree, - .frontPicFemale = gMonFrontPic_ButterfreeF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 48) : MON_COORDS_SIZE(64, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 9 : 10, .frontAnimFrames = sAnims_Butterfree, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_H_SLIDE_WOBBLE : ANIM_V_SLIDE_WOBBLE, .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 8 : 12, .backPic = gMonBackPic_Butterfree, - .backPicFemale = gMonBackPic_ButterfreeF, .backPicSize = MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 6 : 5, .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, .palette = gMonPalette_Butterfree, .shinyPalette = gMonShinyPalette_Butterfree, .iconSprite = gMonIcon_Butterfree, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_ButterfreeF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), + .backPicFemale = gMonBackPic_ButterfreeF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Butterfree) OVERWORLD( @@ -1861,22 +1865,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Rattata, - .frontPicFemale = gMonFrontPic_RattataF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(32, 32) : MON_COORDS_SIZE(40, 40), - .frontPicSizeFemale = MON_COORDS_SIZE(40, 40), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 16 : 13, .frontAnimFrames = sAnims_Rattata, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_RAPID_H_HOPS : ANIM_H_JUMPS, .backPic = gMonBackPic_Rattata, - .backPicFemale = gMonBackPic_RattataF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 40) : MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 13 : 7, .backAnimId = BACK_ANIM_V_SHAKE_H_SLIDE, .palette = gMonPalette_Rattata, .shinyPalette = gMonShinyPalette_Rattata, .iconSprite = gMonIcon_Rattata, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_RattataF, + .frontPicSizeFemale = MON_COORDS_SIZE(40, 40), + .backPicFemale = gMonBackPic_RattataF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(1, -3, SHADOW_SIZE_S) FOOTPRINT(Rattata) OVERWORLD( @@ -1935,22 +1941,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Raticate, - .frontPicFemale = gMonFrontPic_RaticateF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(64, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 11 : 6, .frontAnimFrames = sAnims_Raticate, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_FIGURE_8 : ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, .backPic = gMonBackPic_Raticate, - .backPicFemale = gMonBackPic_RaticateF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 40) : MON_COORDS_SIZE(64, 48), - .backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 13 : 10, .backAnimId = BACK_ANIM_V_SHAKE_H_SLIDE, .palette = gMonPalette_Raticate, .shinyPalette = gMonShinyPalette_Raticate, .iconSprite = gMonIcon_Raticate, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_RaticateF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), + .backPicFemale = gMonBackPic_RaticateF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(0, 8, SHADOW_SIZE_L) FOOTPRINT(Raticate) OVERWORLD( @@ -2591,27 +2599,29 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Pikachu, - .frontPicFemale = gMonFrontPic_PikachuF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 56) : MON_COORDS_SIZE(48, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 48), .frontPicYOffset = 9, .frontAnimFrames = sAnims_Pikachu, .frontAnimId = ANIM_FLASH_YELLOW, .frontAnimDelay = P_GBA_STYLE_SPECIES_GFX ? 0 : 25, .backPic = gMonBackPic_Pikachu, - .backPicFemale = gMonBackPic_PikachuF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 56) : MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 7 : 4, .backAnimId = BACK_ANIM_SHAKE_FLASH_YELLOW, .palette = gMonPalette_Pikachu, .shinyPalette = gMonShinyPalette_Pikachu, .iconSprite = gMonIcon_Pikachu, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_PikachuF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 48), + .backPicFemale = gMonBackPic_PikachuF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #if P_CUSTOM_GENDER_DIFF_ICONS == TRUE .iconSpriteFemale = gMonIcon_PikachuF, .iconPalIndexFemale = 2, - #endif + #endif //P_CUSTOM_GENDER_DIFF_ICONS +#endif //P_GENDER_DIFFERENCES SHADOW(-3, 5, SHADOW_SIZE_M) OVERWORLD( sPicTable_Pikachu, @@ -3483,27 +3493,29 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Pikachu, - .frontPicFemale = gMonFrontPic_PikachuF, .frontPicSize = MON_COORDS_SIZE(48, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 48), .frontPicYOffset = 9, .frontAnimFrames = sAnims_Pikachu, .frontAnimId = ANIM_FLASH_YELLOW, .frontAnimDelay = 25, .backPic = gMonBackPic_Pikachu, - .backPicFemale = gMonBackPic_PikachuF, .backPicSize = MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = 4, .backAnimId = BACK_ANIM_SHAKE_FLASH_YELLOW, .palette = gMonPalette_Pikachu, .shinyPalette = gMonShinyPalette_Pikachu, .iconSprite = gMonIcon_PikachuStarter, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_PikachuF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 48), + .backPicFemale = gMonBackPic_PikachuF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #if P_CUSTOM_GENDER_DIFF_ICONS == TRUE .iconSpriteFemale = gMonIcon_PikachuStarterF, .iconPalIndexFemale = 2, #endif +#endif //P_GENDER_DIFFERENCES SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) OVERWORLD( @@ -3568,9 +3580,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Raichu, - .frontPicFemale = gMonFrontPic_RaichuF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 56) : MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 4 : 3, .frontAnimFrames = sAnims_Raichu, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_V_STRETCH : ANIM_GROW_VIBRATE, @@ -3582,6 +3592,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Raichu, .iconSprite = gMonIcon_Raichu, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_RaichuF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(2, 10, SHADOW_SIZE_M) FOOTPRINT(Raichu) OVERWORLD( @@ -5091,23 +5105,25 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Zubat, - .frontPicFemale = gMonFrontPic_ZubatF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 56) : MON_COORDS_SIZE(56, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 48), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 6 : 16, .frontAnimFrames = sAnims_Zubat, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 8 : 16, .backPic = gMonBackPic_Zubat, - .backPicFemale = gMonBackPic_ZubatF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 48) : MON_COORDS_SIZE(56, 56), - .backPicSizeFemale = MON_COORDS_SIZE(56, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 11 : 7, .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, .palette = gMonPalette_Zubat, .shinyPalette = gMonShinyPalette_Zubat, .iconSprite = gMonIcon_Zubat, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_ZubatF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 48), + .backPicFemale = gMonBackPic_ZubatF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(-4, 11, SHADOW_SIZE_S) FOOTPRINT(Zubat) OVERWORLD( @@ -5165,23 +5181,25 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Golbat, - .frontPicFemale = gMonFrontPic_GolbatF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 64) : MON_COORDS_SIZE(64, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 3 : 7, .frontAnimFrames = sAnims_Golbat, .frontAnimId = ANIM_H_SLIDE_WOBBLE, .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 8 : 10, .backPic = gMonBackPic_Golbat, - .backPicFemale = gMonBackPic_GolbatF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 56) : MON_COORDS_SIZE(56, 40), - .backPicSizeFemale = MON_COORDS_SIZE(56, 40), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 6 : 13, .backAnimId = BACK_ANIM_V_SHAKE, .palette = gMonPalette_Golbat, .shinyPalette = gMonShinyPalette_Golbat, .iconSprite = gMonIcon_Golbat, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_GolbatF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), + .backPicFemale = gMonBackPic_GolbatF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 40), +#endif //P_GENDER_DIFFERENCES SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Golbat) OVERWORLD( @@ -5375,22 +5393,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Gloom, - .frontPicFemale = gMonFrontPic_GloomF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(56, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 48), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 10 : 11, .frontAnimFrames = sAnims_Gloom, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE_SLOW, .backPic = gMonBackPic_Gloom, - .backPicFemale = gMonBackPic_GloomF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(64, 48), - .backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 10 : 11, .backAnimId = BACK_ANIM_H_SLIDE, .palette = gMonPalette_Gloom, .shinyPalette = gMonShinyPalette_Gloom, .iconSprite = gMonIcon_Gloom, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_GloomF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 48), + .backPicFemale = gMonBackPic_GloomF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 3, SHADOW_SIZE_M) FOOTPRINT(Gloom) OVERWORLD( @@ -5457,22 +5477,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Vileplume, - .frontPicFemale = gMonFrontPic_VileplumeF, .frontPicSize = MON_COORDS_SIZE(56, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 6 : 7, .frontAnimFrames = sAnims_Vileplume, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW : ANIM_V_SQUISH_AND_BOUNCE_SLOW, .backPic = gMonBackPic_Vileplume, - .backPicFemale = gMonBackPic_VileplumeF, .backPicSize = MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 7 : 6, .backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE, .palette = gMonPalette_Vileplume, .shinyPalette = gMonShinyPalette_Vileplume, .iconSprite = gMonIcon_Vileplume, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_VileplumeF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .backPicFemale = gMonBackPic_VileplumeF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 7, SHADOW_SIZE_L) FOOTPRINT(Vileplume) OVERWORLD( @@ -7412,23 +7434,25 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Politoed, - .frontPicFemale = gMonFrontPic_PolitoedF, .frontPicSize = MON_COORDS_SIZE(48, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 6 : 4, .frontAnimFrames = sAnims_Politoed, .frontAnimId = ANIM_H_JUMPS_V_STRETCH, .frontAnimDelay = 40, .backPic = gMonBackPic_Politoed, - .backPicFemale = gMonBackPic_PolitoedF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(56, 56), - .backPicSizeFemale = MON_COORDS_SIZE(56, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 9 : 5, .backAnimId = BACK_ANIM_CONCAVE_ARC_LARGE, .palette = gMonPalette_Politoed, .shinyPalette = gMonShinyPalette_Politoed, .iconSprite = gMonIcon_Politoed, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_PolitoedF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 56), + .backPicFemale = gMonBackPic_PolitoedF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Politoed) OVERWORLD( @@ -7559,22 +7583,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Kadabra, - .frontPicFemale = gMonFrontPic_KadabraF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 56) : MON_COORDS_SIZE(64, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicYOffset = 5, .frontAnimFrames = sAnims_Kadabra, .frontAnimId = ANIM_GROW_VIBRATE, .backPic = gMonBackPic_Kadabra, - .backPicFemale = gMonBackPic_KadabraF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 48) : MON_COORDS_SIZE(64, 48), - .backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicYOffset = 8, .backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE, .palette = gMonPalette_Kadabra, .shinyPalette = gMonShinyPalette_Kadabra, .iconSprite = gMonIcon_Kadabra, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_KadabraF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), + .backPicFemale = gMonBackPic_KadabraF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(1, 6, SHADOW_SIZE_L) FOOTPRINT(Kadabra) OVERWORLD( @@ -7643,22 +7669,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Alakazam, - .frontPicFemale = gMonFrontPic_AlakazamF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 56) : MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 4 : 2, .frontAnimFrames = sAnims_Alakazam, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_V_STRETCH : ANIM_GROW_VIBRATE, .backPic = gMonBackPic_Alakazam, - .backPicFemale = gMonBackPic_AlakazamF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 56) : MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 5 : 6, .backAnimId = BACK_ANIM_GROW_STUTTER, .palette = gMonPalette_Alakazam, .shinyPalette = gMonShinyPalette_Alakazam, .iconSprite = gMonIcon_Alakazam, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_AlakazamF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_AlakazamF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Alakazam) OVERWORLD( @@ -9926,22 +9954,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 257, .trainerOffset = -1, .frontPic = gMonFrontPic_Doduo, - .frontPicFemale = gMonFrontPic_DoduoF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(40, 56) : MON_COORDS_SIZE(64, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 5 : 7, .frontAnimFrames = sAnims_Doduo, .frontAnimId = ANIM_H_SHAKE_SLOW, .backPic = gMonBackPic_Doduo, - .backPicFemale = gMonBackPic_DoduoF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 8 : 6, .backAnimId = BACK_ANIM_TRIANGLE_DOWN, .palette = gMonPalette_Doduo, .shinyPalette = gMonShinyPalette_Doduo, .iconSprite = gMonIcon_Doduo, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_DoduoF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), + .backPicFemale = gMonBackPic_DoduoF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(6, 5, SHADOW_SIZE_M) FOOTPRINT(Doduo) OVERWORLD( @@ -10006,22 +10036,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 268, .trainerOffset = 0, .frontPic = gMonFrontPic_Dodrio, - .frontPicFemale = gMonFrontPic_DodrioF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 0, .frontAnimFrames = sAnims_Dodrio, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_LUNGE_GROW : ANIM_V_STRETCH, .backPic = gMonBackPic_Dodrio, - .backPicFemale = gMonBackPic_DodrioF, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 1 : 3, .backAnimId = BACK_ANIM_JOLT_RIGHT, .palette = gMonPalette_Dodrio, .shinyPalette = gMonShinyPalette_Dodrio, .iconSprite = gMonIcon_Dodrio, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_DodrioF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_DodrioF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Dodrio) OVERWORLD( @@ -11006,23 +11038,25 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 516, .trainerOffset = 13, .frontPic = gMonFrontPic_Steelix, - .frontPicFemale = gMonFrontPic_SteelixF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 0, .frontAnimFrames = sAnims_Steelix, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_H_SHAKE : ANIM_V_SHAKE, .frontAnimDelay = 45, .backPic = gMonBackPic_Steelix, - .backPicFemale = gMonBackPic_SteelixF, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 0 : 2, .backAnimId = BACK_ANIM_V_SHAKE, .palette = gMonPalette_Steelix, .shinyPalette = gMonShinyPalette_Steelix, .iconSprite = gMonIcon_Steelix, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_SteelixF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_SteelixF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Steelix) OVERWORLD( @@ -11214,23 +11248,25 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 257, .trainerOffset = 0, .frontPic = gMonFrontPic_Hypno, - .frontPicFemale = gMonFrontPic_HypnoF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 56) : MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 4 : 3, .frontAnimFrames = sAnims_Hypno, .frontAnimId = ANIM_GROW_VIBRATE, .frontAnimDelay = 40, .backPic = gMonBackPic_Hypno, - .backPicFemale = gMonBackPic_HypnoF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 9 : 5, .backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE, .palette = gMonPalette_Hypno, .shinyPalette = gMonShinyPalette_Hypno, .iconSprite = gMonIcon_Hypno, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_HypnoF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_HypnoF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(-3, 9, SHADOW_SIZE_L) FOOTPRINT(Hypno) OVERWORLD( @@ -12812,22 +12848,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Rhyhorn, - .frontPicFemale = gMonFrontPic_RhyhornF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 48) : MON_COORDS_SIZE(56, 40), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 40), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 9 : 12, .frontAnimFrames = sAnims_Rhyhorn, .frontAnimId = ANIM_V_SHAKE, .backPic = gMonBackPic_Rhyhorn, - .backPicFemale = gMonBackPic_RhyhornF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 40) : MON_COORDS_SIZE(64, 48), - .backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 12 : 11, .backAnimId = BACK_ANIM_V_SHAKE_LOW, .palette = gMonPalette_Rhyhorn, .shinyPalette = gMonShinyPalette_Rhyhorn, .iconSprite = gMonIcon_Rhyhorn, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_RhyhornF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 40), + .backPicFemale = gMonBackPic_RhyhornF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(0, 0, SHADOW_SIZE_L) FOOTPRINT(Rhyhorn) OVERWORLD( @@ -12885,22 +12923,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 299, .trainerOffset = 2, .frontPic = gMonFrontPic_Rhydon, - .frontPicFemale = gMonFrontPic_RhydonF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 64) : MON_COORDS_SIZE(64, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 2 : 3, .frontAnimFrames = sAnims_Rhydon, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_SHRINK_GROW : ANIM_V_STRETCH, .backPic = gMonBackPic_Rhydon, - .backPicFemale = gMonBackPic_RhydonF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 64) : MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 3 : 5, .backAnimId = BACK_ANIM_V_SHAKE_LOW, .palette = gMonPalette_Rhydon, .shinyPalette = gMonShinyPalette_Rhydon, .iconSprite = gMonIcon_Rhydon, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_RhydonF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), + .backPicFemale = gMonBackPic_RhydonF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rhydon) OVERWORLD( @@ -12965,22 +13005,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 369, .trainerOffset = 7, .frontPic = gMonFrontPic_Rhyperior, - .frontPicFemale = gMonFrontPic_RhyperiorF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 2, .frontAnimFrames = sAnims_Rhyperior, .frontAnimId = ANIM_V_SHAKE_TWICE, .backPic = gMonBackPic_Rhyperior, - .backPicFemale = gMonBackPic_RhyperiorF, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = 0, .backAnimId = BACK_ANIM_V_SHAKE, .palette = gMonPalette_Rhyperior, .shinyPalette = gMonShinyPalette_Rhyperior, .iconSprite = gMonIcon_Rhyperior, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_RhyperiorF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_RhyperiorF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(2, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rhyperior) OVERWORLD( @@ -13304,9 +13346,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 334, .trainerOffset = 4, .frontPic = gMonFrontPic_Tangrowth, - .frontPicFemale = gMonFrontPic_TangrowthF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 2, .frontAnimFrames = sAnims_Tangrowth, .frontAnimId = ANIM_H_STRETCH, @@ -13318,6 +13358,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tangrowth, .iconSprite = gMonIcon_Tangrowth, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_TangrowthF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-2, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tangrowth) OVERWORLD( @@ -13717,22 +13761,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Goldeen, - .frontPicFemale = gMonFrontPic_GoldeenF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(64, 40), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 40), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 10 : 13, .frontAnimFrames = sAnims_Goldeen, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_SWING_CONVEX : ANIM_H_SLIDE_WOBBLE, .backPic = gMonBackPic_Goldeen, - .backPicFemale = gMonBackPic_GoldeenF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(64, 48), - .backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 8 : 9, .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, .palette = gMonPalette_Goldeen, .shinyPalette = gMonShinyPalette_Goldeen, .iconSprite = gMonIcon_Goldeen, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_GoldeenF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 40), + .backPicFemale = gMonBackPic_GoldeenF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(-6, 0, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Goldeen) OVERWORLD( @@ -13791,22 +13837,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Seaking, - .frontPicFemale = gMonFrontPic_SeakingF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 56) : MON_COORDS_SIZE(64, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 4 : 5, .frontAnimFrames = sAnims_Seaking, .frontAnimId = ANIM_V_SLIDE_WOBBLE, .backPic = gMonBackPic_Seaking, - .backPicFemale = gMonBackPic_SeakingF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 48) : MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 11 : 6, .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, .palette = gMonPalette_Seaking, .shinyPalette = gMonShinyPalette_Seaking, .iconSprite = gMonIcon_Seaking, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_SeakingF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), + .backPicFemale = gMonBackPic_SeakingF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Seaking) OVERWORLD( @@ -14268,9 +14316,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 293, .trainerOffset = 2, .frontPic = gMonFrontPic_Scyther, - .frontPicFemale = gMonFrontPic_ScytherF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 64) : MON_COORDS_SIZE(56, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 64), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 0 : 1, .frontAnimFrames = sAnims_Scyther, .frontAnimId = ANIM_H_VIBRATE, @@ -14283,6 +14329,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Scyther, .iconSprite = gMonIcon_Scyther, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_ScytherF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Scyther) OVERWORLD( @@ -14347,9 +14397,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Scizor, - .frontPicFemale = gMonFrontPic_ScizorF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 0 : 2, .frontAnimFrames = sAnims_Scizor, .frontAnimId = ANIM_H_VIBRATE, @@ -14362,6 +14410,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Scizor, .iconSprite = gMonIcon_Scizor, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_ScizorF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Scizor) OVERWORLD( @@ -15482,22 +15534,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Magikarp, - .frontPicFemale = gMonFrontPic_MagikarpF, .frontPicSize = MON_COORDS_SIZE(48, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 6 : 4, .frontAnimFrames = sAnims_Magikarp, .frontAnimId = ANIM_BOUNCE_ROTATE_TO_SIDES, .backPic = gMonBackPic_Magikarp, - .backPicFemale = gMonBackPic_MagikarpF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 48) : MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 9 : 6, .backAnimId = BACK_ANIM_CONCAVE_ARC_LARGE, .palette = gMonPalette_Magikarp, .shinyPalette = gMonShinyPalette_Magikarp, .iconSprite = gMonIcon_Magikarp, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_MagikarpF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 56), + .backPicFemale = gMonBackPic_MagikarpF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(1, 7, SHADOW_SIZE_M) FOOTPRINT(Magikarp) OVERWORLD( @@ -15555,22 +15609,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 481, .trainerOffset = 13, .frontPic = gMonFrontPic_Gyarados, - .frontPicFemale = gMonFrontPic_GyaradosF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 8 : 2, .frontAnimFrames = sAnims_Gyarados, .frontAnimId = ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, .backPic = gMonBackPic_Gyarados, - .backPicFemale = gMonBackPic_GyaradosF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 64) : MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 0 : 5, .backAnimId = BACK_ANIM_V_SHAKE, .palette = gMonPalette_Gyarados, .shinyPalette = gMonShinyPalette_Gyarados, .iconSprite = gMonIcon_Gyarados, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_GyaradosF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_GyaradosF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(5, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gyarados) OVERWORLD( @@ -15884,22 +15940,24 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Eevee, - .frontPicFemale = gMonFrontPic_EeveeF, .frontPicSize = MON_COORDS_SIZE(40, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(40, 48), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 9 : 11, .frontAnimFrames = sAnims_Eevee, .frontAnimId = ANIM_V_STRETCH, .backPic = gMonBackPic_Eevee, - .backPicFemale = gMonBackPic_EeveeF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(56, 48), - .backPicSizeFemale = MON_COORDS_SIZE(56, 48), .backPicYOffset = 10, .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, .palette = gMonPalette_Eevee, .shinyPalette = gMonShinyPalette_Eevee, .iconSprite = gMonIcon_Eevee, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_EeveeF, + .frontPicSizeFemale = MON_COORDS_SIZE(40, 48), + .backPicFemale = gMonBackPic_EeveeF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Eevee) OVERWORLD( @@ -16023,26 +16081,28 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Eevee, - .frontPicFemale = gMonFrontPic_EeveeF, .frontPicSize = MON_COORDS_SIZE(40, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(40, 48), .frontPicYOffset = 11, .frontAnimFrames = sAnims_Eevee, .frontAnimId = ANIM_V_STRETCH, .backPic = gMonBackPic_Eevee, - .backPicFemale = gMonBackPic_EeveeF, .backPicSize = MON_COORDS_SIZE(56, 48), - .backPicSizeFemale = MON_COORDS_SIZE(56, 48), .backPicYOffset = 10, .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, .palette = gMonPalette_Eevee, .shinyPalette = gMonShinyPalette_Eevee, .iconSprite = gMonIcon_EeveePartner, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_EeveeF, + .frontPicSizeFemale = MON_COORDS_SIZE(40, 48), + .backPicFemale = gMonBackPic_EeveeF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 48), #if P_CUSTOM_GENDER_DIFF_ICONS == TRUE .iconSpriteFemale = gMonIcon_EeveePartnerF, .iconPalIndexFemale = 2, #endif +#endif //P_GENDER_DIFFERENCES SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Eevee) OVERWORLD( diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h index ca74ee28de..b3bd0da95a 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -172,22 +172,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 277, .trainerOffset = 1, .frontPic = gMonFrontPic_Meganium, - .frontPicFemale = gMonFrontPic_MeganiumF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 64) : MON_COORDS_SIZE(48, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 64), .frontPicYOffset = 0, .frontAnimFrames = sAnims_Meganium, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_V_STRETCH : ANIM_GROW_VIBRATE, .backPic = gMonBackPic_Meganium, - .backPicFemale = gMonBackPic_MeganiumF, .backPicSize = MON_COORDS_SIZE(56, 64), - .backPicSizeFemale = MON_COORDS_SIZE(56, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 0 : 2, .backAnimId = BACK_ANIM_V_SHAKE, .palette = gMonPalette_Meganium, .shinyPalette = gMonShinyPalette_Meganium, .iconSprite = gMonIcon_Meganium, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_MeganiumF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 64), + .backPicFemale = gMonBackPic_MeganiumF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Meganium) OVERWORLD( @@ -966,22 +968,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Ledyba, - .frontPicFemale = gMonFrontPic_LedybaF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(40, 48) : MON_COORDS_SIZE(48, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 48), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 12 : 10, .frontAnimFrames = sAnims_Ledyba, .frontAnimId = ANIM_V_JUMPS_SMALL, .backPic = gMonBackPic_Ledyba, - .backPicFemale = gMonBackPic_LedybaF, .backPicSize = MON_COORDS_SIZE(56, 48), - .backPicSizeFemale = MON_COORDS_SIZE(56, 48), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 11 : 8, .backAnimId = BACK_ANIM_V_SHAKE_H_SLIDE, .palette = gMonPalette_Ledyba, .shinyPalette = gMonShinyPalette_Ledyba, .iconSprite = gMonIcon_Ledyba, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_LedybaF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 48), + .backPicFemale = gMonBackPic_LedybaF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Ledyba) OVERWORLD( @@ -1039,23 +1043,25 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Ledian, - .frontPicFemale = gMonFrontPic_LedianF, .frontPicSize = MON_COORDS_SIZE(48, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 4 : 6, .frontAnimFrames = sAnims_Ledian, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_V_SLIDE_SLOW : ANIM_V_SLIDE_WOBBLE, .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 8 : 10, .backPic = gMonBackPic_Ledian, - .backPicFemale = gMonBackPic_LedianF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 56) : MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 7 : 3, .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, .palette = gMonPalette_Ledian, .shinyPalette = gMonShinyPalette_Ledian, .iconSprite = gMonIcon_Ledian, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_LedianF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 56), + .backPicFemale = gMonBackPic_LedianF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Ledian) OVERWORLD( @@ -1639,9 +1645,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 318, .trainerOffset = 4, .frontPic = gMonFrontPic_Xatu, - .frontPicFemale = gMonFrontPic_XatuF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(32, 56) : MON_COORDS_SIZE(40, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(40, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 7 : 5, .frontAnimFrames = sAnims_Xatu, .frontAnimId = ANIM_GROW_VIBRATE, @@ -1653,6 +1657,10 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Xatu, .iconSprite = gMonIcon_Xatu, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_XatuF, + .frontPicSizeFemale = MON_COORDS_SIZE(40, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Xatu) OVERWORLD( @@ -2246,22 +2254,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Sudowoodo, - .frontPicFemale = gMonFrontPic_SudowoodoF, .frontPicSize = MON_COORDS_SIZE(48, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 6 : 7, .frontAnimFrames = sAnims_Sudowoodo, .frontAnimId = ANIM_H_SLIDE_SLOW, .backPic = gMonBackPic_Sudowoodo, - .backPicFemale = gMonBackPic_SudowoodoF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(48, 56), - .backPicSizeFemale = MON_COORDS_SIZE(48, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 8 : 5, .backAnimId = BACK_ANIM_H_SLIDE, .palette = gMonPalette_Sudowoodo, .shinyPalette = gMonShinyPalette_Sudowoodo, .iconSprite = gMonIcon_Sudowoodo, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_SudowoodoF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 56), + .backPicFemale = gMonBackPic_SudowoodoF, + .backPicSizeFemale = MON_COORDS_SIZE(48, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Sudowoodo) OVERWORLD( @@ -2531,22 +2541,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Aipom, - .frontPicFemale = gMonFrontPic_AipomF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(40, 64) : MON_COORDS_SIZE(32, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(32, 64), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 3 : 1, .frontAnimFrames = sAnims_Aipom, .frontAnimId = ANIM_H_JUMPS_V_STRETCH, .backPic = gMonBackPic_Aipom, - .backPicFemale = gMonBackPic_AipomF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 9 : 3, .backAnimId = BACK_ANIM_CONCAVE_ARC_LARGE, .palette = gMonPalette_Aipom, .shinyPalette = gMonShinyPalette_Aipom, .iconSprite = gMonIcon_Aipom, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_AipomF, + .frontPicSizeFemale = MON_COORDS_SIZE(32, 64), + .backPicFemale = gMonBackPic_AipomF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Aipom) OVERWORLD( @@ -2605,22 +2617,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Ambipom, - .frontPicFemale = gMonFrontPic_AmbipomF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 1, .frontAnimFrames = sAnims_Ambipom, .frontAnimId = ANIM_BACK_AND_LUNGE, .backPic = gMonBackPic_Ambipom, - .backPicFemale = gMonBackPic_AmbipomF, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = 3, .backAnimId = BACK_ANIM_CONCAVE_ARC_LARGE, .palette = gMonPalette_Ambipom, .shinyPalette = gMonShinyPalette_Ambipom, .iconSprite = gMonIcon_Ambipom, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_AmbipomF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_AmbipomF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Ambipom) OVERWORLD( @@ -2945,22 +2959,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Wooper, - .frontPicFemale = gMonFrontPic_WooperF, .frontPicSize = MON_COORDS_SIZE(40, 32), - .frontPicSizeFemale = MON_COORDS_SIZE(40, 32), .frontPicYOffset = 16, .frontAnimFrames = sAnims_Wooper, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_Wooper, - .backPicFemale = gMonBackPic_WooperF, .backPicSize = MON_COORDS_SIZE(64, 40), - .backPicSizeFemale = MON_COORDS_SIZE(64, 40), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 15 : 12, .backAnimId = BACK_ANIM_V_STRETCH, .palette = gMonPalette_Wooper, .shinyPalette = gMonShinyPalette_Wooper, .iconSprite = gMonIcon_Wooper, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_WooperF, + .frontPicSizeFemale = MON_COORDS_SIZE(40, 32), + .backPicFemale = gMonBackPic_WooperF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 40), +#endif //P_GENDER_DIFFERENCES SHADOW(1, -2, SHADOW_SIZE_S) FOOTPRINT(Wooper) OVERWORLD( @@ -3019,22 +3035,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Quagsire, - .frontPicFemale = gMonFrontPic_QuagsireF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 56) : MON_COORDS_SIZE(64, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 7 : 5, .frontAnimFrames = sAnims_Quagsire, .frontAnimId = ANIM_H_STRETCH, .backPic = gMonBackPic_Quagsire, - .backPicFemale = gMonBackPic_QuagsireF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 48) : MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 8 : 5, .backAnimId = BACK_ANIM_H_SLIDE, .palette = gMonPalette_Quagsire, .shinyPalette = gMonShinyPalette_Quagsire, .iconSprite = gMonIcon_Quagsire, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_QuagsireF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), + .backPicFemale = gMonBackPic_QuagsireF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(0, 8, SHADOW_SIZE_M) FOOTPRINT(Quagsire) OVERWORLD( @@ -3224,23 +3242,25 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 1, .frontPic = gMonFrontPic_Murkrow, - .frontPicFemale = gMonFrontPic_MurkrowF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(48, 40), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 40), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 11 : 15, .frontAnimFrames = sAnims_Murkrow, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 0 : 12, .backPic = gMonBackPic_Murkrow, - .backPicFemale = gMonBackPic_MurkrowF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(40, 56), - .backPicSizeFemale = MON_COORDS_SIZE(40, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 9 : 10, .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, .palette = gMonPalette_Murkrow, .shinyPalette = gMonShinyPalette_Murkrow, .iconSprite = gMonIcon_Murkrow, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_MurkrowF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 40), + .backPicFemale = gMonBackPic_MurkrowF, + .backPicSizeFemale = MON_COORDS_SIZE(40, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(-2, 8, SHADOW_SIZE_S) FOOTPRINT(Murkrow) OVERWORLD( @@ -3654,26 +3674,28 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Wobbuffet, - .frontPicFemale = gMonFrontPic_WobbuffetF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 56) : MON_COORDS_SIZE(64, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 6 : 5, .frontAnimFrames = sAnims_Wobbuffet, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_DEEP_V_SQUISH_AND_BOUNCE : ANIM_GROW_VIBRATE, .backPic = gMonBackPic_Wobbuffet, - .backPicFemale = gMonBackPic_WobbuffetF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 40) : MON_COORDS_SIZE(56, 56), - .backPicSizeFemale = MON_COORDS_SIZE(56, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 12 : 10, .backAnimId = BACK_ANIM_V_STRETCH, .palette = gMonPalette_Wobbuffet, .shinyPalette = gMonShinyPalette_Wobbuffet, .iconSprite = gMonIcon_Wobbuffet, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_WobbuffetF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), + .backPicFemale = gMonBackPic_WobbuffetF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 56), #if P_CUSTOM_GENDER_DIFF_ICONS == TRUE .iconSpriteFemale = gMonIcon_WobbuffetF, .iconPalIndexFemale = 0, #endif +#endif //P_GENDER_DIFFERENCES SHADOW(-3, 8, SHADOW_SIZE_M) FOOTPRINT(Wobbuffet) OVERWORLD( @@ -3732,22 +3754,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Girafarig, - .frontPicFemale = gMonFrontPic_GirafarigF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 64) : MON_COORDS_SIZE(56, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 64), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 3 : 0, .frontAnimFrames = sAnims_Girafarig, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_V_JUMPS_BIG : ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_Girafarig, - .backPicFemale = gMonBackPic_GirafarigF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 56) : MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 5 : 1, .backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE, .palette = gMonPalette_Girafarig, .shinyPalette = gMonShinyPalette_Girafarig, .iconSprite = gMonIcon_Girafarig, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_GirafarigF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 64), + .backPicFemale = gMonBackPic_GirafarigF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Girafarig) OVERWORLD( @@ -4195,23 +4219,25 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Gligar, - .frontPicFemale = gMonFrontPic_GligarF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 64) : MON_COORDS_SIZE(56, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 3 : 4, .frontAnimFrames = sAnims_Gligar, .frontAnimId = ANIM_SHRINK_GROW, .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 6 : 8, .backPic = gMonBackPic_Gligar, - .backPicFemale = gMonBackPic_GligarF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 56) : MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 5 : 2, .backAnimId = BACK_ANIM_SHRINK_GROW, .palette = gMonPalette_Gligar, .shinyPalette = gMonShinyPalette_Gligar, .iconSprite = gMonIcon_Gligar, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_GligarF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .backPicFemale = gMonBackPic_GligarF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Gligar) OVERWORLD( @@ -4750,22 +4776,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Heracross, - .frontPicFemale = gMonFrontPic_HeracrossF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 3 : 1, .frontAnimFrames = sAnims_Heracross, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_LUNGE_GROW : ANIM_V_STRETCH, .backPic = gMonBackPic_Heracross, - .backPicFemale = gMonBackPic_HeracrossF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 56) : MON_COORDS_SIZE(48, 64), - .backPicSizeFemale = MON_COORDS_SIZE(48, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 4 : 2, .backAnimId = BACK_ANIM_JOLT_RIGHT, .palette = gMonPalette_Heracross, .shinyPalette = gMonShinyPalette_Heracross, .iconSprite = gMonIcon_Heracross, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_HeracrossF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_HeracrossF, + .backPicSizeFemale = MON_COORDS_SIZE(48, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 10, SHADOW_SIZE_M) FOOTPRINT(Heracross) OVERWORLD( @@ -4887,22 +4915,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Sneasel, - .frontPicFemale = gMonFrontPic_SneaselF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 56) : MON_COORDS_SIZE(56, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 48), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 5 : 8, .frontAnimFrames = sAnims_Sneasel, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_H_STRETCH : ANIM_H_JUMPS, .backPic = gMonBackPic_Sneasel, - .backPicFemale = gMonBackPic_SneaselF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 8 : 3, .backAnimId = BACK_ANIM_TRIANGLE_DOWN, .palette = gMonPalette_Sneasel, .shinyPalette = gMonShinyPalette_Sneasel, .iconSprite = gMonIcon_Sneasel, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_SneaselF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 48), + .backPicFemale = gMonBackPic_SneaselF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Sneasel) OVERWORLD( @@ -4965,22 +4995,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Weavile, - .frontPicFemale = gMonFrontPic_WeavileF, .frontPicSize = MON_COORDS_SIZE(56, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), .frontPicYOffset = 4, .frontAnimFrames = sAnims_Weavile, .frontAnimId = ANIM_H_VIBRATE, .backPic = gMonBackPic_Weavile, - .backPicFemale = gMonBackPic_WeavileF, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = 6, .backAnimId = BACK_ANIM_JOLT_RIGHT, .palette = gMonPalette_Weavile, .shinyPalette = gMonShinyPalette_Weavile, .iconSprite = gMonIcon_Weavile, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_WeavileF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .backPicFemale = gMonBackPic_WeavileF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-4, 10, SHADOW_SIZE_M) FOOTPRINT(Weavile) OVERWORLD( @@ -5040,22 +5072,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_SneaselHisui, - .frontPicFemale = gMonFrontPic_SneaselHisuiF, .frontPicSize = MON_COORDS_SIZE(56, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), .frontPicYOffset = 8, .frontAnimFrames = sAnims_SneaselHisui, //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_SneaselHisui, - .backPicFemale = gMonBackPic_SneaselHisuiF, .backPicSize = MON_COORDS_SIZE(56, 64), - .backPicSizeFemale = MON_COORDS_SIZE(56, 64), .backPicYOffset = 3, //.backAnimId = BACK_ANIM_NONE, .palette = gMonPalette_SneaselHisui, .shinyPalette = gMonShinyPalette_SneaselHisui, .iconSprite = gMonIcon_SneaselHisui, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_SneaselHisuiF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .backPicFemale = gMonBackPic_SneaselHisuiF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Sneasel) OVERWORLD( @@ -5252,22 +5286,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Ursaring, - .frontPicFemale = gMonFrontPic_UrsaringF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 64) : MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 1 : 0, .frontAnimFrames = sAnims_Ursaring, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_V_SHAKE : ANIM_H_SHAKE, .backPic = gMonBackPic_Ursaring, - .backPicFemale = gMonBackPic_UrsaringF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 64) : MON_COORDS_SIZE(56, 64), - .backPicSizeFemale = MON_COORDS_SIZE(56, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 3 : 2, .backAnimId = BACK_ANIM_V_SHAKE, .palette = gMonPalette_Ursaring, .shinyPalette = gMonShinyPalette_Ursaring, .iconSprite = gMonIcon_Ursaring, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_UrsaringF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_UrsaringF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(1, 14, SHADOW_SIZE_L) FOOTPRINT(Ursaring) OVERWORLD( @@ -5649,22 +5685,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Piloswine, - .frontPicFemale = gMonFrontPic_PiloswineF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(48, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 56), .frontPicYOffset = 8, .frontAnimFrames = sAnims_Piloswine, .frontAnimId = ANIM_H_SHAKE, .backPic = gMonBackPic_Piloswine, - .backPicFemale = gMonBackPic_PiloswineF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 40) : MON_COORDS_SIZE(64, 48), - .backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 13 : 8, .backAnimId = BACK_ANIM_H_SHAKE, .palette = gMonPalette_Piloswine, .shinyPalette = gMonShinyPalette_Piloswine, .iconSprite = gMonIcon_Piloswine, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_PiloswineF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 56), + .backPicFemale = gMonBackPic_PiloswineF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 3, SHADOW_SIZE_M) FOOTPRINT(Piloswine) OVERWORLD( @@ -5728,9 +5766,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 423, .trainerOffset = 8, .frontPic = gMonFrontPic_Mamoswine, - .frontPicFemale = gMonFrontPic_MamoswineF, .frontPicSize = MON_COORDS_SIZE(64, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicYOffset = 4, .frontAnimFrames = sAnims_Mamoswine, .frontAnimId = ANIM_BACK_AND_LUNGE, @@ -5742,6 +5778,10 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Mamoswine, .iconSprite = gMonIcon_Mamoswine, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_MamoswineF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(7, 7, SHADOW_SIZE_L) FOOTPRINT(Mamoswine) OVERWORLD( @@ -6077,23 +6117,25 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Octillery, - .frontPicFemale = gMonFrontPic_OctilleryF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(56, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 48), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 10 : 8, .frontAnimFrames = sAnims_Octillery, .frontAnimId = ANIM_V_STRETCH, .frontAnimDelay = 20, .backPic = gMonBackPic_Octillery, - .backPicFemale = gMonBackPic_OctilleryF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 10 : 8, .backAnimId = BACK_ANIM_SHRINK_GROW, .palette = gMonPalette_Octillery, .shinyPalette = gMonShinyPalette_Octillery, .iconSprite = gMonIcon_Octillery, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_OctilleryF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 48), + .backPicFemale = gMonBackPic_OctilleryF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Octillery) OVERWORLD( @@ -6479,22 +6521,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Houndoom, - .frontPicFemale = gMonFrontPic_HoundoomF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 56) : MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 5 : 0, .frontAnimFrames = sAnims_Houndoom, .frontAnimId = ANIM_V_SHAKE, .backPic = gMonBackPic_Houndoom, - .backPicFemale = gMonBackPic_HoundoomF, .backPicSize = MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 7 : 6, .backAnimId = BACK_ANIM_V_SHAKE, .palette = gMonPalette_Houndoom, .shinyPalette = gMonShinyPalette_Houndoom, .iconSprite = gMonIcon_Houndoom, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_HoundoomF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_HoundoomF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(-5, 13, SHADOW_SIZE_L) FOOTPRINT(Houndoom) OVERWORLD( @@ -6675,22 +6719,24 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Donphan, - .frontPicFemale = gMonFrontPic_DonphanF, .frontPicSize = MON_COORDS_SIZE(64, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 48), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 8 : 9, .frontAnimFrames = sAnims_Donphan, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_V_SHAKE_TWICE : ANIM_ROTATE_UP_SLAM_DOWN, .backPic = gMonBackPic_Donphan, - .backPicFemale = gMonBackPic_DonphanF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 40) : MON_COORDS_SIZE(64, 48), - .backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 13 : 9, .backAnimId = BACK_ANIM_V_SHAKE_LOW, .palette = gMonPalette_Donphan, .shinyPalette = gMonShinyPalette_Donphan, .iconSprite = gMonIcon_Donphan, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_DonphanF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 48), + .backPicFemale = gMonBackPic_DonphanF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(7, 2, SHADOW_SIZE_L) FOOTPRINT(Donphan) OVERWORLD( diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h index b52c2d8024..af1b4476d8 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -298,15 +298,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .frontAnimFrames = sAnims_Torchic, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_H_STRETCH : ANIM_V_JUMPS_SMALL, .backPic = gMonBackPic_Torchic, - .backPicFemale = gMonBackPic_TorchicF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 56) : MON_COORDS_SIZE(40, 48), - .backPicSizeFemale = MON_COORDS_SIZE(40, 48), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 5 : 10, .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, .palette = gMonPalette_Torchic, .shinyPalette = gMonShinyPalette_Torchic, .iconSprite = gMonIcon_Torchic, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .backPicFemale = gMonBackPic_TorchicF, + .backPicSizeFemale = MON_COORDS_SIZE(40, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Torchic) OVERWORLD( @@ -365,22 +367,24 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Combusken, - .frontPicFemale = gMonFrontPic_CombuskenF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 64) : MON_COORDS_SIZE(48, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 64), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 1 : 3, .frontAnimFrames = sAnims_Combusken, .frontAnimId = ANIM_V_JUMPS_H_JUMPS, .backPic = gMonBackPic_Combusken, - .backPicFemale = gMonBackPic_CombuskenF, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 0 : 1, .backAnimId = BACK_ANIM_CONCAVE_ARC_LARGE, .palette = gMonPalette_Combusken, .shinyPalette = gMonShinyPalette_Combusken, .iconSprite = gMonIcon_Combusken, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_CombuskenF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 64), + .backPicFemale = gMonBackPic_CombuskenF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Combusken) OVERWORLD( @@ -443,22 +447,24 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 301, .trainerOffset = 4, .frontPic = gMonFrontPic_Blaziken, - .frontPicFemale = gMonFrontPic_BlazikenF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 64) : MON_COORDS_SIZE(56, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 64), .frontPicYOffset = 0, .frontAnimFrames = sAnims_Blaziken, .frontAnimId = ANIM_H_SHAKE, .backPic = gMonBackPic_Blaziken, - .backPicFemale = gMonBackPic_BlazikenF, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = 0, .backAnimId = BACK_ANIM_SHAKE_GLOW_RED, .palette = gMonPalette_Blaziken, .shinyPalette = gMonShinyPalette_Blaziken, .iconSprite = gMonIcon_Blaziken, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_BlazikenF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 64), + .backPicFemale = gMonBackPic_BlazikenF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(4, 8, SHADOW_SIZE_M) FOOTPRINT(Blaziken) OVERWORLD( @@ -1454,23 +1460,25 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Beautifly, - .frontPicFemale = gMonFrontPic_BeautiflyF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 48) : MON_COORDS_SIZE(64, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicYOffset = 9, .frontAnimFrames = sAnims_Beautifly, .frontAnimId = ANIM_V_SLIDE, .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 8 : 10, .backPic = gMonBackPic_Beautifly, - .backPicFemale = gMonBackPic_BeautiflyF, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = 0, .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, .palette = gMonPalette_Beautifly, .shinyPalette = gMonShinyPalette_Beautifly, .iconSprite = gMonIcon_Beautifly, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_BeautiflyF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), + .backPicFemale = gMonBackPic_BeautiflyF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-5, 12, SHADOW_SIZE_S) FOOTPRINT(Beautifly) OVERWORLD( @@ -1606,23 +1614,25 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Dustox, - .frontPicFemale = gMonFrontPic_DustoxF, .frontPicSize = MON_COORDS_SIZE(64, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 48), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 15 : 12, .frontAnimFrames = sAnims_Dustox, .frontAnimId = ANIM_V_JUMPS_H_JUMPS, .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 10 : 12, .backPic = gMonBackPic_Dustox, - .backPicFemale = gMonBackPic_DustoxF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 24) : MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 20 : 1, .backAnimId = BACK_ANIM_TRIANGLE_DOWN, .palette = gMonPalette_Dustox, .shinyPalette = gMonShinyPalette_Dustox, .iconSprite = gMonIcon_Dustox, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 5, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_DustoxF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 48), + .backPicFemale = gMonBackPic_DustoxF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Dustox) OVERWORLD( @@ -1814,22 +1824,24 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 268, .trainerOffset = -1, .frontPic = gMonFrontPic_Ludicolo, - .frontPicFemale = gMonFrontPic_LudicoloF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 64) : MON_COORDS_SIZE(56, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 64), .frontPicYOffset = 0, .frontAnimFrames = sAnims_Ludicolo, .frontAnimId = ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW, .backPic = gMonBackPic_Ludicolo, - .backPicFemale = gMonBackPic_LudicoloF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 48) : MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 10 : 6, .backAnimId = BACK_ANIM_CONCAVE_ARC_LARGE, .palette = gMonPalette_Ludicolo, .shinyPalette = gMonShinyPalette_Ludicolo, .iconSprite = gMonIcon_Ludicolo, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_LudicoloF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 64), + .backPicFemale = gMonBackPic_LudicoloF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(-3, 14, SHADOW_SIZE_M) FOOTPRINT(Ludicolo) OVERWORLD( @@ -1952,22 +1964,24 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Nuzleaf, - .frontPicFemale = gMonFrontPic_NuzleafF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(40, 48) : MON_COORDS_SIZE(40, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(40, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 8 : 7, .frontAnimFrames = sAnims_Nuzleaf, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_Nuzleaf, - .backPicFemale = gMonBackPic_NuzleafF, .backPicSize = MON_COORDS_SIZE(56, 48), - .backPicSizeFemale = MON_COORDS_SIZE(56, 48), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 10 : 9, .backAnimId = BACK_ANIM_V_SHAKE, .palette = gMonPalette_Nuzleaf, .shinyPalette = gMonShinyPalette_Nuzleaf, .iconSprite = gMonIcon_Nuzleaf, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_NuzleafF, + .frontPicSizeFemale = MON_COORDS_SIZE(40, 56), + .backPicFemale = gMonBackPic_NuzleafF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(-3, 5, SHADOW_SIZE_S) FOOTPRINT(Nuzleaf) OVERWORLD( @@ -2035,22 +2049,24 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Shiftry, - .frontPicFemale = gMonFrontPic_ShiftryF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 64) : MON_COORDS_SIZE(64, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 2 : 7, .frontAnimFrames = sAnims_Shiftry, .frontAnimId = ANIM_H_VIBRATE, .backPic = gMonBackPic_Shiftry, - .backPicFemale = gMonBackPic_ShiftryF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 48) : MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 8 : 9, .backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE, .palette = gMonPalette_Shiftry, .shinyPalette = gMonShinyPalette_Shiftry, .iconSprite = gMonIcon_Shiftry, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 5, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_ShiftryF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), + .backPicFemale = gMonBackPic_ShiftryF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(-5, 5, SHADOW_SIZE_M) FOOTPRINT(Shiftry) OVERWORLD( @@ -4560,22 +4576,24 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Meditite, - .frontPicFemale = gMonFrontPic_MedititeF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 40) : MON_COORDS_SIZE(48, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 48), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 12 : 10, .frontAnimFrames = sAnims_Meditite, .frontAnimId = ANIM_BOUNCE_ROTATE_TO_SIDES, .backPic = gMonBackPic_Meditite, - .backPicFemale = gMonBackPic_MedititeF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 48) : MON_COORDS_SIZE(48, 48), - .backPicSizeFemale = MON_COORDS_SIZE(48, 48), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 11 : 9, .backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE, .palette = gMonPalette_Meditite, .shinyPalette = gMonShinyPalette_Meditite, .iconSprite = gMonIcon_Meditite, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_MedititeF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 48), + .backPicFemale = gMonBackPic_MedititeF, + .backPicSizeFemale = MON_COORDS_SIZE(48, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Meditite) OVERWORLD( @@ -4633,22 +4651,24 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Medicham, - .frontPicFemale = gMonFrontPic_MedichamF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 64) : MON_COORDS_SIZE(40, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(40, 64), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 1 : 0, .frontAnimFrames = sAnims_Medicham, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE_SLOW, .backPic = gMonBackPic_Medicham, - .backPicFemale = gMonBackPic_MedichamF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 64) : MON_COORDS_SIZE(56, 64), - .backPicSizeFemale = MON_COORDS_SIZE(56, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 3 : 0, .backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE, .palette = gMonPalette_Medicham, .shinyPalette = gMonShinyPalette_Medicham, .iconSprite = gMonIcon_Medicham, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_MedichamF, + .frontPicSizeFemale = MON_COORDS_SIZE(40, 64), + .backPicFemale = gMonBackPic_MedichamF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-2, 13, SHADOW_SIZE_S) FOOTPRINT(Medicham) OVERWORLD( @@ -5302,22 +5322,24 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Roselia, - .frontPicFemale = gMonFrontPic_RoseliaF, .frontPicSize = MON_COORDS_SIZE(56, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 48), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 8 : 11, .frontAnimFrames = sAnims_Roselia, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE_SLOW, .backPic = gMonBackPic_Roselia, - .backPicFemale = gMonBackPic_RoseliaF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 48) : MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = 8, .backAnimId = BACK_ANIM_SHAKE_GLOW_GREEN, .palette = gMonPalette_Roselia, .shinyPalette = gMonShinyPalette_Roselia, .iconSprite = gMonIcon_Roselia, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 4, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_RoseliaF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 48), + .backPicFemale = gMonBackPic_RoseliaF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Roselia) OVERWORLD( @@ -5386,22 +5408,24 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Roserade, - .frontPicFemale = gMonFrontPic_RoseradeF, .frontPicSize = MON_COORDS_SIZE(48, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 56), .frontPicYOffset = 7, .frontAnimFrames = sAnims_Roserade, .frontAnimId = ANIM_H_VIBRATE, .backPic = gMonBackPic_Roserade, - .backPicFemale = gMonBackPic_RoseradeF, .backPicSize = MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = 6, .backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE, .palette = gMonPalette_Roserade, .shinyPalette = gMonShinyPalette_Roserade, .iconSprite = gMonIcon_Roserade, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_RoseradeF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 56), + .backPicFemale = gMonBackPic_RoseradeF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Roserade) OVERWORLD( @@ -5462,22 +5486,24 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Gulpin, - .frontPicFemale = gMonFrontPic_GulpinF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(40, 40) : MON_COORDS_SIZE(40, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(40, 48), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 18 : 15, .frontAnimFrames = sAnims_Gulpin, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_Gulpin, - .backPicFemale = gMonBackPic_GulpinF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(56, 48), - .backPicSizeFemale = MON_COORDS_SIZE(56, 48), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 11 : 9, .backAnimId = BACK_ANIM_V_STRETCH, .palette = gMonPalette_Gulpin, .shinyPalette = gMonShinyPalette_Gulpin, .iconSprite = gMonIcon_Gulpin, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_GulpinF, + .frontPicSizeFemale = MON_COORDS_SIZE(40, 48), + .backPicFemale = gMonBackPic_GulpinF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(1, -2, SHADOW_SIZE_S) FOOTPRINT(Gulpin) OVERWORLD( @@ -5537,22 +5563,24 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 345, .trainerOffset = 3, .frontPic = gMonFrontPic_Swalot, - .frontPicFemale = gMonFrontPic_SwalotF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(56, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 8 : 5, .frontAnimFrames = sAnims_Swalot, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE_SLOW, .backPic = gMonBackPic_Swalot, - .backPicFemale = gMonBackPic_SwalotF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(56, 56) : MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 6 : 2, .backAnimId = BACK_ANIM_V_STRETCH, .palette = gMonPalette_Swalot, .shinyPalette = gMonShinyPalette_Swalot, .iconSprite = gMonIcon_Swalot, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_SwalotF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .backPicFemale = gMonBackPic_SwalotF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(4, 3, SHADOW_SIZE_L) FOOTPRINT(Swalot) OVERWORLD( @@ -5931,22 +5959,24 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Numel, - .frontPicFemale = gMonFrontPic_NumelF, .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 40) : MON_COORDS_SIZE(40, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(40, 48), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 15 : 9, .frontAnimFrames = sAnims_Numel, .frontAnimId = ANIM_V_SLIDE, .backPic = gMonBackPic_Numel, - .backPicFemale = gMonBackPic_NumelF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 48) : MON_COORDS_SIZE(56, 56), - .backPicSizeFemale = MON_COORDS_SIZE(56, 56), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 11 : 6, .backAnimId = BACK_ANIM_V_SHAKE_LOW, .palette = gMonPalette_Numel, .shinyPalette = gMonShinyPalette_Numel, .iconSprite = gMonIcon_Numel, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_NumelF, + .frontPicSizeFemale = MON_COORDS_SIZE(40, 48), + .backPicFemale = gMonBackPic_NumelF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(4, 2, SHADOW_SIZE_S) FOOTPRINT(Numel) OVERWORLD( @@ -6009,22 +6039,24 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 345, .trainerOffset = 6, .frontPic = gMonFrontPic_Camerupt, - .frontPicFemale = gMonFrontPic_CameruptF, .frontPicSize = MON_COORDS_SIZE(64, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 9 : 6, .frontAnimFrames = sAnims_Camerupt, .frontAnimId = ANIM_V_SHAKE, .backPic = gMonBackPic_Camerupt, - .backPicFemale = gMonBackPic_CameruptF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 32) : MON_COORDS_SIZE(64, 40), - .backPicSizeFemale = MON_COORDS_SIZE(64, 40), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 19 : 13, .backAnimId = BACK_ANIM_SHAKE_GLOW_RED, .palette = gMonPalette_Camerupt, .shinyPalette = gMonShinyPalette_Camerupt, .iconSprite = gMonIcon_Camerupt, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_CameruptF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), + .backPicFemale = gMonBackPic_CameruptF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 40), +#endif //P_GENDER_DIFFERENCES SHADOW(2, 4, SHADOW_SIZE_L) FOOTPRINT(Camerupt) OVERWORLD( @@ -6684,9 +6716,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Cacturne, - .frontPicFemale = gMonFrontPic_CacturneF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 0, .frontAnimFrames = sAnims_Cacturne, .frontAnimId = ANIM_V_SLIDE, @@ -6698,6 +6728,10 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Cacturne, .iconSprite = gMonIcon_Cacturne, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_CacturneF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 14, SHADOW_SIZE_M) FOOTPRINT(Cacturne) OVERWORLD( @@ -7962,23 +7996,25 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 360, .trainerOffset = 7, .frontPic = gMonFrontPic_Milotic, - .frontPicFemale = gMonFrontPic_MiloticF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 0 : 2, .frontAnimFrames = sAnims_Milotic, .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_GLOW_BLUE : ANIM_CIRCULAR_STRETCH_TWICE, .frontAnimDelay = 45, .backPic = gMonBackPic_Milotic, - .backPicFemale = gMonBackPic_MiloticF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 64) : MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 2 : 0, .backAnimId = BACK_ANIM_SHAKE_GLOW_BLUE, .palette = gMonPalette_Milotic, .shinyPalette = gMonShinyPalette_Milotic, .iconSprite = gMonIcon_Milotic, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_MiloticF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_MiloticF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Milotic) OVERWORLD( @@ -9797,22 +9833,24 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Relicanth, - .frontPicFemale = gMonFrontPic_RelicanthF, .frontPicSize = MON_COORDS_SIZE(56, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 11 : 8, .frontAnimFrames = sAnims_Relicanth, .frontAnimId = ANIM_TIP_MOVE_FORWARD, .backPic = gMonBackPic_Relicanth, - .backPicFemale = gMonBackPic_RelicanthF, .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(64, 48) : MON_COORDS_SIZE(64, 40), - .backPicSizeFemale = MON_COORDS_SIZE(64, 40), .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 10 : 12, .backAnimId = BACK_ANIM_H_SLIDE, .palette = gMonPalette_Relicanth, .shinyPalette = gMonShinyPalette_Relicanth, .iconSprite = gMonIcon_Relicanth, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_RelicanthF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .backPicFemale = gMonBackPic_RelicanthF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 40), +#endif //P_GENDER_DIFFERENCES SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Relicanth) OVERWORLD( diff --git a/src/data/pokemon/species_info/gen_4_families.h b/src/data/pokemon/species_info/gen_4_families.h index 302c182cd5..b84284de29 100644 --- a/src/data/pokemon/species_info/gen_4_families.h +++ b/src/data/pokemon/species_info/gen_4_families.h @@ -645,22 +645,24 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Starly, - .frontPicFemale = gMonFrontPic_StarlyF, .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicSizeFemale = MON_COORDS_SIZE(40, 40), .frontPicYOffset = 12, .frontAnimFrames = sAnims_Starly, .frontAnimId = ANIM_V_STRETCH, .backPic = gMonBackPic_Starly, - .backPicFemale = gMonBackPic_StarlyF, .backPicSize = MON_COORDS_SIZE(56, 48), - .backPicSizeFemale = MON_COORDS_SIZE(56, 48), .backPicYOffset = 11, .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, .palette = gMonPalette_Starly, .shinyPalette = gMonShinyPalette_Starly, .iconSprite = gMonIcon_Starly, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_StarlyF, + .frontPicSizeFemale = MON_COORDS_SIZE(40, 40), + .backPicFemale = gMonBackPic_StarlyF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Starly) OVERWORLD( @@ -718,22 +720,24 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Staravia, - .frontPicFemale = gMonFrontPic_StaraviaF, .frontPicSize = MON_COORDS_SIZE(40, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(40, 48), .frontPicYOffset = 8, .frontAnimFrames = sAnims_Staravia, .frontAnimId = ANIM_V_STRETCH, .backPic = gMonBackPic_Staravia, - .backPicFemale = gMonBackPic_StaraviaF, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = 6, .backAnimId = BACK_ANIM_TRIANGLE_DOWN, .palette = gMonPalette_Staravia, .shinyPalette = gMonShinyPalette_Staravia, .iconSprite = gMonIcon_Staravia, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_StaraviaF, + .frontPicSizeFemale = MON_COORDS_SIZE(40, 48), + .backPicFemale = gMonBackPic_StaraviaF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Staravia) OVERWORLD( @@ -798,9 +802,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Staraptor, - .frontPicFemale = gMonFrontPic_StaraptorF, .frontPicSize = MON_COORDS_SIZE(56, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 64), .frontPicYOffset = 3, .frontAnimFrames = sAnims_Staraptor, .frontAnimId = ANIM_V_SHAKE, @@ -812,6 +814,10 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Staraptor, .iconSprite = gMonIcon_Staraptor, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_StaraptorF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(1, 10, SHADOW_SIZE_M) FOOTPRINT(Staraptor) OVERWORLD( @@ -869,22 +875,24 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Bidoof, - .frontPicFemale = gMonFrontPic_BidoofF, .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicSizeFemale = MON_COORDS_SIZE(40, 40), .frontPicYOffset = 12, .frontAnimFrames = sAnims_Bidoof, .frontAnimId = ANIM_H_SLIDE_SLOW, .backPic = gMonBackPic_Bidoof, - .backPicFemale = gMonBackPic_BidoofF, .backPicSize = MON_COORDS_SIZE(64, 40), - .backPicSizeFemale = MON_COORDS_SIZE(64, 40), .backPicYOffset = 13, .backAnimId = BACK_ANIM_V_SHAKE_H_SLIDE, .palette = gMonPalette_Bidoof, .shinyPalette = gMonShinyPalette_Bidoof, .iconSprite = gMonIcon_Bidoof, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_BidoofF, + .frontPicSizeFemale = MON_COORDS_SIZE(40, 40), + .backPicFemale = gMonBackPic_BidoofF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 40), +#endif //P_GENDER_DIFFERENCES SHADOW(1, 1, SHADOW_SIZE_M) FOOTPRINT(Bidoof) OVERWORLD( @@ -942,9 +950,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 257, .trainerOffset = 0, .frontPic = gMonFrontPic_Bibarel, - .frontPicFemale = gMonFrontPic_BibarelF, .frontPicSize = MON_COORDS_SIZE(56, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 48), .frontPicYOffset = 8, .frontAnimFrames = sAnims_Bibarel, .frontAnimId = ANIM_GROW_VIBRATE, @@ -956,6 +962,10 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Bibarel, .iconSprite = gMonIcon_Bibarel, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_BibarelF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(-5, 5, SHADOW_SIZE_M) FOOTPRINT(Bibarel) OVERWORLD( @@ -1014,22 +1024,24 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Kricketot, - .frontPicFemale = gMonFrontPic_KricketotF, .frontPicSize = MON_COORDS_SIZE(48, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 48), .frontPicYOffset = 11, .frontAnimFrames = sAnims_Kricketot, .frontAnimId = ANIM_H_JUMPS, .backPic = gMonBackPic_Kricketot, - .backPicFemale = gMonBackPic_KricketotF, .backPicSize = MON_COORDS_SIZE(48, 56), - .backPicSizeFemale = MON_COORDS_SIZE(48, 56), .backPicYOffset = 6, .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, .palette = gMonPalette_Kricketot, .shinyPalette = gMonShinyPalette_Kricketot, .iconSprite = gMonIcon_Kricketot, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_KricketotF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 48), + .backPicFemale = gMonBackPic_KricketotF, + .backPicSizeFemale = MON_COORDS_SIZE(48, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(-5, 2, SHADOW_SIZE_S) FOOTPRINT(Kricketot) OVERWORLD( @@ -1088,22 +1100,24 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 257, .trainerOffset = 0, .frontPic = gMonFrontPic_Kricketune, - .frontPicFemale = gMonFrontPic_KricketuneF, .frontPicSize = MON_COORDS_SIZE(56, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), .frontPicYOffset = 7, .frontAnimFrames = sAnims_Kricketune, .frontAnimId = ANIM_H_SLIDE_SLOW, .backPic = gMonBackPic_Kricketune, - .backPicFemale = gMonBackPic_KricketuneF, .backPicSize = MON_COORDS_SIZE(56, 64), - .backPicSizeFemale = MON_COORDS_SIZE(56, 64), .backPicYOffset = 3, .backAnimId = BACK_ANIM_H_VIBRATE, .palette = gMonPalette_Kricketune, .shinyPalette = gMonShinyPalette_Kricketune, .iconSprite = gMonIcon_Kricketune, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_KricketuneF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .backPicFemale = gMonBackPic_KricketuneF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-3, 6, SHADOW_SIZE_S) FOOTPRINT(Kricketune) OVERWORLD( @@ -1161,22 +1175,24 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Shinx, - .frontPicFemale = gMonFrontPic_ShinxF, .frontPicSize = MON_COORDS_SIZE(48, 40), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 40), .frontPicYOffset = 13, .frontAnimFrames = sAnims_Shinx, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_Shinx, - .backPicFemale = gMonBackPic_ShinxF, .backPicSize = MON_COORDS_SIZE(64, 48), - .backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicYOffset = 8, .backAnimId = BACK_ANIM_JOLT_RIGHT, .palette = gMonPalette_Shinx, .shinyPalette = gMonShinyPalette_Shinx, .iconSprite = gMonIcon_Shinx, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_ShinxF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 40), + .backPicFemale = gMonBackPic_ShinxF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Shinx) OVERWORLD( @@ -1234,22 +1250,24 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Luxio, - .frontPicFemale = gMonFrontPic_LuxioF, .frontPicSize = MON_COORDS_SIZE(48, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 48), .frontPicYOffset = 10, .frontAnimFrames = sAnims_Luxio, .frontAnimId = ANIM_H_STRETCH, .backPic = gMonBackPic_Luxio, - .backPicFemale = gMonBackPic_LuxioF, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = 4, .backAnimId = BACK_ANIM_JOLT_RIGHT, .palette = gMonPalette_Luxio, .shinyPalette = gMonShinyPalette_Luxio, .iconSprite = gMonIcon_Luxio, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_LuxioF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 48), + .backPicFemale = gMonBackPic_LuxioF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-4, 2, SHADOW_SIZE_M) FOOTPRINT(Luxio) OVERWORLD( @@ -1312,22 +1330,24 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 262, .trainerOffset = 0, .frontPic = gMonFrontPic_Luxray, - .frontPicFemale = gMonFrontPic_LuxrayF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 2, .frontAnimFrames = sAnims_Luxray, .frontAnimId = ANIM_GLOW_YELLOW, .backPic = gMonBackPic_Luxray, - .backPicFemale = gMonBackPic_LuxrayF, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = 0, .backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE, .palette = gMonPalette_Luxray, .shinyPalette = gMonShinyPalette_Luxray, .iconSprite = gMonIcon_Luxray, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_LuxrayF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_LuxrayF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 10, SHADOW_SIZE_L) FOOTPRINT(Luxray) OVERWORLD( @@ -2109,11 +2129,13 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicYOffset = 22, .backAnimId = BACK_ANIM_TRIANGLE_DOWN, .palette = gMonPalette_Combee, - .paletteFemale = gMonPalette_CombeeF, .shinyPalette = gMonShinyPalette_Combee, - .shinyPaletteFemale = gMonShinyPalette_CombeeF, .iconSprite = gMonIcon_Combee, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .paletteFemale = gMonPalette_CombeeF, + .shinyPaletteFemale = gMonShinyPalette_CombeeF, +#endif //P_GENDER_DIFFERENCES SHADOW(-4, 10, SHADOW_SIZE_S) FOOTPRINT(Combee) OVERWORLD( @@ -2237,9 +2259,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Pachirisu, - .frontPicFemale = gMonFrontPic_PachirisuF, .frontPicSize = MON_COORDS_SIZE(48, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 56), .frontPicYOffset = 12, .frontAnimFrames = sAnims_Pachirisu, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, @@ -2251,6 +2271,10 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Pachirisu, .iconSprite = gMonIcon_Pachirisu, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_PachirisuF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Pachirisu) OVERWORLD( @@ -2314,15 +2338,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .frontAnimFrames = sAnims_Buizel, .frontAnimId = ANIM_GROW_VIBRATE, .backPic = gMonBackPic_Buizel, - .backPicFemale = gMonBackPic_BuizelF, .backPicSize = MON_COORDS_SIZE(64, 48), - .backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicYOffset = 9, .backAnimId = BACK_ANIM_H_SLIDE, .palette = gMonPalette_Buizel, .shinyPalette = gMonShinyPalette_Buizel, .iconSprite = gMonIcon_Buizel, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .backPicFemale = gMonBackPic_BuizelF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(1, 4, SHADOW_SIZE_S) FOOTPRINT(Buizel) OVERWORLD( @@ -2385,15 +2411,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .frontAnimFrames = sAnims_Floatzel, .frontAnimId = ANIM_H_JUMPS_V_STRETCH, .backPic = gMonBackPic_Floatzel, - .backPicFemale = gMonBackPic_FloatzelF, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = 6, .backAnimId = BACK_ANIM_V_STRETCH, .palette = gMonPalette_Floatzel, .shinyPalette = gMonShinyPalette_Floatzel, .iconSprite = gMonIcon_Floatzel, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .backPicFemale = gMonBackPic_FloatzelF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-4, 10, SHADOW_SIZE_M) FOOTPRINT(Floatzel) OVERWORLD( @@ -3717,22 +3745,24 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Gible, - .frontPicFemale = gMonFrontPic_GibleF, .frontPicSize = MON_COORDS_SIZE(48, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(48, 48), .frontPicYOffset = 9, .frontAnimFrames = sAnims_Gible, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_Gible, - .backPicFemale = gMonBackPic_GibleF, .backPicSize = MON_COORDS_SIZE(56, 48), - .backPicSizeFemale = MON_COORDS_SIZE(56, 48), .backPicYOffset = 9, .backAnimId = BACK_ANIM_H_SHAKE, .palette = gMonPalette_Gible, .shinyPalette = gMonShinyPalette_Gible, .iconSprite = gMonIcon_Gible, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_GibleF, + .frontPicSizeFemale = MON_COORDS_SIZE(48, 48), + .backPicFemale = gMonBackPic_GibleF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 48), +#endif //P_GENDER_DIFFERENCES SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Gible) OVERWORLD( @@ -3790,22 +3820,24 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 262, .trainerOffset = 0, .frontPic = gMonFrontPic_Gabite, - .frontPicFemale = gMonFrontPic_GabiteF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 2, .frontAnimFrames = sAnims_Gabite, .frontAnimId = ANIM_V_STRETCH, .backPic = gMonBackPic_Gabite, - .backPicFemale = gMonBackPic_GabiteF, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = 3, .backAnimId = BACK_ANIM_V_SHAKE, .palette = gMonPalette_Gabite, .shinyPalette = gMonShinyPalette_Gabite, .iconSprite = gMonIcon_Gabite, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_GabiteF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_GabiteF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(3, 8, SHADOW_SIZE_M) FOOTPRINT(Gabite) OVERWORLD( @@ -3868,9 +3900,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 326, .trainerOffset = 4, .frontPic = gMonFrontPic_Garchomp, - .frontPicFemale = gMonFrontPic_GarchompF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 0, .frontAnimFrames = sAnims_Garchomp, .frontAnimId = ANIM_V_SHAKE_TWICE, @@ -3882,6 +3912,10 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Garchomp, .iconSprite = gMonIcon_Garchomp, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_GarchompF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(5, 11, SHADOW_SIZE_L) FOOTPRINT(Garchomp) OVERWORLD( @@ -4196,15 +4230,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicYOffset = 14, .backAnimId = BACK_ANIM_H_SLIDE, .palette = gMonPalette_Hippopotas, - .paletteFemale = gMonPalette_HippopotasF, .shinyPalette = gMonShinyPalette_Hippopotas, - .shinyPaletteFemale = gMonShinyPalette_HippopotasF, .iconSprite = gMonIcon_Hippopotas, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .paletteFemale = gMonPalette_HippopotasF, + .shinyPaletteFemale = gMonShinyPalette_HippopotasF, #if P_CUSTOM_GENDER_DIFF_ICONS == TRUE .iconSpriteFemale = gMonIcon_HippopotasF, .iconPalIndexFemale = 1, #endif +#endif //P_GENDER_DIFFERENCES SHADOW(2, -1, SHADOW_SIZE_L) FOOTPRINT(Hippopotas) OVERWORLD( @@ -4271,15 +4307,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicYOffset = 6, .backAnimId = BACK_ANIM_V_SHAKE_LOW, .palette = gMonPalette_Hippowdon, - .paletteFemale = gMonPalette_HippowdonF, .shinyPalette = gMonShinyPalette_Hippowdon, - .shinyPaletteFemale = gMonShinyPalette_HippowdonF, .iconSprite = gMonIcon_Hippowdon, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .paletteFemale = gMonPalette_HippowdonF, + .shinyPaletteFemale = gMonShinyPalette_HippowdonF, #if P_CUSTOM_GENDER_DIFF_ICONS == TRUE .iconSpriteFemale = gMonIcon_HippowdonF, .iconPalIndexFemale = 1, #endif +#endif //P_GENDER_DIFFERENCES NO_SHADOW FOOTPRINT(Hippowdon) OVERWORLD( @@ -4464,22 +4502,24 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Croagunk, - .frontPicFemale = gMonFrontPic_CroagunkF, .frontPicSize = MON_COORDS_SIZE(40, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(40, 48), .frontPicYOffset = 9, .frontAnimFrames = sAnims_Croagunk, .frontAnimId = ANIM_RAPID_H_HOPS, .backPic = gMonBackPic_Croagunk, - .backPicFemale = gMonBackPic_CroagunkF, .backPicSize = MON_COORDS_SIZE(56, 56), - .backPicSizeFemale = MON_COORDS_SIZE(56, 56), .backPicYOffset = 6, .backAnimId = BACK_ANIM_GROW, .palette = gMonPalette_Croagunk, .shinyPalette = gMonShinyPalette_Croagunk, .iconSprite = gMonIcon_Croagunk, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_CroagunkF, + .frontPicSizeFemale = MON_COORDS_SIZE(40, 48), + .backPicFemale = gMonBackPic_CroagunkF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(2, 4, SHADOW_SIZE_S) FOOTPRINT(Croagunk) OVERWORLD( @@ -4538,22 +4578,24 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Toxicroak, - .frontPicFemale = gMonFrontPic_ToxicroakF, .frontPicSize = MON_COORDS_SIZE(56, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), .frontPicYOffset = 5, .frontAnimFrames = sAnims_Toxicroak, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_Toxicroak, - .backPicFemale = gMonBackPic_ToxicroakF, .backPicSize = MON_COORDS_SIZE(56, 56), - .backPicSizeFemale = MON_COORDS_SIZE(56, 56), .backPicYOffset = 6, .backAnimId = BACK_ANIM_V_SHAKE_H_SLIDE, .palette = gMonPalette_Toxicroak, .shinyPalette = gMonShinyPalette_Toxicroak, .iconSprite = gMonIcon_Toxicroak, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_ToxicroakF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .backPicFemale = gMonBackPic_ToxicroakF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(3, 7, SHADOW_SIZE_M) FOOTPRINT(Toxicroak) OVERWORLD( @@ -4676,22 +4718,24 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Finneon, - .frontPicFemale = gMonFrontPic_FinneonF, .frontPicSize = MON_COORDS_SIZE(32, 40), - .frontPicSizeFemale = MON_COORDS_SIZE(32, 40), .frontPicYOffset = 14, .frontAnimFrames = sAnims_Finneon, .frontAnimId = ANIM_V_SLIDE_WOBBLE_SMALL, .backPic = gMonBackPic_Finneon, - .backPicFemale = gMonBackPic_FinneonF, .backPicSize = MON_COORDS_SIZE(56, 40), - .backPicSizeFemale = MON_COORDS_SIZE(56, 40), .backPicYOffset = 12, .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, .palette = gMonPalette_Finneon, .shinyPalette = gMonShinyPalette_Finneon, .iconSprite = gMonIcon_Finneon, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_FinneonF, + .frontPicSizeFemale = MON_COORDS_SIZE(32, 40), + .backPicFemale = gMonBackPic_FinneonF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 40), +#endif //P_GENDER_DIFFERENCES SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Finneon) OVERWORLD( @@ -4749,22 +4793,24 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Lumineon, - .frontPicFemale = gMonFrontPic_LumineonF, .frontPicSize = MON_COORDS_SIZE(56, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), .frontPicYOffset = 6, .frontAnimFrames = sAnims_Lumineon, .frontAnimId = ANIM_H_STRETCH, .backPic = gMonBackPic_Lumineon, - .backPicFemale = gMonBackPic_LumineonF, .backPicSize = MON_COORDS_SIZE(56, 64), - .backPicSizeFemale = MON_COORDS_SIZE(56, 64), .backPicYOffset = 0, .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, .palette = gMonPalette_Lumineon, .shinyPalette = gMonShinyPalette_Lumineon, .iconSprite = gMonIcon_Lumineon, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_LumineonF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .backPicFemale = gMonBackPic_LumineonF, + .backPicSizeFemale = MON_COORDS_SIZE(56, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Lumineon) OVERWORLD( @@ -4823,22 +4869,24 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 257, .trainerOffset = 0, .frontPic = gMonFrontPic_Snover, - .frontPicFemale = gMonFrontPic_SnoverF, .frontPicSize = MON_COORDS_SIZE(64, 48), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 48), .frontPicYOffset = 10, .frontAnimFrames = sAnims_Snover, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_Snover, - .backPicFemale = gMonBackPic_SnoverF, .backPicSize = MON_COORDS_SIZE(64, 56), - .backPicSizeFemale = MON_COORDS_SIZE(64, 56), .backPicYOffset = 6, .backAnimId = BACK_ANIM_V_STRETCH, .palette = gMonPalette_Snover, .shinyPalette = gMonShinyPalette_Snover, .iconSprite = gMonIcon_Snover, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_SnoverF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 48), + .backPicFemale = gMonBackPic_SnoverF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 56), +#endif //P_GENDER_DIFFERENCES SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Snover) OVERWORLD( @@ -4898,9 +4946,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .trainerScale = 348, .trainerOffset = 6, .frontPic = gMonFrontPic_Abomasnow, - .frontPicFemale = gMonFrontPic_AbomasnowF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 0, .frontAnimFrames = sAnims_Abomasnow, .frontAnimId = ANIM_H_SHAKE, @@ -4912,6 +4958,10 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Abomasnow, .iconSprite = gMonIcon_Abomasnow, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_AbomasnowF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), +#endif //P_GENDER_DIFFERENCES SHADOW(0, 11, SHADOW_SIZE_L) FOOTPRINT(Abomasnow) OVERWORLD( diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h index 7fe2a5008f..052b0f40c5 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -1822,26 +1822,28 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Unfezant, - .frontPicFemale = gMonFrontPic_UnfezantF, .frontPicSize = MON_COORDS_SIZE(56, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 64), .frontPicYOffset = 0, .frontAnimFrames = sAnims_Unfezant, .frontAnimId = ANIM_SHRINK_GROW, .backPic = gMonBackPic_Unfezant, - .backPicFemale = gMonBackPic_UnfezantF, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = 1, .backAnimId = BACK_ANIM_V_STRETCH, .palette = gMonPalette_Unfezant, - .paletteFemale = gMonPalette_UnfezantF, .shinyPalette = gMonShinyPalette_Unfezant, - .shinyPaletteFemale = gMonShinyPalette_UnfezantF, .iconSprite = gMonIcon_Unfezant, - .iconSpriteFemale = gMonIcon_UnfezantF, .iconPalIndex = 1, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_UnfezantF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 64), + .backPicFemale = gMonBackPic_UnfezantF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), + .paletteFemale = gMonPalette_UnfezantF, + .shinyPaletteFemale = gMonShinyPalette_UnfezantF, + .iconSpriteFemale = gMonIcon_UnfezantF, .iconPalIndexFemale = 1, +#endif //P_GENDER_DIFFERENCES SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Unfezant) OVERWORLD( @@ -7796,26 +7798,28 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .trainerScale = 256, .trainerOffset = 0, .frontPic = gMonFrontPic_Frillish, - .frontPicFemale = gMonFrontPic_FrillishF, .frontPicSize = MON_COORDS_SIZE(56, 56), - .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), .frontPicYOffset = 5, .frontAnimFrames = sAnims_Frillish, .frontAnimId = ANIM_RISING_WOBBLE, .backPic = gMonBackPic_Frillish, - .backPicFemale = gMonBackPic_FrillishF, .backPicSize = MON_COORDS_SIZE(40, 56), - .backPicSizeFemale = MON_COORDS_SIZE(40, 56), .backPicYOffset = 7, .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, .palette = gMonPalette_Frillish, - .paletteFemale = gMonPalette_FrillishF, .shinyPalette = gMonShinyPalette_Frillish, - .shinyPaletteFemale = gMonShinyPalette_FrillishF, .iconSprite = gMonIcon_Frillish, - .iconSpriteFemale = gMonIcon_FrillishF, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_FrillishF, + .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .backPicFemale = gMonBackPic_FrillishF, + .backPicSizeFemale = MON_COORDS_SIZE(40, 56), + .paletteFemale = gMonPalette_FrillishF, + .shinyPaletteFemale = gMonShinyPalette_FrillishF, + .iconSpriteFemale = gMonIcon_FrillishF, .iconPalIndexFemale = 1, +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Frillish) OVERWORLD( @@ -7875,26 +7879,28 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .trainerScale = 348, .trainerOffset = 6, .frontPic = gMonFrontPic_Jellicent, - .frontPicFemale = gMonFrontPic_JellicentF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 3, .frontAnimFrames = sAnims_Jellicent, .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_Jellicent, - .backPicFemale = gMonBackPic_JellicentF, .backPicSize = MON_COORDS_SIZE(64, 48), - .backPicSizeFemale = MON_COORDS_SIZE(64, 48), .backPicYOffset = 10, .backAnimId = BACK_ANIM_GROW_STUTTER, .palette = gMonPalette_Jellicent, - .paletteFemale = gMonPalette_JellicentF, .shinyPalette = gMonShinyPalette_Jellicent, - .shinyPaletteFemale = gMonShinyPalette_JellicentF, .iconSprite = gMonIcon_Jellicent, - .iconSpriteFemale = gMonIcon_JellicentF, .iconPalIndex = 0, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_JellicentF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_JellicentF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 48), + .paletteFemale = gMonPalette_JellicentF, + .shinyPaletteFemale = gMonShinyPalette_JellicentF, + .iconSpriteFemale = gMonIcon_JellicentF, .iconPalIndexFemale = 1, +#endif //P_GENDER_DIFFERENCES SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Jellicent) OVERWORLD( diff --git a/src/data/pokemon/species_info/gen_6_families.h b/src/data/pokemon/species_info/gen_6_families.h index 36ea31e75e..147fadbaf8 100644 --- a/src/data/pokemon/species_info/gen_6_families.h +++ b/src/data/pokemon/species_info/gen_6_families.h @@ -1496,24 +1496,26 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .trainerScale = 271, .trainerOffset = 0, .frontPic = gMonFrontPic_Pyroar, - .frontPicFemale = gMonFrontPic_PyroarF, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), .frontPicYOffset = 0, .frontAnimFrames = sAnims_Pyroar, .frontAnimId = ANIM_V_SHAKE, .backPic = gMonBackPic_Pyroar, - .backPicFemale = gMonBackPic_PyroarF, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicSizeFemale = MON_COORDS_SIZE(64, 64), .backPicYOffset = 3, .backAnimId = BACK_ANIM_H_STRETCH, .palette = gMonPalette_Pyroar, .shinyPalette = gMonShinyPalette_Pyroar, .iconSprite = gMonIcon_Pyroar, - .iconSpriteFemale = gMonIcon_PyroarF, .iconPalIndex = 2, +#if P_GENDER_DIFFERENCES + .frontPicFemale = gMonFrontPic_PyroarF, + .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), + .backPicFemale = gMonBackPic_PyroarF, + .backPicSizeFemale = MON_COORDS_SIZE(64, 64), + .iconSpriteFemale = gMonIcon_PyroarF, .iconPalIndexFemale = 2, +#endif //P_GENDER_DIFFERENCES SHADOW(-2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Pyroar) OVERWORLD( diff --git a/src/decompress.c b/src/decompress.c index 30337f5a8d..284bce48d3 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -130,18 +130,24 @@ void LoadSpecialPokePic(void *dest, s32 species, u32 personality, bool8 isFrontP if (isFrontPic) { + #if P_GENDER_DIFFERENCES if (gSpeciesInfo[species].frontPicFemale != NULL && IsPersonalityFemale(species, personality)) LZ77UnCompWram(gSpeciesInfo[species].frontPicFemale, dest); - else if (gSpeciesInfo[species].frontPic != NULL) + else + #endif + if (gSpeciesInfo[species].frontPic != NULL) LZ77UnCompWram(gSpeciesInfo[species].frontPic, dest); else LZ77UnCompWram(gSpeciesInfo[SPECIES_NONE].frontPic, dest); } else { + #if P_GENDER_DIFFERENCES if (gSpeciesInfo[species].backPicFemale != NULL && IsPersonalityFemale(species, personality)) LZ77UnCompWram(gSpeciesInfo[species].backPicFemale, dest); - else if (gSpeciesInfo[species].backPic != NULL) + else + #endif + if (gSpeciesInfo[species].backPic != NULL) LZ77UnCompWram(gSpeciesInfo[species].backPic, dest); else LZ77UnCompWram(gSpeciesInfo[SPECIES_NONE].backPic, dest); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index f1aefbb046..47640b8f4e 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1999,11 +1999,13 @@ static const struct ObjectEventGraphicsInfo *SpeciesToGraphicsInfo(u16 species, graphicsInfo = &gSpeciesInfo[form ? SPECIES_UNOWN_B + form - 1 : species].overworldData; break; default: + #if P_GENDER_DIFFERENCES if (form == 1 && gSpeciesInfo[species].overworldDataFemale.paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) { graphicsInfo = &gSpeciesInfo[species].overworldDataFemale; } else + #endif { graphicsInfo = &gSpeciesInfo[species].overworldData; } @@ -2037,6 +2039,7 @@ static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool32 shiny) if ((paletteNum = IndexOfSpritePaletteTag(palTag)) < 16) return paletteNum; spritePalette.tag = palTag; + #if P_GENDER_DIFFERENCES if (female && gSpeciesInfo[species].overworldPaletteFemale != NULL) { if (shiny) @@ -2045,6 +2048,7 @@ static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool32 shiny) spritePalette.data = gSpeciesInfo[species].overworldPaletteFemale; } else + #endif { if (shiny) spritePalette.data = gSpeciesInfo[species].overworldShinyPalette; diff --git a/src/pokemon.c b/src/pokemon.c index 242d28d664..c8ebdb7fff 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5811,18 +5811,24 @@ const u32 *GetMonSpritePalFromSpecies(u16 species, bool32 isShiny, bool32 isFema if (isShiny) { + #if P_GENDER_DIFFERENCES if (gSpeciesInfo[species].shinyPaletteFemale != NULL && isFemale) return gSpeciesInfo[species].shinyPaletteFemale; - else if (gSpeciesInfo[species].shinyPalette != NULL) + else + #endif + if (gSpeciesInfo[species].shinyPalette != NULL) return gSpeciesInfo[species].shinyPalette; else return gSpeciesInfo[SPECIES_NONE].shinyPalette; } else { + #if P_GENDER_DIFFERENCES if (gSpeciesInfo[species].paletteFemale != NULL && isFemale) return gSpeciesInfo[species].paletteFemale; - else if (gSpeciesInfo[species].palette != NULL) + else + #endif + if (gSpeciesInfo[species].palette != NULL) return gSpeciesInfo[species].palette; else return gSpeciesInfo[SPECIES_NONE].palette; @@ -6676,12 +6682,14 @@ void TrySpecialOverworldEvo(void) bool32 SpeciesHasGenderDifferences(u16 species) { +#if P_GENDER_DIFFERENCES if (gSpeciesInfo[species].frontPicFemale != NULL || gSpeciesInfo[species].backPicFemale != NULL || gSpeciesInfo[species].paletteFemale != NULL || gSpeciesInfo[species].shinyPaletteFemale != NULL || gSpeciesInfo[species].iconSpriteFemale != NULL) return TRUE; +#endif return FALSE; } diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 639f24327a..00aa93ffc7 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -150,8 +150,10 @@ u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u if (species > NUM_SPECIES) iconTemplate.paletteTag = POKE_ICON_BASE_PAL_TAG; +#if P_GENDER_DIFFERENCES else if (gSpeciesInfo[species].iconSpriteFemale != NULL && IsPersonalityFemale(species, personality)) iconTemplate.paletteTag = POKE_ICON_BASE_PAL_TAG + gSpeciesInfo[species].iconPalIndexFemale; +#endif spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority); @@ -244,9 +246,11 @@ void LoadMonIconPalettePersonality(u16 species, u32 personality) { u8 palIndex; species = SanitizeSpeciesId(species); +#if P_GENDER_DIFFERENCES if (gSpeciesInfo[species].iconSpriteFemale != NULL && IsPersonalityFemale(species, personality)) palIndex = gSpeciesInfo[species].iconPalIndexFemale; else +#endif palIndex = gSpeciesInfo[species].iconPalIndex; if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF) LoadSpritePalette(&gMonIconPaletteTable[palIndex]); @@ -286,9 +290,12 @@ const u8 *GetMonIconTiles(u16 species, u32 personality) if (species > NUM_SPECIES) species = SPECIES_NONE; +#if P_GENDER_DIFFERENCES if (gSpeciesInfo[species].iconSpriteFemale != NULL && IsPersonalityFemale(species, personality)) iconSprite = gSpeciesInfo[species].iconSpriteFemale; - else if (gSpeciesInfo[species].iconSprite != NULL) + else +#endif + if (gSpeciesInfo[species].iconSprite != NULL) iconSprite = gSpeciesInfo[species].iconSprite; else iconSprite = gSpeciesInfo[SPECIES_NONE].iconSprite; diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 05ac5816da..e34c4d8e37 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -5140,9 +5140,11 @@ static u16 TryLoadMonIconTiles(u16 species, u32 personality) { u16 i, offset; +#if P_GENDER_DIFFERENCES // Treat female mons as a seperate species as they may have a different icon than males if (gSpeciesInfo[species].iconSpriteFemale != NULL && IsPersonalityFemale(species, personality)) - species |= 0x8000; // 1 << 15 + species |= (1 << 15); +#endif // Search icon list for this species for (i = 0; i < MAX_MON_ICONS; i++) @@ -5208,11 +5210,13 @@ static struct Sprite *CreateMonIconSprite(u16 species, u32 personality, s16 x, s struct SpriteTemplate template = sSpriteTemplate_MonIcon; species = GetIconSpecies(species, personality); +#if P_GENDER_DIFFERENCES if (gSpeciesInfo[species].iconSpriteFemale != NULL && IsPersonalityFemale(species, personality)) { template.paletteTag = PALTAG_MON_ICON_0 + gSpeciesInfo[species].iconPalIndexFemale; } else +#endif { template.paletteTag = PALTAG_MON_ICON_0 + gSpeciesInfo[species].iconPalIndex; } From 5df6f0b753614b1fea516357d4f8c21206d9d91d Mon Sep 17 00:00:00 2001 From: GhoulMage Date: Tue, 29 Oct 2024 20:18:29 +0100 Subject: [PATCH 41/50] `AI_FLAG_ACE_POKEMON` takes into account separate trainers (#5608) --- docs/tutorials/ai_flags.md | 4 ++-- include/pokemon.h | 1 + src/battle_ai_switch_items.c | 2 +- src/battle_controller_opponent.c | 6 +++--- src/pokemon.c | 19 +++++++++++++++++++ 5 files changed, 26 insertions(+), 6 deletions(-) diff --git a/docs/tutorials/ai_flags.md b/docs/tutorials/ai_flags.md index fdbfc27fac..7b77305c13 100644 --- a/docs/tutorials/ai_flags.md +++ b/docs/tutorials/ai_flags.md @@ -134,10 +134,10 @@ Affects when the AI chooses to switch. AI will make smarter decisions about when * The current mon loses the 1v1 quickly and has at least ½ HP, or ¼ and Regenerator ## `AI_FLAG_ACE_POKEMON` -Marks the last Pokemon in the party as the Ace Pokemon. It will not be used unless it is the last one remaining, or is forced to be switched in (Roar, U-Turn with 1 mon remaining, etc.) +Marks the last Pokemon in the party as the Ace Pokemon. It will not be used unless it is the last one remaining, or is forced to be switched in (Roar, U-Turn with 1 mon remaining, etc.). If you are challenged by two different trainers at the same time, only the ones with this flag will have Ace Pokémon. For example vs one trainer with `AI_FLAG_ACE_POKEMON`and the other without, there will be a total of 1 Ace Pokémon. ## `AI_FLAG_DOUBLE_ACE_POKEMON` -Marks the last two Pokémon in the party as Ace Pokémon, with the same behaviour as `AI_FLAG_ACE_POKEMON`. Intented for double battles where you battle one trainer id that represents two trainers, ie Twins, Couples. +Marks the last two Pokémon in the party as Ace Pokémon, with the same behaviour as `AI_FLAG_ACE_POKEMON`. Intented for double battles where you battle one trainer id that represents two trainers, ie Twins, Couples. If you apply this flag to trainers outside of double battles or in cases where two trainers can challenge you at the same time, it has the same behaviour. For example vs two trainers with `AI_FLAG_DOUBLE_ACE_POKEMON` there will be a total of 4 Ace Pokémon. ## `AI_FLAG_OMNISCIENT` AI has full knowledge of player moves, abilities, and hold items, and can use this knowledge when making decisions. diff --git a/include/pokemon.h b/include/pokemon.h index 700fad7a1b..8a618f5fe1 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -785,6 +785,7 @@ u8 GiveMonToPlayer(struct Pokemon *mon); u8 CopyMonToPC(struct Pokemon *mon); u8 CalculatePlayerPartyCount(void); u8 CalculateEnemyPartyCount(void); +u8 CalculateEnemyPartyCountInSide(u32 battler); u8 GetMonsStateToDoubles(void); u8 GetMonsStateToDoubles_2(void); u16 GetAbilityBySpecies(u16 species, u8 abilityNum); diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 06a69e4f60..03f5378a64 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -41,7 +41,7 @@ static bool32 IsAceMon(u32 battler, u32 monPartyId) { if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_ACE_POKEMON && !(gBattleStruct->forcedSwitch & (1u << battler)) - && monPartyId == CalculateEnemyPartyCount()-1) + && monPartyId == CalculateEnemyPartyCountInSide(battler)-1) return TRUE; if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_DOUBLE_ACE_POKEMON && !(gBattleStruct->forcedSwitch & (1u << battler)) diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 4ede13e590..ef12589681 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -686,11 +686,11 @@ static void OpponentHandleChoosePokemon(u32 battler) || chosenMonId == gBattlerPartyIndexes[battler2]) continue; if ((AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_ACE_POKEMON) - && ((chosenMonId != CalculateEnemyPartyCount() - 1) || CountAIAliveNonEggMonsExcept(PARTY_SIZE) == pokemonInBattle)) + && ((chosenMonId == CalculateEnemyPartyCountInSide(battler) - 1) || CountAIAliveNonEggMonsExcept(PARTY_SIZE) == pokemonInBattle)) continue; if ((AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_DOUBLE_ACE_POKEMON) - && (((chosenMonId != CalculateEnemyPartyCount() - 1) || (chosenMonId != CalculateEnemyPartyCount() - 1)) - || CountAIAliveNonEggMonsExcept(PARTY_SIZE) == pokemonInBattle)) + && (((chosenMonId == CalculateEnemyPartyCountInSide(battler) - 1) || (chosenMonId == CalculateEnemyPartyCountInSide(battler) - 2)) + || (CountAIAliveNonEggMonsExcept(PARTY_SIZE) == pokemonInBattle || CountAIAliveNonEggMonsExcept(PARTY_SIZE-1) == pokemonInBattle))) continue; // mon is valid break; diff --git a/src/pokemon.c b/src/pokemon.c index c8ebdb7fff..9f716e3a79 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -3367,6 +3367,20 @@ u8 CalculatePartyCount(struct Pokemon *party) return partyCount; } +u8 CalculatePartyCountOfSide(u32 battler, struct Pokemon *party) +{ + s32 partyCount, partySize; + GetAIPartyIndexes(battler, &partyCount, &partySize); + + while (partyCount < partySize + && GetMonData(&party[partyCount], MON_DATA_SPECIES, NULL) != SPECIES_NONE) + { + partyCount++; + } + + return partyCount; +} + u8 CalculatePlayerPartyCount(void) { gPlayerPartyCount = CalculatePartyCount(gPlayerParty); @@ -3379,6 +3393,11 @@ u8 CalculateEnemyPartyCount(void) return gEnemyPartyCount; } +u8 CalculateEnemyPartyCountInSide(u32 battler) +{ + return CalculatePartyCountOfSide(battler, gEnemyParty); +} + u8 GetMonsStateToDoubles(void) { s32 aliveCount = 0; From 8e0443f727235605f4f8971274f8fee83578c5ef Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 29 Oct 2024 21:49:56 +0100 Subject: [PATCH 42/50] Moves that deal a Fixed amount don't need AI handling (#5614) --- src/battle_ai_main.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 3ffcecd996..a1cf751034 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -2509,12 +2509,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) else ADJUST_SCORE(-10); break; - case EFFECT_POWER_BASED_ON_USER_HP: - if (effectiveness <= AI_EFFECTIVENESS_x0_5) - ADJUST_SCORE(-1); - if (aiData->hpPercents[battlerDef] < 50) - ADJUST_SCORE(-1); - break; case EFFECT_FLAIL: if (AI_IsSlower(battlerAtk, battlerDef, move) // Opponent should go first || aiData->hpPercents[battlerAtk] > 50) From 0a830b5a5a03c35bac9f4e80a9fe7714bcee60e4 Mon Sep 17 00:00:00 2001 From: RavePossum <145081120+ravepossum@users.noreply.github.com> Date: Wed, 30 Oct 2024 04:20:50 -0400 Subject: [PATCH 43/50] Restore test file dependencies so they're rebuilt properly (#5617) --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index 4052e81a2e..143197d3f0 100644 --- a/Makefile +++ b/Makefile @@ -414,6 +414,10 @@ $(TEST_BUILDDIR)/%.o: $(TEST_SUBDIR)/%.c $(TEST_BUILDDIR)/%.d: $(TEST_SUBDIR)/%.c $(SCANINC) -M $@ $(INCLUDE_SCANINC_ARGS) -I tools/agbcc/include $< +ifneq ($(NODEP),1) +-include $(addprefix $(OBJ_DIR)/,$(TEST_SRCS:.c=.d)) +endif + $(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $(AS) $(ASFLAGS) -o $@ $< From 13a26c462ebff4817b3c9dd7b36e5a07ecd759e1 Mon Sep 17 00:00:00 2001 From: Rachel Date: Wed, 30 Oct 2024 10:09:54 -0700 Subject: [PATCH 44/50] Display the correct shadow size when sending out a new Pokemon (#5618) --- src/battle_gfx_sfx_util.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 3729a4f73f..e2a583dcc9 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -26,6 +26,7 @@ #include "constants/rgb.h" #include "constants/battle_palace.h" #include "constants/battle_move_effects.h" +#include "constants/event_objects.h" // only for SHADOW_SIZE constants // this file's functions static u8 GetBattlePalaceMoveGroup(u8 battler, u16 move); @@ -1130,8 +1131,9 @@ void SetBattlerSpriteAffineMode(u8 affineMode) } } -#define tBattlerId data[0] -#define tSpriteSide data[1] +#define tBattlerId data[0] +#define tSpriteSide data[1] +#define tBaseTileNum data[2] #define SPRITE_SIDE_LEFT 0 #define SPRITE_SIDE_RIGHT 1 @@ -1152,7 +1154,8 @@ void CreateEnemyShadowSprite(u32 battler) struct Sprite *sprite = &gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary]; sprite->tBattlerId = battler; sprite->tSpriteSide = SPRITE_SIDE_LEFT; - sprite->oam.tileNum += 8 * size; + sprite->tBaseTileNum = sprite->oam.tileNum; + sprite->oam.tileNum = sprite->tBaseTileNum + (8 * size); sprite->invisible = TRUE; } @@ -1165,7 +1168,8 @@ void CreateEnemyShadowSprite(u32 battler) struct Sprite *sprite = &gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary]; sprite->tBattlerId = battler; sprite->tSpriteSide = SPRITE_SIDE_RIGHT; - sprite->oam.tileNum += (8 * size) + 4; + sprite->tBaseTileNum = sprite->oam.tileNum + 4; + sprite->oam.tileNum = sprite->tBaseTileNum + (8 * size); sprite->invisible = TRUE; } } @@ -1179,6 +1183,7 @@ void CreateEnemyShadowSprite(u32 battler) { struct Sprite *sprite = &gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary]; sprite->tBattlerId = battler; + sprite->tBaseTileNum = sprite->oam.tileNum; sprite->invisible = TRUE; } } @@ -1234,13 +1239,14 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite) return; } - s8 xOffset = 0, yOffset = 0; + s8 xOffset = 0, yOffset = 0, size = SHADOW_SIZE_S; if (gAnimScriptActive || battlerSprite->invisible) invisible = TRUE; else if (transformSpecies != SPECIES_NONE) { xOffset = gSpeciesInfo[transformSpecies].enemyShadowXOffset; yOffset = gSpeciesInfo[transformSpecies].enemyShadowYOffset; + size = gSpeciesInfo[transformSpecies].enemyShadowSize; invisible = (B_ENEMY_MON_SHADOW_STYLE >= GEN_4 && P_GBA_STYLE_SPECIES_GFX == FALSE) ? gSpeciesInfo[transformSpecies].suppressEnemyShadow @@ -1251,6 +1257,7 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite) u16 species = SanitizeSpeciesId(gBattleMons[battler].species); xOffset = gSpeciesInfo[species].enemyShadowXOffset + (shadowSprite->tSpriteSide == SPRITE_SIDE_LEFT ? -16 : 16); yOffset = gSpeciesInfo[species].enemyShadowYOffset + 16; + size = gSpeciesInfo[species].enemyShadowSize; } else { @@ -1264,6 +1271,9 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite) shadowSprite->x2 = battlerSprite->x2; shadowSprite->y = battlerSprite->y + yOffset; shadowSprite->invisible = invisible; + + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4 && P_GBA_STYLE_SPECIES_GFX == FALSE) + shadowSprite->oam.tileNum = shadowSprite->tBaseTileNum + (8 * size); } #undef tBattlerId From d5f8e9cc0e34c8248886d155558d7338e8184bb6 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 31 Oct 2024 07:59:28 +0100 Subject: [PATCH 45/50] Combines CalculateMoveDamage arguments into a struct (#5570) --- include/battle_ai_util.h | 7 +- include/battle_util.h | 18 ++- src/battle_ai_main.c | 32 +++-- src/battle_ai_switch_items.c | 15 ++- src/battle_ai_util.c | 63 ++++++---- src/battle_script_commands.c | 22 +++- src/battle_tv.c | 10 +- src/battle_util.c | 212 +++++++++++++++++++++------------- test/battle/ai/ai_switching.c | 1 + 9 files changed, 243 insertions(+), 137 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index a3cd38293b..63991ed980 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -15,7 +15,7 @@ enum DamageRollType DMG_ROLL_HIGHEST, }; -enum AIPivot +enum AIPivot { DONT_PIVOT, CAN_TRY_PIVOT, @@ -25,6 +25,7 @@ enum AIPivot bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move); bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 move); bool32 AI_RandLessThan(u32 val); +u32 GetDmgRollType(u32 battlerAtk); bool32 IsAiVsAiBattle(void); bool32 BattlerHasAi(u32 battlerId); bool32 IsAiBattlerAware(u32 battlerId); @@ -99,8 +100,8 @@ bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility); bool32 IsAffectedByPowder(u32 battler, u32 ability, u32 holdEffect); bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category); s32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo); -struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType); -struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType); +struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 battlerAtk, u32 battlerDef, u32 move, u8 *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType); +struct SimulatedDamage AI_CalcDamage(u32 battlerAtk, u32 battlerDef, u32 move, u8 *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType); bool32 AI_IsDamagedByRecoil(u32 battler); u32 GetNoOfHitsToKO(u32 dmg, s32 hp); u32 GetNoOfHitsToKOBattlerDmg(u32 dmg, u32 battlerDef); diff --git a/include/battle_util.h b/include/battle_util.h index 504c3be3ad..e2dd9ac826 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -134,6 +134,18 @@ enum { extern const struct TypePower gNaturalGiftTable[]; +struct DamageCalculationData +{ + u32 battlerAtk:3; + u32 battlerDef:3; + u32 move:16; + u32 moveType:5; + u32 isCrit:1; + u32 randomFactor:1; + u32 updateFlags:1; + u32 padding:2; +}; + void HandleAction_ThrowBall(void); bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move); void HandleAction_UseMove(void); @@ -212,9 +224,9 @@ u32 GetMoveSlot(u16 *moves, u32 move); u32 GetBattlerWeight(u32 battler); u32 CalcRolloutBasePower(u32 battlerAtk, u32 basePower, u32 rolloutTimer); u32 CalcFuryCutterBasePower(u32 basePower, u32 furyCutterCounter); -s32 CalculateMoveDamage(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, s32 fixedBasePower, bool32 isCrit, bool32 randomFactor, bool32 updateFlags); -s32 CalculateMoveDamageVars(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, s32 fixedBasePower, uq4_12_t typeEffectivenessModifier, - u32 weather, bool32 isCrit, u32 holdEffectAtk, u32 holdEffectDef, u32 abilityAtk, u32 abilityDef); +s32 CalculateMoveDamage(struct DamageCalculationData *damageCalcData, u32 fixedBasePower); +s32 CalculateMoveDamageVars(struct DamageCalculationData *damageCalcData, u32 fixedBasePower, uq4_12_t typeEffectivenessModifier, + u32 weather, u32 holdEffectAtk, u32 holdEffectDef, u32 abilityAtk, u32 abilityDef); uq4_12_t CalcTypeEffectivenessMultiplier(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, u32 defAbility, bool32 recordAbilities); uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef); uq4_12_t GetTypeModifier(u32 atkType, u32 defType); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index a1cf751034..bdd0aef150 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -407,14 +407,13 @@ static u32 Ai_SetMoveAccuracy(struct AiLogicData *aiData, u32 battlerAtk, u32 ba return accuracy; } -static void SetBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u32 battlersCount) +static void SetBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u32 battlersCount, u32 weather) { - u32 battlerDef, i, weather; u16 *moves; - + u32 battlerDef, moveIndex, move; + u32 rollType = GetDmgRollType(battlerAtk); SaveBattlerData(battlerAtk); moves = GetMovesArray(battlerAtk); - weather = AI_GetWeather(aiData); SetBattlerData(battlerAtk); @@ -426,27 +425,22 @@ static void SetBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u3 SaveBattlerData(battlerDef); SetBattlerData(battlerDef); - for (i = 0; i < MAX_MON_MOVES; i++) + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { struct SimulatedDamage dmg = {0}; u8 effectiveness = AI_EFFECTIVENESS_x0; - u32 move = moves[i]; + move = moves[moveIndex]; if (move != 0 && move != 0xFFFF //&& gMovesInfo[move].power != 0 /* we want to get effectiveness and accuracy of status moves */ - && !(aiData->moveLimitations[battlerAtk] & (1u << i))) + && !(aiData->moveLimitations[battlerAtk] & (1u << moveIndex))) { - if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY) - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, DMG_ROLL_HIGHEST); - else if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_CONSERVATIVE) - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, DMG_ROLL_LOWEST); - else - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, DMG_ROLL_DEFAULT); - aiData->moveAccuracy[battlerAtk][battlerDef][i] = Ai_SetMoveAccuracy(aiData, battlerAtk, battlerDef, move); + dmg = AI_CalcDamage(battlerAtk, battlerDef, move, &effectiveness, TRUE, weather, rollType); + aiData->moveAccuracy[battlerAtk][battlerDef][moveIndex] = Ai_SetMoveAccuracy(aiData, battlerAtk, battlerDef, move); } - aiData->simulatedDmg[battlerAtk][battlerDef][i] = dmg; - aiData->effectiveness[battlerAtk][battlerDef][i] = effectiveness; + aiData->simulatedDmg[battlerAtk][battlerDef][moveIndex] = dmg; + aiData->effectiveness[battlerAtk][battlerDef][moveIndex] = effectiveness; } RestoreBattlerData(battlerDef); } @@ -455,7 +449,7 @@ static void SetBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u3 void SetAiLogicDataForTurn(struct AiLogicData *aiData) { - u32 battlerAtk, battlersCount; + u32 battlerAtk, battlersCount, weather; memset(aiData, 0, sizeof(struct AiLogicData)); if (!(gBattleTypeFlags & BATTLE_TYPE_HAS_AI) && !IsWildMonSmart()) @@ -465,6 +459,8 @@ void SetAiLogicDataForTurn(struct AiLogicData *aiData) gBattleStruct->aiDelayTimer = gMain.vblankCounter1; aiData->weatherHasEffect = WEATHER_HAS_EFFECT; + weather = AI_GetWeather(aiData); + // get/assume all battler data and simulate AI damage battlersCount = gBattlersCount; @@ -482,7 +478,7 @@ void SetAiLogicDataForTurn(struct AiLogicData *aiData) if (!IsBattlerAlive(battlerAtk)) continue; - SetBattlerAiMovesData(aiData, battlerAtk, battlersCount); + SetBattlerAiMovesData(aiData, battlerAtk, battlersCount, weather); } AI_DATA->aiCalcInProgress = FALSE; } diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 03f5378a64..5e606b6a38 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -158,7 +158,7 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) playerMove = gBattleMons[opposingBattler].moves[i]; if (playerMove != MOVE_NONE && gMovesInfo[playerMove].power != 0) { - damageTaken = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather, DMG_ROLL_HIGHEST).expected; + damageTaken = AI_CalcDamage(opposingBattler, battler, playerMove, &effectiveness, FALSE, weather, DMG_ROLL_HIGHEST).expected; if (damageTaken > maxDamageTaken) maxDamageTaken = damageTaken; } @@ -430,7 +430,7 @@ static bool32 ShouldSwitchIfOpponentChargingOrInvulnerable(u32 battler) u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); u32 incomingMove = AI_DATA->lastUsedMove[opposingBattler]; bool32 isOpposingBattlerChargingOrInvulnerable = (IsSemiInvulnerable(opposingBattler, incomingMove) || IsTwoTurnNotSemiInvulnerableMove(opposingBattler, incomingMove)); - + if (IsDoubleBattle() || !(AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_SWITCHING)) return FALSE; @@ -840,9 +840,9 @@ static bool32 ShouldSwitchIfEncored(u32 battler) return SetSwitchinAndSwitch(battler, PARTY_SIZE); // Stay in if effective move - else if (AI_GetMoveEffectiveness(encoredMove, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) + else if (AI_GetMoveEffectiveness(encoredMove, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) return FALSE; - + // Switch out 50% of the time otherwise else if (RandomPercentage(RNG_AI_SWITCH_ENCORE, 50) && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE) return SetSwitchinAndSwitch(battler, PARTY_SIZE); @@ -1224,6 +1224,8 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva int i, j; int dmg, bestDmg = 0; int bestMonId = PARTY_SIZE; + u32 rollType = GetDmgRollType(battler); + u32 aiMove; gMoveResultFlags = 0; @@ -1239,10 +1241,7 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva if (aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) { aiMove = GetMonData(&party[i], MON_DATA_MOVE1 + j); - if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_CONSERVATIVE) - dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_LOWEST); - else - dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_DEFAULT); + dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, rollType); if (bestDmg < dmg) { bestDmg = dmg; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 01adcfffd9..4f52873f9f 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -35,6 +35,16 @@ static u32 AI_GetEffectiveness(uq4_12_t multiplier); // Functions +u32 GetDmgRollType(u32 battlerAtk) +{ + if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY) + return DMG_ROLL_HIGHEST; + if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_CONSERVATIVE) + return DMG_ROLL_LOWEST; + + return DMG_ROLL_DEFAULT; +} + bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move) { return (AI_WhoStrikesFirst(battlerAi, battlerDef, move) == AI_IS_FASTER); @@ -364,14 +374,15 @@ bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category) } // To save computation time this function has 2 variants. One saves, sets and restores battlers, while the other doesn't. -struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType) +struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 battlerAtk, u32 battlerDef, u32 move, u8 *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType) { struct SimulatedDamage dmg; + SaveBattlerData(battlerAtk); SaveBattlerData(battlerDef); SetBattlerData(battlerAtk); SetBattlerData(battlerDef); - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, typeEffectiveness, considerZPower, AI_GetWeather(AI_DATA), rollType); + dmg = AI_CalcDamage(battlerAtk, battlerDef, move, typeEffectiveness, considerZPower, AI_GetWeather(AI_DATA), rollType); RestoreBattlerData(battlerAtk); RestoreBattlerData(battlerDef); return dmg; @@ -398,12 +409,11 @@ static inline s32 DmgRoll(s32 dmg) return dmg; } -bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) +bool32 IsDamageMoveUnusable(u32 battlerAtk, u32 battlerDef, u32 move, u32 moveType) { struct AiLogicData *aiData = AI_DATA; u32 battlerDefAbility; u32 partnerBattlerDefAbility; - u32 moveType = GetMoveType(move); if (DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move)) { @@ -491,7 +501,7 @@ static inline s32 GetDamageByRollType(s32 dmg, enum DamageRollType rollType) return DmgRoll(dmg); } -struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType) +struct SimulatedDamage AI_CalcDamage(u32 battlerAtk, u32 battlerDef, u32 move, u8 *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType) { struct SimulatedDamage simDamage; s32 moveType; @@ -517,7 +527,6 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u SetActiveGimmick(battlerAtk, gBattleStruct->gimmick.usableGimmick[battlerAtk]); } - moveEffect = gMovesInfo[move].effect; switch (moveEffect) { case EFFECT_PHOTON_GEYSER: @@ -544,7 +553,7 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, aiData->abilities[battlerDef], FALSE); if (gMovesInfo[move].power) - isDamageMoveUnusable = IsDamageMoveUnusable(move, battlerAtk, battlerDef); + isDamageMoveUnusable = IsDamageMoveUnusable(battlerAtk, battlerDef, move, moveType); if (gMovesInfo[move].power && !isDamageMoveUnusable) { @@ -566,15 +575,26 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u break; } + struct DamageCalculationData damageCalcData; + damageCalcData.battlerAtk = battlerAtk; + damageCalcData.battlerDef = battlerDef; + damageCalcData.move = move; + damageCalcData.moveType = moveType; + damageCalcData.isCrit = FALSE; + damageCalcData.randomFactor = FALSE; + damageCalcData.updateFlags = FALSE; + critChanceIndex = CalcCritChanceStageArgs(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]); if (critChanceIndex > 1) // Consider crit damage only if a move has at least +2 crit chance { - s32 nonCritDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, FALSE, + damageCalcData.isCrit = FALSE; + s32 nonCritDmg = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, + effectivenessMultiplier, weather, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - s32 critDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, TRUE, + damageCalcData.isCrit = TRUE; + s32 critDmg = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, + effectivenessMultiplier, weather, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); @@ -588,8 +608,9 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u } else if (critChanceIndex == -2) // Guaranteed critical { - s32 critDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, TRUE, + damageCalcData.isCrit = TRUE; + s32 critDmg = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, + effectivenessMultiplier, weather, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); @@ -603,16 +624,16 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u { for (gMultiHitCounter = gMovesInfo[move].strikeCount; gMultiHitCounter > 0; gMultiHitCounter--) // The global is used to simulate actual damage done { - nonCritDmg += CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, FALSE, + nonCritDmg += CalculateMoveDamageVars(&damageCalcData, fixedBasePower, + effectivenessMultiplier, weather, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); } } else { - nonCritDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, FALSE, + nonCritDmg = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, + effectivenessMultiplier, weather, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); } @@ -676,10 +697,11 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u u32 partyCount = CalculatePartyCount(GetBattlerParty(battlerAtk)); u32 i; gBattleStruct->beatUpSlot = 0; + damageCalcData.isCrit = FALSE; simDamage.expected = 0; for (i = 0; i < partyCount; i++) { - simDamage.expected += CalculateMoveDamage(move, battlerAtk, battlerDef, moveType, 0, FALSE, FALSE, FALSE); + simDamage.expected += CalculateMoveDamage(&damageCalcData, 0); } simDamage.minimum = simDamage.expected; gBattleStruct->beatUpSlot = 0; @@ -3444,8 +3466,7 @@ s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct Battl AI_THINKING_STRUCT->saved[battlerAtk].saved = FALSE; } - - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, FALSE, AI_GetWeather(AI_DATA), rollType); + dmg = AI_CalcDamage(battlerAtk, battlerDef, move, &effectiveness, FALSE, AI_GetWeather(AI_DATA), rollType); // restores original gBattleMon struct FreeRestoreBattleMons(savedBattleMons); @@ -3913,7 +3934,7 @@ bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove) else if (!IS_MOVE_STATUS(chosenMove) && IS_MOVE_STATUS(zMove)) return FALSE; - dmg = AI_CalcDamageSaveBattlers(chosenMove, battlerAtk, battlerDef, &effectiveness, FALSE, DMG_ROLL_DEFAULT); + dmg = AI_CalcDamageSaveBattlers(battlerAtk, battlerDef, chosenMove, &effectiveness, FALSE, DMG_ROLL_DEFAULT); if (!IS_MOVE_STATUS(chosenMove) && dmg.minimum >= gBattleMons[battlerDef].hp) return FALSE; // don't waste damaging z move if can otherwise faint target diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 5424d1b499..805be74e4e 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1303,7 +1303,14 @@ static void Cmd_attackcanceler(void) return; case DISOBEYS_HITS_SELF: gBattlerTarget = gBattlerAttacker; - gBattleMoveDamage = CalculateMoveDamage(MOVE_NONE, gBattlerAttacker, gBattlerAttacker, TYPE_MYSTERY, 40, FALSE, FALSE, TRUE); + struct DamageCalculationData damageCalcData; + damageCalcData.battlerAtk = damageCalcData.battlerDef = gBattlerAttacker; + damageCalcData.move = MOVE_NONE; + damageCalcData.moveType = TYPE_MYSTERY; + damageCalcData.isCrit = FALSE; + damageCalcData.randomFactor = FALSE; + damageCalcData.updateFlags = TRUE; + gBattleMoveDamage = CalculateMoveDamage(&damageCalcData, 40); gBattlescriptCurrInstr = BattleScript_IgnoresAndHitsItself; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; gHitMarker |= HITMARKER_OBEYS; @@ -2123,10 +2130,19 @@ static void Cmd_damagecalc(void) { CMD_ARGS(); - u32 moveType = GetMoveType(gCurrentMove); if (gMovesInfo[gCurrentMove].effect == EFFECT_SHELL_SIDE_ARM) gBattleStruct->swapDamageCategory = (gBattleStruct->shellSideArmCategory[gBattlerAttacker][gBattlerTarget] != gMovesInfo[gCurrentMove].category); - gBattleMoveDamage = CalculateMoveDamage(gCurrentMove, gBattlerAttacker, gBattlerTarget, moveType, 0, gIsCriticalHit, TRUE, TRUE); + + struct DamageCalculationData damageCalcData; + damageCalcData.battlerAtk = gBattlerAttacker; + damageCalcData.battlerDef = gBattlerTarget; + damageCalcData.move = gCurrentMove; + damageCalcData.moveType = GetMoveType(gCurrentMove); + damageCalcData.isCrit = gIsCriticalHit; + damageCalcData.randomFactor = TRUE; + damageCalcData.updateFlags = TRUE; + + gBattleMoveDamage = CalculateMoveDamage(&damageCalcData, 0); gBattlescriptCurrInstr = cmd->nextInstr; } diff --git a/src/battle_tv.c b/src/battle_tv.c index 6134b492c4..ccea3551cd 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -1250,7 +1250,15 @@ static void TrySetBattleSeminarShow(void) powerOverride = 0; if (ShouldCalculateDamage(gCurrentMove, &dmgByMove[i], &powerOverride)) { - gBattleMoveDamage = CalculateMoveDamage(gCurrentMove, gBattlerAttacker, gBattlerTarget, gMovesInfo[gCurrentMove].type, powerOverride, FALSE, FALSE, FALSE); + struct DamageCalculationData damageCalcData; + damageCalcData.battlerAtk = gBattlerAttacker; + damageCalcData.battlerDef = gBattlerTarget; + damageCalcData.move = gCurrentMove; + damageCalcData.moveType = gMovesInfo[gCurrentMove].type; + damageCalcData.isCrit = FALSE; + damageCalcData.randomFactor = FALSE; + damageCalcData.updateFlags = FALSE; + gBattleMoveDamage = CalculateMoveDamage(&damageCalcData, powerOverride); dmgByMove[i] = gBattleMoveDamage; if (dmgByMove[i] == 0 && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) dmgByMove[i] = 1; diff --git a/src/battle_util.c b/src/battle_util.c index 74c7fd62aa..1e5f809c52 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3391,7 +3391,14 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) { gBattleCommunication[MULTISTRING_CHOOSER] = TRUE; gBattlerTarget = gBattlerAttacker; - gBattleMoveDamage = CalculateMoveDamage(MOVE_NONE, gBattlerAttacker, gBattlerAttacker, TYPE_MYSTERY, 40, FALSE, FALSE, TRUE); + struct DamageCalculationData damageCalcData; + damageCalcData.battlerAtk = damageCalcData.battlerDef = gBattlerAttacker; + damageCalcData.move = MOVE_NONE; + damageCalcData.moveType = TYPE_MYSTERY; + damageCalcData.isCrit = FALSE; + damageCalcData.randomFactor = FALSE; + damageCalcData.updateFlags = TRUE; + gBattleMoveDamage = CalculateMoveDamage(&damageCalcData, 40); gProtectStructs[gBattlerAttacker].confusionSelfDmg = TRUE; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; } @@ -8735,8 +8742,12 @@ u32 CountBattlerStatIncreases(u32 battler, bool32 countEvasionAcc) return count; } -u32 GetMoveTargetCount(u32 move, u32 battlerAtk, u32 battlerDef) +u32 GetMoveTargetCount(struct DamageCalculationData *damageCalcData) { + u32 battlerAtk = damageCalcData->battlerAtk; + u32 battlerDef = damageCalcData->battlerDef; + u32 move = damageCalcData->move; + switch (GetBattlerMoveTargetType(battlerAtk, move)) { case MOVE_TARGET_BOTH: @@ -8874,8 +8885,12 @@ u32 CalcFuryCutterBasePower(u32 basePower, u32 furyCutterCounter) return basePower; } -static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 weather) +static inline u32 CalcMoveBasePower(struct DamageCalculationData *damageCalcData, u32 abilityDef, u32 weather) { + u32 battlerAtk = damageCalcData->battlerAtk; + u32 battlerDef = damageCalcData->battlerDef; + u32 move = damageCalcData->move; + u32 i; u32 basePower = gMovesInfo[move].power; u32 weight, hpFraction, speed; @@ -9137,11 +9152,16 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3 return basePower; } -static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, bool32 updateFlags, u32 atkAbility, u32 defAbility, u32 holdEffectAtk, u32 weather) +static inline u32 CalcMoveBasePowerAfterModifiers(struct DamageCalculationData *damageCalcData, u32 atkAbility, u32 defAbility, u32 holdEffectAtk, u32 weather) { u32 i; u32 holdEffectParamAtk; - u32 basePower = CalcMoveBasePower(move, battlerAtk, battlerDef, defAbility, weather); + u32 basePower = CalcMoveBasePower(damageCalcData, defAbility, weather); + u32 battlerAtk = damageCalcData->battlerAtk; + u32 battlerDef = damageCalcData->battlerDef; + u32 move = damageCalcData->move; + u32 moveType = damageCalcData->moveType; + uq4_12_t holdEffectModifier; uq4_12_t modifier = UQ_4_12(1.0); u32 atkSide = GetBattlerSide(battlerAtk); @@ -9343,7 +9363,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 if (moveType == TYPE_FIRE) { modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); - if (updateFlags) + if (damageCalcData->updateFlags) RecordAbilityBattle(battlerDef, defAbility); } break; @@ -9463,12 +9483,16 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 return uq4_12_multiply_by_int_half_down(modifier, basePower); } -static inline u32 CalcAttackStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, bool32 isCrit, bool32 updateFlags, u32 atkAbility, u32 defAbility, u32 holdEffectAtk, u32 weather) +static inline u32 CalcAttackStat(struct DamageCalculationData *damageCalcData, u32 atkAbility, u32 defAbility, u32 holdEffectAtk, u32 weather) { u8 atkStage; u32 atkStat; uq4_12_t modifier; u16 atkBaseSpeciesId; + u32 battlerAtk = damageCalcData->battlerAtk; + u32 battlerDef = damageCalcData->battlerDef; + u32 move = damageCalcData->move; + u32 moveType = damageCalcData->moveType; atkBaseSpeciesId = GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species); @@ -9517,7 +9541,7 @@ static inline u32 CalcAttackStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 m } // critical hits ignore attack stat's stage drops - if (isCrit && atkStage < DEFAULT_STAT_STAGE) + if (damageCalcData->isCrit && atkStage < DEFAULT_STAT_STAGE) atkStage = DEFAULT_STAT_STAGE; // pokemon with unaware ignore attack stat changes while taking damage if (defAbility == ABILITY_UNAWARE) @@ -9663,7 +9687,7 @@ static inline u32 CalcAttackStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 m if (moveType == TYPE_FIRE || moveType == TYPE_ICE) { modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.5)); - if (updateFlags) + if (damageCalcData->updateFlags) RecordAbilityBattle(battlerDef, ABILITY_THICK_FAT); } break; @@ -9740,12 +9764,15 @@ static bool32 CanEvolve(u32 species) return FALSE; } -static inline u32 CalcDefenseStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, bool32 isCrit, bool32 updateFlags, u32 atkAbility, u32 defAbility, u32 holdEffectDef, u32 weather) +static inline u32 CalcDefenseStat(struct DamageCalculationData *damageCalcData, u32 atkAbility, u32 defAbility, u32 holdEffectDef, u32 weather) { bool32 usesDefStat; u8 defStage; u32 defStat, def, spDef; uq4_12_t modifier; + u32 battlerDef = damageCalcData->battlerDef; + u32 move = damageCalcData->move; + u32 moveType = damageCalcData->moveType; if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) // the defense stats are swapped { @@ -9776,7 +9803,7 @@ static inline u32 CalcDefenseStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 defStat /= 2; // critical hits ignore positive stat changes - if (isCrit && defStage > DEFAULT_STAT_STAGE) + if (damageCalcData->isCrit && defStage > DEFAULT_STAT_STAGE) defStage = DEFAULT_STAT_STAGE; // pokemon with unaware ignore defense stat changes while dealing damage if (atkAbility == ABILITY_UNAWARE) @@ -9798,7 +9825,7 @@ static inline u32 CalcDefenseStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 if (gBattleMons[battlerDef].status1 & STATUS1_ANY && usesDefStat) { modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - if (updateFlags) + if (damageCalcData->updateFlags) RecordAbilityBattle(battlerDef, ABILITY_MARVEL_SCALE); } break; @@ -9806,7 +9833,7 @@ static inline u32 CalcDefenseStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 if (usesDefStat) { modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); - if (updateFlags) + if (damageCalcData->updateFlags) RecordAbilityBattle(battlerDef, ABILITY_FUR_COAT); } break; @@ -9814,7 +9841,7 @@ static inline u32 CalcDefenseStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && usesDefStat) { modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - if (updateFlags) + if (damageCalcData->updateFlags) RecordAbilityBattle(battlerDef, ABILITY_GRASS_PELT); } break; @@ -9898,9 +9925,9 @@ static inline s32 CalculateBaseDamage(u32 power, u32 userFinalAttack, u32 level, return power * userFinalAttack * (2 * level / 5 + 2) / targetFinalDefense / 50 + 2; } -static inline uq4_12_t GetTargetDamageModifier(u32 move, u32 battlerAtk, u32 battlerDef) +static inline uq4_12_t GetTargetDamageModifier(struct DamageCalculationData *damageCalcData) { - if (IsDoubleBattle() && GetMoveTargetCount(move, battlerAtk, battlerDef) >= 2) + if (IsDoubleBattle() && GetMoveTargetCount(damageCalcData) >= 2) return B_MULTIPLE_TARGETS_DMG >= GEN_4 ? UQ_4_12(0.75) : UQ_4_12(0.5); return UQ_4_12(1.0); } @@ -9912,8 +9939,12 @@ static inline uq4_12_t GetParentalBondModifier(u32 battlerAtk) return B_PARENTAL_BOND_DMG >= GEN_7 ? UQ_4_12(0.25) : UQ_4_12(0.5); } -static inline uq4_12_t GetSameTypeAttackBonusModifier(u32 battlerAtk, u32 moveType, u32 move, u32 abilityAtk) +static inline uq4_12_t GetSameTypeAttackBonusModifier(struct DamageCalculationData *damageCalcData, u32 abilityAtk) { + u32 battlerAtk = damageCalcData->battlerAtk; + u32 move = damageCalcData->move; + u32 moveType = damageCalcData->moveType; + if (moveType == TYPE_MYSTERY) return UQ_4_12(1.0); else if (gBattleStruct->pledgeMove && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), moveType)) @@ -9924,8 +9955,11 @@ static inline uq4_12_t GetSameTypeAttackBonusModifier(u32 battlerAtk, u32 moveTy } // Utility Umbrella holders take normal damage from what would be rain- and sun-weakened attacks. -static uq4_12_t GetWeatherDamageModifier(u32 battlerAtk, u32 move, u32 moveType, u32 holdEffectAtk, u32 holdEffectDef, u32 weather) +static uq4_12_t GetWeatherDamageModifier(struct DamageCalculationData *damageCalcData, u32 holdEffectAtk, u32 holdEffectDef, u32 weather) { + u32 move = damageCalcData->move; + u32 moveType = damageCalcData->moveType; + if (weather == B_WEATHER_NONE) return UQ_4_12(1.0); if (gMovesInfo[move].effect == EFFECT_HYDRO_STEAM && (weather & B_WEATHER_SUN) && holdEffectAtk != HOLD_EFFECT_UTILITY_UMBRELLA) @@ -9948,8 +9982,11 @@ static uq4_12_t GetWeatherDamageModifier(u32 battlerAtk, u32 move, u32 moveType, return UQ_4_12(1.0); } -static inline uq4_12_t GetBurnOrFrostBiteModifier(u32 battlerAtk, u32 move, u32 abilityAtk) +static inline uq4_12_t GetBurnOrFrostBiteModifier(struct DamageCalculationData *damageCalcData, u32 abilityAtk) { + u32 battlerAtk = damageCalcData->battlerAtk; + u32 move = damageCalcData->move; + if (gBattleMons[battlerAtk].status1 & STATUS1_BURN && IS_MOVE_PHYSICAL(move) && (B_BURN_FACADE_DMG < GEN_6 || gMovesInfo[move].effect != EFFECT_FACADE) @@ -9976,9 +10013,9 @@ static inline uq4_12_t GetGlaiveRushModifier(u32 battlerDef) return UQ_4_12(1.0); } -static inline uq4_12_t GetZMaxMoveAgainstProtectionModifier(u32 battlerDef, u32 move) +static inline uq4_12_t GetZMaxMoveAgainstProtectionModifier(struct DamageCalculationData *damageCalcData) { - if ((IsZMove(move) || IsMaxMove(move)) && IS_BATTLER_PROTECTED(battlerDef)) + if ((IsZMove(damageCalcData->move) || IsMaxMove(damageCalcData->move)) && IS_BATTLER_PROTECTED(damageCalcData->battlerDef)) return UQ_4_12(0.25); return UQ_4_12(1.0); } @@ -10119,8 +10156,11 @@ static inline uq4_12_t GetAttackerItemsModifier(u32 battlerAtk, uq4_12_t typeEff return UQ_4_12(1.0); } -static inline uq4_12_t GetDefenderItemsModifier(u32 moveType, u32 battlerDef, uq4_12_t typeEffectivenessModifier, bool32 updateFlags, u32 abilityDef, u32 holdEffectDef) +static inline uq4_12_t GetDefenderItemsModifier(struct DamageCalculationData *damageCalcData, uq4_12_t typeEffectivenessModifier, u32 abilityDef, u32 holdEffectDef) { + u32 battlerDef = damageCalcData->battlerDef; + u32 moveType = damageCalcData->moveType; + u32 holdEffectDefParam = GetBattlerHoldEffectParam(battlerDef); u32 itemDef = gBattleMons[battlerDef].item; @@ -10131,7 +10171,7 @@ static inline uq4_12_t GetDefenderItemsModifier(u32 moveType, u32 battlerDef, uq return UQ_4_12(1.0); if (moveType == holdEffectDefParam && (moveType == TYPE_NORMAL || typeEffectivenessModifier >= UQ_4_12(2.0))) { - if (updateFlags) + if (damageCalcData->updateFlags) gSpecialStatuses[battlerDef].berryReduced = TRUE; return (abilityDef == ABILITY_RIPEN) ? UQ_4_12(0.25) : UQ_4_12(0.5); } @@ -10150,9 +10190,15 @@ static inline uq4_12_t GetDefenderItemsModifier(u32 moveType, u32 battlerDef, uq // https://bulbapedia.bulbagarden.net/wiki/Damage#Generation_V_onward // Please Note: Fixed Point Multiplication is not associative. // The order of operations is relevant. -static inline uq4_12_t GetOtherModifiers(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, bool32 isCrit, uq4_12_t typeEffectivenessModifier, bool32 updateFlags, +static inline uq4_12_t GetOtherModifiers(struct DamageCalculationData *damageCalcData, uq4_12_t typeEffectivenessModifier, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk, u32 holdEffectDef) { + u32 battlerAtk = damageCalcData->battlerAtk; + u32 battlerDef = damageCalcData->battlerDef; + u32 move = damageCalcData->move; + u32 moveType = damageCalcData->moveType; + u32 isCrit = damageCalcData->isCrit; + uq4_12_t finalModifier = UQ_4_12(1.0); u32 battlerDefPartner = BATTLE_PARTNER(battlerDef); u32 unmodifiedAttackerSpeed = gBattleMons[battlerAtk].speed; @@ -10171,14 +10217,14 @@ static inline uq4_12_t GetOtherModifiers(u32 move, u32 moveType, u32 battlerAtk, DAMAGE_MULTIPLY_MODIFIER(GetDefenderAbilitiesModifier(move, moveType, battlerAtk, battlerDef, typeEffectivenessModifier, abilityDef)); DAMAGE_MULTIPLY_MODIFIER(GetDefenderPartnerAbilitiesModifier(battlerDefPartner)); DAMAGE_MULTIPLY_MODIFIER(GetAttackerItemsModifier(battlerAtk, typeEffectivenessModifier, holdEffectAtk)); - DAMAGE_MULTIPLY_MODIFIER(GetDefenderItemsModifier(moveType, battlerDef, typeEffectivenessModifier, updateFlags, abilityDef, holdEffectDef)); + DAMAGE_MULTIPLY_MODIFIER(GetDefenderItemsModifier(damageCalcData, typeEffectivenessModifier, abilityDef, holdEffectDef)); } else { DAMAGE_MULTIPLY_MODIFIER(GetDefenderAbilitiesModifier(move, moveType, battlerAtk, battlerDef, typeEffectivenessModifier, abilityDef)); DAMAGE_MULTIPLY_MODIFIER(GetDefenderPartnerAbilitiesModifier(battlerDefPartner)); DAMAGE_MULTIPLY_MODIFIER(GetAttackerAbilitiesModifier(battlerAtk, typeEffectivenessModifier, isCrit, abilityAtk)); - DAMAGE_MULTIPLY_MODIFIER(GetDefenderItemsModifier(moveType, battlerDef, typeEffectivenessModifier, updateFlags, abilityDef, holdEffectDef)); + DAMAGE_MULTIPLY_MODIFIER(GetDefenderItemsModifier(damageCalcData, typeEffectivenessModifier, abilityDef, holdEffectDef)); DAMAGE_MULTIPLY_MODIFIER(GetAttackerItemsModifier(battlerAtk, typeEffectivenessModifier, holdEffectAtk)); } return finalModifier; @@ -10190,73 +10236,75 @@ static inline uq4_12_t GetOtherModifiers(u32 move, u32 moveType, u32 battlerAtk, dmg = uq4_12_multiply_by_int_half_down(modifier, dmg); \ } while (0) -static inline s32 DoMoveDamageCalcVars(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, s32 fixedBasePower, - bool32 isCrit, bool32 randomFactor, bool32 updateFlags, uq4_12_t typeEffectivenessModifier, u32 weather, - u32 holdEffectAtk, u32 holdEffectDef, u32 abilityAtk, u32 abilityDef) +static inline s32 DoMoveDamageCalcVars(struct DamageCalculationData *damageCalcData, u32 fixedBasePower, uq4_12_t typeEffectivenessModifier, u32 weather, + u32 holdEffectAtk, u32 holdEffectDef, u32 abilityAtk, u32 abilityDef) { s32 dmg; u32 userFinalAttack; u32 targetFinalDefense; + u32 battlerAtk = damageCalcData->battlerAtk; + u32 battlerDef = damageCalcData->battlerDef; if (fixedBasePower) gBattleMovePower = fixedBasePower; else - gBattleMovePower = CalcMoveBasePowerAfterModifiers(move, battlerAtk, battlerDef, moveType, updateFlags, abilityAtk, abilityDef, holdEffectAtk, weather); + gBattleMovePower = CalcMoveBasePowerAfterModifiers(damageCalcData, abilityAtk, abilityDef, holdEffectAtk, weather); - userFinalAttack = CalcAttackStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags, abilityAtk, abilityDef, holdEffectAtk, weather); - targetFinalDefense = CalcDefenseStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags, abilityAtk, abilityDef, holdEffectDef, weather); + userFinalAttack = CalcAttackStat(damageCalcData, abilityAtk, abilityDef, holdEffectAtk, weather); + targetFinalDefense = CalcDefenseStat(damageCalcData, abilityAtk, abilityDef, holdEffectDef, weather); dmg = CalculateBaseDamage(gBattleMovePower, userFinalAttack, gBattleMons[battlerAtk].level, targetFinalDefense); - DAMAGE_APPLY_MODIFIER(GetTargetDamageModifier(move, battlerAtk, battlerDef)); + DAMAGE_APPLY_MODIFIER(GetTargetDamageModifier(damageCalcData)); DAMAGE_APPLY_MODIFIER(GetParentalBondModifier(battlerAtk)); - DAMAGE_APPLY_MODIFIER(GetWeatherDamageModifier(battlerAtk, move, moveType, holdEffectAtk, holdEffectDef, weather)); - DAMAGE_APPLY_MODIFIER(GetCriticalModifier(isCrit)); + DAMAGE_APPLY_MODIFIER(GetWeatherDamageModifier(damageCalcData, holdEffectAtk, holdEffectDef, weather)); + DAMAGE_APPLY_MODIFIER(GetCriticalModifier(damageCalcData->isCrit)); DAMAGE_APPLY_MODIFIER(GetGlaiveRushModifier(battlerDef)); - if (randomFactor) + if (damageCalcData->randomFactor) { dmg *= DMG_ROLL_PERCENT_HI - RandomUniform(RNG_DAMAGE_MODIFIER, 0, DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO); dmg /= 100; } if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA) - DAMAGE_APPLY_MODIFIER(GetTeraMultiplier(battlerAtk, moveType)); + DAMAGE_APPLY_MODIFIER(GetTeraMultiplier(battlerAtk, damageCalcData->moveType)); else - DAMAGE_APPLY_MODIFIER(GetSameTypeAttackBonusModifier(battlerAtk, moveType, move, abilityAtk)); + DAMAGE_APPLY_MODIFIER(GetSameTypeAttackBonusModifier(damageCalcData, abilityAtk)); DAMAGE_APPLY_MODIFIER(typeEffectivenessModifier); - DAMAGE_APPLY_MODIFIER(GetBurnOrFrostBiteModifier(battlerAtk, move, abilityAtk)); - DAMAGE_APPLY_MODIFIER(GetZMaxMoveAgainstProtectionModifier(battlerDef, move)); - DAMAGE_APPLY_MODIFIER(GetOtherModifiers(move, moveType, battlerAtk, battlerDef, isCrit, typeEffectivenessModifier, updateFlags, abilityAtk, abilityDef, holdEffectAtk, holdEffectDef)); + DAMAGE_APPLY_MODIFIER(GetBurnOrFrostBiteModifier(damageCalcData, abilityAtk)); + DAMAGE_APPLY_MODIFIER(GetZMaxMoveAgainstProtectionModifier(damageCalcData)); + DAMAGE_APPLY_MODIFIER(GetOtherModifiers(damageCalcData, typeEffectivenessModifier, abilityAtk, abilityDef, holdEffectAtk, holdEffectDef)); if (dmg == 0) dmg = 1; return dmg; } -static inline s32 DoMoveDamageCalc(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, s32 fixedBasePower, - bool32 isCrit, bool32 randomFactor, bool32 updateFlags, uq4_12_t typeEffectivenessModifier, u32 weather) +static inline s32 DoMoveDamageCalc(struct DamageCalculationData *damageCalcData, u32 fixedBasePower, uq4_12_t typeEffectivenessModifier, u32 weather) { u32 holdEffectAtk, holdEffectDef, abilityAtk, abilityDef; if (typeEffectivenessModifier == UQ_4_12(0.0)) return 0; - holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE); - holdEffectDef = GetBattlerHoldEffect(battlerDef, TRUE); - abilityAtk = GetBattlerAbility(battlerAtk); - abilityDef = GetBattlerAbility(battlerDef); + holdEffectAtk = GetBattlerHoldEffect(damageCalcData->battlerAtk, TRUE); + holdEffectDef = GetBattlerHoldEffect(damageCalcData->battlerDef, TRUE); + abilityAtk = GetBattlerAbility(damageCalcData->battlerAtk); + abilityDef = GetBattlerAbility(damageCalcData->battlerDef); - return DoMoveDamageCalcVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, isCrit, randomFactor, - updateFlags, typeEffectivenessModifier, weather, holdEffectAtk, holdEffectDef, abilityAtk, abilityDef); + return DoMoveDamageCalcVars(damageCalcData, fixedBasePower, typeEffectivenessModifier, weather, holdEffectAtk, holdEffectDef, abilityAtk, abilityDef); } -static inline s32 DoFutureSightAttackDamageCalcVars(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, - bool32 isCrit, bool32 randomFactor, bool32 updateFlags, uq4_12_t typeEffectivenessModifier, u32 weather, - u32 holdEffectDef, u32 abilityDef) +static inline s32 DoFutureSightAttackDamageCalcVars(struct DamageCalculationData *damageCalcData, uq4_12_t typeEffectivenessModifier, + u32 weather, u32 holdEffectDef, u32 abilityDef) { s32 dmg; u32 userFinalAttack; u32 targetFinalDefense; + u32 battlerAtk = damageCalcData->battlerAtk; + u32 battlerDef = damageCalcData->battlerDef; + u32 move = damageCalcData->move; + u32 moveType = damageCalcData->moveType; struct Pokemon *party = GetSideParty(GetBattlerSide(battlerAtk)); struct Pokemon *partyMon = &party[gWishFutureKnock.futureSightPartyIndex[battlerDef]]; @@ -10269,12 +10317,12 @@ static inline s32 DoFutureSightAttackDamageCalcVars(u32 move, u32 battlerAtk, u3 else userFinalAttack = GetMonData(partyMon, MON_DATA_SPATK, NULL); - targetFinalDefense = CalcDefenseStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags, ABILITY_NONE, abilityDef, holdEffectDef, weather); + targetFinalDefense = CalcDefenseStat(damageCalcData, ABILITY_NONE, abilityDef, holdEffectDef, weather); dmg = CalculateBaseDamage(gBattleMovePower, userFinalAttack, partyMonLevel, targetFinalDefense); - DAMAGE_APPLY_MODIFIER(GetCriticalModifier(isCrit)); + DAMAGE_APPLY_MODIFIER(GetCriticalModifier(damageCalcData->isCrit)); - if (randomFactor) + if (damageCalcData->randomFactor) { dmg *= DMG_ROLL_PERCENT_HI - RandomUniform(RNG_DAMAGE_MODIFIER, 0, DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO); dmg /= 100; @@ -10295,19 +10343,17 @@ static inline s32 DoFutureSightAttackDamageCalcVars(u32 move, u32 battlerAtk, u3 return dmg; } -static inline s32 DoFutureSightAttackDamageCalc(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, - bool32 isCrit, bool32 randomFactor, bool32 updateFlags, uq4_12_t typeEffectivenessModifier, u32 weather) +static inline s32 DoFutureSightAttackDamageCalc(struct DamageCalculationData *damageCalcData, uq4_12_t typeEffectivenessModifier, u32 weather) { u32 holdEffectDef, abilityDef; if (typeEffectivenessModifier == UQ_4_12(0.0)) return 0; - holdEffectDef = GetBattlerHoldEffect(battlerDef, TRUE); - abilityDef = GetBattlerAbility(battlerDef); + holdEffectDef = GetBattlerHoldEffect(damageCalcData->battlerDef, TRUE); + abilityDef = GetBattlerAbility(damageCalcData->battlerDef); - return DoFutureSightAttackDamageCalcVars(move, battlerAtk, battlerDef, moveType, isCrit, randomFactor, - updateFlags, typeEffectivenessModifier, weather, holdEffectDef, abilityDef); + return DoFutureSightAttackDamageCalcVars(damageCalcData, typeEffectivenessModifier, weather, holdEffectDef, abilityDef); } #undef DAMAGE_APPLY_MODIFIER @@ -10320,31 +10366,37 @@ static u32 GetWeather(void) return gBattleWeather; } -s32 CalculateMoveDamage(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, s32 fixedBasePower, bool32 isCrit, bool32 randomFactor, bool32 updateFlags) +static inline bool32 IsFutureSightAttackerInParty(struct DamageCalculationData *damageCalcData) { - struct Pokemon *party = GetSideParty(GetBattlerSide(gBattlerAttacker)); + if (gMovesInfo[damageCalcData->move].effect != EFFECT_FUTURE_SIGHT) + return FALSE; - if (gMovesInfo[move].effect == EFFECT_FUTURE_SIGHT - && (&party[gWishFutureKnock.futureSightPartyIndex[battlerDef]] != &party[gBattlerPartyIndexes[battlerAtk]]) ) - { - return DoFutureSightAttackDamageCalc(move, battlerAtk, battlerDef, moveType, isCrit, randomFactor, - updateFlags, CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, GetBattlerAbility(battlerDef), updateFlags), - GetWeather()); - } - else - { - return DoMoveDamageCalc(move, battlerAtk, battlerDef, moveType, fixedBasePower, isCrit, randomFactor, - updateFlags, CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, GetBattlerAbility(battlerDef), updateFlags), - GetWeather()); - } + struct Pokemon *party = GetSideParty(GetBattlerSide(gBattlerAttacker)); + return &party[gWishFutureKnock.futureSightPartyIndex[damageCalcData->battlerDef]] + != &party[gBattlerPartyIndexes[damageCalcData->battlerAtk]]; +} + +s32 CalculateMoveDamage(struct DamageCalculationData *damageCalcData, u32 fixedBasePower) +{ + u32 typeEffectivenessMultiplier = CalcTypeEffectivenessMultiplier(damageCalcData->move, + damageCalcData->moveType, + damageCalcData->battlerAtk, + damageCalcData->battlerDef, + GetBattlerAbility(damageCalcData->battlerDef), + damageCalcData->updateFlags); + + if (IsFutureSightAttackerInParty(damageCalcData)) + return DoFutureSightAttackDamageCalc(damageCalcData, typeEffectivenessMultiplier, GetWeather()); + + return DoMoveDamageCalc(damageCalcData, fixedBasePower, typeEffectivenessMultiplier, GetWeather()); } // for AI so that typeEffectivenessModifier, weather, abilities and holdEffects are calculated only once -s32 CalculateMoveDamageVars(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, s32 fixedBasePower, uq4_12_t typeEffectivenessModifier, - u32 weather, bool32 isCrit, u32 holdEffectAtk, u32 holdEffectDef, u32 abilityAtk, u32 abilityDef) +s32 CalculateMoveDamageVars(struct DamageCalculationData *damageCalcData, u32 fixedBasePower, uq4_12_t typeEffectivenessModifier, + u32 weather, u32 holdEffectAtk, u32 holdEffectDef, u32 abilityAtk, u32 abilityDef) { - return DoMoveDamageCalcVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, isCrit, FALSE, FALSE, - typeEffectivenessModifier, weather, holdEffectAtk, holdEffectDef, abilityAtk, abilityDef); + return DoMoveDamageCalcVars(damageCalcData, fixedBasePower, typeEffectivenessModifier, weather, + holdEffectAtk, holdEffectDef, abilityAtk, abilityDef); } static inline void MulByTypeEffectiveness(uq4_12_t *modifier, u32 move, u32 moveType, u32 battlerDef, u32 defType, u32 battlerAtk, bool32 recordAbilities) diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 787c5d505d..5610689f49 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -464,6 +464,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if mon would ASSUME(gSpeciesInfo[SPECIES_PELIPPER].types[1] == TYPE_FLYING); ASSUME(gMovesInfo[MOVE_THUNDERBOLT].type == TYPE_ELECTRIC); ASSUME(gMovesInfo[MOVE_EARTHQUAKE].type == TYPE_GROUND); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); PLAYER(SPECIES_ELECTRODE) { Moves(MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_THUNDER_SHOCK); } OPPONENT(SPECIES_PELIPPER) { Moves(MOVE_EARTHQUAKE); }; From 35a22d6e82fad9f3588f7415c8a7d87cda0e265a Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 31 Oct 2024 10:58:00 +0100 Subject: [PATCH 46/50] Follow up for #5570 (#5625) --- include/battle_ai_util.h | 4 ++-- src/battle_ai_main.c | 2 +- src/battle_ai_switch_items.c | 2 +- src/battle_ai_util.c | 10 +++++----- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 63991ed980..c74cad2e78 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -100,8 +100,8 @@ bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility); bool32 IsAffectedByPowder(u32 battler, u32 ability, u32 holdEffect); bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category); s32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo); -struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 battlerAtk, u32 battlerDef, u32 move, u8 *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType); -struct SimulatedDamage AI_CalcDamage(u32 battlerAtk, u32 battlerDef, u32 move, u8 *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType); +struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType); +struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType); bool32 AI_IsDamagedByRecoil(u32 battler); u32 GetNoOfHitsToKO(u32 dmg, s32 hp); u32 GetNoOfHitsToKOBattlerDmg(u32 dmg, u32 battlerDef); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index bdd0aef150..3c031de092 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -436,7 +436,7 @@ static void SetBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u3 //&& gMovesInfo[move].power != 0 /* we want to get effectiveness and accuracy of status moves */ && !(aiData->moveLimitations[battlerAtk] & (1u << moveIndex))) { - dmg = AI_CalcDamage(battlerAtk, battlerDef, move, &effectiveness, TRUE, weather, rollType); + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, rollType); aiData->moveAccuracy[battlerAtk][battlerDef][moveIndex] = Ai_SetMoveAccuracy(aiData, battlerAtk, battlerDef, move); } aiData->simulatedDmg[battlerAtk][battlerDef][moveIndex] = dmg; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 5e606b6a38..47f5cae740 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -158,7 +158,7 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) playerMove = gBattleMons[opposingBattler].moves[i]; if (playerMove != MOVE_NONE && gMovesInfo[playerMove].power != 0) { - damageTaken = AI_CalcDamage(opposingBattler, battler, playerMove, &effectiveness, FALSE, weather, DMG_ROLL_HIGHEST).expected; + damageTaken = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather, DMG_ROLL_HIGHEST).expected; if (damageTaken > maxDamageTaken) maxDamageTaken = damageTaken; } diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 4f52873f9f..867e94631b 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -374,7 +374,7 @@ bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category) } // To save computation time this function has 2 variants. One saves, sets and restores battlers, while the other doesn't. -struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 battlerAtk, u32 battlerDef, u32 move, u8 *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType) +struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType) { struct SimulatedDamage dmg; @@ -382,7 +382,7 @@ struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 battlerAtk, u32 battlerDef, SaveBattlerData(battlerDef); SetBattlerData(battlerAtk); SetBattlerData(battlerDef); - dmg = AI_CalcDamage(battlerAtk, battlerDef, move, typeEffectiveness, considerZPower, AI_GetWeather(AI_DATA), rollType); + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, typeEffectiveness, considerZPower, AI_GetWeather(AI_DATA), rollType); RestoreBattlerData(battlerAtk); RestoreBattlerData(battlerDef); return dmg; @@ -501,7 +501,7 @@ static inline s32 GetDamageByRollType(s32 dmg, enum DamageRollType rollType) return DmgRoll(dmg); } -struct SimulatedDamage AI_CalcDamage(u32 battlerAtk, u32 battlerDef, u32 move, u8 *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType) +struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType) { struct SimulatedDamage simDamage; s32 moveType; @@ -3466,7 +3466,7 @@ s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct Battl AI_THINKING_STRUCT->saved[battlerAtk].saved = FALSE; } - dmg = AI_CalcDamage(battlerAtk, battlerDef, move, &effectiveness, FALSE, AI_GetWeather(AI_DATA), rollType); + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, FALSE, AI_GetWeather(AI_DATA), rollType); // restores original gBattleMon struct FreeRestoreBattleMons(savedBattleMons); @@ -3934,7 +3934,7 @@ bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove) else if (!IS_MOVE_STATUS(chosenMove) && IS_MOVE_STATUS(zMove)) return FALSE; - dmg = AI_CalcDamageSaveBattlers(battlerAtk, battlerDef, chosenMove, &effectiveness, FALSE, DMG_ROLL_DEFAULT); + dmg = AI_CalcDamageSaveBattlers(chosenMove, battlerAtk, battlerDef, &effectiveness, FALSE, DMG_ROLL_DEFAULT); if (!IS_MOVE_STATUS(chosenMove) && dmg.minimum >= gBattleMons[battlerDef].hp) return FALSE; // don't waste damaging z move if can otherwise faint target From 52514350e94f72ccc071e9ddee253c2a3771fd03 Mon Sep 17 00:00:00 2001 From: Philipp AUER Date: Fri, 1 Nov 2024 04:00:32 -0400 Subject: [PATCH 47/50] Unwind TRAINER_CLASS macro (#5611) Co-authored-by: sbird --- src/battle_main.c | 142 +++++++++++++++++------------------ src/battle_script_commands.c | 2 +- 2 files changed, 68 insertions(+), 76 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index 3cee7da264..ecad0d4e82 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -304,83 +304,75 @@ static const s8 sCenterToCornerVecXs[8] ={-32, -16, -16, -32, -32}; #include "data/types_info.h" -// extra args are money and ball -#define TRAINER_CLASS(trainerClass, trainerName, ...) \ - [trainerClass] = \ - { \ - .name = _(trainerName), \ - .money = DEFAULT(5, __VA_ARGS__), \ - .ball = DEFAULT_2(ITEM_POKE_BALL, __VA_ARGS__), \ - } - +// [TRAINER_CLASS_XYZ] = { _("name"), , } const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT] = { - TRAINER_CLASS(TRAINER_CLASS_PKMN_TRAINER_1, "{PKMN} TRAINER"), - TRAINER_CLASS(TRAINER_CLASS_PKMN_TRAINER_2, "{PKMN} TRAINER"), - TRAINER_CLASS(TRAINER_CLASS_HIKER, "HIKER", 10), - TRAINER_CLASS(TRAINER_CLASS_TEAM_AQUA, "TEAM AQUA"), - TRAINER_CLASS(TRAINER_CLASS_PKMN_BREEDER, "{PKMN} BREEDER", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? BALL_HEAL : BALL_FRIEND), - TRAINER_CLASS(TRAINER_CLASS_COOLTRAINER, "COOLTRAINER", 12, BALL_ULTRA), - TRAINER_CLASS(TRAINER_CLASS_BIRD_KEEPER, "BIRD KEEPER", 8), - TRAINER_CLASS(TRAINER_CLASS_COLLECTOR, "COLLECTOR", 15, BALL_PREMIER), - TRAINER_CLASS(TRAINER_CLASS_SWIMMER_M, "SWIMMER♂", 2, BALL_DIVE), - TRAINER_CLASS(TRAINER_CLASS_TEAM_MAGMA, "TEAM MAGMA"), - TRAINER_CLASS(TRAINER_CLASS_EXPERT, "EXPERT", 10), - TRAINER_CLASS(TRAINER_CLASS_AQUA_ADMIN, "AQUA ADMIN", 10), - TRAINER_CLASS(TRAINER_CLASS_BLACK_BELT, "BLACK BELT", 8, BALL_ULTRA), - TRAINER_CLASS(TRAINER_CLASS_AQUA_LEADER, "AQUA LEADER", 20, BALL_MASTER), - TRAINER_CLASS(TRAINER_CLASS_HEX_MANIAC, "HEX MANIAC", 6), - TRAINER_CLASS(TRAINER_CLASS_AROMA_LADY, "AROMA LADY", 10), - TRAINER_CLASS(TRAINER_CLASS_RUIN_MANIAC, "RUIN MANIAC", 15), - TRAINER_CLASS(TRAINER_CLASS_INTERVIEWER, "INTERVIEWER", 12), - TRAINER_CLASS(TRAINER_CLASS_TUBER_F, "TUBER", 1), - TRAINER_CLASS(TRAINER_CLASS_TUBER_M, "TUBER", 1), - TRAINER_CLASS(TRAINER_CLASS_LADY, "LADY", 50), - TRAINER_CLASS(TRAINER_CLASS_BEAUTY, "BEAUTY", 20), - TRAINER_CLASS(TRAINER_CLASS_RICH_BOY, "RICH BOY", 50), - TRAINER_CLASS(TRAINER_CLASS_POKEMANIAC, "POKéMANIAC", 15), - TRAINER_CLASS(TRAINER_CLASS_GUITARIST, "GUITARIST", 8), - TRAINER_CLASS(TRAINER_CLASS_KINDLER, "KINDLER", 8), - TRAINER_CLASS(TRAINER_CLASS_CAMPER, "CAMPER", 4), - TRAINER_CLASS(TRAINER_CLASS_PICNICKER, "PICNICKER", 4), - TRAINER_CLASS(TRAINER_CLASS_BUG_MANIAC, "BUG MANIAC", 15), - TRAINER_CLASS(TRAINER_CLASS_PSYCHIC, "PSYCHIC", 6), - TRAINER_CLASS(TRAINER_CLASS_GENTLEMAN, "GENTLEMAN", 20, BALL_LUXURY), - TRAINER_CLASS(TRAINER_CLASS_ELITE_FOUR, "ELITE FOUR", 25, BALL_ULTRA), - TRAINER_CLASS(TRAINER_CLASS_LEADER, "LEADER", 25), - TRAINER_CLASS(TRAINER_CLASS_SCHOOL_KID, "SCHOOL KID"), - TRAINER_CLASS(TRAINER_CLASS_SR_AND_JR, "SR. AND JR.", 4), - TRAINER_CLASS(TRAINER_CLASS_WINSTRATE, "WINSTRATE", 10), - TRAINER_CLASS(TRAINER_CLASS_POKEFAN, "POKéFAN", 20), - TRAINER_CLASS(TRAINER_CLASS_YOUNGSTER, "YOUNGSTER", 4), - TRAINER_CLASS(TRAINER_CLASS_CHAMPION, "CHAMPION", 50), - TRAINER_CLASS(TRAINER_CLASS_FISHERMAN, "FISHERMAN", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? BALL_DIVE : BALL_LURE), - TRAINER_CLASS(TRAINER_CLASS_TRIATHLETE, "TRIATHLETE", 10), - TRAINER_CLASS(TRAINER_CLASS_DRAGON_TAMER, "DRAGON TAMER", 12), - TRAINER_CLASS(TRAINER_CLASS_NINJA_BOY, "NINJA BOY", 3), - TRAINER_CLASS(TRAINER_CLASS_BATTLE_GIRL, "BATTLE GIRL", 6), - TRAINER_CLASS(TRAINER_CLASS_PARASOL_LADY, "PARASOL LADY", 10), - TRAINER_CLASS(TRAINER_CLASS_SWIMMER_F, "SWIMMER♀", 2, BALL_DIVE), - TRAINER_CLASS(TRAINER_CLASS_TWINS, "TWINS", 3), - TRAINER_CLASS(TRAINER_CLASS_SAILOR, "SAILOR", 8), - TRAINER_CLASS(TRAINER_CLASS_COOLTRAINER_2, "COOLTRAINER", 5, BALL_ULTRA), - TRAINER_CLASS(TRAINER_CLASS_MAGMA_ADMIN, "MAGMA ADMIN", 10), - TRAINER_CLASS(TRAINER_CLASS_RIVAL, "{PKMN} TRAINER", 15), - TRAINER_CLASS(TRAINER_CLASS_BUG_CATCHER, "BUG CATCHER", 4), - TRAINER_CLASS(TRAINER_CLASS_PKMN_RANGER, "{PKMN} RANGER", 12), - TRAINER_CLASS(TRAINER_CLASS_MAGMA_LEADER, "MAGMA LEADER", 20, BALL_MASTER), - TRAINER_CLASS(TRAINER_CLASS_LASS, "LASS", 4), - TRAINER_CLASS(TRAINER_CLASS_YOUNG_COUPLE, "YOUNG COUPLE", 8), - TRAINER_CLASS(TRAINER_CLASS_OLD_COUPLE, "OLD COUPLE", 10), - TRAINER_CLASS(TRAINER_CLASS_SIS_AND_BRO, "SIS AND BRO", 3), - TRAINER_CLASS(TRAINER_CLASS_SALON_MAIDEN, "SALON MAIDEN"), - TRAINER_CLASS(TRAINER_CLASS_DOME_ACE, "DOME ACE"), - TRAINER_CLASS(TRAINER_CLASS_PALACE_MAVEN, "PALACE MAVEN"), - TRAINER_CLASS(TRAINER_CLASS_ARENA_TYCOON, "ARENA TYCOON"), - TRAINER_CLASS(TRAINER_CLASS_FACTORY_HEAD, "FACTORY HEAD"), - TRAINER_CLASS(TRAINER_CLASS_PIKE_QUEEN, "PIKE QUEEN"), - TRAINER_CLASS(TRAINER_CLASS_PYRAMID_KING, "PYRAMID KING"), - TRAINER_CLASS(TRAINER_CLASS_RS_PROTAG, "{PKMN} TRAINER"), + [TRAINER_CLASS_PKMN_TRAINER_1] = { _("{PKMN} TRAINER") }, + [TRAINER_CLASS_PKMN_TRAINER_2] = { _("{PKMN} TRAINER") }, + [TRAINER_CLASS_HIKER] = { _("HIKER"), 10 }, + [TRAINER_CLASS_TEAM_AQUA] = { _("TEAM AQUA") }, + [TRAINER_CLASS_PKMN_BREEDER] = { _("{PKMN} BREEDER"), 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? BALL_HEAL : BALL_FRIEND }, + [TRAINER_CLASS_COOLTRAINER] = { _("COOLTRAINER"), 12, BALL_ULTRA }, + [TRAINER_CLASS_BIRD_KEEPER] = { _("BIRD KEEPER"), 8 }, + [TRAINER_CLASS_COLLECTOR] = { _("COLLECTOR"), 15, BALL_PREMIER }, + [TRAINER_CLASS_SWIMMER_M] = { _("SWIMMER♂"), 2, BALL_DIVE }, + [TRAINER_CLASS_TEAM_MAGMA] = { _("TEAM MAGMA") }, + [TRAINER_CLASS_EXPERT] = { _("EXPERT"), 10 }, + [TRAINER_CLASS_AQUA_ADMIN] = { _("AQUA ADMIN"), 10 }, + [TRAINER_CLASS_BLACK_BELT] = { _("BLACK BELT"), 8, BALL_ULTRA }, + [TRAINER_CLASS_AQUA_LEADER] = { _("AQUA LEADER"), 20, BALL_MASTER }, + [TRAINER_CLASS_HEX_MANIAC] = { _("HEX MANIAC"), 6 }, + [TRAINER_CLASS_AROMA_LADY] = { _("AROMA LADY"), 10 }, + [TRAINER_CLASS_RUIN_MANIAC] = { _("RUIN MANIAC"), 15 }, + [TRAINER_CLASS_INTERVIEWER] = { _("INTERVIEWER"), 12 }, + [TRAINER_CLASS_TUBER_F] = { _("TUBER"), 1 }, + [TRAINER_CLASS_TUBER_M] = { _("TUBER"), 1 }, + [TRAINER_CLASS_LADY] = { _("LADY"), 50 }, + [TRAINER_CLASS_BEAUTY] = { _("BEAUTY"), 20 }, + [TRAINER_CLASS_RICH_BOY] = { _("RICH BOY"), 50 }, + [TRAINER_CLASS_POKEMANIAC] = { _("POKéMANIAC"), 15 }, + [TRAINER_CLASS_GUITARIST] = { _("GUITARIST"), 8 }, + [TRAINER_CLASS_KINDLER] = { _("KINDLER"), 8 }, + [TRAINER_CLASS_CAMPER] = { _("CAMPER"), 4 }, + [TRAINER_CLASS_PICNICKER] = { _("PICNICKER"), 4 }, + [TRAINER_CLASS_BUG_MANIAC] = { _("BUG MANIAC"), 15 }, + [TRAINER_CLASS_PSYCHIC] = { _("PSYCHIC"), 6 }, + [TRAINER_CLASS_GENTLEMAN] = { _("GENTLEMAN"), 20, BALL_LUXURY }, + [TRAINER_CLASS_ELITE_FOUR] = { _("ELITE FOUR"), 25, BALL_ULTRA }, + [TRAINER_CLASS_LEADER] = { _("LEADER"), 25 }, + [TRAINER_CLASS_SCHOOL_KID] = { _("SCHOOL KID") }, + [TRAINER_CLASS_SR_AND_JR] = { _("SR. AND JR."), 4 }, + [TRAINER_CLASS_WINSTRATE] = { _("WINSTRATE"), 10 }, + [TRAINER_CLASS_POKEFAN] = { _("POKéFAN"), 20 }, + [TRAINER_CLASS_YOUNGSTER] = { _("YOUNGSTER"), 4 }, + [TRAINER_CLASS_CHAMPION] = { _("CHAMPION"), 50 }, + [TRAINER_CLASS_FISHERMAN] = { _("FISHERMAN"), 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? BALL_DIVE : BALL_LURE }, + [TRAINER_CLASS_TRIATHLETE] = { _("TRIATHLETE"), 10 }, + [TRAINER_CLASS_DRAGON_TAMER] = { _("DRAGON TAMER"), 12 }, + [TRAINER_CLASS_NINJA_BOY] = { _("NINJA BOY"), 3 }, + [TRAINER_CLASS_BATTLE_GIRL] = { _("BATTLE GIRL"), 6 }, + [TRAINER_CLASS_PARASOL_LADY] = { _("PARASOL LADY"), 10 }, + [TRAINER_CLASS_SWIMMER_F] = { _("SWIMMER♀"), 2, BALL_DIVE }, + [TRAINER_CLASS_TWINS] = { _("TWINS"), 3 }, + [TRAINER_CLASS_SAILOR] = { _("SAILOR"), 8 }, + [TRAINER_CLASS_COOLTRAINER_2] = { _("COOLTRAINER"), 5, BALL_ULTRA }, + [TRAINER_CLASS_MAGMA_ADMIN] = { _("MAGMA ADMIN"), 10 }, + [TRAINER_CLASS_RIVAL] = { _("{PKMN} TRAINER"), 15 }, + [TRAINER_CLASS_BUG_CATCHER] = { _("BUG CATCHER"), 4 }, + [TRAINER_CLASS_PKMN_RANGER] = { _("{PKMN} RANGER"), 12 }, + [TRAINER_CLASS_MAGMA_LEADER] = { _("MAGMA LEADER"), 20, BALL_MASTER }, + [TRAINER_CLASS_LASS] = { _("LASS"), 4 }, + [TRAINER_CLASS_YOUNG_COUPLE] = { _("YOUNG COUPLE"), 8 }, + [TRAINER_CLASS_OLD_COUPLE] = { _("OLD COUPLE"), 10 }, + [TRAINER_CLASS_SIS_AND_BRO] = { _("SIS AND BRO"), 3 }, + [TRAINER_CLASS_SALON_MAIDEN] = { _("SALON MAIDEN") }, + [TRAINER_CLASS_DOME_ACE] = { _("DOME ACE") }, + [TRAINER_CLASS_PALACE_MAVEN] = { _("PALACE MAVEN") }, + [TRAINER_CLASS_ARENA_TYCOON] = { _("ARENA TYCOON") }, + [TRAINER_CLASS_FACTORY_HEAD] = { _("FACTORY HEAD") }, + [TRAINER_CLASS_PIKE_QUEEN] = { _("PIKE QUEEN") }, + [TRAINER_CLASS_PYRAMID_KING] = { _("PYRAMID KING") }, + [TRAINER_CLASS_RS_PROTAG] = { _("{PKMN} TRAINER") }, }; static void (* const sTurnActionsFuncsTable[])(void) = diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 805be74e4e..6284f675b1 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7868,7 +7868,7 @@ static u32 GetTrainerMoneyToGive(u16 trainerId) if (party == NULL) return 20; lastMonLevel = party[GetTrainerPartySizeFromId(trainerId) - 1].lvl; - trainerMoney = gTrainerClasses[GetTrainerClassFromId(trainerId)].money; + trainerMoney = gTrainerClasses[GetTrainerClassFromId(trainerId)].money ?: 5; if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * trainerMoney; From 56331abbb493113d7a73176a117eb1f9b3d422f6 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 1 Nov 2024 12:57:09 +0100 Subject: [PATCH 48/50] AI_CalcDamage clean up (#5629) Co-authored-by: Bassoonian --- src/battle_ai_util.c | 247 +++++++++++++++++++++++-------------------- 1 file changed, 134 insertions(+), 113 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 867e94631b..0277d7fd07 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -501,6 +501,131 @@ static inline s32 GetDamageByRollType(s32 dmg, enum DamageRollType rollType) return DmgRoll(dmg); } +static inline void SetMoveDamageCategory(u32 battlerAtk, u32 battlerDef, u32 move) +{ + switch (gMovesInfo[move].effect) + { + case EFFECT_PHOTON_GEYSER: + gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL); + break; + case EFFECT_SHELL_SIDE_ARM: + if (gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL) + gBattleStruct->swapDamageCategory = TRUE; + break; + case EFFECT_TERA_BLAST: + if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA) + gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; + break; + case EFFECT_TERA_STARSTORM: + if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && GET_BASE_SPECIES_ID(GetMonData(GetPartyBattlerData(battlerAtk), MON_DATA_SPECIES)) == SPECIES_TERAPAGOS) + gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; + break; + } +} + +static inline s32 SetFixedMoveBasePower(u32 battlerAtk, u32 move) +{ + s32 fixedBasePower = 0, n = 0; + switch (gMovesInfo[move].effect) + { + case EFFECT_ROLLOUT: + n = gDisableStructs[battlerAtk].rolloutTimer - 1; + fixedBasePower = CalcRolloutBasePower(battlerAtk, gMovesInfo[move].power, n < 0 ? 5 : n); + break; + case EFFECT_FURY_CUTTER: + fixedBasePower = CalcFuryCutterBasePower(gMovesInfo[move].power, min(gDisableStructs[battlerAtk].furyCutterCounter + 1, 5)); + break; + default: + fixedBasePower = 0; + break; + } + return fixedBasePower; +} + +static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCalcData, s32 *expectedDamage, s32 *minimumDamage, u32 holdEffectAtk, u32 abilityAtk) +{ + u32 move = damageCalcData->move; + s32 expected = *expectedDamage; + s32 minimum = *minimumDamage; + + switch (gMovesInfo[move].effect) + { + case EFFECT_LEVEL_DAMAGE: + expected = minimum = gBattleMons[damageCalcData->battlerAtk].level * (abilityAtk == ABILITY_PARENTAL_BOND ? 2 : 1); + break; + case EFFECT_PSYWAVE: + expected = minimum = gBattleMons[damageCalcData->battlerAtk].level * (abilityAtk == ABILITY_PARENTAL_BOND ? 2 : 1); + break; + case EFFECT_FIXED_DAMAGE_ARG: + expected = minimum = gMovesInfo[move].argument * (abilityAtk == ABILITY_PARENTAL_BOND ? 2 : 1); + break; + case EFFECT_MULTI_HIT: + if (move == MOVE_WATER_SHURIKEN && gBattleMons[damageCalcData->battlerAtk].species == SPECIES_GRENINJA_ASH) + { + expected *= 3; + minimum *= 3; + } + else if (abilityAtk == ABILITY_SKILL_LINK) + { + expected *= 5; + minimum *= 5; + } + else if (holdEffectAtk == HOLD_EFFECT_LOADED_DICE) + { + expected *= 9; + expected /= 2; + minimum *= 4; + } + else + { + expected *= 3; + minimum *= 2; + } + break; + case EFFECT_ENDEAVOR: + // If target has less HP than user, Endeavor does no damage + expected = minimum = max(0, gBattleMons[damageCalcData->battlerDef].hp - gBattleMons[damageCalcData->battlerAtk].hp); + break; + case EFFECT_SUPER_FANG: + expected = minimum = (abilityAtk == ABILITY_PARENTAL_BOND + ? max(2, gBattleMons[damageCalcData->battlerDef].hp * 3 / 4) + : max(1, gBattleMons[damageCalcData->battlerDef].hp / 2)); + break; + case EFFECT_FINAL_GAMBIT: + expected = minimum = gBattleMons[damageCalcData->battlerAtk].hp; + break; + case EFFECT_BEAT_UP: + if (B_BEAT_UP >= GEN_5) + { + u32 partyCount = CalculatePartyCount(GetBattlerParty(damageCalcData->battlerAtk)); + u32 i; + gBattleStruct->beatUpSlot = 0; + damageCalcData->isCrit = FALSE; + expected = 0; + for (i = 0; i < partyCount; i++) + expected += CalculateMoveDamage(damageCalcData, 0); + minimum = expected; + gBattleStruct->beatUpSlot = 0; + } + break; + } + + // Handle other multi-strike moves + if (gMovesInfo[move].strikeCount > 1 && gMovesInfo[move].effect != EFFECT_TRIPLE_KICK) + { + expected *= gMovesInfo[move].strikeCount; + minimum *= gMovesInfo[move].strikeCount; + } + + if (expected == 0) + expected = 1; + if (minimum == 0) + minimum = 1; + + *expectedDamage = expected; + *minimumDamage = minimum; +} + struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType) { struct SimulatedDamage simDamage; @@ -527,27 +652,7 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u SetActiveGimmick(battlerAtk, gBattleStruct->gimmick.usableGimmick[battlerAtk]); } - switch (moveEffect) - { - case EFFECT_PHOTON_GEYSER: - gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL); - break; - case EFFECT_SHELL_SIDE_ARM: - if (gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL) - gBattleStruct->swapDamageCategory = TRUE; - break; - case EFFECT_TERA_BLAST: - if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA) - gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; - break; - case EFFECT_TERA_STARSTORM: - if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && gBattleMons[battlerAtk].species == SPECIES_TERAPAGOS_STELLAR) - gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; - break; - } - - gBattleStruct->dynamicMoveType = 0; - + SetMoveDamageCategory(battlerAtk, battlerDef, move); SetTypeBeforeUsingMove(move, battlerAtk); moveType = GetMoveType(move); effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, aiData->abilities[battlerDef], FALSE); @@ -557,23 +662,10 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u if (gMovesInfo[move].power && !isDamageMoveUnusable) { - s32 critChanceIndex, fixedBasePower, n; + s32 critChanceIndex, fixedBasePower; ProteanTryChangeType(battlerAtk, aiData->abilities[battlerAtk], move, moveType); - // Certain moves like Rollout calculate damage based on values which change during the move execution, but before calling dmg calc. - switch (moveEffect) - { - case EFFECT_ROLLOUT: - n = gDisableStructs[battlerAtk].rolloutTimer - 1; - fixedBasePower = CalcRolloutBasePower(battlerAtk, gMovesInfo[move].power, n < 0 ? 5 : n); - break; - case EFFECT_FURY_CUTTER: - fixedBasePower = CalcFuryCutterBasePower(gMovesInfo[move].power, min(gDisableStructs[battlerAtk].furyCutterCounter + 1, 5)); - break; - default: - fixedBasePower = 0; - break; - } + fixedBasePower = SetFixedMoveBasePower(battlerAtk, move); struct DamageCalculationData damageCalcData; damageCalcData.battlerAtk = battlerAtk; @@ -643,83 +735,11 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u if (GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE) { - // Handle dynamic move damage - switch (moveEffect) - { - case EFFECT_LEVEL_DAMAGE: - simDamage.expected = simDamage.minimum = gBattleMons[battlerAtk].level * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); - break; - case EFFECT_PSYWAVE: - simDamage.expected = gBattleMons[battlerAtk].level * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); - simDamage.minimum = simDamage.expected / 2; - break; - case EFFECT_FIXED_DAMAGE_ARG: - simDamage.expected = simDamage.minimum = gMovesInfo[move].argument * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); - break; - case EFFECT_MULTI_HIT: - if (move == MOVE_WATER_SHURIKEN && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH) - { - simDamage.expected *= 3; - simDamage.minimum *= 3; - } - else if (aiData->abilities[battlerAtk] == ABILITY_SKILL_LINK) - { - simDamage.expected *= 5; - simDamage.minimum *= 5; - } - else if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_LOADED_DICE) - { - simDamage.expected *= 9; - simDamage.expected /= 2; - simDamage.minimum *= 4; - } - else - { - simDamage.expected *= 3; - simDamage.minimum *= 2; - } - break; - case EFFECT_ENDEAVOR: - // If target has less HP than user, Endeavor does no damage - simDamage.expected = simDamage.minimum = max(0, gBattleMons[battlerDef].hp - gBattleMons[battlerAtk].hp); - break; - case EFFECT_SUPER_FANG: - simDamage.expected = simDamage.minimum = (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND - ? max(2, gBattleMons[battlerDef].hp * 3 / 4) - : max(1, gBattleMons[battlerDef].hp / 2)); - break; - case EFFECT_FINAL_GAMBIT: - simDamage.expected = simDamage.minimum = gBattleMons[battlerAtk].hp; - break; - case EFFECT_BEAT_UP: - if (B_BEAT_UP >= GEN_5) - { - u32 partyCount = CalculatePartyCount(GetBattlerParty(battlerAtk)); - u32 i; - gBattleStruct->beatUpSlot = 0; - damageCalcData.isCrit = FALSE; - simDamage.expected = 0; - for (i = 0; i < partyCount; i++) - { - simDamage.expected += CalculateMoveDamage(&damageCalcData, 0); - } - simDamage.minimum = simDamage.expected; - gBattleStruct->beatUpSlot = 0; - } - break; - } - - // Handle other multi-strike moves - if (gMovesInfo[move].strikeCount > 1 && gMovesInfo[move].effect != EFFECT_TRIPLE_KICK) - { - simDamage.expected *= gMovesInfo[move].strikeCount; - simDamage.minimum *= gMovesInfo[move].strikeCount; - } - - if (simDamage.expected == 0) - simDamage.expected = 1; - if (simDamage.minimum == 0) - simDamage.minimum = 1; + CalcDynamicMoveDamage(&damageCalcData, + &simDamage.expected, + &simDamage.minimum, + aiData->holdEffects[battlerAtk], + aiData->abilities[battlerAtk]); } } else @@ -732,6 +752,7 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u *typeEffectiveness = AI_GetEffectiveness(effectivenessMultiplier); // Undo temporary settings + gBattleStruct->dynamicMoveType = 0; gBattleStruct->swapDamageCategory = FALSE; gBattleStruct->zmove.baseMoves[battlerAtk] = MOVE_NONE; if (toggledGimmick) From ac1dd857f79a7b42a6b93b00221e83af5254ee3f Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 1 Nov 2024 11:07:58 -0300 Subject: [PATCH 49/50] Fixed text wrap obtaining the incorrect glyph width (#5620) --- include/text.h | 2 +- src/battle_message.c | 14 +++++++------- src/fonts.c | 16 ++++++++-------- src/text.c | 6 +----- test/text.c | 2 +- 5 files changed, 18 insertions(+), 22 deletions(-) diff --git a/include/text.h b/include/text.h index 1791ae401f..55500868dc 100644 --- a/include/text.h +++ b/include/text.h @@ -159,7 +159,7 @@ bool32 TextPrinterWait(struct TextPrinter *textPrinter); void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool32 drawArrow, u8 *counter, u8 *yCoordIndex); s32 GetGlyphWidth(u16 glyphId, bool32 isJapanese, u8 fontId); s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing); -s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum, u32 strSize, bool32 printDebug); +s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum, u32 strSize); u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str); u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y); u8 GetKeypadIconTileOffset(u8 keypadIconId); diff --git a/src/battle_message.c b/src/battle_message.c index fc730c19df..be131ec7d6 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3097,7 +3097,7 @@ u32 BattleStringExpandPlaceholdersToDisplayedString(const u8 *src) u32 dstID = BattleStringExpandPlaceholders(src, gDisplayedStringBattle, sizeof(gDisplayedStringBattle)); for (j = 1;; j++) { - strWidth = GetStringLineWidth(0, gDisplayedStringBattle, 0, j, sizeof(gDisplayedStringBattle), TRUE); + strWidth = GetStringLineWidth(0, gDisplayedStringBattle, 0, j, sizeof(gDisplayedStringBattle)); if (strWidth == 0) break; } @@ -3164,7 +3164,7 @@ static void GetBattlerNick(u32 battler, u8 *dst) } \ GetBattlerNick(battler, text); \ toCpy = text; \ - dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize, FALSE); + dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize); #define HANDLE_NICKNAME_STRING_LOWERCASE(battler) \ if (GetBattlerSide(battler) != B_SIDE_PLAYER) \ @@ -3182,7 +3182,7 @@ static void GetBattlerNick(u32 battler, u8 *dst) } \ GetBattlerNick(battler, text); \ toCpy = text; \ - dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize, FALSE); + dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize); static const u8 *BattleStringGetOpponentNameByTrainerId(u16 trainerId, u8 *text, u8 multiplayerId, u8 battler) { @@ -3357,7 +3357,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) while (*src != EOS) { toCpy = NULL; - dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize, FALSE); + dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize); if (*src == PLACEHOLDER_BEGIN) { @@ -3749,12 +3749,12 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) if (toCpy != NULL) { - toCpyWidth = GetStringLineWidth(fontId, toCpy, letterSpacing, 1, dstSize, FALSE); + toCpyWidth = GetStringLineWidth(fontId, toCpy, letterSpacing, 1, dstSize); if (dstWidth + toCpyWidth > BATTLE_MSG_MAX_WIDTH) { dst[lastValidSkip] = lineNum == 1 ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL; - dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize, FALSE); + dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize); lineNum++; } while (*toCpy != EOS) @@ -3776,7 +3776,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) } else { - toCpyWidth = GetGlyphWidth(dst[dstID + 1], FALSE, fontId); + toCpyWidth = GetGlyphWidth(*src, FALSE, fontId); dst[dstID] = *src; if (dstWidth + toCpyWidth > BATTLE_MSG_MAX_WIDTH) { diff --git a/src/fonts.c b/src/fonts.c index 3f2c536985..2dcb0a7e78 100644 --- a/src/fonts.c +++ b/src/fonts.c @@ -17,7 +17,7 @@ ALIGNED(4) const u8 gFontSmallNarrowLatinGlyphWidths[] = { 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, - 3, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 8, 3, 3, 3, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -53,7 +53,7 @@ ALIGNED(4) const u8 gFontSmallLatinGlyphWidths[] = { 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, - 7, 5, 5, 5, 5, 5, 5, 9, 3, 3, 3, 3, 3, 3, 3, 3, + 7, 5, 5, 5, 5, 5, 5, 9, 3, 3, 3, 8, 3, 3, 3, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -89,7 +89,7 @@ ALIGNED(4) const u8 gFontNarrowLatinGlyphWidths[] = { 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, - 3, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 8, 3, 3, 3, 3, 10, 10, 10, 10, 8, 8, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -125,7 +125,7 @@ ALIGNED(4) const u8 gFontShortLatinGlyphWidths[] = { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 4, 6, 5, 5, 6, 5, 6, 6, 6, 5, 5, 5, 6, 6, 6, 6, 6, 6, 8, - 5, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 5, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 8, 3, 3, 3, 3, 12, 12, 12, 12, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -161,7 +161,7 @@ ALIGNED(4) const u8 gFontNormalLatinGlyphWidths[] = { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 5, 6, 4, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6, 8, - 3, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 8, 3, 3, 3, 3, 10, 10, 10, 10, 8, 10, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -197,7 +197,7 @@ ALIGNED(4) const u8 gFontNarrowerLatinGlyphWidths[] = { 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, - 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 8, 3, 3, 3, 3, 10, 10, 10, 10, 8, 8, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -233,7 +233,7 @@ ALIGNED(4) const u8 gFontSmallNarrowerLatinGlyphWidths[] = { 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 3, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, - 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 8, 3, 3, 3, 3, 8, 8, 8, 8, 8, 7, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -269,7 +269,7 @@ ALIGNED(4) const u8 gFontShortNarrowLatinGlyphWidths[] = { 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 4, 6, 5, 5, 5, 5, 5, 5, 4, 5, 5, 6, 4, 5, 5, 8, - 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 8, 3, 3, 3, 3, 12, 12, 12, 12, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, diff --git a/src/text.c b/src/text.c index 8a5b7b0cd3..acb2871a86 100644 --- a/src/text.c +++ b/src/text.c @@ -1605,7 +1605,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) return width; } -s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum, u32 strSize, bool32 printDebug) +s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum, u32 strSize) { u32 strWidth = 0, strLen, currLine; u8 strCopy[strSize]; @@ -1621,10 +1621,6 @@ s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum, strWidth = GetStringWidth(fontId, strCopy, letterSpacing); strLen = StringLineLength(strCopy); StringAppend(strCopy, gText_EmptyString3); - #ifndef NDEBUG - if (printDebug && strWidth != 0) - DebugPrintf(" Line %d, len:%d, width:%d, \"%S\"", currLine, strLen, strWidth, strCopy); - #endif } str += strLen + 1; } diff --git a/test/text.c b/test/text.c index 996549ab1b..3a592b10d1 100644 --- a/test/text.c +++ b/test/text.c @@ -890,7 +890,7 @@ TEST("Battle strings fit on the battle message window") DebugPrintf("Battle String ID %d: %S", battleStringId + BATTLESTRINGS_TABLE_START, battleString); for (j = 1;; j++) { - strWidth = GetStringLineWidth(fontId, battleString, 0, j, BATTLE_STRING_BUFFER_SIZE, TRUE); + strWidth = GetStringLineWidth(fontId, battleString, 0, j, BATTLE_STRING_BUFFER_SIZE); if (strWidth == 0) break; EXPECT_LE(strWidth - 1, BATTLE_MSG_MAX_WIDTH); // -1 because there's a pixel-wide space that doesn't visually look like it's out of frame when using FONT_NORMAL. From 02d77673275c9f3e38a1783fcdab469d5957ae47 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Sun, 3 Nov 2024 11:29:09 +0100 Subject: [PATCH 50/50] Set default battle shadow to Gen3 (#5632) Co-authored-by: Hedara --- include/config/battle.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/config/battle.h b/include/config/battle.h index 14d2b47d32..7467bd47f1 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -285,6 +285,7 @@ #define B_SHOW_TYPES SHOW_TYPES_NEVER // When defined as SHOW_TYPES_ALWAYS, after selecting "Fight" in battle, the types of all Pokemon are revealed. Whe defined as SHOW_TYPES_OWN, types are only revealed if the player owns the mon in question. // Pokémon battle sprite settings -#define B_ENEMY_MON_SHADOW_STYLE GEN_LATEST // In Gen4+, all enemy Pokemon will have a shadow drawn beneath them. +#define B_ENEMY_MON_SHADOW_STYLE GEN_3 // In Gen4+, all enemy Pokemon will have a shadow drawn beneath them. + // Currently Gen4+ shadows don't properly work with Trainerslides #endif // GUARD_CONFIG_BATTLE_H