diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index 32a1ce2626..f8f9b8f0af 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.8.4 (Latest release) + - 1.8.5 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.8.4 - 1.8.3 - 1.8.2 - 1.8.1 diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index 3e21436c1a..c29ace1224 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -23,10 +23,12 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.8.4 (Latest release) + - 1.8.5 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.8.4 - 1.8.3 + - 1.8.2 - 1.8.1 - 1.8.0 - 1.7.4 diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index fcbf4b8884..c3320e67de 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -23,10 +23,12 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.8.4 (Latest release) + - 1.8.5 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.8.4 - 1.8.3 + - 1.8.2 - 1.8.1 - 1.8.0 - 1.7.4 diff --git a/CHANGELOG.md b/CHANGELOG.md index f513818cbb..84331cb4e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,48 +1,49 @@ # Pokeemerald-Expansion Changelogs ## 1.8.x -- ### [Version 1.8.4](docs/changelogs/1.8.x/1.8.4.md) - Bugfix Release 🧹 -- ### [Version 1.8.3](docs/changelogs/1.8.x/1.8.3.md) - Bugfix Release 🧹 -- ### [Version 1.8.2](docs/changelogs/1.8.x/1.8.2.md) - Bugfix Release 🧹 -- ### [Version 1.8.1](docs/changelogs/1.8.x/1.8.1.md) - HOTFIX Release 🔥 -- ### [Version 1.8.0](docs/changelogs/1.8.x/1.8.0.md) - Feature Release ✨ +- **[Version 1.8.5](docs/changelogs/1.8.x/1.8.5.md) - 🧹 Bugfix Release** +- **[Version 1.8.4](docs/changelogs/1.8.x/1.8.4.md) - 🧹 Bugfix Release** +- **[Version 1.8.3](docs/changelogs/1.8.x/1.8.3.md) - 🧹 Bugfix Release** +- **[Version 1.8.2](docs/changelogs/1.8.x/1.8.2.md) - 🧹 Bugfix Release** +- **[Version 1.8.1](docs/changelogs/1.8.x/1.8.1.md) - 🔥 HOTFIX Release** +- **[Version 1.8.0](docs/changelogs/1.8.x/1.8.0.md) - ✨ Feature Release** ## 1.7.x -- ### [Version 1.7.4](docs/changelogs/1.7.x/1.7.4.md) - Bugfix Release 🧹 -- ### [Version 1.7.3](docs/changelogs/1.7.x/1.7.3.md) - Bugfix Release 🧹 -- ### [Version 1.7.2](docs/changelogs/1.7.x/1.7.2.md) - Bugfix Release 🧹 -- ### [Version 1.7.1](docs/changelogs/1.7.x/1.7.1.md) - Bugfix Release 🧹 -- ### [Version 1.7.0](docs/changelogs/1.7.x/1.7.0.md) - Feature Release ✨ +- **[Version 1.7.4](docs/changelogs/1.7.x/1.7.4.md) - 🧹 Bugfix Release** +- **[Version 1.7.3](docs/changelogs/1.7.x/1.7.3.md) - 🧹 Bugfix Release** +- **[Version 1.7.2](docs/changelogs/1.7.x/1.7.2.md) - 🧹 Bugfix Release** +- **[Version 1.7.1](docs/changelogs/1.7.x/1.7.1.md) - 🧹 Bugfix Release** +- **[Version 1.7.0](docs/changelogs/1.7.x/1.7.0.md) - ✨ Feature Release** ## 1.6.x -- ### [Version 1.6.2](docs/changelogs/1.6.x/1.6.2.md) - Bugfix Release 🧹 -- ### [Version 1.6.1](docs/changelogs/1.6.x/1.6.1.md) - HOTFIX Release 🔥 -- ### [Version 1.6.0](docs/changelogs/1.6.x/1.6.0.md) - Feature Release ✨ +- **[Version 1.6.2](docs/changelogs/1.6.x/1.6.2.md) - 🧹 Bugfix Release** +- **[Version 1.6.1](docs/changelogs/1.6.x/1.6.1.md) - 🔥 HOTFIX Release** +- **[Version 1.6.0](docs/changelogs/1.6.x/1.6.0.md) - ✨ Feature Release** ## 1.5.x -- ### [Version 1.5.3](docs/changelogs/1.5.x/1.5.3.md) - HOTFIX Release 🔥 -- ### [Version 1.5.2](docs/changelogs/1.5.x/1.5.2.md) - Bugfix Release 🧹 -- ### [Version 1.5.1](docs/changelogs/1.5.x/1.5.1.md) - Bugfix Release 🧹 -- ### [Version 1.5.0](docs/changelogs/1.5.x/1.5.0.md) - Feature Release ✨ +- **[Version 1.5.3](docs/changelogs/1.5.x/1.5.3.md) - 🔥 HOTFIX Release** +- **[Version 1.5.2](docs/changelogs/1.5.x/1.5.2.md) - 🧹 Bugfix Release** +- **[Version 1.5.1](docs/changelogs/1.5.x/1.5.1.md) - 🧹 Bugfix Release** +- **[Version 1.5.0](docs/changelogs/1.5.x/1.5.0.md) - ✨ Feature Release** ## 1.4.x -- ### [Version 1.4.3](docs/changelogs/1.4.x/1.4.3.md) - Bugfix Release 🧹 -- ### [Version 1.4.2](docs/changelogs/1.4.x/1.4.2.md) - Bugfix Release 🧹 -- ### [Version 1.4.1](docs/changelogs/1.4.x/1.4.1.md) - HOTFIX Release 🔥 -- ### [Version 1.4.0](docs/changelogs/1.4.x/1.4.0.md) - Feature Release ✨ +- **[Version 1.4.3](docs/changelogs/1.4.x/1.4.3.md) - 🧹 Bugfix Release** +- **[Version 1.4.2](docs/changelogs/1.4.x/1.4.2.md) - 🧹 Bugfix Release** +- **[Version 1.4.1](docs/changelogs/1.4.x/1.4.1.md) - 🔥 HOTFIX Release** +- **[Version 1.4.0](docs/changelogs/1.4.x/1.4.0.md) - ✨ Feature Release** ## 1.3.x -- ### [Version 1.3.0](docs/changelogs/1.3.x/1.3.0.md) - Feature Release ✨ +- **[Version 1.3.0](docs/changelogs/1.3.x/1.3.0.md) - ✨ Feature Release** ## 1.2.x -- ### [Version 1.2.0](docs/changelogs/1.2.x/1.2.0.md) - Feature Release ✨ +- **[Version 1.2.0](docs/changelogs/1.2.x/1.2.0.md) - ✨ Feature Release** ## 1.1.x -- ### [Version 1.1.1](docs/changelogs/1.1.x/1.1.1.md) - Bugfix Release 🧹 -- ### [Version 1.1.0](docs/changelogs/1.1.x/1.1.0.md) - Feature Release ✨ +- **[Version 1.1.1](docs/changelogs/1.1.x/1.1.1.md) - 🧹 Bugfix Release** +- **[Version 1.1.0](docs/changelogs/1.1.x/1.1.0.md) - ✨ Feature Release** ## 1.0.x -- ### [Version 1.0.0](docs/changelogs/1.0.x/1.0.0.md) - Feature Release ✨ +- **[Version 1.0.0](docs/changelogs/1.0.x/1.0.0.md) - ✨ Feature Release** ## Pre-1.0.x: -- ### [Version 0.9.0](docs/changelogs/0.9.x/0.9.0.md) - Retroactive Version 🦕 +- **[Version 0.9.0](docs/changelogs/0.9.x/0.9.0.md) - 🦕 Retroactive Version** diff --git a/INSTALL.md b/INSTALL.md index ed7d5bad08..cc6eba97ef 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -482,6 +482,13 @@ nix-shell -p pkgsCross.arm-embedded.stdenv.cc git pkg-config libpng ``` Then proceed to [Choosing where to store pokeemerald Expansion (Linux)](#choosing-where-to-store-pokeemerald-expansion-linux). +### NixOS +Run the following command to start an interactive shell with the necessary packages: +```bash +nix-shell -p pkgsCross.arm-embedded.stdenv.cc git pkg-config libpng +``` +Then proceed to [Choosing where to store pokeemerald Expansion (Linux)](#choosing-where-to-store-pokeemerald-expansion-linux). + ### Other distributions _(Specific instructions for other distributions would be greatly appreciated!)_ diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 19bb0b5a0f..24a5467ef5 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1520,18 +1520,10 @@ .4byte \jumpInstr .endm - .macro jumpifrodaffected battler:req, jumpInstr:req - callnative BS_JumpIfRod - .4byte \jumpInstr - .endm - - .macro jumpifabsorbaffected battler:req, jumpInstr:req - callnative BS_JumpIfAbsorb - .4byte \jumpInstr - .endm - - .macro jumpifmotoraffected battler:req, jumpInstr:req - callnative BS_JumpIfMotor + .macro jumpifelectricabilityaffected battler:req, ability:req, jumpInstr:req + callnative BS_JumpIfElectricAbilityAffected + .byte \battler + .2byte \ability .4byte \jumpInstr .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 21536f3de4..3c67f15c7c 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -527,9 +527,9 @@ BattleScript_EffectTeatime:: waitanimation setbyte gBattlerTarget, 0 BattleScript_TeatimeLoop: - jumpifrodaffected BS_TARGET, BattleScript_Teatimerod - jumpifabsorbaffected BS_TARGET, BattleScript_Teatimesorb - jumpifmotoraffected BS_TARGET, BattleScript_Teatimemotor + jumpifelectricabilityaffected BS_TARGET, ABILITY_LIGHTNING_ROD, BattleScript_Teatimerod + jumpifelectricabilityaffected BS_TARGET, ABILITY_VOLT_ABSORB, BattleScript_Teatimesorb + jumpifelectricabilityaffected BS_TARGET, ABILITY_MOTOR_DRIVE, BattleScript_Teatimemotor jumpifteainvulnerable BS_TARGET, BattleScript_Teatimevul @ in semi-invulnerable state OR held item is not a Berry orword gHitMarker, HITMARKER_DISABLE_ANIMATION | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE setbyte sBERRY_OVERRIDE, TRUE @ override the requirements for eating berries @@ -1614,6 +1614,7 @@ BattleScript_MoveEffectFlameBurst:: waitmessage B_WAIT_TIME_LONG savetarget copybyte gBattlerTarget, sSAVED_BATTLER + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_TARGET datahpupdate BS_TARGET tryfaintmon BS_TARGET @@ -3707,7 +3708,7 @@ BattleScript_EffectParalyze:: BattleScript_BattleScript_EffectParalyzeNoTypeCalc: jumpifmovehadnoeffect BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_AlreadyParalyzed - jumpifabsorbaffected BS_TARGET, BattleScript_VoltAbsorbHeal + jumpifelectricabilityaffected BS_TARGET, ABILITY_VOLT_ABSORB, BattleScript_VoltAbsorbHeal tryparalyzetype BS_ATTACKER, BS_TARGET, BattleScript_NotAffected jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 8e19e46c60..d1a93ce0be 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -5,6 +5,7 @@ - [Setting up WSL1 (Legacy Portion)](./legacy_WSL1_INSTALL.md) - [Changelog](./CHANGELOG.md) - [1.8.x]() + - [Version 1.8.5](changelogs/1.8.x/1.8.5.md) - [Version 1.8.4](changelogs/1.8.x/1.8.4.md) - [Version 1.8.3](changelogs/1.8.x/1.8.3.md) - [Version 1.8.2](changelogs/1.8.x/1.8.2.md) diff --git a/docs/changelogs/1.8.x/1.8.5.md b/docs/changelogs/1.8.x/1.8.5.md new file mode 100644 index 0000000000..ded502ccfe --- /dev/null +++ b/docs/changelogs/1.8.x/1.8.5.md @@ -0,0 +1,219 @@ +# Version 1.8.5 + +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.8.5`. +``` + +## 🌋 *IMPORTANT CHANGES AND REFACTORS* 🌋 +* Small `ABILITYEFFECT_MOVES_BLOCK` refactor for readability by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4635 +* Removed redundant `partnerPicId` arguments in macros by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4736 +* Renamed some labels from "critical hit chance" to "critical hit odds" by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4751 + * `sCriticalHitChance` => `sCriticalHitOdds`. + * `GetCritHitChance` => `GetCritHitOdds`. +* Renamed `BS_FAINTED_LINK_MULTIPLE_1/2` to `BS_FAINTED_MULTIPLE_1/2` by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4851 +* Remove Duplicate ai code from battle_ai_util.c by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4883 + * `AI_CanBeBurned` is now handled by `CanBeBurned`. + * `CanSleep` renamed to `CanBeSlept`. + * `AI_CanSleep` is now handled by `CanBeSlept` and added `defAbility` argument. + * Added `defAbility` argument for `CanBePoisoned`. + * Added `defAbility` argument for `CanBeBurned`. + * Added `defAbility` argument for `CanBeParalyzed`. +* Got rid of hardcoded stat raise anim values by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4825 +* Added parentheses to `SPECIES_EGG` macro to avoid issues by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4899 +* `IsFinalStrikeEffect` uses effect instead of move by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4917 + +## 💥 *Softlock/Crash fixes* 💥 +* Fixed Baton Pass hardlocking on Memento by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4773 +* Fixed Revive in Double Battles causing a softlock by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4784 +* Fixed Tectonic Rage causing a freeze after leveling up by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4787 +* Fixed Smack Down's animation softlocking the game after around 13 uses by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4774 +* Fixed softlock caused by using Covet/Thief on a Pokémon with Sticky Hold by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4885 + +## 🧬 General 🧬 +### Added +* Added regional form breeding mechanics by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4695 +* Convert docs/ folder to mdBook by @leo60228 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4684 + * Go [here to see the new documentation page](https://rh-hideout.github.io/pokeemerald-expansion/). Feel free to contribute via PRs! + * Cleanup by @leo60228 in: + * https://github.com/rh-hideout/pokeemerald-expansion/pull/4711 + * https://github.com/rh-hideout/pokeemerald-expansion/pull/4715 + * https://github.com/rh-hideout/pokeemerald-expansion/pull/4716 + * https://github.com/rh-hideout/pokeemerald-expansion/pull/4809 +* Added forbidden status parameter to `FORM_CHANGE_ITEM_USE` by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4738 + * Used for Shaymin's form change via Gracidea being prevented if it's frozen or frostbitten. +### Fixed +* Fixed Poké Ball inheritance into actually working by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4695 +* Daycare fixes by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4479 + * Fixed Evolved mons not copying moves as they do not have their own egg move table. + * Fixed forms of the same species not copying egg moves from each other. +* Fixed Roamer Frostbite status not carrying over between battles by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4822 +* Fixed Partners getting the wrong nature defined by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4926 +* Fixed Shop menu lists not properly displaying 6-digit item prices by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4929 + +## 🐉 Pokémon 🐉 +### Changed +* PokeCommunity sprites batch (May) by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4714 + * Pawmi (Front by KingOfThe-X-Roads, back by Vent, QC by leParagon) + * Pawmo (By vent, qc by leParagon) + * Okidogi (Front by KingOfThe-X-Roads + by leParagon, back by Lykeron + QC by Alexandrev2. 0) + * Backported Hedara's Terapagos from `upcoming`. +* Updated wild held items to Gen 9 by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4769 + * Teddiursa (Common: None_> Honey) + * Bisharp (Rare: None -> Leader's Crest) + * All Oricorio: (Rare: Honey -> Corresponding Nectar) + * Toedscool, Toedscruel: (Common: Tiny Mushroom, Rare: Big Mushroom) + * All Paradox Mon: (Rare: Booster Energy) +### Fixed +* Fixed Tandemaus being able to evolve via Rare and Exp. Candies by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4759 +* Fixed Poltchageist not always producing Counterfeit form offspring by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4812 +* Fixed missing Minior Pokédex Entry by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4858 +* Multiple Pokemon sprite fixes by @cafei-uh in https://github.com/rh-hideout/pokeemerald-expansion/pull/4887 + - Fixed Charjabug shiny + cleaned up its front sprite + - Changed Lurantis back sprite to better match its ingame model + - Fixed Bounsweet shiny not changing the color of its lower body + - Brightened the white color of Bruxish shiny + tweaked its sprites to accommodate the change +* Fixed `P_UPDATED_ABILITIES` not reverting newly gained abilities in Gens 4/6/7 by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4922 + +## ⚔️ Battle General ⚔️ ## +### Fixed +* Fixed Dynamax HP not reverting upon fainting by @WillKolada in https://github.com/rh-hideout/pokeemerald-expansion/pull/4681 +* Fixed the partner's palette from shifting when throwing a Poké Ball by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4736 +* Fixed shiny value not being updated in battle, causing the palette to reset when reloading the sprites by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4788 +* Fixed `B_VAR_STARTING_STATUS` every following terrains infinite by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4795 +* Fixed Gen 7+ confusion self hurt chance from `1 in 3` to `33%` by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4831 +* Fixed caught wild pokemon not restoring their used held item by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4803 +* Fixed AI's right slot switching-in too early by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4851 +* Ported post-KO test improvements from closed PR by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4859 +* Fixed how switch-in effects are played out after multiple faints in the same turn by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4864 +* Fixed Megas gaining abilities after fainting by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4873 + +## 🤹 Moves 🤹 +### Fixed +* Added missing `ignoreSubstitute` flags for Defog (only in Gen 4), Torment and Powder by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4623 +* Fixed Grassy Glide granting priority if it's converted to Max Move by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/4659 +* Fixed Rampage moves not confusing the user if it's canceled by Protect and Type immunity by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4722 +* Fixed Tar shot the target always be to Fire regardless of existing types by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4756 +* Fixed Shell Side Arm by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4753 + * Cleanup by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4806 +* Fixed Body press using physical Defense stat changes instead of Sp. Defense stat stages in Wonder Room (still uses physical defense stat) by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4792 +* Fixed Relic Song playing the transforming animation for species other than Meloetta by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4799 +* Fixed Pursuit not being locked by Choice Items when used on an opponent switching out by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4801 +* Fixed Encore's effect lasting only 2 turns if it was used after the opponent uses the move in the same turn by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4802 +* Fixed Spectral Thief playing stat raise animation when the user has Contrary by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4824 +* Fixed Fury Cutter scaling up to 640 power by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4846 +* Fixed moves with the `ignoresTargetAbility` flag ignoring the attacker's own ability by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4855 +* Fixed incorrect move names by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4854 + * Floral Healing + * Jungle Healing + * Oceanic Operetta +* Fixed Grassy Terrain not healing on the final turn of its duration by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4903 +* Fixed Shed Tail's HP reduction rounding down instead of up by @kleeenexfeu in https://github.com/rh-hideout/pokeemerald-expansion/pull/4913 +* Fixed Bitter Malice's description, which used to imply that it didn't always lower the opponent's Attack by @kleeenexfeu in https://github.com/rh-hideout/pokeemerald-expansion/pull/4933 +* Fixed Flame Burst's adjacent damage not bypassing Substitute by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4939 + +## 🎭 Abilities 🎭 +### Added +* Added missing Gen 3-4 config for Lightning Rod/Storm Drain (`B_REDIRECT_ABILITY_IMMUNITY`) by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4920 +### Fixed +* Fixed Dancer issues @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/4638 + * Fixed Dancer triggering if the move user flinches when it was going to use a dance move + * Fixed Dancer not triggering if a previous Dancer flinches. +* Fixed Dazzling, Queenly Majesty and Armor Tail not protecting partners from priority moves by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4635 + * Cleanup by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4647 +* Fixed Burning Bulwark's incorrect message by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/4659 +* Fixed Disguise's `breakable` flag (ignorable by Mold Breaker) by @AgustinGDLV in https://github.com/rh-hideout/pokeemerald-expansion/pull/4666 +* Fixed redundant call to `IsBattlerWeatherAffected` Dry Skin's checks by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4675 +* Fixed Guard Dog blocking U-Turn/Volt Switch/Flip Turn instead of Roar/Circle Throw/Dragon Tail by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/4690 +* Fixed some abilities preventing stat dropping move effects when used on self by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4696 + * Hyper Cutter (Attack) + * Big Pecks (Defense) + * Keen Eye/Illuminate (Accuracy) +* Fixed Mummy and Lingering Aroma not working at all by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4731 +* Fixed Berserk, Anger Shell, Wimp Out, Emergency Exit HP threshold (more than half HP instead of half HP and more) by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4724 +* Fixed Mycelium Might affecting every battler on the field instead of just the ability holder by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4740 +* Fixed Skill Link ignoring Gastro Acid/Neutralizing Gas by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4746 +* Fixed Own Tempo ignoring Gastro Acid/Neutralizing Gas when checking for Berserk Gene by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4746 +* Fixed Soul-Heart changing stats of wrong battler, which caused Mirror Herb to behave incorrectly by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4785 +* Fixed Poison Touch trigger chance from `1 in 3` to `30%` by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4831 +* Fixed Cursed Body trigger chance from `1 in 3` to `30%` by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4831 +* Fixed Comatose not being supressed if it's obtained by a Pokémon Transforming by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4852 +* Fixed Supersweet Syrup0s description by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4902 + +## 🧶 Items 🧶 +### Changed +* Allowed rematches to occur if I_VS_SEEKER_CHARGING isn't enabled by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/4866 +### Fixed +* Fixed Honey altering tiles when used by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4703 +* Fixed potential undefined behaviour when using escape rope by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4705 +* Fixed Hyper Potion's price not respecting `I_PRICE` by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4737 +* Fixed Ability Shield not protecting against multiple effects by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4740 + * Mold Breaker-type abilities. + * Mycelium Might. + * Moves that bypass abilities (eg. Sunsteel Stike). + +## 🤖 Battle AI 🤖 +### Changed +* Add checks for `EFFECT_POLTERGEIST` and `EFFECT_FIRST_TURN_ONLY` to `IsDamageMoveUnusable` by @iriv24 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4693 +### Fixed +* Fixed AI going for speed control even when it's faster than the opponet by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4630 +* Fixed AI not considering `EFFECT_RAGING_BULL` similarly to `EFFECT_BRICK_BREAK` by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4682 +* Fixed AI getting incorrect calculations due to using `gCurrentMove` in `CalcCritChanceStageArgs` by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4687 +* Fixed AI not recording Battle Armor or Shell Armor by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4751 +* Fixed AI not considering guaranteed crits by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4751 +* Fixed AI not properly avoiding contact against Rocky Helmet/Rough Skin by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4779 +* Fixed AI not recognising Volt Absorb/Flash Fire by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4781 +* Fixed AI thinking that Defiant/Competitive triggers off partner's moves in doubles by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4786 +* Fixed AI using `TRUE` (Stench) when calculating if it's worth using Swagger or Flatter on its partner by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4786 +* Fixed passing hold effect instead of ability in one call of ShouldSetSandstorm by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4789 + +## 🧪 Test Runner 🧪 +### Added +* Added `FORCE_MOVE_ANIM` macro to force an animation to run in headless mode by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4774 + * Usage: `FORCE_MOVE_ANIM(TRUE)` at the beginning of the test and `FORCE_MOVE_ANIM(FALSE)` at the end. +* Added test to prevent species from having different evolution tracker methods by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4771 +* Added test for missing Pokédex Entries by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4858 +* Added missing Move Effect TODO tests - Volume B by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4682 +* Added missing tests + * Berserk by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4724 + * Clear Body by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4685 + * Cleanup by @Pawkkie in: + * https://github.com/rh-hideout/pokeemerald-expansion/pull/4797 + * https://github.com/rh-hideout/pokeemerald-expansion/pull/4837 + * Anger Point and Moxie by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4811 + * Cursed Body, Poison Touch and Confusion status by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4831 + * Corrosion, Acrobatics, Hone Claws and Hurricane by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4708 +* Added AI tests for avoiding using status moves on Pokémon with abilities that prevent them by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4883 +* Added Own Tempo/Mold Breaker test by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4883 +### Changed +* Multiple changes by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4682 + * Renamed some Baton Pass-related tests so that their prefix becomes Baton Pass. + * Eg. `Aqua Ring can be Baton Passed` becomes `Baton Pass passes Aqua Ring's effect`. + * Expanded Belch's test to show that it doesn't need to eat a berry before each use of the move. + * Unconfirmed interactions added to the specific files. + * Split `EFFECT_RAGING_BULL` from `EFFECT_BRICK_BREAK`'s file. + * Moved Grassy Terrain/Earthquake test to Earthquake file. +* Write new/Fix old tests for post-ko switch scenarios by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4856 +### Fixed +* Fixed issues when building tests with agbcc by @u8-Salem in https://github.com/rh-hideout/pokeemerald-expansion/pull/4689 +* Fixed incorrect `ASSUME`s in 2 test rampage tests by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4722 +* Fixed AI ability guessing in tests by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4764 +* Fixed Pokemon in tests not being male by default by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4766 +* Fixed Plasma Fists/Pixilate interaction test by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4865 +* Fixed wrong palette in player backsprite in recorded battle by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4875 + +## 📦 Pret merges 📦 +* Merge in pret 189d542 by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4832 + * Fix Steven partner battle post-battle script by @Jaizu in https://github.com/pret/pokeemerald/pull/2001 +* Pret merge (20th of June) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4845 + - [366f8b3](https://github.com/pret/pokeemerald/commit/366f8b33a38010f47886f70e52a4fa6dd306a4c4) NixOS install instructions by @leo60228 + - [c0d630e](https://github.com/pret/pokeemerald/commit/c0d630ee6304df61a5304942386308a872aeb504) Add support for LF line endings to gbagfx by @nashalexander +* Pret Merge (5th of July) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4915 + - [pret#2006](https://github.com/pret/pokeemerald/pull/2006/) (manually reverted) + - [pret#2009](https://github.com/pret/pokeemerald/pull/2009/) Decode unused JP text in `berry_blender.c` + - [pret#2012](https://github.com/pret/pokeemerald/pull/2012/) Berry blender's `Task_HandleOpponent` small fixes + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.8.4...expansion/1.8.5 + + diff --git a/docs/changelogs/template.md b/docs/changelogs/template.md index b70a44ce54..63e9e352aa 100644 --- a/docs/changelogs/template.md +++ b/docs/changelogs/template.md @@ -6,7 +6,7 @@ - Once you have your remote set up, run the command `git pull RHH expansion/1.Y.Z`. ``` -## 🌋 *IMPORTANT CHANGES* 🌋 +## 🌋 *IMPORTANT CHANGES AND REFACTORS* 🌋 * N/A ## 💥 *Softlock/Crash fixes* 💥 diff --git a/include/config/battle.h b/include/config/battle.h index f2ff9e6ffe..e8981831c4 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -138,6 +138,7 @@ #define B_WEATHER_FORMS GEN_LATEST // In Gen5+, Castform and Cherrim revert to their base form upon losing their respective ability. Cherrim needs Flower Gift to swap forms. #define B_SYMBIOSIS_GEMS GEN_LATEST // In Gen7+, Symbiosis passes an item after a gem-boosted attack. Previously, items are passed before the gem-boosted attack hits, making the item effect apply. #define B_ABSORBING_ABILITY_STRING GEN_LATEST // In Gen5+, the abilities that absorb moves of a certain type use a generic string for stat increases and decreases. +#define B_REDIRECT_ABILITY_IMMUNITY GEN_LATEST // In Gen5+, Pokémon with Lightning Rod/Storm Drain become immune to Electric/Water-type moves and increase their Sp. Attack by 1 stage on top of the redirecting effect. #define B_LEAF_GUARD_PREVENTS_REST GEN_LATEST // In Gen5+, Leaf Guard prevents the use of Rest in harsh sunlight. #define B_SNOW_WARNING GEN_LATEST // In Gen9+, Snow Warning will summon snow instead of hail. #define B_TRANSISTOR_BOOST GEN_LATEST // In Gen9+, Transistor will only boost Electric-type moves by 1.3x as opposed to 1.5x. diff --git a/include/constants/expansion.h b/include/constants/expansion.h index 43afdbe212..bf54ade9fc 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -1,10 +1,10 @@ #ifndef GUARD_CONSTANTS_EXPANSION_H #define GUARD_CONSTANTS_EXPANSION_H -// 1.8.4 +// 1.8.5 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 8 -#define EXPANSION_VERSION_PATCH 4 +#define EXPANSION_VERSION_PATCH 5 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 3d03ba6f93..0614e8b8bd 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -961,12 +961,21 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && IsNonVolatileStatusMoveEffect(moveEffect)) RETURN_SCORE_MINUS(10); break; - case ABILITY_VOLT_ABSORB: case ABILITY_LIGHTNING_ROD: + if (B_REDIRECT_ABILITY_IMMUNITY < GEN_5) + break; + // Fallthrough + case ABILITY_MOTOR_DRIVE: + case ABILITY_VOLT_ABSORB: if (moveType == TYPE_ELECTRIC) RETURN_SCORE_MINUS(20); break; case ABILITY_STORM_DRAIN: + if (B_REDIRECT_ABILITY_IMMUNITY < GEN_5) + break; + // Fallthrough + case ABILITY_WATER_ABSORB: + case ABILITY_DRY_SKIN: if (moveType == TYPE_WATER) RETURN_SCORE_MINUS(20); break; @@ -974,6 +983,10 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (moveType == TYPE_FIRE) RETURN_SCORE_MINUS(20); break; + case ABILITY_EARTH_EATER: + if (moveType == TYPE_GROUND) + RETURN_SCORE_MINUS(20); + break; } // def ability checks // target partner ability checks & not attacking partner @@ -2860,7 +2873,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case ABILITY_LIGHTNING_ROD: - if (moveType == TYPE_ELECTRIC + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 + && moveType == TYPE_ELECTRIC && HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_SPECIAL) && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK)) { @@ -2876,7 +2890,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; // handled in AI_HPAware case ABILITY_STORM_DRAIN: - if (moveType == TYPE_WATER + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 + && moveType == TYPE_WATER && HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_SPECIAL) && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK)) { @@ -4318,7 +4333,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_ION_DELUGE: if ((aiData->abilities[battlerAtk] == ABILITY_VOLT_ABSORB || aiData->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE - || aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD) + || (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD)) && gMovesInfo[predictedMove].type == TYPE_NORMAL) ADJUST_SCORE(DECENT_EFFECT); break; @@ -4377,7 +4392,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (predictedMove != MOVE_NONE && (aiData->abilities[battlerAtk] == ABILITY_VOLT_ABSORB || aiData->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE - || aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD)) + || (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD))) { ADJUST_SCORE(DECENT_EFFECT); } diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 1d4ce806a7..be5e93feed 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -335,32 +335,29 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler, bool32 emitResult) // Create an array of possible absorb abilities so the AI considers all of them if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_FIRE) { - absorbingTypeAbilities[0] = ABILITY_FLASH_FIRE; - numAbsorbingAbilities = 1; + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_FLASH_FIRE; } else if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_WATER) { - absorbingTypeAbilities[0] = ABILITY_WATER_ABSORB; - absorbingTypeAbilities[1] = ABILITY_STORM_DRAIN; - absorbingTypeAbilities[2] = ABILITY_DRY_SKIN; - numAbsorbingAbilities = 3; + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_WATER_ABSORB; + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_DRY_SKIN; + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_STORM_DRAIN; } else if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_ELECTRIC) { - absorbingTypeAbilities[0] = ABILITY_VOLT_ABSORB; - absorbingTypeAbilities[1] = ABILITY_MOTOR_DRIVE; - absorbingTypeAbilities[2] = ABILITY_LIGHTNING_ROD; - numAbsorbingAbilities = 3; + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_VOLT_ABSORB; + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_MOTOR_DRIVE; + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_LIGHTNING_ROD; } else if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_GRASS) { - absorbingTypeAbilities[0] = ABILITY_SAP_SIPPER; - numAbsorbingAbilities = 1; + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_SAP_SIPPER; } else if (gMovesInfo[gLastLandedMoves[battler]].type == TYPE_GROUND) { - absorbingTypeAbilities[0] = ABILITY_EARTH_EATER; - numAbsorbingAbilities = 1; + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_EARTH_EATER; } else { diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 1d23d4c965..c2116a11dd 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -418,15 +418,21 @@ bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) switch (battlerDefAbility) { + case ABILITY_LIGHTNING_ROD: + if (B_REDIRECT_ABILITY_IMMUNITY < GEN_5) + break; + // Fallthrough case ABILITY_VOLT_ABSORB: case ABILITY_MOTOR_DRIVE: - case ABILITY_LIGHTNING_ROD: if (moveType == TYPE_ELECTRIC) return TRUE; break; + case ABILITY_STORM_DRAIN: + if (B_REDIRECT_ABILITY_IMMUNITY < GEN_5) + break; + // Fallthrough case ABILITY_WATER_ABSORB: case ABILITY_DRY_SKIN: - case ABILITY_STORM_DRAIN: if (moveType == TYPE_WATER) return TRUE; break; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 63c6fdcf5c..cb38834a20 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -326,7 +326,7 @@ static void DrawLevelUpBannerText(void); static void SpriteCB_MonIconOnLvlUpBanner(struct Sprite *sprite); static bool32 CriticalCapture(u32 odds); static void BestowItem(u32 battlerAtk, u32 battlerDef); -static bool8 IsFinalStrikeEffect(u16 move); +static bool8 IsFinalStrikeEffect(u32 moveEffect); static void TryUpdateRoundTurnOrder(void); static bool32 ChangeOrderTargetAfterAttacker(void); void ApplyExperienceMultipliers(s32 *expAmount, u8 expGetterMonId, u8 faintedBattler); @@ -8723,7 +8723,7 @@ static bool32 IsRototillerAffected(u32 battler) return TRUE; } -static bool32 IsElectricAbilityAffected(u32 ability) +static bool32 IsElectricAbilityAffected(u32 battler, u32 ability) { u32 moveType; @@ -8734,7 +8734,9 @@ static bool32 IsElectricAbilityAffected(u32 ability) else moveType = gMovesInfo[gCurrentMove].type; - if (moveType == TYPE_ELECTRIC && GetBattlerAbility(gBattlerTarget) == ability) + if (moveType == TYPE_ELECTRIC + && (ability != ABILITY_LIGHTNING_ROD || B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) + && GetBattlerAbility(battler) == ability) return TRUE; else return FALSE; @@ -12645,9 +12647,14 @@ static void Cmd_setsubstitute(void) CMD_ARGS(); u32 factor = gMovesInfo[gCurrentMove].effect == EFFECT_SHED_TAIL ? 2 : 4; - u32 hp = GetNonDynamaxMaxHP(gBattlerAttacker) / factor; + u32 hp; - if (GetNonDynamaxMaxHP(gBattlerAttacker) / factor == 0) + if (factor == 2) + hp = (GetNonDynamaxMaxHP(gBattlerAttacker)+1) / factor; // shed tail rounds up + else + hp = GetNonDynamaxMaxHP(gBattlerAttacker) / factor; // one bit value will only work for Pokémon which max hp can go to 1020(which is more than possible in games) + + if (hp == 0) hp = 1; if (gBattleMons[gBattlerAttacker].hp <= hp) @@ -12657,7 +12664,7 @@ static void Cmd_setsubstitute(void) } else { - gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / factor; // one bit value will only work for Pokémon which max hp can go to 1020(which is more than possible in games) + gBattleMoveDamage = hp; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -15978,10 +15985,9 @@ bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler) return FALSE; } -static bool8 IsFinalStrikeEffect(u16 move) +static bool8 IsFinalStrikeEffect(u32 moveEffect) { u32 i; - u16 moveEffect = gMovesInfo[move].effect; for (i = 0; i < ARRAY_COUNT(sFinalStrikeOnlyEffects); i++) { @@ -16432,28 +16438,12 @@ void BS_JumpIfEmergencyExited(void) gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_JumpIfRod(void) +void BS_JumpIfElectricAbilityAffected(void) { - NATIVE_ARGS(const u8 *jumpInstr); - if (IsElectricAbilityAffected(ABILITY_LIGHTNING_ROD)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; -} + NATIVE_ARGS(u8 battler, u16 ability, const u8 *jumpInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); -void BS_JumpIfAbsorb(void) -{ - NATIVE_ARGS(const u8 *jumpInstr); - if (IsElectricAbilityAffected(ABILITY_VOLT_ABSORB)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; -} - -void BS_JumpIfMotor(void) -{ - NATIVE_ARGS(const u8 *jumpInstr); - if (IsElectricAbilityAffected(ABILITY_MOTOR_DRIVE)) + if (IsElectricAbilityAffected(battler, cmd->ability)) gBattlescriptCurrInstr = cmd->jumpInstr; else gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/src/battle_tower.c b/src/battle_tower.c index 2fa78c7aa6..045f87ad65 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -3037,9 +3037,7 @@ static void FillPartnerParty(u16 trainerId) personality = (personality & 0xFFFFFF00) | GeneratePersonalityForGender(MON_MALE, partyData[i].species); else if (partyData[i].gender == TRAINER_MON_FEMALE) personality = (personality & 0xFFFFFF00) | GeneratePersonalityForGender(MON_FEMALE, partyData[i].species); - if (partyData[i].nature != 0) - ModifyPersonalityForNature(&personality, partyData[i].nature - 1); - + ModifyPersonalityForNature(&personality, partyData[i].nature); CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, 0, TRUE, personality, OT_ID_PRESET, otID); j = partyData[i].isShiny; SetMonData(&gPlayerParty[i + 3], MON_DATA_IS_SHINY, &j); diff --git a/src/battle_util.c b/src/battle_util.c index 99a609a513..aa83fba0ff 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5121,11 +5121,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 effect = 2, statId = STAT_SPEED; break; case ABILITY_LIGHTNING_ROD: - if (moveType == TYPE_ELECTRIC && gMovesInfo[move].target != MOVE_TARGET_ALL_BATTLERS) + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && moveType == TYPE_ELECTRIC && gMovesInfo[move].target != MOVE_TARGET_ALL_BATTLERS) effect = 2, statId = STAT_SPATK; break; case ABILITY_STORM_DRAIN: - if (moveType == TYPE_WATER) + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && moveType == TYPE_WATER) effect = 2, statId = STAT_SPATK; break; case ABILITY_SAP_SIPPER: diff --git a/src/berry_blender.c b/src/berry_blender.c index 3524ad50d2..0af3fd3ba6 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -916,14 +916,14 @@ static const u8 sBlackPokeblockFlavorFlags[] = { (1 << FLAVOR_SOUR) | (1 << FLAVOR_SWEET) | (1 << FLAVOR_SPICY), }; -static const u8 sUnused[] = -{ - 0xfe, 0x02, 0x02, 0xce, 0xd0, 0x37, 0x44, 0x07, 0x1f, 0x0c, 0x10, - 0x00, 0xff, 0xfe, 0x91, 0x72, 0xce, 0xd0, 0x37, 0x44, 0x07, 0x1f, - 0x0c, 0x10, 0x00, 0xff, 0x06, 0x27, 0x02, 0xff, 0x00, 0x0c, 0x48, - 0x02, 0xff, 0x00, 0x01, 0x1f, 0x02, 0xff, 0x00, 0x16, 0x37, 0x02, - 0xff, 0x00, 0x0d, 0x50, 0x4b, 0x02, 0xff, 0x06, 0x06, 0x06, 0x06, - 0x05, 0x03, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x02 +static const u8 sJPText_GoodTvReady[] = _("\nいいTVができました "); // Unused +static const u8 sJPText_BadTvReady[] = _("\nダメTVができました "); // Unused +static const u8 sJPText_Flavors[][5] = {_("からい"), _("しぶい"), _("あまい"), _("にがい"), _("すっぱい")}; // Unused + +static const u8 sUnused[] = { + 6, 6, 6, 6, 5, + 3, 3, 3, 2, 2, + 3, 3, 3, 3, 2 }; static const struct WindowTemplate sBlenderRecordWindowTemplate = @@ -1908,7 +1908,7 @@ static void Task_HandleOpponent1(u8 taskId) static void Task_HandleOpponent2(u8 taskId) { u32 var1 = (sBerryBlender->arrowPos + 0x1800) & 0xFFFF; - u32 arrowId = sBerryBlender->playerIdToArrowId[2] & 0xFF; + u8 arrowId = sBerryBlender->playerIdToArrowId[2]; if ((var1 >> 8) > sArrowHitRangeStart[arrowId] + 20 && (var1 >> 8) < sArrowHitRangeStart[arrowId] + 40) { if (!gTasks[taskId].tDidInput) @@ -1925,11 +1925,9 @@ static void Task_HandleOpponent2(u8 taskId) } else { - u8 value; if (rand > 65) gRecvCmds[2][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST; - value = rand - 41; - if (value < 25) + if (rand > 40 && rand <= 65) gRecvCmds[2][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD; if (rand < 10) CreateOpponentMissTask(2, 5); @@ -1953,7 +1951,7 @@ static void Task_HandleOpponent2(u8 taskId) static void Task_HandleOpponent3(u8 taskId) { u32 var1 = (sBerryBlender->arrowPos + 0x1800) & 0xFFFF; - u32 arrowId = sBerryBlender->playerIdToArrowId[3] & 0xFF; + u8 arrowId = sBerryBlender->playerIdToArrowId[3]; if ((var1 >> 8) > sArrowHitRangeStart[arrowId] + 20 && (var1 >> 8) < sArrowHitRangeStart[arrowId] + 40) { if (gTasks[taskId].data[0] == 0) @@ -1971,16 +1969,9 @@ static void Task_HandleOpponent3(u8 taskId) else { if (rand > 60) - { gRecvCmds[3][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST; - } - else - { - s8 value = rand - 56; // makes me wonder what the original code was - u8 value2 = value; - if (value2 < 5) - gRecvCmds[3][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD; - } + else if (rand > 55 && rand <= 60) + gRecvCmds[3][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD; if (rand < 5) CreateOpponentMissTask(3, 5); } diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 4e27d9b397..78dd0f118c 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -19002,7 +19002,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .name = HANDLE_EXPANDED_MOVE_NAME("BitterMalice", "Bitter Malice"), .description = COMPOUND_STRING( "A spine-chilling resentment.\n" - "May lower the foe's Attack."), + "Lowers the foe's Attack."), .effect = EFFECT_HIT, .power = B_UPDATED_MOVE_DATA >= GEN_9 ? 75 : 60, .type = TYPE_GHOST, diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index e3689d102d..e35bb848b7 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -1534,7 +1534,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_BIG_PECKS }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Pidgey"), .cryId = CRY_PIDGEY, @@ -1596,7 +1600,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_BIG_PECKS }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Pidgeotto"), .cryId = CRY_PIDGEOTTO, @@ -1668,7 +1676,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_KEEN_EYE, ABILITY_TANGLED_FEET, ABILITY_BIG_PECKS }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_BIG_PECKS }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Pidgeot"), .cryId = CRY_PIDGEOT, @@ -3822,7 +3834,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE }, + #else + .abilities = { ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_HUSTLE }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Nidoran♀"), .cryId = CRY_NIDORAN_F, @@ -3885,7 +3901,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE }, + #else + .abilities = { ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_HUSTLE }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Nidorina"), .cryId = CRY_NIDORINA, @@ -3954,7 +3974,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_SHEER_FORCE }, + #else + .abilities = { ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_SHEER_FORCE }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Nidoqueen"), .cryId = CRY_NIDOQUEEN, @@ -4014,7 +4038,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE }, + #else + .abilities = { ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_HUSTLE }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Nidoran♂"), .cryId = CRY_NIDORAN_M, @@ -4076,7 +4104,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_HUSTLE }, + #else + .abilities = { ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_HUSTLE }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Nidorino"), .cryId = CRY_NIDORINO, @@ -4145,7 +4177,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_POISON_POINT, ABILITY_RIVALRY, ABILITY_SHEER_FORCE }, + #else + .abilities = { ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_SHEER_FORCE }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Nidoking"), .cryId = CRY_NIDOKING, @@ -4216,7 +4252,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = 140, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_FRIEND_GUARD }, + #else + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_FRIEND_GUARD }, + #endif .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, .speciesName = _("Cleffa"), @@ -4281,7 +4321,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = 140, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_FRIEND_GUARD }, + #else + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_FRIEND_GUARD }, + #endif .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, .speciesName = _("Clefairy"), @@ -4352,7 +4396,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = 140, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CUTE_CHARM, ABILITY_MAGIC_GUARD, ABILITY_UNAWARE }, + #else + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_UNAWARE }, + #endif .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, .speciesName = _("Clefable"), @@ -4682,7 +4730,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRIEND_GUARD }, + #else + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_FRIEND_GUARD }, + #endif .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, .speciesName = _("Igglybuff"), @@ -4747,7 +4799,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRIEND_GUARD }, + #else + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_FRIEND_GUARD }, + #endif .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, .speciesName = _("Jigglypuff"), @@ -4818,7 +4874,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_CUTE_CHARM, ABILITY_COMPETITIVE, ABILITY_FRISK }, + #else + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_FRISK }, + #endif .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, .speciesName = _("Wigglytuff"), @@ -5363,7 +5423,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_EFFECT_SPORE, ABILITY_DRY_SKIN, ABILITY_DAMP }, + #else + .abilities = { ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_DAMP }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Paras"), .cryId = CRY_PARAS, @@ -5429,7 +5493,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_EFFECT_SPORE, ABILITY_DRY_SKIN, ABILITY_DAMP }, + #else + .abilities = { ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_DAMP }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Parasect"), .cryId = CRY_PARASECT, @@ -5492,7 +5560,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_COMPOUND_EYES, ABILITY_TINTED_LENS, ABILITY_RUN_AWAY }, + #else + .abilities = { ABILITY_COMPOUND_EYES, ABILITY_NONE, ABILITY_RUN_AWAY }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Venonat"), .cryId = CRY_VENONAT, @@ -5557,7 +5629,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SHIELD_DUST, ABILITY_TINTED_LENS, ABILITY_WONDER_SKIN }, + #else + .abilities = { ABILITY_SHIELD_DUST, ABILITY_NONE, ABILITY_WONDER_SKIN }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Venomoth"), .cryId = CRY_VENOMOTH, @@ -5893,7 +5969,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_PICKUP, ABILITY_TECHNICIAN, ABILITY_UNNERVE }, + #else + .abilities = { ABILITY_PICKUP, ABILITY_NONE, ABILITY_UNNERVE }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Meowth"), .cryId = CRY_MEOWTH, @@ -5959,7 +6039,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_LIMBER, ABILITY_TECHNICIAN, ABILITY_UNNERVE }, + #else + .abilities = { ABILITY_LIMBER, ABILITY_NONE, ABILITY_UNNERVE }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Persian"), .cryId = CRY_PERSIAN, @@ -6461,7 +6545,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_VITAL_SPIRIT, ABILITY_ANGER_POINT, ABILITY_DEFIANT }, + #else + .abilities = { ABILITY_VITAL_SPIRIT, ABILITY_NONE, ABILITY_DEFIANT }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Mankey"), .cryId = CRY_MANKEY, @@ -6524,7 +6612,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_VITAL_SPIRIT, ABILITY_ANGER_POINT, ABILITY_DEFIANT }, + #else + .abilities = { ABILITY_VITAL_SPIRIT, ABILITY_NONE, ABILITY_DEFIANT }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Primeape"), .cryId = CRY_PRIMEAPE, @@ -7453,7 +7545,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST }, + #else + .abilities = { ABILITY_GUTS, ABILITY_NONE, ABILITY_STEADFAST }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Machop"), .cryId = CRY_MACHOP, @@ -7516,7 +7612,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST }, + #else + .abilities = { ABILITY_GUTS, ABILITY_NONE, ABILITY_STEADFAST }, + #endif .bodyColor = BODY_COLOR_GRAY, .noFlip = TRUE, .speciesName = _("Machoke"), @@ -7588,7 +7688,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST }, + #else + .abilities = { ABILITY_GUTS, ABILITY_NONE, ABILITY_STEADFAST }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Machamp"), .cryId = CRY_MACHAMP, @@ -7652,7 +7756,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_GUTS, ABILITY_NO_GUARD, ABILITY_STEADFAST }, + #else + .abilities = { ABILITY_GUTS, ABILITY_NONE, ABILITY_STEADFAST }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Machamp"), .cryId = CRY_MACHAMP, @@ -9684,7 +9792,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_THICK_FAT, ABILITY_HYDRATION, ABILITY_ICE_BODY }, + #else + .abilities = { ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_ICE_BODY }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Seel"), .cryId = CRY_SEEL, @@ -9746,7 +9858,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_THICK_FAT, ABILITY_HYDRATION, ABILITY_ICE_BODY }, + #else + .abilities = { ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_ICE_BODY }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Dewgong"), .cryId = CRY_DEWGONG, @@ -10072,7 +10188,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_3), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SHELL_ARMOR, ABILITY_SKILL_LINK, ABILITY_OVERCOAT }, + #else + .abilities = { ABILITY_SHELL_ARMOR, ABILITY_NONE, ABILITY_OVERCOAT }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Shellder"), .cryId = CRY_SHELLDER, @@ -10137,7 +10257,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_3), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SHELL_ARMOR, ABILITY_SKILL_LINK, ABILITY_OVERCOAT }, + #else + .abilities = { ABILITY_SHELL_ARMOR, ABILITY_NONE, ABILITY_OVERCOAT }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Cloyster"), .cryId = CRY_CLOYSTER, @@ -10709,7 +10833,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INSOMNIA, ABILITY_FOREWARN, ABILITY_INNER_FOCUS }, + #else + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_INNER_FOCUS }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Drowzee"), .cryId = CRY_DROWZEE, @@ -10772,7 +10900,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INSOMNIA, ABILITY_FOREWARN, ABILITY_INNER_FOCUS }, + #else + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_INNER_FOCUS }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Hypno"), .cryId = CRY_HYPNO, @@ -11730,7 +11862,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_GUTS, ABILITY_STEADFAST, ABILITY_VITAL_SPIRIT }, + #else + .abilities = { ABILITY_GUTS, ABILITY_NONE, ABILITY_VITAL_SPIRIT }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Tyrogue"), .cryId = CRY_TYROGUE, @@ -11795,7 +11931,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_LIMBER, ABILITY_RECKLESS, ABILITY_UNBURDEN }, + #else + .abilities = { ABILITY_LIMBER, ABILITY_NONE, ABILITY_UNBURDEN }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Hitmonlee"), .cryId = CRY_HITMONLEE, @@ -11855,7 +11995,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_KEEN_EYE, ABILITY_IRON_FIST, ABILITY_INNER_FOCUS }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_INNER_FOCUS }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Hitmonchan"), .cryId = CRY_HITMONCHAN, @@ -11916,7 +12060,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INTIMIDATE, ABILITY_TECHNICIAN, ABILITY_STEADFAST }, + #else + .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_STEADFAST }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Hitmontop"), .cryId = CRY_HITMONTOP, @@ -12713,7 +12861,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_REGENERATOR }, + #else + .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_REGENERATOR }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Tangela"), .cryId = CRY_TANGELA, @@ -12965,7 +13117,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_DRAGON), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SWIFT_SWIM, ABILITY_SNIPER, ABILITY_DAMP }, + #else + .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_DAMP }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Horsea"), .cryId = CRY_HORSEA, @@ -13029,7 +13185,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_DRAGON), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_POISON_POINT, ABILITY_SNIPER, ABILITY_DAMP }, + #else + .abilities = { ABILITY_POISON_POINT, ABILITY_NONE, ABILITY_DAMP }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Seadra"), .cryId = CRY_SEADRA, @@ -13101,7 +13261,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_DRAGON), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SWIFT_SWIM, ABILITY_SNIPER, ABILITY_DAMP }, + #else + .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_DAMP }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Kingdra"), .cryId = CRY_KINGDRA, @@ -13431,7 +13595,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SOUNDPROOF, ABILITY_FILTER, ABILITY_TECHNICIAN }, + #else + .abilities = { ABILITY_SOUNDPROOF, ABILITY_NONE, ABILITY_TECHNICIAN }, + #endif .bodyColor = BODY_COLOR_PINK, .speciesName = _("Mime Jr."), .cryId = CRY_MIME_JR, @@ -13688,7 +13856,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SWARM, ABILITY_TECHNICIAN, ABILITY_STEADFAST }, + #else + .abilities = { ABILITY_SWARM, ABILITY_NONE, ABILITY_STEADFAST }, + #endif .bodyColor = BODY_COLOR_GREEN, .speciesName = _("Scyther"), .cryId = CRY_SCYTHER, @@ -13756,7 +13928,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SWARM, ABILITY_TECHNICIAN, ABILITY_LIGHT_METAL }, + #else + .abilities = { ABILITY_SWARM, ABILITY_NONE, ABILITY_LIGHT_METAL }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Scizor"), .cryId = CRY_SCIZOR, @@ -13944,7 +14120,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OBLIVIOUS, ABILITY_FOREWARN, ABILITY_HYDRATION }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_HYDRATION }, + #endif .bodyColor = BODY_COLOR_PINK, .speciesName = _("Smoochum"), .cryId = CRY_SMOOCHUM, @@ -14008,7 +14188,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OBLIVIOUS, ABILITY_FOREWARN, ABILITY_DRY_SKIN }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_DRY_SKIN }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Jynx"), .cryId = CRY_JYNX, @@ -14472,7 +14656,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_HYPER_CUTTER, ABILITY_MOLD_BREAKER, ABILITY_MOXIE }, + #else + .abilities = { ABILITY_HYPER_CUTTER, ABILITY_NONE, ABILITY_MOXIE }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Pinsir"), .cryId = CRY_PINSIR, @@ -14597,7 +14785,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INTIMIDATE, ABILITY_ANGER_POINT, ABILITY_SHEER_FORCE }, + #else + .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_SHEER_FORCE }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Tauros"), .cryId = CRY_TAUROS, @@ -15212,7 +15404,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_RUN_AWAY, ABILITY_ADAPTABILITY, ABILITY_ANTICIPATION }, + #else + .abilities = { ABILITY_RUN_AWAY, ABILITY_NONE, ABILITY_ANTICIPATION }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Eevee"), .cryId = CRY_EEVEE, @@ -15892,7 +16088,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_TRACE, ABILITY_DOWNLOAD, ABILITY_ANALYTIC }, + #else + .abilities = { ABILITY_TRACE, ABILITY_NONE, ABILITY_ANALYTIC }, + #endif .bodyColor = BODY_COLOR_PINK, .speciesName = _("Porygon"), .cryId = CRY_PORYGON, @@ -15955,7 +16155,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_TRACE, ABILITY_DOWNLOAD, ABILITY_ANALYTIC }, + #else + .abilities = { ABILITY_TRACE, ABILITY_NONE, ABILITY_ANALYTIC }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Porygon2"), .cryId = CRY_PORYGON2, diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h index ed6e9e23fb..1bfbb41bec 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -2238,7 +2238,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_INFILTRATOR }, + #else + .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_INFILTRATOR }, + #endif .bodyColor = BODY_COLOR_PINK, .speciesName = _("Hoppip"), .cryId = CRY_HOPPIP, @@ -2301,7 +2305,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_INFILTRATOR }, + #else + .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_INFILTRATOR }, + #endif .bodyColor = BODY_COLOR_GREEN, .speciesName = _("Skiploom"), .cryId = CRY_SKIPLOOM, @@ -2371,7 +2379,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CHLOROPHYLL, ABILITY_LEAF_GUARD, ABILITY_INFILTRATOR }, + #else + .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_INFILTRATOR }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Jumpluff"), .cryId = CRY_JUMPLUFF, @@ -2568,7 +2580,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CHLOROPHYLL, ABILITY_SOLAR_POWER, ABILITY_EARLY_BIRD }, + #else + .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_EARLY_BIRD }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Sunkern"), .cryId = CRY_SUNKERN, @@ -2630,7 +2646,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CHLOROPHYLL, ABILITY_SOLAR_POWER, ABILITY_EARLY_BIRD }, + #else + .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_EARLY_BIRD }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Sunflora"), .cryId = CRY_SUNFLORA, @@ -3065,7 +3085,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INSOMNIA, ABILITY_SUPER_LUCK, ABILITY_PRANKSTER }, + #else + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_PRANKSTER }, + #endif .bodyColor = BODY_COLOR_BLACK, .speciesName = _("Murkrow"), .cryId = CRY_MURKROW, @@ -4183,7 +4207,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD, EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INTIMIDATE, ABILITY_QUICK_FEET, ABILITY_RATTLED }, + #else + .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_RATTLED }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Granbull"), .cryId = CRY_GRANBULL, @@ -4450,7 +4478,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_STURDY, ABILITY_GLUTTONY, ABILITY_CONTRARY }, + #else + .abilities = { ABILITY_STURDY, ABILITY_NONE, ABILITY_CONTRARY }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Shuckle"), .cryId = CRY_SHUCKLE, @@ -4913,7 +4945,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_PICKUP, ABILITY_QUICK_FEET, ABILITY_HONEY_GATHER }, + #else + .abilities = { ABILITY_PICKUP, ABILITY_NONE, ABILITY_HONEY_GATHER }, + #endif .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, .speciesName = _("Teddiursa"), @@ -4976,7 +5012,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_GUTS, ABILITY_QUICK_FEET, ABILITY_UNNERVE }, + #else + .abilities = { ABILITY_GUTS, ABILITY_NONE, ABILITY_UNNERVE }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Ursaring"), .cryId = CRY_URSARING, @@ -5290,7 +5330,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OBLIVIOUS, ABILITY_SNOW_CLOAK, ABILITY_THICK_FAT }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_THICK_FAT }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Swinub"), .cryId = CRY_SWINUB, @@ -5353,7 +5397,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OBLIVIOUS, ABILITY_SNOW_CLOAK, ABILITY_THICK_FAT }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_THICK_FAT }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Piloswine"), .cryId = CRY_PILOSWINE, @@ -5692,7 +5740,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_WATER_2), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_HUSTLE, ABILITY_SNIPER, ABILITY_MOODY }, + #else + .abilities = { ABILITY_HUSTLE, ABILITY_NONE, ABILITY_MOODY }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Remoraid"), .cryId = CRY_REMORAID, @@ -5755,7 +5807,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_WATER_2), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SUCTION_CUPS, ABILITY_SNIPER, ABILITY_MOODY }, + #else + .abilities = { ABILITY_SUCTION_CUPS, ABILITY_NONE, ABILITY_MOODY }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Octillery"), .cryId = CRY_OCTILLERY, @@ -6398,7 +6454,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INTIMIDATE, ABILITY_FRISK, ABILITY_SAP_SIPPER }, + #else + .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_SAP_SIPPER }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Stantler"), .cryId = CRY_STANTLER, @@ -6525,7 +6585,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OWN_TEMPO, ABILITY_TECHNICIAN, ABILITY_MOODY }, + #else + .abilities = { ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_MOODY }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Smeargle"), .cryId = CRY_SMEARGLE, @@ -6590,7 +6654,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_THICK_FAT, ABILITY_SCRAPPY, ABILITY_SAP_SIPPER }, + #else + .abilities = { ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_SAP_SIPPER }, + #endif .bodyColor = BODY_COLOR_PINK, .speciesName = _("Miltank"), .cryId = CRY_MILTANK, diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h index 2da10d3711..8a23bb05fd 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -788,7 +788,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_RUN_AWAY, ABILITY_QUICK_FEET, ABILITY_RATTLED }, + #else + .abilities = { ABILITY_RUN_AWAY, ABILITY_NONE, ABILITY_RATTLED }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Poochyena"), .cryId = CRY_POOCHYENA, @@ -850,7 +854,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INTIMIDATE, ABILITY_QUICK_FEET, ABILITY_MOXIE }, + #else + .abilities = { ABILITY_INTIMIDATE, ABILITY_NONE, ABILITY_MOXIE }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Mightyena"), .cryId = CRY_MIGHTYENA, @@ -922,7 +930,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET }, + #else + .abilities = { ABILITY_PICKUP, ABILITY_NONE, ABILITY_QUICK_FEET }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Zigzagoon"), .cryId = CRY_ZIGZAGOON, @@ -987,7 +999,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_PICKUP, ABILITY_GLUTTONY, ABILITY_QUICK_FEET }, + #else + .abilities = { ABILITY_PICKUP, ABILITY_NONE, ABILITY_QUICK_FEET }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Linoone"), .cryId = CRY_LINOONE, @@ -2127,7 +2143,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FLYING), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_KEEN_EYE, ABILITY_HYDRATION, ABILITY_RAIN_DISH }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_RAIN_DISH }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Wingull"), .cryId = CRY_WINGULL, @@ -2197,7 +2217,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FLYING), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_KEEN_EYE, ABILITY_DRIZZLE, ABILITY_RAIN_DISH }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_RAIN_DISH }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Pelipper"), .cryId = CRY_PELIPPER, @@ -2786,7 +2810,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_EFFECT_SPORE, ABILITY_POISON_HEAL, ABILITY_QUICK_FEET }, + #else + .abilities = { ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_QUICK_FEET }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Shroomish"), .cryId = CRY_SHROOMISH, @@ -2850,7 +2878,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_EFFECT_SPORE, ABILITY_POISON_HEAL, ABILITY_TECHNICIAN }, + #else + .abilities = { ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_TECHNICIAN }, + #endif .bodyColor = BODY_COLOR_GREEN, .speciesName = _("Breloom"), .cryId = CRY_BRELOOM, @@ -3741,7 +3773,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD, EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CUTE_CHARM, ABILITY_NORMALIZE, ABILITY_WONDER_SKIN }, + #else + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_WONDER_SKIN }, + #endif .bodyColor = BODY_COLOR_PINK, .speciesName = _("Skitty"), .cryId = CRY_SKITTY, @@ -3810,7 +3846,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD, EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CUTE_CHARM, ABILITY_NORMALIZE, ABILITY_WONDER_SKIN }, + #else + .abilities = { ABILITY_CUTE_CHARM, ABILITY_NONE, ABILITY_WONDER_SKIN }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Delcatty"), .cryId = CRY_DELCATTY, @@ -3874,7 +3914,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_KEEN_EYE, ABILITY_STALL, ABILITY_PRANKSTER }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_PRANKSTER }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Sableye"), .cryId = CRY_SABLEYE, @@ -4757,7 +4801,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_PLUS, ABILITY_NONE, ABILITY_LIGHTNING_ROD }, + #else + .abilities = { ABILITY_PLUS, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Plusle"), .cryId = CRY_PLUSLE, @@ -4821,7 +4869,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_MINUS, ABILITY_NONE, ABILITY_VOLT_ABSORB }, + #else + .abilities = { ABILITY_MINUS, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Minun"), .cryId = CRY_MINUN, @@ -4959,7 +5011,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG, EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OBLIVIOUS, ABILITY_TINTED_LENS, ABILITY_PRANKSTER }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_PRANKSTER }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Illumise"), .cryId = CRY_ILLUMISE, @@ -5682,7 +5738,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OBLIVIOUS, ABILITY_SIMPLE, ABILITY_OWN_TEMPO }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_OWN_TEMPO }, + #endif .bodyColor = BODY_COLOR_YELLOW, .speciesName = _("Numel"), .cryId = CRY_NUMEL, @@ -5749,7 +5809,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_MAGMA_ARMOR, ABILITY_SOLID_ROCK, ABILITY_ANGER_POINT }, + #else + .abilities = { ABILITY_MAGMA_ARMOR, ABILITY_NONE, ABILITY_ANGER_POINT }, + #endif .bodyColor = BODY_COLOR_RED, .speciesName = _("Camerupt"), .cryId = CRY_CAMERUPT, @@ -5876,7 +5940,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_WHITE_SMOKE, ABILITY_DROUGHT, ABILITY_SHELL_ARMOR }, + #else + .abilities = { ABILITY_WHITE_SMOKE, ABILITY_NONE, ABILITY_SHELL_ARMOR }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Torkoal"), .cryId = CRY_TORKOAL, @@ -6064,7 +6132,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OWN_TEMPO, ABILITY_TANGLED_FEET, ABILITY_CONTRARY }, + #else + .abilities = { ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_CONTRARY }, + #endif .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, .speciesName = _("Spinda"), @@ -6921,7 +6993,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_2), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OBLIVIOUS, ABILITY_ANTICIPATION, ABILITY_HYDRATION }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_HYDRATION }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Barboach"), .cryId = CRY_BARBOACH, @@ -6984,7 +7060,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_2), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_OBLIVIOUS, ABILITY_ANTICIPATION, ABILITY_HYDRATION }, + #else + .abilities = { ABILITY_OBLIVIOUS, ABILITY_NONE, ABILITY_HYDRATION }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Whiscash"), .cryId = CRY_WHISCASH, @@ -7571,7 +7651,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_DRAGON), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_SWIFT_SWIM, ABILITY_OBLIVIOUS, ABILITY_ADAPTABILITY }, + #else + .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_ADAPTABILITY }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Feebas"), .cryId = CRY_FEEBAS, @@ -7635,7 +7719,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_DRAGON), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_MARVEL_SCALE, ABILITY_COMPETITIVE, ABILITY_CUTE_CHARM }, + #else + .abilities = { ABILITY_MARVEL_SCALE, ABILITY_NONE, ABILITY_CUTE_CHARM }, + #endif .bodyColor = BODY_COLOR_PINK, .speciesName = _("Milotic"), .cryId = CRY_MILOTIC, @@ -7968,7 +8056,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_COLOR_CHANGE, ABILITY_NONE, ABILITY_PROTEAN }, + #else + .abilities = { ABILITY_COLOR_CHANGE, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_GREEN, .speciesName = _("Kecleon"), .cryId = CRY_KECLEON, @@ -8033,7 +8125,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = 35, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INSOMNIA, ABILITY_FRISK, ABILITY_CURSED_BODY }, + #else + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_CURSED_BODY }, + #endif .bodyColor = BODY_COLOR_BLACK, .speciesName = _("Shuppet"), .cryId = CRY_SHUPPET, @@ -8097,7 +8193,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = 35, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INSOMNIA, ABILITY_FRISK, ABILITY_CURSED_BODY }, + #else + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_CURSED_BODY }, + #endif .bodyColor = BODY_COLOR_BLACK, .speciesName = _("Banette"), .cryId = CRY_BANETTE, @@ -8221,7 +8321,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = 35, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_LEVITATE, ABILITY_NONE, ABILITY_FRISK }, + #else + .abilities = { ABILITY_LEVITATE, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_BLACK, .speciesName = _("Duskull"), .cryId = CRY_DUSKULL, @@ -8286,7 +8390,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = 35, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_PRESSURE, ABILITY_NONE, ABILITY_FRISK }, + #else + .abilities = { ABILITY_PRESSURE, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_BLACK, .speciesName = _("Dusclops"), .cryId = CRY_DUSCLOPS, @@ -8358,7 +8466,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = 35, .growthRate = GROWTH_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_PRESSURE, ABILITY_NONE, ABILITY_FRISK }, + #else + .abilities = { ABILITY_PRESSURE, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_BLACK, .speciesName = _("Dusknoir"), .cryId = CRY_DUSKNOIR, @@ -8422,7 +8534,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_GRASS), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_CHLOROPHYLL, ABILITY_SOLAR_POWER, ABILITY_HARVEST }, + #else + .abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HARVEST }, + #endif .bodyColor = BODY_COLOR_GREEN, .speciesName = _("Tropius"), .cryId = CRY_TROPIUS, @@ -8622,7 +8738,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = 35, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_PRESSURE, ABILITY_SUPER_LUCK, ABILITY_JUSTIFIED }, + #else + .abilities = { ABILITY_PRESSURE, ABILITY_NONE, ABILITY_JUSTIFIED }, + #endif .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, .speciesName = _("Absol"), @@ -8749,7 +8869,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INNER_FOCUS, ABILITY_ICE_BODY, ABILITY_MOODY }, + #else + .abilities = { ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_MOODY }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Snorunt"), .cryId = CRY_SNORUNT, @@ -8813,7 +8937,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_INNER_FOCUS, ABILITY_ICE_BODY, ABILITY_MOODY }, + #else + .abilities = { ABILITY_INNER_FOCUS, ABILITY_NONE, ABILITY_MOODY }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Glalie"), .cryId = CRY_GLALIE, @@ -8998,7 +9126,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_THICK_FAT, ABILITY_ICE_BODY, ABILITY_OBLIVIOUS }, + #else + .abilities = { ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_OBLIVIOUS }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Spheal"), .cryId = CRY_SPHEAL, @@ -9061,7 +9193,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_THICK_FAT, ABILITY_ICE_BODY, ABILITY_OBLIVIOUS }, + #else + .abilities = { ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_OBLIVIOUS }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Sealeo"), .cryId = CRY_SEALEO, @@ -9128,7 +9264,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_4 .abilities = { ABILITY_THICK_FAT, ABILITY_ICE_BODY, ABILITY_OBLIVIOUS }, + #else + .abilities = { ABILITY_THICK_FAT, ABILITY_NONE, ABILITY_OBLIVIOUS }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Walrein"), .cryId = CRY_WALREIN, diff --git a/src/data/pokemon/species_info/gen_4_families.h b/src/data/pokemon/species_info/gen_4_families.h index ed95691513..faa9ed73b4 100644 --- a/src/data/pokemon/species_info/gen_4_families.h +++ b/src/data/pokemon/species_info/gen_4_families.h @@ -614,7 +614,11 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_RECKLESS }, + #else + .abilities = { ABILITY_KEEN_EYE, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_BROWN, .speciesName = _("Starly"), .cryId = CRY_STARLY, diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h index be00b1ee6d..db2392f685 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -1971,7 +1971,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_STURDY, ABILITY_WEAK_ARMOR, ABILITY_SAND_FORCE }, + #else + .abilities = { ABILITY_STURDY, ABILITY_NONE, ABILITY_SAND_FORCE }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Roggenrola"), .cryId = CRY_ROGGENROLA, @@ -2036,7 +2040,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_STURDY, ABILITY_WEAK_ARMOR, ABILITY_SAND_FORCE }, + #else + .abilities = { ABILITY_STURDY, ABILITY_NONE, ABILITY_SAND_FORCE }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Boldore"), .cryId = CRY_BOLDORE, @@ -2106,7 +2114,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_STURDY, ABILITY_SAND_STREAM, ABILITY_SAND_FORCE }, + #else + .abilities = { ABILITY_STURDY, ABILITY_NONE, ABILITY_SAND_FORCE }, + #endif .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Gigalith"), .cryId = CRY_GIGALITH, @@ -6111,7 +6123,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_FRISK, ABILITY_COMPETITIVE, ABILITY_SHADOW_TAG }, + #else + .abilities = { ABILITY_FRISK, ABILITY_NONE, ABILITY_SHADOW_TAG }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Gothita"), .cryId = CRY_GOTHITA, @@ -6173,7 +6189,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_FRISK, ABILITY_COMPETITIVE, ABILITY_SHADOW_TAG }, + #else + .abilities = { ABILITY_FRISK, ABILITY_NONE, ABILITY_SHADOW_TAG }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Gothorita"), .cryId = CRY_GOTHORITA, @@ -6234,7 +6254,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_FRISK, ABILITY_COMPETITIVE, ABILITY_SHADOW_TAG }, + #else + .abilities = { ABILITY_FRISK, ABILITY_NONE, ABILITY_SHADOW_TAG }, + #endif .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Gothitelle"), .cryId = CRY_GOTHITELLE, @@ -6610,7 +6634,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_ICE_BODY, ABILITY_SNOW_CLOAK, ABILITY_WEAK_ARMOR }, + #else + .abilities = { ABILITY_ICE_BODY, ABILITY_NONE, ABILITY_WEAK_ARMOR }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Vanillite"), .cryId = CRY_VANILLITE, @@ -6673,7 +6701,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_ICE_BODY, ABILITY_SNOW_CLOAK, ABILITY_WEAK_ARMOR }, + #else + .abilities = { ABILITY_ICE_BODY, ABILITY_NONE, ABILITY_WEAK_ARMOR }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Vanillish"), .cryId = CRY_VANILLISH, @@ -6735,7 +6767,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_ICE_BODY, ABILITY_SNOW_WARNING, ABILITY_WEAK_ARMOR }, + #else + .abilities = { ABILITY_ICE_BODY, ABILITY_NONE, ABILITY_WEAK_ARMOR }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Vanilluxe"), .cryId = CRY_VANILLUXE, @@ -8004,7 +8040,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS, EGG_GROUP_MINERAL), + #if P_UPDATED_ABILITIES >= GEN_6 .abilities = { ABILITY_IRON_BARBS, ABILITY_NONE, ABILITY_ANTICIPATION }, + #else + .abilities = { ABILITY_IRON_BARBS, ABILITY_NONE, ABILITY_NONE }, + #endif .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Ferrothorn"), .cryId = CRY_FERROTHORN, @@ -8954,7 +8994,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_SNOW_CLOAK, ABILITY_SLUSH_RUSH, ABILITY_RATTLED }, + #else + .abilities = { ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_RATTLED }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Cubchoo"), .cryId = CRY_CUBCHOO, @@ -9016,7 +9060,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), + #if P_UPDATED_ABILITIES >= GEN_7 .abilities = { ABILITY_SNOW_CLOAK, ABILITY_SLUSH_RUSH, ABILITY_SWIFT_SWIM }, + #else + .abilities = { ABILITY_SNOW_CLOAK, ABILITY_NONE, ABILITY_SWIFT_SWIM }, + #endif .bodyColor = BODY_COLOR_WHITE, .speciesName = _("Beartic"), .cryId = CRY_BEARTIC, diff --git a/src/shop.c b/src/shop.c index 620a49394d..3523aa86b1 100644 --- a/src/shop.c +++ b/src/shop.c @@ -630,7 +630,7 @@ static void BuyMenuPrintPriceInList(u8 windowId, u32 itemId, u8 y) gStringVar1, ItemId_GetPrice(itemId) >> IsPokeNewsActive(POKENEWS_SLATEPORT), STR_CONV_MODE_LEFT_ALIGN, - 5); + 6); } else { @@ -638,7 +638,7 @@ static void BuyMenuPrintPriceInList(u8 windowId, u32 itemId, u8 y) gStringVar1, gDecorations[itemId].price, STR_CONV_MODE_LEFT_ALIGN, - 5); + 6); } if (ItemId_GetImportance(itemId) && (CheckBagHasItem(itemId, 1) || CheckPCHasItem(itemId, 1))) diff --git a/test/battle/ability/lightning_rod.c b/test/battle/ability/lightning_rod.c new file mode 100644 index 0000000000..33dd27a6fb --- /dev/null +++ b/test/battle/ability/lightning_rod.c @@ -0,0 +1,73 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Lightning Rod absorbs Electric-type moves and increases the Sp. Attack [Gen5+]") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_THUNDERBOLT].type == TYPE_ELECTRIC); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_RAICHU) { Ability(ABILITY_LIGHTNING_ROD); } + } WHEN { + TURN { MOVE(player, MOVE_THUNDERBOLT); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + HP_BAR(opponent); + }; + ABILITY_POPUP(opponent, ABILITY_LIGHTNING_ROD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Raichu's Sp. Atk rose!"); + } else { + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_LIGHTNING_ROD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Raichu's Sp. Atk rose!"); + }; + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + HP_BAR(opponent); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + } +} + +DOUBLE_BATTLE_TEST("Lightning Rod forces single-target Electric-type moves to target the Pokémon with this Ability.") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_THUNDERBOLT].type == TYPE_ELECTRIC); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_RAICHU) { Ability(ABILITY_LIGHTNING_ROD); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(playerLeft, MOVE_THUNDERBOLT, target: opponentRight); + MOVE(playerRight, MOVE_THUNDERBOLT, target: opponentRight); + MOVE(opponentLeft, MOVE_CELEBRATE); + MOVE(opponentRight, MOVE_CELEBRATE); + } + } SCENE { + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) { + NONE_OF { + HP_BAR(opponentLeft); + HP_BAR(opponentRight); + }; + ABILITY_POPUP(opponentLeft, ABILITY_LIGHTNING_ROD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Raichu's Sp. Atk rose!"); + ABILITY_POPUP(opponentLeft, ABILITY_LIGHTNING_ROD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Raichu's Sp. Atk rose!"); + } else { + NONE_OF { + HP_BAR(opponentRight); + }; + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, playerLeft); + HP_BAR(opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, playerRight); + HP_BAR(opponentLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); + } +} diff --git a/test/battle/ability/parental_bond.c b/test/battle/ability/parental_bond.c index 0b8a807e84..945e975b77 100644 --- a/test/battle/ability/parental_bond.c +++ b/test/battle/ability/parental_bond.c @@ -239,6 +239,30 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil } } +SINGLE_BATTLE_TEST("Parental Bond Smack Down effect triggers after 2nd hit") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SMACK_DOWN].category != DAMAGE_CATEGORY_STATUS); + ASSUME(gMovesInfo[MOVE_SMACK_DOWN].strikeCount < 2); + ASSUME(MoveHasAdditionalEffect(MOVE_SMACK_DOWN, MOVE_EFFECT_SMACK_DOWN)); + PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } + OPPONENT(SPECIES_SKARMORY); + } WHEN { + TURN { MOVE(player, MOVE_SMACK_DOWN, gimmick: GIMMICK_MEGA); } + } SCENE { + MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); + MESSAGE("Kangaskhan has Mega Evolved into Mega Kangaskhan!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SMACK_DOWN, player); + HP_BAR(opponent); + NOT MESSAGE("Foe Skarmory fell straight down!"); + HP_BAR(opponent); + MESSAGE("Foe Skarmory fell straight down!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_KANGASKHAN_MEGA); + } +} + TO_DO_BATTLE_TEST("Parental Bond tests"); // Temporary TODO: Convert Bulbapedia description into tests. diff --git a/test/battle/ability/storm_drain.c b/test/battle/ability/storm_drain.c new file mode 100644 index 0000000000..38d4a9be75 --- /dev/null +++ b/test/battle/ability/storm_drain.c @@ -0,0 +1,73 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Storm Drain absorbs Water-type moves and increases the Sp. Attack [Gen5+]") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GASTRODON_EAST_SEA) { Ability(ABILITY_STORM_DRAIN); } + } WHEN { + TURN { MOVE(player, MOVE_WATER_GUN); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, player); + HP_BAR(opponent); + }; + ABILITY_POPUP(opponent, ABILITY_STORM_DRAIN); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + } else { + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_STORM_DRAIN); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + }; + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, player); + HP_BAR(opponent); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + } +} + +DOUBLE_BATTLE_TEST("Storm Drain forces single-target Water-type moves to target the Pokémon with this Ability.") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GASTRODON_EAST_SEA) { Ability(ABILITY_STORM_DRAIN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(playerLeft, MOVE_WATER_GUN, target: opponentRight); + MOVE(playerRight, MOVE_WATER_GUN, target: opponentRight); + MOVE(opponentLeft, MOVE_CELEBRATE); + MOVE(opponentRight, MOVE_CELEBRATE); + } + } SCENE { + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) { + NONE_OF { + HP_BAR(opponentLeft); + HP_BAR(opponentRight); + }; + ABILITY_POPUP(opponentLeft, ABILITY_STORM_DRAIN); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + ABILITY_POPUP(opponentLeft, ABILITY_STORM_DRAIN); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + } else { + NONE_OF { + HP_BAR(opponentRight); + }; + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, playerLeft); + HP_BAR(opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, playerRight); + HP_BAR(opponentLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); + } +} diff --git a/test/battle/move_effect/flame_burst.c b/test/battle/move_effect/flame_burst.c new file mode 100644 index 0000000000..d222325a7b --- /dev/null +++ b/test/battle/move_effect/flame_burst.c @@ -0,0 +1,24 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_FLAME_BURST].additionalEffects->moveEffect == MOVE_EFFECT_FLAME_BURST); +} + +// Flame Burst AoE is supposed to hit through Substitute +DOUBLE_BATTLE_TEST("Flame Burst Substitute") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SUBSTITUTE].effect == EFFECT_SUBSTITUTE); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_SUBSTITUTE); MOVE(playerRight, MOVE_FLAME_BURST, target: opponentRight); } + } SCENE { + MESSAGE("The bursting flames hit Foe Wynaut!"); + NOT MESSAGE("The SUBSTITUTE took damage for Foe Wynaut!"); + } +} diff --git a/test/battle/move_effect/ion_deluge.c b/test/battle/move_effect/ion_deluge.c index ab64667b06..93e147e07d 100644 --- a/test/battle/move_effect/ion_deluge.c +++ b/test/battle/move_effect/ion_deluge.c @@ -41,7 +41,7 @@ WILD_BATTLE_TEST("Ion Deluge works the same way as always when used by a mon wit NONE_OF { ABILITY_POPUP(opponent, ability); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Wild Zebstrika's Sp.Atk rose!"); + MESSAGE("Wild Zebstrika's Sp. Atk rose!"); MESSAGE("Wild Zebstrika's Speed rose!"); } MESSAGE("A deluge of ions showers the battlefield!"); diff --git a/test/battle/move_effect_secondary/dire_claw.c b/test/battle/move_effect_secondary/dire_claw.c index 67c361bac0..35c6e73d94 100644 --- a/test/battle/move_effect_secondary/dire_claw.c +++ b/test/battle/move_effect_secondary/dire_claw.c @@ -67,7 +67,8 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep pokemo u8 statusAnim; u16 species, ability; u32 rng; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = MOVE_EFFECT_POISON; species = SPECIES_ZANGOOSE; ability = ABILITY_IMMUNITY; }