Merge branch '_RHH/master' into _RHH/upcoming

This commit is contained in:
Eduardo Quezada 2024-07-10 10:05:10 -04:00
commit fb708b7ed3
32 changed files with 1013 additions and 130 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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**

View file

@ -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!)_

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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
<!--Last PR: 4939-->

View file

@ -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* 💥

View file

@ -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.

View file

@ -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.

View file

@ -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);
}

View file

@ -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
{

View file

@ -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;

View file

@ -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;

View file

@ -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);

View file

@ -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:

View file

@ -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);
}

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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)))

View file

@ -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);
}
}

View file

@ -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.

View file

@ -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);
}
}

View file

@ -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!");
}
}

View file

@ -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!");

View file

@ -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; }