diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index 24b57d117e..cdffd6838c 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.2 (Latest release) + - 1.8.3 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.8.2 - 1.8.1 - 1.8.0 - 1.7.4 diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index 562468cce1..bf31df9931 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.8.2 (Latest release) + - 1.8.3 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 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 4658ecfb69..6920d34a83 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.8.2 (Latest release) + - 1.8.3 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.8.2 - 1.8.1 - 1.8.0 - 1.7.4 diff --git a/CHANGELOG.md b/CHANGELOG.md index dea05701d5..8aeeac5dec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,46 +1,47 @@ # Pokeemerald-Expansion Changelogs ## 1.8.x -- ### [Version 1.8.2](docs/changelogs/1.8.2.md) - Bugfix Release 🧹 -- ### [Version 1.8.1](docs/changelogs/1.8.1.md) - HOTFIX Release 🔥 -- ### [Version 1.8.0](docs/changelogs/1.8.0.md) - Feature 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.4.md) - Bugfix Release 🧹 -- ### [Version 1.7.3](docs/changelogs/1.7.3.md) - Bugfix Release 🧹 -- ### [Version 1.7.2](docs/changelogs/1.7.2.md) - Bugfix Release 🧹 -- ### [Version 1.7.1](docs/changelogs/1.7.1.md) - Bugfix Release 🧹 -- ### [Version 1.7.0](docs/changelogs/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.2.md) - Bugfix Release 🧹 -- ### [Version 1.6.1](docs/changelogs/1.6.1.md) - HOTFIX Release 🔥 -- ### [Version 1.6.0](docs/changelogs/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.3.md) - HOTFIX Release 🔥 -- ### [Version 1.5.2](docs/changelogs/1.5.2.md) - Bugfix Release 🧹 -- ### [Version 1.5.1](docs/changelogs/1.5.1.md) - Bugfix Release 🧹 -- ### [Version 1.5.0](docs/changelogs/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.3.md) - Bugfix Release 🧹 -- ### [Version 1.4.2](docs/changelogs/1.4.2.md) - Bugfix Release 🧹 -- ### [Version 1.4.1](docs/changelogs/1.4.1.md) - HOTFIX Release 🔥 -- ### [Version 1.4.0](docs/changelogs/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.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.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.1.md) - Bugfix Release 🧹 -- ### [Version 1.1.0](docs/changelogs/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.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.0.md) - Retroactive Version 🦕 +- ### [Version 0.9.0](docs/changelogs/0.9.x/0.9.0.md) - Retroactive Version 🦕 diff --git a/README.md b/README.md index 6487086183..855ddc7b7f 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,11 @@ Based off RHH's pokeemerald-expansion v1.8.0 https://github.com/rh-hideout/pokee ## What features are included? - ***IMPORTANT*❗❗ Read through these to learn what features you can toggle**: - - [Battle configurations](/include/config/battle.h) - - [Pokémon configurations](/include/config/pokemon.h) - - [Item configurations](/include/config/item.h) - - [Overworld configurations](/include/config/overworld.h) - - [Debug configurations](/include/config/debug.h) + - [Battle configurations](include/config/battle.h) + - [Pokémon configurations](include/config/pokemon.h) + - [Item configurations](include/config/item.h) + - [Overworld configurations](include/config/overworld.h) + - [Debug configurations](include/config/debug.h) - ***Upgraded battle engine.*** - Gen5+ damage calculation. - 2v2 Wild battles support. @@ -62,7 +62,7 @@ Based off RHH's pokeemerald-expansion v1.8.0 https://github.com/rh-hideout/pokee - Recalculating stats at the end of every battle. - Level 100 Pokémon can earn EVs. - Inverse battle support. - - TONS of other features listed [here](/include/config/battle.h). + - TONS of other features listed [here](include/config/battle.h). - ***Full Trainer customization*** - Nickname, EVs, IVs, moves, ability, ball, friendship, nature, gender, shininess. - Custom tag battle support (teaming up an NPC in a double battle). @@ -94,7 +94,7 @@ Based off RHH's pokeemerald-expansion v1.8.0 https://github.com/rh-hideout/pokee - All gender differences. - Custom female icons for female Hippopotas Hippowdon, Pikachu and Wobbufett - 3 Perfect IVs on Legendaries, Mythicals and Ultra Beasts. -- ***Customizable form change tables. Full list of methods [here](/include/constants/form_change_types.h).*** +- ***Customizable form change tables. Full list of methods [here](include/constants/form_change_types.h).*** - Item holding (eg. Giratina/Arceus) - Item using (eg. Oricorio) - Time of day option for Shaymin @@ -115,7 +115,7 @@ Based off RHH's pokeemerald-expansion v1.8.0 https://github.com/rh-hideout/pokee - Egg Move Transfer, including Mirror Herb (configurable). - Nature inheriting 100% of the time with Everstone (configurable) - Gen6+ Ability inheriting (configurable). -- ***Items from newer Generations. Full list [here](/include/constants/items.h).*** +- ***Items from newer Generations. Full list [here](include/constants/items.h).*** - ***Gen 6+ Exp. Share*** (configurable) - Berserk Gene - Most battle items from Gen 4+ @@ -170,7 +170,7 @@ With this, you'll get the latest version of pokeemerald-expansion, plus a couple - Check your current version. - You can check in the debug menu's `Utilities -> Expansion Version` option. - If the option is not available, you possibly have version 1.6.2 or older. In that case, please check the [changelogs](CHANGELOG.md) to determine your version based on the features available on your repository. -- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.8.2, use `git pull RHH expansion/1.8.2`). +- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.8.3, use `git pull RHH expansion/1.8.3`). - ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on) - Alternatively, you can update to unreleased versions of the expansion. - ***master (stable):*** It contains unreleased **bugfixes** that will come in the next patch version. To merge, use `git pull RHH master`. diff --git a/docs/changelogs/0.9.0.md b/docs/changelogs/0.9.x/0.9.0.md similarity index 100% rename from docs/changelogs/0.9.0.md rename to docs/changelogs/0.9.x/0.9.0.md diff --git a/docs/changelogs/1.0.0.md b/docs/changelogs/1.0.x/1.0.0.md similarity index 100% rename from docs/changelogs/1.0.0.md rename to docs/changelogs/1.0.x/1.0.0.md diff --git a/docs/changelogs/1.1.0.md b/docs/changelogs/1.1.x/1.1.0.md similarity index 100% rename from docs/changelogs/1.1.0.md rename to docs/changelogs/1.1.x/1.1.0.md diff --git a/docs/changelogs/1.1.1.md b/docs/changelogs/1.1.x/1.1.1.md similarity index 100% rename from docs/changelogs/1.1.1.md rename to docs/changelogs/1.1.x/1.1.1.md diff --git a/docs/changelogs/1.2.0.md b/docs/changelogs/1.2.x/1.2.0.md similarity index 100% rename from docs/changelogs/1.2.0.md rename to docs/changelogs/1.2.x/1.2.0.md diff --git a/docs/changelogs/1.3.0.md b/docs/changelogs/1.3.x/1.3.0.md similarity index 100% rename from docs/changelogs/1.3.0.md rename to docs/changelogs/1.3.x/1.3.0.md diff --git a/docs/changelogs/1.4.0.md b/docs/changelogs/1.4.x/1.4.0.md similarity index 100% rename from docs/changelogs/1.4.0.md rename to docs/changelogs/1.4.x/1.4.0.md diff --git a/docs/changelogs/1.4.1.md b/docs/changelogs/1.4.x/1.4.1.md similarity index 100% rename from docs/changelogs/1.4.1.md rename to docs/changelogs/1.4.x/1.4.1.md diff --git a/docs/changelogs/1.4.2.md b/docs/changelogs/1.4.x/1.4.2.md similarity index 100% rename from docs/changelogs/1.4.2.md rename to docs/changelogs/1.4.x/1.4.2.md diff --git a/docs/changelogs/1.4.3.md b/docs/changelogs/1.4.x/1.4.3.md similarity index 100% rename from docs/changelogs/1.4.3.md rename to docs/changelogs/1.4.x/1.4.3.md diff --git a/docs/changelogs/1.5.0.md b/docs/changelogs/1.5.x/1.5.0.md similarity index 100% rename from docs/changelogs/1.5.0.md rename to docs/changelogs/1.5.x/1.5.0.md diff --git a/docs/changelogs/1.5.1.md b/docs/changelogs/1.5.x/1.5.1.md similarity index 100% rename from docs/changelogs/1.5.1.md rename to docs/changelogs/1.5.x/1.5.1.md diff --git a/docs/changelogs/1.5.2.md b/docs/changelogs/1.5.x/1.5.2.md similarity index 100% rename from docs/changelogs/1.5.2.md rename to docs/changelogs/1.5.x/1.5.2.md diff --git a/docs/changelogs/1.5.3.md b/docs/changelogs/1.5.x/1.5.3.md similarity index 100% rename from docs/changelogs/1.5.3.md rename to docs/changelogs/1.5.x/1.5.3.md diff --git a/docs/changelogs/1.6.0.md b/docs/changelogs/1.6.x/1.6.0.md similarity index 100% rename from docs/changelogs/1.6.0.md rename to docs/changelogs/1.6.x/1.6.0.md diff --git a/docs/changelogs/1.6.1.md b/docs/changelogs/1.6.x/1.6.1.md similarity index 100% rename from docs/changelogs/1.6.1.md rename to docs/changelogs/1.6.x/1.6.1.md diff --git a/docs/changelogs/1.6.2.md b/docs/changelogs/1.6.x/1.6.2.md similarity index 100% rename from docs/changelogs/1.6.2.md rename to docs/changelogs/1.6.x/1.6.2.md diff --git a/docs/changelogs/1.7.0.md b/docs/changelogs/1.7.x/1.7.0.md similarity index 100% rename from docs/changelogs/1.7.0.md rename to docs/changelogs/1.7.x/1.7.0.md diff --git a/docs/changelogs/1.7.1.md b/docs/changelogs/1.7.x/1.7.1.md similarity index 100% rename from docs/changelogs/1.7.1.md rename to docs/changelogs/1.7.x/1.7.1.md diff --git a/docs/changelogs/1.7.2.md b/docs/changelogs/1.7.x/1.7.2.md similarity index 100% rename from docs/changelogs/1.7.2.md rename to docs/changelogs/1.7.x/1.7.2.md diff --git a/docs/changelogs/1.7.3.md b/docs/changelogs/1.7.x/1.7.3.md similarity index 100% rename from docs/changelogs/1.7.3.md rename to docs/changelogs/1.7.x/1.7.3.md diff --git a/docs/changelogs/1.7.4.md b/docs/changelogs/1.7.x/1.7.4.md similarity index 100% rename from docs/changelogs/1.7.4.md rename to docs/changelogs/1.7.x/1.7.4.md diff --git a/docs/changelogs/1.8.0.md b/docs/changelogs/1.8.x/1.8.0.md similarity index 100% rename from docs/changelogs/1.8.0.md rename to docs/changelogs/1.8.x/1.8.0.md diff --git a/docs/changelogs/1.8.1.md b/docs/changelogs/1.8.x/1.8.1.md similarity index 100% rename from docs/changelogs/1.8.1.md rename to docs/changelogs/1.8.x/1.8.1.md diff --git a/docs/changelogs/1.8.2.md b/docs/changelogs/1.8.x/1.8.2.md similarity index 100% rename from docs/changelogs/1.8.2.md rename to docs/changelogs/1.8.x/1.8.2.md diff --git a/docs/changelogs/1.8.x/1.8.3.md b/docs/changelogs/1.8.x/1.8.3.md new file mode 100644 index 0000000000..8449f56383 --- /dev/null +++ b/docs/changelogs/1.8.x/1.8.3.md @@ -0,0 +1,132 @@ +# Version 1.8.3 + +```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.3`. +``` + +## 💥 *Softlock/Crash fixes* 💥 +* Fixed AI bug that caused an infinite loop when player mon has only status moves by @Pawkkie and @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4403 +* Temporarely disabled `AI_FLAG_SMART_MON_CHOICES` flag in double battles to prevent a softlock by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4405 +* Fixed debug option "Fill PC Boxes Fast" softlocking the game by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4428 +* Fixed infinite loop caused by Leftovers with `AI_FLAG_SMART_MON_CHOICES` by @Pokabbie and @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4453 + +## 🧬 General 🧬 +### Changed +* Updated outdated macOS instructions in `INSTALL.md` by @jschoeny in https://github.com/rh-hideout/pokeemerald-expansion/pull/4407 +* Made filepath links in `README.md` relative by @lolbinarycat in https://github.com/rh-hideout/pokeemerald-expansion/pull/4509 +### Fixed +* Fixed abilities not being properly inherited via breeding for species/abilities with IDs over 255 by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4411 +* Fixed Hard Level Caps issues by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4420 + * Fixed Pokémon being able to surpass cap if they gained enough experience at once. + * Fixed Exp. Candies ignoring hard caps. + * Fixed Pokémon gaining 1 experience if they are at the level cap. +* Fixed evolution tracker issues by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4503 + * `EVO_LEVEL_MOVE_TWENTY_TIMES` no longer increases with every move. + * `EVO_LEVEL_RECOIL_DAMAGE_MALE/FEMALE` is no longer updated twice than intended. + +## ✨ Feature Branches ✨ +### ***TheXaman's HGSS Pokédex Plus***: +#### Fixed +* Fixed Pokémon data page not properly handling `u16` Exp. Yields by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4432 + * Cleanup by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4445 + +## 🐉 Pokémon 🐉 +### Changed +* Further Gen 9 Pokémon icon improvements by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4413 + * Original sprites by [ezerart on DeviantArt](https://www.deviantart.com/ezerart/art/Pokemon-Gen-9-Icon-sprites-3DS-Style-944211258). Palette assignments and 2nd frames by kittenchilly. + * Cyclizar, Dipplin, Farigiraf, Glimmet, Glimmora, Greavard, Iron Moth, Revavroom, Tadbulb, Paldean Tauros (all three of them), Tinkaton and Paldean Wooper. +* Further Gen 9 Pokémon front/back sprite improvements by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4414 + * Source: [PokéCommunity](https://www.pokecommunity.com/threads/ds-style-gen-vii-and-beyond-pok%C3%A9mon-sprite-repository-in-64x64.368703/post-10814369) + * Dolliv, Arboliva, Charcadet, Mabosstiff, Tinkatink, Tinkatuff, Tinkaton and Chien-Pao. +### Fixed +* Fixed Lycanroc Dusk and Midnight forms using Midday's backsprite by @Eemeliri in https://github.com/rh-hideout/pokeemerald-expansion/pull/4430 +* Fixed Tatsugiri Droopy back sprite palette by @cafei-uh in https://github.com/rh-hideout/pokeemerald-expansion/pull/4455 + +## ⚔️ Battle General ⚔️ ## +### Changed +* Turned `B_RESTORE_HELD_BATTLE_ITEMS` into a generational config by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/4402 +### Fixed +* Fixed battle Partner trainer class and potential OOB-related issues by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4422 + +## 🤹 Moves 🤹 +### Fixed +* Fixed Quash not properly working when `B_RECALC_TURN_AFTER_ACTIONS` is set to `GEN_8` or greater by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4419 +* Fixed Will-O-Wisp's name capitalization in gMovesInfo by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/4425 +* Fixed Thunder Cage not printing the right battle message by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4426 +* Fixed Diamond Storm missing its effect by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/4489 +* Fixed Mortal Spin's description by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/4489 +* Fixed Assist being able to call `MOVE_NONE` by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/4491 + +## 🎭 Abilities 🎭 +### Changed +* Changed the Embody Aspect defines to use the full form name, to be in line with the species define by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4439 + * Eg. `ABILITY_EMBODY_ASPECT_TEAL` -> `ABILITY_EMBODY_ASPECT_TEAL_MASK`. +### Fixed +* Fixed Intimidate/Supersweet Syrup playing their animation and not printing the right message for battlers at -6 stage Attack/Evasion by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4406 +* Fixed ability pop ups not respecting `abilityPopupOverwrite` in tests by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4423 +* Fixed Dancer copying multi-target moves by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4437 +* Fixed Hospitality triggering on a fainted mon by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4450 +* Fixed Embody Aspect (Teal Mask) boosting Sp. Attack instead of Speed by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4439 +* Fixed lingering long ability popup names by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4456 +* Fixed Fur Coat not being skipped by Mold Breaker abilities by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4459 +* Fixed Color change not being triggered by Future Sight or Doom Desire by @AlexOn1ine and @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4472 +* Fixes Magic Bounce only working for battlers in certain positions by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4464 +* Fixed Costar, Zero to Hero, Supreme Overlord and Ruin abilities' switch-in battle messages showing sometimes incorrectly by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/4500 + * Cleanup by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4511 + +## 🧶 Items 🧶 +### Fixed +* Fixed typo in Rotom Catalogue description by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4433 +* Eject item fixes (Eject Button/Pack): + * Fixed regression from 1.8.2 that caused Eject Pack to not trigger upon self-inflicted stat decreases by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4463 + * Fixed Eject Items causing wrong Pokémon taking damage by entry hazards by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/4465 + * Cleanup by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4497 +* Fixed Flute Items being consumed in battle by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4496 +* Fixed Red Card activating if the holder was switched in in the same turn (eg. via Endure) by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4482 + +## 🤖 Battle AI 🤖 +### Changed +* `AI_FLAG_SMART_SWITCHING` flag now automatically sets `AI_FLAG_SMART_MON_CHOICES` as well by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4405 + * Cleanup by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4409 +* Corrected `IsDamageMoveUsable`'s name to `IsDamageMoveUnusable` by @WillKolada in https://github.com/rh-hideout/pokeemerald-expansion/pull/4476 +* Fixed AI not knowing that Steam Roller fails when there's no terrain by @WillKolada in https://github.com/rh-hideout/pokeemerald-expansion/pull/4476 + * Cleanup by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4498 + +## 🧪 Test Runner 🧪 +### Added +* Added missing Color change tests by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4472 +### Changed +### Fixed +* Fixed AI test error messages by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4404 + * The error messages for `EXPECT_MOVE` and `EXPECT_SWITCH` were backwards, saying, e.g. `Expected MOVE, got SWITCH` when it should say `Expected SWITCH, got MOVE`. +* Fixed typos in Embody Aspect tests by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4439 +* Fixed Battle Test organization by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4504 + * Fixed Cud Chew's file being in the move effect folder. + * Fixed Cud Chew's file name and test names (Cud Chuw). + * Fixed Gastro Acid and Role Play's files being in the ability folder. + * Moved Recoil file to move flags folder. + * Renamed White Herb's file to `restore_stats.c`. + * Renamed Techno Blast's file to `change_type_on_item.c`. + * `semi_invulnerable_moves.c` to `semi_invulnerable.c`. + * `two_turn_moves.c` to `two_turns_attack.c`. + * Combined Burn Up/Double Shock to a single file `fail_if_not_arg_type.c` + * Added Spit Up/Swallow files that point Stockpile's file. + * Moved secondary effect files to their own folder. + * Combinations of secondary effects moved to their own folder + * Split `hit_set_entry_hazards.c` to separate files for Spikes/Stealth Rock. + * Grouped Hex/Venoshock to the same file `double_power_on_arg_status.c` + +## New Contributors +* @jschoeny made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4407 +* @Eemeliri made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4430 +* @cafei-uh made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4455 +* @PhallenTree made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4465 +* @WillKolada made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4476 +* @cawtds made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4503 +* @lolbinarycat made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4509 + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.8.2...expansion/1.8.3 + + diff --git a/docs/changelogs/template.md b/docs/changelogs/template.md index 6d1ce784a2..b70a44ce54 100644 --- a/docs/changelogs/template.md +++ b/docs/changelogs/template.md @@ -7,7 +7,7 @@ ``` ## 🌋 *IMPORTANT CHANGES* 🌋 -* We deleted the whole repo LOL by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3367 +* N/A ## 💥 *Softlock/Crash fixes* 💥 * N/A @@ -119,7 +119,7 @@ ## New Contributors -* Tony +* N/A **Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.Y.Z...expansion/1.Y.Z diff --git a/include/constants/expansion.h b/include/constants/expansion.h index b72429d619..e1e228fd9b 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.2 +// 1.8.3 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 8 -#define EXPANSION_VERSION_PATCH 2 +#define EXPANSION_VERSION_PATCH 3 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 889a4b8af8..f8ea34e912 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -335,7 +335,7 @@ static void RemoveAllTerrains(void); static bool8 CanAbilityPreventStatLoss(u16 abilityDef, bool8 isIntimidate); static bool8 CanBurnHitThaw(u16 move); static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent); -static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount); +static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount, u16 usedMove); static void Cmd_attackcanceler(void); static void Cmd_accuracycheck(void); @@ -6334,7 +6334,7 @@ static void Cmd_moveend(void) case MOVEEND_SET_EVOLUTION_TRACKER: // If the Pokémon needs to keep track of move usage for its evolutions, do it if (originallyUsedMove != MOVE_NONE) - TryUpdateEvolutionTracker(EVO_LEVEL_MOVE_TWENTY_TIMES, 1); + TryUpdateEvolutionTracker(EVO_LEVEL_MOVE_TWENTY_TIMES, 1, originallyUsedMove); gBattleScripting.moveendState++; break; case MOVEEND_CLEAR_BITS: // Clear/Set bits for things like using a move for all targets and all hits. @@ -16822,7 +16822,7 @@ void BS_RunStatChangeItems(void) ItemBattleEffects(ITEMEFFECT_STATS_CHANGED, GetBattlerForBattleScript(cmd->battler), FALSE); } -static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount) +static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount, u16 usedMove) { u32 i; @@ -16847,9 +16847,19 @@ static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount) // We only have 9 bits to use u16 val = min(511, GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_EVOLUTION_TRACKER) + upAmount); // Reset progress if you faint for the recoil method. - if (gBattleMons[gBattlerAttacker].hp == 0 && (evolutionMethod == EVO_LEVEL_RECOIL_DAMAGE_MALE || evolutionMethod == EVO_LEVEL_RECOIL_DAMAGE_FEMALE)) - val = 0; - SetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_EVOLUTION_TRACKER, &val); + switch (evolutionMethod) + { + case EVO_LEVEL_MOVE_TWENTY_TIMES: + if (evolutions[i].param == usedMove) + SetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_EVOLUTION_TRACKER, &val); + break; + case EVO_LEVEL_RECOIL_DAMAGE_MALE: + case EVO_LEVEL_RECOIL_DAMAGE_FEMALE: + if (gBattleMons[gBattlerAttacker].hp == 0) + val = 0; + SetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_EVOLUTION_TRACKER, &val); + break; + } return; } } @@ -16859,8 +16869,18 @@ static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount) void BS_TryUpdateRecoilTracker(void) { NATIVE_ARGS(); - TryUpdateEvolutionTracker(EVO_LEVEL_RECOIL_DAMAGE_MALE, gBattleMoveDamage); - TryUpdateEvolutionTracker(EVO_LEVEL_RECOIL_DAMAGE_FEMALE, gBattleMoveDamage); + u8 gender = GetMonGender(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]]); + + switch(gender) + { + case MON_MALE: + TryUpdateEvolutionTracker(EVO_LEVEL_RECOIL_DAMAGE_MALE, gBattleMoveDamage, MOVE_NONE); + break; + case MON_FEMALE: + TryUpdateEvolutionTracker(EVO_LEVEL_RECOIL_DAMAGE_FEMALE, gBattleMoveDamage, MOVE_NONE); + break; + } + gBattlescriptCurrInstr = cmd->nextInstr; } diff --git a/test/battle/ability/beads_of_ruin.c b/test/battle/ability/beads_of_ruin.c index 1b2eb2a522..2fc4f9cdc1 100644 --- a/test/battle/ability/beads_of_ruin.c +++ b/test/battle/ability/beads_of_ruin.c @@ -29,3 +29,47 @@ SINGLE_BATTLE_TEST("Beads of Ruin reduces Sp. Def if opposing mon's ability does EXPECT_MUL_EQ(damage[1], Q_4_12(1.33), damage[0]); } } + +SINGLE_BATTLE_TEST("Beads of Ruin's message displays correctly after all battlers fainted - Player") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET) { HP(1);} + PLAYER(SPECIES_CHI_YU); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_RUINATION); } + } SCENE { + HP_BAR(opponent, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, opponent); + // Everyone faints. + MESSAGE("Go! Chi-Yu!"); + ABILITY_POPUP(player, ABILITY_BEADS_OF_RUIN); + MESSAGE("Chi-Yu's Beads of Ruin weakened the Sp. Def of all surrounding Pokémon!"); + MESSAGE("2 sent out Wobbuffet!"); + } +} + +SINGLE_BATTLE_TEST("Beads of Ruin's message displays correctly after all battlers fainted - Opponent") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(1);} + OPPONENT(SPECIES_CHI_YU); + } WHEN { + TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_RUINATION); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + // Everyone faints. + MESSAGE("Go! Wobbuffet!"); + MESSAGE("2 sent out Chi-Yu!"); + ABILITY_POPUP(opponent, ABILITY_BEADS_OF_RUIN); + MESSAGE("Foe Chi-Yu's Beads of Ruin weakened the Sp. Def of all surrounding Pokémon!"); + } +} diff --git a/test/battle/ability/costar.c b/test/battle/ability/costar.c new file mode 100644 index 0000000000..7674ab0966 --- /dev/null +++ b/test/battle/ability/costar.c @@ -0,0 +1,8 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Costar copies an ally's stat stages upon entering battle"); + +// Copy from Ruin ability tests +TO_DO_BATTLE_TEST("Costar's message displays correctly after all battlers fainted - Player"); +TO_DO_BATTLE_TEST("Costar's message displays correctly after all battlers fainted - Opponent"); diff --git a/test/battle/move_effect/cud_chuw.c b/test/battle/ability/cud_chew.c similarity index 93% rename from test/battle/move_effect/cud_chuw.c rename to test/battle/ability/cud_chew.c index ba59d355a4..305969aa93 100644 --- a/test/battle/move_effect/cud_chuw.c +++ b/test/battle/ability/cud_chew.c @@ -1,7 +1,7 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Cud Chuw will activate Kee Berry effect again on the next turn") +SINGLE_BATTLE_TEST("Cud Chew will activate Kee Berry effect again on the next turn") { GIVEN { ASSUME(gItemsInfo[ITEM_KEE_BERRY].holdEffect == HOLD_EFFECT_KEE_BERRY); @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Cud Chuw will activate Kee Berry effect again on the next tu } } -SINGLE_BATTLE_TEST("Cud Chuw will activate Oran Berry effect again on the next turn") +SINGLE_BATTLE_TEST("Cud Chew will activate Oran Berry effect again on the next turn") { GIVEN { ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP); diff --git a/test/battle/ability/supreme_overlord.c b/test/battle/ability/supreme_overlord.c index a01a5d6306..5d24850245 100644 --- a/test/battle/ability/supreme_overlord.c +++ b/test/battle/ability/supreme_overlord.c @@ -1,7 +1,7 @@ #include "global.h" #include "test/battle.h" -DOUBLE_BATTLE_TEST("Supreme Overlord boosts Attack by an additive 10% per fainted mon on the side", s16 damage) +DOUBLE_BATTLE_TEST("Supreme Overlord boosts Attack by an additive 10% per fainted mon on its side upon switch in", s16 damage) { bool32 switchMon = 0; PARAMETRIZE { switchMon = FALSE; } @@ -21,6 +21,10 @@ DOUBLE_BATTLE_TEST("Supreme Overlord boosts Attack by an additive 10% per fainte TURN { SWITCH(playerLeft, 0); } TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } } SCENE { + if (switchMon) { + ABILITY_POPUP(playerLeft, ABILITY_SUPREME_OVERLORD); + MESSAGE("Kingambit gained strength from the fallen!"); + } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); HP_BAR(opponentLeft, captureDamage: &results[i].damage); } FINALLY { @@ -51,6 +55,8 @@ DOUBLE_BATTLE_TEST("Supreme Overlord's boost caps at a 1.5x multipler", s16 dama TURN { SWITCH(playerRight, 3); } TURN { MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); } } SCENE { + ABILITY_POPUP(playerRight, ABILITY_SUPREME_OVERLORD); + MESSAGE("Kingambit gained strength from the fallen!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); HP_BAR(opponentLeft, captureDamage: &results[i].damage); } FINALLY { @@ -85,3 +91,52 @@ SINGLE_BATTLE_TEST("Supreme Overlord does not boost attack if party members are EXPECT_EQ(results[0].damage, results[1].damage); } } + +SINGLE_BATTLE_TEST("Supreme Overlord's message displays correctly after all battlers fainted - Player") +{ + // For some reason the Ability Pop Up fails to appear after Explosion. + KNOWN_FAILING; + GIVEN { + ASSUME(gMovesInfo[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET) { HP(1);} + PLAYER(SPECIES_KINGAMBIT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_KOWTOW_CLEAVE); } + } SCENE { + HP_BAR(opponent, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, opponent); + // Everyone faints. + MESSAGE("Go! Kingambit!"); + ABILITY_POPUP(player, ABILITY_SUPREME_OVERLORD); + MESSAGE("Kingambit gained strength from the fallen!"); + MESSAGE("2 sent out Wobbuffet!"); + } +} + +SINGLE_BATTLE_TEST("Supreme Overlord's message displays correctly after all battlers fainted - Opponent") +{ + // For some reason the Ability Pop Up fails to appear after Explosion. + KNOWN_FAILING; + GIVEN { + ASSUME(gMovesInfo[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(1);} + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KINGAMBIT); + } WHEN { + TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } + TURN { SWITCH(opponent, 2); MOVE(player, MOVE_TACKLE); } + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + // Everyone faints. + MESSAGE("Go! Wobbuffet!"); + MESSAGE("2 sent out Kingambit!"); + ABILITY_POPUP(opponent, ABILITY_SUPREME_OVERLORD); + MESSAGE("Foe Kingambit gained strength from the fallen!"); + } +} diff --git a/test/battle/ability/sword_of_ruin.c b/test/battle/ability/sword_of_ruin.c index c6c1ffc4b2..329031f68d 100644 --- a/test/battle/ability/sword_of_ruin.c +++ b/test/battle/ability/sword_of_ruin.c @@ -29,3 +29,47 @@ SINGLE_BATTLE_TEST("Sword of Ruin reduces Defense if opposing mon's ability does EXPECT_MUL_EQ(damage[1], Q_4_12(1.33), damage[0]); } } + +SINGLE_BATTLE_TEST("Sword of Ruin's message displays correctly after all battlers fainted - Player") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET) { HP(1);} + PLAYER(SPECIES_CHIEN_PAO); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_RUINATION); } + } SCENE { + HP_BAR(opponent, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, opponent); + // Everyone faints. + MESSAGE("Go! Chien-Pao!"); + ABILITY_POPUP(player, ABILITY_SWORD_OF_RUIN); + MESSAGE("Chien-Pao's Sword of Ruin weakened the Defense of all surrounding Pokémon!"); + MESSAGE("2 sent out Wobbuffet!"); + } +} + +SINGLE_BATTLE_TEST("Sword of Ruin's message displays correctly after all battlers fainted - Opponent") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(1);} + OPPONENT(SPECIES_CHIEN_PAO); + } WHEN { + TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_RUINATION); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + // Everyone faints. + MESSAGE("Go! Wobbuffet!"); + MESSAGE("2 sent out Chien-Pao!"); + ABILITY_POPUP(opponent, ABILITY_SWORD_OF_RUIN); + MESSAGE("Foe Chien-Pao's Sword of Ruin weakened the Defense of all surrounding Pokémon!"); + } +} diff --git a/test/battle/ability/tablets_of_ruin.c b/test/battle/ability/tablets_of_ruin.c index d1f9cf3d2e..abdaab7563 100644 --- a/test/battle/ability/tablets_of_ruin.c +++ b/test/battle/ability/tablets_of_ruin.c @@ -29,3 +29,47 @@ SINGLE_BATTLE_TEST("Tablets of Ruin reduces Attack if opposing mon's ability doe EXPECT_MUL_EQ(damage[0], Q_4_12(1.33), damage[1]); } } + +SINGLE_BATTLE_TEST("Tablets of Ruin's message displays correctly after all battlers fainted - Player") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET) { HP(1);} + PLAYER(SPECIES_WO_CHIEN); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_RUINATION); } + } SCENE { + HP_BAR(opponent, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, opponent); + // Everyone faints. + MESSAGE("Go! Wo-Chien!"); + ABILITY_POPUP(player, ABILITY_TABLETS_OF_RUIN); + MESSAGE("Wo-Chien's Tablets of Ruin weakened the Attack of all surrounding Pokémon!"); + MESSAGE("2 sent out Wobbuffet!"); + } +} + +SINGLE_BATTLE_TEST("Tablets of Ruin's message displays correctly after all battlers fainted - Opponent") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(1);} + OPPONENT(SPECIES_WO_CHIEN); + } WHEN { + TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_RUINATION); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + // Everyone faints. + MESSAGE("Go! Wobbuffet!"); + MESSAGE("2 sent out Wo-Chien!"); + ABILITY_POPUP(opponent, ABILITY_TABLETS_OF_RUIN); + MESSAGE("Foe Wo-Chien's Tablets of Ruin weakened the Attack of all surrounding Pokémon!"); + } +} diff --git a/test/battle/ability/vessel_of_ruin.c b/test/battle/ability/vessel_of_ruin.c index 4d369df691..ce8eae4dab 100644 --- a/test/battle/ability/vessel_of_ruin.c +++ b/test/battle/ability/vessel_of_ruin.c @@ -29,3 +29,47 @@ SINGLE_BATTLE_TEST("Vessel of Ruin reduces Sp. Atk if opposing mon's ability doe EXPECT_MUL_EQ(damage[0], Q_4_12(1.33), damage[1]); } } + +SINGLE_BATTLE_TEST("Vessel of Ruin's message displays correctly after all battlers fainted - Player") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET) { HP(1);} + PLAYER(SPECIES_TING_LU); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_RUINATION); } + } SCENE { + HP_BAR(opponent, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, opponent); + // Everyone faints. + MESSAGE("Go! Ting-Lu!"); + ABILITY_POPUP(player, ABILITY_VESSEL_OF_RUIN); + MESSAGE("Ting-Lu's Vessel of Ruin weakened the Sp. Atk of all surrounding Pokémon!"); + MESSAGE("2 sent out Wobbuffet!"); + } +} + +SINGLE_BATTLE_TEST("Vessel of Ruin's message displays correctly after all battlers fainted - Opponent") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(1);} + OPPONENT(SPECIES_TING_LU); + } WHEN { + TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_RUINATION); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + // Everyone faints. + MESSAGE("Go! Wobbuffet!"); + MESSAGE("2 sent out Ting-Lu!"); + ABILITY_POPUP(opponent, ABILITY_VESSEL_OF_RUIN); + MESSAGE("Foe Ting-Lu's Vessel of Ruin weakened the Sp. Atk of all surrounding Pokémon!"); + } +} diff --git a/test/battle/ability/zero_to_hero.c b/test/battle/ability/zero_to_hero.c index 4f8cfc8a65..05914be5ee 100644 --- a/test/battle/ability/zero_to_hero.c +++ b/test/battle/ability/zero_to_hero.c @@ -136,6 +136,52 @@ SINGLE_BATTLE_TEST("Imposter doesn't apply the heroic transformation message whe } THEN { EXPECT_EQ(player->species, SPECIES_PALAFIN_HERO); } } +SINGLE_BATTLE_TEST("Zero to Hero's message displays correctly after all battlers fainted - Player") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_PALAFIN_ZERO); + PLAYER(SPECIES_WOBBUFFET) { HP(1);} + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FLIP_TURN); SEND_OUT(player, 1); } + TURN { MOVE(opponent, MOVE_EXPLOSION); SEND_OUT(player, 0); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + HP_BAR(opponent, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, opponent); + // Everyone faints. + MESSAGE("Go! Palafin!"); + ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO); + MESSAGE("Palafin underwent a heroic transformation!"); + MESSAGE("2 sent out Wobbuffet!"); + } +} + +SINGLE_BATTLE_TEST("Zero to Hero's message displays correctly after all battlers fainted - Opponent") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PALAFIN_ZERO); + OPPONENT(SPECIES_WOBBUFFET) { HP(1);} + } WHEN { + TURN { MOVE(opponent, MOVE_FLIP_TURN); SEND_OUT(opponent, 1); } + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 0); } + TURN { MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_TACKLE); } + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + // Everyone faints. + MESSAGE("Go! Wobbuffet!"); + MESSAGE("2 sent out Palafin!"); + ABILITY_POPUP(opponent, ABILITY_ZERO_TO_HERO); + MESSAGE("Foe Palafin underwent a heroic transformation!"); + } +} + // Write Trace test and move this one to that file (including every other ability that can't be copied) SINGLE_BATTLE_TEST("Zero to Hero cannot be copied by Trace") { diff --git a/test/battle/hold_effect/white_herb.c b/test/battle/hold_effect/restore_stats.c similarity index 100% rename from test/battle/hold_effect/white_herb.c rename to test/battle/hold_effect/restore_stats.c diff --git a/test/battle/move_effect/burn_up.c b/test/battle/move_effect/burn_up.c deleted file mode 100644 index 46b26a49a0..0000000000 --- a/test/battle/move_effect/burn_up.c +++ /dev/null @@ -1,54 +0,0 @@ -#include "global.h" -#include "test/battle.h" - -ASSUMPTIONS -{ - ASSUME(gMovesInfo[MOVE_BURN_UP].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE); - ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) == TRUE); - ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_FIRE || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_FIRE); - ASSUME(gSpeciesInfo[SPECIES_CYNDAQUIL].types[0] == TYPE_FIRE || gSpeciesInfo[SPECIES_CYNDAQUIL].types[1] == TYPE_FIRE); -} - -SINGLE_BATTLE_TEST("Burn Up user loses its Fire-type") -{ - GIVEN { - PLAYER(SPECIES_CYNDAQUIL); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_BURN_UP); } - TURN { MOVE(player, MOVE_BURN_UP); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); - MESSAGE("Cyndaquil burned itself out!"); - MESSAGE("Cyndaquil used Burn Up!"); - MESSAGE("But it failed!"); - } -} - -SINGLE_BATTLE_TEST("Burn Up fails if the user isn't a Fire-type") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_BURN_UP); } - } SCENE { - NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); } - MESSAGE("Wobbuffet used Burn Up!"); - MESSAGE("But it failed!"); - } -} - -SINGLE_BATTLE_TEST("Burn Up user loses its Fire-type if enemy faints") -{ - GIVEN { - PLAYER(SPECIES_CYNDAQUIL); - OPPONENT(SPECIES_WOBBUFFET) { HP(1); } - } WHEN { - TURN { MOVE(player, MOVE_BURN_UP); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); - HP_BAR(opponent, hp: 0); - MESSAGE("Cyndaquil burned itself out!"); - } -} diff --git a/test/battle/move_effect/techno_blast.c b/test/battle/move_effect/change_type_on_item.c similarity index 100% rename from test/battle/move_effect/techno_blast.c rename to test/battle/move_effect/change_type_on_item.c diff --git a/test/battle/move_effect/double_shock.c b/test/battle/move_effect/double_shock.c deleted file mode 100644 index b7f59a3ab7..0000000000 --- a/test/battle/move_effect/double_shock.c +++ /dev/null @@ -1,54 +0,0 @@ -#include "global.h" -#include "test/battle.h" - -ASSUMPTIONS -{ - ASSUME(gMovesInfo[MOVE_DOUBLE_SHOCK].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE); - ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_DOUBLE_SHOCK, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_ELECTRIC) == TRUE); - ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_ELECTRIC || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_ELECTRIC); - ASSUME(gSpeciesInfo[SPECIES_PIKACHU].types[0] == TYPE_ELECTRIC || gSpeciesInfo[SPECIES_PIKACHU].types[1] == TYPE_ELECTRIC); -} - -SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type") -{ - GIVEN { - PLAYER(SPECIES_PIKACHU); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_DOUBLE_SHOCK); } - TURN { MOVE(player, MOVE_DOUBLE_SHOCK); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player); - MESSAGE("Pikachu used up all of its electricity!"); - MESSAGE("Pikachu used Double Shock!"); - MESSAGE("But it failed!"); - } -} - -SINGLE_BATTLE_TEST("Double Shock fails if the user isn't an Electric-type") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_DOUBLE_SHOCK); } - } SCENE { - NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player); } - MESSAGE("Wobbuffet used Double Shock!"); - MESSAGE("But it failed!"); - } -} - -SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type if enemy faints") -{ - GIVEN { - PLAYER(SPECIES_PIKACHU); - OPPONENT(SPECIES_WOBBUFFET) { HP(1); } - } WHEN { - TURN { MOVE(player, MOVE_DOUBLE_SHOCK); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player); - HP_BAR(opponent, hp: 0); - MESSAGE("Pikachu used up all of its electricity!"); - } -} diff --git a/test/battle/move_effect/fail_if_not_arg_type.c b/test/battle/move_effect/fail_if_not_arg_type.c new file mode 100644 index 0000000000..4ffe0a0323 --- /dev/null +++ b/test/battle/move_effect/fail_if_not_arg_type.c @@ -0,0 +1,112 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Burn Up user loses its Fire-type") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_BURN_UP].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE); + ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) == TRUE); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_FIRE || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_FIRE); + ASSUME(gSpeciesInfo[SPECIES_CYNDAQUIL].types[0] == TYPE_FIRE || gSpeciesInfo[SPECIES_CYNDAQUIL].types[1] == TYPE_FIRE); + PLAYER(SPECIES_CYNDAQUIL); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); } + TURN { MOVE(player, MOVE_BURN_UP); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); + MESSAGE("Cyndaquil burned itself out!"); + MESSAGE("Cyndaquil used Burn Up!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Burn Up fails if the user isn't a Fire-type") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_BURN_UP].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE); + ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) == TRUE); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_FIRE || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_FIRE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); } + } SCENE { + NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); } + MESSAGE("Wobbuffet used Burn Up!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Burn Up user loses its Fire-type if enemy faints") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_BURN_UP].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE); + ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) == TRUE); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_FIRE || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_FIRE); + ASSUME(gSpeciesInfo[SPECIES_CYNDAQUIL].types[0] == TYPE_FIRE || gSpeciesInfo[SPECIES_CYNDAQUIL].types[1] == TYPE_FIRE); + PLAYER(SPECIES_CYNDAQUIL); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); + HP_BAR(opponent, hp: 0); + MESSAGE("Cyndaquil burned itself out!"); + } +} + +SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DOUBLE_SHOCK].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE); + ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_DOUBLE_SHOCK, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_ELECTRIC) == TRUE); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_ELECTRIC || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_ELECTRIC); + ASSUME(gSpeciesInfo[SPECIES_PIKACHU].types[0] == TYPE_ELECTRIC || gSpeciesInfo[SPECIES_PIKACHU].types[1] == TYPE_ELECTRIC); + PLAYER(SPECIES_PIKACHU); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DOUBLE_SHOCK); } + TURN { MOVE(player, MOVE_DOUBLE_SHOCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player); + MESSAGE("Pikachu used up all of its electricity!"); + MESSAGE("Pikachu used Double Shock!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Double Shock fails if the user isn't an Electric-type") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DOUBLE_SHOCK].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE); + ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_DOUBLE_SHOCK, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_ELECTRIC) == TRUE); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_ELECTRIC || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_ELECTRIC); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DOUBLE_SHOCK); } + } SCENE { + NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player); } + MESSAGE("Wobbuffet used Double Shock!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type if enemy faints") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DOUBLE_SHOCK].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE); + ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_DOUBLE_SHOCK, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_ELECTRIC) == TRUE); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_ELECTRIC || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_ELECTRIC); + ASSUME(gSpeciesInfo[SPECIES_PIKACHU].types[0] == TYPE_ELECTRIC || gSpeciesInfo[SPECIES_PIKACHU].types[1] == TYPE_ELECTRIC); + PLAYER(SPECIES_PIKACHU); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_DOUBLE_SHOCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player); + HP_BAR(opponent, hp: 0); + MESSAGE("Pikachu used up all of its electricity!"); + } +} diff --git a/test/battle/ability/gastro_acid.c b/test/battle/move_effect/gastro_acid.c similarity index 100% rename from test/battle/ability/gastro_acid.c rename to test/battle/move_effect/gastro_acid.c diff --git a/test/battle/move_effect/hex.c b/test/battle/move_effect/hex.c deleted file mode 100644 index 25660d7309..0000000000 --- a/test/battle/move_effect/hex.c +++ /dev/null @@ -1,34 +0,0 @@ -#include "global.h" -#include "test/battle.h" - -ASSUMPTIONS -{ - ASSUME(gMovesInfo[MOVE_HEX].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS); - ASSUME(gMovesInfo[MOVE_HEX].argument == STATUS1_ANY); -} - -SINGLE_BATTLE_TEST("Hex deals double damage to foes with a status", s16 damage) -{ - u32 status1; - PARAMETRIZE { status1 = STATUS1_NONE; } - PARAMETRIZE { status1 = STATUS1_SLEEP; } - PARAMETRIZE { status1 = STATUS1_POISON; } - PARAMETRIZE { status1 = STATUS1_BURN; } - PARAMETRIZE { status1 = STATUS1_FREEZE; } - PARAMETRIZE { status1 = STATUS1_PARALYSIS; } - PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; } - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); } - } WHEN { - TURN { MOVE(player, MOVE_HEX); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_HEX, player); - HP_BAR(opponent, captureDamage: &results[i].damage); - } THEN { - if (i > 0) - EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[i].damage); - if (i > 1) - EXPECT_EQ(results[i-1].damage, results[i].damage); - } -} diff --git a/test/battle/move_effect/hit_set_entry_hazardss.c b/test/battle/move_effect/hit_set_entry_hazardss.c deleted file mode 100644 index fa405ed3b3..0000000000 --- a/test/battle/move_effect/hit_set_entry_hazardss.c +++ /dev/null @@ -1,117 +0,0 @@ -#include "global.h" -#include "test/battle.h" - -ASSUMPTIONS -{ - ASSUME(MoveHasAdditionalEffect(MOVE_STONE_AXE, MOVE_EFFECT_STEALTH_ROCK) == TRUE); - ASSUME(MoveHasAdditionalEffect(MOVE_CEASELESS_EDGE, MOVE_EFFECT_SPIKES) == TRUE); -} - -SINGLE_BATTLE_TEST("Stone Axe / Ceaseless Edge set up hazards after hitting the target") -{ - u16 move; - PARAMETRIZE { move = MOVE_STONE_AXE; } - PARAMETRIZE { move = MOVE_CEASELESS_EDGE; } - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, move); } - TURN { SWITCH(opponent, 1); } - } SCENE { - s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); - ANIMATION(ANIM_TYPE_MOVE, move, player); - HP_BAR(opponent); - if (move == MOVE_CEASELESS_EDGE) { - MESSAGE("Spikes were scattered all around the opposing team!"); - } - else { - MESSAGE("Pointed stones float in the air around the opposing team!"); - } - MESSAGE("2 sent out Wobbuffet!"); - if (move == MOVE_CEASELESS_EDGE) { - HP_BAR(opponent, damage: maxHP / 8); - MESSAGE("Foe Wobbuffet is hurt by spikes!"); - } - else { - HP_BAR(opponent, damage: maxHP / 8); - MESSAGE("Pointed stones dug into Foe Wobbuffet!"); - } - } -} - -SINGLE_BATTLE_TEST("Ceaseless Edge can set up to 3 layers of Spikes") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WYNAUT); - } WHEN { - TURN { MOVE(player, MOVE_CEASELESS_EDGE); } - TURN { MOVE(player, MOVE_CEASELESS_EDGE); } - TURN { MOVE(player, MOVE_CEASELESS_EDGE); } - TURN { MOVE(player, MOVE_CEASELESS_EDGE); } - TURN { SWITCH(opponent, 1); } - } SCENE { - s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); - - ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); - HP_BAR(opponent); - MESSAGE("Spikes were scattered all around the opposing team!"); - - ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); - HP_BAR(opponent); - MESSAGE("Spikes were scattered all around the opposing team!"); - - ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); - HP_BAR(opponent); - MESSAGE("Spikes were scattered all around the opposing team!"); - - ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); - HP_BAR(opponent); - NOT MESSAGE("Spikes were scattered all around the opposing team!"); - - MESSAGE("2 sent out Wynaut!"); - HP_BAR(opponent, damage: maxHP / 4); - MESSAGE("Foe Wynaut is hurt by spikes!"); - } -} - -SINGLE_BATTLE_TEST("Stone Axe can set up pointed stones only once") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WYNAUT); - } WHEN { - TURN { MOVE(player, MOVE_STONE_AXE); } - TURN { MOVE(player, MOVE_STONE_AXE); } - TURN { MOVE(player, MOVE_STONE_AXE); } - TURN { MOVE(player, MOVE_STONE_AXE); } - TURN { SWITCH(opponent, 1); } - } SCENE { - s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); - - ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); - HP_BAR(opponent); - MESSAGE("Pointed stones float in the air around the opposing team!"); - - ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); - HP_BAR(opponent); - NOT MESSAGE("Pointed stones float in the air around the opposing team!"); - - ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); - HP_BAR(opponent); - NOT MESSAGE("Pointed stones float in the air around the opposing team!"); - - ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); - HP_BAR(opponent); - NOT MESSAGE("Pointed stones float in the air around the opposing team!"); - - MESSAGE("2 sent out Wynaut!"); - HP_BAR(opponent, damage: maxHP / 8); - MESSAGE("Pointed stones dug into Foe Wynaut!"); - } -} - diff --git a/test/battle/ability/role_play.c b/test/battle/move_effect/role_play.c similarity index 100% rename from test/battle/ability/role_play.c rename to test/battle/move_effect/role_play.c diff --git a/test/battle/move_effect/semi_invulnerable_moves.c b/test/battle/move_effect/semi_invulnerable.c similarity index 100% rename from test/battle/move_effect/semi_invulnerable_moves.c rename to test/battle/move_effect/semi_invulnerable.c diff --git a/test/battle/move_effect/spit_up.c b/test/battle/move_effect/spit_up.c new file mode 100644 index 0000000000..1291962e1f --- /dev/null +++ b/test/battle/move_effect/spit_up.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// Go to test/battle/move_effect/stockpile.c for Spit Up's tests diff --git a/test/battle/move_effect/swallow.c b/test/battle/move_effect/swallow.c new file mode 100644 index 0000000000..bce0a4470c --- /dev/null +++ b/test/battle/move_effect/swallow.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// Go to test/battle/move_effect/stockpile.c for Swallow's tests diff --git a/test/battle/move_effect/two_turn_moves.c b/test/battle/move_effect/two_turns_attack.c similarity index 100% rename from test/battle/move_effect/two_turn_moves.c rename to test/battle/move_effect/two_turns_attack.c diff --git a/test/battle/move_effect/venoshock.c b/test/battle/move_effect/venoshock.c deleted file mode 100644 index feea48df10..0000000000 --- a/test/battle/move_effect/venoshock.c +++ /dev/null @@ -1,28 +0,0 @@ -#include "global.h" -#include "test/battle.h" - -ASSUMPTIONS -{ - ASSUME(gMovesInfo[MOVE_VENOSHOCK].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS); - ASSUME(gMovesInfo[MOVE_VENOSHOCK].argument == STATUS1_PSN_ANY); -} - -SINGLE_BATTLE_TEST("Venoshock's power doubles if the target is poisoned/badly poisoned", s16 damage) -{ - u32 status1; - PARAMETRIZE { status1 = 0; } - PARAMETRIZE { status1 = STATUS1_POISON; } - PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; } - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); } - } WHEN { - TURN { MOVE(player, MOVE_VENOSHOCK); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_VENOSHOCK, player); - HP_BAR(opponent, captureDamage: &results[i].damage); - } FINALLY { - EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); - EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[2].damage); - } -} diff --git a/test/battle/move_effect/bug_bite.c b/test/battle/move_effect_secondary/bug_bite.c similarity index 100% rename from test/battle/move_effect/bug_bite.c rename to test/battle/move_effect_secondary/bug_bite.c diff --git a/test/battle/move_effect/burn_hit.c b/test/battle/move_effect_secondary/burn.c similarity index 100% rename from test/battle/move_effect/burn_hit.c rename to test/battle/move_effect_secondary/burn.c diff --git a/test/battle/move_effect/confusion_hit.c b/test/battle/move_effect_secondary/confusion.c similarity index 100% rename from test/battle/move_effect/confusion_hit.c rename to test/battle/move_effect_secondary/confusion.c diff --git a/test/battle/move_effect/clanging_scales.c b/test/battle/move_effect_secondary/def_minus_1.c similarity index 100% rename from test/battle/move_effect/clanging_scales.c rename to test/battle/move_effect_secondary/def_minus_1.c diff --git a/test/battle/move_effect/dire_claw.c b/test/battle/move_effect_secondary/dire_claw.c similarity index 100% rename from test/battle/move_effect/dire_claw.c rename to test/battle/move_effect_secondary/dire_claw.c diff --git a/test/battle/move_effect_secondary/double_power_on_arg_status.c b/test/battle/move_effect_secondary/double_power_on_arg_status.c new file mode 100644 index 0000000000..d147264470 --- /dev/null +++ b/test/battle/move_effect_secondary/double_power_on_arg_status.c @@ -0,0 +1,52 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Hex deals double damage to foes with a status", s16 damage) +{ + u32 status1; + PARAMETRIZE { status1 = STATUS1_NONE; } + PARAMETRIZE { status1 = STATUS1_SLEEP; } + PARAMETRIZE { status1 = STATUS1_POISON; } + PARAMETRIZE { status1 = STATUS1_BURN; } + PARAMETRIZE { status1 = STATUS1_FREEZE; } + PARAMETRIZE { status1 = STATUS1_PARALYSIS; } + PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; } + GIVEN { + ASSUME(gMovesInfo[MOVE_HEX].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS); + ASSUME(gMovesInfo[MOVE_HEX].argument == STATUS1_ANY); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); } + } WHEN { + TURN { MOVE(player, MOVE_HEX); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEX, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } THEN { + if (i > 0) + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[i].damage); + if (i > 1) + EXPECT_EQ(results[i-1].damage, results[i].damage); + } +} + +SINGLE_BATTLE_TEST("Venoshock's power doubles if the target is poisoned/badly poisoned", s16 damage) +{ + u32 status1; + PARAMETRIZE { status1 = 0; } + PARAMETRIZE { status1 = STATUS1_POISON; } + PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; } + GIVEN { + ASSUME(gMovesInfo[MOVE_VENOSHOCK].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS); + ASSUME(gMovesInfo[MOVE_VENOSHOCK].argument == STATUS1_PSN_ANY); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); } + } WHEN { + TURN { MOVE(player, MOVE_VENOSHOCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_VENOSHOCK, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[2].damage); + } +} diff --git a/test/battle/move_effect/flinch_hit.c b/test/battle/move_effect_secondary/flinch.c similarity index 100% rename from test/battle/move_effect/flinch_hit.c rename to test/battle/move_effect_secondary/flinch.c diff --git a/test/battle/move_effect/freeze_hit.c b/test/battle/move_effect_secondary/freeze.c similarity index 100% rename from test/battle/move_effect/freeze_hit.c rename to test/battle/move_effect_secondary/freeze.c diff --git a/test/battle/move_effect/paralyze_hit.c b/test/battle/move_effect_secondary/paralysis.c similarity index 100% rename from test/battle/move_effect/paralyze_hit.c rename to test/battle/move_effect_secondary/paralysis.c diff --git a/test/battle/move_effect/pay_day.c b/test/battle/move_effect_secondary/pay_day.c similarity index 100% rename from test/battle/move_effect/pay_day.c rename to test/battle/move_effect_secondary/pay_day.c diff --git a/test/battle/move_effect/poison_hit.c b/test/battle/move_effect_secondary/poison.c similarity index 86% rename from test/battle/move_effect/poison_hit.c rename to test/battle/move_effect_secondary/poison.c index f7f46df4f9..63b2816bfd 100644 --- a/test/battle/move_effect/poison_hit.c +++ b/test/battle/move_effect_secondary/poison.c @@ -1,15 +1,10 @@ #include "global.h" #include "test/battle.h" -ASSUMPTIONS -{ - ASSUME(MoveHasAdditionalEffect(MOVE_POISON_STING, MOVE_EFFECT_POISON) == TRUE); - ASSUME(MoveHasAdditionalEffect(MOVE_TWINEEDLE, MOVE_EFFECT_POISON) == TRUE); -} - SINGLE_BATTLE_TEST("Poison Sting inflicts poison") { GIVEN { + ASSUME(MoveHasAdditionalEffect(MOVE_POISON_STING, MOVE_EFFECT_POISON) == TRUE); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -29,6 +24,7 @@ SINGLE_BATTLE_TEST("Poison cannot be inflicted on Poison and Steel-type Pokémon PARAMETRIZE { mon = SPECIES_NIDORAN_M; } PARAMETRIZE { mon = SPECIES_REGISTEEL; } GIVEN { + ASSUME(MoveHasAdditionalEffect(MOVE_TWINEEDLE, MOVE_EFFECT_POISON) == TRUE); ASSUME(gSpeciesInfo[SPECIES_NIDORAN_M].types[0] == TYPE_POISON); ASSUME(gSpeciesInfo[SPECIES_REGISTEEL].types[0] == TYPE_STEEL); PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/psychic_noise.c b/test/battle/move_effect_secondary/psychic_noise.c similarity index 100% rename from test/battle/move_effect/psychic_noise.c rename to test/battle/move_effect_secondary/psychic_noise.c diff --git a/test/battle/move_effect/rapid_spin.c b/test/battle/move_effect_secondary/rapid_spin.c similarity index 100% rename from test/battle/move_effect/rapid_spin.c rename to test/battle/move_effect_secondary/rapid_spin.c diff --git a/test/battle/move_effect/sp_atk_two_down.c b/test/battle/move_effect_secondary/sp_atk_two_down.c similarity index 100% rename from test/battle/move_effect/sp_atk_two_down.c rename to test/battle/move_effect_secondary/sp_atk_two_down.c diff --git a/test/battle/move_effect/spin_out.c b/test/battle/move_effect_secondary/spd_minus_2.c similarity index 100% rename from test/battle/move_effect/spin_out.c rename to test/battle/move_effect_secondary/spd_minus_2.c diff --git a/test/battle/move_effect_secondary/spikes.c b/test/battle/move_effect_secondary/spikes.c new file mode 100644 index 0000000000..b9c72930c2 --- /dev/null +++ b/test/battle/move_effect_secondary/spikes.c @@ -0,0 +1,64 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(MoveHasAdditionalEffect(MOVE_CEASELESS_EDGE, MOVE_EFFECT_SPIKES) == TRUE); +} + +SINGLE_BATTLE_TEST("Ceaseless Edge sets up hazards after hitting the target") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("2 sent out Wobbuffet!"); + HP_BAR(opponent, damage: maxHP / 8); + MESSAGE("Foe Wobbuffet is hurt by spikes!"); + } +} + +SINGLE_BATTLE_TEST("Ceaseless Edge can set up to 3 layers of Spikes") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + MESSAGE("Spikes were scattered all around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + MESSAGE("Spikes were scattered all around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + MESSAGE("Spikes were scattered all around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + NOT MESSAGE("Spikes were scattered all around the opposing team!"); + + MESSAGE("2 sent out Wynaut!"); + HP_BAR(opponent, damage: maxHP / 4); + MESSAGE("Foe Wynaut is hurt by spikes!"); + } +} diff --git a/test/battle/move_effect_secondary/stealth_rock.c b/test/battle/move_effect_secondary/stealth_rock.c new file mode 100644 index 0000000000..034e2c347b --- /dev/null +++ b/test/battle/move_effect_secondary/stealth_rock.c @@ -0,0 +1,65 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(MoveHasAdditionalEffect(MOVE_STONE_AXE, MOVE_EFFECT_STEALTH_ROCK) == TRUE); +} + +SINGLE_BATTLE_TEST("Stone Axe sets up hazards after hitting the target") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + MESSAGE("Pointed stones float in the air around the opposing team!"); + MESSAGE("2 sent out Wobbuffet!"); + HP_BAR(opponent, damage: maxHP / 8); + MESSAGE("Pointed stones dug into Foe Wobbuffet!"); + } +} + +SINGLE_BATTLE_TEST("Stone Axe can set up pointed stones only once") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + MESSAGE("Pointed stones float in the air around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + NOT MESSAGE("Pointed stones float in the air around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + NOT MESSAGE("Pointed stones float in the air around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + NOT MESSAGE("Pointed stones float in the air around the opposing team!"); + + MESSAGE("2 sent out Wynaut!"); + HP_BAR(opponent, damage: maxHP / 8); + MESSAGE("Pointed stones dug into Foe Wynaut!"); + } +} + diff --git a/test/battle/move_effect/syrup_bomb.c b/test/battle/move_effect_secondary/syrup_bomb.c similarity index 98% rename from test/battle/move_effect/syrup_bomb.c rename to test/battle/move_effect_secondary/syrup_bomb.c index 57831abb55..1e6d613721 100644 --- a/test/battle/move_effect/syrup_bomb.c +++ b/test/battle/move_effect_secondary/syrup_bomb.c @@ -1,6 +1,11 @@ #include "global.h" #include "test/battle.h" +ASSUMPTIONS +{ + ASSUME(MoveHasAdditionalEffect(MOVE_SYRUP_BOMB, MOVE_EFFECT_SYRUP_BOMB) == TRUE); +} + SINGLE_BATTLE_TEST("Syrup Bomb covers the foe in sticky syrup for 3 turns") { u8 j; diff --git a/test/battle/move_effect/rampage.c b/test/battle/move_effect_secondary/thrash.c similarity index 100% rename from test/battle/move_effect/rampage.c rename to test/battle/move_effect_secondary/thrash.c diff --git a/test/battle/move_effect/throat_chop.c b/test/battle/move_effect_secondary/throat_chop.c similarity index 100% rename from test/battle/move_effect/throat_chop.c rename to test/battle/move_effect_secondary/throat_chop.c diff --git a/test/battle/move_effect/jaw_lock.c b/test/battle/move_effect_secondary/trap_both.c similarity index 100% rename from test/battle/move_effect/jaw_lock.c rename to test/battle/move_effect_secondary/trap_both.c diff --git a/test/battle/move_effect/tri_attack.c b/test/battle/move_effect_secondary/tri_attack.c similarity index 100% rename from test/battle/move_effect/tri_attack.c rename to test/battle/move_effect_secondary/tri_attack.c diff --git a/test/battle/move_effect/axe_kick.c b/test/battle/move_effects_combined/axe_kick.c similarity index 100% rename from test/battle/move_effect/axe_kick.c rename to test/battle/move_effects_combined/axe_kick.c diff --git a/test/battle/move_effect/barb_barrage.c b/test/battle/move_effects_combined/barb_barrage.c similarity index 100% rename from test/battle/move_effect/barb_barrage.c rename to test/battle/move_effects_combined/barb_barrage.c diff --git a/test/battle/move_effect/flinch_status.c b/test/battle/move_effects_combined/flinch_status.c similarity index 100% rename from test/battle/move_effect/flinch_status.c rename to test/battle/move_effects_combined/flinch_status.c diff --git a/test/battle/move_effect/hurricane.c b/test/battle/move_effects_combined/hurricane.c similarity index 100% rename from test/battle/move_effect/hurricane.c rename to test/battle/move_effects_combined/hurricane.c diff --git a/test/battle/move_effect/infernal_parade.c b/test/battle/move_effects_combined/infernal_parade.c similarity index 94% rename from test/battle/move_effect/infernal_parade.c rename to test/battle/move_effects_combined/infernal_parade.c index bd7ec793ac..6aa46ef8cb 100644 --- a/test/battle/move_effect/infernal_parade.c +++ b/test/battle/move_effects_combined/infernal_parade.c @@ -5,6 +5,7 @@ ASSUMPTIONS { ASSUME(gMovesInfo[MOVE_INFERNAL_PARADE].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS); ASSUME(gMovesInfo[MOVE_INFERNAL_PARADE].argument == STATUS1_ANY); + ASSUME(MoveHasAdditionalEffect(MOVE_INFERNAL_PARADE, MOVE_EFFECT_BURN) == TRUE); } SINGLE_BATTLE_TEST("Infernal Parade inflicts burn") diff --git a/test/battle/move_effect/make_it_rain.c b/test/battle/move_effects_combined/make_it_rain.c similarity index 100% rename from test/battle/move_effect/make_it_rain.c rename to test/battle/move_effects_combined/make_it_rain.c diff --git a/test/battle/move_effect/triple_arrows.c b/test/battle/move_effects_combined/triple_arrows.c similarity index 100% rename from test/battle/move_effect/triple_arrows.c rename to test/battle/move_effects_combined/triple_arrows.c diff --git a/test/battle/move_effect/recoil.c b/test/battle/move_flags/recoil.c similarity index 100% rename from test/battle/move_effect/recoil.c rename to test/battle/move_flags/recoil.c