From d55d2b6dfcaa4fe05222aa80b9345b561ee5542d Mon Sep 17 00:00:00 2001 From: grintoul <166724814+grintoul1@users.noreply.github.com> Date: Mon, 22 Dec 2025 09:11:21 +0000 Subject: [PATCH 01/20] Corrects test system Forced Ability handing for multi battles (#8611) --- include/test/battle.h | 2 +- include/test_runner.h | 2 +- src/battle_controllers.c | 6 +++--- src/battle_main.c | 18 +++++++++--------- src/battle_script_commands.c | 12 ++++++------ test/test_runner_battle.c | 4 ++-- test/test_test_runner.c | 20 ++++++++++++++++++++ 7 files changed, 42 insertions(+), 22 deletions(-) diff --git a/include/test/battle.h b/include/test/battle.h index 198de63f3c..7c4d285f6f 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -750,7 +750,7 @@ struct BattleTestData u8 gender; u8 nature; bool8 isShiny; - enum Ability forcedAbilities[NUM_BATTLE_SIDES][PARTY_SIZE]; + enum Ability forcedAbilities[MAX_BATTLERS_COUNT][PARTY_SIZE]; u8 chosenGimmick[NUM_BATTLE_SIDES][PARTY_SIZE]; u8 forcedEnvironment; diff --git a/include/test_runner.h b/include/test_runner.h index fa97da9881..b15ae349ad 100644 --- a/include/test_runner.h +++ b/include/test_runner.h @@ -31,7 +31,7 @@ void TestRunner_CheckMemory(void); void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType); -u32 TestRunner_Battle_GetForcedAbility(u32 side, u32 partyIndex); +u32 TestRunner_Battle_GetForcedAbility(u32 array, u32 partyIndex); u32 TestRunner_Battle_GetChosenGimmick(u32 side, u32 partyIndex); u32 TestRunner_Battle_GetForcedEnvironment(void); diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 06ed79c892..dd8abcf213 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -1438,10 +1438,10 @@ static u32 GetBattlerMonData(u32 battler, struct Pokemon *party, u32 monId, u8 * #if TESTING if (gTestRunnerEnabled) { - u32 side = GetBattlerSide(battler); + u32 array = (!IsPartnerMonFromSameTrainer(battler)) ? battler : GetBattlerSide(battler); u32 partyIndex = gBattlerPartyIndexes[battler]; - if (TestRunner_Battle_GetForcedAbility(side, partyIndex)) - gBattleMons[battler].ability = TestRunner_Battle_GetForcedAbility(side, partyIndex); + if (TestRunner_Battle_GetForcedAbility(array, partyIndex)) + gBattleMons[battler].ability = TestRunner_Battle_GetForcedAbility(array, partyIndex); } #endif break; diff --git a/src/battle_main.c b/src/battle_main.c index 787e05608e..242ad60588 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3284,10 +3284,10 @@ void SwitchInClearSetData(u32 battler, struct Volatiles *volatilesCopy) #if TESTING if (gTestRunnerEnabled) { - u32 side = GetBattlerSide(battler); + u32 array = (!IsPartnerMonFromSameTrainer(battler)) ? battler : GetBattlerSide(battler); u32 partyIndex = gBattlerPartyIndexes[battler]; - if (TestRunner_Battle_GetForcedAbility(side, partyIndex)) - gBattleMons[i].ability = TestRunner_Battle_GetForcedAbility(side, partyIndex); + if (TestRunner_Battle_GetForcedAbility(array, partyIndex)) + gBattleMons[i].ability = TestRunner_Battle_GetForcedAbility(array, partyIndex); } #endif // TESTING @@ -3495,10 +3495,10 @@ static void DoBattleIntro(void) #if TESTING if (gTestRunnerEnabled) { - u32 side = GetBattlerSide(battler); + u32 array = (!IsPartnerMonFromSameTrainer(battler)) ? battler : GetBattlerSide(battler); u32 partyIndex = gBattlerPartyIndexes[battler]; - if (TestRunner_Battle_GetForcedAbility(side, partyIndex)) - gBattleMons[battler].ability = TestRunner_Battle_GetForcedAbility(side, partyIndex); + if (TestRunner_Battle_GetForcedAbility(array, partyIndex)) + gBattleMons[battler].ability = TestRunner_Battle_GetForcedAbility(array, partyIndex); } #endif } @@ -3794,10 +3794,10 @@ static void TryDoEventsBeforeFirstTurn(void) { for (i = 0; i < gBattlersCount; ++i) { - u32 side = GetBattlerSide(i); + u32 array = (!IsPartnerMonFromSameTrainer(i)) ? i : GetBattlerSide(i); u32 partyIndex = gBattlerPartyIndexes[i]; - if (TestRunner_Battle_GetForcedAbility(side, partyIndex)) - gBattleMons[i].ability = TestRunner_Battle_GetForcedAbility(side, partyIndex); + if (TestRunner_Battle_GetForcedAbility(array, partyIndex)) + gBattleMons[i].ability = TestRunner_Battle_GetForcedAbility(array, partyIndex); } } #endif // TESTING diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index e13a18fc97..85f63839a4 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7308,10 +7308,10 @@ static void Cmd_switchindataupdate(void) #if TESTING if (gTestRunnerEnabled) { - u32 side = GetBattlerSide(battler); + u32 array = (!IsPartnerMonFromSameTrainer(battler)) ? battler : GetBattlerSide(battler); u32 partyIndex = gBattlerPartyIndexes[battler]; - if (TestRunner_Battle_GetForcedAbility(side, partyIndex)) - gBattleMons[battler].ability = TestRunner_Battle_GetForcedAbility(side, partyIndex); + if (TestRunner_Battle_GetForcedAbility(array, partyIndex)) + gBattleMons[battler].ability = TestRunner_Battle_GetForcedAbility(array, partyIndex); } #endif @@ -11846,9 +11846,9 @@ static void Cmd_healpartystatus(void) #if TESTING if (gTestRunnerEnabled) { - u32 side = GetBattlerSide(gBattlerAttacker); - if (TestRunner_Battle_GetForcedAbility(side, i)) - ability = TestRunner_Battle_GetForcedAbility(side, i); + u32 array = (!IsPartnerMonFromSameTrainer(gBattlerAttacker)) ? gBattlerAttacker : GetBattlerSide(gBattlerAttacker); + if (TestRunner_Battle_GetForcedAbility(array, i)) + ability = TestRunner_Battle_GetForcedAbility(array, i); } #endif } diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 9bc28363d4..72b28d4ee2 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -3219,9 +3219,9 @@ void ValidateFinally(u32 sourceLine) INVALID_IF(STATE->parametersCount == 0, "FINALLY without PARAMETRIZE"); } -u32 TestRunner_Battle_GetForcedAbility(u32 side, u32 partyIndex) +u32 TestRunner_Battle_GetForcedAbility(u32 array, u32 partyIndex) { - return DATA.forcedAbilities[side][partyIndex]; + return DATA.forcedAbilities[array][partyIndex]; } u32 TestRunner_Battle_GetForcedEnvironment(void) diff --git a/test/test_test_runner.c b/test/test_test_runner.c index 670be27674..4bfa84305f 100644 --- a/test/test_test_runner.c +++ b/test/test_test_runner.c @@ -1,5 +1,6 @@ #include "global.h" #include "test/test.h" +#include "test/battle.h" TEST("Tests resume after CRASH") { @@ -7,3 +8,22 @@ TEST("Tests resume after CRASH") void (*f)(void) = NULL; f(); } + +MULTI_BATTLE_TEST("Forced Abilities are set correctly in multi battle tests") +{ + GIVEN { + MULTI_PLAYER(SPECIES_WOBBUFFET); + MULTI_PARTNER(SPECIES_WOBBUFFET); + MULTI_PARTNER(SPECIES_NINETALES_ALOLA) { Ability(ABILITY_DRIZZLE); } + MULTI_OPPONENT_A(SPECIES_WOBBUFFET); + MULTI_OPPONENT_A(SPECIES_NINETALES_ALOLA) { Ability(ABILITY_SAND_STREAM); } + MULTI_OPPONENT_B(SPECIES_WYNAUT); + MULTI_OPPONENT_B(SPECIES_NINETALES_ALOLA) { Ability(ABILITY_DROUGHT); } + } WHEN { + TURN { SWITCH(opponentLeft, 1); SWITCH(playerRight, 4); SWITCH(opponentRight, 4); } + } SCENE { + ABILITY_POPUP(opponentLeft, ABILITY_SAND_STREAM); + ABILITY_POPUP(playerRight, ABILITY_DRIZZLE); + ABILITY_POPUP(opponentRight, ABILITY_DROUGHT); + } +} From 58d01431150166037b71f9cba68b88bcb1c9d76f Mon Sep 17 00:00:00 2001 From: artsquirrelb Date: Tue, 23 Dec 2025 15:22:57 +0700 Subject: [PATCH 02/20] Redraw Gurdurr's overworld sprite (#8625) --- graphics/pokemon/gurdurr/overworld.png | Bin 925 -> 1170 bytes graphics/pokemon/gurdurr/overworld_normal.pal | 10 ++++---- graphics/pokemon/gurdurr/overworld_shiny.pal | 24 +++++++++--------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/graphics/pokemon/gurdurr/overworld.png b/graphics/pokemon/gurdurr/overworld.png index a2b8aabbfa7032f45dcb2941016e68fd9971ba50..38ffe3798ca0384f067d1a61b86b8467e6cfeee1 100644 GIT binary patch delta 1149 zcmV-@1cLjW2a*YpB!35VNliru=?oSW1PM!mbEE(O02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_ULY^eKS~D&2fwzYl7V?IFDR2gd003=$X~4G<$w276)S@&Io?uQp)g7S z001DG6@CB!00Cl4M??UK1szBL00Xv3L_t(|ob8s+Ya2%t$7h*C1G;Fd6~QSD)PF$P zWp4>)=a`BFHtwMl8Oy5PEb_geulK=@?&%kHv@l1EGIH z-;7tQ9mS4Ye1GUA?;!Z>oA-S`=B*@zzS>v2wK-YY-Xip!^`LtD1Q%ud3!(3=2Pd~q zP&qv-jGTQyC|mM;^K6m8b?jbN`3n}AQIK(zjTr$wTyPe~k?zq2J?6CwMYmdJGtzNH z;FFT9>MX+nVdNDv3Btm-buK*+d|&VdZO4$Y&U}Y6#(&$nz9Zu@>ye&^F(<8yP`0X0 z9xjN+KOupcg${@*O$`n zU##Wj_f_q2`Tzg`32;bRa{vGi!vFvd!vV){sAK>D0|iM$K~zY`?Uuifn=ll|jaY7s zv5|VWCAZxKXDlw=BFvBx8MnE$YCCkRXhgF0M57#I)uGK;^&joCA;FLzT|3-Uq~!Ck zzu)I)13@qG5-$PaU^|Yv3G9r2db5UnAu#qDEl+;}6nb{1mBE6}Y{elXXN1pTBL@@U zi)aI)Gr*RClM0c}toZ{*4xI^n20cP1V>4mm({};7fA4!O-x5z7;E|IHAu>y#VPkJv zN+FSVEk2-jaUvgMGXY0}AmmaJw(Qf;l#{q37kSbdH0+uxO-p?kpEfIh)(bb-wj3cU zf>ywNt2vgf0Ez^Z_^(4?45Cz|B0Lxvyx$w}U-xi~f!1=AvM!&%HY;%?ZeFCO-EQ_C?6% zNW|-kdSgoJk{uXNI0q+=7r&P((tsdj6gWgBuN#lC}`M!8~Z9D+2gEX6qg$g z>*L!pILY;vC%>M5q;dWAB)k4nmR!LmwTBoctGG~0vOm@3MuwQFZE>38xXM`)$!#2* zWW@NiWGrkK087A(#cR&?jM!$eTC7wRoMtTucTUg1W>Bol>8$7;PUQ1EUOxrhoyoTw zwcP|~*exmr$5vK<#c77jwv4}9dMNxEmzBltDi@35EVF8{QO~kl;ees3MMRJ-NLg9f z2@Vwn=b3Gns_gWR7F>b|F?4~4 Date: Tue, 23 Dec 2025 19:44:26 +0100 Subject: [PATCH 03/20] Fix truck fade being cancelled (#8617) --- src/overworld.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/overworld.c b/src/overworld.c index 5f16de1f2e..4157236a79 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1716,11 +1716,12 @@ static void OverworldBasic(void) gTimeUpdateCounter = (SECONDS_PER_MINUTE * 60 / FakeRtc_GetSecondsRatio()); UpdateTimeOfDay(); FormChangeTimeUpdate(); - if (bld0[0] != bld1[0] + if (MapHasNaturalLight(gMapHeader.mapType) && + (bld0[0] != bld1[0] || bld0[1] != bld1[1] - || bld0[2] != bld1[2]) + || bld0[2] != bld1[2])) { - ApplyWeatherColorMapIfIdle(gWeatherPtr->colorMapIndex); + ApplyWeatherColorMapIfIdle(gWeatherPtr->colorMapIndex); } } } From d65254c08e01f46f4e123261af5b3b2a82a772e5 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Tue, 23 Dec 2025 10:56:50 -0800 Subject: [PATCH 04/20] Update maintainer list (#8638) --- CONTRIBUTING.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 88ef358dbb..e877940643 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -122,21 +122,20 @@ Once all items on the merge checklist are true, the branch will be merged in. ## Maintainers -This list was last updated 2025 April 1. +This list was last updated 2025 Dec 23. | Name | Discord | Currently Active | Areas of Expertise | | --- | --- | --- | --- | | [Alex](https://github.com/AlexOn1ine) | rainonline | ✅ | Battle Engine, Battle AI | [Egg](https://github.com/DizzyEggg) | egg9255 | ✅ | Battle Engine, Battle AI -| [ghoulslash](https://github.com/ghoulslash) | ghoulslash | ✅ | Dexnav, Overworld, Battle Engine | [Jasper](https://github.com/Bassoonian) | bassoonian | ✅ | Berries, Day / Night System, Followers, Feature Branches | [MGriffin](https://github.com/mrgriffin) | mgriffin | ✅ | Tests, Trainer Control | [psf](https://github.com/pkmnsnfrn) | pkmnsnfrn | ✅ | Rematches, Difficulty, Trainer Slides, Fake RTC, Fishing Minigames, Imperial / Metric, OW Item Balls, Sky Battles | [Hedara](https://github.com/hedara90) | hedara | ✅ | Compression, Sprites | [Pawkkie](https://github.com/Pawkkie) | pawkkie | ✅ | Battle AI | [SBird](https://github.com/SBird1337) | karathan | ✅ | Dynamic Multichoice, Damage Calculation, Animations, Trainer Control, Tests -| [Agustin](https://github.com/AgustinGDLV) | agustingdlv | Inactive | Gimmicks, Battle Engine, Tests, Items -| [tertu](https://github.com/tertu-m) | tertu | Inactive | Randomizer +| [Jamie](https://github.com/FosterProgramming) | foster_harmony | ✅ | Overworld, Tests, Day / Night System, Dexnav, Battle Frontier, HGSS Dex, Pokerus, Learnsets, Mon Generation, Vs Seeker +| [grintoul](https://github.com/grintoul1) | grintoul | ✅ | Tests, Battle AI, Battle Engine, Overworld, Trainer Slides, Follower NPCs, Multi Battles ## Attribution This guide is based on the [contributing.md](https://contributing.md/generator)! From 582a643d1fe4170a28579a1add2eee8421305073 Mon Sep 17 00:00:00 2001 From: spindrift64 <102487911+spindrift64@users.noreply.github.com> Date: Tue, 23 Dec 2025 21:47:42 +0100 Subject: [PATCH 05/20] fix poisons absorbing toxic spikes when fainting from other hazards (#8644) --- asm/macros/battle_script.inc | 5 +++++ data/battle_scripts_1.s | 4 ++++ src/battle_script_commands.c | 26 ++++++++++++++++++++++++++ test/battle/hazards.c | 2 -- 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 7eb3b9d064..7d7812c3b4 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -2464,3 +2464,8 @@ .byte \gen .4byte \jumpInstr .endm + + @ Absorbs Toxic Spikes when a grounded Poison-type faints to entry hazards. + .macro tryabsorbtoxicspikesonfaint + callnative BS_TryAbsorbToxicSpikesOnFaint + .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 6a3e29d17f..3f4e72a4ad 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5147,6 +5147,7 @@ BattleScript_DmgHazardsOnAttackerFainted:: setbyte sGIVEEXP_STATE, 0 getexp BS_ATTACKER moveendall + tryabsorbtoxicspikesonfaint goto BattleScript_HandleFaintedMon BattleScript_DmgHazardsOnTarget:: @@ -5161,6 +5162,7 @@ BattleScript_DmgHazardsOnTargetFainted:: setbyte sGIVEEXP_STATE, 0 getexp BS_TARGET moveendall + tryabsorbtoxicspikesonfaint goto BattleScript_HandleFaintedMon BattleScript_DmgHazardsOnBattlerScripting:: @@ -5175,6 +5177,7 @@ BattleScript_DmgHazardsOnBattlerScriptingFainted:: setbyte sGIVEEXP_STATE, 0 getexp BS_SCRIPTING moveendall + tryabsorbtoxicspikesonfaint goto BattleScript_HandleFaintedMon BattleScript_DmgHazardsOnFaintedBattler:: @@ -5189,6 +5192,7 @@ BattleScript_DmgHazardsOnFaintedBattlerFainted:: setbyte sGIVEEXP_STATE, 0 getexp BS_FAINTED moveendall + tryabsorbtoxicspikesonfaint goto BattleScript_HandleFaintedMon BattleScript_PrintHurtByDmgHazards:: diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 85f63839a4..0be4b77794 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -18012,3 +18012,29 @@ void BS_JumpIfGenConfigLowerThan(void) else gBattlescriptCurrInstr = cmd->nextInstr; } + +// Used when the Pokemon faints before Toxic Spikes would normally be processed in the hazards queue. +void BS_TryAbsorbToxicSpikesOnFaint(void) +{ + NATIVE_ARGS(); + u32 battler = gBattlerFainted; + u32 side = GetBattlerSide(battler); + + if (gSideTimers[side].toxicSpikesAmount == 0) + { + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + + if (IsBattlerGrounded(battler, GetBattlerAbility(battler), GetBattlerHoldEffect(battler)) + && IS_BATTLER_OF_TYPE(battler, TYPE_POISON)) + { + gSideTimers[side].toxicSpikesAmount = 0; + RemoveHazardFromField(side, HAZARDS_TOXIC_SPIKES); + gEffectBattler = battler; + BattleScriptCall(BattleScript_ToxicSpikesAbsorbed); + return; + } + + gBattlescriptCurrInstr = cmd->nextInstr; +} diff --git a/test/battle/hazards.c b/test/battle/hazards.c index ea0aef70e5..fb16a9e1f2 100644 --- a/test/battle/hazards.c +++ b/test/battle/hazards.c @@ -64,8 +64,6 @@ SINGLE_BATTLE_TEST("Hazards are applied correctly after a battler faints") SINGLE_BATTLE_TEST("Toxic Spikes can be removed after fainting to other hazards") { - KNOWN_FAILING; // tryfaintmon changes something that doesn't allow other switch-in effects on the battler - GIVEN { PLAYER(SPECIES_WYNAUT); PLAYER(SPECIES_GRIMER) { HP(1); } From ac221a3aa82ec4b96a5869a4d23150d1877bb1e4 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 24 Dec 2025 01:16:26 +0100 Subject: [PATCH 06/20] Fix incorrectly applied change in atkcanceler (#8641) --- include/battle_util.h | 2 +- src/battle_util.c | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/include/battle_util.h b/include/battle_util.h index 9ebc837952..bb81da042b 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -148,7 +148,7 @@ enum MoveCanceler MOVE_STEP_SUCCESS, MOVE_STEP_BREAK, // Breaks out of the function to run a script MOVE_STEP_FAILURE, // Same as break but breaks out of it due to move failure and jumps to script that handles the failure - MOVE_STEP_REMOVES_STATUS, + MOVE_STEP_STATUS_CHANGE, }; extern const struct TypePower gNaturalGiftTable[]; diff --git a/src/battle_util.c b/src/battle_util.c index 6e47859071..01316491b1 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2046,7 +2046,7 @@ static enum MoveCanceler CancelerAsleepOrFrozen(struct BattleContext *ctx) gEffectBattler = ctx->battlerAtk; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WOKE_UP_UPROAR; BattleScriptCall(BattleScript_MoveUsedWokeUp); - return MOVE_STEP_REMOVES_STATUS; + return MOVE_STEP_STATUS_CHANGE; } else { @@ -2068,7 +2068,6 @@ static enum MoveCanceler CancelerAsleepOrFrozen(struct BattleContext *ctx) gProtectStructs[ctx->battlerAtk].nonVolatileStatusImmobility = TRUE; gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - return MOVE_STEP_FAILURE; } } else @@ -2077,8 +2076,8 @@ static enum MoveCanceler CancelerAsleepOrFrozen(struct BattleContext *ctx) gBattleMons[ctx->battlerAtk].volatiles.nightmare = FALSE; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WOKE_UP; BattleScriptCall(BattleScript_MoveUsedWokeUp); - return MOVE_STEP_REMOVES_STATUS; } + return MOVE_STEP_STATUS_CHANGE; } } else if (gBattleMons[ctx->battlerAtk].status1 & STATUS1_FREEZE && !MoveThawsUser(ctx->currentMove)) @@ -2095,7 +2094,7 @@ static enum MoveCanceler CancelerAsleepOrFrozen(struct BattleContext *ctx) BattleScriptCall(BattleScript_MoveUsedUnfroze); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DEFROSTED; } - return MOVE_STEP_REMOVES_STATUS; // Move failure but also removes status + return MOVE_STEP_STATUS_CHANGE; // Move failure but also removes status } return MOVE_STEP_SUCCESS; } @@ -2500,7 +2499,7 @@ static enum MoveCanceler CancelerThaw(struct BattleContext *ctx) BattleScriptCall(BattleScript_MoveUsedUnfroze); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DEFROSTED_BY_MOVE; } - return MOVE_STEP_REMOVES_STATUS; + return MOVE_STEP_STATUS_CHANGE; } if (gBattleMons[ctx->battlerAtk].status1 & STATUS1_FROSTBITE && MoveThawsUser(ctx->currentMove)) { @@ -2510,7 +2509,7 @@ static enum MoveCanceler CancelerThaw(struct BattleContext *ctx) BattleScriptCall(BattleScript_MoveUsedUnfrostbite); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FROSTBITE_HEALED_BY_MOVE; } - return MOVE_STEP_REMOVES_STATUS; + return MOVE_STEP_STATUS_CHANGE; } return MOVE_STEP_SUCCESS; } @@ -3047,7 +3046,7 @@ enum MoveCanceler AtkCanceler_MoveSuccessOrder(struct BattleContext *ctx) gBattleStruct->eventState.atkCanceler++; } - if (effect == MOVE_STEP_REMOVES_STATUS) + if (effect == MOVE_STEP_STATUS_CHANGE) { BtlController_EmitSetMonData( ctx->battlerAtk, @@ -6983,7 +6982,7 @@ static inline u32 IsFieldWaterSportAffected(enum Type moveType) { if (moveType != TYPE_FIRE) return FALSE; - + if (gFieldStatuses & STATUS_FIELD_WATERSPORT) return TRUE; From 7bd25fae84bf781708fe082cafc0e901efbd4947 Mon Sep 17 00:00:00 2001 From: bassforte123 <130828119+bassforte123@users.noreply.github.com> Date: Wed, 24 Dec 2025 07:15:44 -0500 Subject: [PATCH 07/20] Gorilla Tactics and Test typos fix (#8653) --- src/battle_script_commands.c | 2 +- test/battle/ability/liquid_ooze.c | 2 +- test/battle/hold_effect/white_herb.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0be4b77794..86f1b117e4 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12733,7 +12733,7 @@ static void Cmd_tryswapitems(void) if (GetBattlerAbility(gBattlerTarget) != ABILITY_GORILLA_TACTICS) gBattleStruct->choicedMove[gBattlerTarget] = MOVE_NONE; - if (GetBattlerAbility(gBattlerTarget) != ABILITY_GORILLA_TACTICS) + if (GetBattlerAbility(gBattlerAttacker) != ABILITY_GORILLA_TACTICS) gBattleStruct->choicedMove[gBattlerAttacker] = MOVE_NONE; gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/test/battle/ability/liquid_ooze.c b/test/battle/ability/liquid_ooze.c index 38b1428df1..437f8e4c7a 100644 --- a/test/battle/ability/liquid_ooze.c +++ b/test/battle/ability/liquid_ooze.c @@ -163,7 +163,7 @@ SINGLE_BATTLE_TEST("Liquid Ooze causes Dream Eater users to lose HP instead of h } } -SINGLE_BATTLE_TEST("Liquid Ooze does not cause Dream Eater users to lose HP instead of heal (Gen 3-4") +SINGLE_BATTLE_TEST("Liquid Ooze does not cause Dream Eater users to lose HP instead of heal (Gen 3-4)") { s16 damage; GIVEN { diff --git a/test/battle/hold_effect/white_herb.c b/test/battle/hold_effect/white_herb.c index 4a8f020023..8423c29fdb 100644 --- a/test/battle/hold_effect/white_herb.c +++ b/test/battle/hold_effect/white_herb.c @@ -151,7 +151,7 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if it is knocked off o } NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); + MESSAGE("Slugma returned its stats to normal using its White Herb!"); } } THEN { EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE - 1); @@ -176,7 +176,7 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if Magician steals it" MESSAGE("The opposing Fennekin stole Slugma's White Herb!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); + MESSAGE("Slugma returned its stats to normal using its White Herb!"); } } THEN { EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE - 1); From 1e0e1ffca6bdffb0c55057de7e270e56a421cdfd Mon Sep 17 00:00:00 2001 From: artsquirrelb Date: Wed, 24 Dec 2025 21:56:17 +0700 Subject: [PATCH 08/20] Expansion OW sprites fix (#8633) --- graphics/pokemon/conkeldurr/overworld.png | Bin 989 -> 998 bytes .../pokemon/conkeldurr/overworld_normal.pal | 2 +- .../pokemon/conkeldurr/overworld_shiny.pal | 2 +- graphics/pokemon/seismitoad/overworld.png | Bin 949 -> 1008 bytes .../pokemon/seismitoad/overworld_shiny.pal | 6 +++--- graphics/pokemon/sewaddle/overworld.png | Bin 547 -> 727 bytes graphics/pokemon/sewaddle/overworld_normal.pal | 8 ++++---- graphics/pokemon/sewaddle/overworld_shiny.pal | 10 +++++----- graphics/pokemon/timburr/overworld.png | Bin 606 -> 656 bytes graphics/pokemon/timburr/overworld_normal.pal | 4 ++-- graphics/pokemon/timburr/overworld_shiny.pal | 12 ++++++------ graphics/pokemon/whirlipede/overworld.png | Bin 698 -> 764 bytes .../pokemon/whirlipede/overworld_shiny.pal | 6 +++--- 13 files changed, 25 insertions(+), 25 deletions(-) diff --git a/graphics/pokemon/conkeldurr/overworld.png b/graphics/pokemon/conkeldurr/overworld.png index fa83edbdc5ab22a0799c4884aaf6f6bc84e49e5f..e1233f5ddcee90a6f9dc2f34f1e8d7d2c6675995 100644 GIT binary patch delta 942 zcmV;f15y0l2j&NmBwGh`Nliru=?oVN2`C&v^r!#;02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFp)wffB*mg000000000000000>S&jP00001VoOIv|D^}=#Q*>U3Q0skRCt{2mQQQj zFc^nzgmaD^w`09UG0j!6oT*`_SXy%Jnhu&^VmvkRfu zJW+0$;Ei*y2tELl_R? ze}in1o3R?$2rWMuSAm{rS$X9;cX$wrBQp{oVk?EGu?(EWjtmsS}G4bG$ z6f7G4Q3_0ZI=O_s<{N746Y~A{$z$&qe;bbVkbz*xYQ7aqK$@*1Mv{O=>!lQI8=hq4XLN5N9*X`3m8^smCk|dV*ClC z7MH`$+COZ??7o3ra4!R`>^?2nf7)M_g3hft@}|je@o15rcNjx0rj=l~?TByUO^ZM& zG@0N{BLEEJKplpXn_;%x-JKgwa;>uK3^$cvu?39c`KA&GVL~yZR<^5Nk>59&G93Y% zn#yF5fu=Hza{={AA=sadi-01q5at0B@pZ~Y$kgskr*A0N$#Qaa4j9tdNTqd0V^9U; zfnX_wMF2p`1lDgn?KT!YB2^&S>;|n{*scPlP!D*uu-IaEb$pIMM*?KR7l6|mQPRHFc^npS?RfM18Cgh26|26 zbf(89Ub!;LB)EZ6#oBSSYCb?ziE9;AqQ_nNl(XafaiGAa?XUwrRC-eT_q?&I*EK%I z$M|Ohptt$2M-O-3orDlVIfpC7N0@! z(AEt-=b1o{1Qu((pvJ&7B|@=Y6LxqIidSYd*~eyvPZJq9O?om=2oFofgKZhen6Zm3v^DBj%9}FfaIyvI;9yT-1 zeL832gU3=ZYxsL900{YiSGZpb5bB?Vb|v&Fy~~fE`WsGt_a&PToCkwdvT#(O6zVL; z@zbZVHAt&O@boj^gmh89fJ13~d6@KOoCbrJY(5AMY3fIuj<+vaj>E)anDSbX+=(Mt zRf1u(mMfDHWVG^`d7c@6!7z1P5%^UJOU|=(wW$Fkdar78U|EEGCT@%4s`r_@$F=C?_qYo; zGSJL7nPPKyT?#r&u?4Fp{~3FEcF|!?ck^c1#hgX8V7u;!Gjb*>PznJPylMoHiT0~E zL&;6Ax!FEk7`^mXXK%Qw1+z6|5jkH~0wGKz!Xh)@R$JtJ+kolal1+ft8Dt>Py0PGy zS2Nt5jZ}aNRKg-)EKaAKm2k-}wB!35VNliru=?oVP3j`POV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_H#av|S62W401G#8XyeBVH*g_eqy>u5N1K7{Pk%40FBu^rApigX00000 z006n`sI>q900Cl4M??UK1szBL00R_BL_t(|ob8prPuoBg$IrS*T{>U_3XCL`fX(3? z*<ryTy;;5lZ!?^AQMRYy+&TN1Hmo54MupmIOunmpBlM00f4mE$Vv~OPI;3N-tW5o z?c;VMx0N1b%^c`}^-MMywfb&5bzQ%a11*?0vU9I+ntymr{Q4&)fgmJ)YT|IZ2QGvS zjPQdls21GhAA9fazQEmmy!)+z!@+2pgkb}t2;wIIB1^$deuVg|iue#uznccsTnId7 zFu2H)Fl%5G%j=P}n*JN-XCNiq2Eg^v-kIbB!%=Y%b|8Z+1fo8Mg@47exC-&v^`5kv zzQHZvGJgTMy_A!Wb2XvGq+(s9vw#$gWrmf1#j|;#aQ+#%)$|Q^^LWaV^eXNnjx$hAIV^rtX9i$?)f?Z_kT+EK~`(|% zolE4Z>Pikk1~-Yak??%(A@!8(LtX?FdZ@YZW6i)yHVK&|$5}_%Z=b%BtbDC=}ZTIu82LIzHd z`G2}fq3sk=T|qW{K`^#Xpw81+TRlTk~ z%vVx77%j|L6+myPsC7?ToZ6@Z5Z_uL>QlF`ARewUj&r3#tBWbPj!j6F0P%F6tz)Bl zB&8JqOW_e}4M``t<807*qo IM6N<$g4)l$sQ>@~ delta 927 zcmV;Q17Q5{2ek)~B!2;OQb$4nuFf3k00004XF*Lt006O%3;baP0000dP)t-sn9!g% zH#b*TR{#J27&t)afH(^`a2RlCAfSk_XdvuQFRU*aAt52I7mn2c000SaNLh0L01m?d z01m?e$8V@)0009QNkl9dS|#-AuN-e6l(YQ3qAAvkT*mbkzaq>P&_lH`( zWJhDeY))_&yMK)(cU|1T%}G0}*NG2ar?HWvip{5*Ux5wt;HKWeQ63QCO8MX>4`}!R z;59a~^aIFSF0x^kG3v-MWdXQeLAag=RHPq>%0{+TV16e>HmnY+cnI~DJV3~nTUiU1 ztqjB7CN4cnoVo2yy!CrPY)%MUB)kX+;U4LI{;{mnS$_=>(8cp?m{00JxnYri)!sdP zfrm%76FY8=gYSFraqrvgVp*sC@yw+(sjso&09yc%U};$7pTNG##3wdO0&2l03h*|7 z*J)iq|3tV{B=t2mSa2~8w4twYID{a8t5I_C7EI58F*xTK*nj0*6}S&wV@Z-0ycA8_w)#8Q*N0P z0oy~@bz~E7=G<@Db2p0aCVwFbRe(?Y=6MvkEpL7z%VsF-ec6-sXA8rgmXhVRvF-BY|cH6WgGTx z6n{n4{7t-+ccpg->Ql}F{5Msd%`jMHeuNMjWgXa4iQBorOV1ZP1_K>z@;j|==^1poj5 zFi=cXMRUr^G!qqAm@tsY2qab-n0N^I&_KYLK$v(4{QUe-P=8S1fC!j)2*A0t00000 z002(zfn@*y00Cl4M@0Xn2lB-L00H|+L_t(|ob8gaY8ycihF5TIROv3r2{}?|Mn#A# z-K0}v-3eS<;Kss5LVQVUu+M~4A>ia0Ttx)C34z$c2BXS;1E=@9Sm)w)_FpU^(zwuc zKQsG%d$VWEvVWGftVe78Kl}3z1nmX;^9m1SyuMI>Zoz>-`0YadU=AM-WXui``>Al^ z7&9mNLI4JmkZ2+Rr#^O#j4O172n;fhH5yOE@atIc;AEz~1+~`1n;309a#be`wkKynomgePt9PFlZG;UhLU5A}|tZ z?4Xx9#Djc#S!e11$sgRrv1;S z`SE^g1pwso(WTm13GDYQ4}~5upk6!)(`scNkjk7?Iler8Z}q;=1DbT>%kZ%Bc|a3U zS=F1wSAQcG^%J7d1Dc@sYA5X5J^)QEVy4i>@Qz9SWDmkn8B5?F4K&g1?LRdD!17ht zxnXleWQh+#YUu+2H1)~anFb&bb39B)e?xPWIG=2OpVQ>077V-F4ltq4tX%)qz3EjZ1)~IzB!2;OQb$4nuFf3k00004XF*Lt006O%3;baP0000dP)t-sn9!gA z002OkXlS^QSeP()KuGZTsL1FraDWi}{QOW*Q21Ctn0N?gb8@@@000SaNLh0L01m?d z01m?e$8V@)0004nNklL#M_P63U2pfOPFt zq?*o17$hbbcnA6b%s>TF)d`*qr$c+bU>C%|KyLeW&iCCp39GBFy6XDZ75%cm?E#TS zKk7qw3!gl|l^lfoC%E4%V)uAONP%3Nai}kqR0wfz#tILxb4!I3c&N>J*AJw*V`qGGDs_3Os()Ge7XF4Ip&|Q&&KNX|fd3zd@^fC$P@R+w4q{4Y05ZY-Kmg zi_8mT4Jd0JlZC+hRfJVwL+vl(jQN12Q6e7~4-!wj5`PN(8Bri>r2--^u=?W(0k9#i zgpi5=kT3hsEC8fA8D)TX5W;3m zWIjN=W|7Plz9K$X?v;?tUf?O1?Y&1N3n#Zv-G2Lko@c@QSH;*T%#~;<;ll8P00000 MNkvXXt^-0~g12Df&;S4c diff --git a/graphics/pokemon/sewaddle/overworld_normal.pal b/graphics/pokemon/sewaddle/overworld_normal.pal index c7d5351998..97d516fc1d 100644 --- a/graphics/pokemon/sewaddle/overworld_normal.pal +++ b/graphics/pokemon/sewaddle/overworld_normal.pal @@ -1,11 +1,11 @@ JASC-PAL 0100 16 -152 208 160 -0 0 0 +115 202 202 +52 19 21 88 152 48 144 200 8 -88 152 48 +36 86 26 152 120 8 248 208 64 192 152 64 @@ -14,6 +14,6 @@ JASC-PAL 80 80 80 224 128 8 152 120 8 -0 0 0 +192 185 180 0 0 0 0 0 0 diff --git a/graphics/pokemon/sewaddle/overworld_shiny.pal b/graphics/pokemon/sewaddle/overworld_shiny.pal index 7b83b61961..35807a8de2 100644 --- a/graphics/pokemon/sewaddle/overworld_shiny.pal +++ b/graphics/pokemon/sewaddle/overworld_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -0 0 0 +24 52 31 64 152 104 104 184 144 -88 152 48 +60 96 48 120 64 72 -240 248 168 -200 232 48 +206 252 139 +168 211 48 112 128 16 252 252 252 80 80 80 248 88 64 152 120 8 -0 0 0 +192 185 180 0 0 0 0 0 0 diff --git a/graphics/pokemon/timburr/overworld.png b/graphics/pokemon/timburr/overworld.png index 4cdec74ce592128446ed7c8205ae47238e76cb87..b2a5b6cb1bdac1a535b469e4ca7ae09015dd7a9c 100644 GIT binary patch delta 554 zcmV+_0@eNA1ds)gBu58yNliru=?oVMB_Uqwnfm|$02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DmKjU|UZw1*B*N za7P8&tXJz~HL3sr00Cl4M@0Xn2lB-L00Fc~L_t(|oROI!e=41|qW^)o>mp9lzrw8! z-K-+wCUkOibo9r&4&GhlRadcZ`}BMFUaoBpU{aHs)TI7TS*|-X&fvN(Z(40EFPh3j z493|)#2MDK8cPwdrt%97il!|gZ@C&vz*;_0iebjv7Kk-q?Fd0Vo2=yyU(_<*wh+RI z3(oTt%ZI!Hf8u)XrxELz8X9rIRvLKiUEZ_G!( z>8Z12uYAm#8g|p{GGbk&et{kr+_+ly!flr|K&yLx+HJCK$-kW*7u>k2`B@sU252u_ zoGqyjtcr9~i!n4~vNph3Pm;y@8f&n^PLk}aSHni~e?joe7^Vl$qJ2EaTJE4nYN;=E zknCU>m&|yz_m!J5Y`*t#C%f%&mJL(=)pUmU?wa-lRMf8WqkLl2FO?qbT<0)os}ElObvU9>!~907*qoM6N<$g4EgmNdN!< delta 504 zcmVOXZBnkm@Qb$4nuFf3kk!v$JUoR--<@btLPfsreq-X_jM+MrfR|?*# z>;M1&32;bRa{vGi!vFvd!vV){sAK>D0k=s+K~zY`kATxwbhN*SN+tu76aP>rRa_xUS2aRvXKUrt%Pj zQMM3qiZ!jqQUt82{6d4GX-mjkuEr9umQR#onDMp+Vhvb3LQu~pYq`T0wT!ndgfQZQ z^E}1!9&dnuxSsoI#5$&iMqIF!23}{2H|;=?V#NA~7_7RFhg-Y>sxe|UVjat0%@|;M z;&{<3AMmDzy)-+ESXZfEpvMI_&KJFK(`60N>YW_*nyg#$Z>PrvH_mH*mIkZ=I&-JT z3+e-_BHh$t49%FV4RBVIWWK(_8mzFJBs=QWu#vof8~iec$?Ip)IhbKBchDoX)R%gl zv@wiJX1v`0%FP(o-!HM9-Sj!jhN=E)I)giMrUnk;OV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_NH|zPI7nnwkAP^PSfhvl002NhP$(!U(SWbeuz$H=P=Ejc0000000000 z008GaDii%C393FqAG44Ewuwx;t(q%?^jX$9$Jeq6x!1k!^}p1+57%!h zxQxFq%VW&)B!35lvF;}g1RsJB->RQ zhp4fYBWeacs|LLxS>S+YYgI9zuEq@}4#tveo;Y-^1i-F5Gus7b#m>y6p-%^{7&Q2F zPz_HUfbL8jc*o~X@T-hGXPZWu$a!UAQq$F*D?8FT+<&@=K_nhW!?@!-5RNoJ=t>^T z4O2=v=O(sNfgDfb%Va1J=}yQ)Y@qKc#3o)2V6{F{+#>MTVWRF>oPc|iV1z}9d2Hmx z02V)Cf*H@?bub)R8u(Zi=)^`|4iFWk2;M??9t`-)z|tU0R(m&%jl3Mdj>`Oe4q!j@ zEXoFM7mfB8tC4dc(z}lV!uU$-Ji%7jWDC=+7asYhA(DwlxM_JH7 z(jA!;>{!O{9oKF9O`WLQRx@Z<`_?ma_x=R(NUp2}wyWzmReKrggpM~nU$4vk)Abu{ WjG(F6k2YHX00000B!2;OQb$4nuFf3k00004XF*Lt006O%3;baP0000aP)t-sn9!g| zI9Nb9NMu!yfM}ptn1}!X06;)cC@3hXfI!f&U|>*yu6m>g00009a7bBm000id000id z0mpBsWB>pHA4x<(R7l6|l+BKtFcgJdMxxtZa57!;7ZzRBn19LM_$FN^O}Yk>dehB3 z!z`*iLDfg-V-_X^+eA*gt(q%?^jX$92VZf?z3z3d|EAu&J3nK=>-zihBF?=?b3!=p zUfMtsQkn+z5}YzA*R{nd*0uqnWze%}&>NB) zoQQI6Dke0vxPL_!V6M3lETD5E0Cp9*+23Qi`r>BN(xbnW6KI`o2{ zb>u1gG%IB#Y8R7+&NjmMBAe4?h?r#Z@nV>FTqQEl1_)j0wp=l#R0!c>uaGG4C_jyc z5|OT@Zek1lokH&7+W|ZkBgG|xcpf&Ij^z==*rhhZ)qf7F+{rfsc;bi*OHsn}V0d9| z5aWK2LGI++0kYLjCNC-M2LthSU~Q1H*(NMFLu@Gl)%0o4bR-_PYyX}<`qo% z4*`y{`2I8DFbMkD!0DxHKI@wn>LyOOg^csc3}Ca5?|=L{!JO9?gBleMeWE2H4)z0# zyH&f`gMY^l-IW9vK@Wmg*3+cvuf+V3Cfwq}`m?7Tv*aaahr(vX#|UpZfH_~i3AZ#Y z%u&)*AATSQJz`B+xqic+t)6}0U_08O9 zl(G!eY@;GKck?HSYn!dWetmw%Qm@P0u Date: Thu, 25 Dec 2025 17:27:56 -0500 Subject: [PATCH 09/20] Fix Commander Dondozo Switching (#8624) --- src/battle_ai_switch_items.c | 37 ++++++++++++++++++----------------- test/battle/ai/ai_switching.c | 21 ++++++++++++++++++++ 2 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 05091a815e..fab12b2df4 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1091,6 +1091,23 @@ static bool32 ShouldSwitchIfAttackingStatsLowered(u32 battler) return FALSE; } +static bool32 CanBattlerConsiderSwitch(u32 battler) +{ + if (gBattleMons[battler].volatiles.wrapped) + return FALSE; + if (gBattleMons[battler].volatiles.escapePrevention) + return FALSE; + if (gBattleMons[battler].volatiles.root) + return FALSE; + if (IsAbilityPreventingEscape(battler)) + return FALSE; + if (gBattleStruct->battlerState[battler].commanderSpecies) + return FALSE; + if (gBattleTypeFlags & BATTLE_TYPE_ARENA) + return FALSE; + return TRUE; +} + bool32 ShouldSwitch(u32 battler) { u32 battlerIn1, battlerIn2; @@ -1100,15 +1117,7 @@ bool32 ShouldSwitch(u32 battler) s32 i; s32 availableToSwitch; - if (gBattleMons[battler].volatiles.wrapped) - return FALSE; - if (gBattleMons[battler].volatiles.escapePrevention) - return FALSE; - if (gBattleMons[battler].volatiles.root) - return FALSE; - if (IsAbilityPreventingEscape(battler)) - return FALSE; - if (gBattleTypeFlags & BATTLE_TYPE_ARENA) + if (!CanBattlerConsiderSwitch(battler)) return FALSE; // Sequence Switching AI never switches mid-battle @@ -1251,15 +1260,7 @@ void ModifySwitchAfterMoveScoring(u32 battler) s32 i; s32 availableToSwitch; - if (gBattleMons[battler].volatiles.wrapped) - return; - if (gBattleMons[battler].volatiles.escapePrevention) - return; - if (gBattleMons[battler].volatiles.root) - return; - if (IsAbilityPreventingEscape(battler)) - return; - if (gBattleTypeFlags & BATTLE_TYPE_ARENA) + if (!CanBattlerConsiderSwitch(battler)) return; // Sequence Switching AI never switches mid-battle diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 91098f28a3..f0eee3ac90 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -1724,3 +1724,24 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI considers both meeting and TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EXPLOSION); hp > 80 ? EXPECT_SEND_OUT(opponent, 2) : EXPECT_SEND_OUT(opponent, 1); } } } + +AI_DOUBLE_BATTLE_TEST("AI will not choose to switch out Dondozo with Commander Tatsugiri") +{ + PASSES_RANDOMLY(100, 100); + GIVEN { + ASSUME(GetMoveEffect(MOVE_PERISH_SONG) == EFFECT_PERISH_SONG); + 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); + OPPONENT(SPECIES_DONDOZO) { Level(50); Moves(MOVE_WATER_GUN); } + OPPONENT(SPECIES_TATSUGIRI) { Moves(MOVE_WATER_GUN); Ability(ABILITY_COMMANDER); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_HEADBUTT); } + PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH); } + PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_CELEBRATE, MOVE_PERISH_SONG); } + PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_CELEBRATE); } + PLAYER(SPECIES_ZIGZAGOON) { Moves (MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_CELEBRATE); MOVE(playerRight, MOVE_PERISH_SONG); } + TURN { MOVE(playerLeft, MOVE_CELEBRATE); MOVE(playerRight, MOVE_CELEBRATE); } + TURN { SWITCH(playerLeft, 2); SWITCH(playerRight, 3); } + TURN { MOVE(playerLeft, MOVE_CELEBRATE); MOVE(playerRight, MOVE_CELEBRATE); EXPECT_MOVE(opponentLeft, MOVE_WATER_GUN); } + } +} From 58ee92c1c89b37c3622c39510317890e8cc92812 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 26 Dec 2025 12:32:57 +0100 Subject: [PATCH 10/20] Fix transform shininess in link battles (#8554) Co-authored-by: Eduardo Quezada --- 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 0ae16a69cb..65d821081c 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -956,8 +956,8 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, u8 changeType) if (changeType == SPECIES_GFX_CHANGE_TRANSFORM) { - personalityValue = gDisableStructs[battlerAtk].transformedMonPersonality; - isShiny = gDisableStructs[battlerAtk].transformedMonShininess; + personalityValue = gTransformedPersonalities[battlerAtk]; + isShiny = gTransformedShininess[battlerAtk]; } else { From c6f9700414fc7ac7f1e1673f2f78ec666b0ba4eb Mon Sep 17 00:00:00 2001 From: FosterProgramming Date: Fri, 26 Dec 2025 12:44:16 +0100 Subject: [PATCH 11/20] Add tests for Intrepid Sword and Dauntless Shield at max stages (#8610) Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- test/battle/ability/intrepid_sword.c | 44 ++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/test/battle/ability/intrepid_sword.c b/test/battle/ability/intrepid_sword.c index 1fc461ebcd..f7c3705d44 100644 --- a/test/battle/ability/intrepid_sword.c +++ b/test/battle/ability/intrepid_sword.c @@ -112,3 +112,47 @@ SINGLE_BATTLE_TEST("Intrepid Sword and Dauntless Shield both can be Skill Swappe MESSAGE("Wobbuffet's Dauntless Shield raised its Defense!"); } } + +SINGLE_BATTLE_TEST("Intrepid Sword and Dauntless Shield do not proc at max stage (Skill Swap)") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_SKILL_SWAP) == EFFECT_SKILL_SWAP); + ASSUME(GetMoveEffect(MOVE_IRON_DEFENSE) == EFFECT_DEFENSE_UP_2); + ASSUME(GetMoveEffect(MOVE_SWORDS_DANCE) == EFFECT_ATTACK_UP_2); + PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } + OPPONENT(SPECIES_ZAMAZENTA) { Ability(ABILITY_DAUNTLESS_SHIELD); } + } WHEN { + TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);} + TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);} + TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);} + TURN { MOVE(player, MOVE_SKILL_SWAP); } + } SCENE { + NONE_OF { + ABILITY_POPUP(player, ABILITY_DAUNTLESS_SHIELD); + ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); + } + } +} + +SINGLE_BATTLE_TEST("Intrepid Sword and Dauntless Shield do not proc at max stage (Baton Pass)") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_BATON_PASS) == EFFECT_BATON_PASS); + ASSUME(GetMoveEffect(MOVE_IRON_DEFENSE) == EFFECT_DEFENSE_UP_2); + ASSUME(GetMoveEffect(MOVE_SWORDS_DANCE) == EFFECT_ATTACK_UP_2); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_ZAMAZENTA) { Ability(ABILITY_DAUNTLESS_SHIELD); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } + } WHEN { + TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);} + TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);} + TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);} + TURN { MOVE(player, MOVE_BATON_PASS); MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(player, 1); SEND_OUT(opponent, 1);} + } SCENE { + NONE_OF { + ABILITY_POPUP(player, ABILITY_DAUNTLESS_SHIELD); + ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); + } + } +} From ccd6e317679ff7dffcca60c4e3d95c96d286fbbe Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 26 Dec 2025 16:14:17 +0100 Subject: [PATCH 12/20] Fix progbits flags for iwram asm functions (#8627) --- src/crt0.s | 2 +- src/decompress_asm.s | 2 +- src/m4a_1.s | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/crt0.s b/src/crt0.s index bd0eb9426c..341f14c379 100644 --- a/src/crt0.s +++ b/src/crt0.s @@ -37,7 +37,7 @@ sp_irq: .word IWRAM_END - 0x60 .pool .arm - .section .iwram.code + .section .iwram.code, "ax", %progbits .align 2, 0 IntrMain:: mov r3, #REG_BASE diff --git a/src/decompress_asm.s b/src/decompress_asm.s index bfe690ef60..9704d83a6a 100644 --- a/src/decompress_asm.s +++ b/src/decompress_asm.s @@ -1,7 +1,7 @@ .syntax unified .arm - .section .iwram.code + .section .iwram.code, "ax", %progbits .align 2 .global FastUnsafeCopy32 diff --git a/src/m4a_1.s b/src/m4a_1.s index 4c0c8f7f89..cc335f0d4c 100644 --- a/src/m4a_1.s +++ b/src/m4a_1.s @@ -85,7 +85,7 @@ lt_o_SoundInfo_pcmBuffer: .word o_SoundInfo_pcmBuffer lt_PCM_DMA_BUF_SIZE: .word PCM_DMA_BUF_SIZE thumb_func_end SoundMain - .section .iwram.code + .section .iwram.code, "ax", %progbits thumb_func_start SoundMainRAM SoundMainRAM: ldrb r3, [r0, o_SoundInfo_reverb] From 6e12b35287dbc2187d2170b1d6e1cd9f8c4b5186 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 26 Dec 2025 20:36:42 -0300 Subject: [PATCH 13/20] Fix Status1 icon not being registered for recorded partner in tests (#8520) --- INSTALL.md | 4 ++-- src/battle_controller_recorded_partner.c | 13 ++++++++++++- test/battle/test_runner_features.c | 14 ++++++++++++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 47f00cf78f..ebdb12e58c 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -140,7 +140,7 @@ git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion 2. Pull your desired branch There are three different options to pull from. ```console -git pull RHH master # if you've chosen to use the upcoming branch, replace the word master with upcoming. +git pull RHH master # if you've chosen to use the upcoming branch, replace the word master with upcoming. # If you've chosen the latest patch, replace the word master with expansion # If you've chosen Latest Patch, replace the word master with expansion/1.11.0 where 1.11.0 is replaced with whatever the latest released version is. ``` @@ -173,7 +173,7 @@ For example, if your version is 1.7.0, you should update to 1.7.4. git pull RHH expansion/X.Y.Z # Replace X, Y and Z with the target version, such as `1.9.3`, `master`, or `upcoming`. ``` -You may have merge conflicts that you need to resolve. +You may have merge conflicts that you need to resolve. If you targeted a specific version that is not the latest version listed on the [tags](https://github.com/rh-hideout/pokeemerald-expansion/tags) page, you should repeat steps 3 and 4 until you are. diff --git a/src/battle_controller_recorded_partner.c b/src/battle_controller_recorded_partner.c index d135329635..4a59002020 100644 --- a/src/battle_controller_recorded_partner.c +++ b/src/battle_controller_recorded_partner.c @@ -43,6 +43,7 @@ static void RecordedPartnerHandleIntroTrainerBallThrow(u32 battler); static void RecordedPartnerHandleDrawPartyStatusSummary(u32 battler); static void RecordedPartnerHandleEndLinkBattle(u32 battler); static void RecordedPartnerBufferRunCommand(u32 battler); +static void RecordedPartnerHandleStatusIconUpdate(u32 battler); static void (*const sRecordedPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { @@ -72,7 +73,7 @@ static void (*const sRecordedPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 b [CONTROLLER_23] = BtlController_Empty, [CONTROLLER_HEALTHBARUPDATE] = BtlController_HandleHealthBarUpdate, [CONTROLLER_EXPUPDATE] = PlayerHandleExpUpdate, // Partner's player gets experience the same way as the player. - [CONTROLLER_STATUSICONUPDATE] = BtlController_HandleStatusIconUpdate, + [CONTROLLER_STATUSICONUPDATE] = RecordedPartnerHandleStatusIconUpdate, [CONTROLLER_STATUSANIMATION] = BtlController_HandleStatusAnimation, [CONTROLLER_STATUSXOR] = BtlController_Empty, [CONTROLLER_DATATRANSFER] = BtlController_Empty, @@ -267,3 +268,13 @@ static void RecordedPartnerHandleEndLinkBattle(u32 battler) BtlController_Complete(battler); gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; } + +static void RecordedPartnerHandleStatusIconUpdate(u32 battler) +{ + if (!IsBattleSEPlaying(battler)) + { + DoStatusIconUpdate(battler); + if (gTestRunnerEnabled) + TestRunner_Battle_RecordStatus1(battler, GetMonData(GetBattlerMon(battler), MON_DATA_STATUS)); + } +} diff --git a/test/battle/test_runner_features.c b/test/battle/test_runner_features.c index 2c6d73abcc..25a75f9ce5 100644 --- a/test/battle/test_runner_features.c +++ b/test/battle/test_runner_features.c @@ -80,3 +80,17 @@ SINGLE_BATTLE_TEST("Changing forms doesn't overwrite set stats (HP)") EXPECT_EQ(player->maxHP, 10); } } + +MULTI_BATTLE_TEST("Multi Battle Tests register partner's status1") +{ + GIVEN { + MULTI_PLAYER(SPECIES_WOBBUFFET); + MULTI_PARTNER(SPECIES_WOBBUFFET); + MULTI_OPPONENT_A(SPECIES_WOBBUFFET); + MULTI_OPPONENT_B(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_WILL_O_WISP, target: playerRight); } + } SCENE { + STATUS_ICON(playerRight, STATUS1_BURN); + } +} From 22fb105f70d3c328d05d9de0cd61e0a1f721c95d Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Sat, 27 Dec 2025 09:53:44 +0100 Subject: [PATCH 14/20] Fix Mimic trying to access MOVE_UNAVAILABLE in an incredibly small amount of possible scenarios (#8685) --- src/battle_script_commands.c | 8 ++++---- test/battle/move_effect/mimic.c | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 86f1b117e4..411421a29a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -11303,10 +11303,10 @@ static void Cmd_mimicattackcopy(void) { CMD_ARGS(const u8 *failInstr); - if ((IsMoveMimicBanned(gLastMoves[gBattlerTarget])) - || (gBattleMons[gBattlerAttacker].volatiles.transformed) - || gLastMoves[gBattlerTarget] == MOVE_NONE - || gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE) + if (gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE + || gLastMoves[gBattlerTarget] == MOVE_NONE + || gBattleMons[gBattlerAttacker].volatiles.transformed + || IsMoveMimicBanned(gLastMoves[gBattlerTarget])) { gBattlescriptCurrInstr = cmd->failInstr; } diff --git a/test/battle/move_effect/mimic.c b/test/battle/move_effect/mimic.c index 4a51a4b79e..6ea6e3f1f8 100644 --- a/test/battle/move_effect/mimic.c +++ b/test/battle/move_effect/mimic.c @@ -1,4 +1,20 @@ #include "global.h" #include "test/battle.h" +SINGLE_BATTLE_TEST("Mimic doesn't error when the last move used by the target resolves to MOVE_UNAVAILABLE") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {MOVE(opponent, MOVE_TRANSFORM); MOVE(player, MOVE_MIMIC); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRANSFORM, opponent); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_MIMIC, player); + } THEN { + EXPECT_EQ(gLastMoves[1], MOVE_UNAVAILABLE); // This test depends on the current implementation of Transform, if this changes, the test should be changed + } +} + TO_DO_BATTLE_TEST("TODO: Write Mimic (Move Effect) test titles") From 0a1d8bf75428515bee97f5a27c62e682a5b36822 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Sat, 27 Dec 2025 09:54:09 +0100 Subject: [PATCH 15/20] Fix stat access for stats other than Attack in BS_GetStatValue (#8684) --- src/battle_script_commands.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 411421a29a..eaf4f7147b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16609,7 +16609,27 @@ void BS_GetStatValue(void) { NATIVE_ARGS(u8 stat); u32 stat = cmd->stat; - gBattleStruct->passiveHpUpdate[gBattlerAttacker] = *(u16 *)(&gBattleMons[gBattlerTarget].attack) + (stat - 1); + switch (stat) + { + case STAT_ATK: + gBattleStruct->passiveHpUpdate[gBattlerAttacker] = gBattleMons[gBattlerTarget].attack; + break; + case STAT_DEF: + gBattleStruct->passiveHpUpdate[gBattlerAttacker] = gBattleMons[gBattlerTarget].defense; + break; + case STAT_SPATK: + gBattleStruct->passiveHpUpdate[gBattlerAttacker] = gBattleMons[gBattlerTarget].spAttack; + break; + case STAT_SPDEF: + gBattleStruct->passiveHpUpdate[gBattlerAttacker] = gBattleMons[gBattlerTarget].spDefense; + break; + case STAT_SPEED: + gBattleStruct->passiveHpUpdate[gBattlerAttacker] = gBattleMons[gBattlerTarget].speed; + break; + default: + // Add errorf here on upcoming + return; + } gBattleStruct->passiveHpUpdate[gBattlerAttacker] *= gStatStageRatios[gBattleMons[gBattlerTarget].statStages[stat]][0]; gBattleStruct->passiveHpUpdate[gBattlerAttacker] /= gStatStageRatios[gBattleMons[gBattlerTarget].statStages[stat]][1]; gBattlescriptCurrInstr = cmd->nextInstr; From 02afaf2a66523c46ac38e3f719b001c03979688b Mon Sep 17 00:00:00 2001 From: grintoul <166724814+grintoul1@users.noreply.github.com> Date: Sat, 27 Dec 2025 22:39:45 +0000 Subject: [PATCH 16/20] Prevent AI seeing Pollen Puff damage on its ally (#8693) --- src/battle_ai_util.c | 4 ++++ test/battle/ai/ai_multi.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 20ebfdb27f..9e728d5213 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -901,6 +901,10 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u struct AiLogicData *aiData = gAiLogicData; gAiLogicData->aiCalcInProgress = TRUE; + if (moveEffect == EFFECT_HIT_ENEMY_HEAL_ALLY + && battlerDef == BATTLE_PARTNER(battlerAtk)) + return simDamage; + if (moveEffect == EFFECT_NATURE_POWER) move = GetNaturePowerMove(battlerAtk); diff --git a/test/battle/ai/ai_multi.c b/test/battle/ai/ai_multi.c index b46573b4ca..408a37f276 100644 --- a/test/battle/ai/ai_multi.c +++ b/test/battle/ai/ai_multi.c @@ -222,3 +222,31 @@ AI_MULTI_BATTLE_TEST("AI opponents do not steal their partner pokemon in multi b EXPECT_EQ(SPECIES_VENUSAUR, opponentLeft->species); } } + +AI_MULTI_BATTLE_TEST("Pollen Puff: AI correctly scores moves with EFFECT_HIT_ENEMY_HEAL_ALLY as damaging opponents but not allies") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); + ASSUME(GetMoveEffect(MOVE_POLLEN_PUFF) == EFFECT_HIT_ENEMY_HEAL_ALLY); + // Speed tie so all think they are faster + MULTI_PLAYER(SPECIES_WOBBUFFET) { Speed(1); HP(50); Moves(MOVE_POLLEN_PUFF, MOVE_CELEBRATE); } + MULTI_PARTNER(SPECIES_WOBBUFFET) { Speed(1); HP(50); Moves(MOVE_POLLEN_PUFF); } + MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Speed(1); HP(50); Moves(MOVE_POLLEN_PUFF); } + MULTI_OPPONENT_B(SPECIES_WOBBUFFET) { Speed(1); HP(50); Moves(MOVE_POLLEN_PUFF); } + } WHEN { + TURN { + // Targeting ally + SCORE_EQ_VAL(opponentLeft, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + WEAK_EFFECT, target:opponentRight); + SCORE_EQ_VAL(playerRight, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + WEAK_EFFECT, target:playerLeft); + SCORE_EQ_VAL(opponentRight, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + WEAK_EFFECT, target:opponentLeft); + + // Targeting opponent + SCORE_EQ_VAL(opponentLeft, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + BEST_DAMAGE_MOVE + FAST_KILL, target:playerLeft); + SCORE_EQ_VAL(opponentLeft, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + BEST_DAMAGE_MOVE + FAST_KILL, target:playerRight); + SCORE_EQ_VAL(playerRight, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + BEST_DAMAGE_MOVE + FAST_KILL, target:opponentLeft); + SCORE_EQ_VAL(playerRight, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + BEST_DAMAGE_MOVE + FAST_KILL, target:opponentRight); + SCORE_EQ_VAL(opponentRight, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + BEST_DAMAGE_MOVE + FAST_KILL, target:playerLeft); + SCORE_EQ_VAL(opponentRight, MOVE_POLLEN_PUFF, AI_SCORE_DEFAULT + BEST_DAMAGE_MOVE + FAST_KILL, target:playerRight); + } + } +} From ba679ddc2682e44c47ab307a432edbcd1b5e333b Mon Sep 17 00:00:00 2001 From: John Cooper McDonald Date: Sun, 28 Dec 2025 03:02:21 -0600 Subject: [PATCH 17/20] Fix the game not building with OW_POKEMON_OBJECT_EVENTS disabled (#8654) --- .../pokemon/species_info/gen_1_families.h | 200 +++---- .../pokemon/species_info/gen_2_families.h | 150 ++---- .../pokemon/species_info/gen_3_families.h | 50 +- .../pokemon/species_info/gen_5_families.h | 300 ++++------- .../pokemon/species_info/gen_6_families.h | 500 ++++++------------ .../pokemon/species_info/gen_7_families.h | 50 +- .../pokemon/species_info/gen_8_families.h | 50 +- 7 files changed, 390 insertions(+), 910 deletions(-) diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index aab42559cb..ec7edba642 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -5048,42 +5048,22 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = "It flies by using the power of\n" "moonlight to control gravity within\n" "a radius of over 32 feet around it."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Clefable) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sClefableLevelUpLearnset, .teachableLearnset = sClefableTeachableLearnset, @@ -9253,42 +9233,22 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = "has increased due to Mega Evolution,\n" "filling its mouth. If not careful,\n" "the acid will overflow and spill out."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Victreebel) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sVictreebelLevelUpLearnset, .teachableLearnset = sVictreebelTeachableLearnset, @@ -15684,42 +15644,22 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = "humanlike. Whether it's simply\n" "trying to communicate or wants to\n" "supplant humanity is unclear."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Starmie) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sStarmieLevelUpLearnset, .teachableLearnset = sStarmieTeachableLearnset, @@ -20231,42 +20171,22 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = "powered up this Pokémon's feelings\n" "of kindness. It finishes off its\n" "opponents with mercy in its heart."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Dragonite) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sDragoniteLevelUpLearnset, .teachableLearnset = sDragoniteTeachableLearnset, diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h index 3849ab760d..bfd1f90c68 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -267,42 +267,22 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = "powerful Solar Beam from its four\n" "flowers. Another name for this is\n" "Mega Sol Cannon."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Meganium) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sMeganiumLevelUpLearnset, .teachableLearnset = sMeganiumTeachableLearnset, @@ -854,42 +834,22 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = "Pokémon forms a gigantic set of jaws\n" "with a bite 10 times as powerful\n" "as Mega Feraligatr's actual jaws."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Feraligatr) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sFeraligatrLevelUpLearnset, .teachableLearnset = sFeraligatrTeachableLearnset, @@ -7311,42 +7271,22 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = "its pincers have taken a more\n" "diabolical form, ripping anything\n" "they pierce to shreds."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Skarmory) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sSkarmoryLevelUpLearnset, .teachableLearnset = sSkarmoryTeachableLearnset, diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h index 6535497ddf..29459bfb45 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -10743,42 +10743,22 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = "air imbued with ghost energy to\n" "freeze even insubstantial things,\n" "such as flames or the wind."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Froslass) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sFroslassLevelUpLearnset, .teachableLearnset = sFroslassTeachableLearnset, diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h index 0acaeb8ec7..249257c425 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -548,42 +548,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = "shaped like a serpentine spear,\n" "it rushes in to save its\n" "imperiled allies."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Emboar) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sEmboarLevelUpLearnset, .teachableLearnset = sEmboarTeachableLearnset, @@ -2880,42 +2860,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = "head together to form a streamlined\n" "shape and spins at high speeds,\n" "it can destroy anything."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Excadrill) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sExcadrillLevelUpLearnset, .teachableLearnset = sExcadrillTeachableLearnset, @@ -4129,42 +4089,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = "Its deadly venom gives off a faint\n" "glow. The venom affects Scolipede's\n" "mind, honing its viciousness."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Scolipede) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sScolipedeLevelUpLearnset, .teachableLearnset = sScolipedeTeachableLearnset, @@ -5885,42 +5825,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = "shed skin to turn white, growing\n" "tough and supple. Of course, this\n" "Pokémon is still as feisty as ever."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Scrafty) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sScraftyLevelUpLearnset, .teachableLearnset = sScraftyTeachableLearnset, @@ -9893,42 +9813,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = "electricity it did before Mega\n" "Evolving. It discharges this energy\n" "from its false Eelektrik made of mucus."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Eelektross) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sEelektrossLevelUpLearnset, .teachableLearnset = sEelektrossTeachableLearnset, @@ -10335,42 +10235,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = "our world with the afterlife.\n" "This Pokémon draws in hatred and\n" "converts it into power."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Chandelure) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sChandelureLevelUpLearnset, .teachableLearnset = sChandelureTeachableLearnset, diff --git a/src/data/pokemon/species_info/gen_6_families.h b/src/data/pokemon/species_info/gen_6_families.h index 3e99facb91..23a3b9f25f 100644 --- a/src/data/pokemon/species_info/gen_6_families.h +++ b/src/data/pokemon/species_info/gen_6_families.h @@ -244,42 +244,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "It has fortified armor and a\n" "will to defend at all costs.\n" "Both are absurdly strong."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Chesnaught) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sChesnaughtLevelUpLearnset, .teachableLearnset = sChesnaughtTeachableLearnset, @@ -535,42 +515,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "dazzle its opponents before\n" "incinerating them with a\n" "huge fireball."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Delphox) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sDelphoxLevelUpLearnset, .teachableLearnset = sDelphoxTeachableLearnset, @@ -947,42 +907,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "shuriken at high speed to make it\n" "float, then clings to it upside\n" "down to catch opponents unawares."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Greninja) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sGreninjaLevelUpLearnset, .teachableLearnset = sGreninjaTeachableLearnset, @@ -1937,42 +1877,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "than 18,000 degrees Fahrenheit.\n" "It swings around its grand, blazing\n" "mane as it protects its allies."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Pyroar) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sPyroarLevelUpLearnset, .teachableLearnset = sPyroarTeachableLearnset, @@ -2358,42 +2278,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "all the energy from Mega\n" "Evolution. The flower now attacks\n" "enemies on its own."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Floette) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sFloetteEternalLevelUpLearnset, .teachableLearnset = sFloetteEternalTeachableLearnset, @@ -3713,42 +3613,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "overwrite the personality and\n" "memories of others-and to\n" "control them."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Malamar) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sMalamarLevelUpLearnset, .teachableLearnset = sMalamarTeachableLearnset, @@ -3931,42 +3811,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "It uses its many arms to toy\n" "with its opponents. This\n" "keeps the head extremely busy."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Barbaracle) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sBarbaracleLevelUpLearnset, .teachableLearnset = sBarbaracleTeachableLearnset, @@ -4152,42 +4012,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "regenerative power of cells to run\n" "wild. The liquid is deadly poison\n" "to everything other than itself."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Dragalge) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sDragalgeLevelUpLearnset, .teachableLearnset = sDragalgeTeachableLearnset, @@ -4872,42 +4712,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "Mega Evolution has pumped up all\n" "its muscles. Hawlucha flexes to\n" "show off its strength."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Hawlucha) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sHawluchaLevelUpLearnset, .teachableLearnset = sHawluchaTeachableLearnset, @@ -7096,42 +6916,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "during an unprecedented crisis,\n" "Zygarde Mega Evolves and calms the\n" "situation with its unmatched power."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Zygarde) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, diff --git a/src/data/pokemon/species_info/gen_7_families.h b/src/data/pokemon/species_info/gen_7_families.h index 3b982f2c22..26637ad423 100644 --- a/src/data/pokemon/species_info/gen_7_families.h +++ b/src/data/pokemon/species_info/gen_7_families.h @@ -5239,42 +5239,22 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = "invigorated, allowing it to regain\n" "its youth. It manipulates the\n" "atmosphere to summon storms."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Drampa) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sDrampaLevelUpLearnset, .teachableLearnset = sDrampaTeachableLearnset, diff --git a/src/data/pokemon/species_info/gen_8_families.h b/src/data/pokemon/species_info/gen_8_families.h index 04dc82f493..bc73d7bcec 100644 --- a/src/data/pokemon/species_info/gen_8_families.h +++ b/src/data/pokemon/species_info/gen_8_families.h @@ -5277,42 +5277,22 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = "ultimate battle formation, which\n" "can be achieved only if the troopers\n" "and brass have the strongest of bonds."), - .frontPic = gMonFrontPic_CircledQuestionMark, - .frontPicSize = MON_COORDS_SIZE(40, 40), - .frontPicYOffset = 12, - .frontAnimFrames = sAnims_TwoFramePlaceHolder, - .frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, - .backPic = gMonBackPic_CircledQuestionMark, - .backPicSize = MON_COORDS_SIZE(40, 40), - .backPicYOffset = 12, - .backAnimId = BACK_ANIM_NONE, - .palette = gMonPalette_CircledQuestionMark, - .shinyPalette = gMonShinyPalette_CircledQuestionMark, - .iconSprite = gMonIcon_QuestionMark, - .iconPalIndex = 0, + //.frontPic = gMonFrontPic_CircledQuestionMark, + //.frontPicSize = MON_COORDS_SIZE(40, 40), + //.frontPicYOffset = 12, + //.frontAnimFrames = sAnims_TwoFramePlaceHolder, + //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, + //.backPic = gMonBackPic_CircledQuestionMark, + //.backPicSize = MON_COORDS_SIZE(40, 40), + //.backPicYOffset = 12, + //.backAnimId = BACK_ANIM_NONE, + //.palette = gMonPalette_CircledQuestionMark, + //.shinyPalette = gMonShinyPalette_CircledQuestionMark, + //.iconSprite = gMonIcon_QuestionMark, + //.iconPalIndex = 0, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - FOOTPRINT(QuestionMark) - SHADOW(-1, 0, SHADOW_SIZE_M) - #if OW_BATTLE_ONLY_FORMS - .overworldData = { - .tileTag = TAG_NONE, - .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE, - .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, - .size = 512, - .width = 32, - .height = 32, - .paletteSlot = PALSLOT_NPC_1, - .shadowSize = SHADOW_SIZE_M, - .inanimate = FALSE, - .compressed = COMP, - .tracks = TRACKS_FOOT, - .oam = &gObjectEventBaseOam_32x32, - .subspriteTables = sOamTables_32x32, - .anims = sAnimTable_Following, - .images = sPicTable_Substitute, - .affineAnims = gDummySpriteAffineAnimTable, - }, - #endif //OW_BATTLE_ONLY_FORMS + FOOTPRINT(Falinks) + //SHADOW(-1, 0, SHADOW_SIZE_M) .isMegaEvolution = TRUE, .levelUpLearnset = sFalinksLevelUpLearnset, .teachableLearnset = sFalinksTeachableLearnset, From 46e8178b89545063f388534abd19738907420d5e Mon Sep 17 00:00:00 2001 From: John Cooper McDonald Date: Sun, 28 Dec 2025 03:25:41 -0600 Subject: [PATCH 18/20] Fix the sprite visualizer not showing asymmetrical follower sprites (#8643) --- src/pokemon_sprite_visualizer.c | 92 +++++++++++++++------------------ 1 file changed, 43 insertions(+), 49 deletions(-) diff --git a/src/pokemon_sprite_visualizer.c b/src/pokemon_sprite_visualizer.c index a5f36a0db6..cc51b2dfc7 100644 --- a/src/pokemon_sprite_visualizer.c +++ b/src/pokemon_sprite_visualizer.c @@ -58,37 +58,6 @@ static struct PokemonSpriteVisualizer *GetStructPtr(u8 taskId) return (struct PokemonSpriteVisualizer*)(T1_READ_PTR(taskDataPtr)); } -static const union AnimCmd sAnim_Follower_1[] = -{ - ANIMCMD_FRAME(0, 30), - ANIMCMD_FRAME(1, 30), - ANIMCMD_FRAME(0, 30), - ANIMCMD_FRAME(1, 30), - ANIMCMD_FRAME(0, 10), - ANIMCMD_FRAME(2, 30), - ANIMCMD_FRAME(3, 30), - ANIMCMD_FRAME(2, 30), - ANIMCMD_FRAME(3, 30), - ANIMCMD_FRAME(2, 10), - ANIMCMD_FRAME(4, 30), - ANIMCMD_FRAME(5, 30), - ANIMCMD_FRAME(4, 30), - ANIMCMD_FRAME(5, 30), - ANIMCMD_FRAME(4, 10), - ANIMCMD_FRAME(4, 30, .hFlip = TRUE), - ANIMCMD_FRAME(5, 30, .hFlip = TRUE), - ANIMCMD_FRAME(4, 30, .hFlip = TRUE), - ANIMCMD_FRAME(5, 30, .hFlip = TRUE), - ANIMCMD_FRAME(4, 10, .hFlip = TRUE), - ANIMCMD_END, -}; - -static const union AnimCmd *const sAnims_Follower[] = -{ - sAnim_GeneralFrame0, - sAnim_Follower_1, -}; - //BgTemplates static const struct BgTemplate sBgTemplates[] = { @@ -842,32 +811,32 @@ static void SpriteCB_EnemyShadowCustom(struct Sprite *shadowSprite) static void SpriteCB_Follower(struct Sprite *sprite) { - if (sprite->animDelayCounter == 0) + if (sprite->data[3] == 0) { - sprite->animDelayCounter = 60; + sprite->data[3] = 120; switch (sprite->animNum) { - default: - case 0: - case 1: - StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_NORTH)); - break; - case 2: - StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_WEST)); - break; - case 3: - StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_EAST)); - break; case 4: - StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_SOUTH)); + StartSpriteAnim(sprite, GetMoveDirectionAnimNum(DIR_NORTH)); + break; + case 5: + StartSpriteAnim(sprite, GetMoveDirectionAnimNum(DIR_WEST)); + break; + case 6: + StartSpriteAnim(sprite, GetMoveDirectionAnimNum(DIR_EAST)); + break; + default: + case 7: + StartSpriteAnim(sprite, GetMoveDirectionAnimNum(DIR_SOUTH)); break; } } else { - sprite->animDelayCounter--; + sprite->data[3]--; } } + static void LoadAndCreateEnemyShadowSpriteCustom(struct PokemonSpriteVisualizer *data, u16 species) { bool8 invisible = FALSE; @@ -1315,9 +1284,26 @@ void CB2_Pokemon_Sprite_Visualizer(void) gSprites[data->iconspriteId].oam.priority = 0; //Follower Sprite - data->followerspriteId = CreateObjectGraphicsSprite(OBJ_EVENT_MON + species, SpriteCB_Follower, VISUALIZER_FOLLOWER_X, VISUALIZER_FOLLOWER_Y, 0); + u16 graphicsId = species + OBJ_EVENT_MON; + if (data->isShiny) + graphicsId += OBJ_EVENT_MON_SHINY; + if (data->isFemale) + graphicsId += OBJ_EVENT_MON_FEMALE; + data->followerspriteId = CreateObjectGraphicsSprite(graphicsId, + SpriteCB_Follower, + VISUALIZER_FOLLOWER_X, + VISUALIZER_FOLLOWER_Y, + 0); gSprites[data->followerspriteId].oam.priority = 0; - gSprites[data->followerspriteId].anims = sAnims_Follower; + const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, data->isShiny, data->isFemale); + if (graphicsInfo != NULL) + { + gSprites[data->followerspriteId].oam.shape = graphicsInfo->oam->shape; + gSprites[data->followerspriteId].oam.size = graphicsInfo->oam->size; + gSprites[data->followerspriteId].images = graphicsInfo->images; + gSprites[data->followerspriteId].anims = graphicsInfo->anims; + gSprites[data->followerspriteId].subspriteTables = graphicsInfo->subspriteTables; + } //Modify Arrows SetUpModifyArrows(data); @@ -2017,7 +2003,15 @@ static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data) VISUALIZER_FOLLOWER_Y, 0); gSprites[data->followerspriteId].oam.priority = 0; - gSprites[data->followerspriteId].anims = sAnims_Follower; + const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, data->isShiny, data->isFemale); + if (graphicsInfo != NULL) + { + gSprites[data->followerspriteId].oam.shape = graphicsInfo->oam->shape; + gSprites[data->followerspriteId].oam.size = graphicsInfo->oam->size; + gSprites[data->followerspriteId].images = graphicsInfo->images; + gSprites[data->followerspriteId].anims = graphicsInfo->anims; + gSprites[data->followerspriteId].subspriteTables = graphicsInfo->subspriteTables; + } //Modify Arrows LoadSpritePalette(&gSpritePalette_Arrow); From 0e8f94f380bcf442ce63c98f9995c08b29ec66f4 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Sun, 28 Dec 2025 20:27:19 +0000 Subject: [PATCH 19/20] Fixes Kingambit evolution conditions (#8689) --- src/battle_script_commands.c | 8 +- src/data/moves_info.h | 1 - test/battle/evolution_tracker.c | 137 ++++++++++++++++++++++++++++++++ 3 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 test/battle/evolution_tracker.c diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index eaf4f7147b..e95e4695c9 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3036,6 +3036,7 @@ void SetMoveEffect(u32 battler, u32 effectBattler, enum MoveEffect moveEffect, c case MOVE_EFFECT_STEALTH_ROCK: case MOVE_EFFECT_PAYDAY: case MOVE_EFFECT_BUG_BITE: + case MOVE_EFFECT_FLAME_BURST: activateAfterFaint = TRUE; break; default: @@ -4281,7 +4282,7 @@ static void Cmd_tryfaintmon(void) } } - if (cmd->battler == BS_ATTACKER) + if (cmd->battler == BS_TARGET && gCurrentMove != MOVE_NONE) TryUpdateEvolutionTracker(IF_DEFEAT_X_WITH_ITEMS, 1, MOVE_NONE); gBattlerFainted = battler; @@ -15474,11 +15475,12 @@ static void TryUpdateEvolutionTracker(u32 evolutionCondition, u32 upAmount, u16 u32 i, j; if (IsOnPlayerSide(gBattlerAttacker) - && !(gBattleTypeFlags & (BATTLE_TYPE_LINK + && ((TESTING && IsDoubleBattle()) // To be removed when Wild Double Battles are added to tests + || !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_TRAINER_HILL - | BATTLE_TYPE_FRONTIER))) + | BATTLE_TYPE_FRONTIER)))) { const struct Evolution *evolutions = GetSpeciesEvolutions(gBattleMons[gBattlerAttacker].species); if (evolutions == NULL) diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 5db6742239..375441b2fa 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -12552,7 +12552,6 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .category = DAMAGE_CATEGORY_SPECIAL, .additionalEffects = ADDITIONAL_EFFECTS({ .moveEffect = MOVE_EFFECT_FLAME_BURST, - .self = TRUE, }), .contestEffect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION, .contestCategory = CONTEST_CATEGORY_BEAUTY, diff --git a/test/battle/evolution_tracker.c b/test/battle/evolution_tracker.c new file mode 100644 index 0000000000..ebc83132fc --- /dev/null +++ b/test/battle/evolution_tracker.c @@ -0,0 +1,137 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gSpeciesInfo[SPECIES_BISHARP].evolutions[0].params->condition == IF_DEFEAT_X_WITH_ITEMS); + ASSUME(gSpeciesInfo[SPECIES_BISHARP].evolutions[0].params->arg1 == SPECIES_BISHARP); + ASSUME(gSpeciesInfo[SPECIES_BISHARP].evolutions[0].params->arg2 == ITEM_LEADERS_CREST); +} + +WILD_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing a Bisharp that holds Leader's Crest increases tracker") +{ + GIVEN { + PLAYER(SPECIES_BISHARP); + OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + HP_BAR(opponent, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 1); + } +} + +// To be replaced with WILD_DOUBLE_BATTLE_TEST when that is made possible (also see TryUpdateEvolutionTracker) +DOUBLE_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing multiple Bisharps holding Leader's Crest increases tracker multiple times") +{ + GIVEN { + ASSUME(GetMoveTarget(MOVE_LAVA_PLUME) == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(SPECIES_BISHARP); + PLAYER(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); } + OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_LAVA_PLUME); } + } SCENE { + HP_BAR(opponentLeft, hp: 0); + HP_BAR(playerRight, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 2); + } +} + +WILD_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing a Bisharp that doesn't hold Leader's Crest doesn't increase tracker") +{ + GIVEN { + PLAYER(SPECIES_BISHARP); + OPPONENT(SPECIES_BISHARP) { HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + HP_BAR(opponent, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0); + } +} + +WILD_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing a non-Bisharp that holds Leader's Crest doesn't increase tracker") +{ + u32 species; + + PARAMETRIZE { species = SPECIES_WOBBUFFET; } + PARAMETRIZE { species = SPECIES_PAWNIARD; } + GIVEN { + PLAYER(SPECIES_BISHARP); + OPPONENT(species) { Item(ITEM_LEADERS_CREST); HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + HP_BAR(opponent, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0); + } +} + +WILD_BATTLE_TEST("Evolution Tracker: Pawniard KO-ing a Bisharp that holds Leader's Crest doesn't increase tracker") +{ + GIVEN { + PLAYER(SPECIES_PAWNIARD); + OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + HP_BAR(opponent, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0); + } +} + +WILD_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing eligible battler from contact effects doesn't increase tracker") +{ + GIVEN { + ASSUME(GetItemHoldEffect(ITEM_ROCKY_HELMET) == HOLD_EFFECT_ROCKY_HELMET); + ASSUME(MoveMakesContact(MOVE_SCRATCH)); + PLAYER(SPECIES_BISHARP) { Item(ITEM_ROCKY_HELMET); } + OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); } + } WHEN { + TURN { MOVE(opponent, MOVE_SCRATCH); } + } SCENE { + HP_BAR(opponent, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0); + } +} + +WILD_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing eligible battler with passive damage doesn't increase tracker") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_LEECH_SEED) == EFFECT_LEECH_SEED); + PLAYER(SPECIES_BISHARP); + OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_LEECH_SEED); } + } SCENE { + HP_BAR(opponent, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0); + } +} + +// To be replaced with WILD_DOUBLE_BATTLE_TEST when that is made possible (also see TryUpdateEvolutionTracker) +DOUBLE_BATTLE_TEST("Evolution Tracker: Bisharp KO-ing eligible battler with bursting flames doesn't increase tracker") +{ + GIVEN { + ASSUME(MoveHasAdditionalEffect(MOVE_FLAME_BURST, MOVE_EFFECT_FLAME_BURST)); + PLAYER(SPECIES_BISHARP); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_BISHARP) { Item(ITEM_LEADERS_CREST); HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_FLAME_BURST, target: opponentRight); } + } SCENE { + HP_BAR(opponentLeft, hp: 0); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_EVOLUTION_TRACKER), 0); + } +} From 36c28c449a8f4ebc027cafce9ce30f1ab28a27ff Mon Sep 17 00:00:00 2001 From: John Cooper McDonald Date: Mon, 29 Dec 2025 05:02:42 -0600 Subject: [PATCH 20/20] Fix Naclstack and Garganacl shadows (#8698) --- src/data/pokemon/species_info/gen_9_families.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index f239836cfd..96f83f1037 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -2129,7 +2129,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconSprite = gMonIcon_Naclstack, .iconPalIndex = 2, .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, - SHADOW(0, 5, SHADOW_SIZE_L) + SHADOW(0, 2, SHADOW_SIZE_L) FOOTPRINT(Naclstack) OVERWORLD( sPicTable_Naclstack, @@ -2193,7 +2193,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconSprite = gMonIcon_Garganacl, .iconPalIndex = 2, .pokemonJumpType = PKMN_JUMP_TYPE_NONE, - SHADOW(0, 13, SHADOW_SIZE_L) + SHADOW(0, 9, SHADOW_SIZE_L) FOOTPRINT(Garganacl) OVERWORLD( sPicTable_Garganacl,