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)! 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/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/graphics/pokemon/conkeldurr/overworld.png b/graphics/pokemon/conkeldurr/overworld.png index fa83edbdc5..e1233f5ddc 100644 Binary files a/graphics/pokemon/conkeldurr/overworld.png and b/graphics/pokemon/conkeldurr/overworld.png differ diff --git a/graphics/pokemon/conkeldurr/overworld_normal.pal b/graphics/pokemon/conkeldurr/overworld_normal.pal index 6e4935354a..cbe2d171d5 100644 --- a/graphics/pokemon/conkeldurr/overworld_normal.pal +++ b/graphics/pokemon/conkeldurr/overworld_normal.pal @@ -12,7 +12,7 @@ JASC-PAL 101 101 94 144 144 137 172 41 65 -0 0 0 +255 255 255 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/conkeldurr/overworld_shiny.pal b/graphics/pokemon/conkeldurr/overworld_shiny.pal index 4ed16e43f9..5fe0a295bb 100644 --- a/graphics/pokemon/conkeldurr/overworld_shiny.pal +++ b/graphics/pokemon/conkeldurr/overworld_shiny.pal @@ -12,7 +12,7 @@ JASC-PAL 103 92 90 144 144 137 214 66 61 -0 0 0 +255 255 255 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/gurdurr/overworld.png b/graphics/pokemon/gurdurr/overworld.png index a2b8aabbfa..38ffe3798c 100644 Binary files a/graphics/pokemon/gurdurr/overworld.png and b/graphics/pokemon/gurdurr/overworld.png differ diff --git a/graphics/pokemon/gurdurr/overworld_normal.pal b/graphics/pokemon/gurdurr/overworld_normal.pal index 1219c452c4..25acc57714 100644 --- a/graphics/pokemon/gurdurr/overworld_normal.pal +++ b/graphics/pokemon/gurdurr/overworld_normal.pal @@ -9,11 +9,11 @@ JASC-PAL 146 129 121 47 47 40 147 63 121 -104 40 71 +88 56 64 200 95 172 229 229 247 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +84 21 43 +131 41 57 +222 82 90 +161 48 74 0 0 0 diff --git a/graphics/pokemon/gurdurr/overworld_shiny.pal b/graphics/pokemon/gurdurr/overworld_shiny.pal index 09b2dfe70c..25db2209b8 100644 --- a/graphics/pokemon/gurdurr/overworld_shiny.pal +++ b/graphics/pokemon/gurdurr/overworld_shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -82 32 47 -136 40 51 -180 68 48 +152 208 160 +93 41 57 +238 98 16 7 7 7 -208 192 128 -174 151 96 +216 201 140 +175 152 96 47 47 40 -224 80 69 -104 40 71 +173 74 69 +96 88 62 +224 107 96 229 229 247 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +84 21 43 +131 41 57 +222 82 90 +178 81 60 0 0 0 diff --git a/graphics/pokemon/seismitoad/overworld.png b/graphics/pokemon/seismitoad/overworld.png index 780b69f641..4da0d45298 100644 Binary files a/graphics/pokemon/seismitoad/overworld.png and b/graphics/pokemon/seismitoad/overworld.png differ diff --git a/graphics/pokemon/seismitoad/overworld_shiny.pal b/graphics/pokemon/seismitoad/overworld_shiny.pal index 6f97a5d2f4..41e3d1c57d 100644 --- a/graphics/pokemon/seismitoad/overworld_shiny.pal +++ b/graphics/pokemon/seismitoad/overworld_shiny.pal @@ -5,14 +5,14 @@ JASC-PAL 55 55 55 87 87 87 0 0 0 -24 56 64 +31 72 64 232 128 56 11 55 112 24 112 104 32 160 136 176 104 32 -236 79 47 -172 47 25 +236 204 110 +153 115 64 33 33 33 0 0 0 0 0 0 diff --git a/graphics/pokemon/sewaddle/overworld.png b/graphics/pokemon/sewaddle/overworld.png index 4ea3161e9d..eeb47aa54f 100644 Binary files a/graphics/pokemon/sewaddle/overworld.png and b/graphics/pokemon/sewaddle/overworld.png differ 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 4cdec74ce5..b2a5b6cb1b 100644 Binary files a/graphics/pokemon/timburr/overworld.png and b/graphics/pokemon/timburr/overworld.png differ diff --git a/graphics/pokemon/timburr/overworld_normal.pal b/graphics/pokemon/timburr/overworld_normal.pal index 48c26d4786..54d8267232 100644 --- a/graphics/pokemon/timburr/overworld_normal.pal +++ b/graphics/pokemon/timburr/overworld_normal.pal @@ -10,9 +10,9 @@ JASC-PAL 121 40 55 191 79 104 236 112 129 -95 47 40 +55 47 40 229 229 247 -138 87 79 +105 96 91 79 47 5 164 104 5 112 71 5 diff --git a/graphics/pokemon/timburr/overworld_shiny.pal b/graphics/pokemon/timburr/overworld_shiny.pal index d3ac821ecb..44f9579568 100644 --- a/graphics/pokemon/timburr/overworld_shiny.pal +++ b/graphics/pokemon/timburr/overworld_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -80 61 60 +96 88 62 208 192 128 2 2 2 175 151 96 2 2 2 -186 71 45 -186 71 45 -236 112 129 -80 61 60 +139 55 62 +173 74 69 +224 107 96 +93 41 57 213 210 213 186 71 45 79 47 5 -186 71 45 +164 104 5 112 71 5 218 172 87 diff --git a/graphics/pokemon/whirlipede/overworld.png b/graphics/pokemon/whirlipede/overworld.png index d6cc3e73d1..725b92fd63 100644 Binary files a/graphics/pokemon/whirlipede/overworld.png and b/graphics/pokemon/whirlipede/overworld.png differ diff --git a/graphics/pokemon/whirlipede/overworld_shiny.pal b/graphics/pokemon/whirlipede/overworld_shiny.pal index 18192596b3..5f3a68caa8 100644 --- a/graphics/pokemon/whirlipede/overworld_shiny.pal +++ b/graphics/pokemon/whirlipede/overworld_shiny.pal @@ -6,12 +6,12 @@ JASC-PAL 64 56 72 100 85 143 128 104 160 -88 152 136 +88 163 136 0 0 0 64 64 80 40 40 40 -168 128 64 -208 176 96 +209 128 175 +208 176 185 96 80 128 0 0 0 0 0 0 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/include/test/battle.h b/include/test/battle.h index f8d928fc59..06072a35c4 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_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/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/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/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_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 { diff --git a/src/battle_main.c b/src/battle_main.c index d98834029d..5b1fb06cc8 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..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; @@ -7308,10 +7309,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 @@ -11303,10 +11304,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; } @@ -11846,9 +11847,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 } @@ -12733,7 +12734,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; @@ -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) @@ -16609,7 +16611,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; @@ -18012,3 +18034,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/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; 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/data/moves_info.h b/src/data/moves_info.h index 8421147287..f8a980e467 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -12393,7 +12393,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/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index 106804353e..e9fa3b946c 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -4988,42 +4988,22 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = "利用月光的力量,\n" "自如地控制周围20米\n" "的重力来四处飞行。"), - .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, @@ -9136,42 +9116,22 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = "口中充满因超级进化\n" "而增加的溶解液。一不留神\n" "就会从嘴里溢出。"), - .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, @@ -15465,42 +15425,22 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = "动作变得越来越像人。\n" "它是试图沟通,还是打算代替\n" "人类,仍是未解之谜。"), - .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, @@ -19937,42 +19877,22 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = "超级进化的能量让它的\n" "情感变得过于温柔。\n" "会以慈悲之心终结敌人。"), - .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 23982050f0..8ee14a78ab 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -261,42 +261,22 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .description = COMPOUND_STRING( "从4朵花中放出的日光束\n" "威力巨大。别名超级日光炮。"), - .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, @@ -837,42 +817,22 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = "用兜帽般的鳍和双臂\n" "构成一个巨大的颚,\n" "咬合的威力提升为10倍。"), - .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, @@ -7193,42 +7153,22 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = "飞行速度超过音速。\n" "会掀起冲击波吹飞敌人,\n" "并用爪子给予致命一击。"), - .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 d8ba18b1bd..60a097d1e8 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -10570,42 +10570,22 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = "散发出带有幽灵能量的\n" "诡异冷气,连火和风等没有\n" "形状的东西也能冻住。"), - .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 066d4adfd9..16c4a58082 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -538,42 +538,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = "会高举熊熊燃烧的蛇矛状\n" "火焰,火速赶去援救陷入\n" "困境的伙伴。"), - .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, @@ -2836,42 +2816,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = "只要把头和双手合在一起\n" "形成流线型,再高速旋转\n" "就能破坏一切。"), - .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, @@ -4065,42 +4025,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = "闪烁暗淡光芒的剧毒会\n" "作用于蜈蚣王的精神,\n" "让它变得更加凶暴。"), - .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, @@ -5794,42 +5734,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = "在超级进化的影响下,\n" "皮肤变得又白又硬且有弹性。\n" "气势当然是十足的。"), - .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, @@ -9732,42 +9652,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = "发电量是超级进化前的10倍。\n" "会从由粘液构成的假麻麻鳗\n" "那里放电。"), - .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, @@ -10165,42 +10065,22 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = "两只眼睛中的一只是连接这个世界\n" "和另一个世界的窗口。\n" "会吸取怨念并将其化为力量。"), - .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 9f7cf449a8..caac36edd2 100644 --- a/src/data/pokemon/species_info/gen_6_families.h +++ b/src/data/pokemon/species_info/gen_6_families.h @@ -240,42 +240,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "拥有防守至上的意志以及\n" "经过强化的装甲。\n" "两者都坚不可摧。"), - .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, @@ -527,42 +507,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "会操控燃起火焰的枝条让\n" "对手变得神魂颠倒,\n" "再用大火球将其燃烧殆尽。"), - .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, @@ -936,42 +896,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "会高速旋转巨大的手里剑\n" "使其浮空,倒贴在上面\n" "打对手一个出其不意。"), - .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, @@ -1898,42 +1838,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "能吐出超过1万度的火焰。\n" "会一边乱摆熊熊燃烧的鬃毛,\n" "一边保护伙伴。"), - .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, @@ -2299,42 +2219,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .description = COMPOUND_STRING( "永恒之花会将超级进化的能量吸尽。\n" "花可以独自袭击敌人。"), - .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, @@ -3633,42 +3533,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "会用颜色鲜艳的光覆盖\n" "对手的人格和记忆,\n" "将其按自己的意愿操纵。"), - .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, @@ -3849,42 +3729,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "虽然能用很多胳膊将对手\n" "耍得团团转,但头部的\n" "龟足巨铠会相当忙。"), - .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, @@ -4067,42 +3927,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "会吐出能让细胞的再生力\n" "失控的液体。除了自己,\n" "对谁都是剧毒。"), - .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, @@ -4773,42 +4613,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "会利用因超级进化而\n" "激增的浑身肌肉\n" "炫耀自己强而有力。"), - .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, @@ -6968,42 +6788,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "当空前的危机来临时,\n" "感受人类的思绪而超级进化。\n" "能用无双之力将事态平息。"), - .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 3f86282967..5edc7c722c 100644 --- a/src/data/pokemon/species_info/gen_7_families.h +++ b/src/data/pokemon/species_info/gen_7_families.h @@ -5176,42 +5176,22 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = "激活全身细胞,\n" "恢复青春后的模样。\n" "能操控大气,呼风唤雨。"), - .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 67dac28fea..362af2077c 100644 --- a/src/data/pokemon/species_info/gen_8_families.h +++ b/src/data/pokemon/species_info/gen_8_families.h @@ -5214,42 +5214,22 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .description = COMPOUND_STRING( "仅限拥有牢固牵绊的头头和\n" "跟班才能组成的究极阵形。"), - .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, diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index bbc53654ce..183e20fbdd 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -2091,7 +2091,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, @@ -2154,7 +2154,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, 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] 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); } } } diff --git a/src/pokemon_sprite_visualizer.c b/src/pokemon_sprite_visualizer.c index 3e2cfc51b5..16c270e121 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); 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); + } + } +} 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/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); + } + } +} 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); } + } +} 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); + } +} 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); } 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); 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") 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); + } +} diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 59e0126419..daa95ebc69 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); + } +}