diff --git a/.all-contributorsrc b/.all-contributorsrc
index e2bb282730..11c68b7a64 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -597,6 +597,24 @@
"contributions": [
"design"
]
+ },
+ {
+ "login": "ostomachion",
+ "name": "Josh Hufford",
+ "avatar_url": "https://avatars.githubusercontent.com/u/8021794?v=4",
+ "profile": "http://hufford.io",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "Kasenn",
+ "name": "Kasenn",
+ "avatar_url": "https://avatars.githubusercontent.com/u/115586266?v=4",
+ "profile": "https://github.com/Kasenn",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index e877940643..49517cfff3 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -61,8 +61,11 @@ If you have read all of this and still need help, feel free to start a thread in
- If you're new to git and GitHub, [Team Aqua's Asset Repo](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/) has a [guide on forking and cloning the repository](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/wiki/The-Basics-of-GitHub). Make sure you have a [local copy](INSTALL.md) of `pokeemerald-expansion`.
- Make sure your contribution is in [scope](docs/team_procedures/scope.md) - if it is not clear if something is in scope, you can start a discussion thread in the [#pr-discussions](https://discord.com/channels/419213663107416084/1102784418369785948) channel of the [the RHH Discord Server!](https://discord.gg/6CzjAG6GZk).
- Choose a branch to contribute your PR to:
- - **`master`**: Fixes for bugs that are currently present in the `master` branch.
- - **`upcoming`**: All other pull requests.
+ - **`master`**: If your PR contains meets any of the following criteria, it should go to `master`:
+ - Fixes for bugs that are currently present in the `master` branch
+ - PR is only documentation updates / changes
+ - PR is only tests
+ - **`upcoming`**: All other pull requests go to `upcoming`.
- Create a new branch from the most recent version of the branch you've chosen.
- If your contribution introduces, removes, or changes a lot of existing code, we reccomend getting a maintainer to agree to review it before you start on the work! We have a table that lists all [current maintainers and their areas of expertise](#maintainers).
diff --git a/CREDITS.md b/CREDITS.md
index 38d03ba139..ced3f52af8 100644
--- a/CREDITS.md
+++ b/CREDITS.md
@@ -85,6 +85,8 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Jaizu 💻 |
 Kildemal 💻 |
 Skeli 🎨 |
+  Josh Hufford 💻 |
+  Kasenn 💻 |
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index b7abe25190..6b4b18f48a 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -3336,9 +3336,9 @@ BattleScript_EffectMeanLook::
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
jumpifvolatile BS_TARGET, VOLATILE_ESCAPE_PREVENTION, BattleScript_ButItFailed
jumpifsubstituteblocks BattleScript_ButItFailed
-.if B_GHOSTS_ESCAPE >= GEN_6
+ jumpifgenconfiglowerthan CONFIG_GHOSTS_ESCAPE, GEN_6, BattleScript_EffectMeanLookGen5
jumpiftype BS_TARGET, TYPE_GHOST, BattleScript_ButItFailed
-.endif
+BattleScript_EffectMeanLookGen5:
attackanimation
waitanimation
seteffectprimary BS_ATTACKER, BS_TARGET, MOVE_EFFECT_PREVENT_ESCAPE
diff --git a/docs/tutorials/how_to_new_pokemon.md b/docs/tutorials/how_to_new_pokemon.md
index 79f01acbd2..f042160573 100644
--- a/docs/tutorials/how_to_new_pokemon.md
+++ b/docs/tutorials/how_to_new_pokemon.md
@@ -1075,7 +1075,8 @@ These tables, unlike the regular form tables, registers how Pokémon can switch
```c
#if P_FAMILY_GASTLY
-static const struct FormChange sGengarFormChangeTable[] = {
+static const struct FormChange sGengarFormChangeTable[] =
+{
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GENGAR_MEGA, ITEM_GENGARITE},
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GENGAR_GIGANTAMAX},
{FORM_CHANGE_TERMINATOR},
diff --git a/graphics/items/icon_palettes/absorb_bulb.pal b/graphics/items/icon_palettes/absorb_bulb.pal
index 8551b917b1..421325bf5a 100755
--- a/graphics/items/icon_palettes/absorb_bulb.pal
+++ b/graphics/items/icon_palettes/absorb_bulb.pal
@@ -1,15 +1,15 @@
JASC-PAL
0100
16
-128 0 255
-49 49 49
-222 222 115
-189 140 66
-156 99 41
-181 173 115
-132 74 33
-214 173 115
-90 66 41
+211 211 211
+48 48 48
+216 216 112
+184 136 64
+152 96 40
+176 168 112
+128 72 32
+208 168 112
+88 64 40
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/balm_mushroom.pal b/graphics/items/icon_palettes/balm_mushroom.pal
index 7802b4b8d5..d26d7dbd5f 100644
--- a/graphics/items/icon_palettes/balm_mushroom.pal
+++ b/graphics/items/icon_palettes/balm_mushroom.pal
@@ -1,15 +1,15 @@
JASC-PAL
0100
16
-128 248 248
-208 232 208
-152 200 152
+211 211 211
+88 88 88
+240 192 96
+232 152 40
248 248 80
-224 200 8
-248 200 96
-240 152 40
48 48 48
-0 0 0
+216 192 8
+152 192 152
+200 224 200
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/big_root.pal b/graphics/items/icon_palettes/big_root.pal
index a93aa2ed77..bfc79af68a 100644
--- a/graphics/items/icon_palettes/big_root.pal
+++ b/graphics/items/icon_palettes/big_root.pal
@@ -1,13 +1,13 @@
JASC-PAL
0100
16
-255 0 128
-39 39 39
-126 77 11
-168 117 46
-220 194 117
-203 151 77
-247 220 151
+211 211 211
+48 48 48
+136 88 16
+176 128 56
+224 200 128
+208 160 88
+248 224 160
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/thick_club.pal b/graphics/items/icon_palettes/bone.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/items/icon_palettes/thick_club.pal
rename to graphics/items/icon_palettes/bone.pal
diff --git a/graphics/items/icon_palettes/bottle_cap.pal b/graphics/items/icon_palettes/bottle_cap.pal
index 412b2967ba..97abe537b3 100644
--- a/graphics/items/icon_palettes/bottle_cap.pal
+++ b/graphics/items/icon_palettes/bottle_cap.pal
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+240 240 240
diff --git a/graphics/items/icon_palettes/bug_gem.pal b/graphics/items/icon_palettes/bug_gem.pal
index 4e8af47265..4bc9724350 100644
--- a/graphics/items/icon_palettes/bug_gem.pal
+++ b/graphics/items/icon_palettes/bug_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
184 216 104
224 232 176
152 184 32
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/casteliacone.pal b/graphics/items/icon_palettes/casteliacone.pal
index 438dff0441..2d105d3fd5 100644
--- a/graphics/items/icon_palettes/casteliacone.pal
+++ b/graphics/items/icon_palettes/casteliacone.pal
@@ -1,16 +1,16 @@
JASC-PAL
0100
16
-120 192 168
+211 211 211
+88 88 88
248 248 248
-180 224 240
-96 192 224
-16 152 200
-248 208 72
-208 176 72
-184 112 0
+176 216 232
+96 184 216
48 48 48
-0 0 0
+16 152 192
+248 200 72
+200 168 72
+176 112 0
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/choice_specs.pal b/graphics/items/icon_palettes/choice_specs.pal
index 95c5ebab30..93725cd13d 100644
--- a/graphics/items/icon_palettes/choice_specs.pal
+++ b/graphics/items/icon_palettes/choice_specs.pal
@@ -1,17 +1,17 @@
JASC-PAL
0100
16
-255 0 128
-117 117 117
-39 39 39
-229 185 54
-212 117 18
-247 238 203
-159 93 11
-247 247 77
-247 126 54
-238 185 77
-238 18 18
+211 211 211
+128 128 128
+48 48 48
+232 192 64
+216 128 24
+248 240 208
+168 104 16
+248 248 88
+248 136 64
+240 192 88
+240 24 24
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/comet_shard.pal b/graphics/items/icon_palettes/comet_shard.pal
index fcd9d28040..582dbf2270 100644
--- a/graphics/items/icon_palettes/comet_shard.pal
+++ b/graphics/items/icon_palettes/comet_shard.pal
@@ -1,18 +1,18 @@
JASC-PAL
0100
16
-120 192 168
-240 248 248
-200 224 232
-128 176 232
-96 144 224
-72 80 184
+211 211 211
+49 49 49
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+128 168 224
+96 136 216
+192 216 224
+72 80 176
+232 248 240
64 56 120
-48 48 48
-0 0 0
-0 0 0
-0 0 0
-0 0 0
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/cover_fossil.pal b/graphics/items/icon_palettes/cover_fossil.pal
index 17aca6ea29..57c8b04188 100755
--- a/graphics/items/icon_palettes/cover_fossil.pal
+++ b/graphics/items/icon_palettes/cover_fossil.pal
@@ -1,16 +1,16 @@
JASC-PAL
0100
16
-128 0 255
-49 49 49
-123 123 165
-140 140 181
-115 115 165
-82 82 140
-99 99 156
-165 165 198
-66 66 115
-198 198 214
+211 211 211
+48 48 48
+120 120 160
+136 136 176
+112 112 160
+80 80 136
+96 96 152
+160 160 192
+64 64 112
+192 192 208
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/dark_gem.pal b/graphics/items/icon_palettes/dark_gem.pal
index 1183d7db18..f0f6805d49 100644
--- a/graphics/items/icon_palettes/dark_gem.pal
+++ b/graphics/items/icon_palettes/dark_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
72 72 72
120 120 120
56 56 56
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/destiny_knot.pal b/graphics/items/icon_palettes/destiny_knot.pal
index 080e8a7f04..ae91dfc5a5 100644
--- a/graphics/items/icon_palettes/destiny_knot.pal
+++ b/graphics/items/icon_palettes/destiny_knot.pal
@@ -1,13 +1,13 @@
JASC-PAL
0100
16
-255 0 128
-39 39 39
-194 69 69
-247 101 101
-247 85 85
-185 61 61
-134 54 54
+211 211 211
+48 48 48
+200 80 80
+248 112 112
+248 96 96
+192 72 72
+144 64 64
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/dragon_gem.pal b/graphics/items/icon_palettes/dragon_gem.pal
index 10fed280fd..39f6712406 100644
--- a/graphics/items/icon_palettes/dragon_gem.pal
+++ b/graphics/items/icon_palettes/dragon_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
160 128 200
168 184 232
128 96 224
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/electric_gem.pal b/graphics/items/icon_palettes/electric_gem.pal
index 88de6e42ae..18be637cc3 100644
--- a/graphics/items/icon_palettes/electric_gem.pal
+++ b/graphics/items/icon_palettes/electric_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
248 224 0
248 248 160
224 200 0
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/expert_belt.pal b/graphics/items/icon_palettes/expert_belt.pal
index cfb6c6a926..07de4a47bb 100644
--- a/graphics/items/icon_palettes/expert_belt.pal
+++ b/graphics/items/icon_palettes/expert_belt.pal
@@ -1,11 +1,11 @@
JASC-PAL
0100
16
-255 0 128
-39 39 39
-61 54 61
-117 109 117
-85 77 85
+211 211 211
+72 64 72
+48 48 48
+128 120 128
+96 88 96
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/fairy_gem.pal b/graphics/items/icon_palettes/fairy_gem.pal
index 4bf316f572..f7ef540898 100644
--- a/graphics/items/icon_palettes/fairy_gem.pal
+++ b/graphics/items/icon_palettes/fairy_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-49 49 49
+48 48 48
215 149 192
251 230 239
210 120 173
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/fighting_gem.pal b/graphics/items/icon_palettes/fighting_gem.pal
index 324a6870c6..a107ed870e 100644
--- a/graphics/items/icon_palettes/fighting_gem.pal
+++ b/graphics/items/icon_palettes/fighting_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
184 112 120
224 152 136
144 72 120
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/fire_gem.pal b/graphics/items/icon_palettes/fire_gem.pal
index f98f9e16ca..ce4b435404 100644
--- a/graphics/items/icon_palettes/fire_gem.pal
+++ b/graphics/items/icon_palettes/fire_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
248 144 72
248 200 104
240 64 48
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/flying_gem.pal b/graphics/items/icon_palettes/flying_gem.pal
index 16d9334346..e2cf402064 100644
--- a/graphics/items/icon_palettes/flying_gem.pal
+++ b/graphics/items/icon_palettes/flying_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
184 200 248
216 224 248
152 168 240
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/focus_sash.pal b/graphics/items/icon_palettes/focus_sash.pal
index 08b56485e0..0b9a14d120 100644
--- a/graphics/items/icon_palettes/focus_sash.pal
+++ b/graphics/items/icon_palettes/focus_sash.pal
@@ -1,15 +1,15 @@
JASC-PAL
0100
16
-255 0 128
-39 39 39
-77 77 77
-212 101 61
-247 117 117
-247 151 69
-177 39 39
-229 69 69
-247 220 69
+211 211 211
+48 48 48
+88 88 88
+216 112 72
+248 128 128
+248 160 80
+184 48 48
+232 80 80
+248 224 80
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/ghost_gem.pal b/graphics/items/icon_palettes/ghost_gem.pal
index 6068c4d2b0..d27ad1d725 100644
--- a/graphics/items/icon_palettes/ghost_gem.pal
+++ b/graphics/items/icon_palettes/ghost_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
104 80 184
104 104 216
80 64 152
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/gold_bottle_cap.pal b/graphics/items/icon_palettes/gold_bottle_cap.pal
index 2420b2d4c7..bc87d438da 100644
--- a/graphics/items/icon_palettes/gold_bottle_cap.pal
+++ b/graphics/items/icon_palettes/gold_bottle_cap.pal
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+248 248 248
diff --git a/graphics/items/icon_palettes/grass_gem.pal b/graphics/items/icon_palettes/grass_gem.pal
index 02412f988e..0e98973670 100644
--- a/graphics/items/icon_palettes/grass_gem.pal
+++ b/graphics/items/icon_palettes/grass_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
96 248 120
184 248 176
64 200 80
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/ground_gem.pal b/graphics/items/icon_palettes/ground_gem.pal
index cbdd4efd6d..d5a86d7184 100644
--- a/graphics/items/icon_palettes/ground_gem.pal
+++ b/graphics/items/icon_palettes/ground_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
184 128 56
200 160 80
160 104 32
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/heal_ball.pal b/graphics/items/icon_palettes/heal_ball.pal
index 86f7876651..0d04f8f5af 100644
--- a/graphics/items/icon_palettes/heal_ball.pal
+++ b/graphics/items/icon_palettes/heal_ball.pal
@@ -1,19 +1,19 @@
JASC-PAL
0100
16
-180 180 180
-255 255 255
-246 139 180
-255 180 230
-255 106 213
-238 82 197
-213 16 172
-106 98 197
-123 148 205
-139 172 222
-90 139 205
-255 246 213
-230 180 115
-255 205 172
-0 0 0
-49 49 49
+211 211 211
+48 48 48
+248 104 208
+232 80 192
+248 176 224
+248 248 248
+240 136 176
+248 240 208
+224 176 112
+248 200 168
+136 168 216
+88 136 200
+120 152 208
+136 128 200
+104 96 192
+208 16 168
diff --git a/graphics/items/icon_palettes/honey.pal b/graphics/items/icon_palettes/honey.pal
index 062722fc51..cc25ae8f60 100644
--- a/graphics/items/icon_palettes/honey.pal
+++ b/graphics/items/icon_palettes/honey.pal
@@ -1,16 +1,16 @@
JASC-PAL
0100
16
-163 73 164
-248 240 184
-248 184 72
-232 144 0
-200 112 0
-120 80 32
-216 248 248
-96 184 192
-80 152 152
+211 211 211
48 48 48
+216 248 248
+248 184 72
+248 240 184
+80 152 152
+96 184 192
+120 80 32
+200 112 0
+232 144 0
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/ice_gem.pal b/graphics/items/icon_palettes/ice_gem.pal
index dda74d5894..8fe6b397e3 100644
--- a/graphics/items/icon_palettes/ice_gem.pal
+++ b/graphics/items/icon_palettes/ice_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
104 232 232
168 248 248
48 208 248
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/kee_berry.pal b/graphics/items/icon_palettes/kee_berry.pal
index 7d25b433ac..e56e84b3d6 100755
--- a/graphics/items/icon_palettes/kee_berry.pal
+++ b/graphics/items/icon_palettes/kee_berry.pal
@@ -1,7 +1,7 @@
JASC-PAL
0100
16
-128 0 255
+255 255 255
49 49 49
156 222 115
115 189 82
@@ -14,6 +14,6 @@ JASC-PAL
148 123 99
255 222 189
230 189 165
-0 0 0
189 156 132
0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/light_clay.pal b/graphics/items/icon_palettes/light_clay.pal
index 02a4a90fbd..bc5ea9be30 100644
--- a/graphics/items/icon_palettes/light_clay.pal
+++ b/graphics/items/icon_palettes/light_clay.pal
@@ -1,13 +1,13 @@
JASC-PAL
0100
16
-255 0 128
-39 39 39
-126 177 69
-177 220 109
-93 117 54
-212 238 185
-247 247 247
+211 211 211
+48 48 48
+136 184 80
+184 224 120
+104 128 64
+216 240 192
+248 248 248
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/metal_powder.pal b/graphics/items/icon_palettes/metal_powder.pal
index 68d14765d4..545b06e32b 100755
--- a/graphics/items/icon_palettes/metal_powder.pal
+++ b/graphics/items/icon_palettes/metal_powder.pal
@@ -12,8 +12,8 @@ JASC-PAL
238 197 246
115 65 123
255 255 255
-0 0 0
-0 0 0
-0 0 0
+255 255 255
+238 197 246
+205 148 213
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/metronome.pal b/graphics/items/icon_palettes/metronome.pal
index 0294d8b6cb..b87bb6b7da 100644
--- a/graphics/items/icon_palettes/metronome.pal
+++ b/graphics/items/icon_palettes/metronome.pal
@@ -1,17 +1,17 @@
JASC-PAL
0100
16
-255 0 128
-39 39 39
-39 69 85
-159 203 229
-109 177 220
-77 142 168
-54 93 61
-77 126 93
-177 229 229
-247 247 247
-126 185 220
+211 211 211
+48 48 48
+48 80 96
+168 208 232
+120 184 224
+88 152 176
+64 104 72
+88 136 104
+184 232 232
+248 248 248
+136 192 224
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/moon_ball.pal b/graphics/items/icon_palettes/moon_ball.pal
index 0f1f671786..b8b12f14fa 100644
--- a/graphics/items/icon_palettes/moon_ball.pal
+++ b/graphics/items/icon_palettes/moon_ball.pal
@@ -1,19 +1,19 @@
JASC-PAL
0100
16
-180 180 180
-255 255 255
-222 205 246
-164 164 197
-123 123 131
-98 115 148
-123 139 156
-74 197 238
-65 148 172
-156 255 255
-74 82 82
-189 172 106
-246 205 65
-255 230 164
-0 0 0
-49 49 49
+211 211 211
+48 48 48
+184 168 104
+240 200 64
+120 136 152
+96 112 144
+72 192 232
+248 224 160
+152 248 248
+248 248 248
+64 144 168
+88 104 120
+72 80 80
+160 160 192
+120 120 128
+216 200 240
diff --git a/graphics/items/icon_palettes/muscle_band.pal b/graphics/items/icon_palettes/muscle_band.pal
index e93f6f6ddf..fd3a6430cd 100644
--- a/graphics/items/icon_palettes/muscle_band.pal
+++ b/graphics/items/icon_palettes/muscle_band.pal
@@ -1,18 +1,18 @@
JASC-PAL
0100
16
-255 0 128
-39 39 39
-168 142 32
-247 247 151
-229 203 39
-126 109 61
-56 56 56
-247 109 109
-203 177 18
-203 93 18
-203 25 25
-238 54 54
+211 211 211
+48 48 48
+176 152 40
+248 248 160
+232 208 48
+136 120 72
+248 120 120
+208 184 24
+208 104 24
+208 32 32
+240 64 64
+0 0 0
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/n_lunarizer.pal b/graphics/items/icon_palettes/n_lunarizer.pal
index a8c12d9751..f1ccd912f3 100644
--- a/graphics/items/icon_palettes/n_lunarizer.pal
+++ b/graphics/items/icon_palettes/n_lunarizer.pal
@@ -8,6 +8,7 @@ JASC-PAL
88 88 88
48 48 48
32 176 240
+32 176 240
16 120 200
240 104 64
0 0 0
@@ -16,4 +17,3 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
diff --git a/graphics/items/icon_palettes/normal_gem.pal b/graphics/items/icon_palettes/normal_gem.pal
index 8cd17447e6..89965d2c78 100644
--- a/graphics/items/icon_palettes/normal_gem.pal
+++ b/graphics/items/icon_palettes/normal_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
224 184 184
240 208 208
192 176 176
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/oval_charm.pal b/graphics/items/icon_palettes/oval_charm.pal
index 5f5afd15c5..6cded15051 100644
--- a/graphics/items/icon_palettes/oval_charm.pal
+++ b/graphics/items/icon_palettes/oval_charm.pal
@@ -3,13 +3,13 @@ JASC-PAL
16
239 228 176
48 48 48
-248 192 224
128 80 216
-168 104 248
128 208 192
-248 248 216
+248 192 224
216 136 160
+248 248 216
184 88 96
+168 104 248
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/park_ball.pal b/graphics/items/icon_palettes/park_ball.pal
index 5817b9997f..ad7609bde5 100644
--- a/graphics/items/icon_palettes/park_ball.pal
+++ b/graphics/items/icon_palettes/park_ball.pal
@@ -1,19 +1,19 @@
JASC-PAL
0100
16
-180 180 180
-255 255 255
-123 115 131
-164 164 197
-123 123 131
-32 123 222
-115 131 123
-213 213 205
-246 213 82
-255 230 139
-222 156 41
-255 139 49
-0 0 0
-49 49 49
+211 211 211
+48 48 48
+240 208 80
+216 152 40
+248 224 136
+248 248 248
+144 112 152
+40 104 200
+168 88 24
+248 136 48
+120 120 128
+216 200 240
+160 160 192
+0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/pearl_string.pal b/graphics/items/icon_palettes/pearl_string.pal
index b754262ce7..ca175ecd5f 100644
--- a/graphics/items/icon_palettes/pearl_string.pal
+++ b/graphics/items/icon_palettes/pearl_string.pal
@@ -1,19 +1,19 @@
JASC-PAL
0100
16
-0 248 0
-248 248 248
-232 232 232
-192 192 192
-168 168 168
-248 248 200
-176 232 224
-152 208 200
-120 144 144
-216 172 172
+211 211 211
+80 80 80
48 48 48
-0 0 0
-0 0 0
-0 0 0
+184 184 184
+248 248 200
+176 224 216
+120 136 136
+224 224 224
+232 232 184
+248 248 248
+152 200 192
+144 160 160
+208 168 168
+160 160 160
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/pink_nectar.pal b/graphics/items/icon_palettes/pink_nectar.pal
index e6167ec00f..93ed4418c7 100755
--- a/graphics/items/icon_palettes/pink_nectar.pal
+++ b/graphics/items/icon_palettes/pink_nectar.pal
@@ -8,6 +8,7 @@ JASC-PAL
255 90 90
255 246 246
90 65 65
+255 246 246
123 90 82
148 98 82
189 148 156
@@ -16,4 +17,3 @@ JASC-PAL
255 197 189
255 123 115
189 90 90
-0 0 0
diff --git a/graphics/items/icon_palettes/poison_gem.pal b/graphics/items/icon_palettes/poison_gem.pal
index da63d2f248..0e88e28faa 100644
--- a/graphics/items/icon_palettes/poison_gem.pal
+++ b/graphics/items/icon_palettes/poison_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
152 104 168
192 176 200
104 96 136
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/poke_toy.pal b/graphics/items/icon_palettes/poke_toy.pal
index 4ee38edd34..1efcf11260 100644
--- a/graphics/items/icon_palettes/poke_toy.pal
+++ b/graphics/items/icon_palettes/poke_toy.pal
@@ -1,13 +1,13 @@
JASC-PAL
0100
16
-0 248 0
-248 248 248
-200 200 200
-168 168 168
-248 240 144
-248 208 104
+211 211 211
48 48 48
+200 200 200
+248 248 248
+160 160 160
+248 232 136
+240 200 104
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/premier_ball.pal b/graphics/items/icon_palettes/premier_ball.pal
new file mode 100644
index 0000000000..696a4b385e
--- /dev/null
+++ b/graphics/items/icon_palettes/premier_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+49 49 49
+74 82 82
+123 123 131
+164 164 197
+222 205 246
+255 255 255
+156 74 57
+180 82 57
+222 90 57
+255 148 57
+255 213 57
+230 180 106
+255 255 148
+213 156 49
+255 238 82
diff --git a/graphics/items/icon_palettes/pretty_feather.pal b/graphics/items/icon_palettes/pretty_feather.pal
index e2e1b3ed78..1595bae756 100644
--- a/graphics/items/icon_palettes/pretty_feather.pal
+++ b/graphics/items/icon_palettes/pretty_feather.pal
@@ -1,13 +1,13 @@
JASC-PAL
0100
16
-255 0 128
-90 90 90
-206 239 255
-239 255 255
-49 49 49
-156 214 231
-140 165 173
+211 211 211
+88 88 88
+200 232 248
+232 248 248
+48 48 48
+152 208 224
+136 160 168
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/prism_scale.pal b/graphics/items/icon_palettes/prism_scale.pal
index 15d3698bff..e93ad0a49a 100755
--- a/graphics/items/icon_palettes/prism_scale.pal
+++ b/graphics/items/icon_palettes/prism_scale.pal
@@ -1,15 +1,15 @@
JASC-PAL
0100
16
-128 0 255
-82 82 82
-189 239 255
-132 206 239
-173 173 222
-49 49 49
-206 140 206
-239 107 189
-255 156 214
+211 211 211
+80 80 80
+184 232 248
+128 200 232
+168 168 216
+48 48 48
+200 136 200
+232 104 184
+248 152 208
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/psychic_gem.pal b/graphics/items/icon_palettes/psychic_gem.pal
index c9f2839e65..73ff919bd3 100644
--- a/graphics/items/icon_palettes/psychic_gem.pal
+++ b/graphics/items/icon_palettes/psychic_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
248 104 176
248 160 192
208 56 136
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/purple_nectar.pal b/graphics/items/icon_palettes/purple_nectar.pal
index 7b6def78c8..3da67fdec6 100755
--- a/graphics/items/icon_palettes/purple_nectar.pal
+++ b/graphics/items/icon_palettes/purple_nectar.pal
@@ -8,6 +8,7 @@ JASC-PAL
197 90 255
255 246 255
90 65 65
+255 246 255
123 90 82
148 98 82
189 148 156
@@ -16,4 +17,3 @@ JASC-PAL
255 197 189
255 123 115
189 90 90
-0 0 0
diff --git a/graphics/items/icon_palettes/quick_powder.pal b/graphics/items/icon_palettes/quick_powder.pal
index 39410ad529..3c4e0c7dbd 100644
--- a/graphics/items/icon_palettes/quick_powder.pal
+++ b/graphics/items/icon_palettes/quick_powder.pal
@@ -1,19 +1,19 @@
JASC-PAL
0100
16
-255 0 128
+180 180 180
49 49 49
+213 213 213
156 156 156
-214 214 214
-255 255 255
-239 239 239
90 90 90
-181 214 255
-123 189 239
-74 107 173
-115 156 206
-0 0 0
-0 0 0
-0 0 0
+238 238 238
+120 184 232
+112 152 200
+176 208 248
+72 104 168
+255 255 255
+255 255 255
+176 208 248
+120 184 232
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/rage_candy_bar.pal b/graphics/items/icon_palettes/rage_candy_bar.pal
index 985c80da69..6cfc78270d 100644
--- a/graphics/items/icon_palettes/rage_candy_bar.pal
+++ b/graphics/items/icon_palettes/rage_candy_bar.pal
@@ -1,18 +1,18 @@
JASC-PAL
0100
16
-128 248 248
-176 208 144
-144 196 88
+211 211 211
+48 48 48
+144 192 88
104 152 64
-64 104 48
+224 232 208
+176 200 144
176 112 80
-152 56 48
168 144 80
152 128 64
-224 232 208
+152 64 48
+64 104 48
136 136 136
-48 48 48
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/rare_bone.pal b/graphics/items/icon_palettes/rare_bone.pal
deleted file mode 100755
index 2ba2fbbb18..0000000000
--- a/graphics/items/icon_palettes/rare_bone.pal
+++ /dev/null
@@ -1,19 +0,0 @@
-JASC-PAL
-0100
-16
-128 0 255
-48 48 48
-224 232 200
-184 192 160
-128 128 96
-208 208 168
-152 152 128
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
diff --git a/graphics/items/icon_palettes/relics.pal b/graphics/items/icon_palettes/relics.pal
index b095aa950f..afacfadb94 100644
--- a/graphics/items/icon_palettes/relics.pal
+++ b/graphics/items/icon_palettes/relics.pal
@@ -1,19 +1,19 @@
JASC-PAL
0100
16
-248 248 0
-216 216 208
-200 200 192
-176 176 176
+211 211 211
+48 48 48
+168 168 168
144 152 152
-120 144 144
+120 136 136
88 120 120
+192 192 184
64 104 104
+208 208 200
56 96 96
48 72 80
72 72 72
-48 48 48
-0 0 0
+48 80 88
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/ring_target.pal b/graphics/items/icon_palettes/ring_target.pal
index 4773d5912c..ee0bbeb5bb 100755
--- a/graphics/items/icon_palettes/ring_target.pal
+++ b/graphics/items/icon_palettes/ring_target.pal
@@ -1,15 +1,15 @@
JASC-PAL
0100
16
-128 0 255
-49 49 49
-66 66 66
-173 140 66
-148 115 49
-115 115 123
-206 206 214
-255 255 255
-123 99 49
+211 211 211
+48 48 48
+64 64 64
+168 136 64
+144 112 48
+112 112 120
+200 200 208
+248 248 248
+120 96 48
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/rock_gem.pal b/graphics/items/icon_palettes/rock_gem.pal
index 3821017666..bd4fae9f8d 100644
--- a/graphics/items/icon_palettes/rock_gem.pal
+++ b/graphics/items/icon_palettes/rock_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
184 144 120
216 200 176
136 112 88
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/sacred_ash.pal b/graphics/items/icon_palettes/sacred_ash.pal
index 4b7ec0b8cb..09c29286aa 100755
--- a/graphics/items/icon_palettes/sacred_ash.pal
+++ b/graphics/items/icon_palettes/sacred_ash.pal
@@ -13,7 +13,7 @@ JASC-PAL
82 82 82
222 222 222
255 255 255
-0 0 0
-0 0 0
+156 156 156
+156 156 156
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/spooky_plate.pal b/graphics/items/icon_palettes/spooky_plate.pal
index fffede5bc1..4c086d02c3 100644
--- a/graphics/items/icon_palettes/spooky_plate.pal
+++ b/graphics/items/icon_palettes/spooky_plate.pal
@@ -3,12 +3,12 @@ JASC-PAL
16
255 0 128
40 40 40
-112 122 138
-165 173 182
-192 192 209
-138 130 165
-104 104 104
-88 88 88
+154 121 154
+195 170 203
+211 186 219
+170 146 178
+138 89 146
+113 73 130
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/stable_mulch.pal b/graphics/items/icon_palettes/stable_mulch.pal
index a0a98aabcb..1afb680457 100644
--- a/graphics/items/icon_palettes/stable_mulch.pal
+++ b/graphics/items/icon_palettes/stable_mulch.pal
@@ -1,15 +1,15 @@
JASC-PAL
0100
16
-120 192 168
-240 248 208
-152 224 200
-48 184 192
-232 200 152
-216 184 104
-180 136 72
-128 96 56
+211 211 211
48 48 48
+224 200 152
+208 176 104
+176 136 72
+128 96 56
+240 248 208
+48 184 192
+152 224 200
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/star.pal b/graphics/items/icon_palettes/star.pal
index d37358e905..286e2d9264 100755
--- a/graphics/items/icon_palettes/star.pal
+++ b/graphics/items/icon_palettes/star.pal
@@ -13,7 +13,7 @@ JASC-PAL
156 74 74
255 255 255
131 49 49
-0 0 0
+246 164 164
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/steel_gem.pal b/graphics/items/icon_palettes/steel_gem.pal
index bd03865343..b2e3d38b05 100644
--- a/graphics/items/icon_palettes/steel_gem.pal
+++ b/graphics/items/icon_palettes/steel_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
136 136 152
184 184 200
96 96 96
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/ultranecrozium_z.pal b/graphics/items/icon_palettes/ultranecrozium_z.pal
index 366b1ba2d1..7cb3197d1a 100644
--- a/graphics/items/icon_palettes/ultranecrozium_z.pal
+++ b/graphics/items/icon_palettes/ultranecrozium_z.pal
@@ -4,16 +4,16 @@ JASC-PAL
200 191 231
32 32 32
255 246 205
-255 255 238
-180 156 98
-222 205 156
-255 255 230
-180 180 172
-156 148 115
-131 115 82
230 222 172
-164 131 65
+255 255 230
+255 255 238
+180 180 172
180 180 148
+156 148 115
+222 205 156
+180 156 98
+131 115 82
+164 131 65
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/water_gem.pal b/graphics/items/icon_palettes/water_gem.pal
index 586db9a6e4..e1686478f6 100644
--- a/graphics/items/icon_palettes/water_gem.pal
+++ b/graphics/items/icon_palettes/water_gem.pal
@@ -2,7 +2,7 @@ JASC-PAL
0100
16
255 0 128
-32 32 32
+48 48 48
64 160 248
120 200 248
48 144 248
@@ -16,4 +16,4 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
+88 88 88
diff --git a/graphics/items/icon_palettes/white_apricorn.pal b/graphics/items/icon_palettes/white_apricorn.pal
index 53472131bb..009d48350a 100755
--- a/graphics/items/icon_palettes/white_apricorn.pal
+++ b/graphics/items/icon_palettes/white_apricorn.pal
@@ -9,11 +9,11 @@ JASC-PAL
255 255 255
181 198 214
206 148 99
+255 255 255
+255 255 255
214 222 231
115 123 132
0 0 0
0 0 0
0 0 0
0 0 0
-0 0 0
-0 0 0
diff --git a/graphics/items/icon_palettes/wide_lens.pal b/graphics/items/icon_palettes/wide_lens.pal
index cedef34fa0..ed17c6ddab 100644
--- a/graphics/items/icon_palettes/wide_lens.pal
+++ b/graphics/items/icon_palettes/wide_lens.pal
@@ -1,17 +1,17 @@
JASC-PAL
0100
16
-255 0 128
-39 39 39
-220 151 101
-212 101 39
-117 39 18
-247 247 247
-85 85 85
-11 126 151
-18 194 247
-151 151 151
-168 54 25
+211 211 211
+48 48 48
+224 160 112
+216 112 48
+128 48 24
+248 248 248
+96 96 96
+16 136 160
+24 200 248
+160 160 160
+176 64 32
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/x_special_defense.pal b/graphics/items/icon_palettes/x_special_defense.pal
index 548816d06b..0479f95da6 100755
--- a/graphics/items/icon_palettes/x_special_defense.pal
+++ b/graphics/items/icon_palettes/x_special_defense.pal
@@ -2,16 +2,16 @@ JASC-PAL
0100
16
128 0 255
+49 49 49
+92 176 176
64 134 134
-42 42 42
+148 198 198
+255 255 255
127 134 134
184 198 198
-219 219 219
-191 219 219
-92 176 176
-78 141 141
28 92 92
-148 198 198
+191 219 219
+78 141 141
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/yellow_nectar.pal b/graphics/items/icon_palettes/yellow_nectar.pal
index bebf85a5ff..9a46979ea8 100755
--- a/graphics/items/icon_palettes/yellow_nectar.pal
+++ b/graphics/items/icon_palettes/yellow_nectar.pal
@@ -8,6 +8,7 @@ JASC-PAL
197 139 0
255 246 213
90 65 65
+255 246 213
123 90 82
148 98 82
189 148 156
@@ -16,4 +17,3 @@ JASC-PAL
255 197 189
255 123 115
189 90 90
-0 0 0
diff --git a/graphics/items/icon_palettes/z_power_ring.pal b/graphics/items/icon_palettes/z_power_ring.pal
index 2c3b5951af..27391f7339 100644
--- a/graphics/items/icon_palettes/z_power_ring.pal
+++ b/graphics/items/icon_palettes/z_power_ring.pal
@@ -1,15 +1,15 @@
JASC-PAL
0100
16
-120 192 168
-240 248 248
-176 176 176
-136 136 136
-128 128 128
+255 255 255
+32 32 32
+168 168 168
+232 240 240
+80 80 88
104 104 104
-96 96 96
-80 80 80
-64 64 64
+64 64 72
+128 128 128
+120 120 128
48 48 48
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/zygarde_cube.pal b/graphics/items/icon_palettes/zygarde_cube.pal
index 3358a67c8c..caf5836fd7 100644
--- a/graphics/items/icon_palettes/zygarde_cube.pal
+++ b/graphics/items/icon_palettes/zygarde_cube.pal
@@ -1,19 +1,19 @@
JASC-PAL
0100
16
-120 192 168
-232 248 232
-152 216 48
-128 152 32
+255 255 255
+32 32 32
+128 160 32
+152 208 48
+120 152 32
104 120 48
+160 208 48
152 144 144
+248 248 248
+120 136 64
120 104 104
88 80 80
64 56 56
-48 48 48
-0 0 0
-0 0 0
-0 0 0
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icons/absorb_bulb.png b/graphics/items/icons/absorb_bulb.png
index a63f7a8bcc..9a726d579f 100755
Binary files a/graphics/items/icons/absorb_bulb.png and b/graphics/items/icons/absorb_bulb.png differ
diff --git a/graphics/items/icons/antidote.png b/graphics/items/icons/antidote.png
deleted file mode 100755
index e577fdc290..0000000000
Binary files a/graphics/items/icons/antidote.png and /dev/null differ
diff --git a/graphics/items/icons/red_apricorn.png b/graphics/items/icons/apricorn.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/items/icons/red_apricorn.png
rename to graphics/items/icons/apricorn.png
diff --git a/graphics/items/icons/balm_mushroom.png b/graphics/items/icons/balm_mushroom.png
index ba4373faad..579ab5b813 100644
Binary files a/graphics/items/icons/balm_mushroom.png and b/graphics/items/icons/balm_mushroom.png differ
diff --git a/graphics/items/icons/big_root.png b/graphics/items/icons/big_root.png
index ef20e8ea54..69d85de713 100644
Binary files a/graphics/items/icons/big_root.png and b/graphics/items/icons/big_root.png differ
diff --git a/graphics/items/icons/black_apricorn.png b/graphics/items/icons/black_apricorn.png
deleted file mode 100755
index 470e77fcfc..0000000000
Binary files a/graphics/items/icons/black_apricorn.png and /dev/null differ
diff --git a/graphics/items/icons/blue_apricorn.png b/graphics/items/icons/blue_apricorn.png
deleted file mode 100755
index 9e1b19fb30..0000000000
Binary files a/graphics/items/icons/blue_apricorn.png and /dev/null differ
diff --git a/graphics/items/icons/thick_club.png b/graphics/items/icons/bone.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/items/icons/thick_club.png
rename to graphics/items/icons/bone.png
diff --git a/graphics/items/icons/bottle_cap.png b/graphics/items/icons/bottle_cap.png
index b3f52c4221..2cd15a49a5 100644
Binary files a/graphics/items/icons/bottle_cap.png and b/graphics/items/icons/bottle_cap.png differ
diff --git a/graphics/items/icons/bug_gem.png b/graphics/items/icons/bug_gem.png
deleted file mode 100644
index 4d69046687..0000000000
Binary files a/graphics/items/icons/bug_gem.png and /dev/null differ
diff --git a/graphics/items/icons/burn_drive.png b/graphics/items/icons/burn_drive.png
deleted file mode 100644
index 9486eff484..0000000000
Binary files a/graphics/items/icons/burn_drive.png and /dev/null differ
diff --git a/graphics/items/icons/casteliacone.png b/graphics/items/icons/casteliacone.png
index 47691d6238..c2d7f96703 100644
Binary files a/graphics/items/icons/casteliacone.png and b/graphics/items/icons/casteliacone.png differ
diff --git a/graphics/items/icons/chill_drive.png b/graphics/items/icons/chill_drive.png
deleted file mode 100644
index d3d5e019c2..0000000000
Binary files a/graphics/items/icons/chill_drive.png and /dev/null differ
diff --git a/graphics/items/icons/choice_specs.png b/graphics/items/icons/choice_specs.png
index 7c90bdcff3..82fb71251d 100644
Binary files a/graphics/items/icons/choice_specs.png and b/graphics/items/icons/choice_specs.png differ
diff --git a/graphics/items/icons/clever_feather.png b/graphics/items/icons/clever_feather.png
deleted file mode 100644
index 3cc0a3d5f4..0000000000
Binary files a/graphics/items/icons/clever_feather.png and /dev/null differ
diff --git a/graphics/items/icons/comet_shard.png b/graphics/items/icons/comet_shard.png
deleted file mode 100644
index 7d6788b614..0000000000
Binary files a/graphics/items/icons/comet_shard.png and /dev/null differ
diff --git a/graphics/items/icons/cover_fossil.png b/graphics/items/icons/cover_fossil.png
index 1202bb4556..49ca51182d 100755
Binary files a/graphics/items/icons/cover_fossil.png and b/graphics/items/icons/cover_fossil.png differ
diff --git a/graphics/items/icons/dark_gem.png b/graphics/items/icons/dark_gem.png
deleted file mode 100644
index 8999ca25ac..0000000000
Binary files a/graphics/items/icons/dark_gem.png and /dev/null differ
diff --git a/graphics/items/icons/destiny_knot.png b/graphics/items/icons/destiny_knot.png
index ce8b18f937..899a6b530e 100644
Binary files a/graphics/items/icons/destiny_knot.png and b/graphics/items/icons/destiny_knot.png differ
diff --git a/graphics/items/icons/ditto_powder.png b/graphics/items/icons/ditto_powder.png
new file mode 100644
index 0000000000..f1e820fe06
Binary files /dev/null and b/graphics/items/icons/ditto_powder.png differ
diff --git a/graphics/items/icons/douse_drive.png b/graphics/items/icons/douse_drive.png
deleted file mode 100644
index f59616159a..0000000000
Binary files a/graphics/items/icons/douse_drive.png and /dev/null differ
diff --git a/graphics/items/icons/draco_plate.png b/graphics/items/icons/draco_plate.png
deleted file mode 100644
index 21339c0482..0000000000
Binary files a/graphics/items/icons/draco_plate.png and /dev/null differ
diff --git a/graphics/items/icons/dragon_gem.png b/graphics/items/icons/dragon_gem.png
deleted file mode 100644
index f071726a13..0000000000
Binary files a/graphics/items/icons/dragon_gem.png and /dev/null differ
diff --git a/graphics/items/icons/dread_plate.png b/graphics/items/icons/dread_plate.png
deleted file mode 100644
index 8679df524d..0000000000
Binary files a/graphics/items/icons/dread_plate.png and /dev/null differ
diff --git a/graphics/items/icons/drive.png b/graphics/items/icons/drive.png
new file mode 100644
index 0000000000..3b8b1d480c
Binary files /dev/null and b/graphics/items/icons/drive.png differ
diff --git a/graphics/items/icons/earth_plate.png b/graphics/items/icons/earth_plate.png
deleted file mode 100644
index e79dff33ce..0000000000
Binary files a/graphics/items/icons/earth_plate.png and /dev/null differ
diff --git a/graphics/items/icons/electric_gem.png b/graphics/items/icons/electric_gem.png
deleted file mode 100644
index e17e3f4d13..0000000000
Binary files a/graphics/items/icons/electric_gem.png and /dev/null differ
diff --git a/graphics/items/icons/ev_feather.png b/graphics/items/icons/ev_feather.png
new file mode 100644
index 0000000000..e0c9dcd4b8
Binary files /dev/null and b/graphics/items/icons/ev_feather.png differ
diff --git a/graphics/items/icons/eviolite.png b/graphics/items/icons/eviolite.png
index b8bc613f8f..454308b2ff 100644
Binary files a/graphics/items/icons/eviolite.png and b/graphics/items/icons/eviolite.png differ
diff --git a/graphics/items/icons/expert_belt.png b/graphics/items/icons/expert_belt.png
index 62d4b8bc26..71a3260a56 100644
Binary files a/graphics/items/icons/expert_belt.png and b/graphics/items/icons/expert_belt.png differ
diff --git a/graphics/items/icons/fairy_gem.png b/graphics/items/icons/fairy_gem.png
deleted file mode 100644
index 5fe8f6ed99..0000000000
Binary files a/graphics/items/icons/fairy_gem.png and /dev/null differ
diff --git a/graphics/items/icons/fighting_gem.png b/graphics/items/icons/fighting_gem.png
deleted file mode 100644
index 2293767794..0000000000
Binary files a/graphics/items/icons/fighting_gem.png and /dev/null differ
diff --git a/graphics/items/icons/fire_gem.png b/graphics/items/icons/fire_gem.png
deleted file mode 100644
index d6caa7d3d1..0000000000
Binary files a/graphics/items/icons/fire_gem.png and /dev/null differ
diff --git a/graphics/items/icons/fist_plate.png b/graphics/items/icons/fist_plate.png
deleted file mode 100644
index 7e6cb2b92d..0000000000
Binary files a/graphics/items/icons/fist_plate.png and /dev/null differ
diff --git a/graphics/items/icons/float_stone.png b/graphics/items/icons/float_stone.png
index a421d553fb..f78c3871e9 100644
Binary files a/graphics/items/icons/float_stone.png and b/graphics/items/icons/float_stone.png differ
diff --git a/graphics/items/icons/flying_gem.png b/graphics/items/icons/flying_gem.png
deleted file mode 100644
index eb328c85ee..0000000000
Binary files a/graphics/items/icons/flying_gem.png and /dev/null differ
diff --git a/graphics/items/icons/focus_sash.png b/graphics/items/icons/focus_sash.png
index a09d2d26bd..8db64fbe2d 100644
Binary files a/graphics/items/icons/focus_sash.png and b/graphics/items/icons/focus_sash.png differ
diff --git a/graphics/items/icons/genius_feather.png b/graphics/items/icons/genius_feather.png
deleted file mode 100644
index 5b27a029e0..0000000000
Binary files a/graphics/items/icons/genius_feather.png and /dev/null differ
diff --git a/graphics/items/icons/ghost_gem.png b/graphics/items/icons/ghost_gem.png
deleted file mode 100644
index c4813ee299..0000000000
Binary files a/graphics/items/icons/ghost_gem.png and /dev/null differ
diff --git a/graphics/items/icons/grass_gem.png b/graphics/items/icons/grass_gem.png
deleted file mode 100644
index 756a769cab..0000000000
Binary files a/graphics/items/icons/grass_gem.png and /dev/null differ
diff --git a/graphics/items/icons/grassy_seed.png b/graphics/items/icons/grassy_seed.png
deleted file mode 100644
index 31f30aeb59..0000000000
Binary files a/graphics/items/icons/grassy_seed.png and /dev/null differ
diff --git a/graphics/items/icons/green_apricorn.png b/graphics/items/icons/green_apricorn.png
deleted file mode 100755
index da60f8544a..0000000000
Binary files a/graphics/items/icons/green_apricorn.png and /dev/null differ
diff --git a/graphics/items/icons/ground_gem.png b/graphics/items/icons/ground_gem.png
deleted file mode 100644
index 21fab57b0f..0000000000
Binary files a/graphics/items/icons/ground_gem.png and /dev/null differ
diff --git a/graphics/items/icons/heal_ball.png b/graphics/items/icons/heal_ball.png
index 765c7326c0..535fbd5a42 100644
Binary files a/graphics/items/icons/heal_ball.png and b/graphics/items/icons/heal_ball.png differ
diff --git a/graphics/items/icons/health_feather.png b/graphics/items/icons/health_feather.png
deleted file mode 100644
index 584cc4f134..0000000000
Binary files a/graphics/items/icons/health_feather.png and /dev/null differ
diff --git a/graphics/items/icons/honey.png b/graphics/items/icons/honey.png
index 386b520950..fcea37efce 100644
Binary files a/graphics/items/icons/honey.png and b/graphics/items/icons/honey.png differ
diff --git a/graphics/items/icons/ice_gem.png b/graphics/items/icons/ice_gem.png
deleted file mode 100644
index e9c28f0503..0000000000
Binary files a/graphics/items/icons/ice_gem.png and /dev/null differ
diff --git a/graphics/items/icons/icicle_plate.png b/graphics/items/icons/icicle_plate.png
deleted file mode 100644
index 7a74d45a55..0000000000
Binary files a/graphics/items/icons/icicle_plate.png and /dev/null differ
diff --git a/graphics/items/icons/insect_plate.png b/graphics/items/icons/insect_plate.png
deleted file mode 100644
index 23bee90932..0000000000
Binary files a/graphics/items/icons/insect_plate.png and /dev/null differ
diff --git a/graphics/items/icons/iron_plate.png b/graphics/items/icons/iron_plate.png
deleted file mode 100644
index d4a778e4df..0000000000
Binary files a/graphics/items/icons/iron_plate.png and /dev/null differ
diff --git a/graphics/items/icons/kee_berry.png b/graphics/items/icons/kee_berry.png
index bbd6c53cf2..b8ecaa97d7 100755
Binary files a/graphics/items/icons/kee_berry.png and b/graphics/items/icons/kee_berry.png differ
diff --git a/graphics/items/icons/light_clay.png b/graphics/items/icons/light_clay.png
index 0007ea8c89..23688d6e7a 100644
Binary files a/graphics/items/icons/light_clay.png and b/graphics/items/icons/light_clay.png differ
diff --git a/graphics/items/icons/meadow_plate.png b/graphics/items/icons/meadow_plate.png
deleted file mode 100644
index 6571446bb5..0000000000
Binary files a/graphics/items/icons/meadow_plate.png and /dev/null differ
diff --git a/graphics/items/icons/metal_powder.png b/graphics/items/icons/metal_powder.png
deleted file mode 100755
index 654b07da77..0000000000
Binary files a/graphics/items/icons/metal_powder.png and /dev/null differ
diff --git a/graphics/items/icons/metronome.png b/graphics/items/icons/metronome.png
index 4270fcaeda..8001aafb11 100644
Binary files a/graphics/items/icons/metronome.png and b/graphics/items/icons/metronome.png differ
diff --git a/graphics/items/icons/mind_plate.png b/graphics/items/icons/mind_plate.png
deleted file mode 100644
index 12af8f9ea8..0000000000
Binary files a/graphics/items/icons/mind_plate.png and /dev/null differ
diff --git a/graphics/items/icons/misty_seed.png b/graphics/items/icons/misty_seed.png
deleted file mode 100644
index 58764aca50..0000000000
Binary files a/graphics/items/icons/misty_seed.png and /dev/null differ
diff --git a/graphics/items/icons/moon_ball.png b/graphics/items/icons/moon_ball.png
index cc67522d46..c45100facf 100644
Binary files a/graphics/items/icons/moon_ball.png and b/graphics/items/icons/moon_ball.png differ
diff --git a/graphics/items/icons/mulch.png b/graphics/items/icons/mulch.png
index 6e470a1086..9ab205355c 100644
Binary files a/graphics/items/icons/mulch.png and b/graphics/items/icons/mulch.png differ
diff --git a/graphics/items/icons/muscle_band.png b/graphics/items/icons/muscle_band.png
index 1954f8a56b..24d402fd3e 100644
Binary files a/graphics/items/icons/muscle_band.png and b/graphics/items/icons/muscle_band.png differ
diff --git a/graphics/items/icons/muscle_feather.png b/graphics/items/icons/muscle_feather.png
deleted file mode 100644
index 5ebf263b25..0000000000
Binary files a/graphics/items/icons/muscle_feather.png and /dev/null differ
diff --git a/graphics/items/icons/red_nectar.png b/graphics/items/icons/nectar.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/items/icons/red_nectar.png
rename to graphics/items/icons/nectar.png
diff --git a/graphics/items/icons/normal_gem.png b/graphics/items/icons/normal_gem.png
deleted file mode 100644
index 5d8cbf7bfd..0000000000
Binary files a/graphics/items/icons/normal_gem.png and /dev/null differ
diff --git a/graphics/items/icons/oval_charm.png b/graphics/items/icons/oval_charm.png
index 25809907a5..482bd630fd 100644
Binary files a/graphics/items/icons/oval_charm.png and b/graphics/items/icons/oval_charm.png differ
diff --git a/graphics/items/icons/park_ball.png b/graphics/items/icons/park_ball.png
index c527ac1cc8..538e43b876 100644
Binary files a/graphics/items/icons/park_ball.png and b/graphics/items/icons/park_ball.png differ
diff --git a/graphics/items/icons/pearl_string.png b/graphics/items/icons/pearl_string.png
index a61a9aa66b..f552bd961f 100644
Binary files a/graphics/items/icons/pearl_string.png and b/graphics/items/icons/pearl_string.png differ
diff --git a/graphics/items/icons/pink_apricorn.png b/graphics/items/icons/pink_apricorn.png
deleted file mode 100755
index 817e0140c3..0000000000
Binary files a/graphics/items/icons/pink_apricorn.png and /dev/null differ
diff --git a/graphics/items/icons/pink_nectar.png b/graphics/items/icons/pink_nectar.png
deleted file mode 100755
index 9fbe0f76b3..0000000000
Binary files a/graphics/items/icons/pink_nectar.png and /dev/null differ
diff --git a/graphics/items/icons/pixie_plate.png b/graphics/items/icons/pixie_plate.png
deleted file mode 100644
index 4c34f22aba..0000000000
Binary files a/graphics/items/icons/pixie_plate.png and /dev/null differ
diff --git a/graphics/items/icons/flame_plate.png b/graphics/items/icons/plate.png
similarity index 100%
rename from graphics/items/icons/flame_plate.png
rename to graphics/items/icons/plate.png
diff --git a/graphics/items/icons/poison_gem.png b/graphics/items/icons/poison_gem.png
deleted file mode 100644
index 8e78855276..0000000000
Binary files a/graphics/items/icons/poison_gem.png and /dev/null differ
diff --git a/graphics/items/icons/poke_toy.png b/graphics/items/icons/poke_toy.png
index be6091d3f5..e5b9626b58 100644
Binary files a/graphics/items/icons/poke_toy.png and b/graphics/items/icons/poke_toy.png differ
diff --git a/graphics/items/icons/premier_ball.png b/graphics/items/icons/premier_ball.png
old mode 100755
new mode 100644
diff --git a/graphics/items/icons/pretty_feather.png b/graphics/items/icons/pretty_feather.png
index 69c66306d2..ca305e11a9 100644
Binary files a/graphics/items/icons/pretty_feather.png and b/graphics/items/icons/pretty_feather.png differ
diff --git a/graphics/items/icons/prism_scale.png b/graphics/items/icons/prism_scale.png
index f992c3bd84..fe9827bedb 100755
Binary files a/graphics/items/icons/prism_scale.png and b/graphics/items/icons/prism_scale.png differ
diff --git a/graphics/items/icons/psychic_gem.png b/graphics/items/icons/psychic_gem.png
deleted file mode 100644
index b73184955e..0000000000
Binary files a/graphics/items/icons/psychic_gem.png and /dev/null differ
diff --git a/graphics/items/icons/psychic_seed.png b/graphics/items/icons/psychic_seed.png
deleted file mode 100644
index 4c90afb9c9..0000000000
Binary files a/graphics/items/icons/psychic_seed.png and /dev/null differ
diff --git a/graphics/items/icons/purple_nectar.png b/graphics/items/icons/purple_nectar.png
deleted file mode 100755
index f792b5ff55..0000000000
Binary files a/graphics/items/icons/purple_nectar.png and /dev/null differ
diff --git a/graphics/items/icons/quick_powder.png b/graphics/items/icons/quick_powder.png
deleted file mode 100644
index fa56dcca7c..0000000000
Binary files a/graphics/items/icons/quick_powder.png and /dev/null differ
diff --git a/graphics/items/icons/rage_candy_bar.png b/graphics/items/icons/rage_candy_bar.png
index feb5b82cce..7d2e08cf8f 100644
Binary files a/graphics/items/icons/rage_candy_bar.png and b/graphics/items/icons/rage_candy_bar.png differ
diff --git a/graphics/items/icons/rare_bone.png b/graphics/items/icons/rare_bone.png
deleted file mode 100755
index eb5665a351..0000000000
Binary files a/graphics/items/icons/rare_bone.png and /dev/null differ
diff --git a/graphics/items/icons/relic_band.png b/graphics/items/icons/relic_band.png
index 902e04f7cc..83f44ee9cb 100644
Binary files a/graphics/items/icons/relic_band.png and b/graphics/items/icons/relic_band.png differ
diff --git a/graphics/items/icons/relic_crown.png b/graphics/items/icons/relic_crown.png
index 7511a2e081..2f8987e704 100644
Binary files a/graphics/items/icons/relic_crown.png and b/graphics/items/icons/relic_crown.png differ
diff --git a/graphics/items/icons/relic_statue.png b/graphics/items/icons/relic_statue.png
index 927aa4b8b8..0813c3b36b 100644
Binary files a/graphics/items/icons/relic_statue.png and b/graphics/items/icons/relic_statue.png differ
diff --git a/graphics/items/icons/relic_vase.png b/graphics/items/icons/relic_vase.png
index aa8698c1a2..ae46330342 100644
Binary files a/graphics/items/icons/relic_vase.png and b/graphics/items/icons/relic_vase.png differ
diff --git a/graphics/items/icons/resist_feather.png b/graphics/items/icons/resist_feather.png
deleted file mode 100644
index d717151621..0000000000
Binary files a/graphics/items/icons/resist_feather.png and /dev/null differ
diff --git a/graphics/items/icons/ring_target.png b/graphics/items/icons/ring_target.png
index 08b044df76..9a9c5ea3ef 100755
Binary files a/graphics/items/icons/ring_target.png and b/graphics/items/icons/ring_target.png differ
diff --git a/graphics/items/icons/rock_gem.png b/graphics/items/icons/rock_gem.png
deleted file mode 100644
index fdf634b730..0000000000
Binary files a/graphics/items/icons/rock_gem.png and /dev/null differ
diff --git a/graphics/items/icons/sacred_ash.png b/graphics/items/icons/sacred_ash.png
deleted file mode 100755
index ca9279539e..0000000000
Binary files a/graphics/items/icons/sacred_ash.png and /dev/null differ
diff --git a/graphics/items/icons/sand.png b/graphics/items/icons/sand.png
new file mode 100644
index 0000000000..86bcc9de6c
Binary files /dev/null and b/graphics/items/icons/sand.png differ
diff --git a/graphics/items/icons/shock_drive.png b/graphics/items/icons/shock_drive.png
deleted file mode 100644
index 99f8e512c4..0000000000
Binary files a/graphics/items/icons/shock_drive.png and /dev/null differ
diff --git a/graphics/items/icons/sky_plate.png b/graphics/items/icons/sky_plate.png
deleted file mode 100644
index 0d2a910bca..0000000000
Binary files a/graphics/items/icons/sky_plate.png and /dev/null differ
diff --git a/graphics/items/icons/soft_sand.png b/graphics/items/icons/soft_sand.png
deleted file mode 100755
index 29a4fde0de..0000000000
Binary files a/graphics/items/icons/soft_sand.png and /dev/null differ
diff --git a/graphics/items/icons/splash_plate.png b/graphics/items/icons/splash_plate.png
deleted file mode 100644
index c75fe54736..0000000000
Binary files a/graphics/items/icons/splash_plate.png and /dev/null differ
diff --git a/graphics/items/icons/spooky_plate.png b/graphics/items/icons/spooky_plate.png
deleted file mode 100644
index d3dbfaf0c8..0000000000
Binary files a/graphics/items/icons/spooky_plate.png and /dev/null differ
diff --git a/graphics/items/icons/stable_mulch.png b/graphics/items/icons/stable_mulch.png
index be4369d07c..ae16559ac3 100644
Binary files a/graphics/items/icons/stable_mulch.png and b/graphics/items/icons/stable_mulch.png differ
diff --git a/graphics/items/icons/stardust.png b/graphics/items/icons/stardust.png
deleted file mode 100755
index 1f427cfbef..0000000000
Binary files a/graphics/items/icons/stardust.png and /dev/null differ
diff --git a/graphics/items/icons/steel_gem.png b/graphics/items/icons/steel_gem.png
deleted file mode 100644
index 65495811f3..0000000000
Binary files a/graphics/items/icons/steel_gem.png and /dev/null differ
diff --git a/graphics/items/icons/stone_plate.png b/graphics/items/icons/stone_plate.png
deleted file mode 100644
index 4aa9ba2848..0000000000
Binary files a/graphics/items/icons/stone_plate.png and /dev/null differ
diff --git a/graphics/items/icons/swift_feather.png b/graphics/items/icons/swift_feather.png
deleted file mode 100644
index 75af06017c..0000000000
Binary files a/graphics/items/icons/swift_feather.png and /dev/null differ
diff --git a/graphics/items/icons/electric_seed.png b/graphics/items/icons/terrain_seed.png
similarity index 100%
rename from graphics/items/icons/electric_seed.png
rename to graphics/items/icons/terrain_seed.png
diff --git a/graphics/items/icons/toxic_plate.png b/graphics/items/icons/toxic_plate.png
deleted file mode 100644
index f282c0f3a7..0000000000
Binary files a/graphics/items/icons/toxic_plate.png and /dev/null differ
diff --git a/graphics/items/icons/type_gem.png b/graphics/items/icons/type_gem.png
new file mode 100644
index 0000000000..22be66dcb4
Binary files /dev/null and b/graphics/items/icons/type_gem.png differ
diff --git a/graphics/items/icons/ultranecrozium_z.png b/graphics/items/icons/ultranecrozium_z.png
index 52e984598e..3b3278d594 100644
Binary files a/graphics/items/icons/ultranecrozium_z.png and b/graphics/items/icons/ultranecrozium_z.png differ
diff --git a/graphics/items/icons/water_gem.png b/graphics/items/icons/water_gem.png
deleted file mode 100644
index 555d92ccca..0000000000
Binary files a/graphics/items/icons/water_gem.png and /dev/null differ
diff --git a/graphics/items/icons/white_apricorn.png b/graphics/items/icons/white_apricorn.png
deleted file mode 100755
index 976779af70..0000000000
Binary files a/graphics/items/icons/white_apricorn.png and /dev/null differ
diff --git a/graphics/items/icons/wide_lens.png b/graphics/items/icons/wide_lens.png
index dd1e92c2c2..6b91bb4404 100644
Binary files a/graphics/items/icons/wide_lens.png and b/graphics/items/icons/wide_lens.png differ
diff --git a/graphics/items/icons/x_special_defense.png b/graphics/items/icons/x_special_defense.png
deleted file mode 100755
index 18dd6d5cc8..0000000000
Binary files a/graphics/items/icons/x_special_defense.png and /dev/null differ
diff --git a/graphics/items/icons/yellow_apricorn.png b/graphics/items/icons/yellow_apricorn.png
deleted file mode 100755
index 293b4054f2..0000000000
Binary files a/graphics/items/icons/yellow_apricorn.png and /dev/null differ
diff --git a/graphics/items/icons/yellow_nectar.png b/graphics/items/icons/yellow_nectar.png
deleted file mode 100755
index c097f40926..0000000000
Binary files a/graphics/items/icons/yellow_nectar.png and /dev/null differ
diff --git a/graphics/items/icons/z_power_ring.png b/graphics/items/icons/z_power_ring.png
index addf901e15..9f0a952126 100644
Binary files a/graphics/items/icons/z_power_ring.png and b/graphics/items/icons/z_power_ring.png differ
diff --git a/graphics/items/icons/zap_plate.png b/graphics/items/icons/zap_plate.png
deleted file mode 100644
index 3e355ca995..0000000000
Binary files a/graphics/items/icons/zap_plate.png and /dev/null differ
diff --git a/graphics/items/icons/zygarde_cube.png b/graphics/items/icons/zygarde_cube.png
index b577dcecd8..16f67e765f 100644
Binary files a/graphics/items/icons/zygarde_cube.png and b/graphics/items/icons/zygarde_cube.png differ
diff --git a/include/config/pokemon.h b/include/config/pokemon.h
index fdee4e8ad2..e4038bfbad 100644
--- a/include/config/pokemon.h
+++ b/include/config/pokemon.h
@@ -2,12 +2,12 @@
#define GUARD_CONFIG_POKEMON_H
// Species data settings
-#define P_UPDATED_TYPES GEN_LATEST // Since Gen 6, several Pokémon were changed to be partially or fully Fairy type.
-#define P_UPDATED_STATS GEN_LATEST // Since Gen 6, Pokémon stats are updated with each passing generation.
-#define P_UPDATED_ABILITIES GEN_LATEST // Since Gen 6, certain Pokémon have their abilities changed.
+#define P_UPDATED_TYPES GEN_LATEST // Some Pokémon have received type updates after their introduction.
+#define P_UPDATED_STATS GEN_LATEST // Some Pokémon have received base stat updates after their introduction.
+#define P_UPDATED_ABILITIES GEN_LATEST // Since Gen 4, certain Pokémon have had their abilities changed.
#define P_UPDATED_EGG_GROUPS GEN_LATEST // Since Gen 8, certain Pokémon have gained new egg groups.
#define P_UPDATED_FRIENDSHIP GEN_LATEST // Since Gen 8, the base friendship of certain Pokémon was changed.
-#define P_UPDATED_EVS GEN_LATEST // Some Pokémon have received EV updates after their introduction.
+#define P_UPDATED_EVS GEN_LATEST // Since Gen 4, some Pokémon have received EV updates.
#define P_UPDATED_EXP_YIELDS GEN_LATEST // Since Gen 5, some Pokémon have received base Experience changes.
// Learnsets
@@ -17,7 +17,7 @@
// GEN_1/2/3/4/5/6/7: Yellow, Crystal, RSE, HGSS, B2W2, ORAS, USUM learnsets respectively.
// GEN_8: Use the following priority: BDSP for Gen1-4 Pokémon, then LA for species introduced in that game, then SwSh for species present in those games. Otherwise, use GEN_7.
// GEN_9: SV For species present in those games. Otherwise use GEN_8.
-#define P_EVOLUTION_LEVEL_1_LEARN GEN_LATEST // In Gen 8+, Pokémon evolving while at level 1 do not get the chance to learn their level 1 moves, while before they did.
+#define P_EVOLUTION_LEVEL_1_LEARN GEN_LATEST // Since Gen 8, Pokémon evolving while at level 1 do not get the chance to learn their level 1 moves, while before they did.
// Evolution settings
#define P_FRIENDSHIP_EVO_THRESHOLD GEN_LATEST // Since Gen 8, Pokémon that evolve by friendship evolve at or above 160 friendship instead of 220.
@@ -25,13 +25,13 @@
// Breeding settings
#define P_NIDORAN_M_DITTO_BREED GEN_LATEST // Since Gen 5, when Nidoran♂ breeds with Ditto it can produce Nidoran♀ offspring. Before, it would only yield male offspring. This change also applies to Volbeat.
#define P_INCENSE_BREEDING GEN_LATEST // Since Gen 9, cross-generation Baby Pokémon don't require Incense being held by the parents to be obtained via breeding.
-#define P_EGG_HATCH_LEVEL GEN_LATEST // Since Gen 4, Pokémon will hatch from eggs at level 1 instead of 5.
-#define P_BALL_INHERITING GEN_LATEST // Since Gen 6, Eggs from the Daycare will inherit the Poké Ball from their mother. From Gen 7 onwards, the father can pass it down as well, as long as it's of the same species as the mother.
+#define P_EGG_HATCH_LEVEL GEN_LATEST // Since Gen 4, Pokémon will hatch from Eggs at level 1 instead of 5.
+#define P_BALL_INHERITING GEN_LATEST // Since Gen 6, Eggs from the Day Care will inherit the Poké Ball from their mother. From Gen 7 onwards, the father can pass it down as well, as long as it's of the same species as the mother.
#define P_TM_INHERITANCE GEN_LATEST // Since Gen 6, the father no longer passes down TMs to the baby.
#define P_MOTHER_EGG_MOVE_INHERITANCE GEN_LATEST // Since Gen 6, the mother can also pass down Egg Moves.
-#define P_NATURE_INHERITANCE GEN_LATEST // In Gen 3, Everstone grants Ditto and mothers a 50% chance to pass on Nature. Since Gen 4, anyone can pass on nature. Since Gen 5, the chance is 100%.
-#define P_ABILITY_INHERITANCE GEN_LATEST // In B2W2, a female Pokémon has an 80% chance of passing down their ability if bred with a male. Since Gen 6, the chance is 80% for normal ability and 60% for Hidden Ability, and anyone can pass down their abilities if bred with Ditto. NOTE: BW's effect: 60% chance to pass down HA and random for normal ability has been omitted.
-#define P_EGG_MOVE_TRANSFER GEN_LATEST // Starting in Gen 8, if two Pokémon of the same species are together in the Daycare, one knows an Egg Move, and the other has an empty slot, the other Pokémon will receive the Egg Move in the empty slot. In Gen 9, if a Pokémon holds a Mirror Herb, it will receive Egg Moves from the other regardless of species.
+#define P_NATURE_INHERITANCE GEN_LATEST // In Gen 3, Everstone grants Ditto and mothers a 50% chance to pass on Nature. Since Gen 4, anyone can pass on a Nature. Since Gen 5, the chance is 100%.
+#define P_ABILITY_INHERITANCE GEN_LATEST // In B2W2, a female Pokémon has an 80% chance of passing down their Ability if bred with a male. Since Gen 6, the chance is 80% for regular Ability and 60% for Hidden Ability, and anyone can pass down their Abilities if bred with Ditto. NOTE: BW's effect: 60% chance to pass down HA and random for regular Ability has been omitted.
+#define P_EGG_MOVE_TRANSFER GEN_LATEST // Starting in Gen 8, if two Pokémon of the same species are together in the Day Care, one knows an Egg Move, and the other has an empty slot, the other Pokémon will receive the Egg Move in the empty slot. In Gen 9, if a Pokémon holds a Mirror Herb, it will receive Egg Moves from the other regardless of species.
#define P_SCATTERBUG_LINE_FORM_BREED SPECIES_SCATTERBUG_FANCY // Choose the Scatterbug form all Vivillon/Spewpa/Scatterbug will breed into, basically aligning with the "location" of the player's game.
// Species-specific settings
@@ -41,8 +41,8 @@
// Species graphic settings
#define P_GENDER_DIFFERENCES TRUE // If TRUE, Pokémon will have graphical-only differences when they're female. Female *forms* such as Meowstic are not affected by this.
-#define P_CUSTOM_GENDER_DIFF_ICONS TRUE // If TRUE, will give more Pokémon custom icons for their female differences, i.e. Hippopotas and Hippowdon
-#define P_ARCEUS_UNIQUE_FORM_ICONS GEN_LATEST // Since Gen 9, Arceus additionally changes its icon to reflect its current form.
+#define P_CUSTOM_GENDER_DIFF_ICONS TRUE // If TRUE, more Pokémon will have custom icons for their female differences, such as Hippopotas and Hippowdon.
+#define P_ARCEUS_UNIQUE_FORM_ICONS GEN_LATEST // Since Gen 9, Arceus changes its icon to reflect its current form.
#define P_FOOTPRINTS TRUE // If TRUE, Pokémon will have footprints (as was the case up to Gen 5 and in BDSP). Disabling this saves some ROM space.
#define P_TWO_FRAME_FRONT_SPRITES TRUE // In Pokémon Emerald, Pokémon front sprites always consist of two frames. This config can revert it to only use the first frame, as is the case in the other Gen 3 games.
#define P_GBA_STYLE_SPECIES_GFX FALSE // By default, Pokémon sprites use Gen 4/5's style. This config can revert them back to GBA-style. NOTE: B_ENEMY_MON_SHADOW_STYLE is disabled when using these sprites for now.
@@ -55,11 +55,11 @@
#define P_EV_CAP GEN_LATEST // Since Gen 6, the max EVs per stat is 252 instead of 255.
#define P_SHOW_TERA_TYPE GEN_8 // Since Gen 9, the Tera Type is shown on the summary screen.
#define P_TM_LITERACY GEN_LATEST // Since Gen 6, TM illiterate Pokémon can learn TMs that teach moves that are in their level-up learnsets.
-#define P_CAN_FORGET_HIDDEN_MOVE FALSE // If TRUE, Pokémon can forget any move, even if it is a Hidden Move.
-#define P_ASK_MOVE_CONFIRMATION FALSE // If FALSE, when a player decides not to learn a Move, the game does not ask the player for confirmation.
-#define P_EGG_CYCLE_LENGTH GEN_LATEST // Since Gen 8, egg cycles take half as many steps as before. Previous Gens have some varied step counts around 255.
-#define P_ONLY_OBTAINABLE_SHINIES FALSE // If TRUE, Pokémon encountered in the Battle Pyramid or while catching is disabled won't be shiny.
-#define P_NO_SHINIES_WITHOUT_POKEBALLS FALSE // If TRUE, Pokémon encountered when the player is out of Poké Balls won't be shiny
+#define P_CAN_FORGET_HIDDEN_MOVE FALSE // If TRUE, Pokémon can forget any move, even if it is an HM.
+#define P_ASK_MOVE_CONFIRMATION FALSE // If FALSE, when a player decides not to learn a move, the game does not ask the player for confirmation.
+#define P_EGG_CYCLE_LENGTH GEN_LATEST // Since Gen 8, Egg cycles take half as many steps as before. Previous generations have some varied step counts around 255.
+#define P_ONLY_OBTAINABLE_SHINIES FALSE // If TRUE, Pokémon encountered in the Battle Pyramid or while catching is disabled won't be Shiny.
+#define P_NO_SHINIES_WITHOUT_POKEBALLS FALSE // If TRUE, Pokémon encountered when the player is out of Poké Balls won't be Shiny.
#define P_SHOW_DYNAMIC_TYPES FALSE // If TRUE, all moves with dynamic type changes will be reflected as their current type in battle/summary screens instead of just select ones like in vanilla.
// Learnset helper toggles
diff --git a/include/constants/script_commands.h b/include/constants/script_commands.h
deleted file mode 100644
index 4adf99ccef..0000000000
--- a/include/constants/script_commands.h
+++ /dev/null
@@ -1,238 +0,0 @@
-//
-// DO NOT MODIFY THIS FILE! It is auto-generated by tools/misc/make_scr_cmd_constants.py
-//
-#ifndef GUARD_SCR_CMD_CONSTANTS_H
-#define GUARD_SCR_CMD_CONSTANTS_H
-
-#define SCR_OP_NOP 0x00
-#define SCR_OP_NOP1 0x01
-#define SCR_OP_END 0x02
-#define SCR_OP_RETURN 0x03
-#define SCR_OP_CALL 0x04
-#define SCR_OP_GOTO 0x05
-#define SCR_OP_GOTO_IF 0x06
-#define SCR_OP_CALL_IF 0x07
-#define SCR_OP_GOTO_STD 0x08
-#define SCR_OP_CALL_STD 0x09
-#define SCR_OP_GOTO_STD_IF 0x0a
-#define SCR_OP_CALL_STD_IF 0x0b
-#define SCR_OP_RETURNRAM 0x0c
-#define SCR_OP_ENDRAM 0x0d
-#define SCR_OP_SETMYSTERYEVENTSTATUS 0x0e
-#define SCR_OP_LOAD_WORD 0x0f
-#define SCR_OP_LOAD_BYTE 0x10
-#define SCR_OP_SETPTR 0x11
-#define SCR_OP_LOADBYTEFROMPTR 0x12
-#define SCR_OP_SETPTRBYTE 0x13
-#define SCR_OP_COPYLOCAL 0x14
-#define SCR_OP_COPYBYTE 0x15
-#define SCR_OP_SETVAR 0x16
-#define SCR_OP_ADDVAR 0x17
-#define SCR_OP_SUBVAR 0x18
-#define SCR_OP_COPYVAR 0x19
-#define SCR_OP_SETORCOPYVAR 0x1a
-#define SCR_OP_COMPARE_LOCAL_TO_LOCAL 0x1b
-#define SCR_OP_COMPARE_LOCAL_TO_VALUE 0x1c
-#define SCR_OP_COMPARE_LOCAL_TO_PTR 0x1d
-#define SCR_OP_COMPARE_PTR_TO_LOCAL 0x1e
-#define SCR_OP_COMPARE_PTR_TO_VALUE 0x1f
-#define SCR_OP_COMPARE_PTR_TO_PTR 0x20
-#define SCR_OP_COMPARE_VAR_TO_VALUE 0x21
-#define SCR_OP_COMPARE_VAR_TO_VAR 0x22
-#define SCR_OP_CALLNATIVE 0x23
-#define SCR_OP_GOTONATIVE 0x24
-#define SCR_OP_SPECIAL 0x25
-#define SCR_OP_SPECIALVAR 0x26
-#define SCR_OP_WAITSTATE 0x27
-#define SCR_OP_DELAY 0x28
-#define SCR_OP_SETFLAG 0x29
-#define SCR_OP_CLEARFLAG 0x2a
-#define SCR_OP_CHECKFLAG 0x2b
-#define SCR_OP_INITCLOCK 0x2c
-#define SCR_OP_DOTIMEBASEDEVENTS 0x2d
-#define SCR_OP_GETTIME 0x2e
-#define SCR_OP_PLAYSE 0x2f
-#define SCR_OP_WAITSE 0x30
-#define SCR_OP_PLAYFANFARE 0x31
-#define SCR_OP_WAITFANFARE 0x32
-#define SCR_OP_PLAYBGM 0x33
-#define SCR_OP_SAVEBGM 0x34
-#define SCR_OP_FADEDEFAULTBGM 0x35
-#define SCR_OP_FADENEWBGM 0x36
-#define SCR_OP_FADEOUTBGM 0x37
-#define SCR_OP_FADEINBGM 0x38
-#define SCR_OP_WARP 0x39
-#define SCR_OP_WARPSILENT 0x3a
-#define SCR_OP_WARPDOOR 0x3b
-#define SCR_OP_WARPHOLE 0x3c
-#define SCR_OP_WARPTELEPORT 0x3d
-#define SCR_OP_SETWARP 0x3e
-#define SCR_OP_SETDYNAMICWARP 0x3f
-#define SCR_OP_SETDIVEWARP 0x40
-#define SCR_OP_SETHOLEWARP 0x41
-#define SCR_OP_GETPLAYERXY 0x42
-#define SCR_OP_GETPARTYSIZE 0x43
-#define SCR_OP_ADDITEM 0x44
-#define SCR_OP_REMOVEITEM 0x45
-#define SCR_OP_CHECKITEMSPACE 0x46
-#define SCR_OP_CHECKITEM 0x47
-#define SCR_OP_CHECKITEMTYPE 0x48
-#define SCR_OP_ADDPCITEM 0x49
-#define SCR_OP_CHECKPCITEM 0x4a
-#define SCR_OP_ADDDECORATION 0x4b
-#define SCR_OP_REMOVEDECORATION 0x4c
-#define SCR_OP_CHECKDECOR 0x4d
-#define SCR_OP_CHECKDECORSPACE 0x4e
-#define SCR_OP_APPLYMOVEMENT 0x4f
-#define SCR_OP_APPLYMOVEMENTAT 0x50
-#define SCR_OP_WAITMOVEMENT 0x51
-#define SCR_OP_WAITMOVEMENTAT 0x52
-#define SCR_OP_REMOVEOBJECT 0x53
-#define SCR_OP_REMOVEOBJECTAT 0x54
-#define SCR_OP_ADDOBJECT 0x55
-#define SCR_OP_ADDOBJECTAT 0x56
-#define SCR_OP_SETOBJECTXY 0x57
-#define SCR_OP_SHOWOBJECTAT 0x58
-#define SCR_OP_HIDEOBJECTAT 0x59
-#define SCR_OP_FACEPLAYER 0x5a
-#define SCR_OP_TURNOBJECT 0x5b
-#define SCR_OP_TRAINERBATTLE 0x5c
-#define SCR_OP_DOTRAINERBATTLE 0x5d
-#define SCR_OP_GOTOPOSTBATTLESCRIPT 0x5e
-#define SCR_OP_GOTOBEATENSCRIPT 0x5f
-#define SCR_OP_CHECKTRAINERFLAG 0x60
-#define SCR_OP_SETTRAINERFLAG 0x61
-#define SCR_OP_CLEARTRAINERFLAG 0x62
-#define SCR_OP_SETOBJECTXYPERM 0x63
-#define SCR_OP_COPYOBJECTXYTOPERM 0x64
-#define SCR_OP_SETOBJECTMOVEMENTTYPE 0x65
-#define SCR_OP_WAITMESSAGE 0x66
-#define SCR_OP_MESSAGE 0x67
-#define SCR_OP_CLOSEMESSAGE 0x68
-#define SCR_OP_LOCKALL 0x69
-#define SCR_OP_LOCK 0x6a
-#define SCR_OP_RELEASEALL 0x6b
-#define SCR_OP_RELEASE 0x6c
-#define SCR_OP_WAITBUTTONPRESS 0x6d
-#define SCR_OP_YESNOBOX 0x6e
-#define SCR_OP_MULTICHOICE 0x6f
-#define SCR_OP_MULTICHOICEDEFAULT 0x70
-#define SCR_OP_MULTICHOICEGRID 0x71
-#define SCR_OP_DRAWBOX 0x72
-#define SCR_OP_ERASEBOX 0x73
-#define SCR_OP_DRAWBOXTEXT 0x74
-#define SCR_OP_SHOWMONPIC 0x75
-#define SCR_OP_HIDEMONPIC 0x76
-#define SCR_OP_SHOWCONTESTPAINTING 0x77
-#define SCR_OP_BRAILLEMESSAGE 0x78
-#define SCR_OP_GIVEMON 0x79
-#define SCR_OP_GIVEEGG 0x7a
-#define SCR_OP_SETMONMOVE 0x7b
-#define SCR_OP_CHECKFIELDMOVE 0x7c
-#define SCR_OP_BUFFERSPECIESNAME 0x7d
-#define SCR_OP_BUFFERLEADMONSPECIESNAME 0x7e
-#define SCR_OP_BUFFERPARTYMONNICK 0x7f
-#define SCR_OP_BUFFERITEMNAME 0x80
-#define SCR_OP_BUFFERDECORATIONNAME 0x81
-#define SCR_OP_BUFFERMOVENAME 0x82
-#define SCR_OP_BUFFERNUMBERSTRING 0x83
-#define SCR_OP_BUFFERSTDSTRING 0x84
-#define SCR_OP_BUFFERSTRING 0x85
-#define SCR_OP_POKEMART 0x86
-#define SCR_OP_POKEMARTDECORATION 0x87
-#define SCR_OP_POKEMARTDECORATION2 0x88
-#define SCR_OP_PLAYSLOTMACHINE 0x89
-#define SCR_OP_SETBERRYTREE 0x8a
-#define SCR_OP_CHOOSECONTESTMON 0x8b
-#define SCR_OP_STARTCONTEST 0x8c
-#define SCR_OP_SHOWCONTESTRESULTS 0x8d
-#define SCR_OP_CONTESTLINKTRANSFER 0x8e
-#define SCR_OP_RANDOM 0x8f
-#define SCR_OP_ADDMONEY 0x90
-#define SCR_OP_REMOVEMONEY 0x91
-#define SCR_OP_CHECKMONEY 0x92
-#define SCR_OP_SHOWMONEYBOX 0x93
-#define SCR_OP_HIDEMONEYBOX 0x94
-#define SCR_OP_UPDATEMONEYBOX 0x95
-#define SCR_OP_GETPOKENEWSACTIVE 0x96
-#define SCR_OP_FADESCREEN 0x97
-#define SCR_OP_FADESCREENSPEED 0x98
-#define SCR_OP_SETFLASHLEVEL 0x99
-#define SCR_OP_ANIMATEFLASH 0x9a
-#define SCR_OP_MESSAGEAUTOSCROLL 0x9b
-#define SCR_OP_DOFIELDEFFECT 0x9c
-#define SCR_OP_SETFIELDEFFECTARGUMENT 0x9d
-#define SCR_OP_WAITFIELDEFFECT 0x9e
-#define SCR_OP_SETRESPAWN 0x9f
-#define SCR_OP_CHECKPLAYERGENDER 0xa0
-#define SCR_OP_PLAYMONCRY 0xa1
-#define SCR_OP_SETMETATILE 0xa2
-#define SCR_OP_RESETWEATHER 0xa3
-#define SCR_OP_SETWEATHER 0xa4
-#define SCR_OP_DOWEATHER 0xa5
-#define SCR_OP_SETSTEPCALLBACK 0xa6
-#define SCR_OP_SETMAPLAYOUTINDEX 0xa7
-#define SCR_OP_SETOBJECTSUBPRIORITY 0xa8
-#define SCR_OP_RESETOBJECTSUBPRIORITY 0xa9
-#define SCR_OP_CREATEVOBJECT 0xaa
-#define SCR_OP_TURNVOBJECT 0xab
-#define SCR_OP_OPENDOOR 0xac
-#define SCR_OP_CLOSEDOOR 0xad
-#define SCR_OP_WAITDOORANIM 0xae
-#define SCR_OP_SETDOOROPEN 0xaf
-#define SCR_OP_SETDOORCLOSED 0xb0
-#define SCR_OP_ADDELEVMENUITEM 0xb1
-#define SCR_OP_SHOWELEVMENU 0xb2
-#define SCR_OP_CHECKCOINS 0xb3
-#define SCR_OP_ADDCOINS 0xb4
-#define SCR_OP_REMOVECOINS 0xb5
-#define SCR_OP_SETWILDBATTLE 0xb6
-#define SCR_OP_DOWILDBATTLE 0xb7
-#define SCR_OP_SETVADDRESS 0xb8
-#define SCR_OP_VGOTO 0xb9
-#define SCR_OP_VCALL 0xba
-#define SCR_OP_VGOTO_IF 0xbb
-#define SCR_OP_VCALL_IF 0xbc
-#define SCR_OP_VMESSAGE 0xbd
-#define SCR_OP_VBUFFERMESSAGE 0xbe
-#define SCR_OP_VBUFFERSTRING 0xbf
-#define SCR_OP_SHOWCOINSBOX 0xc0
-#define SCR_OP_HIDECOINSBOX 0xc1
-#define SCR_OP_UPDATECOINSBOX 0xc2
-#define SCR_OP_INCREMENTGAMESTAT 0xc3
-#define SCR_OP_SETESCAPEWARP 0xc4
-#define SCR_OP_WAITMONCRY 0xc5
-#define SCR_OP_BUFFERBOXNAME 0xc6
-#define SCR_OP_TEXTCOLOR 0xc7
-#define SCR_OP_LOADHELP 0xc8
-#define SCR_OP_UNLOADHELP 0xc9
-#define SCR_OP_SIGNMSG 0xca
-#define SCR_OP_NORMALMSG 0xcb
-#define SCR_OP_COMPAREHIDDENVAR 0xcc
-#define SCR_OP_SETMODERNFATEFULENCOUNTER 0xcd
-#define SCR_OP_CHECKMODERNFATEFULENCOUNTER 0xce
-#define SCR_OP_TRYWONDERCARDSCRIPT 0xcf
-#define SCR_OP_SETWORLDMAPFLAG 0xd0
-#define SCR_OP_WARPSPINENTER 0xd1
-#define SCR_OP_SETMONMETLOCATION 0xd2
-#define SCR_OP_MOVEROTATINGTILEOBJECTS 0xd3
-#define SCR_OP_TURNROTATINGTILEOBJECTS 0xd4
-#define SCR_OP_INITROTATINGTILEPUZZLE 0xd5
-#define SCR_OP_FREEROTATINGTILEPUZZLE 0xd6
-#define SCR_OP_WARPMOSSDEEPGYM 0xd7
-#define SCR_OP_SELECTAPPROACHINGTRAINER 0xd8
-#define SCR_OP_LOCKFORTRAINER 0xd9
-#define SCR_OP_CLOSEBRAILLEMESSAGE 0xda
-#define SCR_OP_MESSAGEINSTANT 0xdb
-#define SCR_OP_FADESCREENSWAPBUFFERS 0xdc
-#define SCR_OP_BUFFERTRAINERCLASSNAME 0xdd
-#define SCR_OP_BUFFERTRAINERNAME 0xde
-#define SCR_OP_POKENAVCALL 0xdf
-#define SCR_OP_WARPWHITEFADE 0xe0
-#define SCR_OP_BUFFERCONTESTNAME 0xe1
-#define SCR_OP_BUFFERITEMNAMEPLURAL 0xe2
-#define SCR_OP_DYNMULTICHOICE 0xe3
-#define SCR_OP_DYNMULTIPUSH 0xe4
-#define SCR_OP_HIDEFOLLOWER 0xe5
-
-#endif // GUARD_SCR_CMD_CONSTANTS_H
diff --git a/include/graphics.h b/include/graphics.h
index bc168e39a1..8ee6cfb667 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -373,6 +373,7 @@ extern const u16 gItemIconPalette_UltraBall[];
extern const u32 gItemIcon_MasterBall[];
extern const u16 gItemIconPalette_MasterBall[];
extern const u32 gItemIcon_PremierBall[];
+extern const u16 gItemIconPalette_PremierBall[];
extern const u32 gItemIcon_HealBall[];
extern const u16 gItemIconPalette_HealBall[];
extern const u32 gItemIcon_NetBall[];
@@ -442,7 +443,6 @@ extern const u16 gItemIconPalette_EnergyRoot[];
extern const u16 gItemIconPalette_HealPowder[];
extern const u32 gItemIcon_RevivalHerb[];
extern const u16 gItemIconPalette_RevivalHerb[];
-extern const u32 gItemIcon_Antidote[];
extern const u16 gItemIconPalette_Antidote[];
extern const u32 gItemIcon_StatusHeal[];
extern const u16 gItemIconPalette_ParalyzeHeal[];
@@ -458,7 +458,6 @@ extern const u16 gItemIconPalette_Elixir[];
extern const u16 gItemIconPalette_MaxElixir[];
extern const u32 gItemIcon_BerryJuice[];
extern const u16 gItemIconPalette_BerryJuice[];
-extern const u32 gItemIcon_SacredAsh[];
extern const u16 gItemIconPalette_SacredAsh[];
extern const u32 gItemIcon_SweetHeart[];
extern const u16 gItemIconPalette_SweetHeart[];
@@ -495,17 +494,12 @@ extern const u16 gItemIconPalette_PPUp[];
extern const u32 gItemIcon_PPMax[];
extern const u16 gItemIconPalette_PPMax[];
// EV Feathers
-extern const u32 gItemIcon_HealthFeather[];
+extern const u32 gItemIcon_EVFeather[];
extern const u16 gItemIconPalette_HealthFeather[];
-extern const u32 gItemIcon_MuscleFeather[];
extern const u16 gItemIconPalette_MuscleFeather[];
-extern const u32 gItemIcon_ResistFeather[];
extern const u16 gItemIconPalette_ResistFeather[];
-extern const u32 gItemIcon_GeniusFeather[];
extern const u16 gItemIconPalette_GeniusFeather[];
-extern const u32 gItemIcon_CleverFeather[];
extern const u16 gItemIconPalette_CleverFeather[];
-extern const u32 gItemIcon_SwiftFeather[];
extern const u16 gItemIconPalette_SwiftFeather[];
// Ability Modifiers
extern const u32 gItemIcon_AbilityCapsule[];
@@ -555,7 +549,6 @@ extern const u32 gItemIcon_BattleStatItem[];
extern const u16 gItemIconPalette_XAttack[];
extern const u16 gItemIconPalette_XDefend[];
extern const u16 gItemIconPalette_XSpecial[];
-extern const u32 gItemIcon_XSpecialDefense[];
extern const u16 gItemIconPalette_XSpecialDefense[];
extern const u16 gItemIconPalette_XSpeed[];
extern const u16 gItemIconPalette_XAccuracy[];
@@ -588,10 +581,8 @@ extern const u16 gItemIconPalette_Pearl[];
extern const u32 gItemIcon_BigPearl[];
extern const u32 gItemIcon_PearlString[];
extern const u16 gItemIconPalette_PearlString[];
-extern const u32 gItemIcon_Stardust[];
-extern const u16 gItemIconPalette_Star[];
extern const u32 gItemIcon_StarPiece[];
-extern const u32 gItemIcon_CometShard[];
+extern const u16 gItemIconPalette_Star[];
extern const u16 gItemIconPalette_CometShard[];
extern const u16 gItemIconPalette_ShoalSalt[];
extern const u32 gItemIcon_ShoalShell[];
@@ -605,8 +596,6 @@ extern const u32 gItemIcon_HeartScale[];
extern const u16 gItemIconPalette_HeartScale[];
extern const u32 gItemIcon_Honey[];
extern const u16 gItemIconPalette_Honey[];
-extern const u32 gItemIcon_RareBone[];
-extern const u16 gItemIconPalette_RareBone[];
extern const u32 gItemIcon_OddKeystone[];
extern const u16 gItemIconPalette_OddKeystone[];
extern const u32 gItemIcon_PrettyFeather[];
@@ -663,19 +652,13 @@ extern const u16 gItemIconPalette_SurpriseMulch[];
extern const u16 gItemIconPalette_BoostMulch[];
extern const u16 gItemIconPalette_AmazeMulch[];
// Apricorns
-extern const u32 gItemIcon_RedApricorn[];
+extern const u32 gItemIcon_Apricorn[];
extern const u16 gItemIconPalette_RedApricorn[];
-extern const u32 gItemIcon_BlueApricorn[];
extern const u16 gItemIconPalette_BlueApricorn[];
-extern const u32 gItemIcon_YellowApricorn[];
extern const u16 gItemIconPalette_YellowApricorn[];
-extern const u32 gItemIcon_GreenApricorn[];
extern const u16 gItemIconPalette_GreenApricorn[];
-extern const u32 gItemIcon_PinkApricorn[];
extern const u16 gItemIconPalette_PinkApricorn[];
-extern const u32 gItemIcon_WhiteApricorn[];
extern const u16 gItemIconPalette_WhiteApricorn[];
-extern const u32 gItemIcon_BlackApricorn[];
extern const u16 gItemIconPalette_BlackApricorn[];
extern const u32 gItemIcon_WishingPiece[];
extern const u16 gItemIconPalette_WishingPiece[];
@@ -793,57 +776,35 @@ extern const u16 gItemIconPalette_MasterpieceTeacup[];
extern const u32 gItemIcon_MetalAlloy[];
extern const u16 gItemIconPalette_MetalAlloy[];
// Nectars
-extern const u32 gItemIcon_RedNectar[];
+extern const u32 gItemIcon_Nectar[];
extern const u16 gItemIconPalette_RedNectar[];
-extern const u32 gItemIcon_YellowNectar[];
extern const u16 gItemIconPalette_YellowNectar[];
-extern const u32 gItemIcon_PinkNectar[];
extern const u16 gItemIconPalette_PinkNectar[];
-extern const u32 gItemIcon_PurpleNectar[];
extern const u16 gItemIconPalette_PurpleNectar[];
// Plates
-extern const u32 gItemIcon_FlamePlate[];
+extern const u32 gItemIcon_Plate[];
extern const u16 gItemIconPalette_FlamePlate[];
-extern const u32 gItemIcon_SplashPlate[];
extern const u16 gItemIconPalette_SplashPlate[];
-extern const u32 gItemIcon_ZapPlate[];
extern const u16 gItemIconPalette_ZapPlate[];
-extern const u32 gItemIcon_MeadowPlate[];
extern const u16 gItemIconPalette_MeadowPlate[];
-extern const u32 gItemIcon_IciclePlate[];
extern const u16 gItemIconPalette_IciclePlate[];
-extern const u32 gItemIcon_FistPlate[];
extern const u16 gItemIconPalette_FistPlate[];
-extern const u32 gItemIcon_ToxicPlate[];
extern const u16 gItemIconPalette_ToxicPlate[];
-extern const u32 gItemIcon_EarthPlate[];
extern const u16 gItemIconPalette_EarthPlate[];
-extern const u32 gItemIcon_SkyPlate[];
extern const u16 gItemIconPalette_SkyPlate[];
-extern const u32 gItemIcon_MindPlate[];
extern const u16 gItemIconPalette_MindPlate[];
-extern const u32 gItemIcon_InsectPlate[];
extern const u16 gItemIconPalette_InsectPlate[];
-extern const u32 gItemIcon_StonePlate[];
extern const u16 gItemIconPalette_StonePlate[];
-extern const u32 gItemIcon_SpookyPlate[];
extern const u16 gItemIconPalette_SpookyPlate[];
-extern const u32 gItemIcon_DracoPlate[];
extern const u16 gItemIconPalette_DracoPlate[];
-extern const u32 gItemIcon_DreadPlate[];
extern const u16 gItemIconPalette_DreadPlate[];
-extern const u32 gItemIcon_IronPlate[];
extern const u16 gItemIconPalette_IronPlate[];
-extern const u32 gItemIcon_PixiePlate[];
extern const u16 gItemIconPalette_PixiePlate[];
// Drives
-extern const u32 gItemIcon_DouseDrive[];
+extern const u32 gItemIcon_Drive[];
extern const u16 gItemIconPalette_DouseDrive[];
-extern const u32 gItemIcon_ShockDrive[];
extern const u16 gItemIconPalette_ShockDrive[];
-extern const u32 gItemIcon_BurnDrive[];
extern const u16 gItemIconPalette_BurnDrive[];
-extern const u32 gItemIcon_ChillDrive[];
extern const u16 gItemIconPalette_ChillDrive[];
// Memories
extern const u32 gItemIcon_FireMemory[];
@@ -984,41 +945,24 @@ extern const u16 gItemIconPalette_Audinite[];
extern const u32 gItemIcon_Diancite[];
extern const u16 gItemIconPalette_Diancite[];
// Gems
-extern const u32 gItemIcon_NormalGem[];
+extern const u32 gItemIcon_TypeGem[];
extern const u16 gItemIconPalette_NormalGem[];
-extern const u32 gItemIcon_FireGem[];
extern const u16 gItemIconPalette_FireGem[];
-extern const u32 gItemIcon_WaterGem[];
extern const u16 gItemIconPalette_WaterGem[];
-extern const u32 gItemIcon_ElectricGem[];
extern const u16 gItemIconPalette_ElectricGem[];
-extern const u32 gItemIcon_GrassGem[];
extern const u16 gItemIconPalette_GrassGem[];
-extern const u32 gItemIcon_IceGem[];
extern const u16 gItemIconPalette_IceGem[];
-extern const u32 gItemIcon_FightingGem[];
extern const u16 gItemIconPalette_FightingGem[];
-extern const u32 gItemIcon_PoisonGem[];
extern const u16 gItemIconPalette_PoisonGem[];
-extern const u32 gItemIcon_GroundGem[];
extern const u16 gItemIconPalette_GroundGem[];
-extern const u32 gItemIcon_FlyingGem[];
extern const u16 gItemIconPalette_FlyingGem[];
-extern const u32 gItemIcon_PsychicGem[];
extern const u16 gItemIconPalette_PsychicGem[];
-extern const u32 gItemIcon_BugGem[];
extern const u16 gItemIconPalette_BugGem[];
-extern const u32 gItemIcon_RockGem[];
extern const u16 gItemIconPalette_RockGem[];
-extern const u32 gItemIcon_GhostGem[];
extern const u16 gItemIconPalette_GhostGem[];
-extern const u32 gItemIcon_DragonGem[];
extern const u16 gItemIconPalette_DragonGem[];
-extern const u32 gItemIcon_DarkGem[];
extern const u16 gItemIconPalette_DarkGem[];
-extern const u32 gItemIcon_SteelGem[];
extern const u16 gItemIconPalette_SteelGem[];
-extern const u32 gItemIcon_FairyGem[];
extern const u16 gItemIconPalette_FairyGem[];
// Z-Crystals
extern const u32 gItemIcon_NormaliumZ[];
@@ -1096,13 +1040,12 @@ extern const u32 gItemIcon_LightBall[];
extern const u16 gItemIconPalette_LightBall[];
extern const u32 gItemIcon_Leek[];
extern const u16 gItemIconPalette_Leek[];
-extern const u32 gItemIcon_ThickClub[];
-extern const u16 gItemIconPalette_ThickClub[];
+extern const u32 gItemIcon_Bone[];
+extern const u16 gItemIconPalette_Bone[];
extern const u32 gItemIcon_LuckyPunch[];
extern const u16 gItemIconPalette_LuckyPunch[];
-extern const u32 gItemIcon_MetalPowder[];
+extern const u32 gItemIcon_DittoPowder[];
extern const u16 gItemIconPalette_MetalPowder[];
-extern const u32 gItemIcon_QuickPowder[];
extern const u16 gItemIconPalette_QuickPowder[];
extern const u32 gItemIcon_DeepSeaScale[];
extern const u16 gItemIconPalette_DeepSeaScale[];
@@ -1174,7 +1117,7 @@ extern const u32 gItemIcon_BlackBelt[];
extern const u16 gItemIconPalette_BlackTypeEnhancingItem[];
extern const u32 gItemIcon_PoisonBarb[];
extern const u16 gItemIconPalette_PoisonBarb[];
-extern const u32 gItemIcon_SoftSand[];
+extern const u32 gItemIcon_Sand[];
extern const u16 gItemIconPalette_SoftSand[];
extern const u32 gItemIcon_SharpBeak[];
extern const u16 gItemIconPalette_SharpBeak[];
@@ -1213,13 +1156,10 @@ extern const u16 gItemIconPalette_SmoothRock[];
extern const u32 gItemIcon_IcyRock[];
extern const u16 gItemIconPalette_IcyRock[];
// Terrain Seeds
-extern const u32 gItemIcon_ElectricSeed[];
+extern const u32 gItemIcon_TerrainSeed[];
extern const u16 gItemIconPalette_ElectricSeed[];
-extern const u32 gItemIcon_PsychicSeed[];
extern const u16 gItemIconPalette_PsychicSeed[];
-extern const u32 gItemIcon_MistySeed[];
extern const u16 gItemIconPalette_MistySeed[];
-extern const u32 gItemIcon_GrassySeed[];
extern const u16 gItemIconPalette_GrassySeed[];
// Type-activated Stat Modifiers
extern const u32 gItemIcon_AbsorbBulb[];
diff --git a/include/overworld.h b/include/overworld.h
index e0df9c3b89..91a88dc88c 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -93,6 +93,7 @@ void SetDynamicWarpWithCoords(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId, s8
void SetWarpDestinationToDynamicWarp(u8 unusedWarpId);
void SetWarpDestinationToHealLocation(u8 healLocationId);
void SetWarpDestinationToLastHealLocation(void);
+void SetWarpDestinationForTeleport(void);
void SetLastHealLocationWarp(u8 healLocationId);
void UpdateEscapeWarp(s16 x, s16 y);
void SetEscapeWarp(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
diff --git a/python_tools/log.txt b/python_tools/log.txt
index aa3f7e39fc..41ddee216e 100644
--- a/python_tools/log.txt
+++ b/python_tools/log.txt
@@ -2986,3 +2986,15 @@
✅ 处理文件:c:\Users\Nox\Documents\GitHub\pokeemerald-expansion-Chinese\src\data\pokemon\species_info\gen_8_families.h
✅ 处理文件:c:\Users\Nox\Documents\GitHub\pokeemerald-expansion-Chinese\src\data\pokemon\species_info\gen_9_families.h
❌ 未找到 SPECIES_CAPSAKID,跳过
+✅ 处理文件:\\wsl.localhost\Ubuntu\home\nox\decomps\pokeemerald-expansion-chinese\src\data\pokemon\species_info\gen_8_families.h
+✅ 处理文件:\\wsl.localhost\Ubuntu\home\nox\decomps\pokeemerald-expansion-chinese\src\data\pokemon\species_info\gen_6_families.h
+❌ 未找到 SPECIES_ZYGARDE_10_AURA_BREAK,跳过
+✅ 处理文件:\\wsl.localhost\Ubuntu\home\nox\decomps\pokeemerald-expansion-chinese\src\data\pokemon\species_info\gen_9_families.h
+❌ 未找到 SPECIES_CAPSAKID,跳过
+✅ 处理文件:\\wsl.localhost\Ubuntu\home\nox\decomps\pokeemerald-expansion-chinese\src\data\pokemon\species_info\gen_3_families.h
+✅ 处理文件:\\wsl.localhost\Ubuntu\home\nox\decomps\pokeemerald-expansion-chinese\src\data\pokemon\species_info\gen_1_families.h
+✅ 处理文件:\\wsl.localhost\Ubuntu\home\nox\decomps\pokeemerald-expansion-chinese\src\data\pokemon\species_info\gen_4_families.h
+✅ 处理文件:\\wsl.localhost\Ubuntu\home\nox\decomps\pokeemerald-expansion-chinese\src\data\pokemon\species_info\gen_5_families.h
+✅ 处理文件:\\wsl.localhost\Ubuntu\home\nox\decomps\pokeemerald-expansion-chinese\src\data\pokemon\species_info\gen_7_families.h
+❌ 未找到 SPECIES_MIMIKYU_BUSTED_TOTEM,跳过
+✅ 处理文件:\\wsl.localhost\Ubuntu\home\nox\decomps\pokeemerald-expansion-chinese\src\data\pokemon\species_info\gen_2_families.h
diff --git a/python_tools/src/图鉴.xlsx b/python_tools/src/图鉴.xlsx
index 9da6c25bf0..c385c2cf84 100644
Binary files a/python_tools/src/图鉴.xlsx and b/python_tools/src/图鉴.xlsx differ
diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c
index eca9c3209f..7cbbb29e9b 100644
--- a/src/battle_ai_main.c
+++ b/src/battle_ai_main.c
@@ -2069,7 +2069,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|| !CanBattlerGetOrLoseItem(battlerAtk, aiData->items[battlerDef])
|| !CanBattlerGetOrLoseItem(battlerDef, aiData->items[battlerDef])
|| !CanBattlerGetOrLoseItem(battlerDef, gBattleMons[battlerAtk].item)
- || aiData->abilities[battlerAtk] == ABILITY_STICKY_HOLD
|| aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD
|| DoesSubstituteBlockMove(battlerAtk, battlerDef, move))
ADJUST_SCORE(-10);
@@ -2470,7 +2469,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|| aiData->items[battlerDef] != ITEM_NONE
|| !CanBattlerGetOrLoseItem(battlerAtk, gBattleMons[battlerAtk].item) // AI knows its own item
|| !CanBattlerGetOrLoseItem(battlerDef, gBattleMons[battlerAtk].item)
- || aiData->abilities[battlerAtk] == ABILITY_STICKY_HOLD
|| DoesSubstituteBlockMove(battlerAtk, battlerDef, move))
ADJUST_SCORE(-10);
break;
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index 80d05b12df..d1daded86e 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -2045,7 +2045,7 @@ static s32 GetMaxPriorityDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposi
static bool32 CanAbilityTrapOpponent(enum Ability ability, u32 opponent)
{
- if ((B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(opponent, TYPE_GHOST)))
+ if ((GetConfig(CONFIG_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(opponent, TYPE_GHOST)))
return FALSE;
else if (ability == ABILITY_SHADOW_TAG)
{
diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c
index 9e728d5213..21e7376cb7 100644
--- a/src/battle_ai_util.c
+++ b/src/battle_ai_util.c
@@ -474,7 +474,7 @@ bool32 AI_CanBattlerEscape(u32 battler)
{
enum HoldEffect holdEffect = gAiLogicData->holdEffects[battler];
- if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST))
+ if (GetConfig(CONFIG_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST))
return TRUE;
if (holdEffect == HOLD_EFFECT_SHED_SHELL)
return TRUE;
@@ -573,8 +573,8 @@ bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, enum DamageCategory c
ctx.updateFlags = FALSE;
ctx.abilityAtk = gAiLogicData->abilities[attacker];
ctx.abilityDef = gAiLogicData->abilities[target];
- ctx.holdEffectAtk = gAiLogicData->items[attacker];
- ctx.holdEffectDef = gAiLogicData->items[target];
+ ctx.holdEffectAtk = gAiLogicData->holdEffects[attacker];
+ ctx.holdEffectDef = gAiLogicData->holdEffects[target];
for (u32 i = 0; i < MAX_MON_MOVES; i++)
{
@@ -1394,8 +1394,8 @@ uq4_12_t AI_GetMoveEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef)
ctx.updateFlags = FALSE;
ctx.abilityAtk = gAiLogicData->abilities[battlerAtk];
ctx.abilityDef = gAiLogicData->abilities[battlerDef];
- ctx.holdEffectAtk = gAiLogicData->items[battlerAtk];
- ctx.holdEffectDef = gAiLogicData->items[battlerDef];
+ ctx.holdEffectAtk = gAiLogicData->holdEffects[battlerAtk];
+ ctx.holdEffectDef = gAiLogicData->holdEffects[battlerDef];
typeEffectiveness = CalcTypeEffectivenessMultiplier(&ctx);
RestoreBattlerData(battlerAtk);
@@ -3091,7 +3091,9 @@ static u32 GetLeechSeedDamage(u32 battler)
static u32 GetNightmareDamage(u32 battlerId)
{
u32 damage = 0;
- if (gBattleMons[battlerId].volatiles.nightmare && gBattleMons[battlerId].status1 & STATUS1_SLEEP)
+ if (gBattleMons[battlerId].volatiles.nightmare
+ && ((gBattleMons[battlerId].status1 & STATUS1_SLEEP)
+ || gAiLogicData->abilities[battlerId] == ABILITY_COMATOSE))
{
damage = GetNonDynamaxMaxHP(battlerId) / 4;
if (damage == 0)
diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c
index 4699f2008a..db537dc9ab 100644
--- a/src/battle_anim_effects_1.c
+++ b/src/battle_anim_effects_1.c
@@ -3424,7 +3424,7 @@ void AnimHyperBeamOrb(struct Sprite *sprite)
u16 speed;
u16 animNum = Random2();
- StartSpriteAnim(sprite, animNum % 8);
+ StartSpriteAnim(sprite, animNum % ARRAY_COUNT(gSolarBeamBigOrbAnimTable));
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
if (!IsOnPlayerSide(gBattleAnimAttacker))
diff --git a/src/battle_end_turn.c b/src/battle_end_turn.c
index 2e6c7159ee..096b307b8b 100644
--- a/src/battle_end_turn.c
+++ b/src/battle_end_turn.c
@@ -574,7 +574,7 @@ static bool32 HandleEndTurnNightmare(u32 battler)
&& IsBattlerAlive(battler)
&& !IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD))
{
- if (gBattleMons[battler].status1 & STATUS1_SLEEP)
+ if (gBattleMons[battler].status1 & STATUS1_SLEEP || GetBattlerAbility(battler) == ABILITY_COMATOSE)
{
SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 4);
BattleScriptExecute(BattleScript_NightmareTurnDmg);
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index 65d821081c..44f75a78d0 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -1268,10 +1268,13 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite)
}
else if (transformSpecies != SPECIES_NONE)
{
- xOffset = gSpeciesInfo[transformSpecies].enemyShadowXOffset + (shadowSprite->tSpriteSide == SPRITE_SIDE_LEFT ? -16 : 16);
+ xOffset = gSpeciesInfo[transformSpecies].enemyShadowXOffset;
yOffset = gSpeciesInfo[transformSpecies].enemyShadowYOffset + 16;
size = gSpeciesInfo[transformSpecies].enemyShadowSize;
+ if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4)
+ xOffset += (shadowSprite->tSpriteSide == SPRITE_SIDE_LEFT ? -16 : 16);
+
invisible = (B_ENEMY_MON_SHADOW_STYLE >= GEN_4 && P_GBA_STYLE_SPECIES_GFX == FALSE)
? gSpeciesInfo[transformSpecies].suppressEnemyShadow
: gSpeciesInfo[transformSpecies].enemyMonElevation == 0;
diff --git a/src/battle_main.c b/src/battle_main.c
index ef93616256..3c63f3833b 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -4106,7 +4106,7 @@ u8 IsRunningFromBattleImpossible(u32 battler)
if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN)
return BATTLE_RUN_SUCCESS;
- if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST))
+ if (GetConfig(CONFIG_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST))
return BATTLE_RUN_SUCCESS;
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
return BATTLE_RUN_SUCCESS;
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index e053aa31f5..35ebed187d 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -12717,10 +12717,6 @@ static void Cmd_tryswapitems(void)
gBattlescriptCurrInstr = cmd->failInstr;
}
// check if ability prevents swapping
- else if (GetBattlerAbility(gBattlerAttacker) == ABILITY_STICKY_HOLD)
- {
- gBattlescriptCurrInstr = cmd->failInstr;
- }
else if (GetBattlerAbility(gBattlerTarget) == ABILITY_STICKY_HOLD)
{
gBattlescriptCurrInstr = BattleScript_StickyHoldActivates;
@@ -17479,7 +17475,6 @@ void BS_TryBestow(void)
|| gBattleMons[gBattlerTarget].item != ITEM_NONE
|| !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerAttacker].item)
|| !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerAttacker].item)
- || GetBattlerAbility(gBattlerAttacker) == ABILITY_STICKY_HOLD
|| gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerTarget)] & (1u << gBattlerPartyIndexes[gBattlerTarget]))
{
gBattlescriptCurrInstr = cmd->failInstr;
diff --git a/src/battle_util.c b/src/battle_util.c
index 5493354f0c..b660c174ce 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -695,7 +695,7 @@ bool32 TryRunFromBattle(u32 battler)
gProtectStructs[battler].fleeType = FLEE_ITEM;
effect++;
}
- else if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST))
+ else if (GetConfig(CONFIG_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST))
{
effect++;
}
@@ -5804,7 +5804,7 @@ u32 IsAbilityOnFieldExcept(u32 battler, enum Ability ability)
u32 IsAbilityPreventingEscape(u32 battler)
{
- if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST))
+ if (GetConfig(CONFIG_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST))
return 0;
bool32 isBattlerGrounded = IsBattlerGrounded(battler, GetBattlerAbility(battler), GetBattlerHoldEffect(battler));
@@ -5832,7 +5832,7 @@ bool32 CanBattlerEscape(u32 battler) // no ability check
{
if (gBattleStruct->battlerState[battler].commanderSpecies != SPECIES_NONE)
return FALSE;
- else if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST))
+ else if (GetConfig(CONFIG_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST))
return TRUE;
else if (gBattleMons[battler].volatiles.escapePrevention)
return FALSE;
@@ -7512,24 +7512,6 @@ static inline u32 CalcMoveBasePowerAfterModifiers(struct DamageContext *ctx)
if (moveType == TYPE_FIRE)
modifier = uq4_12_multiply(modifier, UQ_4_12(1.25));
break;
- case ABILITY_PROTOSYNTHESIS:
- {
- enum Stat defHighestStat = GetParadoxBoostedStatId(battlerDef);
- if (((ctx->weather & B_WEATHER_SUN && HasWeatherEffect()) || gDisableStructs[battlerDef].boosterEnergyActivated)
- && ((IsBattleMovePhysical(move) && defHighestStat == STAT_DEF) || (IsBattleMoveSpecial(move) && defHighestStat == STAT_SPDEF))
- && !(gBattleMons[battlerDef].volatiles.transformed))
- modifier = uq4_12_multiply(modifier, UQ_4_12(0.7));
- }
- break;
- case ABILITY_QUARK_DRIVE:
- {
- u32 defHighestStat = GetParadoxBoostedStatId(battlerDef);
- if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gDisableStructs[battlerDef].boosterEnergyActivated)
- && ((IsBattleMovePhysical(move) && defHighestStat == STAT_DEF) || (IsBattleMoveSpecial(move) && defHighestStat == STAT_SPDEF))
- && !(gBattleMons[battlerDef].volatiles.transformed))
- modifier = uq4_12_multiply(modifier, UQ_4_12(0.7));
- }
- break;
default:
break;
}
@@ -8036,6 +8018,24 @@ static inline u32 CalcDefenseStat(struct DamageContext *ctx)
if (gBattleMons[battlerDef].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SUN) && !usesDefStat)
modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5));
break;
+ case ABILITY_PROTOSYNTHESIS:
+ {
+ enum Stat defHighestStat = GetParadoxBoostedStatId(battlerDef);
+ if (((ctx->weather & B_WEATHER_SUN && HasWeatherEffect()) || gDisableStructs[battlerDef].boosterEnergyActivated)
+ && ((IsBattleMovePhysical(move) && defHighestStat == STAT_DEF) || (IsBattleMoveSpecial(move) && defHighestStat == STAT_SPDEF))
+ && !(gBattleMons[battlerDef].volatiles.transformed))
+ modifier = uq4_12_multiply(modifier, UQ_4_12(1.3));
+ }
+ break;
+ case ABILITY_QUARK_DRIVE:
+ {
+ u32 defHighestStat = GetParadoxBoostedStatId(battlerDef);
+ if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gDisableStructs[battlerDef].boosterEnergyActivated)
+ && ((IsBattleMovePhysical(move) && defHighestStat == STAT_DEF) || (IsBattleMoveSpecial(move) && defHighestStat == STAT_SPDEF))
+ && !(gBattleMons[battlerDef].volatiles.transformed))
+ modifier = uq4_12_multiply(modifier, UQ_4_12(1.3));
+ }
+ break;
default:
break;
}
@@ -9027,6 +9027,9 @@ bool32 DoesSpeciesUseHoldItemToChangeForm(u16 species, u16 heldItemId)
u32 i;
const struct FormChange *formChanges = GetSpeciesFormChanges(species);
+ if (heldItemId == ITEM_NONE)
+ return FALSE;
+
for (i = 0; formChanges != NULL && formChanges[i].method != FORM_CHANGE_TERMINATOR; i++)
{
enum FormChanges method = formChanges[i].method;
diff --git a/src/data/graphics/items.h b/src/data/graphics/items.h
index 31a78d8c6b..e6bd7e8d67 100644
--- a/src/data/graphics/items.h
+++ b/src/data/graphics/items.h
@@ -21,7 +21,8 @@ const u16 gItemIconPalette_UltraBall[] = INCBIN_U16("graphics/items/icon_palette
const u32 gItemIcon_MasterBall[] = INCBIN_U32("graphics/items/icons/master_ball.4bpp.smol");
const u16 gItemIconPalette_MasterBall[] = INCBIN_U16("graphics/items/icon_palettes/master_ball.gbapal");
-const u32 gItemIcon_PremierBall[] = INCBIN_U32("graphics/items/icons/premier_ball.4bpp.smol");
+const u32 gItemIcon_PremierBall[] = INCBIN_U16("graphics/items/icons/premier_ball.4bpp.smol");
+const u16 gItemIconPalette_PremierBall[] = INCBIN_U16("graphics/items/icon_palettes/premier_ball.gbapal");
const u32 gItemIcon_HealBall[] = INCBIN_U32("graphics/items/icons/heal_ball.4bpp.smol");
const u16 gItemIconPalette_HealBall[] = INCBIN_U16("graphics/items/icon_palettes/heal_ball.gbapal");
@@ -130,7 +131,6 @@ const u16 gItemIconPalette_HealPowder[] = INCBIN_U16("graphics/items/icon_palett
const u32 gItemIcon_RevivalHerb[] = INCBIN_U32("graphics/items/icons/revival_herb.4bpp.smol");
const u16 gItemIconPalette_RevivalHerb[] = INCBIN_U16("graphics/items/icon_palettes/revival_herb.gbapal");
-const u32 gItemIcon_Antidote[] = INCBIN_U32("graphics/items/icons/antidote.4bpp.smol");
const u16 gItemIconPalette_Antidote[] = INCBIN_U16("graphics/items/icon_palettes/antidote.gbapal");
const u32 gItemIcon_StatusHeal[] = INCBIN_U32("graphics/items/icons/status_heal.4bpp.smol");
@@ -157,7 +157,6 @@ const u16 gItemIconPalette_MaxElixir[] = INCBIN_U16("graphics/items/icon_palette
const u32 gItemIcon_BerryJuice[] = INCBIN_U32("graphics/items/icons/berry_juice.4bpp.smol");
const u16 gItemIconPalette_BerryJuice[] = INCBIN_U16("graphics/items/icon_palettes/berry_juice.gbapal");
-const u32 gItemIcon_SacredAsh[] = INCBIN_U32("graphics/items/icons/sacred_ash.4bpp.smol");
const u16 gItemIconPalette_SacredAsh[] = INCBIN_U16("graphics/items/icon_palettes/sacred_ash.gbapal");
const u32 gItemIcon_SweetHeart[] = INCBIN_U32("graphics/items/icons/sweet_heart.4bpp.smol");
@@ -216,22 +215,12 @@ const u16 gItemIconPalette_PPMax[] = INCBIN_U16("graphics/items/icon_palettes/pp
// EV Feathers
-const u32 gItemIcon_HealthFeather[] = INCBIN_U32("graphics/items/icons/health_feather.4bpp.smol");
+const u32 gItemIcon_EVFeather[] = INCBIN_U32("graphics/items/icons/ev_feather.4bpp.smol");
const u16 gItemIconPalette_HealthFeather[] = INCBIN_U16("graphics/items/icon_palettes/health_feather.gbapal");
-
-const u32 gItemIcon_MuscleFeather[] = INCBIN_U32("graphics/items/icons/muscle_feather.4bpp.smol");
const u16 gItemIconPalette_MuscleFeather[] = INCBIN_U16("graphics/items/icon_palettes/muscle_feather.gbapal");
-
-const u32 gItemIcon_ResistFeather[] = INCBIN_U32("graphics/items/icons/resist_feather.4bpp.smol");
const u16 gItemIconPalette_ResistFeather[] = INCBIN_U16("graphics/items/icon_palettes/resist_feather.gbapal");
-
-const u32 gItemIcon_GeniusFeather[] = INCBIN_U32("graphics/items/icons/genius_feather.4bpp.smol");
const u16 gItemIconPalette_GeniusFeather[] = INCBIN_U16("graphics/items/icon_palettes/genius_feather.gbapal");
-
-const u32 gItemIcon_CleverFeather[] = INCBIN_U32("graphics/items/icons/clever_feather.4bpp.smol");
const u16 gItemIconPalette_CleverFeather[] = INCBIN_U16("graphics/items/icon_palettes/clever_feather.gbapal");
-
-const u32 gItemIcon_SwiftFeather[] = INCBIN_U32("graphics/items/icons/swift_feather.4bpp.smol");
const u16 gItemIconPalette_SwiftFeather[] = INCBIN_U16("graphics/items/icon_palettes/swift_feather.gbapal");
// Ability Modifiers
@@ -303,20 +292,12 @@ const u16 gItemIconPalette_EscapeRope[] = INCBIN_U16("graphics/items/icon_palett
const u32 gItemIcon_BattleStatItem[] = INCBIN_U32("graphics/items/icons/battle_stat_item.4bpp.smol");
const u16 gItemIconPalette_XAttack[] = INCBIN_U16("graphics/items/icon_palettes/x_attack.gbapal");
-
const u16 gItemIconPalette_XDefend[] = INCBIN_U16("graphics/items/icon_palettes/x_defend.gbapal");
-
const u16 gItemIconPalette_XSpecial[] = INCBIN_U16("graphics/items/icon_palettes/x_special.gbapal");
-
-const u32 gItemIcon_XSpecialDefense[] = INCBIN_U32("graphics/items/icons/x_special_defense.4bpp.smol");
const u16 gItemIconPalette_XSpecialDefense[] = INCBIN_U16("graphics/items/icon_palettes/x_special_defense.gbapal");
-
const u16 gItemIconPalette_XSpeed[] = INCBIN_U16("graphics/items/icon_palettes/x_speed.gbapal");
-
const u16 gItemIconPalette_XAccuracy[] = INCBIN_U16("graphics/items/icon_palettes/x_accuracy.gbapal");
-
const u16 gItemIconPalette_DireHit[] = INCBIN_U16("graphics/items/icon_palettes/dire_hit.gbapal");
-
const u16 gItemIconPalette_GuardSpec[] = INCBIN_U16("graphics/items/icon_palettes/guard_spec.gbapal");
// Escape Items
@@ -361,12 +342,8 @@ const u32 gItemIcon_BigPearl[] = INCBIN_U32("graphics/items/icons/big_pearl.4bpp
const u32 gItemIcon_PearlString[] = INCBIN_U32("graphics/items/icons/pearl_string.4bpp.smol");
const u16 gItemIconPalette_PearlString[] = INCBIN_U16("graphics/items/icon_palettes/pearl_string.gbapal");
-const u32 gItemIcon_Stardust[] = INCBIN_U32("graphics/items/icons/stardust.4bpp.smol");
-const u16 gItemIconPalette_Star[] = INCBIN_U16("graphics/items/icon_palettes/star.gbapal");
-
const u32 gItemIcon_StarPiece[] = INCBIN_U32("graphics/items/icons/star_piece.4bpp.smol");
-
-const u32 gItemIcon_CometShard[] = INCBIN_U32("graphics/items/icons/comet_shard.4bpp.smol");
+const u16 gItemIconPalette_Star[] = INCBIN_U16("graphics/items/icon_palettes/star.gbapal");
const u16 gItemIconPalette_CometShard[] = INCBIN_U16("graphics/items/icon_palettes/comet_shard.gbapal");
const u16 gItemIconPalette_ShoalSalt[] = INCBIN_U16("graphics/items/icon_palettes/shoal_salt.gbapal");
@@ -389,9 +366,6 @@ const u16 gItemIconPalette_HeartScale[] = INCBIN_U16("graphics/items/icon_palett
const u32 gItemIcon_Honey[] = INCBIN_U32("graphics/items/icons/honey.4bpp.smol");
const u16 gItemIconPalette_Honey[] = INCBIN_U16("graphics/items/icon_palettes/honey.gbapal");
-const u32 gItemIcon_RareBone[] = INCBIN_U32("graphics/items/icons/rare_bone.4bpp.smol");
-const u16 gItemIconPalette_RareBone[] = INCBIN_U16("graphics/items/icon_palettes/rare_bone.gbapal");
-
const u32 gItemIcon_OddKeystone[] = INCBIN_U32("graphics/items/icons/odd_keystone.4bpp.smol");
const u16 gItemIconPalette_OddKeystone[] = INCBIN_U16("graphics/items/icon_palettes/odd_keystone.gbapal");
@@ -474,25 +448,13 @@ const u16 gItemIconPalette_AmazeMulch[] = INCBIN_U16("graphics/items/icon_palett
// Apricorns
-const u32 gItemIcon_RedApricorn[] = INCBIN_U32("graphics/items/icons/red_apricorn.4bpp.smol");
+const u32 gItemIcon_Apricorn[] = INCBIN_U32("graphics/items/icons/apricorn.4bpp.smol");
const u16 gItemIconPalette_RedApricorn[] = INCBIN_U16("graphics/items/icon_palettes/red_apricorn.gbapal");
-
-const u32 gItemIcon_BlueApricorn[] = INCBIN_U32("graphics/items/icons/blue_apricorn.4bpp.smol");
const u16 gItemIconPalette_BlueApricorn[] = INCBIN_U16("graphics/items/icon_palettes/blue_apricorn.gbapal");
-
-const u32 gItemIcon_YellowApricorn[] = INCBIN_U32("graphics/items/icons/yellow_apricorn.4bpp.smol");
const u16 gItemIconPalette_YellowApricorn[] = INCBIN_U16("graphics/items/icon_palettes/yellow_apricorn.gbapal");
-
-const u32 gItemIcon_GreenApricorn[] = INCBIN_U32("graphics/items/icons/green_apricorn.4bpp.smol");
const u16 gItemIconPalette_GreenApricorn[] = INCBIN_U16("graphics/items/icon_palettes/green_apricorn.gbapal");
-
-const u32 gItemIcon_PinkApricorn[] = INCBIN_U32("graphics/items/icons/pink_apricorn.4bpp.smol");
const u16 gItemIconPalette_PinkApricorn[] = INCBIN_U16("graphics/items/icon_palettes/pink_apricorn.gbapal");
-
-const u32 gItemIcon_WhiteApricorn[] = INCBIN_U32("graphics/items/icons/white_apricorn.4bpp.smol");
const u16 gItemIconPalette_WhiteApricorn[] = INCBIN_U16("graphics/items/icon_palettes/white_apricorn.gbapal");
-
-const u32 gItemIcon_BlackApricorn[] = INCBIN_U32("graphics/items/icons/black_apricorn.4bpp.smol");
const u16 gItemIconPalette_BlackApricorn[] = INCBIN_U16("graphics/items/icon_palettes/black_apricorn.gbapal");
const u32 gItemIcon_WishingPiece[] = INCBIN_U32("graphics/items/icons/wishing_piece.4bpp.smol");
@@ -671,83 +633,39 @@ const u16 gItemIconPalette_MetalAlloy[] = INCBIN_U16("graphics/items/icon_palett
// Nectars
-const u32 gItemIcon_RedNectar[] = INCBIN_U32("graphics/items/icons/red_nectar.4bpp.smol");
+const u32 gItemIcon_Nectar[] = INCBIN_U32("graphics/items/icons/nectar.4bpp.smol");
const u16 gItemIconPalette_RedNectar[] = INCBIN_U16("graphics/items/icon_palettes/red_nectar.gbapal");
-
-const u32 gItemIcon_YellowNectar[] = INCBIN_U32("graphics/items/icons/yellow_nectar.4bpp.smol");
const u16 gItemIconPalette_YellowNectar[] = INCBIN_U16("graphics/items/icon_palettes/yellow_nectar.gbapal");
-
-const u32 gItemIcon_PinkNectar[] = INCBIN_U32("graphics/items/icons/pink_nectar.4bpp.smol");
const u16 gItemIconPalette_PinkNectar[] = INCBIN_U16("graphics/items/icon_palettes/pink_nectar.gbapal");
-
-const u32 gItemIcon_PurpleNectar[] = INCBIN_U32("graphics/items/icons/purple_nectar.4bpp.smol");
const u16 gItemIconPalette_PurpleNectar[] = INCBIN_U16("graphics/items/icon_palettes/purple_nectar.gbapal");
// Plates
-const u32 gItemIcon_FlamePlate[] = INCBIN_U32("graphics/items/icons/flame_plate.4bpp.smol");
+const u32 gItemIcon_Plate[] = INCBIN_U32("graphics/items/icons/plate.4bpp.smol");
const u16 gItemIconPalette_FlamePlate[] = INCBIN_U16("graphics/items/icon_palettes/flame_plate.gbapal");
-
-const u32 gItemIcon_SplashPlate[] = INCBIN_U32("graphics/items/icons/splash_plate.4bpp.smol");
const u16 gItemIconPalette_SplashPlate[] = INCBIN_U16("graphics/items/icon_palettes/splash_plate.gbapal");
-
-const u32 gItemIcon_ZapPlate[] = INCBIN_U32("graphics/items/icons/zap_plate.4bpp.smol");
const u16 gItemIconPalette_ZapPlate[] = INCBIN_U16("graphics/items/icon_palettes/zap_plate.gbapal");
-
-const u32 gItemIcon_MeadowPlate[] = INCBIN_U32("graphics/items/icons/meadow_plate.4bpp.smol");
const u16 gItemIconPalette_MeadowPlate[] = INCBIN_U16("graphics/items/icon_palettes/meadow_plate.gbapal");
-
-const u32 gItemIcon_IciclePlate[] = INCBIN_U32("graphics/items/icons/icicle_plate.4bpp.smol");
const u16 gItemIconPalette_IciclePlate[] = INCBIN_U16("graphics/items/icon_palettes/icicle_plate.gbapal");
-
-const u32 gItemIcon_FistPlate[] = INCBIN_U32("graphics/items/icons/fist_plate.4bpp.smol");
const u16 gItemIconPalette_FistPlate[] = INCBIN_U16("graphics/items/icon_palettes/fist_plate.gbapal");
-
-const u32 gItemIcon_ToxicPlate[] = INCBIN_U32("graphics/items/icons/toxic_plate.4bpp.smol");
const u16 gItemIconPalette_ToxicPlate[] = INCBIN_U16("graphics/items/icon_palettes/toxic_plate.gbapal");
-
-const u32 gItemIcon_EarthPlate[] = INCBIN_U32("graphics/items/icons/earth_plate.4bpp.smol");
const u16 gItemIconPalette_EarthPlate[] = INCBIN_U16("graphics/items/icon_palettes/earth_plate.gbapal");
-
-const u32 gItemIcon_SkyPlate[] = INCBIN_U32("graphics/items/icons/sky_plate.4bpp.smol");
const u16 gItemIconPalette_SkyPlate[] = INCBIN_U16("graphics/items/icon_palettes/sky_plate.gbapal");
-
-const u32 gItemIcon_MindPlate[] = INCBIN_U32("graphics/items/icons/mind_plate.4bpp.smol");
const u16 gItemIconPalette_MindPlate[] = INCBIN_U16("graphics/items/icon_palettes/mind_plate.gbapal");
-
-const u32 gItemIcon_InsectPlate[] = INCBIN_U32("graphics/items/icons/insect_plate.4bpp.smol");
const u16 gItemIconPalette_InsectPlate[] = INCBIN_U16("graphics/items/icon_palettes/insect_plate.gbapal");
-
-const u32 gItemIcon_StonePlate[] = INCBIN_U32("graphics/items/icons/stone_plate.4bpp.smol");
const u16 gItemIconPalette_StonePlate[] = INCBIN_U16("graphics/items/icon_palettes/stone_plate.gbapal");
-
-const u32 gItemIcon_SpookyPlate[] = INCBIN_U32("graphics/items/icons/spooky_plate.4bpp.smol");
const u16 gItemIconPalette_SpookyPlate[] = INCBIN_U16("graphics/items/icon_palettes/spooky_plate.gbapal");
-
-const u32 gItemIcon_DracoPlate[] = INCBIN_U32("graphics/items/icons/draco_plate.4bpp.smol");
const u16 gItemIconPalette_DracoPlate[] = INCBIN_U16("graphics/items/icon_palettes/draco_plate.gbapal");
-
-const u32 gItemIcon_DreadPlate[] = INCBIN_U32("graphics/items/icons/dread_plate.4bpp.smol");
const u16 gItemIconPalette_DreadPlate[] = INCBIN_U16("graphics/items/icon_palettes/dread_plate.gbapal");
-
-const u32 gItemIcon_IronPlate[] = INCBIN_U32("graphics/items/icons/iron_plate.4bpp.smol");
const u16 gItemIconPalette_IronPlate[] = INCBIN_U16("graphics/items/icon_palettes/iron_plate.gbapal");
-
-const u32 gItemIcon_PixiePlate[] = INCBIN_U32("graphics/items/icons/pixie_plate.4bpp.smol");
const u16 gItemIconPalette_PixiePlate[] = INCBIN_U16("graphics/items/icon_palettes/pixie_plate.gbapal");
// Drives
-const u32 gItemIcon_DouseDrive[] = INCBIN_U32("graphics/items/icons/douse_drive.4bpp.smol");
+const u32 gItemIcon_Drive[] = INCBIN_U32("graphics/items/icons/drive.4bpp.smol");
const u16 gItemIconPalette_DouseDrive[] = INCBIN_U16("graphics/items/icon_palettes/douse_drive.gbapal");
-
-const u32 gItemIcon_ShockDrive[] = INCBIN_U32("graphics/items/icons/shock_drive.4bpp.smol");
const u16 gItemIconPalette_ShockDrive[] = INCBIN_U16("graphics/items/icon_palettes/shock_drive.gbapal");
-
-const u32 gItemIcon_BurnDrive[] = INCBIN_U32("graphics/items/icons/burn_drive.4bpp.smol");
const u16 gItemIconPalette_BurnDrive[] = INCBIN_U16("graphics/items/icon_palettes/burn_drive.gbapal");
-
-const u32 gItemIcon_ChillDrive[] = INCBIN_U32("graphics/items/icons/chill_drive.4bpp.smol");
const u16 gItemIconPalette_ChillDrive[] = INCBIN_U16("graphics/items/icon_palettes/chill_drive.gbapal");
// Memories
@@ -960,58 +878,24 @@ const u16 gItemIconPalette_Diancite[] = INCBIN_U16("graphics/items/icon_palettes
// Gems
-const u32 gItemIcon_NormalGem[] = INCBIN_U32("graphics/items/icons/normal_gem.4bpp.smol");
+const u32 gItemIcon_TypeGem[] = INCBIN_U32("graphics/items/icons/type_gem.4bpp.smol");
const u16 gItemIconPalette_NormalGem[] = INCBIN_U16("graphics/items/icon_palettes/normal_gem.gbapal");
-
-const u32 gItemIcon_FireGem[] = INCBIN_U32("graphics/items/icons/fire_gem.4bpp.smol");
const u16 gItemIconPalette_FireGem[] = INCBIN_U16("graphics/items/icon_palettes/fire_gem.gbapal");
-
-const u32 gItemIcon_WaterGem[] = INCBIN_U32("graphics/items/icons/water_gem.4bpp.smol");
const u16 gItemIconPalette_WaterGem[] = INCBIN_U16("graphics/items/icon_palettes/water_gem.gbapal");
-
-const u32 gItemIcon_ElectricGem[] = INCBIN_U32("graphics/items/icons/electric_gem.4bpp.smol");
const u16 gItemIconPalette_ElectricGem[] = INCBIN_U16("graphics/items/icon_palettes/electric_gem.gbapal");
-
-const u32 gItemIcon_GrassGem[] = INCBIN_U32("graphics/items/icons/grass_gem.4bpp.smol");
const u16 gItemIconPalette_GrassGem[] = INCBIN_U16("graphics/items/icon_palettes/grass_gem.gbapal");
-
-const u32 gItemIcon_IceGem[] = INCBIN_U32("graphics/items/icons/ice_gem.4bpp.smol");
const u16 gItemIconPalette_IceGem[] = INCBIN_U16("graphics/items/icon_palettes/ice_gem.gbapal");
-
-const u32 gItemIcon_FightingGem[] = INCBIN_U32("graphics/items/icons/fighting_gem.4bpp.smol");
const u16 gItemIconPalette_FightingGem[] = INCBIN_U16("graphics/items/icon_palettes/fighting_gem.gbapal");
-
-const u32 gItemIcon_PoisonGem[] = INCBIN_U32("graphics/items/icons/poison_gem.4bpp.smol");
const u16 gItemIconPalette_PoisonGem[] = INCBIN_U16("graphics/items/icon_palettes/poison_gem.gbapal");
-
-const u32 gItemIcon_GroundGem[] = INCBIN_U32("graphics/items/icons/ground_gem.4bpp.smol");
const u16 gItemIconPalette_GroundGem[] = INCBIN_U16("graphics/items/icon_palettes/ground_gem.gbapal");
-
-const u32 gItemIcon_FlyingGem[] = INCBIN_U32("graphics/items/icons/flying_gem.4bpp.smol");
const u16 gItemIconPalette_FlyingGem[] = INCBIN_U16("graphics/items/icon_palettes/flying_gem.gbapal");
-
-const u32 gItemIcon_PsychicGem[] = INCBIN_U32("graphics/items/icons/psychic_gem.4bpp.smol");
const u16 gItemIconPalette_PsychicGem[] = INCBIN_U16("graphics/items/icon_palettes/psychic_gem.gbapal");
-
-const u32 gItemIcon_BugGem[] = INCBIN_U32("graphics/items/icons/bug_gem.4bpp.smol");
const u16 gItemIconPalette_BugGem[] = INCBIN_U16("graphics/items/icon_palettes/bug_gem.gbapal");
-
-const u32 gItemIcon_RockGem[] = INCBIN_U32("graphics/items/icons/rock_gem.4bpp.smol");
const u16 gItemIconPalette_RockGem[] = INCBIN_U16("graphics/items/icon_palettes/rock_gem.gbapal");
-
-const u32 gItemIcon_GhostGem[] = INCBIN_U32("graphics/items/icons/ghost_gem.4bpp.smol");
const u16 gItemIconPalette_GhostGem[] = INCBIN_U16("graphics/items/icon_palettes/ghost_gem.gbapal");
-
-const u32 gItemIcon_DragonGem[] = INCBIN_U32("graphics/items/icons/dragon_gem.4bpp.smol");
const u16 gItemIconPalette_DragonGem[] = INCBIN_U16("graphics/items/icon_palettes/dragon_gem.gbapal");
-
-const u32 gItemIcon_DarkGem[] = INCBIN_U32("graphics/items/icons/dark_gem.4bpp.smol");
const u16 gItemIconPalette_DarkGem[] = INCBIN_U16("graphics/items/icon_palettes/dark_gem.gbapal");
-
-const u32 gItemIcon_SteelGem[] = INCBIN_U32("graphics/items/icons/steel_gem.4bpp.smol");
const u16 gItemIconPalette_SteelGem[] = INCBIN_U16("graphics/items/icon_palettes/steel_gem.gbapal");
-
-const u32 gItemIcon_FairyGem[] = INCBIN_U32("graphics/items/icons/fairy_gem.4bpp.smol");
const u16 gItemIconPalette_FairyGem[] = INCBIN_U16("graphics/items/icon_palettes/fairy_gem.gbapal");
// Z-Crystals
@@ -1129,16 +1013,14 @@ const u16 gItemIconPalette_LightBall[] = INCBIN_U16("graphics/items/icon_palette
const u32 gItemIcon_Leek[] = INCBIN_U32("graphics/items/icons/leek.4bpp.smol");
const u16 gItemIconPalette_Leek[] = INCBIN_U16("graphics/items/icon_palettes/leek.gbapal");
-const u32 gItemIcon_ThickClub[] = INCBIN_U32("graphics/items/icons/thick_club.4bpp.smol");
-const u16 gItemIconPalette_ThickClub[] = INCBIN_U16("graphics/items/icon_palettes/thick_club.gbapal");
+const u32 gItemIcon_Bone[] = INCBIN_U32("graphics/items/icons/bone.4bpp.smol");
+const u16 gItemIconPalette_Bone[] = INCBIN_U16("graphics/items/icon_palettes/bone.gbapal");
const u32 gItemIcon_LuckyPunch[] = INCBIN_U32("graphics/items/icons/lucky_punch.4bpp.smol");
const u16 gItemIconPalette_LuckyPunch[] = INCBIN_U16("graphics/items/icon_palettes/lucky_punch.gbapal");
-const u32 gItemIcon_MetalPowder[] = INCBIN_U32("graphics/items/icons/metal_powder.4bpp.smol");
+const u32 gItemIcon_DittoPowder[] = INCBIN_U32("graphics/items/icons/ditto_powder.4bpp.smol");
const u16 gItemIconPalette_MetalPowder[] = INCBIN_U16("graphics/items/icon_palettes/metal_powder.gbapal");
-
-const u32 gItemIcon_QuickPowder[] = INCBIN_U32("graphics/items/icons/quick_powder.4bpp.smol");
const u16 gItemIconPalette_QuickPowder[] = INCBIN_U16("graphics/items/icon_palettes/quick_powder.gbapal");
const u32 gItemIcon_DeepSeaScale[] = INCBIN_U32("graphics/items/icons/deep_sea_scale.4bpp.smol");
@@ -1250,7 +1132,7 @@ const u16 gItemIconPalette_BlackTypeEnhancingItem[] = INCBIN_U16("graphics/items
const u32 gItemIcon_PoisonBarb[] = INCBIN_U32("graphics/items/icons/poison_barb.4bpp.smol");
const u16 gItemIconPalette_PoisonBarb[] = INCBIN_U16("graphics/items/icon_palettes/poison_barb.gbapal");
-const u32 gItemIcon_SoftSand[] = INCBIN_U32("graphics/items/icons/soft_sand.4bpp.smol");
+const u32 gItemIcon_Sand[] = INCBIN_U32("graphics/items/icons/sand.4bpp.smol");
const u16 gItemIconPalette_SoftSand[] = INCBIN_U16("graphics/items/icon_palettes/soft_sand.gbapal");
const u32 gItemIcon_SharpBeak[] = INCBIN_U32("graphics/items/icons/sharp_beak.4bpp.smol");
@@ -1311,16 +1193,10 @@ const u16 gItemIconPalette_IcyRock[] = INCBIN_U16("graphics/items/icon_palettes/
// Terrain Seeds
-const u32 gItemIcon_ElectricSeed[] = INCBIN_U32("graphics/items/icons/electric_seed.4bpp.smol");
+const u32 gItemIcon_TerrainSeed[] = INCBIN_U32("graphics/items/icons/terrain_seed.4bpp.smol");
const u16 gItemIconPalette_ElectricSeed[] = INCBIN_U16("graphics/items/icon_palettes/electric_seed.gbapal");
-
-const u32 gItemIcon_PsychicSeed[] = INCBIN_U32("graphics/items/icons/psychic_seed.4bpp.smol");
const u16 gItemIconPalette_PsychicSeed[] = INCBIN_U16("graphics/items/icon_palettes/psychic_seed.gbapal");
-
-const u32 gItemIcon_MistySeed[] = INCBIN_U32("graphics/items/icons/misty_seed.4bpp.smol");
const u16 gItemIconPalette_MistySeed[] = INCBIN_U16("graphics/items/icon_palettes/misty_seed.gbapal");
-
-const u32 gItemIcon_GrassySeed[] = INCBIN_U32("graphics/items/icons/grassy_seed.4bpp.smol");
const u16 gItemIconPalette_GrassySeed[] = INCBIN_U16("graphics/items/icon_palettes/grassy_seed.gbapal");
// Type-activated Stat Modifiers
diff --git a/src/data/items.h b/src/data/items.h
index c065096879..247a45ce39 100644
--- a/src/data/items.h
+++ b/src/data/items.h
@@ -250,7 +250,7 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = BALL_PREMIER,
.iconPic = gItemIcon_PremierBall,
- .iconPalette = gItemIconPalette_LuxuryBall,
+ .iconPalette = gItemIconPalette_PremierBall,
},
[ITEM_HEAL_BALL] =
@@ -912,7 +912,7 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_Antidote,
.flingPower = 30,
- .iconPic = gItemIcon_Antidote,
+ .iconPic = gItemIcon_StatusHeal,
.iconPalette = gItemIconPalette_Antidote,
},
@@ -1141,7 +1141,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_SacredAsh,
.effect = gItemEffect_SacredAsh,
.flingPower = 30,
- .iconPic = gItemIcon_SacredAsh,
+ .iconPic = gItemIcon_DittoPowder,
.iconPalette = gItemIconPalette_SacredAsh,
},
@@ -1479,7 +1479,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_HpFeather,
.flingPower = 20,
- .iconPic = gItemIcon_HealthFeather,
+ .iconPic = gItemIcon_EVFeather,
.iconPalette = gItemIconPalette_HealthFeather,
},
@@ -1494,7 +1494,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_AtkFeather,
.flingPower = 20,
- .iconPic = gItemIcon_MuscleFeather,
+ .iconPic = gItemIcon_EVFeather,
.iconPalette = gItemIconPalette_MuscleFeather,
},
@@ -1509,7 +1509,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_DefFeather,
.flingPower = 20,
- .iconPic = gItemIcon_ResistFeather,
+ .iconPic = gItemIcon_EVFeather,
.iconPalette = gItemIconPalette_ResistFeather,
},
@@ -1524,7 +1524,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_SpatkFeather,
.flingPower = 20,
- .iconPic = gItemIcon_GeniusFeather,
+ .iconPic = gItemIcon_EVFeather,
.iconPalette = gItemIconPalette_GeniusFeather,
},
@@ -1539,7 +1539,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_SpdefFeather,
.flingPower = 20,
- .iconPic = gItemIcon_CleverFeather,
+ .iconPic = gItemIcon_EVFeather,
.iconPalette = gItemIconPalette_CleverFeather,
},
@@ -1554,7 +1554,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_SpeedFeather,
.flingPower = 20,
- .iconPic = gItemIcon_SwiftFeather,
+ .iconPic = gItemIcon_EVFeather,
.iconPalette = gItemIconPalette_SwiftFeather,
},
@@ -2423,7 +2423,7 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_INCREASE_STAT,
.effect = gItemEffect_XSpecialDefense,
.flingPower = 30,
- .iconPic = gItemIcon_XSpecialDefense,
+ .iconPic = gItemIcon_BattleStatItem,
.iconPalette = gItemIconPalette_XSpecialDefense,
},
@@ -2771,7 +2771,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
- .iconPic = gItemIcon_Stardust,
+ .iconPic = gItemIcon_Sand,
.iconPalette = gItemIconPalette_Star,
},
@@ -2805,7 +2805,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
- .iconPic = gItemIcon_CometShard,
+ .iconPic = gItemIcon_StarPiece,
.iconPalette = gItemIconPalette_CometShard,
},
@@ -2950,8 +2950,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
- .iconPic = gItemIcon_RareBone,
- .iconPalette = gItemIconPalette_RareBone,
+ .iconPic = gItemIcon_Bone,
+ .iconPalette = gItemIconPalette_Bone,
},
[ITEM_ODD_KEYSTONE] =
@@ -3590,7 +3590,7 @@ const struct Item gItemsInfo[] =
.sortType = ITEM_TYPE_GROWTH,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .iconPic = gItemIcon_RedApricorn,
+ .iconPic = gItemIcon_Apricorn,
.iconPalette = gItemIconPalette_RedApricorn,
},
@@ -3605,7 +3605,7 @@ const struct Item gItemsInfo[] =
.sortType = ITEM_TYPE_GROWTH,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .iconPic = gItemIcon_BlueApricorn,
+ .iconPic = gItemIcon_Apricorn,
.iconPalette = gItemIconPalette_BlueApricorn,
},
@@ -3620,7 +3620,7 @@ const struct Item gItemsInfo[] =
.sortType = ITEM_TYPE_GROWTH,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .iconPic = gItemIcon_YellowApricorn,
+ .iconPic = gItemIcon_Apricorn,
.iconPalette = gItemIconPalette_YellowApricorn,
},
@@ -3636,7 +3636,7 @@ const struct Item gItemsInfo[] =
.sortType = ITEM_TYPE_GROWTH,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .iconPic = gItemIcon_GreenApricorn,
+ .iconPic = gItemIcon_Apricorn,
.iconPalette = gItemIconPalette_GreenApricorn,
},
@@ -3652,7 +3652,7 @@ const struct Item gItemsInfo[] =
.sortType = ITEM_TYPE_GROWTH,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .iconPic = gItemIcon_PinkApricorn,
+ .iconPic = gItemIcon_Apricorn,
.iconPalette = gItemIconPalette_PinkApricorn,
},
@@ -3667,7 +3667,7 @@ const struct Item gItemsInfo[] =
.sortType = ITEM_TYPE_GROWTH,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .iconPic = gItemIcon_WhiteApricorn,
+ .iconPic = gItemIcon_Apricorn,
.iconPalette = gItemIconPalette_WhiteApricorn,
},
@@ -3682,7 +3682,7 @@ const struct Item gItemsInfo[] =
.sortType = ITEM_TYPE_GROWTH,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .iconPic = gItemIcon_BlackApricorn,
+ .iconPic = gItemIcon_Apricorn,
.iconPalette = gItemIconPalette_BlackApricorn,
},
@@ -4577,7 +4577,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
.flingPower = 10,
- .iconPic = gItemIcon_RedNectar,
+ .iconPic = gItemIcon_Nectar,
.iconPalette = gItemIconPalette_RedNectar,
},
@@ -4592,7 +4592,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
.flingPower = 10,
- .iconPic = gItemIcon_YellowNectar,
+ .iconPic = gItemIcon_Nectar,
.iconPalette = gItemIconPalette_YellowNectar,
},
@@ -4607,7 +4607,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
.flingPower = 10,
- .iconPic = gItemIcon_PinkNectar,
+ .iconPic = gItemIcon_Nectar,
.iconPalette = gItemIconPalette_PinkNectar,
},
@@ -4622,7 +4622,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
.flingPower = 10,
- .iconPic = gItemIcon_PurpleNectar,
+ .iconPic = gItemIcon_Nectar,
.iconPalette = gItemIconPalette_PurpleNectar,
},
@@ -4644,7 +4644,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FIRE,
.flingPower = 90,
- .iconPic = gItemIcon_FlamePlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_FlamePlate,
},
@@ -4664,7 +4664,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_WATER,
.flingPower = 90,
- .iconPic = gItemIcon_SplashPlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_SplashPlate,
},
@@ -4684,7 +4684,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ELECTRIC,
.flingPower = 90,
- .iconPic = gItemIcon_ZapPlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_ZapPlate,
},
@@ -4704,7 +4704,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GRASS,
.flingPower = 90,
- .iconPic = gItemIcon_MeadowPlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_MeadowPlate,
},
@@ -4724,7 +4724,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ICE,
.flingPower = 90,
- .iconPic = gItemIcon_IciclePlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_IciclePlate,
},
@@ -4744,7 +4744,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FIGHTING,
.flingPower = 90,
- .iconPic = gItemIcon_FistPlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_FistPlate,
},
@@ -4764,7 +4764,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_POISON,
.flingPower = 90,
- .iconPic = gItemIcon_ToxicPlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_ToxicPlate,
},
@@ -4784,7 +4784,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GROUND,
.flingPower = 90,
- .iconPic = gItemIcon_EarthPlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_EarthPlate,
},
@@ -4804,7 +4804,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FLYING,
.flingPower = 90,
- .iconPic = gItemIcon_SkyPlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_SkyPlate,
},
@@ -4824,7 +4824,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_PSYCHIC,
.flingPower = 90,
- .iconPic = gItemIcon_MindPlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_MindPlate,
},
@@ -4844,7 +4844,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_BUG,
.flingPower = 90,
- .iconPic = gItemIcon_InsectPlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_InsectPlate,
},
@@ -4864,7 +4864,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ROCK,
.flingPower = 90,
- .iconPic = gItemIcon_StonePlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_StonePlate,
},
@@ -4884,7 +4884,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GHOST,
.flingPower = 90,
- .iconPic = gItemIcon_SpookyPlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_SpookyPlate,
},
@@ -4904,7 +4904,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_DRAGON,
.flingPower = 90,
- .iconPic = gItemIcon_DracoPlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_DracoPlate,
},
@@ -4924,7 +4924,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_DARK,
.flingPower = 90,
- .iconPic = gItemIcon_DreadPlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_DreadPlate,
},
@@ -4944,7 +4944,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_STEEL,
.flingPower = 90,
- .iconPic = gItemIcon_IronPlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_IronPlate,
},
@@ -4964,7 +4964,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FAIRY,
.flingPower = 90,
- .iconPic = gItemIcon_PixiePlate,
+ .iconPic = gItemIcon_Plate,
.iconPalette = gItemIconPalette_PixiePlate,
},
@@ -4985,7 +4985,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_WATER,
.flingPower = 70,
- .iconPic = gItemIcon_DouseDrive,
+ .iconPic = gItemIcon_Drive,
.iconPalette = gItemIconPalette_DouseDrive,
},
@@ -5004,7 +5004,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ELECTRIC,
.flingPower = 70,
- .iconPic = gItemIcon_ShockDrive,
+ .iconPic = gItemIcon_Drive,
.iconPalette = gItemIconPalette_ShockDrive,
},
@@ -5023,7 +5023,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FIRE,
.flingPower = 70,
- .iconPic = gItemIcon_BurnDrive,
+ .iconPic = gItemIcon_Drive,
.iconPalette = gItemIconPalette_BurnDrive,
},
@@ -5042,7 +5042,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ICE,
.flingPower = 70,
- .iconPic = gItemIcon_ChillDrive,
+ .iconPic = gItemIcon_Drive,
.iconPalette = gItemIconPalette_ChillDrive,
},
@@ -6784,7 +6784,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_NORMAL,
- .iconPic = gItemIcon_NormalGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_NormalGem,
},
@@ -6803,7 +6803,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FIRE,
- .iconPic = gItemIcon_FireGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_FireGem,
},
@@ -6822,7 +6822,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_WATER,
- .iconPic = gItemIcon_WaterGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_WaterGem,
},
@@ -6841,7 +6841,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ELECTRIC,
- .iconPic = gItemIcon_ElectricGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_ElectricGem,
},
@@ -6860,7 +6860,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GRASS,
- .iconPic = gItemIcon_GrassGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_GrassGem,
},
@@ -6879,7 +6879,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ICE,
- .iconPic = gItemIcon_IceGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_IceGem,
},
@@ -6898,7 +6898,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FIGHTING,
- .iconPic = gItemIcon_FightingGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_FightingGem,
},
@@ -6917,7 +6917,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_POISON,
- .iconPic = gItemIcon_PoisonGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_PoisonGem,
},
@@ -6936,7 +6936,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GROUND,
- .iconPic = gItemIcon_GroundGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_GroundGem,
},
@@ -6955,7 +6955,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FLYING,
- .iconPic = gItemIcon_FlyingGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_FlyingGem,
},
@@ -6974,7 +6974,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_PSYCHIC,
- .iconPic = gItemIcon_PsychicGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_PsychicGem,
},
@@ -6993,7 +6993,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_BUG,
- .iconPic = gItemIcon_BugGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_BugGem,
},
@@ -7012,7 +7012,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ROCK,
- .iconPic = gItemIcon_RockGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_RockGem,
},
@@ -7031,7 +7031,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GHOST,
- .iconPic = gItemIcon_GhostGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_GhostGem,
},
@@ -7050,7 +7050,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_DRAGON,
- .iconPic = gItemIcon_DragonGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_DragonGem,
},
@@ -7069,7 +7069,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_DARK,
- .iconPic = gItemIcon_DarkGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_DarkGem,
},
@@ -7088,7 +7088,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_STEEL,
- .iconPic = gItemIcon_SteelGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_SteelGem,
},
@@ -7107,7 +7107,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FAIRY,
- .iconPic = gItemIcon_FairyGem,
+ .iconPic = gItemIcon_TypeGem,
.iconPalette = gItemIconPalette_FairyGem,
},
@@ -7795,8 +7795,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 90,
- .iconPic = gItemIcon_ThickClub,
- .iconPalette = gItemIconPalette_ThickClub,
+ .iconPic = gItemIcon_Bone,
+ .iconPalette = gItemIconPalette_Bone,
},
[ITEM_LUCKY_PUNCH] =
@@ -7831,7 +7831,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
- .iconPic = gItemIcon_MetalPowder,
+ .iconPic = gItemIcon_DittoPowder,
.iconPalette = gItemIconPalette_MetalPowder,
},
@@ -7849,7 +7849,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
- .iconPic = gItemIcon_QuickPowder,
+ .iconPic = gItemIcon_DittoPowder,
.iconPalette = gItemIconPalette_QuickPowder,
},
@@ -8534,7 +8534,7 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GROUND,
.flingPower = 10,
- .iconPic = gItemIcon_SoftSand,
+ .iconPic = gItemIcon_Sand,
.iconPalette = gItemIconPalette_SoftSand,
},
@@ -8938,7 +8938,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
- .iconPic = gItemIcon_ElectricSeed,
+ .iconPic = gItemIcon_TerrainSeed,
.iconPalette = gItemIconPalette_ElectricSeed,
},
@@ -8957,7 +8957,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
- .iconPic = gItemIcon_PsychicSeed,
+ .iconPic = gItemIcon_TerrainSeed,
.iconPalette = gItemIconPalette_PsychicSeed,
},
@@ -8976,7 +8976,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
- .iconPic = gItemIcon_MistySeed,
+ .iconPic = gItemIcon_TerrainSeed,
.iconPalette = gItemIconPalette_MistySeed,
},
@@ -8995,7 +8995,7 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
- .iconPic = gItemIcon_GrassySeed,
+ .iconPic = gItemIcon_TerrainSeed,
.iconPalette = gItemIconPalette_GrassySeed,
},
diff --git a/src/data/moves_info.h b/src/data/moves_info.h
index cbf5ec9ae9..6346e29c2e 100644
--- a/src/data/moves_info.h
+++ b/src/data/moves_info.h
@@ -19688,7 +19688,6 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
- .metronomeBanned = TRUE, // Only since it isn't implemented yet
.battleAnimScript = gBattleAnimMove_LastRespects,
},
@@ -20754,7 +20753,6 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.category = DAMAGE_CATEGORY_SPECIAL,
.argument = { .absorbPercentage = 50 },
.thawsUser = TRUE,
- .metronomeBanned = TRUE,
.healingMove = TRUE,
.additionalEffects = ADDITIONAL_EFFECTS({
.moveEffect = MOVE_EFFECT_BURN,
@@ -20778,7 +20776,6 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
.ballisticMove = TRUE,
- .metronomeBanned = TRUE,
.additionalEffects = ADDITIONAL_EFFECTS({
.moveEffect = MOVE_EFFECT_SYRUP_BOMB,
.chance = 100,
@@ -20801,7 +20798,6 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
- .metronomeBanned = TRUE,
.battleAnimScript = gBattleAnimMove_IvyCudgel,
},
@@ -20885,7 +20881,6 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.zMove = { .effect = Z_EFFECT_RESET_STATS },
.ignoresProtect = TRUE,
.mirrorMoveBanned = TRUE,
- .metronomeBanned = TRUE,
.copycatBanned = TRUE,
.assistBanned = TRUE,
.battleAnimScript = gBattleAnimMove_BurningBulwark,
diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h
index 54584c5796..6926e20ef9 100644
--- a/src/data/pokemon/form_change_tables.h
+++ b/src/data/pokemon/form_change_tables.h
@@ -1,17 +1,20 @@
#if P_FAMILY_BULBASAUR
-static const struct FormChange sVenusaurFormChangeTable[] = {
+static const struct FormChange sVenusaurFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_VENUSAUR_MEGA, ITEM_VENUSAURITE},
#endif
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_VENUSAUR_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_VENUSAUR},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_BULBASAUR
#if P_FAMILY_CHARMANDER
-static const struct FormChange sCharizardFormChangeTable[] = {
+static const struct FormChange sCharizardFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CHARIZARD_MEGA_X, ITEM_CHARIZARDITE_X},
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CHARIZARD_MEGA_Y, ITEM_CHARIZARDITE_Y},
@@ -19,18 +22,21 @@ static const struct FormChange sCharizardFormChangeTable[] = {
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CHARIZARD_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_CHARIZARD},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_CHARMANDER
#if P_FAMILY_SQUIRTLE
-static const struct FormChange sBlastoiseFormChangeTable[] = {
+static const struct FormChange sBlastoiseFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BLASTOISE_MEGA, ITEM_BLASTOISINITE},
#endif
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_BLASTOISE_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_BLASTOISE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SQUIRTLE
@@ -41,24 +47,29 @@ static const struct FormChange sButterfreeFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_BUTTERFREE_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_BUTTERFREE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_CATERPIE
#if P_FAMILY_WEEDLE
-static const struct FormChange sBeedrillFormChangeTable[] = {
+static const struct FormChange sBeedrillFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BEEDRILL_MEGA, ITEM_BEEDRILLITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_BEEDRILL},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_WEEDLE
#if P_FAMILY_PIDGEY
-static const struct FormChange sPidgeotFormChangeTable[] = {
+static const struct FormChange sPidgeotFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_PIDGEOT_MEGA, ITEM_PIDGEOTITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_PIDGEOT},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_PIDGEY
@@ -69,15 +80,18 @@ static const struct FormChange sPikachuFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_PIKACHU_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_PIKACHU},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_PIKACHU
#if P_FAMILY_CLEFAIRY
-static const struct FormChange sClefableFormChangeTable[] = {
+static const struct FormChange sClefableFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CLEFABLE_MEGA, ITEM_CLEFABLITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_CLEFABLE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_CLEFAIRY
@@ -88,15 +102,18 @@ static const struct FormChange sMeowthFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_MEOWTH_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_MEOWTH},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_MEOWTH
#if P_FAMILY_ABRA
-static const struct FormChange sAlakazamFormChangeTable[] = {
+static const struct FormChange sAlakazamFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ALAKAZAM_MEGA, ITEM_ALAKAZITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_ALAKAZAM},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_ABRA
@@ -107,46 +124,55 @@ static const struct FormChange sMachampFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_MACHAMP_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_MACHAMP},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_MACHOP
#if P_FAMILY_BELLSPROUT
-static const struct FormChange sVictreebelFormChangeTable[] = {
+static const struct FormChange sVictreebelFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_VICTREEBEL_MEGA, ITEM_VICTREEBELITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_VICTREEBEL},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_BELLSPROUT
#if P_FAMILY_SLOWPOKE
-static const struct FormChange sSlowbroFormChangeTable[] = {
+static const struct FormChange sSlowbroFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SLOWBRO_MEGA, ITEM_SLOWBRONITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_SLOWBRO},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SLOWPOKE
#if P_FAMILY_GASTLY
-static const struct FormChange sGengarFormChangeTable[] = {
+static const struct FormChange sGengarFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GENGAR_MEGA, ITEM_GENGARITE},
#endif
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GENGAR_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_GENGAR},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_GASTLY
#if P_FAMILY_ONIX
#if P_GEN_2_CROSS_EVOS
-static const struct FormChange sSteelixFormChangeTable[] = {
+static const struct FormChange sSteelixFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_STEELIX_MEGA, ITEM_STEELIXITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_STEELIX},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_GEN_2_CROSS_EVOS
@@ -158,328 +184,400 @@ static const struct FormChange sKinglerFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_KINGLER_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_KINGLER},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_KRABBY
#if P_FAMILY_KANGASKHAN
-static const struct FormChange sKangaskhanFormChangeTable[] = {
+static const struct FormChange sKangaskhanFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_KANGASKHAN_MEGA, ITEM_KANGASKHANITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_KANGASKHAN},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_KANGASKHAN
#if P_FAMILY_STARYU
-static const struct FormChange sStarmieFormChangeTable[] = {
+static const struct FormChange sStarmieFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_STARMIE_MEGA, ITEM_STARMINITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_STARMIE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_STARYU
#if P_FAMILY_SCYTHER
#if P_GEN_2_CROSS_EVOS
-static const struct FormChange sScizorFormChangeTable[] = {
+static const struct FormChange sScizorFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SCIZOR_MEGA, ITEM_SCIZORITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_SCIZOR},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_SCYTHER
#if P_FAMILY_PINSIR
-static const struct FormChange sPinsirFormChangeTable[] = {
+static const struct FormChange sPinsirFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_PINSIR_MEGA, ITEM_PINSIRITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_PINSIR},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_PINSIR
#if P_FAMILY_MAGIKARP
-static const struct FormChange sGyaradosFormChangeTable[] = {
+static const struct FormChange sGyaradosFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GYARADOS_MEGA, ITEM_GYARADOSITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_GYARADOS},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_MAGIKARP
#if P_FAMILY_LAPRAS
-static const struct FormChange sLaprasFormChangeTable[] = {
+static const struct FormChange sLaprasFormChangeTable[] =
+{
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_LAPRAS_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_LAPRAS},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_LAPRAS
#if P_FAMILY_EEVEE
-static const struct FormChange sEeveeFormChangeTable[] = {
+static const struct FormChange sEeveeFormChangeTable[] =
+{
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_EEVEE_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_EEVEE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_EEVEE
#if P_FAMILY_AERODACTYL
-static const struct FormChange sAerodactylFormChangeTable[] = {
+static const struct FormChange sAerodactylFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AERODACTYL_MEGA, ITEM_AERODACTYLITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_AERODACTYL},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_AERODACTYL
#if P_FAMILY_SNORLAX
-static const struct FormChange sSnorlaxFormChangeTable[] = {
+static const struct FormChange sSnorlaxFormChangeTable[] =
+{
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_SNORLAX_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_SNORLAX},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SNORLAX
#if P_FAMILY_DRATINI
-static const struct FormChange sDragoniteFormChangeTable[] = {
+static const struct FormChange sDragoniteFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_DRAGONITE_MEGA, ITEM_DRAGONINITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_DRAGONITE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_DRATINI
#if P_FAMILY_MEWTWO
-static const struct FormChange sMewtwoFormChangeTable[] = {
+static const struct FormChange sMewtwoFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MEWTWO_MEGA_X, ITEM_MEWTWONITE_X},
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MEWTWO_MEGA_Y, ITEM_MEWTWONITE_Y},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_MEWTWO},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_MEWTWO
#if P_FAMILY_CHIKORITA
-static const struct FormChange sMeganiumFormChangeTable[] = {
+static const struct FormChange sMeganiumFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MEGANIUM_MEGA, ITEM_MEGANIUMITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_MEGANIUM},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_CHIKORITA
#if P_FAMILY_TOTODILE
-static const struct FormChange sFeraligatrFormChangeTable[] = {
+static const struct FormChange sFeraligatrFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_FERALIGATR_MEGA, ITEM_FERALIGITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_FERALIGATR},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_TOTODILE
#if P_FAMILY_MAREEP
-static const struct FormChange sAmpharosFormChangeTable[] = {
+static const struct FormChange sAmpharosFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AMPHAROS_MEGA, ITEM_AMPHAROSITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_AMPHAROS},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_MAREEP
#if P_FAMILY_HERACROSS
-static const struct FormChange sHeracrossFormChangeTable[] = {
+static const struct FormChange sHeracrossFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_HERACROSS_MEGA, ITEM_HERACRONITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_HERACROSS},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_HERACROSS
#if P_FAMILY_SKARMORY
-static const struct FormChange sSkarmoryFormChangeTable[] = {
+static const struct FormChange sSkarmoryFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SKARMORY_MEGA, ITEM_SKARMORITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_SKARMORY},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SKARMORY
#if P_FAMILY_HOUNDOUR
-static const struct FormChange sHoundoomFormChangeTable[] = {
+static const struct FormChange sHoundoomFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_HOUNDOOM_MEGA, ITEM_HOUNDOOMINITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_HOUNDOOM},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_HOUNDOUR
#if P_FAMILY_LARVITAR
-static const struct FormChange sTyranitarFormChangeTable[] = {
+static const struct FormChange sTyranitarFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_TYRANITAR_MEGA, ITEM_TYRANITARITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_TYRANITAR},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_LARVITAR
#if P_FAMILY_TREECKO
-static const struct FormChange sSceptileFormChangeTable[] = {
+static const struct FormChange sSceptileFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SCEPTILE_MEGA, ITEM_SCEPTILITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_SCEPTILE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_TREECKO
#if P_FAMILY_TORCHIC
-static const struct FormChange sBlazikenFormChangeTable[] = {
+static const struct FormChange sBlazikenFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BLAZIKEN_MEGA, ITEM_BLAZIKENITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_BLAZIKEN},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_TORCHIC
#if P_FAMILY_MUDKIP
-static const struct FormChange sSwampertFormChangeTable[] = {
+static const struct FormChange sSwampertFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SWAMPERT_MEGA, ITEM_SWAMPERTITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_SWAMPERT},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_MUDKIP
#if P_FAMILY_RALTS
-static const struct FormChange sGardevoirFormChangeTable[] = {
+static const struct FormChange sGardevoirFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GARDEVOIR_MEGA, ITEM_GARDEVOIRITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_GARDEVOIR},
{FORM_CHANGE_TERMINATOR},
};
#if P_GEN_4_CROSS_EVOS
-static const struct FormChange sGalladeFormChangeTable[] = {
+static const struct FormChange sGalladeFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GALLADE_MEGA, ITEM_GALLADITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_GALLADE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_GEN_4_CROSS_EVOS
#endif //P_FAMILY_RALTS
#if P_FAMILY_SABLEYE
-static const struct FormChange sSableyeFormChangeTable[] = {
+static const struct FormChange sSableyeFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SABLEYE_MEGA, ITEM_SABLENITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_SABLEYE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SABLEYE
#if P_FAMILY_MAWILE
-static const struct FormChange sMawileFormChangeTable[] = {
+static const struct FormChange sMawileFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MAWILE_MEGA, ITEM_MAWILITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_MAWILE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_MAWILE
#if P_FAMILY_ARON
-static const struct FormChange sAggronFormChangeTable[] = {
+static const struct FormChange sAggronFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AGGRON_MEGA, ITEM_AGGRONITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_AGGRON},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_ARON
#if P_FAMILY_MEDITITE
-static const struct FormChange sMedichamFormChangeTable[] = {
+static const struct FormChange sMedichamFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MEDICHAM_MEGA, ITEM_MEDICHAMITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_MEDICHAM},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_MEDITITE
#if P_FAMILY_ELECTRIKE
-static const struct FormChange sManectricFormChangeTable[] = {
+static const struct FormChange sManectricFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MANECTRIC_MEGA, ITEM_MANECTITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_MANECTRIC},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_ELECTRIKE
#if P_FAMILY_CARVANHA
-static const struct FormChange sSharpedoFormChangeTable[] = {
+static const struct FormChange sSharpedoFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SHARPEDO_MEGA, ITEM_SHARPEDONITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_SHARPEDO},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_CARVANHA
#if P_FAMILY_NUMEL
-static const struct FormChange sCameruptFormChangeTable[] = {
+static const struct FormChange sCameruptFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CAMERUPT_MEGA, ITEM_CAMERUPTITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_CAMERUPT},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_NUMEL
#if P_FAMILY_SWABLU
-static const struct FormChange sAltariaFormChangeTable[] = {
+static const struct FormChange sAltariaFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ALTARIA_MEGA, ITEM_ALTARIANITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_ALTARIA},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SWABLU
#if P_FAMILY_SHUPPET
-static const struct FormChange sBanetteFormChangeTable[] = {
+static const struct FormChange sBanetteFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BANETTE_MEGA, ITEM_BANETTITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_BANETTE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SHUPPET
#if P_FAMILY_ABSOL
-static const struct FormChange sAbsolFormChangeTable[] = {
+static const struct FormChange sAbsolFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ABSOL_MEGA, ITEM_ABSOLITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_ABSOL},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_ABSOL
#if P_FAMILY_SNORUNT
-static const struct FormChange sGlalieFormChangeTable[] = {
+static const struct FormChange sGlalieFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GLALIE_MEGA, ITEM_GLALITITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_GLALIE},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sFroslassFormChangeTable[] = {
+static const struct FormChange sFroslassFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_FROSLASS_MEGA, ITEM_FROSLASSITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_FROSLASS},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SNORUNT
#if P_FAMILY_CASTFORM
-static const struct FormChange sCastformFormChangeTable[] = {
+static const struct FormChange sCastformFormChangeTable[] =
+{
#if OW_FOLLOWERS_WEATHER_FORMS == TRUE
{FORM_CHANGE_OVERWORLD_WEATHER, SPECIES_CASTFORM_SUNNY, WEATHER_SUNNY_CLOUDS},
{FORM_CHANGE_OVERWORLD_WEATHER, SPECIES_CASTFORM_SUNNY, WEATHER_DROUGHT},
@@ -512,92 +610,111 @@ static const struct FormChange sCastformFormChangeTable[] = {
#endif //P_FAMILY_CASTFORM
#if P_FAMILY_BAGON
-static const struct FormChange sSalamenceFormChangeTable[] = {
+static const struct FormChange sSalamenceFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SALAMENCE_MEGA, ITEM_SALAMENCITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_SALAMENCE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_BAGON
#if P_FAMILY_BELDUM
-static const struct FormChange sMetagrossFormChangeTable[] = {
+static const struct FormChange sMetagrossFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_METAGROSS_MEGA, ITEM_METAGROSSITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_METAGROSS},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_BELDUM
#if P_FAMILY_LATIAS
-static const struct FormChange sLatiasFormChangeTable[] = {
+static const struct FormChange sLatiasFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LATIAS_MEGA, ITEM_LATIASITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_LATIAS},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_LATIAS
#if P_FAMILY_LATIOS
-static const struct FormChange sLatiosFormChangeTable[] = {
+static const struct FormChange sLatiosFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LATIOS_MEGA, ITEM_LATIOSITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_LATIOS},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_LATIOS
#if P_FAMILY_KYOGRE
-static const struct FormChange sKyogreFormChangeTable[] = {
+static const struct FormChange sKyogreFormChangeTable[] =
+{
#if P_PRIMAL_REVERSIONS
- {FORM_CHANGE_BATTLE_PRIMAL_REVERSION, SPECIES_KYOGRE_PRIMAL, ITEM_BLUE_ORB},
+ {FORM_CHANGE_BATTLE_PRIMAL_REVERSION, SPECIES_KYOGRE_PRIMAL, ITEM_BLUE_ORB},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_KYOGRE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_KYOGRE
#if P_FAMILY_GROUDON
-static const struct FormChange sGroudonFormChangeTable[] = {
+static const struct FormChange sGroudonFormChangeTable[] =
+{
#if P_PRIMAL_REVERSIONS
- {FORM_CHANGE_BATTLE_PRIMAL_REVERSION, SPECIES_GROUDON_PRIMAL, ITEM_RED_ORB},
+ {FORM_CHANGE_BATTLE_PRIMAL_REVERSION, SPECIES_GROUDON_PRIMAL, ITEM_RED_ORB},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_GROUDON},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_GROUDON
#if P_FAMILY_RAYQUAZA
-static const struct FormChange sRayquazaFormChangeTable[] = {
+static const struct FormChange sRayquazaFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE, SPECIES_RAYQUAZA_MEGA, MOVE_DRAGON_ASCENT},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_RAYQUAZA},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_RAYQUAZA
#if P_FAMILY_DEOXYS
-static const struct FormChange sDeoxysNormalFormChangeTable[] = {
+static const struct FormChange sDeoxysNormalFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE, SPECIES_DEOXYS_ATTACK, ITEM_METEORITE},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sDeoxysAttackFormChangeTable[] = {
+static const struct FormChange sDeoxysAttackFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE, SPECIES_DEOXYS_DEFENSE, ITEM_METEORITE},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sDeoxysDefenseFormChangeTable[] = {
+static const struct FormChange sDeoxysDefenseFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE, SPECIES_DEOXYS_SPEED, ITEM_METEORITE},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sDeoxysSpeedFormChangeTable[] = {
+static const struct FormChange sDeoxysSpeedFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE, SPECIES_DEOXYS_NORMAL, ITEM_METEORITE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_DEOXYS
#if P_FAMILY_BURMY
-static const struct FormChange sBurmyFormChangeTable[] = {
+static const struct FormChange sBurmyFormChangeTable[] =
+{
{FORM_CHANGE_END_BATTLE_ENVIRONMENT, SPECIES_BURMY_PLANT, BATTLE_ENVIRONMENT_GRASS},
{FORM_CHANGE_END_BATTLE_ENVIRONMENT, SPECIES_BURMY_PLANT, BATTLE_ENVIRONMENT_LONG_GRASS},
{FORM_CHANGE_END_BATTLE_ENVIRONMENT, SPECIES_BURMY_PLANT, BATTLE_ENVIRONMENT_POND},
@@ -611,7 +728,8 @@ static const struct FormChange sBurmyFormChangeTable[] = {
#endif //P_FAMILY_BURMY
#if P_FAMILY_CHERUBI
-static const struct FormChange sCherrimFormChangeTable[] = {
+static const struct FormChange sCherrimFormChangeTable[] =
+{
#if OW_FOLLOWERS_WEATHER_FORMS == TRUE
{FORM_CHANGE_OVERWORLD_WEATHER, SPECIES_CHERRIM_SUNSHINE, WEATHER_DROUGHT},
{FORM_CHANGE_OVERWORLD_WEATHER, SPECIES_CHERRIM_OVERCAST, WEATHER_NONE},
@@ -635,43 +753,52 @@ static const struct FormChange sCherrimFormChangeTable[] = {
#endif //P_FAMILY_CHERUBI
#if P_FAMILY_BUNEARY
-static const struct FormChange sLopunnyFormChangeTable[] = {
+static const struct FormChange sLopunnyFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LOPUNNY_MEGA, ITEM_LOPUNNITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_LOPUNNY},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_BUNEARY
#if P_FAMILY_GIBLE
-static const struct FormChange sGarchompFormChangeTable[] = {
+static const struct FormChange sGarchompFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GARCHOMP_MEGA, ITEM_GARCHOMPITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_GARCHOMP},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_GIBLE
#if P_FAMILY_RIOLU
-static const struct FormChange sLucarioFormChangeTable[] = {
+static const struct FormChange sLucarioFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_LUCARIO_MEGA, ITEM_LUCARIONITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_LUCARIO},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_RIOLU
#if P_FAMILY_SNOVER
-static const struct FormChange sAbomasnowFormChangeTable[] = {
+static const struct FormChange sAbomasnowFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_ABOMASNOW_MEGA, ITEM_ABOMASITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_ABOMASNOW},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SNOVER
#if P_FAMILY_ROTOM
-static const struct FormChange sRotomFormChangeTable[] = {
+static const struct FormChange sRotomFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ROTOM, ITEM_ROTOM_CATALOG, 0},
{FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ROTOM_HEAT, ITEM_ROTOM_CATALOG, 1},
{FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ROTOM_WASH, ITEM_ROTOM_CATALOG, 2},
@@ -683,7 +810,8 @@ static const struct FormChange sRotomFormChangeTable[] = {
#endif //P_FAMILY_ROTOM
#if P_FAMILY_DIALGA
-static const struct FormChange sDialgaFormChangeTable[] = {
+static const struct FormChange sDialgaFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_HOLD, SPECIES_DIALGA, ITEM_NONE},
{FORM_CHANGE_ITEM_HOLD, SPECIES_DIALGA_ORIGIN, ITEM_ADAMANT_CRYSTAL},
{FORM_CHANGE_TERMINATOR},
@@ -691,7 +819,8 @@ static const struct FormChange sDialgaFormChangeTable[] = {
#endif //P_FAMILY_DIALGA
#if P_FAMILY_PALKIA
-static const struct FormChange sPalkiaFormChangeTable[] = {
+static const struct FormChange sPalkiaFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_HOLD, SPECIES_PALKIA, ITEM_NONE},
{FORM_CHANGE_ITEM_HOLD, SPECIES_PALKIA_ORIGIN, ITEM_LUSTROUS_GLOBE},
{FORM_CHANGE_TERMINATOR},
@@ -699,7 +828,8 @@ static const struct FormChange sPalkiaFormChangeTable[] = {
#endif //P_FAMILY_PALKIA
#if P_FAMILY_GIRATINA
-static const struct FormChange sGiratinaFormChangeTable[] = {
+static const struct FormChange sGiratinaFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_HOLD, SPECIES_GIRATINA_ALTERED, ITEM_NONE},
#if I_GRISEOUS_ORB_FORM_CHANGE < GEN_9
{FORM_CHANGE_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB},
@@ -710,7 +840,8 @@ static const struct FormChange sGiratinaFormChangeTable[] = {
#endif //P_FAMILY_GIRATINA
#if P_FAMILY_SHAYMIN
-static const struct FormChange sShayminFormChangeTable[] = {
+static const struct FormChange sShayminFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE, SPECIES_SHAYMIN_SKY, ITEM_GRACIDEA, DAY, STATUS1_FREEZE | STATUS1_FROSTBITE},
{FORM_CHANGE_WITHDRAW, SPECIES_SHAYMIN_LAND},
{FORM_CHANGE_TIME_OF_DAY, SPECIES_SHAYMIN_LAND, NIGHT},
@@ -720,7 +851,8 @@ static const struct FormChange sShayminFormChangeTable[] = {
#endif //P_FAMILY_SHAYMIN
#if P_FAMILY_ARCEUS
-static const struct FormChange sArceusFormChangeTable[] = {
+static const struct FormChange sArceusFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_NORMAL, ITEM_NONE, ABILITY_MULTITYPE},
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FIGHTING, ITEM_FIST_PLATE, ABILITY_MULTITYPE},
{FORM_CHANGE_ITEM_HOLD, SPECIES_ARCEUS_FIGHTING, ITEM_FIGHTINIUM_Z, ABILITY_MULTITYPE},
@@ -761,43 +893,52 @@ static const struct FormChange sArceusFormChangeTable[] = {
#endif //P_FAMILY_ARCEUS
#if P_FAMILY_TEPIG
-static const struct FormChange sEmboarFormChangeTable[] = {
+static const struct FormChange sEmboarFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_EMBOAR_MEGA, ITEM_EMBOARITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_EMBOAR},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_TEPIG
#if P_FAMILY_DRILBUR
-static const struct FormChange sExcadrillFormChangeTable[] = {
+static const struct FormChange sExcadrillFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_EXCADRILL_MEGA, ITEM_EXCADRITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_EXCADRILL},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_DRILBUR
#if P_FAMILY_AUDINO
-static const struct FormChange sAudinoFormChangeTable[] = {
+static const struct FormChange sAudinoFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_AUDINO_MEGA, ITEM_AUDINITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_AUDINO},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_AUDINO
#if P_FAMILY_VENIPEDE
-static const struct FormChange sScolipedeFormChangeTable[] = {
+static const struct FormChange sScolipedeFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SCOLIPEDE_MEGA, ITEM_SCOLIPITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_SCOLIPEDE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_VENIPEDE
#if P_FAMILY_DARUMAKA
-static const struct FormChange sDarmanitanFormChangeTable[] = {
+static const struct FormChange sDarmanitanFormChangeTable[] =
+{
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_STANDARD, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_ZEN, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50},
{FORM_CHANGE_FAINT, SPECIES_DARMANITAN_STANDARD},
@@ -806,7 +947,8 @@ static const struct FormChange sDarmanitanFormChangeTable[] = {
};
#if P_GALARIAN_FORMS
-static const struct FormChange sDarmanitanGalarFormChangeTable[] = {
+static const struct FormChange sDarmanitanGalarFormChangeTable[] =
+{
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_GALAR_STANDARD, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_GALAR_ZEN, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50},
{FORM_CHANGE_FAINT, SPECIES_DARMANITAN_GALAR_STANDARD},
@@ -817,10 +959,12 @@ static const struct FormChange sDarmanitanGalarFormChangeTable[] = {
#endif //P_FAMILY_DARUMAKA
#if P_FAMILY_SCRAGGY
-static const struct FormChange sScraftyFormChangeTable[] = {
+static const struct FormChange sScraftyFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_SCRAFTY_MEGA, ITEM_SCRAFTINITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_SCRAFTY},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SCRAGGY
@@ -831,30 +975,36 @@ static const struct FormChange sGarbodorFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GARBODOR_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_GARBODOR},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_TRUBBISH
#if P_FAMILY_TYNAMO
-static const struct FormChange sEelektrossFormChangeTable[] = {
+static const struct FormChange sEelektrossFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_EELEKTROSS_MEGA, ITEM_EELEKTROSSITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_EELEKTROSS},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_TYNAMO
#if P_FAMILY_LITWICK
-static const struct FormChange sChandelureFormChangeTable[] = {
+static const struct FormChange sChandelureFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CHANDELURE_MEGA, ITEM_CHANDELURITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_CHANDELURE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_LITWICK
#if P_FAMILY_TORNADUS
-static const struct FormChange sTornadusFormChangeTable[] = {
+static const struct FormChange sTornadusFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE, SPECIES_TORNADUS_THERIAN, ITEM_REVEAL_GLASS},
{FORM_CHANGE_ITEM_USE, SPECIES_TORNADUS_INCARNATE, ITEM_REVEAL_GLASS},
{FORM_CHANGE_TERMINATOR},
@@ -862,7 +1012,8 @@ static const struct FormChange sTornadusFormChangeTable[] = {
#endif //P_FAMILY_TORNADUS
#if P_FAMILY_THUNDURUS
-static const struct FormChange sThundurusFormChangeTable[] = {
+static const struct FormChange sThundurusFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE, SPECIES_THUNDURUS_THERIAN, ITEM_REVEAL_GLASS},
{FORM_CHANGE_ITEM_USE, SPECIES_THUNDURUS_INCARNATE, ITEM_REVEAL_GLASS},
{FORM_CHANGE_TERMINATOR},
@@ -870,7 +1021,8 @@ static const struct FormChange sThundurusFormChangeTable[] = {
#endif //P_FAMILY_THUNDURUS
#if P_FAMILY_LANDORUS
-static const struct FormChange sLandorusFormChangeTable[] = {
+static const struct FormChange sLandorusFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE, SPECIES_LANDORUS_THERIAN, ITEM_REVEAL_GLASS},
{FORM_CHANGE_ITEM_USE, SPECIES_LANDORUS_INCARNATE, ITEM_REVEAL_GLASS},
{FORM_CHANGE_TERMINATOR},
@@ -886,7 +1038,8 @@ static const struct Fusion sKyuremFusionTable[] = {
#endif //P_FAMILY_KYUREM
#if P_FAMILY_KELDEO
-static const struct FormChange sKeldeoFormChangeTable[] = {
+static const struct FormChange sKeldeoFormChangeTable[] =
+{
{FORM_CHANGE_MOVE, SPECIES_KELDEO_RESOLUTE, MOVE_SECRET_SWORD, WHEN_LEARNED},
{FORM_CHANGE_MOVE, SPECIES_KELDEO_ORDINARY, MOVE_SECRET_SWORD, WHEN_FORGOTTEN},
{FORM_CHANGE_TERMINATOR},
@@ -894,7 +1047,8 @@ static const struct FormChange sKeldeoFormChangeTable[] = {
#endif //P_FAMILY_KELDEO
#if P_FAMILY_MELOETTA
-static const struct FormChange sMeloettaFormChangeTable[] = {
+static const struct FormChange sMeloettaFormChangeTable[] =
+{
{FORM_CHANGE_BATTLE_AFTER_MOVE, SPECIES_MELOETTA_PIROUETTE, MOVE_RELIC_SONG},
{FORM_CHANGE_BATTLE_AFTER_MOVE, SPECIES_MELOETTA_ARIA, MOVE_RELIC_SONG},
{FORM_CHANGE_FAINT, SPECIES_MELOETTA_ARIA},
@@ -904,7 +1058,8 @@ static const struct FormChange sMeloettaFormChangeTable[] = {
#endif //P_FAMILY_MELOETTA
#if P_FAMILY_GENESECT
-static const struct FormChange sGenesectFormChangeTable[] = {
+static const struct FormChange sGenesectFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT, ITEM_NONE},
{FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_DOUSE, ITEM_DOUSE_DRIVE},
{FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_SHOCK, ITEM_SHOCK_DRIVE},
@@ -915,32 +1070,39 @@ static const struct FormChange sGenesectFormChangeTable[] = {
#endif //P_FAMILY_GENESECT
#if P_FAMILY_CHESPIN
-static const struct FormChange sChesnaughtFormChangeTable[] = {
+static const struct FormChange sChesnaughtFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CHESNAUGHT_MEGA, ITEM_CHESNAUGHTITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_CHESNAUGHT},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_CHESPIN
#if P_FAMILY_FENNEKIN
-static const struct FormChange sDelphoxFormChangeTable[] = {
+static const struct FormChange sDelphoxFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_DELPHOX_MEGA, ITEM_DELPHOXITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_DELPHOX},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_FENNEKIN
#if P_FAMILY_FROAKIE
-static const struct FormChange sGreninjaFormChangeTable[] = {
+static const struct FormChange sGreninjaFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GRENINJA_MEGA, ITEM_GRENINJITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_GRENINJA},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sGreninjaBattleBondFormChangeTable[] = {
+static const struct FormChange sGreninjaBattleBondFormChangeTable[] =
+{
{FORM_CHANGE_FAINT, SPECIES_GRENINJA_BATTLE_BOND},
{FORM_CHANGE_END_BATTLE, SPECIES_GRENINJA_BATTLE_BOND},
{FORM_CHANGE_TERMINATOR},
@@ -948,25 +1110,30 @@ static const struct FormChange sGreninjaBattleBondFormChangeTable[] = {
#endif //P_FAMILY_FROAKIE
#if P_FAMILY_LITLEO
-static const struct FormChange sPyroarFormChangeTable[] = {
+static const struct FormChange sPyroarFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_PYROAR_MEGA, ITEM_PYROARITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_PYROAR},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_LITLEO
#if P_FAMILY_FLABEBE
-static const struct FormChange sFloetteEternalFormChangeTable[] = {
+static const struct FormChange sFloetteEternalFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_FLOETTE_MEGA, ITEM_FLOETTITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_FLOETTE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_FLABEBE
#if P_FAMILY_FURFROU
-static const struct FormChange sFurfrouFormChangeTable[] = {
+static const struct FormChange sFurfrouFormChangeTable[] =
+{
{FORM_CHANGE_WITHDRAW, SPECIES_FURFROU_NATURAL},
{FORM_CHANGE_DAYS_PASSED, SPECIES_FURFROU_NATURAL, 5},
{FORM_CHANGE_TERMINATOR},
@@ -974,7 +1141,8 @@ static const struct FormChange sFurfrouFormChangeTable[] = {
#endif //P_FAMILY_FURFROU
#if P_FAMILY_HONEDGE
-static const struct FormChange sAegislashFormChangeTable[] = {
+static const struct FormChange sAegislashFormChangeTable[] =
+{
{FORM_CHANGE_BATTLE_BEFORE_MOVE_CATEGORY, SPECIES_AEGISLASH_BLADE, DAMAGE_CATEGORY_PHYSICAL, ABILITY_STANCE_CHANGE},
{FORM_CHANGE_BATTLE_BEFORE_MOVE_CATEGORY, SPECIES_AEGISLASH_BLADE, DAMAGE_CATEGORY_SPECIAL, ABILITY_STANCE_CHANGE},
{FORM_CHANGE_BATTLE_BEFORE_MOVE, SPECIES_AEGISLASH_SHIELD, MOVE_KINGS_SHIELD, ABILITY_STANCE_CHANGE},
@@ -986,43 +1154,52 @@ static const struct FormChange sAegislashFormChangeTable[] = {
#endif //P_FAMILY_HONEDGE
#if P_FAMILY_INKAY
-static const struct FormChange sMalamarFormChangeTable[] = {
+static const struct FormChange sMalamarFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_MALAMAR_MEGA, ITEM_MALAMARITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_MALAMAR},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_INKAY
#if P_FAMILY_BINACLE
-static const struct FormChange sBarbaracleFormChangeTable[] = {
+static const struct FormChange sBarbaracleFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BARBARACLE_MEGA, ITEM_BARBARACITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_BARBARACLE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_BINACLE
#if P_FAMILY_SKRELP
-static const struct FormChange sDragalgeFormChangeTable[] = {
+static const struct FormChange sDragalgeFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_DRAGALGE_MEGA, ITEM_DRAGALGITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_DRAGALGE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SKRELP
#if P_FAMILY_HAWLUCHA
-static const struct FormChange sHawluchaFormChangeTable[] = {
+static const struct FormChange sHawluchaFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_HAWLUCHA_MEGA, ITEM_HAWLUCHANITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_HAWLUCHA},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_HAWLUCHA
#if P_FAMILY_XERNEAS
-static const struct FormChange sXerneasFormChangeTable[] = {
+static const struct FormChange sXerneasFormChangeTable[] =
+{
{FORM_CHANGE_BEGIN_BATTLE, SPECIES_XERNEAS_ACTIVE},
{FORM_CHANGE_END_BATTLE, SPECIES_XERNEAS_NEUTRAL},
{FORM_CHANGE_TERMINATOR},
@@ -1030,33 +1207,38 @@ static const struct FormChange sXerneasFormChangeTable[] = {
#endif //P_FAMILY_XERNEAS
#if P_FAMILY_ZYGARDE
-static const struct FormChange sZygarde50AuraBreakFormChangeTable[] = {
+static const struct FormChange sZygarde50AuraBreakFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_10_AURA_BREAK, ITEM_ZYGARDE_CUBE, 0},
{FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_50_POWER_CONSTRUCT, ITEM_ZYGARDE_CUBE, 1},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sZygarde10AuraBreakFormChangeTable[] = {
+static const struct FormChange sZygarde10AuraBreakFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_50, ITEM_ZYGARDE_CUBE, 0},
{FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_10_POWER_CONSTRUCT, ITEM_ZYGARDE_CUBE, 1},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sZygarde50PowerConstructFormChangeTable[] = {
+static const struct FormChange sZygarde50PowerConstructFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_10_POWER_CONSTRUCT, ITEM_ZYGARDE_CUBE, 0},
{FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_50, ITEM_ZYGARDE_CUBE, 1},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_ZYGARDE_COMPLETE, ABILITY_POWER_CONSTRUCT, HP_LOWER_EQ_THAN, 50},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sZygarde10PowerConstructFormChangeTable[] = {
+static const struct FormChange sZygarde10PowerConstructFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_50_POWER_CONSTRUCT, ITEM_ZYGARDE_CUBE, 0},
{FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_10_AURA_BREAK, ITEM_ZYGARDE_CUBE, 1},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_ZYGARDE_COMPLETE, ABILITY_POWER_CONSTRUCT, HP_LOWER_EQ_THAN, 50},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sZygardeCompleteFormChangeTable[] = {
+static const struct FormChange sZygardeCompleteFormChangeTable[] =
+{
{FORM_CHANGE_FAINT},
{FORM_CHANGE_END_BATTLE},
#if P_GEN_9_MEGA_EVOLUTIONS
@@ -1067,16 +1249,19 @@ static const struct FormChange sZygardeCompleteFormChangeTable[] = {
#endif //P_FAMILY_ZYGARDE
#if P_FAMILY_DIANCIE
-static const struct FormChange sDiancieFormChangeTable[] = {
+static const struct FormChange sDiancieFormChangeTable[] =
+{
#if P_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_DIANCIE_MEGA, ITEM_DIANCITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_DIANCIE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_DIANCIE
#if P_FAMILY_HOOPA
-static const struct FormChange sHoopaFormChangeTable[] = {
+static const struct FormChange sHoopaFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE, SPECIES_HOOPA_UNBOUND, ITEM_PRISON_BOTTLE, SPECIES_HOOPA_CONFINED},
{FORM_CHANGE_WITHDRAW, SPECIES_HOOPA_CONFINED},
{FORM_CHANGE_DAYS_PASSED, SPECIES_HOOPA_CONFINED, 3},
@@ -1085,7 +1270,8 @@ static const struct FormChange sHoopaFormChangeTable[] = {
#endif //P_FAMILY_HOOPA
#if P_FAMILY_ORICORIO
-static const struct FormChange sOricorioFormChangeTable[] = {
+static const struct FormChange sOricorioFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_BAILE, ITEM_RED_NECTAR},
{FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_POM_POM, ITEM_YELLOW_NECTAR},
{FORM_CHANGE_ITEM_USE, SPECIES_ORICORIO_PAU, ITEM_PINK_NECTAR},
@@ -1095,7 +1281,8 @@ static const struct FormChange sOricorioFormChangeTable[] = {
#endif //P_FAMILY_ORICORIO
#if P_FAMILY_WISHIWASHI
-static const struct FormChange sWishiwashiFormChangeTable[] = {
+static const struct FormChange sWishiwashiFormChangeTable[] =
+{
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_WISHIWASHI_SCHOOL, ABILITY_SCHOOLING, HP_HIGHER_THAN, 25},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_WISHIWASHI_SOLO, ABILITY_SCHOOLING, HP_LOWER_EQ_THAN, 25},
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_WISHIWASHI_SOLO},
@@ -1106,7 +1293,8 @@ static const struct FormChange sWishiwashiFormChangeTable[] = {
#endif //P_FAMILY_WISHIWASHI
#if P_FAMILY_TYPE_NULL
-static const struct FormChange sSilvallyFormChangeTable[] = {
+static const struct FormChange sSilvallyFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_NORMAL, ITEM_NONE, ABILITY_RKS_SYSTEM},
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_FIGHTING, ITEM_FIGHTING_MEMORY, ABILITY_RKS_SYSTEM},
{FORM_CHANGE_ITEM_HOLD, SPECIES_SILVALLY_FLYING, ITEM_FLYING_MEMORY, ABILITY_RKS_SYSTEM},
@@ -1130,7 +1318,8 @@ static const struct FormChange sSilvallyFormChangeTable[] = {
#endif //P_FAMILY_TYPE_NULL
#if P_FAMILY_MINIOR
-static const struct FormChange sMiniorRedFormChangeTable[] = {
+static const struct FormChange sMiniorRedFormChangeTable[] =
+{
{FORM_CHANGE_BEGIN_BATTLE, SPECIES_MINIOR_CORE_RED},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_RED, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_RED, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50},
@@ -1139,7 +1328,8 @@ static const struct FormChange sMiniorRedFormChangeTable[] = {
{FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_RED},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sMiniorBlueFormChangeTable[] = {
+static const struct FormChange sMiniorBlueFormChangeTable[] =
+{
{FORM_CHANGE_BEGIN_BATTLE, SPECIES_MINIOR_CORE_BLUE},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_BLUE, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_BLUE, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50},
@@ -1148,7 +1338,8 @@ static const struct FormChange sMiniorBlueFormChangeTable[] = {
{FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_BLUE},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sMiniorGreenFormChangeTable[] = {
+static const struct FormChange sMiniorGreenFormChangeTable[] =
+{
{FORM_CHANGE_BEGIN_BATTLE, SPECIES_MINIOR_CORE_GREEN},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_GREEN, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_GREEN, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50},
@@ -1157,7 +1348,8 @@ static const struct FormChange sMiniorGreenFormChangeTable[] = {
{FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_GREEN},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sMiniorIndigoFormChangeTable[] = {
+static const struct FormChange sMiniorIndigoFormChangeTable[] =
+{
{FORM_CHANGE_BEGIN_BATTLE, SPECIES_MINIOR_CORE_INDIGO},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_INDIGO, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_INDIGO, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50},
@@ -1166,7 +1358,8 @@ static const struct FormChange sMiniorIndigoFormChangeTable[] = {
{FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_INDIGO},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sMiniorOrangeFormChangeTable[] = {
+static const struct FormChange sMiniorOrangeFormChangeTable[] =
+{
{FORM_CHANGE_BEGIN_BATTLE, SPECIES_MINIOR_CORE_ORANGE},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_ORANGE, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_ORANGE, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50},
@@ -1175,7 +1368,8 @@ static const struct FormChange sMiniorOrangeFormChangeTable[] = {
{FORM_CHANGE_END_BATTLE, SPECIES_MINIOR_CORE_ORANGE},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sMiniorVioletFormChangeTable[] = {
+static const struct FormChange sMiniorVioletFormChangeTable[] =
+{
{FORM_CHANGE_BEGIN_BATTLE, SPECIES_MINIOR_CORE_VIOLET},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_METEOR_VIOLET, ABILITY_SHIELDS_DOWN, HP_HIGHER_THAN, 50},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_MINIOR_CORE_VIOLET, ABILITY_SHIELDS_DOWN, HP_LOWER_EQ_THAN, 50},
@@ -1196,13 +1390,15 @@ static const struct FormChange sMiniorYellowFormChangeTable[] = {
#endif //P_FAMILY_MINIOR
#if P_FAMILY_MIMIKYU
-static const struct FormChange sMimikyuFormChangeTable[] = {
+static const struct FormChange sMimikyuFormChangeTable[] =
+{
{FORM_CHANGE_FAINT, SPECIES_MIMIKYU_DISGUISED},
{FORM_CHANGE_END_BATTLE, SPECIES_MIMIKYU_DISGUISED},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sMimikyuTotemFormChangeTable[] = {
+static const struct FormChange sMimikyuTotemFormChangeTable[] =
+{
{FORM_CHANGE_FAINT, SPECIES_MIMIKYU_TOTEM_DISGUISED},
{FORM_CHANGE_END_BATTLE, SPECIES_MIMIKYU_TOTEM_DISGUISED},
{FORM_CHANGE_TERMINATOR},
@@ -1210,10 +1406,12 @@ static const struct FormChange sMimikyuTotemFormChangeTable[] = {
#endif //P_FAMILY_MIMIKYU
#if P_FAMILY_DRAMPA
-static const struct FormChange sDrampaFormChangeTable[] = {
+static const struct FormChange sDrampaFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_DRAMPA_MEGA, ITEM_DRAMPANITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_DRAMPA},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_DRAMPA
@@ -1225,16 +1423,25 @@ static const struct Fusion sNecrozmaFusionTable[] = {
{FUSION_TERMINATOR},
};
-static const struct FormChange sNecrozmaDuskManeFormChangeTable[] = {
+static const struct FormChange sNecrozmaDuskManeFormChangeTable[] =
+{
#if P_ULTRA_BURST_FORMS
{FORM_CHANGE_BATTLE_ULTRA_BURST, SPECIES_NECROZMA_ULTRA, ITEM_ULTRANECROZIUM_Z},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_NECROZMA_DUSK_MANE},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sNecrozmaDawnWingsFormChangeTable[] = {
+static const struct FormChange sNecrozmaDawnWingsFormChangeTable[] =
+{
#if P_ULTRA_BURST_FORMS
{FORM_CHANGE_BATTLE_ULTRA_BURST, SPECIES_NECROZMA_ULTRA, ITEM_ULTRANECROZIUM_Z},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_NECROZMA_DAWN_WINGS},
+ {FORM_CHANGE_TERMINATOR},
+};
+static const struct FormChange sNecrozmaUltraFormChangeTable[] =
+{
+ {FORM_CHANGE_END_BATTLE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_NECROZMA
@@ -1245,6 +1452,7 @@ static const struct FormChange sMelmetalFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_MELMETAL_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_MELMETAL},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_MELTAN
@@ -1255,6 +1463,7 @@ static const struct FormChange sRillaboomFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_RILLABOOM_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_RILLABOOM},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_GROOKEY
@@ -1265,6 +1474,7 @@ static const struct FormChange sCinderaceFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CINDERACE_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_CINDERACE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SCORBUNNY
@@ -1275,6 +1485,7 @@ static const struct FormChange sInteleonFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_INTELEON_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_INTELEON},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SOBBLE
@@ -1285,6 +1496,7 @@ static const struct FormChange sCorviknightFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CORVIKNIGHT_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_CORVIKNIGHT},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_ROOKIDEE
@@ -1295,6 +1507,7 @@ static const struct FormChange sOrbeetleFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_ORBEETLE_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_ORBEETLE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_BLIPBUG
@@ -1305,6 +1518,7 @@ static const struct FormChange sDrednawFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_DREDNAW_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_DREDNAW},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_CHEWTLE
@@ -1315,6 +1529,7 @@ static const struct FormChange sCoalossalFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_COALOSSAL_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_COALOSSAL},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_ROLYCOLY
@@ -1325,6 +1540,7 @@ static const struct FormChange sFlappleFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_FLAPPLE_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_FLAPPLE},
{FORM_CHANGE_TERMINATOR},
};
@@ -1333,6 +1549,7 @@ static const struct FormChange sAppletunFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_APPLETUN_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_APPLETUN},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_APPLIN
@@ -1343,12 +1560,14 @@ static const struct FormChange sSandacondaFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_SANDACONDA_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_SANDACONDA},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SILICOBRA
#if P_FAMILY_CRAMORANT
-static const struct FormChange sCramorantFormChangeTable[] = {
+static const struct FormChange sCramorantFormChangeTable[] =
+{
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_CRAMORANT_GULPING, ABILITY_GULP_MISSILE, HP_HIGHER_THAN, 50},
{FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_CRAMORANT_GORGING, ABILITY_GULP_MISSILE, HP_LOWER_EQ_THAN, 50},
{FORM_CHANGE_HIT_BY_MOVE, SPECIES_CRAMORANT, ABILITY_GULP_MISSILE},
@@ -1365,6 +1584,7 @@ static const struct FormChange sToxtricityAmpedFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_TOXTRICITY_AMPED_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_TOXTRICITY_AMPED},
{FORM_CHANGE_TERMINATOR},
};
@@ -1373,6 +1593,7 @@ static const struct FormChange sToxtricityLowKeyFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_TOXTRICITY_LOW_KEY_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_TOXTRICITY_LOW_KEY},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_TOXEL
@@ -1383,6 +1604,7 @@ static const struct FormChange sCentiskorchFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CENTISKORCH_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_CENTISKORCH},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SIZZLIPEDE
@@ -1393,6 +1615,7 @@ static const struct FormChange sHattereneFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_HATTERENE_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_HATTERENE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_HATENNA
@@ -1403,6 +1626,7 @@ static const struct FormChange sGrimmsnarlFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GRIMMSNARL_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_GRIMMSNARL},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_IMPIDIMP
@@ -1413,21 +1637,25 @@ static const struct FormChange sAlcremieFormChangeTable[] =
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_ALCREMIE_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_ALCREMIE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_MILCERY
#if P_FAMILY_FALINKS
-static const struct FormChange sFalinksFormChangeTable[] = {
+static const struct FormChange sFalinksFormChangeTable[] =
+{
#if P_GEN_9_MEGA_EVOLUTIONS
{FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_FALINKS_MEGA, ITEM_FALINKSITE},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_FALINKS},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_FALINKS
#if P_FAMILY_EISCUE
-static const struct FormChange sEiscueFormChangeTable[] = {
+static const struct FormChange sEiscueFormChangeTable[] =
+{
{FORM_CHANGE_BATTLE_WEATHER, SPECIES_EISCUE_ICE, B_WEATHER_HAIL | B_WEATHER_SNOW, ABILITY_ICE_FACE},
{FORM_CHANGE_FAINT, SPECIES_EISCUE_ICE},
{FORM_CHANGE_END_BATTLE, SPECIES_EISCUE_ICE},
@@ -1436,7 +1664,8 @@ static const struct FormChange sEiscueFormChangeTable[] = {
#endif //P_FAMILY_EISCUE
#if P_FAMILY_MORPEKO
-static const struct FormChange sMorpekoFormChangeTable[] = {
+static const struct FormChange sMorpekoFormChangeTable[] =
+{
{FORM_CHANGE_BATTLE_TURN_END, SPECIES_MORPEKO_HANGRY, ABILITY_HUNGER_SWITCH},
{FORM_CHANGE_BATTLE_TURN_END, SPECIES_MORPEKO_FULL_BELLY, ABILITY_HUNGER_SWITCH},
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_MORPEKO_FULL_BELLY},
@@ -1447,25 +1676,30 @@ static const struct FormChange sMorpekoFormChangeTable[] = {
#endif //P_FAMILY_MORPEKO
#if P_FAMILY_CUFANT
-static const struct FormChange sCopperajahFormChangeTable[] = {
+static const struct FormChange sCopperajahFormChangeTable[] =
+{
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_COPPERAJAH_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_COPPERAJAH},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_CUFANT
#if P_FAMILY_DURALUDON
-static const struct FormChange sDuraludonFormChangeTable[] = {
+static const struct FormChange sDuraludonFormChangeTable[] =
+{
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_DURALUDON_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_DURALUDON},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_DURALUDON
#if P_FAMILY_ZACIAN
-static const struct FormChange sZacianFormChangeTable[] = {
+static const struct FormChange sZacianFormChangeTable[] =
+{
{FORM_CHANGE_BEGIN_BATTLE, SPECIES_ZACIAN_CROWNED, ITEM_RUSTED_SWORD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BLADE},
{FORM_CHANGE_END_BATTLE, SPECIES_ZACIAN_HERO, ITEM_RUSTED_SWORD, MOVE_BEHEMOTH_BLADE, MOVE_IRON_HEAD},
{FORM_CHANGE_TERMINATOR},
@@ -1473,7 +1707,8 @@ static const struct FormChange sZacianFormChangeTable[] = {
#endif //P_FAMILY_ZACIAN
#if P_FAMILY_ZAMAZENTA
-static const struct FormChange sZamazentaFormChangeTable[] = {
+static const struct FormChange sZamazentaFormChangeTable[] =
+{
{FORM_CHANGE_BEGIN_BATTLE, SPECIES_ZAMAZENTA_CROWNED, ITEM_RUSTED_SHIELD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BASH},
{FORM_CHANGE_END_BATTLE, SPECIES_ZAMAZENTA_HERO, ITEM_RUSTED_SHIELD, MOVE_BEHEMOTH_BASH, MOVE_IRON_HEAD},
{FORM_CHANGE_TERMINATOR},
@@ -1481,17 +1716,21 @@ static const struct FormChange sZamazentaFormChangeTable[] = {
#endif //P_FAMILY_ZAMAZENTA
#if P_FAMILY_KUBFU
-static const struct FormChange sUrshifuSingleStrikeFormChangeTable[] = {
+static const struct FormChange sUrshifuSingleStrikeFormChangeTable[] =
+{
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_URSHIFU_SINGLE_STRIKE_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_URSHIFU_SINGLE_STRIKE},
{FORM_CHANGE_TERMINATOR},
};
-static const struct FormChange sUrshifuRapidStrikeFormChangeTable[] = {
+static const struct FormChange sUrshifuRapidStrikeFormChangeTable[] =
+{
#if P_GIGANTAMAX_FORMS
{FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_URSHIFU_RAPID_STRIKE_GMAX},
#endif
+ {FORM_CHANGE_END_BATTLE, SPECIES_URSHIFU_RAPID_STRIKE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_KUBFU
@@ -1505,7 +1744,8 @@ static const struct Fusion sCalyrexFusionTable[] = {
#endif //P_FAMILY_CALYREX
#if P_FAMILY_ENAMORUS
-static const struct FormChange sEnamorusFormChangeTable[] = {
+static const struct FormChange sEnamorusFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_USE, SPECIES_ENAMORUS_INCARNATE, ITEM_REVEAL_GLASS},
{FORM_CHANGE_ITEM_USE, SPECIES_ENAMORUS_THERIAN, ITEM_REVEAL_GLASS},
{FORM_CHANGE_TERMINATOR},
@@ -1516,12 +1756,14 @@ static const struct FormChange sEnamorusFormChangeTable[] = {
static const struct FormChange sPalafinZeroFormChangeTable[] =
{
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_PALAFIN_HERO},
+ {FORM_CHANGE_END_BATTLE, SPECIES_PALAFIN_ZERO},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_FINIZEN
#if P_FAMILY_OGERPON
-static const struct FormChange sOgerponFormChangeTable[] = {
+static const struct FormChange sOgerponFormChangeTable[] =
+{
{FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_TEAL, ITEM_NONE},
{FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_WELLSPRING, ITEM_WELLSPRING_MASK},
{FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_HEARTHFLAME, ITEM_HEARTHFLAME_MASK},
@@ -1532,12 +1774,14 @@ static const struct FormChange sOgerponFormChangeTable[] = {
{FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_OGERPON_HEARTHFLAME_TERA, TYPE_FIRE},
{FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_OGERPON_CORNERSTONE_TERA, TYPE_ROCK},
#endif
+ {FORM_CHANGE_END_BATTLE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_OGERPON
#if P_FAMILY_TERAPAGOS
-static const struct FormChange sTerapagosFormChangeTable[] = {
+static const struct FormChange sTerapagosFormChangeTable[] =
+{
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_TERAPAGOS_TERASTAL, ABILITY_TERA_SHIFT},
#if P_TERA_FORMS
{FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_TERAPAGOS_STELLAR, TYPE_STELLAR},
diff --git a/src/data/pokemon/form_species_tables.h b/src/data/pokemon/form_species_tables.h
index ab703bc2d0..08751e4d28 100644
--- a/src/data/pokemon/form_species_tables.h
+++ b/src/data/pokemon/form_species_tables.h
@@ -1872,7 +1872,7 @@ static const u16 sLurantisFormSpeciesIdTable[] = {
#endif //P_FAMILY_FOMANTIS
#if P_FAMILY_SALANDIT
-static const u16 sSalanditFormSpeciesIdTable[] = {
+static const u16 sSalazzleFormSpeciesIdTable[] = {
SPECIES_SALAZZLE,
SPECIES_SALAZZLE_TOTEM,
FORM_SPECIES_END,
diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h
index e9fa3b946c..7414bbffb2 100644
--- a/src/data/pokemon/species_info/gen_1_families.h
+++ b/src/data/pokemon/species_info/gen_1_families.h
@@ -23,6 +23,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_GRASS),
.abilities = { ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CHLOROPHYLL },
.bodyColor = BODY_COLOR_GREEN,
+ .noFlip = TRUE,
.speciesName = _("妙蛙种子"),
.cryId = CRY_BULBASAUR,
.natDexNum = NATIONAL_DEX_BULBASAUR,
@@ -92,6 +93,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_GRASS),
.abilities = { ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CHLOROPHYLL },
.bodyColor = BODY_COLOR_GREEN,
+ .noFlip = TRUE,
.speciesName = _("妙蛙草"),
.cryId = CRY_IVYSAUR,
.natDexNum = NATIONAL_DEX_IVYSAUR,
@@ -140,6 +142,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_VENUSAUR}),
},
+#if P_UPDATED_EXP_YIELDS >= GEN_8
+ #define VENUSAUR_EXP_YIELD 263
+#elif P_UPDATED_EXP_YIELDS >= GEN_5
+ #define VENUSAUR_EXP_YIELD 236
+#else
+ #define VENUSAUR_EXP_YIELD 208
+#endif
+
[SPECIES_VENUSAUR] =
{
.baseHP = 80,
@@ -150,13 +160,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 100,
.types = MON_TYPES(TYPE_GRASS, TYPE_POISON),
.catchRate = 45,
- #if P_UPDATED_EXP_YIELDS >= GEN_8
- .expYield = 263,
- #elif P_UPDATED_EXP_YIELDS >= GEN_5
- .expYield = 236,
- #else
- .expYield = 208,
- #endif
+ .expYield = VENUSAUR_EXP_YIELD,
.evYield_SpAttack = 2,
.evYield_SpDefense = 1,
.genderRatio = PERCENT_FEMALE(12.5),
@@ -309,7 +313,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 100,
.types = MON_TYPES(TYPE_GRASS, TYPE_POISON),
.catchRate = 45,
- .expYield = 236,
+ .expYield = VENUSAUR_EXP_YIELD,
.evYield_SpAttack = 2,
.evYield_SpDefense = 1,
.genderRatio = PERCENT_FEMALE(12.5),
@@ -495,23 +499,27 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_CHARIZARD}),
},
+#define CHARIZARD_SP_ATK (P_UPDATED_STATS >= GEN_2 ? 109 : 85)
+
+#if P_UPDATED_EXP_YIELDS >= GEN_8
+ #define CHARIZARD_EXP_YIELD 267
+#elif P_UPDATED_EXP_YIELDS >= GEN_5
+ #define CHARIZARD_EXP_YIELD 240
+#else
+ #define CHARIZARD_EXP_YIELD 209
+#endif
+
[SPECIES_CHARIZARD] =
{
.baseHP = 78,
.baseAttack = 84,
.baseDefense = 78,
.baseSpeed = 100,
- .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 109 : 85,
+ .baseSpAttack = CHARIZARD_SP_ATK,
.baseSpDefense = 85,
.types = MON_TYPES(TYPE_FIRE, TYPE_FLYING),
.catchRate = 45,
- #if P_UPDATED_EXP_YIELDS >= GEN_8
- .expYield = 267,
- #elif P_UPDATED_EXP_YIELDS >= GEN_5
- .expYield = 240,
- #else
- .expYield = 209,
- #endif
+ .expYield = CHARIZARD_EXP_YIELD,
.evYield_SpAttack = 3,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 20,
@@ -710,11 +718,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseAttack = 84,
.baseDefense = 78,
.baseSpeed = 100,
- .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 109 : 85,
+ .baseSpAttack = CHARIZARD_SP_ATK,
.baseSpDefense = 85,
.types = MON_TYPES(TYPE_FIRE, TYPE_FLYING),
.catchRate = 45,
- .expYield = 240,
+ .expYield = CHARIZARD_EXP_YIELD,
.evYield_SpAttack = 3,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 20,
@@ -900,6 +908,16 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_BLASTOISE}),
},
+#define BLASTOISE_SP_DEF (P_UPDATED_STATS >= GEN_2 ? 105 : 85)
+
+#if P_UPDATED_EXP_YIELDS >= GEN_8
+ #define BLASTOISE_EXP_YIELD 265
+#elif P_UPDATED_EXP_YIELDS >= GEN_5
+ #define BLASTOISE_EXP_YIELD 239
+#else
+ #define BLASTOISE_EXP_YIELD 210
+#endif
+
[SPECIES_BLASTOISE] =
{
.baseHP = 79,
@@ -907,16 +925,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseDefense = 100,
.baseSpeed = 78,
.baseSpAttack = 85,
- .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 105 : 85,
+ .baseSpDefense = BLASTOISE_SP_DEF,
.types = MON_TYPES(TYPE_WATER),
.catchRate = 45,
- #if P_UPDATED_EXP_YIELDS >= GEN_8
- .expYield = 265,
- #elif P_UPDATED_EXP_YIELDS >= GEN_5
- .expYield = 239,
- #else
- .expYield = 210,
- #endif
+ .expYield = BLASTOISE_EXP_YIELD,
.evYield_SpDefense = 3,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 20,
@@ -1053,10 +1065,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseDefense = 100,
.baseSpeed = 78,
.baseSpAttack = 85,
- .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 105 : 85,
+ .baseSpDefense = BLASTOISE_SP_DEF,
.types = MON_TYPES(TYPE_WATER),
.catchRate = 45,
- .expYield = 239,
+ .expYield = BLASTOISE_EXP_YIELD,
.evYield_SpDefense = 3,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 20,
@@ -1247,7 +1259,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
#if P_UPDATED_EXP_YIELDS >= GEN_8
#define BUTTERFREE_EXP_YIELD 198
-#elif P_UPDATED_EXP_YIELDS >= GEN_7
+#elif P_UPDATED_EXP_YIELDS >= GEN_6
#define BUTTERFREE_EXP_YIELD 178
#elif P_UPDATED_EXP_YIELDS >= GEN_5
#define BUTTERFREE_EXP_YIELD 173
@@ -1562,12 +1574,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.evolutions = EVOLUTION({EVO_LEVEL, 10, SPECIES_BEEDRILL}),
},
-#define BEEDRILL_ATTACK (P_UPDATED_STATS >= GEN_6 ? 90 : 80)
-
[SPECIES_BEEDRILL] =
{
.baseHP = 65,
- .baseAttack = BEEDRILL_ATTACK,
+ .baseAttack = P_UPDATED_STATS >= GEN_6 ? 90 : 80,
.baseDefense = 40,
.baseSpeed = 75,
.baseSpAttack = 45,
@@ -1576,7 +1586,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 198,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 178,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 173,
@@ -1651,7 +1661,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
[SPECIES_BEEDRILL_MEGA] =
{
.baseHP = 65,
- .baseAttack = BEEDRILL_ATTACK + 60,
+ .baseAttack = 150,
.baseDefense = 40,
.baseSpeed = 145,
.baseSpAttack = 15,
@@ -1868,21 +1878,19 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_PIDGEOT}),
},
-#define PIDGEOT_SPEED (P_UPDATED_STATS >= GEN_6 ? 101 : 91)
-
[SPECIES_PIDGEOT] =
{
.baseHP = 83,
.baseAttack = 80,
.baseDefense = 75,
- .baseSpeed = PIDGEOT_SPEED,
+ .baseSpeed = P_UPDATED_STATS >= GEN_6 ? 101 : 91,
.baseSpAttack = 70,
.baseSpDefense = 70,
.types = MON_TYPES(TYPE_NORMAL, TYPE_FLYING),
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 240,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 216,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 211,
@@ -1955,7 +1963,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseHP = 83,
.baseAttack = 80,
.baseDefense = 80,
- .baseSpeed = PIDGEOT_SPEED + 20,
+ .baseSpeed = 121,
.baseSpAttack = 135,
.baseSpDefense = 80,
.types = MON_TYPES(TYPE_NORMAL, TYPE_FLYING),
@@ -2204,7 +2212,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 35,
.types = MON_TYPES(TYPE_DARK, TYPE_NORMAL),
.catchRate = 255,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 51 : 57,
+ .expYield = 51,
.evYield_Speed = 1,
.itemRare = ITEM_PECHA_BERRY,
.genderRatio = PERCENT_FEMALE(50),
@@ -2272,7 +2280,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 80,
.types = MON_TYPES(TYPE_DARK, TYPE_NORMAL),
.catchRate = 127,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 145 : 116,
+ .expYield = 145,
.evYield_Speed = 2,
.itemRare = ITEM_PECHA_BERRY,
.genderRatio = PERCENT_FEMALE(50),
@@ -2334,7 +2342,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 80,
.types = MON_TYPES(TYPE_DARK, TYPE_NORMAL),
.catchRate = 127,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 145 : 116,
+ .expYield = 145,
.evYield_Speed = 2,
.itemRare = ITEM_PECHA_BERRY,
.genderRatio = PERCENT_FEMALE(50),
@@ -2683,7 +2691,6 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
#if P_FAMILY_PIKACHU
#if P_GEN_2_CROSS_EVOS
-
[SPECIES_PICHU] =
{
.baseHP = 20,
@@ -2762,14 +2769,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 35,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 41 : 42,
+ .expYield = 42,
.evYield_Speed = 1,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 10,
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_MEDIUM_FAST,
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED),
- .abilities = { ABILITY_STATIC, ABILITY_NONE, ABILITY_LIGHTNING_ROD },
+ .abilities = { ABILITY_STATIC, ABILITY_NONE, ABILITY_NONE },
.bodyColor = BODY_COLOR_YELLOW,
.noFlip = TRUE,
.speciesName = _("皮丘"),
@@ -2823,6 +2830,9 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
},
#endif //P_GEN_2_CROSS_EVOS
+#define PIKACHU_DEFENSE (P_UPDATED_STATS >= GEN_6 ? 40 : 30)
+#define PIKACHU_SP_DEF (P_UPDATED_STATS >= GEN_6 || P_UPDATED_STATS == GEN_1 ? 50 : 40)
+
#if P_UPDATED_EXP_YIELDS >= GEN_6
#define PIKACHU_EXP_YIELD 112
#elif P_UPDATED_EXP_YIELDS >= GEN_5
@@ -2835,7 +2845,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = PIKACHU_DEFENSE,
.baseSpeed = 90,
.baseSpAttack = 50,
.baseSpDefense = P_UPDATED_STATS >= GEN_6 || P_UPDATED_STATS == GEN_1 ? 50 : 40,
@@ -2923,10 +2933,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = 40,
.baseSpeed = 90,
.baseSpAttack = 50,
- .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40,
+ .baseSpDefense = 50,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
.expYield = PIKACHU_EXP_YIELD,
@@ -2975,10 +2985,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = 40,
.baseSpeed = 90,
.baseSpAttack = 50,
- .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40,
+ .baseSpDefense = 50,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
.expYield = PIKACHU_EXP_YIELD,
@@ -3027,10 +3037,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = 40,
.baseSpeed = 90,
.baseSpAttack = 50,
- .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40,
+ .baseSpDefense = 50,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
.expYield = PIKACHU_EXP_YIELD,
@@ -3080,10 +3090,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = 40,
.baseSpeed = 90,
.baseSpAttack = 50,
- .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40,
+ .baseSpDefense = 50,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
.expYield = PIKACHU_EXP_YIELD,
@@ -3133,10 +3143,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = 40,
.baseSpeed = 90,
.baseSpAttack = 50,
- .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40,
+ .baseSpDefense = 50,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
.expYield = PIKACHU_EXP_YIELD,
@@ -3185,10 +3195,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = 40,
.baseSpeed = 90,
.baseSpAttack = 50,
- .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40,
+ .baseSpDefense = 50,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
.expYield = PIKACHU_EXP_YIELD,
@@ -3240,10 +3250,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = 40,
.baseSpeed = 90,
.baseSpAttack = 50,
- .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40,
+ .baseSpDefense = 50,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
.expYield = PIKACHU_EXP_YIELD,
@@ -3296,10 +3306,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = 40,
.baseSpeed = 90,
.baseSpAttack = 50,
- .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40,
+ .baseSpDefense = 50,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
.expYield = PIKACHU_EXP_YIELD,
@@ -3351,10 +3361,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = 40,
.baseSpeed = 90,
.baseSpAttack = 50,
- .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40,
+ .baseSpDefense = 50,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
.expYield = PIKACHU_EXP_YIELD,
@@ -3406,10 +3416,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = 40,
.baseSpeed = 90,
.baseSpAttack = 50,
- .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40,
+ .baseSpDefense = 50,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
.expYield = PIKACHU_EXP_YIELD,
@@ -3461,10 +3471,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = 40,
.baseSpeed = 90,
.baseSpAttack = 50,
- .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40,
+ .baseSpDefense = 50,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
.expYield = PIKACHU_EXP_YIELD,
@@ -3516,10 +3526,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = 40,
.baseSpeed = 90,
.baseSpAttack = 50,
- .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40,
+ .baseSpDefense = 50,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
.expYield = PIKACHU_EXP_YIELD,
@@ -3571,10 +3581,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = 40,
.baseSpeed = 90,
.baseSpAttack = 50,
- .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40,
+ .baseSpDefense = 50,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
.expYield = PIKACHU_EXP_YIELD,
@@ -3627,10 +3637,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = 40,
.baseSpeed = 90,
.baseSpAttack = 50,
- .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40,
+ .baseSpDefense = 50,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
.expYield = PIKACHU_EXP_YIELD,
@@ -3685,10 +3695,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{
.baseHP = 35,
.baseAttack = 55,
- .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30,
+ .baseDefense = PIKACHU_DEFENSE,
.baseSpeed = 90,
.baseSpAttack = 50,
- .baseSpDefense = P_UPDATED_STATS >= GEN_6 || P_UPDATED_STATS == GEN_1 ? 50 : 40,
+ .baseSpDefense = PIKACHU_SP_DEF,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
.expYield = PIKACHU_EXP_YIELD,
@@ -3749,7 +3759,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 60,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 190,
- .expYield = PIKACHU_EXP_YIELD,
+ .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 151 : 86,
.evYield_Speed = 2,
.itemRare = ITEM_LIGHT_BALL,
.genderRatio = PERCENT_FEMALE(50),
@@ -3818,11 +3828,9 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.formSpeciesIdTable = sPikachuFormSpeciesIdTable,
},
-#define RAICHU_SPEED (P_UPDATED_STATS >= GEN_6 ? 110 : 100)
-
#if P_UPDATED_EXP_YIELDS >= GEN_8
#define RAICHU_EXP_YIELD 243
-#elif P_UPDATED_EXP_YIELDS >= GEN_7
+#elif P_UPDATED_EXP_YIELDS >= GEN_6
#define RAICHU_EXP_YIELD 218
#elif P_UPDATED_EXP_YIELDS >= GEN_5
#define RAICHU_EXP_YIELD 214
@@ -3835,7 +3843,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseHP = 60,
.baseAttack = 90,
.baseDefense = 55,
- .baseSpeed = RAICHU_SPEED,
+ .baseSpeed = P_UPDATED_STATS >= GEN_6 ? 110 : 100,
.baseSpAttack = 90,
.baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 80 : 90,
.types = MON_TYPES(TYPE_ELECTRIC),
@@ -3916,12 +3924,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseHP = 60,
.baseAttack = 85,
.baseDefense = 50,
- .baseSpeed = RAICHU_SPEED,
+ .baseSpeed = 110,
.baseSpAttack = 95,
.baseSpDefense = 85,
.types = MON_TYPES(TYPE_ELECTRIC, TYPE_PSYCHIC),
.catchRate = 75,
- .expYield = RAICHU_EXP_YIELD,
+ .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 243 : 218,
.evYield_Speed = 3,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 10,
@@ -4132,7 +4140,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 35,
.types = MON_TYPES(TYPE_ICE, TYPE_STEEL),
.catchRate = 255,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 60 : 93,
+ .expYield = 60,
.evYield_Defense = 1,
.itemRare = ITEM_GRIP_CLAW,
.genderRatio = PERCENT_FEMALE(50),
@@ -4199,7 +4207,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 65,
.types = MON_TYPES(TYPE_ICE, TYPE_STEEL),
.catchRate = 90,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 158 : 163,
+ .expYield = 158,
.evYield_Defense = 2,
.itemRare = ITEM_GRIP_CLAW,
.genderRatio = PERCENT_FEMALE(50),
@@ -4418,7 +4426,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 253,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 227,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 223,
@@ -4638,7 +4646,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 253,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 227,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 223,
@@ -4875,7 +4883,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.catchRate = 25,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 242,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 217,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 213,
@@ -4956,15 +4964,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 110,
.types = MON_TYPES(TYPE_FAIRY, TYPE_FLYING),
.catchRate = 25,
- #if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 242,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
- .expYield = 217,
- #elif P_UPDATED_EXP_YIELDS >= GEN_5
- .expYield = 213,
- #else
- .expYield = 129,
- #endif
.evYield_HP = 3,
.itemRare = ITEM_MOON_STONE,
.genderRatio = PERCENT_FEMALE(75),
@@ -4972,11 +4972,7 @@ 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,
.speciesName = _("皮可西"),
.cryId = CRY_CLEFABLE, // CRY_CLEFABLE_MEGA,
@@ -5168,7 +5164,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 65,
.types = MON_TYPES(TYPE_ICE),
.catchRate = 190,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 60 : 63,
+ .expYield = 60,
.evYield_Speed = 1,
.itemRare = ITEM_SNOWBALL,
.genderRatio = PERCENT_FEMALE(75),
@@ -5235,7 +5231,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 100,
.types = MON_TYPES(TYPE_ICE, TYPE_FAIRY),
.catchRate = 75,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 177 : 178,
+ .expYield = 177,
.evYield_Speed = 1,
.evYield_SpDefense = 1,
.itemRare = ITEM_SNOWBALL,
@@ -5453,11 +5449,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
},
#if P_UPDATED_STATS >= GEN_6
-#define WIGGLYTUFF_SP_ATK 85
+ #define WIGGLYTUFF_SP_ATK 85
#elif P_UPDATED_STATS >= GEN_2
-#define WIGGLYTUFF_SP_ATK 75
+ #define WIGGLYTUFF_SP_ATK 75
#else
-#define WIGGLYTUFF_SP_ATK 50
+ #define WIGGLYTUFF_SP_ATK 50
#endif
[SPECIES_WIGGLYTUFF] =
@@ -5472,7 +5468,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.catchRate = 50,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 218,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 196,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 191,
@@ -5919,6 +5915,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS),
.abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_STENCH },
.bodyColor = BODY_COLOR_BLUE,
+ .noFlip = TRUE,
.speciesName = _("臭臭花"),
.cryId = CRY_GLOOM,
.natDexNum = NATIONAL_DEX_GLOOM,
@@ -5997,7 +5994,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 245,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 221,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 216,
@@ -6085,7 +6082,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 245,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 221,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 216,
@@ -6501,15 +6498,6 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
#endif //P_FAMILY_VENONAT
#if P_FAMILY_DIGLETT
-
-#if P_UPDATED_EXP_YIELDS >= GEN_7
- #define DUGTRIO_EXP_YIELD 149
-#elif P_UPDATED_EXP_YIELDS >= GEN_5
- #define DUGTRIO_EXP_YIELD 142
-#else
- #define DUGTRIO_EXP_YIELD 153
-#endif
-
[SPECIES_DIGLETT] =
{
.baseHP = 10,
@@ -6591,7 +6579,13 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 70,
.types = MON_TYPES(TYPE_GROUND),
.catchRate = 50,
- .expYield = DUGTRIO_EXP_YIELD,
+ #if P_UPDATED_EXP_YIELDS >= GEN_7
+ .expYield = 149,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_5
+ .expYield = 142,
+ #else
+ .expYield = 153,
+ #endif
.evYield_Speed = 2,
.itemRare = ITEM_SOFT_SAND,
.genderRatio = PERCENT_FEMALE(50),
@@ -6668,7 +6662,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 45,
.types = MON_TYPES(TYPE_GROUND, TYPE_STEEL),
.catchRate = 255,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 53 : 81,
+ .expYield = 53,
.evYield_Speed = 1,
.itemRare = ITEM_SOFT_SAND,
.genderRatio = PERCENT_FEMALE(50),
@@ -6735,7 +6729,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 70,
.types = MON_TYPES(TYPE_GROUND, TYPE_STEEL),
.catchRate = 50,
- .expYield = DUGTRIO_EXP_YIELD,
+ .expYield = 149,
.evYield_Speed = 2,
.itemRare = ITEM_SOFT_SAND,
.genderRatio = PERCENT_FEMALE(50),
@@ -6794,6 +6788,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
#endif //P_FAMILY_DIGLETT
#if P_FAMILY_MEOWTH
+#if P_UPDATED_ABILITIES >= GEN_4
+ #define MEOWTH_ABILITIES { ABILITY_PICKUP, ABILITY_TECHNICIAN, ABILITY_UNNERVE }
+#else
+ #define MEOWTH_ABILITIES { ABILITY_PICKUP, ABILITY_NONE, ABILITY_UNNERVE }
+#endif
+
[SPECIES_MEOWTH] =
{
.baseHP = 40,
@@ -6812,11 +6812,7 @@ 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
+ .abilities = MEOWTH_ABILITIES,
.bodyColor = BODY_COLOR_YELLOW,
.speciesName = _("喵喵"),
.cryId = CRY_MEOWTH,
@@ -6956,7 +6952,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 40,
.types = MON_TYPES(TYPE_DARK),
.catchRate = 255,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 58 : 69,
+ .expYield = 58,
.evYield_Speed = 1,
.itemRare = ITEM_QUICK_CLAW,
.genderRatio = PERCENT_FEMALE(50),
@@ -7023,7 +7019,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 65,
.types = MON_TYPES(TYPE_DARK),
.catchRate = 90,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 154 : 148,
+ .expYield = 154,
.evYield_Speed = 2,
.itemRare = ITEM_QUICK_CLAW,
.genderRatio = PERCENT_FEMALE(50),
@@ -7090,7 +7086,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 40,
.types = MON_TYPES(TYPE_STEEL),
.catchRate = 255,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 58 : 69,
+ .expYield = 58,
.evYield_Attack = 1,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -7228,7 +7224,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_MEDIUM_FAST,
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD),
- .abilities = { ABILITY_PICKUP, ABILITY_TECHNICIAN, ABILITY_UNNERVE },
+ .abilities = MEOWTH_ABILITIES,
.bodyColor = BODY_COLOR_YELLOW,
.speciesName = _("喵喵"),
.cryId = CRY_MEOWTH,
@@ -7510,6 +7506,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.abilities = { ABILITY_VITAL_SPIRIT, ABILITY_NONE, ABILITY_DEFIANT },
#endif
.bodyColor = BODY_COLOR_BROWN,
+ .noFlip = TRUE,
.speciesName = _("火暴猴"),
.cryId = CRY_PRIMEAPE,
.natDexNum = NATIONAL_DEX_PRIMEAPE,
@@ -7584,6 +7581,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD),
.abilities = { ABILITY_VITAL_SPIRIT, ABILITY_INNER_FOCUS, ABILITY_DEFIANT },
.bodyColor = BODY_COLOR_GRAY,
+ .noFlip = TRUE,
.speciesName = _("弃世猴"),
.cryId = CRY_ANNIHILAPE,
.natDexNum = NATIONAL_DEX_ANNIHILAPE,
@@ -7781,7 +7779,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 50,
.types = MON_TYPES(TYPE_FIRE, TYPE_ROCK),
.catchRate = 190,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 70 : 91,
+ .expYield = 70,
.evYield_Attack = 1,
.genderRatio = PERCENT_FEMALE(25),
.eggCycles = 20,
@@ -7846,7 +7844,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 80,
.types = MON_TYPES(TYPE_FIRE, TYPE_ROCK),
.catchRate = 75,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 194 : 213,
+ .expYield = 194,
.evYield_Attack = 2,
.genderRatio = PERCENT_FEMALE(25),
.eggCycles = 20,
@@ -8061,7 +8059,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 255,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 230,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 225,
@@ -8378,11 +8376,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
},
#if P_UPDATED_STATS >= GEN_6
-#define ALAKAZAM_SP_DEF 95
+ #define ALAKAZAM_SP_DEF 95
#elif P_UPDATED_STATS >= GEN_2
-#define ALAKAZAM_SP_DEF 85
+ #define ALAKAZAM_SP_DEF 85
#else
-#define ALAKAZAM_SP_DEF 135
+ #define ALAKAZAM_SP_DEF 135
#endif
[SPECIES_ALAKAZAM] =
@@ -8397,7 +8395,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.catchRate = 50,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 250,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 225,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 221,
@@ -8483,10 +8481,16 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseDefense = 65,
.baseSpeed = 150,
.baseSpAttack = 175,
- .baseSpDefense = 105,
+ .baseSpDefense = P_UPDATED_STATS >= GEN_7 ? 105 : 95,
.types = MON_TYPES(TYPE_PSYCHIC),
.catchRate = 50,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 300 : 270,
+ #if P_UPDATED_EXP_YIELDS >= GEN_8
+ .expYield = 300,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ .expYield = 270,
+ #else
+ .expYield = 266,
+ #endif
.evYield_SpAttack = 3,
.itemRare = ITEM_TWISTED_SPOON,
.genderRatio = PERCENT_FEMALE(25),
@@ -8938,6 +8942,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS),
.abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_GLUTTONY },
.bodyColor = BODY_COLOR_GREEN,
+ .noFlip = TRUE,
.speciesName = _("口呆花"),
.cryId = CRY_WEEPINBELL,
.natDexNum = NATIONAL_DEX_WEEPINBELL,
@@ -9010,7 +9015,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 245,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 221,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 216,
@@ -9025,6 +9030,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS),
.abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_GLUTTONY },
.bodyColor = BODY_COLOR_GREEN,
+ .noFlip = TRUE,
.speciesName = _("大食花"),
.cryId = CRY_VICTREEBEL,
.natDexNum = NATIONAL_DEX_VICTREEBEL,
@@ -9089,15 +9095,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 95,
.types = MON_TYPES(TYPE_GRASS, TYPE_POISON),
.catchRate = 45,
- #if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 245,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
- .expYield = 221,
- #elif P_UPDATED_EXP_YIELDS >= GEN_5
- .expYield = 216,
- #else
- .expYield = 191,
- #endif
.evYield_Attack = 3,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -9106,6 +9104,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS),
.abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_GLUTTONY },
.bodyColor = BODY_COLOR_GREEN,
+ .noFlip = TRUE,
.speciesName = _("大食花"),
.cryId = CRY_VICTREEBEL, // CRY_VICTREEBEL_MEGA,
.natDexNum = NATIONAL_DEX_VICTREEBEL,
@@ -9282,27 +9281,6 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
#endif //P_FAMILY_TENTACOOL
#if P_FAMILY_GEODUDE
-
-#if P_UPDATED_EXP_YIELDS >= GEN_5
- #define GEODUDE_EXP_YIELD 60
-#elif P_UPDATED_EXP_YIELDS >= GEN_4
- #define GEODUDE_EXP_YIELD 73
-#else
- #define GEODUDE_EXP_YIELD 86
-#endif
-
-#define GOLEM_ATTACK (P_UPDATED_STATS >= GEN_6 ? 120 : 110)
-
-#if P_UPDATED_EXP_YIELDS >= GEN_8
- #define GOLEM_EXP_YIELD 248
-#elif P_UPDATED_EXP_YIELDS >= GEN_7
- #define GOLEM_EXP_YIELD 223
-#elif P_UPDATED_EXP_YIELDS >= GEN_5
- #define GOLEM_EXP_YIELD 218
-#else
- #define GOLEM_EXP_YIELD 177
-#endif
-
[SPECIES_GEODUDE] =
{
.baseHP = 40,
@@ -9313,7 +9291,13 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 30,
.types = MON_TYPES(TYPE_ROCK, TYPE_GROUND),
.catchRate = 255,
- .expYield = GEODUDE_EXP_YIELD,
+ #if P_UPDATED_EXP_YIELDS >= GEN_5
+ .expYield = 60,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_4
+ .expYield = 73,
+ #else
+ .expYield = 86,
+ #endif
.evYield_Defense = 1,
.itemRare = ITEM_EVERSTONE,
.genderRatio = PERCENT_FEMALE(50),
@@ -9449,14 +9433,22 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
[SPECIES_GOLEM] =
{
.baseHP = 80,
- .baseAttack = GOLEM_ATTACK,
+ .baseAttack = P_UPDATED_STATS >= GEN_6 ? 120 : 110,
.baseDefense = 130,
.baseSpeed = 45,
.baseSpAttack = 55,
.baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 65 : 55,
.types = MON_TYPES(TYPE_ROCK, TYPE_GROUND),
.catchRate = 45,
- .expYield = GOLEM_EXP_YIELD,
+ #if P_UPDATED_EXP_YIELDS >= GEN_8
+ .expYield = 248,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
+ .expYield = 223,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_5
+ .expYield = 218,
+ #else
+ .expYield = 177,
+ #endif
.evYield_Defense = 3,
.itemRare = ITEM_EVERSTONE,
.genderRatio = PERCENT_FEMALE(50),
@@ -9527,7 +9519,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 30,
.types = MON_TYPES(TYPE_ROCK, TYPE_ELECTRIC),
.catchRate = 255,
- .expYield = GEODUDE_EXP_YIELD,
+ .expYield = 60,
.evYield_Defense = 1,
.itemRare = ITEM_CELL_BATTERY,
.genderRatio = PERCENT_FEMALE(50),
@@ -9595,7 +9587,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 45,
.types = MON_TYPES(TYPE_ROCK, TYPE_ELECTRIC),
.catchRate = 120,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 137 : 134,
+ .expYield = 137,
.evYield_Defense = 2,
.itemRare = ITEM_CELL_BATTERY,
.genderRatio = PERCENT_FEMALE(50),
@@ -9655,14 +9647,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
[SPECIES_GOLEM_ALOLA] =
{
.baseHP = 80,
- .baseAttack = GOLEM_ATTACK,
+ .baseAttack = 120,
.baseDefense = 130,
.baseSpeed = 45,
.baseSpAttack = 55,
.baseSpDefense = 65,
.types = MON_TYPES(TYPE_ROCK, TYPE_ELECTRIC),
.catchRate = 45,
- .expYield = GOLEM_EXP_YIELD,
+ .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 248 : 223,
.evYield_Defense = 3,
.itemCommon = ITEM_CELL_BATTERY,
.genderRatio = PERCENT_FEMALE(50),
@@ -9867,7 +9859,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 65,
.types = MON_TYPES(TYPE_PSYCHIC),
.catchRate = 190,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 82 : 152,
+ .expYield = 82,
.evYield_Speed = 1,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -9933,7 +9925,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 80,
.types = MON_TYPES(TYPE_PSYCHIC, TYPE_FAIRY),
.catchRate = 60,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 175 : 192,
+ .expYield = 175,
.evYield_Speed = 2,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -10076,7 +10068,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.types = MON_TYPES(TYPE_WATER, TYPE_PSYCHIC),
.catchRate = 75,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 172 : 164,
- .evYield_Defense = (P_UPDATED_EVS >= GEN_8) ? 2 : 3,
+ .evYield_Defense = 2,
.itemRare = ITEM_KINGS_ROCK,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -10145,7 +10137,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.types = MON_TYPES(TYPE_WATER, TYPE_PSYCHIC),
.catchRate = 70,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 172 : 164,
- .evYield_SpDefense = 3,
+ .evYield_SpDefense = (P_UPDATED_EVS >= GEN_8) ? 2 : 3,
.itemRare = ITEM_KINGS_ROCK,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -10284,7 +10276,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 40,
.types = MON_TYPES(TYPE_PSYCHIC),
.catchRate = 190,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 63 : 99,
+ .expYield = 63,
.evYield_HP = 1,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -10364,6 +10356,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_WATER_1),
.abilities = { ABILITY_QUICK_DRAW, ABILITY_OWN_TEMPO, ABILITY_REGENERATOR },
.bodyColor = BODY_COLOR_PINK,
+ .noFlip = TRUE,
.speciesName = _("呆壳兽"),
.cryId = CRY_SLOWBRO,
.natDexNum = NATIONAL_DEX_SLOWBRO,
@@ -10420,7 +10413,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 110,
.types = MON_TYPES(TYPE_POISON, TYPE_PSYCHIC),
.catchRate = 70,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 172 : 164,
+ .expYield = 172,
.evYield_SpDefense = 2,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -10478,6 +10471,8 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
#endif //P_FAMILY_SLOWPOKE
#if P_FAMILY_MAGNEMITE
+#define MAGNEMITE_FAMILY_TYPE2 (P_UPDATED_TYPES >= GEN_2 ? TYPE_STEEL : TYPE_ELECTRIC)
+
[SPECIES_MAGNEMITE] =
{
.baseHP = 25,
@@ -10486,7 +10481,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpeed = 45,
.baseSpAttack = 95,
.baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 55 : 95,
- .types = MON_TYPES(TYPE_ELECTRIC, TYPE_STEEL),
+ .types = MON_TYPES(TYPE_ELECTRIC, MAGNEMITE_FAMILY_TYPE2),
.catchRate = 190,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 65 : 89,
.evYield_SpAttack = 1,
@@ -10556,7 +10551,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpeed = 70,
.baseSpAttack = 120,
.baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 70 : 120,
- .types = MON_TYPES(TYPE_ELECTRIC, TYPE_STEEL),
+ .types = MON_TYPES(TYPE_ELECTRIC, MAGNEMITE_FAMILY_TYPE2),
.catchRate = 60,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 163 : 161,
.evYield_SpAttack = 2,
@@ -10703,27 +10698,23 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
#endif //P_FAMILY_MAGNEMITE
#if P_FAMILY_FARFETCHD
-#define FARFETCHD_ATTACK (P_UPDATED_STATS >= GEN_7 ? 90 : 65)
-
-#if P_UPDATED_EXP_YIELDS >= GEN_7
- #define FARFETCHD_EXP_YIELD 132
-#elif P_UPDATED_EXP_YIELDS >= GEN_5
- #define FARFETCHD_EXP_YIELD 123
-#else
- #define FARFETCHD_EXP_YIELD 94
-#endif
-
[SPECIES_FARFETCHD] =
{
.baseHP = 52,
- .baseAttack = FARFETCHD_ATTACK,
+ .baseAttack = P_UPDATED_STATS >= GEN_7 ? 90 : 65,
.baseDefense = 55,
.baseSpeed = 60,
.baseSpAttack = 58,
.baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 62 : 58,
.types = MON_TYPES(TYPE_NORMAL, TYPE_FLYING),
.catchRate = 45,
- .expYield = FARFETCHD_EXP_YIELD,
+ #if P_UPDATED_EXP_YIELDS >= GEN_7
+ .expYield = 132,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_5
+ .expYield = 123,
+ #else
+ .expYield = 94,
+ #endif
.evYield_Attack = 1,
.itemRare = ITEM_LEEK,
.genderRatio = PERCENT_FEMALE(50),
@@ -10733,6 +10724,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING, EGG_GROUP_FIELD),
.abilities = { ABILITY_KEEN_EYE, ABILITY_INNER_FOCUS, ABILITY_DEFIANT },
.bodyColor = BODY_COLOR_BROWN,
+ .noFlip = TRUE,
.speciesName = _("大葱鸭"),
.cryId = CRY_FARFETCHD,
.natDexNum = NATIONAL_DEX_FARFETCHD,
@@ -10794,14 +10786,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
[SPECIES_FARFETCHD_GALAR] =
{
.baseHP = 52,
- .baseAttack = FARFETCHD_ATTACK + 5,
+ .baseAttack = 95,
.baseDefense = 55,
.baseSpeed = 55,
.baseSpAttack = 58,
.baseSpDefense = 62,
.types = MON_TYPES(TYPE_FIGHTING),
.catchRate = 45,
- .expYield = FARFETCHD_EXP_YIELD,
+ .expYield = 132,
.evYield_Attack = 1,
.itemCommon = ITEM_LEEK,
.genderRatio = PERCENT_FEMALE(50),
@@ -10811,6 +10803,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING, EGG_GROUP_FIELD),
.abilities = { ABILITY_STEADFAST, ABILITY_NONE, ABILITY_SCRAPPY },
.bodyColor = BODY_COLOR_BROWN,
+ .noFlip = TRUE,
.speciesName = _("大葱鸭"),
.cryId = CRY_FARFETCHD,
.natDexNum = NATIONAL_DEX_FARFETCHD,
@@ -10878,6 +10871,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING, EGG_GROUP_FIELD),
.abilities = { ABILITY_STEADFAST, ABILITY_NONE, ABILITY_SCRAPPY },
.bodyColor = BODY_COLOR_WHITE,
+ .noFlip = TRUE,
.speciesName = _("葱游兵"),
.cryId = CRY_SIRFETCHD,
.natDexNum = NATIONAL_DEX_SIRFETCHD,
@@ -11033,6 +11027,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING),
.abilities = { ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD, ABILITY_TANGLED_FEET },
.bodyColor = BODY_COLOR_BROWN,
+ .noFlip = TRUE,
.speciesName = _("嘟嘟利"),
.cryId = CRY_DODRIO,
.natDexNum = NATIONAL_DEX_DODRIO,
@@ -11398,7 +11393,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 50,
.types = MON_TYPES(TYPE_POISON, TYPE_DARK),
.catchRate = 190,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 65 : 90,
+ .expYield = 65,
.evYield_HP = 1,
.itemRare = ITEM_BLACK_SLUDGE,
.genderRatio = PERCENT_FEMALE(50),
@@ -11465,7 +11460,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 100,
.types = MON_TYPES(TYPE_POISON, TYPE_DARK),
.catchRate = 75,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 175 : 157,
+ .expYield = 175,
.evYield_HP = 1,
.evYield_Attack = 1,
.itemRare = ITEM_BLACK_SLUDGE,
@@ -11820,10 +11815,20 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{EVO_ITEM, ITEM_LINKING_CORD, SPECIES_GENGAR}),
},
-#if P_UPDATED_ABILITIES >= GEN_7
-#define GENGAR_ABILITIES {ABILITY_CURSED_BODY, ABILITY_NONE, ABILITY_NONE}
+#define GENGAR_SP_DEF (P_UPDATED_STATS >= GEN_2 ? 75 : 130)
+
+#if P_UPDATED_EXP_YIELDS >= GEN_8
+ #define GENGAR_EXP_YIELD 250
+#elif P_UPDATED_EXP_YIELDS >= GEN_5
+ #define GENGAR_EXP_YIELD 225
#else
-#define GENGAR_ABILITIES {ABILITY_LEVITATE, ABILITY_NONE, ABILITY_NONE}
+ #define GENGAR_EXP_YIELD 190
+#endif
+
+#if P_UPDATED_ABILITIES >= GEN_7
+ #define GENGAR_ABILITIES {ABILITY_CURSED_BODY, ABILITY_NONE, ABILITY_NONE}
+#else
+ #define GENGAR_ABILITIES {ABILITY_LEVITATE, ABILITY_NONE, ABILITY_NONE}
#endif
[SPECIES_GENGAR] =
@@ -11833,16 +11838,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseDefense = 60,
.baseSpeed = 110,
.baseSpAttack = 130,
- .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 75 : 130,
+ .baseSpDefense = GENGAR_SP_DEF,
.types = MON_TYPES(TYPE_GHOST, TYPE_POISON),
.catchRate = 45,
- #if P_UPDATED_EXP_YIELDS >= GEN_8
- .expYield = 250,
- #elif P_UPDATED_EXP_YIELDS >= GEN_5
- .expYield = 225,
- #else
- .expYield = 190,
- #endif
+ .expYield = GENGAR_EXP_YIELD,
.evYield_SpAttack = 3,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -11977,10 +11976,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseDefense = 60,
.baseSpeed = 110,
.baseSpAttack = 130,
- .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 75 : 130,
+ .baseSpDefense = GENGAR_SP_DEF,
.types = MON_TYPES(TYPE_GHOST, TYPE_POISON),
.catchRate = 45,
- .expYield = 225,
+ .expYield = GENGAR_EXP_YIELD,
.evYield_SpAttack = 3,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -12623,14 +12622,6 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
#endif //P_FAMILY_KRABBY
#if P_FAMILY_VOLTORB
-#if P_UPDATED_EXP_YIELDS >= GEN_7
- #define ELECTRODE_EXP_YIELD 172
-#elif P_UPDATED_EXP_YIELDS >= GEN_5
- #define ELECTRODE_EXP_YIELD 168
-#else
- #define ELECTRODE_EXP_YIELD 150
-#endif
-
[SPECIES_VOLTORB] =
{
.baseHP = 40,
@@ -12712,7 +12703,13 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 80,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 60,
- .expYield = ELECTRODE_EXP_YIELD,
+ #if P_UPDATED_EXP_YIELDS >= GEN_7
+ .expYield = 172,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_5
+ .expYield = 168,
+ #else
+ .expYield = 150,
+ #endif
.evYield_Speed = 2,
.genderRatio = MON_GENDERLESS,
.eggCycles = 20,
@@ -12781,7 +12778,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 55,
.types = MON_TYPES(TYPE_ELECTRIC, TYPE_GRASS),
.catchRate = 190,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 66 : 103,
+ .expYield = 66,
.evYield_Speed = 1,
.genderRatio = MON_GENDERLESS,
.eggCycles = 20,
@@ -12841,12 +12838,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseHP = 60,
.baseAttack = 50,
.baseDefense = 70,
- .baseSpeed = P_UPDATED_STATS >= GEN_7 ? 150 : 140,
+ .baseSpeed = 150,
.baseSpAttack = 80,
.baseSpDefense = 80,
.types = MON_TYPES(TYPE_ELECTRIC, TYPE_GRASS),
.catchRate = 60,
- .expYield = ELECTRODE_EXP_YIELD,
+ .expYield = 172,
.evYield_Speed = 2,
.genderRatio = MON_GENDERLESS,
.eggCycles = 20,
@@ -12923,6 +12920,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS),
.abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HARVEST },
.bodyColor = BODY_COLOR_PINK,
+ .noFlip = TRUE,
.speciesName = _("蛋蛋"),
.cryId = CRY_EXEGGCUTE,
.natDexNum = NATIONAL_DEX_EXEGGCUTE,
@@ -12979,22 +12977,6 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_EXEGGUTOR_ALOLA, CONDITIONS({IF_REGION, REGION_ALOLA})}),
},
-#if P_UPDATED_EXP_YIELDS >= GEN_7
- #define EXEGGUTOR_EXP_YIELD 186
-#elif P_UPDATED_EXP_YIELDS >= GEN_5
- #define EXEGGUTOR_EXP_YIELD 182
-#else
- #define EXEGGUTOR_EXP_YIELD 212
-#endif
-
-#if P_UPDATED_STATS >= GEN_7
- #define EXEGGUTOR_SP_DEF 75
-#elif P_UPDATED_STATS >= GEN_2
- #define EXEGGUTOR_SP_DEF 65
-#else
- #define EXEGGUTOR_SP_DEF 125
-#endif
-
[SPECIES_EXEGGUTOR] =
{
.baseHP = 95,
@@ -13002,10 +12984,22 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseDefense = 85,
.baseSpeed = 55,
.baseSpAttack = 125,
- .baseSpDefense = EXEGGUTOR_SP_DEF,
+ #if P_UPDATED_STATS >= GEN_7
+ .baseSpDefense = 75,
+ #elif P_UPDATED_STATS >= GEN_2
+ .baseSpDefense = 65,
+ #else
+ .baseSpDefense = 125,
+ #endif
.types = MON_TYPES(TYPE_GRASS, TYPE_PSYCHIC),
.catchRate = 45,
- .expYield = EXEGGUTOR_EXP_YIELD,
+ #if P_UPDATED_EXP_YIELDS >= GEN_7
+ .expYield = 186,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_5
+ .expYield = 182,
+ #else
+ .expYield = 212,
+ #endif
.evYield_SpAttack = 2,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -13014,6 +13008,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS),
.abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_HARVEST },
.bodyColor = BODY_COLOR_YELLOW,
+ .noFlip = TRUE,
.speciesName = _("椰蛋树"),
.cryId = CRY_EXEGGUTOR,
.natDexNum = NATIONAL_DEX_EXEGGUTOR,
@@ -13069,10 +13064,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseDefense = 85,
.baseSpeed = 45,
.baseSpAttack = 125,
- .baseSpDefense = EXEGGUTOR_SP_DEF,
+ .baseSpDefense = 75,
.types = MON_TYPES(TYPE_GRASS, TYPE_DRAGON),
.catchRate = 45,
- .expYield = EXEGGUTOR_EXP_YIELD,
+ .expYield = 186,
.evYield_SpAttack = 2,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -13081,6 +13076,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS),
.abilities = { ABILITY_FRISK, ABILITY_NONE, ABILITY_HARVEST },
.bodyColor = BODY_COLOR_YELLOW,
+ .noFlip = TRUE,
.speciesName = _("椰蛋树"),
.cryId = CRY_EXEGGUTOR,
.natDexNum = NATIONAL_DEX_EXEGGUTOR,
@@ -13149,6 +13145,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER),
.abilities = { ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD, ABILITY_BATTLE_ARMOR },
.bodyColor = BODY_COLOR_BROWN,
+ .noFlip = TRUE,
.speciesName = _("卡拉卡拉"),
.cryId = CRY_CUBONE,
.natDexNum = NATIONAL_DEX_CUBONE,
@@ -13224,6 +13221,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER),
.abilities = { ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD, ABILITY_BATTLE_ARMOR },
.bodyColor = BODY_COLOR_BROWN,
+ .noFlip = TRUE,
.speciesName = _("嘎啦嘎啦"),
.cryId = CRY_MAROWAK,
.natDexNum = NATIONAL_DEX_MAROWAK,
@@ -13286,7 +13284,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 80,
.types = MON_TYPES(TYPE_FIRE, TYPE_GHOST),
.catchRate = 75,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 149 : 124,
+ .expYield = 149,
.evYield_Defense = 2,
.itemRare = ITEM_THICK_CLUB,
.genderRatio = PERCENT_FEMALE(50),
@@ -13296,6 +13294,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER),
.abilities = { ABILITY_CURSED_BODY, ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD },
.bodyColor = BODY_COLOR_PURPLE,
+ .noFlip = TRUE,
.speciesName = _("嘎啦嘎啦"),
.cryId = CRY_MAROWAK,
.natDexNum = NATIONAL_DEX_MAROWAK,
@@ -14014,7 +14013,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 70,
.types = MON_TYPES(TYPE_POISON, TYPE_FAIRY),
.catchRate = 60,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 172 : 173,
+ .expYield = 172,
.evYield_Defense = 2,
.itemRare = ITEM_MISTY_SEED,
.genderRatio = PERCENT_FEMALE(50),
@@ -14340,7 +14339,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.catchRate = 130,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 110 : 255,
.evYield_HP = 1,
- .itemCommon = ITEM_OVAL_STONE,
+ .itemRare = ITEM_OVAL_STONE,
.genderRatio = MON_FEMALE,
.eggCycles = 40,
.friendship = 140,
@@ -14411,7 +14410,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.catchRate = 30,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 395 : 255,
.evYield_HP = 2,
- .itemCommon = ITEM_LUCKY_PUNCH,
+ .itemCommon = ITEM_OVAL_STONE,
.genderRatio = MON_FEMALE,
.eggCycles = 40,
.friendship = 140,
@@ -14481,9 +14480,15 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 135,
.types = MON_TYPES(TYPE_NORMAL),
.catchRate = 30,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 608 : 255,
+ #if P_UPDATED_EXP_YIELDS >= GEN_8
+ .expYield = 635,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_5
+ .expYield = 608,
+ #else
+ .expYield = 255,
+ #endif
.evYield_HP = (P_UPDATED_EVS >= GEN_4) ? 3 : 2,
- .itemRare = ITEM_LUCKY_EGG,
+ .itemCommon = ITEM_OVAL_STONE,
.genderRatio = MON_FEMALE,
.eggCycles = 40,
.friendship = 140,
@@ -15404,7 +15409,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 105,
.types = MON_TYPES(TYPE_WATER, TYPE_PSYCHIC),
.catchRate = 60,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 182 : 207,
+ .expYield = 182,
.evYield_Speed = 2,
.itemCommon = ITEM_STARDUST,
.itemRare = ITEM_STAR_PIECE,
@@ -15618,7 +15623,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 90,
.types = MON_TYPES(TYPE_ICE, TYPE_PSYCHIC),
.catchRate = 45,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 161 : 136,
+ .expYield = 161,
.evYield_Speed = 2,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 25,
@@ -15693,6 +15698,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_HUMAN_LIKE),
.abilities = { ABILITY_TANGLED_FEET, ABILITY_SCREEN_CLEANER, ABILITY_ICE_BODY },
.bodyColor = BODY_COLOR_PURPLE,
+ .noFlip = TRUE,
.speciesName = _("踏冰人偶"),
.cryId = CRY_MR_RIME,
.natDexNum = NATIONAL_DEX_MR_RIME,
@@ -16879,7 +16885,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 70,
.types = MON_TYPES(TYPE_FIGHTING),
.catchRate = 45,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 172 : 211,
+ .expYield = 172,
.evYield_Attack = 2,
.genderRatio = MON_MALE,
.eggCycles = 20,
@@ -16944,7 +16950,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 70,
.types = MON_TYPES(TYPE_FIGHTING, TYPE_FIRE),
.catchRate = 45,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 172 : 211,
+ .expYield = 172,
.evYield_Attack = 2,
.genderRatio = MON_MALE,
.eggCycles = 20,
@@ -17009,7 +17015,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 70,
.types = MON_TYPES(TYPE_FIGHTING, TYPE_WATER),
.catchRate = 45,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 172 : 211,
+ .expYield = 172,
.evYield_Attack = 2,
.genderRatio = MON_MALE,
.eggCycles = 20,
@@ -17510,13 +17516,21 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
#endif //P_FAMILY_DITTO
#if P_FAMILY_EEVEE
+#define EEVEE_SP_ATK (P_UPDATED_STATS >= GEN_2 ? 45 : 65)
+
+#if P_UPDATED_ABILITIES >= GEN_4
+ #define EEVEE_ABILITIES { ABILITY_RUN_AWAY, ABILITY_ADAPTABILITY, ABILITY_ANTICIPATION }
+#else
+ #define EEVEE_ABILITIES { ABILITY_RUN_AWAY, ABILITY_NONE, ABILITY_ANTICIPATION }
+#endif
+
[SPECIES_EEVEE] =
{
.baseHP = 55,
.baseAttack = 55,
.baseDefense = 50,
.baseSpeed = 55,
- .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 45 : 65,
+ .baseSpAttack = EEVEE_SP_ATK,
.baseSpDefense = 65,
.types = MON_TYPES(TYPE_NORMAL),
.catchRate = 45,
@@ -17527,11 +17541,7 @@ 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
+ .abilities = EEVEE_ABILITIES,
.bodyColor = BODY_COLOR_BROWN,
.speciesName = _("伊布"),
.cryId = CRY_EEVEE,
@@ -17616,7 +17626,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseAttack = 55,
.baseDefense = 50,
.baseSpeed = 55,
- .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 45 : 65,
+ .baseSpAttack = EEVEE_SP_ATK,
.baseSpDefense = 65,
.types = MON_TYPES(TYPE_NORMAL),
.catchRate = 45,
@@ -17627,7 +17637,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_MEDIUM_FAST,
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD),
- .abilities = { ABILITY_RUN_AWAY, ABILITY_ADAPTABILITY, ABILITY_ANTICIPATION },
+ .abilities = EEVEE_ABILITIES,
.bodyColor = BODY_COLOR_BROWN,
.speciesName = _("伊布"),
.cryId = CRY_EEVEE,
@@ -17678,7 +17688,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 85,
.types = MON_TYPES(TYPE_NORMAL),
.catchRate = 45,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 65 : 92,
+ .expYield = 87,
.evYield_SpDefense = 1,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 35,
@@ -19851,13 +19861,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.baseSpDefense = 125,
.types = MON_TYPES(TYPE_DRAGON, TYPE_FLYING),
.catchRate = 45,
- #if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 300,
- #elif P_UPDATED_EXP_YIELDS >= GEN_5
- .expYield = 270,
- #else
- .expYield = 218,
- #endif
.evYield_Attack = 3,
.itemRare = ITEM_DRAGON_SCALE,
.genderRatio = PERCENT_FEMALE(50),
diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h
index 8ee14a78ab..31854dc6ec 100644
--- a/src/data/pokemon/species_info/gen_2_families.h
+++ b/src/data/pokemon/species_info/gen_2_families.h
@@ -236,13 +236,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.baseSpDefense = 115,
.types = MON_TYPES(TYPE_GRASS, TYPE_FAIRY),
.catchRate = 45,
- #if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 263,
- #elif P_UPDATED_EXP_YIELDS >= GEN_5
- .expYield = 236,
- #else
- .expYield = 208,
- #endif
.evYield_Defense = 1,
.evYield_SpDefense = 2,
.genderRatio = PERCENT_FEMALE(12.5),
@@ -423,14 +417,6 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
{EVO_LEVEL, 36, SPECIES_TYPHLOSION_HISUI, CONDITIONS({IF_REGION, REGION_HISUI})}),
},
-#if P_UPDATED_EXP_YIELDS >= GEN_8
- #define TYPHLOSION_EXP_YIELD 267
-#elif P_UPDATED_EXP_YIELDS >= GEN_5
- #define TYPHLOSION_EXP_YIELD 240
-#else
- #define TYPHLOSION_EXP_YIELD 209
-#endif
-
[SPECIES_TYPHLOSION] =
{
.baseHP = 78,
@@ -441,7 +427,13 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.baseSpDefense = 85,
.types = MON_TYPES(TYPE_FIRE),
.catchRate = 45,
- .expYield = TYPHLOSION_EXP_YIELD,
+ #if P_UPDATED_EXP_YIELDS >= GEN_8
+ .expYield = 267,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_5
+ .expYield = 240,
+ #else
+ .expYield = 209,
+ #endif
.evYield_SpAttack = 3,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 20,
@@ -508,7 +500,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.baseSpDefense = 85,
.types = MON_TYPES(TYPE_FIRE, TYPE_GHOST),
.catchRate = 45,
- .expYield = TYPHLOSION_EXP_YIELD,
+ .expYield = 267,
.evYield_SpAttack = 3,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 20,
@@ -791,13 +783,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.baseSpDefense = 93,
.types = MON_TYPES(TYPE_WATER, TYPE_DRAGON),
.catchRate = 45,
- #if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 265,
- #elif P_UPDATED_EXP_YIELDS >= GEN_5
- .expYield = 239,
- #else
- .expYield = 210,
- #endif
.evYield_Attack = 2,
.evYield_Defense = 1,
.genderRatio = PERCENT_FEMALE(12.5),
@@ -1581,7 +1567,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
#endif //P_FAMILY_CHINCHOU
#if P_FAMILY_TOGEPI
-#define TOGEPI_FAMILY_TYPE (P_UPDATED_TYPES >= GEN_6 ? TYPE_FAIRY : TYPE_NORMAL)
+#define TOGEPI_FAMILY_TYPE1 (P_UPDATED_TYPES >= GEN_6 ? TYPE_FAIRY : TYPE_NORMAL)
[SPECIES_TOGEPI] =
{
@@ -1591,7 +1577,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.baseSpeed = 20,
.baseSpAttack = 40,
.baseSpDefense = 65,
- .types = MON_TYPES(TOGEPI_FAMILY_TYPE),
+ .types = MON_TYPES(TOGEPI_FAMILY_TYPE1),
.catchRate = 190,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 49 : 74,
.evYield_SpDefense = 1,
@@ -1602,6 +1588,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED),
.abilities = { ABILITY_HUSTLE, ABILITY_SERENE_GRACE, ABILITY_SUPER_LUCK },
.bodyColor = BODY_COLOR_WHITE,
+ .noFlip = TRUE,
.speciesName = _("波克比"),
.cryId = CRY_TOGEPI,
.natDexNum = NATIONAL_DEX_TOGEPI,
@@ -1659,7 +1646,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.baseSpeed = 40,
.baseSpAttack = 80,
.baseSpDefense = 105,
- .types = MON_TYPES(TOGEPI_FAMILY_TYPE, TYPE_FLYING),
+ .types = MON_TYPES(TOGEPI_FAMILY_TYPE1, TYPE_FLYING),
.catchRate = 75,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 142 : 114,
.evYield_SpDefense = 2,
@@ -1670,6 +1657,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING, EGG_GROUP_FAIRY),
.abilities = { ABILITY_HUSTLE, ABILITY_SERENE_GRACE, ABILITY_SUPER_LUCK },
.bodyColor = BODY_COLOR_WHITE,
+ .noFlip = TRUE,
.speciesName = _("波克基古"),
.cryId = CRY_TOGETIC,
.natDexNum = NATIONAL_DEX_TOGETIC,
@@ -1729,7 +1717,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.baseSpeed = 80,
.baseSpAttack = 120,
.baseSpDefense = 115,
- .types = MON_TYPES(TOGEPI_FAMILY_TYPE, TYPE_FLYING),
+ .types = MON_TYPES(TOGEPI_FAMILY_TYPE1, TYPE_FLYING),
.catchRate = 30,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 273,
@@ -1976,6 +1964,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_FIELD),
.abilities = { ABILITY_STATIC, ABILITY_NONE, ABILITY_PLUS },
.bodyColor = BODY_COLOR_WHITE,
+ .noFlip = TRUE,
.speciesName = _("咩利羊"),
.cryId = CRY_MAREEP,
.natDexNum = NATIONAL_DEX_MAREEP,
@@ -2098,13 +2087,11 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_AMPHAROS}),
},
-#define AMPHAROS_DEFENSE (P_UPDATED_STATS >= GEN_6 ? 85 : 75)
-
[SPECIES_AMPHAROS] =
{
.baseHP = 90,
.baseAttack = 75,
- .baseDefense = AMPHAROS_DEFENSE,
+ .baseDefense = P_UPDATED_STATS >= GEN_6 ? 85 : 75,
.baseSpeed = 55,
.baseSpAttack = 115,
.baseSpDefense = 90,
@@ -2112,7 +2099,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 255,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 230,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 225,
@@ -2182,7 +2169,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
{
.baseHP = 90,
.baseAttack = 95,
- .baseDefense = AMPHAROS_DEFENSE + 20,
+ .baseDefense = 105,
.baseSpeed = 45,
.baseSpAttack = 165,
.baseSpDefense = 110,
@@ -2427,6 +2414,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FAIRY),
.abilities = { ABILITY_THICK_FAT, ABILITY_HUGE_POWER, ABILITY_SAP_SIPPER },
.bodyColor = BODY_COLOR_BLUE,
+ .noFlip = TRUE,
.speciesName = _("玛力露丽"),
.cryId = CRY_AZUMARILL,
.natDexNum = NATIONAL_DEX_AZUMARILL,
@@ -3535,7 +3523,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.baseSpDefense = 25,
.types = MON_TYPES(TYPE_POISON, TYPE_GROUND),
.catchRate = 255,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 42 : 52,
+ .expYield = 42,
.evYield_HP = 1,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -5026,15 +5014,6 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
#endif //P_FAMILY_SNUBBULL
#if P_FAMILY_QWILFISH
-
-#if P_UPDATED_EXP_YIELDS >= GEN_7
- #define QWILFISH_EXP_YIELD 88
-#elif P_UPDATED_EXP_YIELDS >= GEN_5
- #define QWILFISH_EXP_YIELD 86
-#else
- #define QWILFISH_EXP_YIELD 100
-#endif
-
[SPECIES_QWILFISH] =
{
.baseHP = 65,
@@ -5045,7 +5024,13 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.baseSpDefense = 55,
.types = MON_TYPES(TYPE_WATER, TYPE_POISON),
.catchRate = 45,
- .expYield = QWILFISH_EXP_YIELD,
+ #if P_UPDATED_EXP_YIELDS >= GEN_7
+ .expYield = 88,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_5
+ .expYield = 86,
+ #else
+ .expYield = 100,
+ #endif
.evYield_Attack = 1,
.itemRare = ITEM_POISON_BARB,
.genderRatio = PERCENT_FEMALE(50),
@@ -5114,13 +5099,13 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
{
.baseHP = 65,
.baseAttack = 95,
- .baseDefense = P_UPDATED_STATS >= GEN_7 ? 85 : 75,
+ .baseDefense = 85,
.baseSpeed = 85,
.baseSpAttack = 55,
.baseSpDefense = 55,
.types = MON_TYPES(TYPE_DARK, TYPE_POISON),
.catchRate = 45,
- .expYield = QWILFISH_EXP_YIELD,
+ .expYield = 88,
.evYield_Attack = 1,
.itemRare = ITEM_POISON_BARB,
.genderRatio = PERCENT_FEMALE(50),
@@ -5130,6 +5115,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_2),
.abilities = { ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM, ABILITY_INTIMIDATE },
.bodyColor = BODY_COLOR_BLACK,
+ .noFlip = TRUE,
.speciesName = _("千针鱼"),
.cryId = CRY_QWILFISH,
.natDexNum = NATIONAL_DEX_QWILFISH,
@@ -5195,6 +5181,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_2),
.abilities = { ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM, ABILITY_INTIMIDATE },
.bodyColor = BODY_COLOR_BLACK,
+ .noFlip = TRUE,
.speciesName = _("万针鱼"),
.cryId = CRY_OVERQWIL,
.natDexNum = NATIONAL_DEX_OVERQWIL,
@@ -5655,7 +5642,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.baseSpDefense = 75,
.types = MON_TYPES(TYPE_FIGHTING, TYPE_POISON),
.catchRate = 60,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 86 : 132,
+ .expYield = 86,
.evYield_Speed = 1,
.itemRare = ITEM_QUICK_CLAW,
.genderRatio = PERCENT_FEMALE(50),
@@ -5745,6 +5732,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD),
.abilities = { ABILITY_PRESSURE, ABILITY_UNBURDEN, ABILITY_POISON_TOUCH },
.bodyColor = BODY_COLOR_BLUE,
+ .noFlip = TRUE,
.speciesName = _("大狃拉"),
.cryId = CRY_SNEASLER,
.natDexNum = NATIONAL_DEX_SNEASLER,
@@ -5803,7 +5791,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.catchRate = 120,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 66 : 124,
.evYield_Attack = 1,
- .itemCommon = ITEM_HONEY,
+ .itemRare = ITEM_HONEY,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = STANDARD_FRIENDSHIP,
@@ -5969,6 +5957,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD),
.abilities = { ABILITY_GUTS, ABILITY_BULLETPROOF, ABILITY_UNNERVE },
.bodyColor = BODY_COLOR_BROWN,
+ .noFlip = TRUE,
.speciesName = _("月月熊"),
.cryId = CRY_URSALUNA,
.natDexNum = NATIONAL_DEX_URSALUNA,
@@ -6023,7 +6012,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.baseSpDefense = 65,
.types = MON_TYPES(TYPE_GROUND, TYPE_NORMAL),
.catchRate = 5,
- .expYield = 275,
+ .expYield = 278,
.evYield_SpAttack = 3,
.genderRatio = MON_MALE,
.eggCycles = 20,
@@ -6032,6 +6021,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD),
.abilities = { ABILITY_MINDS_EYE, ABILITY_NONE, ABILITY_NONE },
.bodyColor = BODY_COLOR_BROWN,
+ .noFlip = TRUE,
.speciesName = _("月月熊"),
.cryId = CRY_URSALUNA,
.natDexNum = NATIONAL_DEX_URSALUNA,
@@ -6464,27 +6454,23 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
#endif //P_FAMILY_SWINUB
#if P_FAMILY_CORSOLA
-#if P_UPDATED_EXP_YIELDS >= GEN_7
- #define CORSOLA_EXP_YIELD 144
-#elif P_UPDATED_EXP_YIELDS >= GEN_5
- #define CORSOLA_EXP_YIELD 133
-#else
- #define CORSOLA_EXP_YIELD 113
-#endif
-#define CORSOLA_HP (P_UPDATED_STATS >= GEN_7 ? 65 : 55)
-#define CORSOLA_DEFENSES (P_UPDATED_STATS >= GEN_7 ? 95 : 85)
-
[SPECIES_CORSOLA] =
{
- .baseHP = CORSOLA_HP,
+ .baseHP = P_UPDATED_STATS >= GEN_7 ? 65 : 55,
.baseAttack = 55,
- .baseDefense = CORSOLA_DEFENSES,
+ .baseDefense = P_UPDATED_STATS >= GEN_7 ? 95 : 85,
.baseSpeed = 35,
.baseSpAttack = 65,
- .baseSpDefense = CORSOLA_DEFENSES,
+ .baseSpDefense = P_UPDATED_STATS >= GEN_7 ? 95 : 85,
.types = MON_TYPES(TYPE_WATER, TYPE_ROCK),
.catchRate = 60,
- .expYield = CORSOLA_EXP_YIELD,
+ #if P_UPDATED_EXP_YIELDS >= GEN_7
+ .expYield = 144,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_5
+ .expYield = 133,
+ #else
+ .expYield = 113,
+ #endif
.evYield_Defense = 1,
.evYield_SpDefense = 1,
.itemRare = ITEM_LUMINOUS_MOSS,
@@ -6549,15 +6535,15 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
#if P_GALARIAN_FORMS
[SPECIES_CORSOLA_GALAR] =
{
- .baseHP = CORSOLA_HP - 5,
+ .baseHP = 60,
.baseAttack = 55,
- .baseDefense = CORSOLA_DEFENSES + 5,
+ .baseDefense = 100,
.baseSpeed = 30,
.baseSpAttack = 65,
- .baseSpDefense = CORSOLA_DEFENSES + 5,
+ .baseSpDefense = 100,
.types = MON_TYPES(TYPE_GHOST),
.catchRate = 60,
- .expYield = CORSOLA_EXP_YIELD,
+ .expYield = 144,
.evYield_SpDefense = 1,
.genderRatio = PERCENT_FEMALE(75),
.eggCycles = 20,
@@ -6632,6 +6618,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_WATER_3),
.abilities = { ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_PERISH_BODY },
.bodyColor = BODY_COLOR_WHITE,
+ .noFlip = TRUE,
.speciesName = _("魔灵珊瑚"),
.cryId = CRY_CURSOLA,
.natDexNum = NATIONAL_DEX_CURSOLA,
@@ -6857,6 +6844,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FIELD),
.abilities = { ABILITY_VITAL_SPIRIT, ABILITY_HUSTLE, ABILITY_INSOMNIA },
.bodyColor = BODY_COLOR_RED,
+ .noFlip = TRUE,
.speciesName = _("信使鸟"),
.cryId = CRY_DELIBIRD,
.natDexNum = NATIONAL_DEX_DELIBIRD,
@@ -7001,6 +6989,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1),
.abilities = { ABILITY_SWIFT_SWIM, ABILITY_WATER_ABSORB, ABILITY_WATER_VEIL },
.bodyColor = BODY_COLOR_PURPLE,
+ .noFlip = P_GBA_STYLE_SPECIES_GFX,
.speciesName = _("巨翅飞鱼"),
.cryId = CRY_MANTINE,
.natDexNum = NATIONAL_DEX_MANTINE,
@@ -7063,7 +7052,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.baseSpDefense = 70,
.types = MON_TYPES(TYPE_STEEL, TYPE_FLYING),
.catchRate = 25,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 163 : 168,
+ .expYield = 163,
.evYield_Defense = 2,
.itemRare = ITEM_METAL_COAT,
.genderRatio = PERCENT_FEMALE(50),
@@ -7133,7 +7122,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.baseSpDefense = 100,
.types = MON_TYPES(TYPE_STEEL, TYPE_FLYING),
.catchRate = 25,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 163 : 168,
+ .expYield = 163,
.evYield_Defense = 2,
.itemRare = ITEM_METAL_COAT,
.genderRatio = PERCENT_FEMALE(50),
@@ -7712,6 +7701,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.abilities = { ABILITY_OWN_TEMPO, ABILITY_NONE, ABILITY_MOODY },
#endif
.bodyColor = BODY_COLOR_WHITE,
+ .noFlip = TRUE,
.speciesName = _("图图犬"),
.cryId = CRY_SMEARGLE,
.natDexNum = NATIONAL_DEX_SMEARGLE,
diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h
index 60a097d1e8..c3eb55bb48 100644
--- a/src/data/pokemon/species_info/gen_3_families.h
+++ b/src/data/pokemon/species_info/gen_3_families.h
@@ -906,7 +906,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.baseSpDefense = 30,
.types = MON_TYPES(TYPE_DARK),
.catchRate = 255,
- #if P_UPDATED_EXP_YIELDS >= GEN_7
+ #if P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 56,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 44,
@@ -1047,14 +1047,6 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
#endif //P_FAMILY_POOCHYENA
#if P_FAMILY_ZIGZAGOON
-#if P_UPDATED_EXP_YIELDS >= GEN_7
- #define ZIGZAGOON_EXP_YIELD 56
-#elif P_UPDATED_EXP_YIELDS >= GEN_5
- #define ZIGZAGOON_EXP_YIELD 48
-#else
- #define ZIGZAGOON_EXP_YIELD 60
-#endif
-
[SPECIES_ZIGZAGOON] =
{
.baseHP = 38,
@@ -1065,7 +1057,13 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.baseSpDefense = 41,
.types = MON_TYPES(TYPE_NORMAL),
.catchRate = 255,
- .expYield = ZIGZAGOON_EXP_YIELD,
+ #if P_UPDATED_EXP_YIELDS >= GEN_6
+ .expYield = 56,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_5
+ .expYield = 48,
+ #else
+ .expYield = 60,
+ #endif
.evYield_Speed = 1,
.itemCommon = ITEM_POTION,
.itemRare = ITEM_REVIVE,
@@ -1217,7 +1215,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.baseSpDefense = 41,
.types = MON_TYPES(TYPE_DARK, TYPE_NORMAL),
.catchRate = 255,
- .expYield = ZIGZAGOON_EXP_YIELD,
+ .expYield = 56,
.evYield_Speed = 1,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
@@ -1283,7 +1281,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.baseSpDefense = 61,
.types = MON_TYPES(TYPE_DARK, TYPE_NORMAL),
.catchRate = 90,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 147 : 128,
+ .expYield = 147,
.evYield_Speed = 2,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
@@ -1413,7 +1411,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.baseSpDefense = 30,
.types = MON_TYPES(TYPE_BUG),
.catchRate = 255,
- #if P_UPDATED_EXP_YIELDS >= GEN_7
+ #if P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 56,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 39,
@@ -1499,6 +1497,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG),
.abilities = { ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_NONE },
.bodyColor = BODY_COLOR_WHITE,
+ .noFlip = TRUE,
.speciesName = _("甲壳茧"),
.cryId = CRY_SILCOON,
.natDexNum = NATIONAL_DEX_SILCOON,
@@ -1560,7 +1559,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 198,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 178,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 173,
@@ -1668,6 +1667,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG),
.abilities = { ABILITY_SHED_SKIN, ABILITY_NONE, ABILITY_NONE },
.bodyColor = BODY_COLOR_PURPLE,
+ .noFlip = TRUE,
.speciesName = _("盾甲茧"),
.cryId = CRY_CASCOON,
.natDexNum = NATIONAL_DEX_CASCOON,
@@ -1913,6 +1913,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_GRASS),
.abilities = { ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH, ABILITY_OWN_TEMPO },
.bodyColor = BODY_COLOR_GREEN,
+ .noFlip = TRUE,
.speciesName = _("莲帽小童"),
.cryId = CRY_LOMBRE,
.natDexNum = NATIONAL_DEX_LOMBRE,
@@ -2844,7 +2845,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.baseSpeed = 100,
.baseSpAttack = 165,
.baseSpDefense = 135,
- .types = MON_TYPES(TYPE_PSYCHIC, RALTS_FAMILY_TYPE2),
+ .types = MON_TYPES(TYPE_PSYCHIC, TYPE_FAIRY),
.catchRate = 45,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 309 : 278,
.evYield_SpAttack = 3,
@@ -3065,7 +3066,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.catchRate = 200,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 54 : 63,
.evYield_Speed = 1,
- .itemCommon = ITEM_HONEY,
+ .itemRare = ITEM_HONEY,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = STANDARD_FRIENDSHIP,
@@ -3231,6 +3232,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.abilities = { ABILITY_EFFECT_SPORE, ABILITY_NONE, ABILITY_QUICK_FEET },
#endif
.bodyColor = BODY_COLOR_BROWN,
+ .noFlip = TRUE,
.speciesName = _("蘑蘑菇"),
.cryId = CRY_SHROOMISH,
.natDexNum = NATIONAL_DEX_SHROOMISH,
@@ -3966,7 +3968,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 245,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 221,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 216,
@@ -4624,11 +4626,6 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
#endif //P_FAMILY_SABLEYE
#if P_FAMILY_MAWILE
-#if P_UPDATED_TYPES >= GEN_6
- #define MAWILE_TYPES { TYPE_STEEL, TYPE_FAIRY }
-#else
- #define MAWILE_TYPES { TYPE_STEEL, TYPE_STEEL }
-#endif
[SPECIES_MAWILE] =
{
@@ -4638,7 +4635,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.baseSpeed = 50,
.baseSpAttack = 55,
.baseSpDefense = 55,
- .types = MAWILE_TYPES,
+ #if P_UPDATED_TYPES >= GEN_6
+ .types = MON_TYPES(TYPE_STEEL, TYPE_FAIRY),
+ #else
+ .types = MON_TYPES(TYPE_STEEL),
+ #endif
.catchRate = 45,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 133 : 98,
.evYield_Attack = 1,
@@ -4713,7 +4714,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.baseSpeed = 50,
.baseSpAttack = 55,
.baseSpDefense = 95,
- .types = MAWILE_TYPES,
+ .types = MON_TYPES(TYPE_STEEL, TYPE_FAIRY),
.catchRate = 45,
.expYield = 168,
.evYield_Attack = 1,
@@ -5990,7 +5991,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.catchRate = 75,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 258,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 232,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 227,
@@ -7150,6 +7151,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
#endif //P_FAMILY_SPINDA
#if P_FAMILY_TRAPINCH
+#if P_UPDATED_EGG_GROUPS >= GEN_8
+ #define TRAPINCH_FAMILY_EGG_GROUPS MON_EGG_GROUPS(EGG_GROUP_BUG, EGG_GROUP_DRAGON)
+#else
+ #define TRAPINCH_FAMILY_EGG_GROUPS MON_EGG_GROUPS(EGG_GROUP_BUG)
+#endif
+
[SPECIES_TRAPINCH] =
{
.baseHP = 45,
@@ -7167,11 +7174,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.eggCycles = 20,
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_MEDIUM_SLOW,
- #if P_UPDATED_EGG_GROUPS >= GEN_8
- .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG, EGG_GROUP_DRAGON),
- #else
- .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG),
- #endif
+ .eggGroups = TRAPINCH_FAMILY_EGG_GROUPS,
.abilities = { ABILITY_HYPER_CUTTER, ABILITY_ARENA_TRAP, ABILITY_SHEER_FORCE },
.bodyColor = BODY_COLOR_BROWN,
.speciesName = _("大颚蚁"),
@@ -7242,11 +7245,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.eggCycles = 20,
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_MEDIUM_SLOW,
- #if P_UPDATED_EGG_GROUPS >= GEN_8
- .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG, EGG_GROUP_DRAGON),
- #else
- .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG),
- #endif
+ .eggGroups = TRAPINCH_FAMILY_EGG_GROUPS,
.abilities = { ABILITY_LEVITATE, ABILITY_LEVITATE, ABILITY_LEVITATE },
.bodyColor = BODY_COLOR_GREEN,
.speciesName = _("超音波幼虫"),
@@ -7323,11 +7322,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.eggCycles = 20,
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_MEDIUM_SLOW,
- #if P_UPDATED_EGG_GROUPS >= GEN_8
- .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG, EGG_GROUP_DRAGON),
- #else
- .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG),
- #endif
+ .eggGroups = TRAPINCH_FAMILY_EGG_GROUPS,
.abilities = { ABILITY_LEVITATE, ABILITY_LEVITATE, ABILITY_LEVITATE },
.bodyColor = BODY_COLOR_GREEN,
.speciesName = _("沙漠蜻蜓"),
@@ -8850,6 +8845,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_ADAPTABILITY },
#endif
.bodyColor = BODY_COLOR_BROWN,
+ .noFlip = TRUE,
.speciesName = _("丑丑鱼"),
.cryId = CRY_FEEBAS,
.natDexNum = NATIONAL_DEX_FEEBAS,
@@ -9251,6 +9247,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_AMORPHOUS),
.abilities = { ABILITY_FORECAST, ABILITY_NONE, ABILITY_NONE },
.bodyColor = BODY_COLOR_WHITE,
+ .noFlip = TRUE,
.speciesName = _("飘浮泡泡"),
.cryId = CRY_CASTFORM,
.natDexNum = NATIONAL_DEX_CASTFORM,
@@ -9488,6 +9485,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_CURSED_BODY },
#endif
.bodyColor = BODY_COLOR_BLACK,
+ .noFlip = TRUE,
.speciesName = _("诅咒娃娃"),
.cryId = CRY_BANETTE,
.natDexNum = NATIONAL_DEX_BANETTE,
@@ -9563,6 +9561,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS),
.abilities = { ABILITY_PRANKSTER, ABILITY_PRANKSTER, ABILITY_PRANKSTER },
.bodyColor = BODY_COLOR_BLACK,
+ .noFlip = TRUE,
.speciesName = _("诅咒娃娃"),
.cryId = CRY_BANETTE_MEGA,
.natDexNum = NATIONAL_DEX_BANETTE,
@@ -10551,7 +10550,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.baseSpDefense = 100,
.types = MON_TYPES(TYPE_ICE, TYPE_GHOST),
.catchRate = 75,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 168 : 187,
+ .expYield = 168,
.evYield_Speed = 2,
.genderRatio = MON_FEMALE,
.eggCycles = 20,
@@ -11509,6 +11508,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL),
.abilities = { ABILITY_CLEAR_BODY, ABILITY_NONE, ABILITY_LIGHT_METAL },
.bodyColor = BODY_COLOR_BLUE,
+ .noFlip = TRUE,
.speciesName = _("铁哑铃"),
.cryId = CRY_BELDUM,
.natDexNum = NATIONAL_DEX_BELDUM,
@@ -12632,7 +12632,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.baseSpAttack = 150,
.baseSpDefense = 90,
.types = MON_TYPES(TYPE_DRAGON, TYPE_FLYING),
- .catchRate = 45,
+ .catchRate = 3,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 340,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
@@ -12714,7 +12714,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.baseSpAttack = 180,
.baseSpDefense = 100,
.types = MON_TYPES(TYPE_DRAGON, TYPE_FLYING),
- .catchRate = 45,
+ .catchRate = 3,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 390 : 351,
.evYield_Attack = 2,
.evYield_SpAttack = 1,
@@ -12902,7 +12902,10 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.categoryName = _("DNA"),
.height = 17,
.weight = 608,
- .description = gDeoxysNormalPokedexText,
+ .description = COMPOUND_STRING(
+ "它是宇宙病毒的DNA受到激光照射后,\n"
+ "发生突变而生成的宝可梦。\n"
+ "胸部的水晶体好像是它的大脑。"),
.pokemonScale = 256,
.pokemonOffset = 0,
.trainerScale = 290,
@@ -12978,7 +12981,9 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.categoryName = _("DNA"),
.height = 17,
.weight = 608,
- .description = gDeoxysNormalPokedexText,
+ .description = COMPOUND_STRING(
+ "变化为攻击形态的代欧奇希斯\n"
+ "能够变换形态来迷惑对手。"),
.pokemonScale = 256,
.pokemonOffset = 0,
.trainerScale = 290,
@@ -13053,7 +13058,9 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.categoryName = _("DNA"),
.height = 17,
.weight = 608,
- .description = gDeoxysNormalPokedexText,
+ .description = COMPOUND_STRING(
+ "变化形态的时候会出现极光。\n"
+ "通过变化细胞形态来吸取攻击。"),
.pokemonScale = 256,
.pokemonOffset = 0,
.trainerScale = 290,
@@ -13129,7 +13136,10 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.categoryName = _("DNA"),
.height = 17,
.weight = 608,
- .description = gDeoxysNormalPokedexText,
+ .description = COMPOUND_STRING(
+ "当宇宙病毒被激光照射时,\n"
+ "发生突变而形成的宝可梦。\n"
+ "身体的形状很适合快速移动。"),
.pokemonScale = 256,
.pokemonOffset = 0,
.trainerScale = 290,
diff --git a/src/data/pokemon/species_info/gen_4_families.h b/src/data/pokemon/species_info/gen_4_families.h
index 6465aaaebc..9babb0ba5e 100644
--- a/src/data/pokemon/species_info/gen_4_families.h
+++ b/src/data/pokemon/species_info/gen_4_families.h
@@ -833,7 +833,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 243,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 218,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 214,
@@ -2255,7 +2255,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.catchRate = 120,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 49 : 63,
.evYield_Speed = 1,
- .itemRare = ITEM_HONEY,
+ .itemCommon = ITEM_HONEY,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 15,
.friendship = STANDARD_FRIENDSHIP,
@@ -2671,6 +2671,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_GRASS),
.abilities = { ABILITY_CHLOROPHYLL, ABILITY_NONE, ABILITY_NONE },
.bodyColor = BODY_COLOR_PINK,
+ .noFlip = TRUE,
.speciesName = _("樱花宝"),
.cryId = CRY_CHERUBI,
.natDexNum = NATIONAL_DEX_CHERUBI,
@@ -2746,6 +2747,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FAIRY, EGG_GROUP_GRASS),
.abilities = { ABILITY_FLOWER_GIFT, ABILITY_NONE, ABILITY_NONE },
.bodyColor = BODY_COLOR_PURPLE,
+ .noFlip = TRUE,
.speciesName = _("樱花儿"),
.cryId = CRY_CHERRIM,
.natDexNum = NATIONAL_DEX_CHERRIM,
@@ -3139,6 +3141,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS),
.abilities = { ABILITY_AFTERMATH, ABILITY_UNBURDEN, ABILITY_FLARE_BOOST },
.bodyColor = BODY_COLOR_PURPLE,
+ .noFlip = TRUE,
.speciesName = _("飘飘球"),
.cryId = CRY_DRIFLOON,
.natDexNum = NATIONAL_DEX_DRIFLOON,
@@ -3209,6 +3212,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS),
.abilities = { ABILITY_AFTERMATH, ABILITY_UNBURDEN, ABILITY_FLARE_BOOST },
.bodyColor = BODY_COLOR_PURPLE,
+ .noFlip = TRUE,
.speciesName = _("随风球"),
.cryId = CRY_DRIFBLIM,
.natDexNum = NATIONAL_DEX_DRIFBLIM,
@@ -3997,6 +4001,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS),
.abilities = { ABILITY_PRESSURE, ABILITY_NONE, ABILITY_INFILTRATOR },
.bodyColor = BODY_COLOR_PURPLE,
+ .noFlip = TRUE,
.speciesName = _("花岩怪"),
.cryId = CRY_SPIRITOMB,
.natDexNum = NATIONAL_DEX_SPIRITOMB,
@@ -5077,6 +5082,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS),
.abilities = { ABILITY_LEVITATE, ABILITY_NONE, ABILITY_NONE },
.bodyColor = BODY_COLOR_GREEN,
+ .noFlip = TRUE,
.speciesName = _("尖牙笼"),
.cryId = CRY_CARNIVINE,
.natDexNum = NATIONAL_DEX_CARNIVINE,
@@ -5541,6 +5547,8 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
#endif //P_FAMILY_SNOVER
#if P_FAMILY_ROTOM
+#define ROTOM_FAMILY_TYPES { TYPE_ELECTRIC, TYPE_GHOST }
+
[SPECIES_ROTOM] =
{
.baseHP = 50,
@@ -5549,7 +5557,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.baseSpeed = 91,
.baseSpAttack = 95,
.baseSpDefense = 77,
- .types = MON_TYPES(TYPE_ELECTRIC, TYPE_GHOST),
+ .types = ROTOM_FAMILY_TYPES,
.catchRate = 45,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 154 : 132,
.evYield_Speed = 1,
@@ -5628,7 +5636,11 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.baseSpeed = 86,
.baseSpAttack = 105,
.baseSpDefense = 107,
+ #if P_UPDATED_TYPES >= GEN_5
.types = MON_TYPES(TYPE_ELECTRIC, TYPE_FIRE),
+ #else
+ .types = ROTOM_FAMILY_TYPES,
+ #endif
.catchRate = 45,
.expYield = ROTOM_APPLIANCE_EXP_YIELD,
.evYield_Speed = 1,
@@ -5698,7 +5710,11 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.baseSpeed = 86,
.baseSpAttack = 105,
.baseSpDefense = 107,
+ #if P_UPDATED_TYPES >= GEN_5
.types = MON_TYPES(TYPE_ELECTRIC, TYPE_WATER),
+ #else
+ .types = ROTOM_FAMILY_TYPES,
+ #endif
.catchRate = 45,
.expYield = ROTOM_APPLIANCE_EXP_YIELD,
.evYield_Speed = 1,
@@ -5769,7 +5785,11 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.baseSpeed = 86,
.baseSpAttack = 105,
.baseSpDefense = 107,
+ #if P_UPDATED_TYPES >= GEN_5
.types = MON_TYPES(TYPE_ELECTRIC, TYPE_ICE),
+ #else
+ .types = ROTOM_FAMILY_TYPES,
+ #endif
.catchRate = 45,
.expYield = ROTOM_APPLIANCE_EXP_YIELD,
.evYield_Speed = 1,
@@ -5837,7 +5857,11 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.baseSpeed = 86,
.baseSpAttack = 105,
.baseSpDefense = 107,
+ #if P_UPDATED_TYPES >= GEN_5
.types = MON_TYPES(TYPE_ELECTRIC, TYPE_FLYING),
+ #else
+ .types = ROTOM_FAMILY_TYPES,
+ #endif
.catchRate = 45,
.expYield = ROTOM_APPLIANCE_EXP_YIELD,
.evYield_Speed = 1,
@@ -5931,7 +5955,11 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.baseSpeed = 86,
.baseSpAttack = 105,
.baseSpDefense = 107,
+ #if P_UPDATED_TYPES >= GEN_5
.types = MON_TYPES(TYPE_ELECTRIC, TYPE_GRASS),
+ #else
+ .types = ROTOM_FAMILY_TYPES,
+ #endif
.catchRate = 45,
.expYield = ROTOM_APPLIANCE_EXP_YIELD,
.evYield_Speed = 1,
@@ -6237,14 +6265,6 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
#endif //P_FAMILY_AZELF
#if P_FAMILY_DIALGA
-#if P_UPDATED_EXP_YIELDS >= GEN_8
- #define DIALGA_EXP_YIELD 340
-#elif P_UPDATED_EXP_YIELDS >= GEN_5
- #define DIALGA_EXP_YIELD 306
-#else
- #define DIALGA_EXP_YIELD 220
-#endif
-
[SPECIES_DIALGA] =
{
.baseHP = 100,
@@ -6255,7 +6275,13 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.baseSpDefense = 100,
.types = MON_TYPES(TYPE_STEEL, TYPE_DRAGON),
.catchRate = 3,
- .expYield = DIALGA_EXP_YIELD,
+ #if P_UPDATED_EXP_YIELDS >= GEN_8
+ .expYield = 340,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_5
+ .expYield = 306,
+ #else
+ .expYield = 220,
+ #endif
.evYield_SpAttack = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 120,
@@ -6325,7 +6351,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.baseSpDefense = 120,
.types = MON_TYPES(TYPE_STEEL, TYPE_DRAGON),
.catchRate = 3,
- .expYield = DIALGA_EXP_YIELD,
+ .expYield = 340,
.evYield_SpAttack = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 120,
@@ -6384,14 +6410,6 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
#endif //P_FAMILY_DIALGA
#if P_FAMILY_PALKIA
-#if P_UPDATED_EXP_YIELDS >= GEN_8
- #define PALKIA_EXP_YIELD 340
-#elif P_UPDATED_EXP_YIELDS >= GEN_5
- #define PALKIA_EXP_YIELD 306
-#else
- #define PALKIA_EXP_YIELD 220
-#endif
-
[SPECIES_PALKIA] =
{
.baseHP = 90,
@@ -6402,7 +6420,13 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.baseSpDefense = 120,
.types = MON_TYPES(TYPE_WATER, TYPE_DRAGON),
.catchRate = 3,
- .expYield = PALKIA_EXP_YIELD,
+ #if P_UPDATED_EXP_YIELDS >= GEN_8
+ .expYield = 340,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_5
+ .expYield = 306,
+ #else
+ .expYield = 220,
+ #endif
.evYield_SpAttack = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 120,
@@ -6471,7 +6495,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.baseSpDefense = 120,
.types = MON_TYPES(TYPE_WATER, TYPE_DRAGON),
.catchRate = 3,
- .expYield = PALKIA_EXP_YIELD,
+ .expYield = 340,
.evYield_SpAttack = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 120,
@@ -6845,7 +6869,9 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.baseSpDefense = P_UPDATED_STATS >= GEN_9 ? 120 : 130,
.types = MON_TYPES(TYPE_PSYCHIC),
.catchRate = 3,
- #if P_UPDATED_EXP_YIELDS >= GEN_8
+ #if P_UPDATED_EXP_YIELDS >= GEN_9
+ .expYield = 290,
+ #elif P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 300,
#elif P_UPDATED_EXP_YIELDS >= GEN_5
.expYield = 270,
@@ -7094,6 +7120,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED),
.abilities = { ABILITY_BAD_DREAMS, ABILITY_NONE, ABILITY_NONE },
.bodyColor = BODY_COLOR_BLACK,
+ .noFlip = TRUE,
.speciesName = _("达克莱伊"),
.cryId = CRY_DARKRAI,
.natDexNum = NATIONAL_DEX_DARKRAI,
diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h
index 16c4a58082..95b0ac3cfb 100644
--- a/src/data/pokemon/species_info/gen_5_families.h
+++ b/src/data/pokemon/species_info/gen_5_families.h
@@ -518,7 +518,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.baseSpDefense = 110,
.types = MON_TYPES(TYPE_FIRE, TYPE_FIGHTING),
.catchRate = 45,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 264 : 238,
+ .expYield = 264,
.evYield_Attack = 3,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 20,
@@ -783,7 +783,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.baseSpDefense = 65,
.types = MON_TYPES(TYPE_WATER, TYPE_DARK),
.catchRate = 45,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 264 : 238,
+ .expYield = 264,
.evYield_Attack = 3,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 20,
@@ -1133,7 +1133,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 250,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 225,
#else
.expYield = 221,
@@ -2036,7 +2036,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 244,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 220,
#else
.expYield = 215,
@@ -2419,7 +2419,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 258,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 232,
#else
.expYield = 227,
@@ -3340,7 +3340,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 255,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 229,
#else
.expYield = 225,
@@ -3696,7 +3696,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 250,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 225,
#else
.expYield = 221,
@@ -3922,7 +3922,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 243,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 218,
#else
.expYield = 214,
@@ -3999,13 +3999,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.baseSpDefense = 99,
.types = MON_TYPES(TYPE_BUG, TYPE_POISON),
.catchRate = 45,
- #if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 243,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
- .expYield = 218,
- #else
- .expYield = 214,
- #endif
.evYield_Speed = 3,
.itemRare = ITEM_POISON_BARB,
.genderRatio = PERCENT_FEMALE(50),
@@ -4051,11 +4045,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
#endif //P_FAMILY_VENIPEDE
#if P_FAMILY_COTTONEE
-#if P_UPDATED_TYPES >= GEN_6
- #define COTTONEE_FAMILY_TYPES { TYPE_GRASS, TYPE_FAIRY }
-#else
- #define COTTONEE_FAMILY_TYPES { TYPE_GRASS, TYPE_GRASS }
-#endif
+#define COTTONEE_FAMILY_TYPE2 (P_UPDATED_TYPES >= GEN_6 ? TYPE_FAIRY : TYPE_GRASS)
[SPECIES_COTTONEE] =
{
@@ -4065,7 +4055,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.baseSpeed = 66,
.baseSpAttack = 37,
.baseSpDefense = 50,
- .types = COTTONEE_FAMILY_TYPES,
+ .types = MON_TYPES(TYPE_GRASS, COTTONEE_FAMILY_TYPE2),
.catchRate = 190,
.expYield = 56,
.evYield_Speed = 1,
@@ -4140,7 +4130,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.baseSpeed = 116,
.baseSpAttack = 77,
.baseSpDefense = 75,
- .types = COTTONEE_FAMILY_TYPES,
+ .types = MON_TYPES(TYPE_GRASS, COTTONEE_FAMILY_TYPE2),
.catchRate = 75,
.expYield = 168,
.evYield_Speed = 2,
@@ -4893,7 +4883,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.catchRate = 45,
#if P_UPDATED_EXP_YIELDS >= GEN_8
.expYield = 260,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
+ #elif P_UPDATED_EXP_YIELDS >= GEN_6
.expYield = 234,
#else
.expYield = 229,
@@ -5105,7 +5095,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.baseSpDefense = 105,
.types = MON_TYPES(TYPE_FIRE, TYPE_PSYCHIC),
.catchRate = 60,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_7) ? 189 : 168,
+ .expYield = 189,
.evYield_SpAttack = 2,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -5294,7 +5284,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.baseSpDefense = 55,
.types = MON_TYPES(TYPE_ICE, TYPE_FIRE),
.catchRate = 60,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_7) ? 189 : 168,
+ .expYield = 189,
.evYield_SpAttack = 2,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -5303,6 +5293,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD),
.abilities = { ABILITY_GORILLA_TACTICS, ABILITY_NONE, ABILITY_ZEN_MODE },
.bodyColor = BODY_COLOR_WHITE,
+ .noFlip = TRUE,
.speciesName = _("达摩狒狒"),
.cryId = CRY_DARMANITAN,
.natDexNum = NATIONAL_DEX_DARMANITAN,
@@ -5994,6 +5985,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS),
.abilities = { ABILITY_WANDERING_SPIRIT, ABILITY_NONE, ABILITY_NONE },
.bodyColor = BODY_COLOR_BLACK,
+ .noFlip = TRUE,
.speciesName = _("哭哭面具"),
.cryId = CRY_YAMASK,
.natDexNum = NATIONAL_DEX_YAMASK,
@@ -6060,6 +6052,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS),
.abilities = { ABILITY_WANDERING_SPIRIT, ABILITY_NONE, ABILITY_NONE },
.bodyColor = BODY_COLOR_GRAY,
+ .noFlip = TRUE,
.speciesName = _("迭失板"),
.cryId = CRY_RUNERIGUS,
.natDexNum = NATIONAL_DEX_RUNERIGUS,
@@ -6817,6 +6810,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD),
.abilities = { ABILITY_ILLUSION, ABILITY_NONE, ABILITY_NONE },
.bodyColor = BODY_COLOR_GRAY,
+ .noFlip = TRUE,
.speciesName = _("索罗亚克"),
.cryId = CRY_ZOROARK,
.natDexNum = NATIONAL_DEX_ZOROARK,
@@ -6952,7 +6946,6 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD),
.abilities = { ABILITY_CUTE_CHARM, ABILITY_TECHNICIAN, ABILITY_SKILL_LINK },
.bodyColor = BODY_COLOR_GRAY,
- .noFlip = TRUE,
.speciesName = _("奇诺栗鼠"),
.cryId = CRY_CINCCINO,
.natDexNum = NATIONAL_DEX_CINCCINO,
@@ -7741,6 +7734,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.abilities = { ABILITY_ICE_BODY, ABILITY_NONE, ABILITY_WEAK_ARMOR },
#endif
.bodyColor = BODY_COLOR_WHITE,
+ .noFlip = TRUE,
.speciesName = _("双倍多多冰"),
.cryId = CRY_VANILLUXE,
.natDexNum = NATIONAL_DEX_VANILLUXE,
@@ -9633,7 +9627,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.baseSpDefense = 90,
.types = MON_TYPES(TYPE_ELECTRIC),
.catchRate = 30,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 258 : 232,
+ .expYield = 258 ,
.evYield_Attack = 3,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -10046,7 +10040,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.baseSpDefense = 110,
.types = MON_TYPES(TYPE_GHOST, TYPE_FIRE),
.catchRate = 45,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 260 : 234,
+ .expYield = 260,
.evYield_SpAttack = 3,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
@@ -10055,6 +10049,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_AMORPHOUS),
.abilities = { ABILITY_FLASH_FIRE, ABILITY_FLAME_BODY, ABILITY_INFILTRATOR },
.bodyColor = BODY_COLOR_BLACK,
+ .noFlip = TRUE,
.speciesName = _("水晶灯火灵"),
.cryId = CRY_CHANDELURE, // CRY_CHANDELURE_MEGA,
.natDexNum = NATIONAL_DEX_CHANDELURE,
@@ -10734,6 +10729,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS),
.abilities = { ABILITY_MIMICRY, ABILITY_NONE, ABILITY_NONE },
.bodyColor = BODY_COLOR_GREEN,
+ .noFlip = TRUE,
.speciesName = _("泥巴鱼"),
.cryId = CRY_STUNFISK,
.natDexNum = NATIONAL_DEX_STUNFISK,
@@ -13199,13 +13195,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.baseSpDefense = 100,
.types = MON_TYPES(TYPE_DRAGON, TYPE_ICE),
.catchRate = 3,
- #if P_UPDATED_EXP_YIELDS >= GEN_8
- .expYield = 350,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
- .expYield = 315,
- #else
- .expYield = 297,
- #endif
+ .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 350 : 315,
.evYield_SpAttack = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 120,
@@ -13276,13 +13266,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.baseSpDefense = 90,
.types = MON_TYPES(TYPE_DRAGON, TYPE_ICE),
.catchRate = 3,
- #if P_UPDATED_EXP_YIELDS >= GEN_8
- .expYield = 350,
- #elif P_UPDATED_EXP_YIELDS >= GEN_7
- .expYield = 315,
- #else
- .expYield = 297,
- #endif
+ .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 350 : 315,
.evYield_Attack = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 120,
diff --git a/src/data/pokemon/species_info/gen_6_families.h b/src/data/pokemon/species_info/gen_6_families.h
index caac36edd2..64299fea2d 100644
--- a/src/data/pokemon/species_info/gen_6_families.h
+++ b/src/data/pokemon/species_info/gen_6_families.h
@@ -221,7 +221,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.baseSpDefense = 115,
.types = MON_TYPES(TYPE_GRASS, TYPE_FIGHTING),
.catchRate = 45,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 265 : 239,
+ .expYield = 265,
.evYield_Defense = 3,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 20,
@@ -488,7 +488,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.baseSpDefense = 125,
.types = MON_TYPES(TYPE_FIRE, TYPE_PSYCHIC),
.catchRate = 45,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 267 : 240,
+ .expYield = 267,
.evYield_SpAttack = 3,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 20,
@@ -805,7 +805,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.baseSpDefense = 71,
.types = MON_TYPES(TYPE_WATER, TYPE_DARK),
.catchRate = 45,
- .expYield = 288,
+ .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 320 : 288,
.evYield_Speed = 3,
.genderRatio = MON_MALE,
.eggCycles = 20,
@@ -876,7 +876,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.baseSpDefense = 81,
.types = MON_TYPES(TYPE_WATER, TYPE_DARK),
.catchRate = 45,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 265 : 239,
+ .expYield = 265,
.evYield_Speed = 3,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 20,
@@ -1503,6 +1503,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_POLAR] =
{
VIVILLON_MISC_INFO(Polar, BODY_COLOR_BLUE, 0),
@@ -1511,6 +1512,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_TUNDRA] =
{
VIVILLON_MISC_INFO(Tundra, BODY_COLOR_BLUE, 0),
@@ -1519,6 +1521,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_CONTINENTAL] =
{
VIVILLON_MISC_INFO(Continental, BODY_COLOR_YELLOW, 2),
@@ -1527,6 +1530,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_GARDEN] =
{
VIVILLON_MISC_INFO(Garden, BODY_COLOR_GREEN, 1),
@@ -1535,6 +1539,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_ELEGANT] =
{
VIVILLON_MISC_INFO(Elegant, BODY_COLOR_PURPLE, 0),
@@ -1543,6 +1548,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_MEADOW] =
{
VIVILLON_MISC_INFO(Meadow, BODY_COLOR_PINK, 0),
@@ -1551,6 +1557,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_MODERN] =
{
VIVILLON_MISC_INFO(Modern, BODY_COLOR_RED, 2),
@@ -1559,6 +1566,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_MARINE] =
{
VIVILLON_MISC_INFO(Marine, BODY_COLOR_BLUE, 0),
@@ -1567,6 +1575,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_ARCHIPELAGO] =
{
VIVILLON_MISC_INFO(Archipelago, BODY_COLOR_BROWN, 0),
@@ -1575,6 +1584,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_HIGH_PLAINS] =
{
VIVILLON_MISC_INFO(HighPlains, BODY_COLOR_BROWN, 0),
@@ -1583,6 +1593,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_SANDSTORM] =
{
VIVILLON_MISC_INFO(Sandstorm, BODY_COLOR_BROWN, 1),
@@ -1591,6 +1602,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_RIVER] =
{
VIVILLON_MISC_INFO(River, BODY_COLOR_BROWN, 2),
@@ -1599,6 +1611,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_MONSOON] =
{
VIVILLON_MISC_INFO(Monsoon, BODY_COLOR_GRAY, 0),
@@ -1607,6 +1620,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_SAVANNA] =
{
VIVILLON_MISC_INFO(Savanna, BODY_COLOR_GREEN, 0),
@@ -1615,6 +1629,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_SUN] =
{
VIVILLON_MISC_INFO(Sun, BODY_COLOR_RED, 0),
@@ -1623,6 +1638,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_OCEAN] =
{
VIVILLON_MISC_INFO(Ocean, BODY_COLOR_RED, 0),
@@ -1631,6 +1647,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_JUNGLE] =
{
VIVILLON_MISC_INFO(Jungle, BODY_COLOR_GREEN, 0),
@@ -1639,6 +1656,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_FANCY] =
{
VIVILLON_MISC_INFO(Fancy, BODY_COLOR_PINK, 1),
@@ -1647,6 +1665,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会从翅膀撒出色彩艳丽的\n"
"毒鳞粉来战斗。"),
},
+
[SPECIES_VIVILLON_POKEBALL] =
{
VIVILLON_MISC_INFO(PokeBall, BODY_COLOR_RED, 2),
@@ -1932,6 +1951,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"从出生那一刻起就会为了寻找\n"
"喜欢的花而四处飞行。"),
},
+
[SPECIES_FLABEBE_YELLOW] =
{
FLABEBE_MISC_INFO(Yellow, YELLOW, 1),
@@ -1940,6 +1960,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"以此来使出各种各样的招式。\n"
"尤其喜欢黄花。"),
},
+
[SPECIES_FLABEBE_ORANGE] =
{
FLABEBE_MISC_INFO(Orange, ORANGE, 0),
@@ -1948,6 +1969,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"因此相应地会分出能量给花。\n"
"它最喜欢的是橙花。"),
},
+
[SPECIES_FLABEBE_BLUE] =
{
FLABEBE_MISC_INFO(Blue, BLUE, 0),
@@ -1956,6 +1978,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"靠由花朵散发出的力量浮在空中,\n"
"轻轻地飘来飘去。"),
},
+
[SPECIES_FLABEBE_WHITE] =
{
FLABEBE_MISC_INFO(White, WHITE, 1),
@@ -2035,6 +2058,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"能量传递给花,\n"
"以激发花的潜在能力。"),
},
+
[SPECIES_FLOETTE_YELLOW] =
{
FLOETTE_NORMAL_INFO(Yellow, YELLOW, 1),
@@ -2042,6 +2066,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"能够激发草属性的宝可梦的潜在能力。\n"
"与黄花的波长很契合。"),
},
+
[SPECIES_FLOETTE_ORANGE] =
{
FLOETTE_NORMAL_INFO(Orange, ORANGE, 0),
@@ -2050,6 +2075,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"通过与花同步波长,\n"
"就能使出草属性的招式。"),
},
+
[SPECIES_FLOETTE_BLUE] =
{
FLOETTE_NORMAL_INFO(Blue, BLUE, 0),
@@ -2058,6 +2084,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"这个样子是能与蓝色的\n"
"波长结合的个体。"),
},
+
[SPECIES_FLOETTE_WHITE] =
{
FLOETTE_NORMAL_INFO(White, WHITE, 1),
@@ -2066,6 +2093,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"就会毫不留情地发动攻击。\n"
"非常珍惜白花。"),
},
+
[SPECIES_FLOETTE_ETERNAL] =
{
FLOETTE_MISC_INFO(Eternal, ETERNAL, 0),
@@ -2158,6 +2186,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会源源不断地倾注着\n"
"能够治愈身心的力量。"),
},
+
[SPECIES_FLORGES_YELLOW] =
{
FLORGES_MISC_INFO(Yellow, 1),
@@ -2166,6 +2195,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"会狠狠地教训糟蹋花草的家伙,\n"
"绝不会手下留情。"),
},
+
[SPECIES_FLORGES_ORANGE] =
{
FLORGES_MISC_INFO(Orange, 0),
@@ -2174,6 +2204,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"城堡庭院的美观,\n"
"会精心培育花洁夫人。"),
},
+
[SPECIES_FLORGES_BLUE] =
{
FLORGES_MISC_INFO(Blue, 0),
@@ -2182,6 +2213,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
"因此画有蓝色个体的\n"
"绘画拥有极高的价值。"),
},
+
[SPECIES_FLORGES_WHITE] =
{
FLORGES_MISC_INFO(White, 0),
@@ -5014,6 +5046,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_DRAGON),
.abilities = { ABILITY_SAP_SIPPER, ABILITY_SHELL_ARMOR, ABILITY_GOOEY },
.bodyColor = BODY_COLOR_PURPLE,
+ .noFlip = TRUE,
.speciesName = _("黏美儿"),
.cryId = CRY_SLIGGOO,
.natDexNum = NATIONAL_DEX_SLIGGOO,
@@ -5072,7 +5105,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.baseSpDefense = 150,
.types = MON_TYPES(TYPE_DRAGON, TYPE_STEEL),
.catchRate = 45,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 300 : 270,
+ .expYield = 300,
.evYield_SpDefense = 3,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 40,
@@ -6076,6 +6109,12 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
#endif //P_FAMILY_BERGMITE
#if P_FAMILY_NOIBAT
+#if P_UPDATED_EGG_GROUPS >= GEN_8
+ #define NOIBAT_EGG_GROUPS MON_EGG_GROUPS(EGG_GROUP_FLYING, EGG_GROUP_DRAGON)
+#else
+ #define NOIBAT_EGG_GROUPS MON_EGG_GROUPS(EGG_GROUP_FLYING)
+#endif
+
[SPECIES_NOIBAT] =
{
.baseHP = 40,
@@ -6092,11 +6131,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.eggCycles = 20,
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_MEDIUM_FAST,
- #if P_UPDATED_EGG_GROUPS >= GEN_8
- .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING, EGG_GROUP_DRAGON),
- #else
- .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING),
- #endif
+ .eggGroups = NOIBAT_EGG_GROUPS,
.abilities = { ABILITY_FRISK, ABILITY_INFILTRATOR, ABILITY_TELEPATHY },
.bodyColor = BODY_COLOR_PURPLE,
.speciesName = _("嗡蝠"),
@@ -6170,11 +6205,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.eggCycles = 20,
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_MEDIUM_FAST,
- #if P_UPDATED_EGG_GROUPS >= GEN_8
- .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING, EGG_GROUP_DRAGON),
- #else
- .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING),
- #endif
+ .eggGroups = NOIBAT_EGG_GROUPS,
.abilities = { ABILITY_FRISK, ABILITY_INFILTRATOR, ABILITY_TELEPATHY },
.bodyColor = BODY_COLOR_PURPLE,
.speciesName = _("音波龙"),
@@ -6492,6 +6523,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.formSpeciesIdTable = sZygardeFormSpeciesIdTable,
.formChangeTable = sZygarde50AuraBreakFormChangeTable,
},
+
[SPECIES_ZYGARDE_50_POWER_CONSTRUCT] =
{
.baseHP = 108,
@@ -6556,6 +6588,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.formSpeciesIdTable = sZygardeFormSpeciesIdTable,
.formChangeTable = sZygarde50PowerConstructFormChangeTable,
},
+
[SPECIES_ZYGARDE_10_AURA_BREAK] =
{
.baseHP = 54,
@@ -6768,7 +6801,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.baseSpDefense = 85,
.types = MON_TYPES(TYPE_DRAGON, TYPE_GROUND),
.catchRate = 3,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 354 : 319,
+ .expYield = 354,
.evYield_HP = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 120,
@@ -6896,7 +6929,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.baseSpDefense = 110,
.types = MON_TYPES(TYPE_ROCK, TYPE_FAIRY),
.catchRate = 3,
- .expYield = 315,
+ .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 350 : 315,
.evYield_Defense = 1,
.evYield_SpDefense = 2,
.genderRatio = MON_GENDERLESS,
diff --git a/src/data/pokemon/species_info/gen_7_families.h b/src/data/pokemon/species_info/gen_7_families.h
index 5edc7c722c..012588b5ae 100644
--- a/src/data/pokemon/species_info/gen_7_families.h
+++ b/src/data/pokemon/species_info/gen_7_families.h
@@ -216,7 +216,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.baseSpDefense = 95,
.types = MON_TYPES(TYPE_GRASS, TYPE_FIGHTING),
.catchRate = 45,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 265 : 239,
+ .expYield = 265,
.evYield_Attack = 3,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 15,
@@ -667,7 +667,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.catchRate = 255,
.expYield = 53,
.evYield_Attack = 1,
- .itemRare = ITEM_ORAN_BERRY,
+ .itemCommon = ITEM_ORAN_BERRY,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = STANDARD_FRIENDSHIP,
@@ -805,7 +805,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.catchRate = 45,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 243 : 218,
.evYield_Attack = 3,
- .itemRare = ITEM_RAWST_BERRY,
+ .itemCommon = ITEM_SITRUS_BERRY,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = STANDARD_FRIENDSHIP,
@@ -1256,7 +1256,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.baseSpDefense = 75,
.types = MON_TYPES(TYPE_BUG, TYPE_ELECTRIC),
.catchRate = 45,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 250 : 225,
+ .expYield = 225,
.evYield_SpAttack = 3,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
@@ -1728,7 +1728,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.catchRate = 190,
.expYield = 61,
.evYield_Speed = 1,
- .itemRare = ITEM_HONEY,
+ .itemCommon = ITEM_HONEY,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = STANDARD_FRIENDSHIP,
@@ -1828,7 +1828,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.catchRate = 75,
.expYield = 162,
.evYield_Speed = 2,
- .itemRare = ITEM_HONEY,
+ .itemCommon = ITEM_HONEY,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = STANDARD_FRIENDSHIP,
@@ -3307,7 +3307,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
)
.levelUpLearnset = sSalazzleLevelUpLearnset,
.teachableLearnset = sSalazzleTeachableLearnset,
- .formSpeciesIdTable = sSalanditFormSpeciesIdTable,
+ .formSpeciesIdTable = sSalazzleFormSpeciesIdTable,
},
[SPECIES_SALAZZLE_TOTEM] =
@@ -3370,7 +3370,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.perfectIVCount = LEGENDARY_PERFECT_IV_COUNT,
.levelUpLearnset = sSalazzleLevelUpLearnset,
.teachableLearnset = sSalazzleTeachableLearnset,
- .formSpeciesIdTable = sSalanditFormSpeciesIdTable,
+ .formSpeciesIdTable = sSalazzleFormSpeciesIdTable,
},
#endif //P_FAMILY_SALANDIT
@@ -4317,7 +4317,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.baseSpDefense = 95, \
.types = MON_TYPES(type), \
.catchRate = 3, \
- .expYield = 257, \
+ .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 285 : 257, \
.evYield_HP = 3, \
.genderRatio = MON_GENDERLESS, \
.eggCycles = 120, \
@@ -4399,7 +4399,6 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.expYield = 154, \
.evYield_Defense = 1, \
.evYield_SpDefense = 1, \
- .itemRare = ITEM_STAR_PIECE, \
.genderRatio = MON_GENDERLESS, \
.eggCycles = 25, \
.friendship = STANDARD_FRIENDSHIP, \
@@ -4422,7 +4421,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.teachableLearnset = sMiniorTeachableLearnset, \
.formSpeciesIdTable = sMiniorFormSpeciesIdTable
-#define MINIOR_METEOR_SPECIES_INFO(Form) \
+#define MINIOR_METEOR_SPECIES_INFO(Form, heldItem) \
{ \
.baseHP = 60, \
.baseAttack = 60, \
@@ -4430,6 +4429,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.baseSpeed = 60, \
.baseSpAttack = 60, \
.baseSpDefense = 100, \
+ .itemCommon = heldItem, \
.weight = 400, \
.description = gMiniorMeteorPokedexText, \
.frontPic = gMonFrontPic_MiniorMeteor, \
@@ -4461,7 +4461,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
MINIOR_MISC_INFO(BODY_COLOR_BROWN), \
}
-#define MINIOR_CORE_SPECIES_INFO(Form, color, iconPal) \
+#define MINIOR_CORE_SPECIES_INFO(Form, color, iconPal, heldItem)\
{ \
.baseHP = 60, \
.baseAttack = 100, \
@@ -4469,6 +4469,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.baseSpeed = 120, \
.baseSpAttack = 100, \
.baseSpDefense = 60, \
+ .itemCommon = heldItem, \
.weight = 3, \
.description = gMiniorCorePokedexText, \
.frontPic = gMonFrontPic_MiniorCore, \
@@ -4491,20 +4492,20 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
MINIOR_MISC_INFO(color), \
}
- [SPECIES_MINIOR_METEOR_RED] = MINIOR_METEOR_SPECIES_INFO(Red),
- [SPECIES_MINIOR_METEOR_ORANGE] = MINIOR_METEOR_SPECIES_INFO(Orange),
- [SPECIES_MINIOR_METEOR_YELLOW] = MINIOR_METEOR_SPECIES_INFO(Yellow),
- [SPECIES_MINIOR_METEOR_GREEN] = MINIOR_METEOR_SPECIES_INFO(Green),
- [SPECIES_MINIOR_METEOR_BLUE] = MINIOR_METEOR_SPECIES_INFO(Blue),
- [SPECIES_MINIOR_METEOR_INDIGO] = MINIOR_METEOR_SPECIES_INFO(Indigo),
- [SPECIES_MINIOR_METEOR_VIOLET] = MINIOR_METEOR_SPECIES_INFO(Violet),
- [SPECIES_MINIOR_CORE_RED] = MINIOR_CORE_SPECIES_INFO(Red, BODY_COLOR_RED, 0),
- [SPECIES_MINIOR_CORE_ORANGE] = MINIOR_CORE_SPECIES_INFO(Orange, BODY_COLOR_RED, 0),
- [SPECIES_MINIOR_CORE_YELLOW] = MINIOR_CORE_SPECIES_INFO(Yellow, BODY_COLOR_YELLOW, 0),
- [SPECIES_MINIOR_CORE_GREEN] = MINIOR_CORE_SPECIES_INFO(Green, BODY_COLOR_GREEN, 1),
- [SPECIES_MINIOR_CORE_BLUE] = MINIOR_CORE_SPECIES_INFO(Blue, BODY_COLOR_BLUE, 0),
- [SPECIES_MINIOR_CORE_INDIGO] = MINIOR_CORE_SPECIES_INFO(Indigo, BODY_COLOR_BLUE, 0),
- [SPECIES_MINIOR_CORE_VIOLET] = MINIOR_CORE_SPECIES_INFO(Violet, BODY_COLOR_PURPLE, 2),
+ [SPECIES_MINIOR_METEOR_RED] = MINIOR_METEOR_SPECIES_INFO(Red, ITEM_HARD_STONE),
+ [SPECIES_MINIOR_METEOR_ORANGE] = MINIOR_METEOR_SPECIES_INFO(Orange, ITEM_HARD_STONE),
+ [SPECIES_MINIOR_METEOR_YELLOW] = MINIOR_METEOR_SPECIES_INFO(Yellow, ITEM_FLOAT_STONE),
+ [SPECIES_MINIOR_METEOR_GREEN] = MINIOR_METEOR_SPECIES_INFO(Green, ITEM_FLOAT_STONE),
+ [SPECIES_MINIOR_METEOR_BLUE] = MINIOR_METEOR_SPECIES_INFO(Blue, ITEM_HARD_STONE),
+ [SPECIES_MINIOR_METEOR_INDIGO] = MINIOR_METEOR_SPECIES_INFO(Indigo, ITEM_HARD_STONE),
+ [SPECIES_MINIOR_METEOR_VIOLET] = MINIOR_METEOR_SPECIES_INFO(Violet, ITEM_FLOAT_STONE),
+ [SPECIES_MINIOR_CORE_RED] = MINIOR_CORE_SPECIES_INFO(Red, BODY_COLOR_RED, 0, ITEM_HARD_STONE),
+ [SPECIES_MINIOR_CORE_ORANGE] = MINIOR_CORE_SPECIES_INFO(Orange, BODY_COLOR_RED, 0, ITEM_HARD_STONE),
+ [SPECIES_MINIOR_CORE_YELLOW] = MINIOR_CORE_SPECIES_INFO(Yellow, BODY_COLOR_YELLOW, 0, ITEM_FLOAT_STONE),
+ [SPECIES_MINIOR_CORE_GREEN] = MINIOR_CORE_SPECIES_INFO(Green, BODY_COLOR_GREEN, 1, ITEM_FLOAT_STONE),
+ [SPECIES_MINIOR_CORE_BLUE] = MINIOR_CORE_SPECIES_INFO(Blue, BODY_COLOR_BLUE, 0, ITEM_HARD_STONE),
+ [SPECIES_MINIOR_CORE_INDIGO] = MINIOR_CORE_SPECIES_INFO(Indigo, BODY_COLOR_BLUE, 0, ITEM_HARD_STONE),
+ [SPECIES_MINIOR_CORE_VIOLET] = MINIOR_CORE_SPECIES_INFO(Violet, BODY_COLOR_PURPLE, 2, ITEM_FLOAT_STONE),
#endif //P_FAMILY_MINIOR
#if P_FAMILY_KOMALA
@@ -5473,7 +5474,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.baseSpDefense = 105,
.types = MON_TYPES(TYPE_DRAGON, TYPE_FIGHTING),
.catchRate = 45,
- .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 300 : 270,
+ .expYield = 270,
.evYield_Defense = 3,
.itemCommon = ITEM_RAZOR_CLAW,
.genderRatio = PERCENT_FEMALE(50),
@@ -5833,7 +5834,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.baseSpAttack = 29,
.baseSpDefense = 31,
.types = MON_TYPES(TYPE_PSYCHIC),
- .catchRate = 45,
+ .catchRate = 3,
.expYield = 40,
.evYield_HP = 1,
.genderRatio = MON_GENDERLESS,
@@ -5901,7 +5902,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.baseSpAttack = 29,
.baseSpDefense = 131,
.types = MON_TYPES(TYPE_PSYCHIC),
- .catchRate = 45,
+ .catchRate = 3,
.expYield = 140,
.evYield_Defense = 1,
.evYield_SpDefense = 1,
@@ -5970,7 +5971,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.baseSpAttack = 113,
.baseSpDefense = 89,
.types = MON_TYPES(TYPE_PSYCHIC, TYPE_STEEL),
- .catchRate = 45,
+ .catchRate = 3,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 340 : 306,
.evYield_Attack = 3,
.genderRatio = MON_GENDERLESS,
@@ -6035,7 +6036,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.baseSpAttack = 137,
.baseSpDefense = 107,
.types = MON_TYPES(TYPE_PSYCHIC, TYPE_GHOST),
- .catchRate = 45,
+ .catchRate = 3,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 340 : 306,
.evYield_SpAttack = 3,
.genderRatio = MON_GENDERLESS,
@@ -6569,7 +6570,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.baseSpAttack = 127,
.baseSpDefense = 89,
.types = MON_TYPES(TYPE_PSYCHIC),
- .catchRate = 255,
+ .catchRate = 3,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 300 : 270,
.evYield_Attack = 1,
.evYield_SpAttack = 2,
@@ -6639,7 +6640,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.baseSpAttack = 113,
.baseSpDefense = 109,
.types = MON_TYPES(TYPE_PSYCHIC, TYPE_STEEL),
- .catchRate = 255,
+ .catchRate = 3,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 340 : 306,
.evYield_Attack = 3,
.genderRatio = MON_GENDERLESS,
@@ -6708,7 +6709,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.baseSpAttack = 157,
.baseSpDefense = 127,
.types = MON_TYPES(TYPE_PSYCHIC, TYPE_GHOST),
- .catchRate = 255,
+ .catchRate = 3,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 340 : 306,
.evYield_SpAttack = 3,
.genderRatio = MON_GENDERLESS,
@@ -6779,7 +6780,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.baseSpAttack = 167,
.baseSpDefense = 97,
.types = MON_TYPES(TYPE_PSYCHIC, TYPE_DRAGON),
- .catchRate = 255,
+ .catchRate = 3,
.expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 377 : 339,
.evYield_Attack = 1,
.evYield_Speed = 1,
@@ -6841,6 +6842,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.levelUpLearnset = sNecrozmaLevelUpLearnset,
.teachableLearnset = sNecrozmaTeachableLearnset,
.formSpeciesIdTable = sNecrozmaFormSpeciesIdTable,
+ .formChangeTable = sNecrozmaUltraFormChangeTable,
},
#endif //P_ULTRA_BURST_FORMS
#endif //P_FUSION_FORMS
@@ -6912,6 +6914,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.teachableLearnset = sMagearnaTeachableLearnset,
.formSpeciesIdTable = sMagearnaFormSpeciesIdTable,
},
+
[SPECIES_MAGEARNA_ORIGINAL] =
{
.baseHP = 80,
diff --git a/src/data/pokemon/species_info/gen_8_families.h b/src/data/pokemon/species_info/gen_8_families.h
index 362af2077c..fa96ede4e8 100644
--- a/src/data/pokemon/species_info/gen_8_families.h
+++ b/src/data/pokemon/species_info/gen_8_families.h
@@ -6720,7 +6720,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.baseSpDefense = 115,
.types = MON_TYPES(TYPE_FAIRY),
.catchRate = 10,
- .expYield = 335,
+ .expYield = (P_UPDATED_EXP_YIELDS >= GEN_9) ? 330 : 335,
.evYield_Speed = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 120,
@@ -6787,7 +6787,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.baseSpDefense = 115,
.types = MON_TYPES(TYPE_FAIRY, TYPE_STEEL),
.catchRate = 10,
- .expYield = 360,
+ .expYield = (P_UPDATED_EXP_YIELDS >= GEN_9) ? 350 : 360,
.evYield_Speed = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 120,
@@ -6856,7 +6856,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.baseSpDefense = 115,
.types = MON_TYPES(TYPE_FIGHTING),
.catchRate = 10,
- .expYield = 335,
+ .expYield = (P_UPDATED_EXP_YIELDS >= GEN_9) ? 330 : 335,
.evYield_Speed = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 120,
@@ -6923,7 +6923,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.baseSpDefense = P_UPDATED_STATS >= GEN_9 ? 140 : 145,
.types = MON_TYPES(TYPE_FIGHTING, TYPE_STEEL),
.catchRate = 10,
- .expYield = 360,
+ .expYield = (P_UPDATED_EXP_YIELDS >= GEN_9) ? 350 : 360,
.evYield_Speed = 3,
.genderRatio = MON_GENDERLESS,
.eggCycles = 120,
@@ -7298,6 +7298,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.levelUpLearnset = sUrshifuSingleStrikeLevelUpLearnset,
.teachableLearnset = sUrshifuSingleStrikeTeachableLearnset,
.formSpeciesIdTable = sUrshifuFormSpeciesIdTable,
+ .formChangeTable = sUrshifuSingleStrikeFormChangeTable,
},
#endif //P_GIGANTAMAX_FORMS
@@ -7421,6 +7422,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.levelUpLearnset = sUrshifuRapidStrikeLevelUpLearnset,
.teachableLearnset = sUrshifuRapidStrikeTeachableLearnset,
.formSpeciesIdTable = sUrshifuFormSpeciesIdTable,
+ .formChangeTable = sUrshifuRapidStrikeFormChangeTable,
},
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_KUBFU
@@ -7492,6 +7494,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.teachableLearnset = sZarudeTeachableLearnset,
.formSpeciesIdTable = sZarudeFormSpeciesIdTable,
},
+
[SPECIES_ZARUDE_DADA] =
{
.baseHP = 105,
diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h
index 183e20fbdd..31bf79acca 100644
--- a/src/data/pokemon/species_info/gen_9_families.h
+++ b/src/data/pokemon/species_info/gen_9_families.h
@@ -1341,6 +1341,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.teachableLearnset = sMausholdTeachableLearnset,
.formSpeciesIdTable = sMausholdFormSpeciesIdTable,
},
+
[SPECIES_MAUSHOLD_FOUR] =
{
.baseHP = 74,
@@ -7082,6 +7083,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.evolutions = EVOLUTION({EVO_ITEM, ITEM_UNREMARKABLE_TEACUP, SPECIES_SINISTCHA_UNREMARKABLE}),
.formSpeciesIdTable = sPoltchageistFormSpeciesIdTable,
},
+
[SPECIES_POLTCHAGEIST_ARTISAN] =
{
.baseHP = 40,
@@ -7210,6 +7212,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.teachableLearnset = sSinistchaTeachableLearnset,
.formSpeciesIdTable = sSinistchaFormSpeciesIdTable,
},
+
[SPECIES_SINISTCHA_MASTERPIECE] =
{
.baseHP = 71,
diff --git a/src/data/pokemon/species_info/shared_dex_text.h b/src/data/pokemon/species_info/shared_dex_text.h
index 19507155cb..edb6bd9b63 100644
--- a/src/data/pokemon/species_info/shared_dex_text.h
+++ b/src/data/pokemon/species_info/shared_dex_text.h
@@ -22,10 +22,6 @@ const u8 gEeveePokedexText[] = _(
const u8 gUnownPokedexText[] = _(
"身体很薄,\n会一直贴在墙上。\n它的外形好像有着某种含义。");
-// Gen 3 families
-const u8 gDeoxysNormalPokedexText[] = _(
- "附着在陨石上的宇宙病毒的\nDNA变异后生成的宝可梦。");
-
// Gen 4 families
const u8 gMothimPokedexText[] = _(
"非常喜欢吃花蜜。\n会抢夺三蜜蜂采集到的蜜,\n然后自己吃掉。");
diff --git a/src/field_effect.c b/src/field_effect.c
index 174c071ae4..9127e6b0ea 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -2659,7 +2659,7 @@ static void TeleportWarpOutFieldEffect_End(struct Task *task)
if (BGMusicStopped() == TRUE)
{
- SetWarpDestinationToLastHealLocation();
+ SetWarpDestinationForTeleport();
WarpIntoMap();
SetMainCallback2(CB2_LoadMap);
gFieldCallback = FieldCallback_TeleportWarpIn;
diff --git a/src/heal_location.c b/src/heal_location.c
index fd376e71e0..d7854dbf75 100644
--- a/src/heal_location.c
+++ b/src/heal_location.c
@@ -79,7 +79,7 @@ bool32 IsLastHealLocationPlayerHouse()
u32 GetHealNpcLocalId(u32 healLocationId)
{
if (healLocationId == HEAL_LOCATION_NONE || healLocationId >= NUM_HEAL_LOCATIONS)
- return 0;
+ return LOCALID_NONE;
return sWhiteoutRespawnHealerNpcIds[healLocationId - 1];
}
diff --git a/src/overworld.c b/src/overworld.c
index ec66acaad8..3c0430a168 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -715,7 +715,7 @@ static bool32 IsWhiteoutCutscene(void)
{
if (OW_WHITEOUT_CUTSCENE < GEN_4)
return FALSE;
- return GetHealNpcLocalId(GetHealLocationIndexByWarpData(&gSaveBlock1Ptr->lastHealLocation)) > 0;
+ return GetHealNpcLocalId(GetHealLocationIndexByWarpData(&gSaveBlock1Ptr->lastHealLocation)) != LOCALID_NONE;
}
void SetWarpDestinationToLastHealLocation(void)
@@ -726,6 +726,11 @@ void SetWarpDestinationToLastHealLocation(void)
sWarpDestination = gSaveBlock1Ptr->lastHealLocation;
}
+void SetWarpDestinationForTeleport(void)
+{
+ sWarpDestination = gSaveBlock1Ptr->lastHealLocation;
+}
+
void SetLastHealLocationWarp(u8 healLocationId)
{
const struct HealLocation *healLocation = GetHealLocation(healLocationId);
diff --git a/src/pokemon.c b/src/pokemon.c
index 89da3a21f9..7a4745b7b1 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -7154,10 +7154,19 @@ bool32 TryFormChange(u32 monId, enum BattleSide side, enum FormChanges method)
u32 currentSpecies = GetMonData(&party[monId], MON_DATA_SPECIES);
u32 targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0);
- if (targetSpecies == currentSpecies && gBattleStruct != NULL && gBattleStruct->partyState[side][monId].changedSpecies != SPECIES_NONE)
+ // If the battle ends, and there's not a specified species to change back to,,
+ // use the species at the start of the battle.
+ if (targetSpecies == SPECIES_NONE
+ && gBattleStruct != NULL
+ && gBattleStruct->partyState[side][monId].changedSpecies != SPECIES_NONE
+ // This is added to prevent FORM_CHANGE_END_BATTLE_ENVIRONMENT from omitting move changes
+ // at the end of the battle, as it was being counting as a successful form change.
+ && method == FORM_CHANGE_END_BATTLE)
+ {
targetSpecies = gBattleStruct->partyState[side][monId].changedSpecies;
+ }
- if (targetSpecies != currentSpecies)
+ if (targetSpecies != currentSpecies && targetSpecies != SPECIES_NONE)
{
TryToSetBattleFormChangeMoves(&party[monId], method);
SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies);
@@ -7367,7 +7376,7 @@ void UpdateDaysPassedSinceFormChange(u16 days)
{
u32 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_CHANGE_DAYS_PASSED, 0);
- if (targetSpecies != currentSpecies)
+ if (targetSpecies != currentSpecies && targetSpecies != SPECIES_NONE)
{
SetMonData(mon, MON_DATA_SPECIES, &targetSpecies);
CalculateMonStats(mon);
diff --git a/src/trade.c b/src/trade.c
index 01cd6f15ca..16b524c288 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -3846,10 +3846,10 @@ static bool8 DoTradeAnim_Cable(void)
case STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution
TradeMons(gSpecialVar_0x8005, 0);
gCB2_AfterEvolution = CB2_InGameTrade;
- evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, &gPlayerParty[gSelectedTradeMonPositions[TRADE_PARTNER]], NULL, CHECK_EVO);
+ evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, &gEnemyParty[0], NULL, CHECK_EVO);
if (evoTarget != SPECIES_NONE)
{
- GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, &gPlayerParty[gSelectedTradeMonPositions[TRADE_PARTNER]], NULL, DO_EVO);
+ GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, &gEnemyParty[0], NULL, DO_EVO);
TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeAnim->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]);
}
sTradeAnim->state++;
@@ -4346,10 +4346,10 @@ static bool8 DoTradeAnim_Wireless(void)
case STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution
TradeMons(gSpecialVar_0x8005, 0);
gCB2_AfterEvolution = CB2_InGameTrade;
- evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, &gPlayerParty[gSelectedTradeMonPositions[TRADE_PARTNER]], NULL, CHECK_EVO);
+ evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, &gEnemyParty[0], NULL, CHECK_EVO);
if (evoTarget != SPECIES_NONE)
{
- GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, &gPlayerParty[gSelectedTradeMonPositions[TRADE_PARTNER]], NULL, DO_EVO);
+ GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, &gEnemyParty[0], NULL, DO_EVO);
TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeAnim->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]);
}
@@ -4393,10 +4393,10 @@ static void CB2_TryLinkTradeEvolution(void)
break;
case 4:
gCB2_AfterEvolution = CB2_SaveAndEndTrade;
- evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, &gPlayerParty[gSelectedTradeMonPositions[TRADE_PARTNER]], NULL, CHECK_EVO);
+ evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, &gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], NULL, CHECK_EVO);
if (evoTarget != SPECIES_NONE)
{
- GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, &gPlayerParty[gSelectedTradeMonPositions[TRADE_PARTNER]], NULL, DO_EVO);
+ GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE, &gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], NULL, DO_EVO);
TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeAnim->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]);
}
else if (IsWirelessTrade())
diff --git a/test/battle/ability/aerilate.c b/test/battle/ability/aerilate.c
index b6ae57bd50..5158a58de9 100644
--- a/test/battle/ability/aerilate.c
+++ b/test/battle/ability/aerilate.c
@@ -160,22 +160,124 @@ SINGLE_BATTLE_TEST("Aerilate doesn't affect Hidden Power's type")
ASSUME(GetMoveEffect(MOVE_HIDDEN_POWER) == EFFECT_HIDDEN_POWER);
ASSUME(gTypesInfo[TYPE_ELECTRIC].isHiddenPowerType == TRUE);
ASSUME(GetSpeciesType(SPECIES_DIGLETT, 0) == TYPE_GROUND);
- PLAYER(SPECIES_PINSIR) { Ability(ABILITY_AERILATE); HPIV(31); AttackIV(31); DefenseIV(31); SpAttackIV(30); SpDefenseIV(31); SpeedIV(31); } // HP Electric
+ PLAYER(SPECIES_PINSIR) { Item(ITEM_PINSIRITE); HPIV(31); AttackIV(31); DefenseIV(31); SpAttackIV(30); SpDefenseIV(31); SpeedIV(31); } // HP Electric
OPPONENT(SPECIES_DIGLETT);
} WHEN {
- TURN { MOVE(player, MOVE_HIDDEN_POWER); }
+ TURN { MOVE(player, MOVE_HIDDEN_POWER, gimmick: GIMMICK_MEGA); }
} SCENE {
NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_HIDDEN_POWER, player); }
MESSAGE("It doesn't affect the opposing Diglett…");
}
}
-TO_DO_BATTLE_TEST("Aerilate doesn't override Electrify (Gen7+)"); // No mon with Aerilate exists in Gen8+, but probably behaves similar to Pixilate, which does.
-TO_DO_BATTLE_TEST("Aerilate doesn't override Ion Deluge (Gen7+)"); // Ion Deluge doesn't exist in Gen 8+, but we probably could assume it behaves similar to under Electrify. TODO: Test by hacking SV.
-TO_DO_BATTLE_TEST("Aerilate overrides Electrify (Gen6)")
-TO_DO_BATTLE_TEST("Aerilate overrides Ion Deluge (Gen6)")
-TO_DO_BATTLE_TEST("Aerilate doesn't affect Tera Starstorm's type");
+SINGLE_BATTLE_TEST("Aerilate doesn't override Electrify")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_ELECTRIFY) == EFFECT_ELECTRIFY);
+ ASSUME(GetSpeciesType(SPECIES_SANDSHREW, 0) == TYPE_GROUND || GetSpeciesType(SPECIES_SANDSHREW, 1) == TYPE_GROUND);
+ PLAYER(SPECIES_PINSIR) { Item(ITEM_PINSIRITE); Speed(1); }
+ OPPONENT(SPECIES_SANDSHREW) { Moves(MOVE_ELECTRIFY); Speed(10); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_ELECTRIFY); MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_MEGA); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIFY, opponent);
+ NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player); }
+ MESSAGE("It doesn't affect the opposing Sandshrew…");
+ }
+}
+
+SINGLE_BATTLE_TEST("Aerilate overrides Ion Deluge")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_ION_DELUGE) == EFFECT_ION_DELUGE);
+ ASSUME(GetSpeciesType(SPECIES_MACHOP, 0) == TYPE_FIGHTING || GetSpeciesType(SPECIES_MACHOP, 1) == TYPE_FIGHTING);
+ PLAYER(SPECIES_PINSIR) { Item(ITEM_PINSIRITE); Speed(1); }
+ OPPONENT(SPECIES_MACHOP) { Moves(MOVE_ION_DELUGE); Speed(10); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_ION_DELUGE); MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_MEGA); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ION_DELUGE, opponent);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Aerilate changes Tera Blast's type when not Terastallized")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TERA_BLAST) == EFFECT_TERA_BLAST);
+ ASSUME(GetMoveType(MOVE_TERA_BLAST) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_MACHOP, 0) == TYPE_FIGHTING || GetSpeciesType(SPECIES_MACHOP, 1) == TYPE_FIGHTING);
+ ASSUME(GetMoveEffect(MOVE_SKILL_SWAP) == EFFECT_SKILL_SWAP);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_SALAMENCE) { Item(ITEM_SALAMENCITE); Moves(MOVE_SKILL_SWAP); }
+ OPPONENT(SPECIES_MACHOP);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SKILL_SWAP, gimmick: GIMMICK_MEGA, target: player); }
+ TURN { SWITCH(opponent, 1); MOVE(player, MOVE_TERA_BLAST); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Aerilate doesn't change Tera Blast's type when Terastallized")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TERA_BLAST) == EFFECT_TERA_BLAST);
+ ASSUME(GetMoveType(MOVE_TERA_BLAST) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_MISDREAVUS, 0) == TYPE_GHOST);
+ ASSUME(GetMoveEffect(MOVE_SKILL_SWAP) == EFFECT_SKILL_SWAP);
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_NORMAL); }
+ OPPONENT(SPECIES_SALAMENCE) { Item(ITEM_SALAMENCITE); Moves(MOVE_SKILL_SWAP); }
+ OPPONENT(SPECIES_MISDREAVUS);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SKILL_SWAP, gimmick: GIMMICK_MEGA, target: player); }
+ TURN { SWITCH(opponent, 1); MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player); }
+ MESSAGE("It doesn't affect the opposing Misdreavus…");
+ }
+}
+
+SINGLE_BATTLE_TEST("Aerilate doesn't affect Terrain Pulse's type")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TERRAIN_PULSE) == EFFECT_TERRAIN_PULSE);
+ ASSUME(GetMoveType(MOVE_TERRAIN_PULSE) == TYPE_NORMAL);
+ ASSUME(GetMoveEffect(MOVE_SKILL_SWAP) == EFFECT_SKILL_SWAP);
+ ASSUME(GetSpeciesType(SPECIES_SANDSHREW, 0) == TYPE_GROUND || GetSpeciesType(SPECIES_SANDSHREW, 1) == TYPE_GROUND);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_SALAMENCE) { Item(ITEM_SALAMENCITE); Moves(MOVE_SKILL_SWAP); }
+ OPPONENT(SPECIES_SANDSHREW);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SKILL_SWAP, gimmick: GIMMICK_MEGA, target: player); MOVE(player, MOVE_ELECTRIC_TERRAIN); }
+ TURN { SWITCH(opponent, 1); MOVE(player, MOVE_TERRAIN_PULSE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIC_TERRAIN, player);
+ NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_TERRAIN_PULSE, player); }
+ MESSAGE("It doesn't affect the opposing Sandshrew…");
+ }
+}
+
+SINGLE_BATTLE_TEST("Aerilate doesn't affect damaging Z-Move types")
+{
+ GIVEN {
+ ASSUME(GetMoveType(MOVE_SCRATCH) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_MACHOP, 0) == TYPE_FIGHTING || GetSpeciesType(SPECIES_MACHOP, 1) == TYPE_FIGHTING);
+ ASSUME(GetMoveEffect(MOVE_SKILL_SWAP) == EFFECT_SKILL_SWAP);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_SALAMENCE) { Item(ITEM_SALAMENCITE); Moves(MOVE_SKILL_SWAP); }
+ OPPONENT(SPECIES_MACHOP);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SKILL_SWAP, gimmick: GIMMICK_MEGA, target: player); }
+ TURN { SWITCH(opponent, 1); MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player);
+ NOT { MESSAGE("It's super effective!"); }
+ }
+}
+
TO_DO_BATTLE_TEST("Aerilate doesn't affect Max Strike's type");
-TO_DO_BATTLE_TEST("Aerilate doesn't affect Terrain Pulse's type");
-TO_DO_BATTLE_TEST("Aerilate doesn't affect damaging Z-Move types");
TO_DO_BATTLE_TEST("(DYNAMAX) Aerilate turns Max Strike into Max Airstream"); // All other -ate abilities do this, so interpolating this as no Aerilate mon is available in a Dynamax game
diff --git a/test/battle/ability/anticipation.c b/test/battle/ability/anticipation.c
index d23cb0c6a5..c20153b1ea 100644
--- a/test/battle/ability/anticipation.c
+++ b/test/battle/ability/anticipation.c
@@ -75,12 +75,16 @@ SINGLE_BATTLE_TEST("Anticipation doesn't consider Scrappy into their effectivene
ASSUME(GetMoveType(MOVE_CLOSE_COMBAT) == TYPE_FIGHTING);
ASSUME(GetSpeciesType(SPECIES_DOUBLADE, 0) == TYPE_STEEL);
ASSUME(GetSpeciesType(SPECIES_DOUBLADE, 1) == TYPE_GHOST);
- PLAYER(SPECIES_DOUBLADE) { Ability(ABILITY_ANTICIPATION); }
- OPPONENT(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); Moves(MOVE_CLOSE_COMBAT, MOVE_CELEBRATE); }
+ PLAYER(SPECIES_WORMADAM_TRASH) { Ability(ABILITY_ANTICIPATION); Moves(MOVE_SKILL_SWAP, MOVE_CELEBRATE); }
+ PLAYER(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); Moves(MOVE_CLOSE_COMBAT, MOVE_CELEBRATE); }
+ OPPONENT(SPECIES_DOUBLADE) { Ability(ABILITY_NO_GUARD); Moves(MOVE_CELEBRATE); }
+ OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN {}
+ TURN { MOVE(player, MOVE_SKILL_SWAP, target: opponent); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { SWITCH(player, 1); SWITCH(opponent, 1); }
+ TURN { SWITCH(opponent, 0); }
} SCENE {
- NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION);
+ NOT ABILITY_POPUP(opponent, ABILITY_ANTICIPATION);
}
}
diff --git a/test/battle/ability/arena_trap.c b/test/battle/ability/arena_trap.c
index ef0d5b7d8c..0412b8f359 100644
--- a/test/battle/ability/arena_trap.c
+++ b/test/battle/ability/arena_trap.c
@@ -1,11 +1,141 @@
#include "global.h"
#include "test/battle.h"
-TO_DO_BATTLE_TEST("Arena Trap prevents grounded adjacent opponents from switching out");
-TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs if the Pokémon is switched in the same turn the opponent decided to switch out");
-TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs via moves that switch out"); // Baton Pass, U-Turn, Volt Switch, Flip Turn, Parting Shot
-TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs via Shed Shell, but not via Teleport");
-TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs via Run Away");
-TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs via Smoke Ball");
-TO_DO_BATTLE_TEST("Arena Trap prevents switch outs from Ghost-type Pokémon (Gen3-5)");
-TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs from Ghost-type Pokémon (Gen6+)");
+SINGLE_BATTLE_TEST("Arena Trap prevents grounded adjacent opponents from switching out")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_DIGLETT) { Ability(ABILITY_ARENA_TRAP); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); }
+ } THEN {
+ u32 battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ u32 trapper = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ EXPECT_EQ(IsAbilityPreventingEscape(battler), trapper + 1);
+ }
+}
+
+SINGLE_BATTLE_TEST("Arena Trap doesn't prevent switch outs if the Pokémon is switched in the same turn the opponent decided to switch out")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { Speed(10); }
+ PLAYER(SPECIES_WYNAUT) { Speed(10); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }
+ OPPONENT(SPECIES_DIGLETT) { Ability(ABILITY_ARENA_TRAP); Speed(5); }
+ } WHEN {
+ TURN { SWITCH(player, 1); SWITCH(opponent, 1); }
+ } SCENE {
+ SWITCH_OUT_MESSAGE("Wobbuffet");
+ SEND_IN_MESSAGE("Wynaut");
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_WYNAUT);
+ EXPECT_EQ(opponent->species, SPECIES_DIGLETT);
+ }
+}
+
+SINGLE_BATTLE_TEST("Arena Trap doesn't prevent switch outs via moves that switch out")
+{
+ u16 move, effect;
+ PARAMETRIZE { move = MOVE_BATON_PASS; effect = EFFECT_BATON_PASS; }
+ PARAMETRIZE { move = MOVE_U_TURN; effect = EFFECT_HIT_ESCAPE; }
+ PARAMETRIZE { move = MOVE_VOLT_SWITCH; effect = EFFECT_HIT_ESCAPE; }
+ PARAMETRIZE { move = MOVE_FLIP_TURN; effect = EFFECT_HIT_ESCAPE; }
+ PARAMETRIZE { move = MOVE_PARTING_SHOT; effect = EFFECT_PARTING_SHOT; }
+ PARAMETRIZE { move = MOVE_TELEPORT; effect = EFFECT_TELEPORT; }
+ PARAMETRIZE { move = MOVE_SHED_TAIL; effect = EFFECT_SHED_TAIL; }
+ PARAMETRIZE { move = MOVE_CHILLY_RECEPTION; effect = EFFECT_CHILLY_RECEPTION; }
+ GIVEN {
+ ASSUME(GetMoveEffect(move) == effect);
+ ASSUME(GetMoveEffect(MOVE_SOAK) == EFFECT_SOAK);
+ WITH_CONFIG(CONFIG_TELEPORT_BEHAVIOR, GEN_8);
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WYNAUT);
+ OPPONENT(SPECIES_DIGLETT) { Ability(ABILITY_ARENA_TRAP); }
+ } WHEN {
+ if (move == MOVE_VOLT_SWITCH)
+ TURN { MOVE(player, MOVE_SOAK); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, move); SEND_OUT(player, 1); }
+ } SCENE {
+ if (move == MOVE_VOLT_SWITCH)
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SOAK, player);
+ ANIMATION(ANIM_TYPE_MOVE, move, player);
+ SEND_IN_MESSAGE("Wynaut");
+ }
+}
+
+SINGLE_BATTLE_TEST("Arena Trap doesn't prevent switch outs via Shed Shell")
+{
+ GIVEN {
+ ASSUME(gItemsInfo[ITEM_SHED_SHELL].holdEffect == HOLD_EFFECT_SHED_SHELL);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SHED_SHELL); } // Grounded
+ PLAYER(SPECIES_WYNAUT);
+ OPPONENT(SPECIES_DIGLETT) { Ability(ABILITY_ARENA_TRAP); }
+ } WHEN {
+ TURN { SWITCH(player, 1); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ SWITCH_OUT_MESSAGE("Wobbuffet");
+ SEND_IN_MESSAGE("Wynaut");
+ }
+}
+
+WILD_BATTLE_TEST("Arena Trap prevents switching but Run Away allows fleeing")
+{
+ GIVEN {
+ PLAYER(SPECIES_RATTATA) { Ability(ABILITY_RUN_AWAY); }
+ OPPONENT(SPECIES_DIGLETT) { Ability(ABILITY_ARENA_TRAP); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); }
+ } THEN {
+ u32 battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ u32 trapper = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ EXPECT_EQ(IsAbilityPreventingEscape(battler), trapper + 1);
+ EXPECT_EQ(IsRunningFromBattleImpossible(battler), BATTLE_RUN_SUCCESS);
+ }
+}
+
+WILD_BATTLE_TEST("Arena Trap prevents switching but Smoke Ball allows fleeing")
+{
+ GIVEN {
+ ASSUME(gItemsInfo[ITEM_SMOKE_BALL].holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SMOKE_BALL); }
+ OPPONENT(SPECIES_DIGLETT) { Ability(ABILITY_ARENA_TRAP); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); }
+ } THEN {
+ u32 battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ u32 trapper = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ EXPECT_EQ(IsAbilityPreventingEscape(battler), trapper + 1);
+ EXPECT_EQ(IsRunningFromBattleImpossible(battler), BATTLE_RUN_SUCCESS);
+ }
+}
+
+SINGLE_BATTLE_TEST("Arena Trap prevents switch outs from Ghost-type Pokémon (Gen3-5)")
+{
+ GIVEN {
+ ASSUME(GetSpeciesType(SPECIES_SHUPPET, 0) == TYPE_GHOST);
+ WITH_CONFIG(CONFIG_GHOSTS_ESCAPE, GEN_5);
+ PLAYER(SPECIES_SHUPPET);
+ OPPONENT(SPECIES_DIGLETT) { Ability(ABILITY_ARENA_TRAP); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); }
+ } THEN {
+ u32 battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ u32 trapper = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ EXPECT_EQ(IsAbilityPreventingEscape(battler), trapper + 1);
+ }
+}
+
+SINGLE_BATTLE_TEST("Arena Trap doesn't prevent switch outs from Ghost-type Pokémon (Gen6+)")
+{
+ GIVEN {
+ ASSUME(GetSpeciesType(SPECIES_SHUPPET, 0) == TYPE_GHOST);
+ WITH_CONFIG(CONFIG_GHOSTS_ESCAPE, GEN_6);
+ PLAYER(SPECIES_SHUPPET);
+ OPPONENT(SPECIES_DIGLETT) { Ability(ABILITY_ARENA_TRAP); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); }
+ } THEN {
+ u32 battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ EXPECT_EQ(IsAbilityPreventingEscape(battler), 0);
+ }
+}
diff --git a/test/battle/ability/chlorophyll.c b/test/battle/ability/chlorophyll.c
index 84546dbe4c..66f7b9ccc9 100644
--- a/test/battle/ability/chlorophyll.c
+++ b/test/battle/ability/chlorophyll.c
@@ -36,6 +36,7 @@ SINGLE_BATTLE_TEST("Chlorophyll doesn't double speed if Cloud Nine/Air Lock is o
SINGLE_BATTLE_TEST("Chlorophyll doesn't double speed if they have an Utility Umbrella")
{
GIVEN {
+ ASSUME(gItemsInfo[ITEM_UTILITY_UMBRELLA].holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA);
PLAYER(SPECIES_VENUSAUR) { Ability(ABILITY_CHLOROPHYLL); Speed(100); Item(ITEM_UTILITY_UMBRELLA); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(199); }
} WHEN {
diff --git a/test/battle/ability/comatose.c b/test/battle/ability/comatose.c
index c049d5624d..3d20df3449 100644
--- a/test/battle/ability/comatose.c
+++ b/test/battle/ability/comatose.c
@@ -88,7 +88,91 @@ SINGLE_BATTLE_TEST("Comatose Pokémon don't get poisoned by Toxic Spikes on swit
}
}
-TO_DO_BATTLE_TEST("Comatose makes Rest fail")
-TO_DO_BATTLE_TEST("Comatose isn't affected by Mold Breaker, Turboblaze or Teravolt")
-TO_DO_BATTLE_TEST("Comatose isn't affected by Poison Touch + Sunsteel Strike")
-TO_DO_BATTLE_TEST("Comatose boosts Dream Ball's multiplier")
+SINGLE_BATTLE_TEST("Comatose makes Rest fail")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_REST) == EFFECT_REST);
+ PLAYER(SPECIES_KOMALA) { Ability(ABILITY_COMATOSE); HP(1); MaxHP(100); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_REST); }
+ } SCENE {
+ NONE_OF {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_REST, player);
+ HP_BAR(player);
+ }
+ } THEN {
+ EXPECT_EQ(player->hp, 1);
+ EXPECT_EQ(player->status1, STATUS1_NONE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Comatose isn't affected by Mold Breaker, Turboblaze or Teravolt")
+{
+ enum Ability ability;
+ u16 species;
+
+ PARAMETRIZE { ability = ABILITY_MOLD_BREAKER; species = SPECIES_PINSIR; }
+ PARAMETRIZE { ability = ABILITY_TURBOBLAZE; species = SPECIES_RESHIRAM; }
+ PARAMETRIZE { ability = ABILITY_TERAVOLT; species = SPECIES_ZEKROM; }
+
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS);
+ ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC);
+ PLAYER(SPECIES_KOMALA) { Ability(ABILITY_COMATOSE); }
+ OPPONENT(species) { Ability(ability); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_TOXIC); }
+ } SCENE {
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, opponent);
+ ABILITY_POPUP(player, ABILITY_COMATOSE);
+ MESSAGE("It doesn't affect Komala…");
+ } THEN {
+ EXPECT_EQ(player->status1, STATUS1_NONE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Comatose isn't affected by Poison Touch + Sunsteel Strike")
+{
+ GIVEN {
+ ASSUME(MoveIgnoresTargetAbility(MOVE_SUNSTEEL_STRIKE));
+ ASSUME(MoveMakesContact(MOVE_SUNSTEEL_STRIKE));
+ PLAYER(SPECIES_KOMALA) { Ability(ABILITY_COMATOSE); }
+ OPPONENT(SPECIES_CROAGUNK) { Ability(ABILITY_POISON_TOUCH); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SUNSTEEL_STRIKE, WITH_RNG(RNG_POISON_TOUCH, 1)); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNSTEEL_STRIKE, opponent);
+ HP_BAR(player);
+ NOT STATUS_ICON(player, poison: TRUE);
+ } THEN {
+ EXPECT_EQ(player->status1, STATUS1_NONE);
+ }
+}
+
+WILD_BATTLE_TEST("Comatose boosts Dream Ball's multiplier")
+{
+ enum Ability ability;
+ u16 species;
+ bool32 shouldCatch;
+ const u16 rng = 50000;
+
+ PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; shouldCatch = TRUE; }
+ PARAMETRIZE { species = SPECIES_MIMIKYU; ability = ABILITY_DISGUISE; shouldCatch = FALSE; }
+
+ GIVEN {
+ ASSUME(B_DREAM_BALL_MODIFIER >= GEN_8);
+ ASSUME(gSpeciesInfo[species].catchRate == 45);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(species) { Ability(ability); MaxHP(100); HP(1); }
+ } WHEN {
+ TURN { USE_ITEM(player, ITEM_DREAM_BALL, WITH_RNG(RNG_BALLTHROW_SHAKE, rng)); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_SPECIAL, B_ANIM_BALL_THROW, player);
+ } THEN {
+ if (shouldCatch)
+ EXPECT_EQ(gBattleResults.caughtMonSpecies, species);
+ else
+ EXPECT_EQ(gBattleResults.caughtMonSpecies, SPECIES_NONE);
+ }
+}
diff --git a/test/battle/ability/contrary.c b/test/battle/ability/contrary.c
index 577affeecb..5cc0c2ad3f 100644
--- a/test/battle/ability/contrary.c
+++ b/test/battle/ability/contrary.c
@@ -269,4 +269,22 @@ AI_SINGLE_BATTLE_TEST("AI sees Contrary-effected moves correctly in MoveEffectIn
}
}
-TO_DO_BATTLE_TEST("Contrary does not invert stat changes that have been Baton-passed")
+SINGLE_BATTLE_TEST("Contrary does not invert stat changes that have been Baton-passed")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_SWORDS_DANCE) == EFFECT_ATTACK_UP_2);
+ ASSUME(GetMoveEffect(MOVE_BATON_PASS) == EFFECT_BATON_PASS);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_SNIVY) { Ability(ABILITY_CONTRARY); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SWORDS_DANCE); }
+ TURN { MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent);
+ MESSAGE("2 sent out Snivy!");
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2);
+ }
+}
diff --git a/test/battle/ability/costar.c b/test/battle/ability/costar.c
index bc06ac26a7..09a6de4e9a 100644
--- a/test/battle/ability/costar.c
+++ b/test/battle/ability/costar.c
@@ -119,5 +119,60 @@ DOUBLE_BATTLE_TEST("Costar copies an ally's Dragon Cheer critical hit boost")
}
// Copy from Ruin ability tests
-TO_DO_BATTLE_TEST("Costar's message displays correctly after all battlers fainted - Player");
-TO_DO_BATTLE_TEST("Costar's message displays correctly after all battlers fainted - Opponent");
+DOUBLE_BATTLE_TEST("Costar's message displays correctly after all battlers fainted - Player")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
+ PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
+ PLAYER(SPECIES_FLAMIGO) { Ability(ABILITY_COSTAR); }
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN {
+ MOVE(opponentLeft, MOVE_EXPLOSION);
+ SEND_OUT(playerLeft, 2);
+ SEND_OUT(opponentLeft, 2);
+ SEND_OUT(playerRight, 3);
+ SEND_OUT(opponentRight, 3);
+ }
+ } SCENE {
+ MESSAGE("The opposing Wobbuffet used Explosion!");
+ ABILITY_POPUP(playerLeft, ABILITY_INTREPID_SWORD);
+ MESSAGE("Zacian's Intrepid Sword raised its Attack!");
+ ABILITY_POPUP(playerRight, ABILITY_COSTAR);
+ MESSAGE("Flamigo copied Zacian's stat changes!");
+ }
+}
+
+DOUBLE_BATTLE_TEST("Costar's message displays correctly after all battlers fainted - Opponent")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
+ OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
+ OPPONENT(SPECIES_FLAMIGO) { Ability(ABILITY_COSTAR); }
+ } WHEN {
+ TURN {
+ MOVE(playerLeft, MOVE_EXPLOSION);
+ SEND_OUT(playerLeft, 2);
+ SEND_OUT(opponentLeft, 2);
+ SEND_OUT(playerRight, 3);
+ SEND_OUT(opponentRight, 3);
+ }
+ } SCENE {
+ MESSAGE("Wobbuffet used Explosion!");
+ ABILITY_POPUP(opponentLeft, ABILITY_INTREPID_SWORD);
+ MESSAGE("The opposing Zacian's Intrepid Sword raised its Attack!");
+ ABILITY_POPUP(opponentRight, ABILITY_COSTAR);
+ MESSAGE("The opposing Flamigo copied the opposing Zacian's stat changes!");
+ }
+}
diff --git a/test/battle/ability/cud_chew.c b/test/battle/ability/cud_chew.c
index 809d9f1d7c..9f7c3902a9 100644
--- a/test/battle/ability/cud_chew.c
+++ b/test/battle/ability/cud_chew.c
@@ -48,4 +48,28 @@ SINGLE_BATTLE_TEST("Cud Chew will activate Oran Berry effect again on the next t
}
}
-TO_DO_BATTLE_TEST("Cud Chew will activate Lum Berry effect again on the next turn")
+SINGLE_BATTLE_TEST("Cud Chew will activate Lum Berry effect again on the next turn")
+{
+ GIVEN {
+ ASSUME(gItemsInfo[ITEM_LUM_BERRY].holdEffect == HOLD_EFFECT_CURE_STATUS);
+ ASSUME(GetMoveEffect(MOVE_THUNDER_WAVE) == EFFECT_NON_VOLATILE_STATUS);
+ ASSUME(GetMoveNonVolatileStatus(MOVE_THUNDER_WAVE) == MOVE_EFFECT_PARALYSIS);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_TAUROS_PALDEA_COMBAT) { Ability(ABILITY_CUD_CHEW); Item(ITEM_LUM_BERRY); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_THUNDER_WAVE); }
+ TURN { MOVE(player, MOVE_THUNDER_WAVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_WAVE, player);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponent);
+ STATUS_ICON(opponent, paralysis: TRUE);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
+ STATUS_ICON(opponent, paralysis: FALSE);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_WAVE, player);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponent);
+ STATUS_ICON(opponent, paralysis: TRUE);
+ ABILITY_POPUP(opponent, ABILITY_CUD_CHEW);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
+ STATUS_ICON(opponent, paralysis: FALSE);
+ }
+}
diff --git a/test/battle/ability/cursed_body.c b/test/battle/ability/cursed_body.c
index b3bc886a3d..82d2606ef1 100644
--- a/test/battle/ability/cursed_body.c
+++ b/test/battle/ability/cursed_body.c
@@ -87,6 +87,46 @@ SINGLE_BATTLE_TEST("Cursed Body does not stop a multistrike move mid-execution")
}
}
-TO_DO_BATTLE_TEST("Cursed Body disables the move that called another move instead of the called move")
-TO_DO_BATTLE_TEST("Cursed Body disables damaging Z-Moves, but not the base move") // Rotom Powers can restore Z-Moves
-TO_DO_BATTLE_TEST("Cursed Body disables the base move of a status Z-Move")
+SINGLE_BATTLE_TEST("Cursed Body disables the move that called another move instead of the called move")
+{
+ PASSES_RANDOMLY(3, 10, RNG_CURSED_BODY);
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_SLEEP_TALK) == EFFECT_SLEEP_TALK);
+ ASSUME(GetMoveType(MOVE_SHADOW_BALL) == TYPE_GHOST);
+ ASSUME(IsMoveSleepTalkBanned(MOVE_FLY));
+ ASSUME(IsMoveSleepTalkBanned(MOVE_DIG));
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); Moves(MOVE_SLEEP_TALK, MOVE_SHADOW_BALL, MOVE_FLY, MOVE_DIG); }
+ OPPONENT(SPECIES_FRILLISH) { Ability(ABILITY_CURSED_BODY); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_SLEEP_TALK); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, player);
+ ABILITY_POPUP(opponent, ABILITY_CURSED_BODY);
+ MESSAGE("Wobbuffet's Sleep Talk was disabled by the opposing Frillish's Cursed Body!");
+ } THEN {
+ EXPECT_EQ(gDisableStructs[B_POSITION_PLAYER_LEFT].disabledMove, MOVE_SLEEP_TALK);
+ }
+}
+
+SINGLE_BATTLE_TEST("Cursed Body disables the base move of a status Z-Move")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_NATURE_POWER) == EFFECT_NATURE_POWER);
+ ASSUME(GetMoveEffect(MOVE_ELECTRIC_TERRAIN) == EFFECT_ELECTRIC_TERRAIN);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_FRILLISH) { Ability(ABILITY_CURSED_BODY); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_ELECTRIC_TERRAIN); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_NATURE_POWER, gimmick: GIMMICK_Z_MOVE, WITH_RNG(RNG_CURSED_BODY, 1)); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIC_TERRAIN, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ HP_BAR(opponent);
+ ABILITY_POPUP(opponent, ABILITY_CURSED_BODY);
+ MESSAGE("Wobbuffet's Nature Power was disabled by the opposing Frillish's Cursed Body!");
+ } THEN {
+ EXPECT_EQ(gDisableStructs[B_POSITION_PLAYER_LEFT].disabledMove, MOVE_NATURE_POWER);
+ }
+}
+
+TO_DO_BATTLE_TEST("Cursed Body disables damaging Z-Moves, but not the base move")
diff --git a/test/battle/ability/dancer.c b/test/battle/ability/dancer.c
index 2fb870ea51..075a3e46a5 100644
--- a/test/battle/ability/dancer.c
+++ b/test/battle/ability/dancer.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "test/battle.h"
+#include "constants/battle_z_move_effects.h"
SINGLE_BATTLE_TEST("Dancer can copy a dance move immediately after it was used and allow the user of Dancer to still use its move")
{
@@ -79,8 +80,59 @@ DOUBLE_BATTLE_TEST("Dancer triggers from slowest to fastest")
}
}
-TO_DO_BATTLE_TEST("Dancer triggers from slowest to fastest during Trick Room")
-TO_DO_BATTLE_TEST("Dancer triggering ignores Lagging Tail")
+DOUBLE_BATTLE_TEST("Dancer triggers from slowest to fastest during Trick Room")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TRICK_ROOM) == EFFECT_TRICK_ROOM);
+ ASSUME(IsDanceMove(MOVE_DRAGON_DANCE));
+ PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(10); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(20); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(5); }
+ } WHEN {
+ TURN { MOVE(playerRight, MOVE_TRICK_ROOM); }
+ TURN { MOVE(playerRight, MOVE_DRAGON_DANCE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TRICK_ROOM, playerRight);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
+ ABILITY_POPUP(opponentRight, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentRight);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
+ ABILITY_POPUP(playerLeft, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerLeft);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
+ ABILITY_POPUP(opponentLeft, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
+ }
+}
+
+DOUBLE_BATTLE_TEST("Dancer triggering ignores Lagging Tail")
+{
+ GIVEN {
+ ASSUME(IsDanceMove(MOVE_DRAGON_DANCE));
+ ASSUME(gItemsInfo[ITEM_LAGGING_TAIL].holdEffect == HOLD_EFFECT_LAGGING_TAIL);
+ PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(10); Item(ITEM_LAGGING_TAIL); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(30); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(5); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(20); }
+ } WHEN {
+ TURN { MOVE(playerRight, MOVE_DRAGON_DANCE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
+ ABILITY_POPUP(opponentLeft, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
+ ABILITY_POPUP(playerLeft, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerLeft);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
+ ABILITY_POPUP(opponentRight, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentRight);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
+ }
+}
SINGLE_BATTLE_TEST("Dancer doesn't trigger if the original user flinches")
{
@@ -194,8 +246,54 @@ DOUBLE_BATTLE_TEST("Dancer doesn't trigger on a snatched move")
}
}
-TO_DO_BATTLE_TEST("Dancer-called moves can be snatched")
-TO_DO_BATTLE_TEST("Dancer-called moves can be reflected by Magic Bounce/Coat")
+DOUBLE_BATTLE_TEST("Dancer doesn't trigger when an ally snatches the move")
+{
+ GIVEN {
+ ASSUME(IsDanceMove(MOVE_DRAGON_DANCE));
+ ASSUME(GetMoveEffect(MOVE_SNATCH) == EFFECT_SNATCH);
+ ASSUME(MoveCanBeSnatched(MOVE_DRAGON_DANCE));
+ PLAYER(SPECIES_WOBBUFFET) { Speed(30); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(20); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(10); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_SNATCH); MOVE(playerRight, MOVE_DRAGON_DANCE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SNATCH, playerLeft);
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerLeft);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
+ NONE_OF {
+ ABILITY_POPUP(opponentLeft, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
+ }
+ } THEN {
+ EXPECT_EQ(playerLeft->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1);
+ EXPECT_EQ(playerLeft->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1);
+ }
+}
+
+SINGLE_BATTLE_TEST("Dancer-called moves can be reflected by Magic Bounce")
+{
+ GIVEN {
+ ASSUME(IsDanceMove(MOVE_FEATHER_DANCE));
+ PLAYER(SPECIES_ESPEON) { Ability(ABILITY_MAGIC_BOUNCE); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_FEATHER_DANCE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FEATHER_DANCE, player);
+ ABILITY_POPUP(opponent, ABILITY_DANCER);
+ ABILITY_POPUP(player, ABILITY_MAGIC_BOUNCE);
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FEATHER_DANCE, opponent);
+ MESSAGE("The opposing Oricorio's Feather Dance was bounced back by Espeon's Magic Bounce!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FEATHER_DANCE, player);
+ } THEN {
+ EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE);
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 4);
+ }
+}
DOUBLE_BATTLE_TEST("Dancer triggers on Instructed dance moves")
{
@@ -252,8 +350,61 @@ DOUBLE_BATTLE_TEST("Dancer-called move doesn't update move to be Instructed")
}
}
-TO_DO_BATTLE_TEST("Dancer-called moves doesn't update move to be called by Mimick")
-TO_DO_BATTLE_TEST("Dancer-called moves doesn't update move to be called by Mirror Move")
+DOUBLE_BATTLE_TEST("Dancer-called moves do not update move to be called by Mimic")
+{
+ GIVEN {
+ ASSUME(IsDanceMove(MOVE_DRAGON_DANCE));
+ ASSUME(GetMoveEffect(MOVE_MIMIC) == EFFECT_MIMIC);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(10); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(30); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(50); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }
+ } WHEN {
+ TURN {
+ MOVE(opponentLeft, MOVE_SCRATCH, target: playerLeft);
+ MOVE(playerRight, MOVE_DRAGON_DANCE);
+ MOVE(playerLeft, MOVE_MIMIC, target: opponentLeft);
+ }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponentLeft);
+ HP_BAR(playerLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
+ ABILITY_POPUP(opponentLeft, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_MIMIC, playerLeft);
+ MESSAGE("Wobbuffet learned Scratch!");
+ NOT MESSAGE("Wobbuffet learned Dragon Dance!");
+ }
+}
+
+DOUBLE_BATTLE_TEST("Dancer-called moves doesn't update move to be called by Mirror Move")
+{
+ GIVEN {
+ ASSUME(IsDanceMove(MOVE_DRAGON_DANCE));
+ ASSUME(GetMoveEffect(MOVE_MIRROR_MOVE) == EFFECT_MIRROR_MOVE);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(10); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(30); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(50); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }
+ } WHEN {
+ TURN { MOVE(opponentLeft, MOVE_SCRATCH, target: playerLeft); MOVE(playerRight, MOVE_DRAGON_DANCE); }
+ TURN { MOVE(playerLeft, MOVE_MIRROR_MOVE, target: opponentLeft); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponentLeft);
+ HP_BAR(playerLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
+ ABILITY_POPUP(opponentLeft, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
+ MESSAGE("Wobbuffet used Mirror Move!");
+ MESSAGE("Wobbuffet used Scratch!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, playerLeft);
+ NOT MESSAGE("Wobbuffet used Dragon Dance!");
+ }
+}
DOUBLE_BATTLE_TEST("Dancer doesn't call a move that didn't execute due to Powder")
{
@@ -306,7 +457,7 @@ DOUBLE_BATTLE_TEST("Dancer still activates after Red Card")
DOUBLE_BATTLE_TEST("Dancer still activate after Red Card even if blocked by Suction Cups")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SUCTION_CUPS); }
+ PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_SUCTION_CUPS); }
PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); }
PLAYER(SPECIES_CHANSEY);
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); }
@@ -315,13 +466,13 @@ DOUBLE_BATTLE_TEST("Dancer still activate after Red Card even if blocked by Suct
} WHEN {
TURN { MOVE(playerLeft, MOVE_FIERY_DANCE, target: opponentLeft); }
} SCENE {
- MESSAGE("Wobbuffet used Fiery Dance!");
+ MESSAGE("Octillery used Fiery Dance!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerLeft);
HP_BAR(opponentLeft);
// red card trigger
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft);
- MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!");
- MESSAGE("Wobbuffet anchors itself with Suction Cups!");
+ MESSAGE("The opposing Wobbuffet held up its Red Card against Octillery!");
+ MESSAGE("Octillery anchors itself with Suction Cups!");
NOT MESSAGE("Chansey was dragged out!");
// Dancer
ABILITY_POPUP(playerRight, ABILITY_DANCER);
@@ -364,15 +515,292 @@ DOUBLE_BATTLE_TEST("Dancer correctly restores move targets")
}
}
-TO_DO_BATTLE_TEST("Dancer-called damaging moves are considered for Counter/Mirror Coat/Metal Burst")
+DOUBLE_BATTLE_TEST("Dancer-called damaging moves are considered for Counter/Mirror Coat/Metal Burst")
+{
+ u32 danceMove, retaliateMove;
-TO_DO_BATTLE_TEST("Dancer copies a status Z-Move's base move without gaining an additional Z-Power effect")
-TO_DO_BATTLE_TEST("Dancer user may hit itself in confusion instead of copying a move if it's confused")
-TO_DO_BATTLE_TEST("Dancer tries to copy a move but fails if it's being forced into a different move - Rampage move") // Test with Petal Dance, Thrash
-TO_DO_BATTLE_TEST("Dancer tries to copy a move but fails if it's being forced into a different move - Rollout")
-TO_DO_BATTLE_TEST("Dancer tries to copy a move but fails if it's being forced into a different move - Choice items")
-TO_DO_BATTLE_TEST("Dancer tries to copy a move but fails if it's being forced into a different move - Encore")
-TO_DO_BATTLE_TEST("Dancer tries to copy a status move but fails if it's under Taunt's effect")
-TO_DO_BATTLE_TEST("Dancer can still copy status moves if the user is holding an Assault Vest")
-TO_DO_BATTLE_TEST("Dancer copies Lunar Dance after the original user faints, but before the replacement is sent out")
-TO_DO_BATTLE_TEST("Dancer doesn't activate Feather Dance if it was reflected by Magic Bounce/Coat")
+ PARAMETRIZE { danceMove = MOVE_AQUA_STEP; retaliateMove = MOVE_COUNTER; }
+ PARAMETRIZE { danceMove = MOVE_FIERY_DANCE; retaliateMove = MOVE_MIRROR_COAT; }
+ PARAMETRIZE { danceMove = MOVE_FIERY_DANCE; retaliateMove = MOVE_METAL_BURST; }
+
+ GIVEN {
+ ASSUME(IsDanceMove(danceMove));
+ if (retaliateMove == MOVE_COUNTER)
+ ASSUME(GetMoveCategory(danceMove) == DAMAGE_CATEGORY_PHYSICAL);
+ else if (retaliateMove == MOVE_MIRROR_COAT)
+ ASSUME(GetMoveCategory(danceMove) == DAMAGE_CATEGORY_SPECIAL);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(30); }
+ PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(20); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(10); }
+ } WHEN {
+ TURN { MOVE(playerLeft, danceMove, target: opponentLeft); MOVE(opponentLeft, retaliateMove); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, danceMove, playerLeft);
+ HP_BAR(opponentLeft);
+ ABILITY_POPUP(playerRight, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, danceMove, playerRight);
+ HP_BAR(opponentLeft);
+ ANIMATION(ANIM_TYPE_MOVE, retaliateMove, opponentLeft);
+ HP_BAR(playerRight);
+ NOT HP_BAR(playerLeft);
+ }
+}
+
+SINGLE_BATTLE_TEST("Dancer copies a status Z-Move's base move without gaining an additional Z-Power effect")
+{
+ GIVEN {
+ ASSUME(IsDanceMove(MOVE_SWORDS_DANCE));
+ ASSUME(GetMoveEffect(MOVE_SCREECH) == EFFECT_DEFENSE_DOWN_2);
+ ASSUME(GetMoveZEffect(MOVE_SWORDS_DANCE) == Z_EFFECT_RESET_STATS);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_SCREECH); }
+ TURN { MOVE(player, MOVE_SWORDS_DANCE, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SCREECH, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
+ ABILITY_POPUP(opponent, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 2);
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2);
+ }
+}
+
+SINGLE_BATTLE_TEST("Dancer user may hit itself in confusion instead of copying a move if it's confused")
+{
+ u32 genConfig, pctChance;
+
+ PARAMETRIZE { genConfig = GEN_6; pctChance = 50; }
+ PARAMETRIZE { genConfig = GEN_7; pctChance = 33; }
+ PASSES_RANDOMLY(pctChance, 100, RNG_CONFUSION);
+ GIVEN {
+ WITH_CONFIG(CONFIG_CONFUSION_SELF_DMG_CHANCE, genConfig);
+ ASSUME(IsDanceMove(MOVE_DRAGON_DANCE));
+ ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(30); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(10); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CONFUSE_RAY); }
+ TURN { MOVE(player, MOVE_DRAGON_DANCE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player);
+ MESSAGE("The opposing Oricorio became confused!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
+ ABILITY_POPUP(opponent, ABILITY_DANCER);
+ MESSAGE("The opposing Oricorio is confused!");
+ MESSAGE("It hurt itself in its confusion!");
+ HP_BAR(opponent);
+ NONE_OF {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ }
+ }
+}
+
+SINGLE_BATTLE_TEST("Dancer can still copy a move even if it's being forced into a different move - Rampage move")
+{
+ GIVEN {
+ ASSUME(IsDanceMove(MOVE_SWORDS_DANCE));
+ ASSUME(IsDanceMove(MOVE_PETAL_DANCE));
+ ASSUME(MoveHasAdditionalEffectSelf(MOVE_PETAL_DANCE, MOVE_EFFECT_THRASH));
+ PLAYER(SPECIES_WOBBUFFET) { Speed(30); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(10); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_PETAL_DANCE); }
+ TURN { MOVE(player, MOVE_SWORDS_DANCE); FORCED_MOVE(opponent); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_PETAL_DANCE, opponent);
+ HP_BAR(player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
+ ABILITY_POPUP(opponent, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2);
+ }
+}
+
+SINGLE_BATTLE_TEST("Dancer can still copy a move even if it's being forced into a different move - Rollout")
+{
+ GIVEN {
+ ASSUME(IsDanceMove(MOVE_SWORDS_DANCE));
+ ASSUME(GetMoveEffect(MOVE_ROLLOUT) == EFFECT_ROLLOUT);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(30); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(10); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_ROLLOUT); }
+ TURN { MOVE(player, MOVE_SWORDS_DANCE); FORCED_MOVE(opponent); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ROLLOUT, opponent);
+ HP_BAR(player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
+ ABILITY_POPUP(opponent, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2);
+ }
+}
+
+SINGLE_BATTLE_TEST("Dancer can still copy a move even if it's being forced into a different move - Choice items")
+{
+ GIVEN {
+ ASSUME(IsDanceMove(MOVE_SWORDS_DANCE));
+ ASSUME(GetItemHoldEffect(ITEM_CHOICE_BAND) == HOLD_EFFECT_CHOICE_BAND);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(30); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(10); Item(ITEM_CHOICE_BAND); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SCRATCH); }
+ TURN { MOVE(player, MOVE_SWORDS_DANCE); MOVE(opponent, MOVE_SCRATCH); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
+ HP_BAR(player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
+ ABILITY_POPUP(opponent, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2);
+ }
+}
+
+SINGLE_BATTLE_TEST("Dancer can still copy a move even if it's being forced into a different move - Encore")
+{
+ GIVEN {
+ ASSUME(IsDanceMove(MOVE_SWORDS_DANCE));
+ ASSUME(GetMoveEffect(MOVE_ENCORE) == EFFECT_ENCORE);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(30); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(10); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SCRATCH); }
+ TURN { MOVE(player, MOVE_ENCORE, target: opponent); MOVE(opponent, MOVE_SCRATCH); }
+ TURN { MOVE(player, MOVE_SWORDS_DANCE); MOVE(opponent, MOVE_SCRATCH); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
+ HP_BAR(player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, player);
+ MESSAGE("The opposing Oricorio must do an encore!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
+ ABILITY_POPUP(opponent, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2);
+ }
+}
+
+SINGLE_BATTLE_TEST("Dancer tries to copy a status move but fails if it's under Taunt's effect")
+{
+ GIVEN {
+ ASSUME(IsDanceMove(MOVE_SWORDS_DANCE));
+ ASSUME(GetMoveEffect(MOVE_TAUNT) == EFFECT_TAUNT);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(30); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(10); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TAUNT); }
+ TURN { MOVE(player, MOVE_SWORDS_DANCE); MOVE(opponent, MOVE_SCRATCH); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TAUNT, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
+ ABILITY_POPUP(opponent, ABILITY_DANCER);
+ NONE_OF {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ }
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Dancer can still copy status moves if the user is holding an Assault Vest")
+{
+ GIVEN {
+ ASSUME(IsDanceMove(MOVE_SWORDS_DANCE));
+ ASSUME(GetItemHoldEffect(ITEM_ASSAULT_VEST) == HOLD_EFFECT_ASSAULT_VEST);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(30); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(10); Item(ITEM_ASSAULT_VEST); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_SWORDS_DANCE); MOVE(opponent, MOVE_SCRATCH); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
+ ABILITY_POPUP(opponent, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2);
+ }
+}
+
+DOUBLE_BATTLE_TEST("Dancer copies Lunar Dance after the original user faints, but before the replacement is sent out")
+{
+ GIVEN {
+ WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_7);
+ ASSUME(GetMoveEffect(MOVE_LUNAR_DANCE) == EFFECT_LUNAR_DANCE);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(50); }
+ PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(20); }
+ PLAYER(SPECIES_WYNAUT) { Speed(5); }
+ PLAYER(SPECIES_CHANSEY) { Speed(5); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(10); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(10); }
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_LUNAR_DANCE); SEND_OUT(playerLeft, 2); SEND_OUT(playerRight, 3); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_LUNAR_DANCE, playerLeft);
+ HP_BAR(playerLeft, hp: 0);
+ MESSAGE("Wobbuffet fainted!");
+ ABILITY_POPUP(playerRight, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_LUNAR_DANCE, playerRight);
+ HP_BAR(playerRight, hp: 0);
+ MESSAGE("Oricorio fainted!");
+ SEND_IN_MESSAGE("Wynaut");
+ SEND_IN_MESSAGE("Chansey");
+ }
+}
+
+DOUBLE_BATTLE_TEST("Dancer doesn't activate Feather Dance if it was reflected by Magic Bounce/Coat")
+{
+ bool32 useMagicCoat;
+
+ PARAMETRIZE { useMagicCoat = FALSE; }
+ PARAMETRIZE { useMagicCoat = TRUE; }
+ GIVEN {
+ ASSUME(IsDanceMove(MOVE_FEATHER_DANCE));
+ ASSUME(GetMoveEffect(MOVE_MAGIC_COAT) == EFFECT_MAGIC_COAT);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(20); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(10); }
+ if (useMagicCoat)
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(30); }
+ else
+ OPPONENT(SPECIES_ESPEON) { Ability(ABILITY_MAGIC_BOUNCE); Speed(30); }
+ OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(5); }
+ } WHEN {
+ if (useMagicCoat)
+ TURN { MOVE(opponentLeft, MOVE_MAGIC_COAT); MOVE(playerLeft, MOVE_FEATHER_DANCE, target: opponentLeft); }
+ else
+ TURN { MOVE(playerLeft, MOVE_FEATHER_DANCE, target: opponentLeft); }
+ } SCENE {
+ if (useMagicCoat)
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, opponentLeft);
+ else
+ ABILITY_POPUP(opponentLeft, ABILITY_MAGIC_BOUNCE);
+ NONE_OF {
+ ABILITY_POPUP(opponentRight, ABILITY_DANCER);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FEATHER_DANCE, opponentRight);
+ }
+ } THEN {
+ EXPECT_EQ(playerLeft->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 2);
+ }
+}
diff --git a/test/battle/ability/dazzling.c b/test/battle/ability/dazzling.c
index e5dd6bb37d..f54f024452 100644
--- a/test/battle/ability/dazzling.c
+++ b/test/battle/ability/dazzling.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "test/battle.h"
+#include "constants/battle_z_move_effects.h"
ASSUMPTIONS
{
@@ -124,11 +125,154 @@ SINGLE_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail prevent Protean act
// Listed on Bulbapedia as "Moves that target all Pokémon (except Perish Song, Flower Shield, and Rototiller),"
// Despite the fact that there's only 2 remaining moves from that list, being Haze and Teatime
-TO_DO_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail do not block Haze")
-TO_DO_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail do not block Teatime")
+SINGLE_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail do not block Haze")
+{
+ u32 species;
+ enum Ability ability;
-TO_DO_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail do not block a move's Z-Status effect") // Z-Baby-Doll eyes increases Def but doesn't reduce Atk
-TO_DO_BATTLE_TEST("Mold Breaker ignores Dazzling, Queenly Majesty and Armor Tail")
-TO_DO_BATTLE_TEST("Instruct-called moves keep their priority, which is considered for Dazzling, Queenly Majesty and Armor Tail")
+ PARAMETRIZE { species = SPECIES_BRUXISH; ability = ABILITY_DAZZLING; }
+ PARAMETRIZE { species = SPECIES_FARIGIRAF; ability = ABILITY_ARMOR_TAIL; }
+ PARAMETRIZE { species = SPECIES_TSAREENA; ability = ABILITY_QUEENLY_MAJESTY; }
-TO_DO_BATTLE_TEST(" Dazzling, Queenly Majesty and Armor Tail do not block high-priority moves called by other moves") // Metronome, Assist, Nature Power, etc.
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_HAZE) == EFFECT_HAZE);
+ PLAYER(SPECIES_MURKROW) { Ability(ABILITY_PRANKSTER); }
+ OPPONENT(species) { Ability(ability); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_SWORDS_DANCE); }
+ TURN { MOVE(player, MOVE_HAZE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_HAZE, player);
+ NOT ABILITY_POPUP(opponent, ability);
+ } THEN {
+ EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail do not block Teatime")
+{
+ u32 species;
+ enum Ability ability;
+
+ PARAMETRIZE { species = SPECIES_BRUXISH; ability = ABILITY_DAZZLING; }
+ PARAMETRIZE { species = SPECIES_FARIGIRAF; ability = ABILITY_ARMOR_TAIL; }
+ PARAMETRIZE { species = SPECIES_TSAREENA; ability = ABILITY_QUEENLY_MAJESTY; }
+
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TEATIME) == EFFECT_TEATIME);
+ ASSUME(GetItemHoldEffect(ITEM_ORAN_BERRY) == HOLD_EFFECT_RESTORE_HP);
+ PLAYER(SPECIES_MURKROW) { Ability(ABILITY_PRANKSTER); Item(ITEM_ORAN_BERRY); HP(1); MaxHP(100); }
+ OPPONENT(species) { Ability(ability); Item(ITEM_ORAN_BERRY); HP(1); MaxHP(100); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TEATIME); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, player);
+ NOT ABILITY_POPUP(opponent, ability);
+ } THEN {
+ EXPECT_EQ(player->item, ITEM_NONE);
+ EXPECT_EQ(opponent->item, ITEM_NONE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail do not block a move's Z-Status effect")
+{
+ u32 species;
+ enum Ability ability;
+
+ PARAMETRIZE { species = SPECIES_BRUXISH; ability = ABILITY_DAZZLING; }
+ PARAMETRIZE { species = SPECIES_FARIGIRAF; ability = ABILITY_ARMOR_TAIL; }
+ PARAMETRIZE { species = SPECIES_TSAREENA; ability = ABILITY_QUEENLY_MAJESTY; }
+
+ GIVEN {
+ ASSUME(GetMoveZEffect(MOVE_BABY_DOLL_EYES) == Z_EFFECT_DEF_UP_1);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_FAIRIUM_Z); }
+ OPPONENT(species) { Ability(ability); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_BABY_DOLL_EYES, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ABILITY_POPUP(opponent, ability);
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_BABY_DOLL_EYES, player);
+ } THEN {
+ EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1);
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Mold Breaker ignores Dazzling, Queenly Majesty and Armor Tail")
+{
+ u32 species;
+ enum Ability ability;
+
+ PARAMETRIZE { species = SPECIES_BRUXISH; ability = ABILITY_DAZZLING; }
+ PARAMETRIZE { species = SPECIES_FARIGIRAF; ability = ABILITY_ARMOR_TAIL; }
+ PARAMETRIZE { species = SPECIES_TSAREENA; ability = ABILITY_QUEENLY_MAJESTY; }
+
+ GIVEN {
+ PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); }
+ OPPONENT(species) { Ability(ability); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_QUICK_ATTACK); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player);
+ HP_BAR(opponent);
+ NOT ABILITY_POPUP(opponent, ability);
+ }
+}
+
+DOUBLE_BATTLE_TEST("Instruct-called moves keep their priority, which is considered for Dazzling, Queenly Majesty and Armor Tail")
+{
+ u32 species;
+ enum Ability ability;
+
+ PARAMETRIZE { species = SPECIES_BRUXISH; ability = ABILITY_DAZZLING; }
+ PARAMETRIZE { species = SPECIES_FARIGIRAF; ability = ABILITY_ARMOR_TAIL; }
+ PARAMETRIZE { species = SPECIES_TSAREENA; ability = ABILITY_QUEENLY_MAJESTY; }
+
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_INSTRUCT) == EFFECT_INSTRUCT);
+ ASSUME(GetItemHoldEffect(ITEM_EJECT_BUTTON) == HOLD_EFFECT_EJECT_BUTTON);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(10); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(30); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); Speed(20); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }
+ OPPONENT(species) { Ability(ability); Speed(15); }
+ } WHEN {
+ TURN { MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentLeft); MOVE(playerLeft, MOVE_INSTRUCT, target: playerRight); SEND_OUT(opponentLeft, 2); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, playerRight);
+ HP_BAR(opponentLeft);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft);
+ MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerLeft);
+ ABILITY_POPUP(opponentLeft, ability);
+ MESSAGE("Wobbuffet cannot use Quick Attack!");
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, playerRight);
+ }
+}
+
+SINGLE_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail do not block high-priority moves called by other moves")
+{
+ u32 species;
+ enum Ability ability;
+
+ PARAMETRIZE { species = SPECIES_BRUXISH; ability = ABILITY_DAZZLING; }
+ PARAMETRIZE { species = SPECIES_FARIGIRAF; ability = ABILITY_ARMOR_TAIL; }
+ PARAMETRIZE { species = SPECIES_TSAREENA; ability = ABILITY_QUEENLY_MAJESTY; }
+
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_METRONOME) == EFFECT_METRONOME);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(species) { Ability(ability); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_METRONOME, WITH_RNG(RNG_METRONOME, MOVE_QUICK_ATTACK)); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Metronome!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_METRONOME, player);
+ MESSAGE("Waggling a finger let it use Quick Attack!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player);
+ HP_BAR(opponent);
+ NOT ABILITY_POPUP(opponent, ability);
+ }
+}
diff --git a/test/battle/ability/disguise.c b/test/battle/ability/disguise.c
index 24a6a2d5ce..a874ec254c 100644
--- a/test/battle/ability/disguise.c
+++ b/test/battle/ability/disguise.c
@@ -104,7 +104,24 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu takes damage from secondary damage without
}
}
-TO_DO_BATTLE_TEST("Disguised Mimikyu takes damage from secondary damage without breaking the disguise - Weather")
+SINGLE_BATTLE_TEST("Disguised Mimikyu takes damage from secondary damage without breaking the disguise - Weather")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_SANDSTORM) == EFFECT_SANDSTORM);
+ ASSUME(GetSpeciesType(SPECIES_GEODUDE, 0) == TYPE_ROCK || GetSpeciesType(SPECIES_GEODUDE, 1) == TYPE_ROCK);
+ PLAYER(SPECIES_GEODUDE);
+ PLAYER(SPECIES_MIMIKYU_DISGUISED) { Ability(ABILITY_DISGUISE); }
+ OPPONENT(SPECIES_GEODUDE);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SANDSTORM); }
+ TURN { SWITCH(player, 1); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SANDSTORM, opponent);
+ HP_BAR(player);
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_MIMIKYU_DISGUISED);
+ }
+}
SINGLE_BATTLE_TEST("Disguised Mimikyu takes damage from Rocky Helmet without breaking the disguise")
{
diff --git a/test/battle/ability/dry_skin.c b/test/battle/ability/dry_skin.c
index aab5658618..7de0f82acf 100644
--- a/test/battle/ability/dry_skin.c
+++ b/test/battle/ability/dry_skin.c
@@ -15,7 +15,28 @@ SINGLE_BATTLE_TEST("Dry Skin causes 1/8th Max HP damage in Sun")
}
}
-TO_DO_BATTLE_TEST("Dry Skin doesn't get damaged in Sun if Cloud Nine/Air Lock is on the field");
+SINGLE_BATTLE_TEST("Dry Skin doesn't get damaged in Sun if Cloud Nine/Air Lock is on the field")
+{
+ u16 species;
+ enum Ability ability;
+
+ PARAMETRIZE { species = SPECIES_GOLDUCK; ability = ABILITY_CLOUD_NINE; }
+ PARAMETRIZE { species = SPECIES_RAYQUAZA; ability = ABILITY_AIR_LOCK; }
+
+ GIVEN {
+ PLAYER(SPECIES_PARASECT) { Ability(ABILITY_DRY_SKIN); HP(100); MaxHP(200); }
+ OPPONENT(species) { Ability(ability); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_SUNNY_DAY); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, player);
+ NONE_OF {
+ ABILITY_POPUP(player, ABILITY_DRY_SKIN);
+ HP_BAR(player);
+ MESSAGE("Parasect's Dry Skin takes its toll!");
+ }
+ }
+}
SINGLE_BATTLE_TEST("Dry Skin heals 1/8th Max HP in Rain")
{
@@ -31,7 +52,28 @@ SINGLE_BATTLE_TEST("Dry Skin heals 1/8th Max HP in Rain")
}
}
-TO_DO_BATTLE_TEST("Dry Skin doesn't heal in Rain if Cloud Nine/Air Lock is on the field");
+SINGLE_BATTLE_TEST("Dry Skin doesn't heal in Rain if Cloud Nine/Air Lock is on the field")
+{
+ u16 species;
+ enum Ability ability;
+
+ PARAMETRIZE { species = SPECIES_GOLDUCK; ability = ABILITY_CLOUD_NINE; }
+ PARAMETRIZE { species = SPECIES_RAYQUAZA; ability = ABILITY_AIR_LOCK; }
+
+ GIVEN {
+ PLAYER(SPECIES_PARASECT) { Ability(ABILITY_DRY_SKIN); HP(100); MaxHP(200); }
+ OPPONENT(species) { Ability(ability); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_RAIN_DANCE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_RAIN_DANCE, player);
+ NONE_OF {
+ ABILITY_POPUP(player, ABILITY_DRY_SKIN);
+ HP_BAR(player);
+ MESSAGE("Parasect's Dry Skin restored its HP a little!");
+ }
+ }
+}
SINGLE_BATTLE_TEST("Dry Skin increases damage taken from Fire-type moves by 25%", s16 damage)
{
diff --git a/test/battle/ability/flower_gift.c b/test/battle/ability/flower_gift.c
index 30cc7926e5..8e5f9faca0 100644
--- a/test/battle/ability/flower_gift.c
+++ b/test/battle/ability/flower_gift.c
@@ -17,7 +17,28 @@ SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim in harsh sunlight")
}
}
-TO_DO_BATTLE_TEST("Flower Gift doesn't transform Cherrim if Cloud Nine/Air Lock is on the field");
+SINGLE_BATTLE_TEST("Flower Gift doesn't transform Cherrim if Cloud Nine/Air Lock is on the field")
+{
+ u32 species = 0;
+ enum Ability ability = 0;
+ PARAMETRIZE { species = SPECIES_GOLDUCK; ability = ABILITY_CLOUD_NINE; }
+ PARAMETRIZE { species = SPECIES_RAYQUAZA; ability = ABILITY_AIR_LOCK; }
+ GIVEN {
+ PLAYER(SPECIES_CHERRIM_OVERCAST) { Ability(ABILITY_FLOWER_GIFT); }
+ OPPONENT(species) { Ability(ability); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SUNNY_DAY); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, opponent);
+ NONE_OF {
+ ABILITY_POPUP(player, ABILITY_FLOWER_GIFT);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
+ MESSAGE("Cherrim transformed!");
+ }
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_CHERRIM_OVERCAST);
+ }
+}
SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal when weather changes")
{
@@ -219,4 +240,19 @@ DOUBLE_BATTLE_TEST("Flower Gift reverts Cherrim back after Teraform Zero clears
}
}
-TO_DO_BATTLE_TEST("Flower Gift does not transform Cherrim back to normal when suppressed if Cherrim is Dynamaxed");
+SINGLE_BATTLE_TEST("Flower Gift does not transform Cherrim back to normal when suppressed if Cherrim is Dynamaxed")
+{
+ GIVEN {
+ ASSUME(B_WEATHER_FORMS >= GEN_5);
+ ASSUME(GetMoveEffect(MOVE_GASTRO_ACID) == EFFECT_GASTRO_ACID);
+ PLAYER(SPECIES_CHERRIM_OVERCAST) { Ability(ABILITY_FLOWER_GIFT); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SUNNY_DAY); }
+ TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); }
+ TURN { MOVE(opponent, MOVE_GASTRO_ACID); }
+ } SCENE {
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_CHERRIM_SUNSHINE);
+ }
+}
diff --git a/test/battle/ability/flower_veil.c b/test/battle/ability/flower_veil.c
index 78d15df1bd..69a31958e1 100644
--- a/test/battle/ability/flower_veil.c
+++ b/test/battle/ability/flower_veil.c
@@ -63,4 +63,22 @@ DOUBLE_BATTLE_TEST("Flower Veil prevents status on allied Grass-types - left tar
}
}
-TO_DO_BATTLE_TEST("Flower Veil's stat reduction protection considers Contrary") // Eg. If a move would reduce stats due to Contrary, it will be protected by Mist.
+DOUBLE_BATTLE_TEST("Flower Veil's stat reduction protection considers Contrary") // Eg. If a move would reduce stats due to Contrary, it will be protected by Mist.
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_SWAGGER) == EFFECT_SWAGGER);
+ ASSUME(GetSpeciesType(SPECIES_SNIVY, 0) == TYPE_GRASS || GetSpeciesType(SPECIES_SNIVY, 1) == TYPE_GRASS);
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WYNAUT);
+ OPPONENT(SPECIES_COMFEY) { Ability(ABILITY_FLOWER_VEIL); }
+ OPPONENT(SPECIES_SNIVY) { Ability(ABILITY_CONTRARY); }
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_SWAGGER, target: opponentRight); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWAGGER, playerLeft);
+ ABILITY_POPUP(opponentLeft, ABILITY_FLOWER_VEIL);
+ MESSAGE("The opposing Snivy surrounded itself with a veil of petals!");
+ } THEN {
+ EXPECT_EQ(opponentRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE);
+ }
+}
diff --git a/test/battle/ability/galvanize.c b/test/battle/ability/galvanize.c
index bbfa6c3cfb..8388780dc0 100644
--- a/test/battle/ability/galvanize.c
+++ b/test/battle/ability/galvanize.c
@@ -163,9 +163,72 @@ SINGLE_BATTLE_TEST("Galvanize doesn't affect Hidden Power's type")
}
}
-TO_DO_BATTLE_TEST("Galvanize doesn't affect Tera Starstorm's type");
+SINGLE_BATTLE_TEST("Galvanize changes Tera Blast's type when not Terastallized")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TERA_BLAST) == EFFECT_TERA_BLAST);
+ ASSUME(GetMoveType(MOVE_TERA_BLAST) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_ROOKIDEE, 0) == TYPE_FLYING || GetSpeciesType(SPECIES_ROOKIDEE, 1) == TYPE_FLYING);
+ PLAYER(SPECIES_GEODUDE_ALOLA) { Ability(ABILITY_GALVANIZE); }
+ OPPONENT(SPECIES_ROOKIDEE);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Galvanize doesn't change Tera Blast's type when Terastallized")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TERA_BLAST) == EFFECT_TERA_BLAST);
+ ASSUME(GetMoveType(MOVE_TERA_BLAST) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_SANDSHREW, 0) == TYPE_GROUND || GetSpeciesType(SPECIES_SANDSHREW, 1) == TYPE_GROUND);
+ PLAYER(SPECIES_GEODUDE_ALOLA) { Ability(ABILITY_GALVANIZE); TeraType(TYPE_NORMAL); }
+ OPPONENT(SPECIES_SANDSHREW);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ NOT { MESSAGE("It doesn't affect the opposing Sandshrew…"); }
+ }
+}
+
+SINGLE_BATTLE_TEST("Galvanize doesn't affect Terrain Pulse's type")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TERRAIN_PULSE) == EFFECT_TERRAIN_PULSE);
+ ASSUME(GetMoveType(MOVE_TERRAIN_PULSE) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_SANDSHREW, 0) == TYPE_GROUND || GetSpeciesType(SPECIES_SANDSHREW, 1) == TYPE_GROUND);
+ PLAYER(SPECIES_GEODUDE_ALOLA) { Ability(ABILITY_GALVANIZE); }
+ OPPONENT(SPECIES_SANDSHREW);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_GRASSY_TERRAIN); MOVE(player, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_TERRAIN_PULSE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASSY_TERRAIN, opponent);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERRAIN_PULSE, player);
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Galvanize doesn't affect damaging Z-Move types")
+{
+ GIVEN {
+ ASSUME(GetMoveType(MOVE_SCRATCH) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_GYARADOS, 0) == TYPE_WATER || GetSpeciesType(SPECIES_GYARADOS, 1) == TYPE_WATER);
+ PLAYER(SPECIES_GEODUDE_ALOLA) { Ability(ABILITY_GALVANIZE); Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_GYARADOS);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player);
+ NOT { MESSAGE("It's super effective!"); }
+ }
+}
+
TO_DO_BATTLE_TEST("Galvanize doesn't affect Max Strike's type");
-TO_DO_BATTLE_TEST("Galvanize doesn't affect Terrain Pulse's type");
-TO_DO_BATTLE_TEST("Galvanize doesn't affect damaging Z-Move types");
TO_DO_BATTLE_TEST("(DYNAMAX) Galvanize turns Max Strike into Max Lightning when not used by Gigantamax Pikachu/Toxtricity");
//TO_DO_BATTLE_TEST("(DYNAMAX) Galvanize doesn't turn Max Strike into Max Lightning when used by Gigantamax Pikachu/Toxtricity, instead becoming G-Max Volt Crash/Stun Shock"); // Marked in Bulbapedia as "needs research", so this assumes that it behaves like Pixilate.
diff --git a/test/battle/ability/normalize.c b/test/battle/ability/normalize.c
index 24401c8e7f..09acb4b59f 100644
--- a/test/battle/ability/normalize.c
+++ b/test/battle/ability/normalize.c
@@ -273,7 +273,72 @@ SINGLE_BATTLE_TEST("Normalize doesn't affect Hidden Power's type")
}
}
-TO_DO_BATTLE_TEST("Aerilate doesn't affect Tera Starstorm's type");
-TO_DO_BATTLE_TEST("Normalize makes Flying Press do Normal/Flying damage");
-TO_DO_BATTLE_TEST("Normalize doesn't affect Terrain Pulse's type");
-TO_DO_BATTLE_TEST("Normalize doesn't affect damaging Z-Move types");
+SINGLE_BATTLE_TEST("Normalize doesn't change Tera Blast's type when Terastallized")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TERA_BLAST) == EFFECT_TERA_BLAST);
+ ASSUME(GetMoveType(MOVE_TERA_BLAST) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_MISDREAVUS, 0) == TYPE_GHOST);
+ PLAYER(SPECIES_SKITTY) { Ability(ABILITY_NORMALIZE); TeraType(TYPE_DARK); }
+ OPPONENT(SPECIES_MISDREAVUS);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Normalize makes Flying Press do Normal/Flying damage")
+{
+ enum Ability ability;
+ PARAMETRIZE { ability = ABILITY_CUTE_CHARM; }
+ PARAMETRIZE { ability = ABILITY_NORMALIZE; }
+ GIVEN {
+ ASSUME(GetSpeciesType(SPECIES_GOLEM, 0) == TYPE_ROCK || GetSpeciesType(SPECIES_GOLEM, 1) == TYPE_ROCK);
+ PLAYER(SPECIES_SKITTY) { Ability(ability); Moves(MOVE_FLYING_PRESS); }
+ OPPONENT(SPECIES_GOLEM);
+ } WHEN {
+ TURN { MOVE(player, MOVE_FLYING_PRESS); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FLYING_PRESS, player);
+ if (ability == ABILITY_NORMALIZE)
+ MESSAGE("It's not very effective…");
+ else
+ NOT { MESSAGE("It's not very effective…"); }
+ }
+}
+
+SINGLE_BATTLE_TEST("Normalize doesn't affect Terrain Pulse's type")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TERRAIN_PULSE) == EFFECT_TERRAIN_PULSE);
+ ASSUME(GetMoveType(MOVE_TERRAIN_PULSE) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_SANDSHREW, 0) == TYPE_GROUND || GetSpeciesType(SPECIES_SANDSHREW, 1) == TYPE_GROUND);
+ PLAYER(SPECIES_SKITTY) { Ability(ABILITY_NORMALIZE); }
+ OPPONENT(SPECIES_SANDSHREW);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_ELECTRIC_TERRAIN); MOVE(player, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_TERRAIN_PULSE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIC_TERRAIN, opponent);
+ NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_TERRAIN_PULSE, player); }
+ MESSAGE("It doesn't affect the opposing Sandshrew…");
+ }
+}
+
+SINGLE_BATTLE_TEST("Normalize doesn't affect damaging Z-Move types")
+{
+ GIVEN {
+ ASSUME(GetMoveType(MOVE_WATER_GUN) == TYPE_WATER);
+ ASSUME(GetSpeciesType(SPECIES_GOLEM, 0) == TYPE_ROCK || GetSpeciesType(SPECIES_GOLEM, 1) == TYPE_ROCK);
+ PLAYER(SPECIES_SKITTY) { Ability(ABILITY_NORMALIZE); Item(ITEM_WATERIUM_Z); Moves(MOVE_WATER_GUN); }
+ OPPONENT(SPECIES_GOLEM);
+ } WHEN {
+ TURN { MOVE(player, MOVE_WATER_GUN, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_HYDRO_VORTEX, player);
+ MESSAGE("It's super effective!");
+ }
+}
diff --git a/test/battle/ability/pixilate.c b/test/battle/ability/pixilate.c
index f6747b92d3..58c6488903 100644
--- a/test/battle/ability/pixilate.c
+++ b/test/battle/ability/pixilate.c
@@ -137,13 +137,104 @@ SINGLE_BATTLE_TEST("Pixilate doesn't affect Hidden Power's type")
}
}
-TO_DO_BATTLE_TEST("Pixilate doesn't override Electrify (Gen7+)");
-TO_DO_BATTLE_TEST("Pixilate doesn't override Ion Deluge (Gen7+)"); // Ion Deluge doesn't exist in Gen 8+, but we probably could assume it behaves similar to under Electrify. TODO: Test by hacking SV.
-TO_DO_BATTLE_TEST("Pixilate overrides Electrify (Gen6)")
-TO_DO_BATTLE_TEST("Pixilate overrides Ion Deluge (Gen6)")
-TO_DO_BATTLE_TEST("Pixilate doesn't affect Tera Starstorm's type");
+SINGLE_BATTLE_TEST("Pixilate doesn't override Electrify")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_ELECTRIFY) == EFFECT_ELECTRIFY);
+ ASSUME(GetSpeciesType(SPECIES_SANDSHREW, 0) == TYPE_GROUND || GetSpeciesType(SPECIES_SANDSHREW, 1) == TYPE_GROUND);
+ PLAYER(SPECIES_SYLVEON) { Ability(ABILITY_PIXILATE); }
+ OPPONENT(SPECIES_SANDSHREW);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_ELECTRIFY); MOVE(player, MOVE_SCRATCH); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIFY, opponent);
+ NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player); }
+ MESSAGE("It doesn't affect the opposing Sandshrew…");
+ }
+}
+
+SINGLE_BATTLE_TEST("Pixilate overrides Ion Deluge")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_ION_DELUGE) == EFFECT_ION_DELUGE);
+ ASSUME(GetSpeciesType(SPECIES_BAGON, 0) == TYPE_DRAGON || GetSpeciesType(SPECIES_BAGON, 1) == TYPE_DRAGON);
+ PLAYER(SPECIES_SYLVEON) { Ability(ABILITY_PIXILATE); }
+ OPPONENT(SPECIES_BAGON);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_ION_DELUGE); MOVE(player, MOVE_SCRATCH); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ION_DELUGE, opponent);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Pixilate changes Tera Blast's type when not Terastallized")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TERA_BLAST) == EFFECT_TERA_BLAST);
+ ASSUME(GetMoveType(MOVE_TERA_BLAST) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_MACHOP, 0) == TYPE_FIGHTING || GetSpeciesType(SPECIES_MACHOP, 1) == TYPE_FIGHTING);
+ PLAYER(SPECIES_SYLVEON) { Ability(ABILITY_PIXILATE); }
+ OPPONENT(SPECIES_MACHOP);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Pixilate doesn't change Tera Blast's type when Terastallized")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TERA_BLAST) == EFFECT_TERA_BLAST);
+ ASSUME(GetMoveType(MOVE_TERA_BLAST) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_MISDREAVUS, 0) == TYPE_GHOST);
+ PLAYER(SPECIES_SYLVEON) { Ability(ABILITY_PIXILATE); TeraType(TYPE_NORMAL); }
+ OPPONENT(SPECIES_MISDREAVUS);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player); }
+ MESSAGE("It doesn't affect the opposing Misdreavus…");
+ }
+}
+
+SINGLE_BATTLE_TEST("Pixilate doesn't affect Terrain Pulse's type")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TERRAIN_PULSE) == EFFECT_TERRAIN_PULSE);
+ ASSUME(GetMoveType(MOVE_TERRAIN_PULSE) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_SANDSHREW, 0) == TYPE_GROUND || GetSpeciesType(SPECIES_SANDSHREW, 1) == TYPE_GROUND);
+ PLAYER(SPECIES_SYLVEON) { Ability(ABILITY_PIXILATE); }
+ OPPONENT(SPECIES_SANDSHREW);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_ELECTRIC_TERRAIN); MOVE(player, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_TERRAIN_PULSE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIC_TERRAIN, opponent);
+ NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_TERRAIN_PULSE, player); }
+ MESSAGE("It doesn't affect the opposing Sandshrew…");
+ }
+}
+
+SINGLE_BATTLE_TEST("Pixilate doesn't affect damaging Z-Move types")
+{
+ GIVEN {
+ ASSUME(GetMoveType(MOVE_SCRATCH) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_BAGON, 0) == TYPE_DRAGON || GetSpeciesType(SPECIES_BAGON, 1) == TYPE_DRAGON);
+ PLAYER(SPECIES_SYLVEON) { Ability(ABILITY_PIXILATE); Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_BAGON);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player);
+ NOT { MESSAGE("It's super effective!"); }
+ }
+}
+
TO_DO_BATTLE_TEST("Pixilate doesn't affect Max Strike's type");
-TO_DO_BATTLE_TEST("Pixilate doesn't affect Terrain Pulse's type");
-TO_DO_BATTLE_TEST("Pixilate doesn't affect damaging Z-Move types");
TO_DO_BATTLE_TEST("(DYNAMAX) Pixilate turns Max Strike into Max Starfall when not used by Gigantamax Alcremie");
TO_DO_BATTLE_TEST("(DYNAMAX) Pixilate doesn't turn Max Strike into Max Starfall when used by Gigantamax Alcremie, instead becoming G-Max Finale");
diff --git a/test/battle/ability/protosynthesis.c b/test/battle/ability/protosynthesis.c
index aca8e6fbf9..f6d55b38a3 100644
--- a/test/battle/ability/protosynthesis.c
+++ b/test/battle/ability/protosynthesis.c
@@ -173,6 +173,7 @@ SINGLE_BATTLE_TEST("Protosynthesis doesn't activate for a transformed battler")
SINGLE_BATTLE_TEST("Protosynthesis activates even if the Pokémon is holding an Utility Umbrella")
{
GIVEN {
+ ASSUME(gItemsInfo[ITEM_UTILITY_UMBRELLA].holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA);
PLAYER(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_UTILITY_UMBRELLA); }
OPPONENT(SPECIES_NINETALES) { Ability(ABILITY_DROUGHT); }
} WHEN {
@@ -311,3 +312,38 @@ SINGLE_BATTLE_TEST("Protosynthesis retains its boosted stat after Neutralizing G
EXPECT_EQ(damage[0], damage[1]);
}
}
+
+SINGLE_BATTLE_TEST("Protosynthesis damage calculation is correct")
+{
+ s16 dmg;
+ s16 expectedDamage;
+
+ PARAMETRIZE { expectedDamage = 127; }
+ PARAMETRIZE { expectedDamage = 126; }
+ PARAMETRIZE { expectedDamage = 124; }
+ PARAMETRIZE { expectedDamage = 123; }
+ PARAMETRIZE { expectedDamage = 121; }
+ PARAMETRIZE { expectedDamage = 120; }
+ PARAMETRIZE { expectedDamage = 118; }
+ PARAMETRIZE { expectedDamage = 118; }
+ PARAMETRIZE { expectedDamage = 117; }
+ PARAMETRIZE { expectedDamage = 115; }
+ PARAMETRIZE { expectedDamage = 114; }
+ PARAMETRIZE { expectedDamage = 112; }
+ PARAMETRIZE { expectedDamage = 111; }
+ PARAMETRIZE { expectedDamage = 109; }
+ PARAMETRIZE { expectedDamage = 109; }
+ PARAMETRIZE { expectedDamage = 108; }
+
+ GIVEN {
+ ASSUME(GetMoveCategory(MOVE_CLOSE_COMBAT) == DAMAGE_CATEGORY_PHYSICAL);
+ PLAYER(SPECIES_GOUGING_FIRE) { Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); }
+ OPPONENT(SPECIES_URSHIFU_RAPID_STRIKE);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_CLOSE_COMBAT, WITH_RNG(RNG_DAMAGE_MODIFIER, i)); }
+ } SCENE {
+ HP_BAR(player, captureDamage: &dmg);
+ } THEN {
+ EXPECT_EQ(expectedDamage, dmg);
+ }
+}
diff --git a/test/battle/ability/refrigerate.c b/test/battle/ability/refrigerate.c
index 0fc274c8e5..f0d7ec89ee 100644
--- a/test/battle/ability/refrigerate.c
+++ b/test/battle/ability/refrigerate.c
@@ -136,13 +136,104 @@ SINGLE_BATTLE_TEST("Refrigerate doesn't affect Hidden Power's type")
}
}
-TO_DO_BATTLE_TEST("Refrigerate doesn't override Electrify (Gen7+)"); // No mon with Refrigerate exists in Gen8+, but probably behaves similar to Pixilate, which does.
-TO_DO_BATTLE_TEST("Refrigerate doesn't override Ion Deluge (Gen7+)"); // Ion Deluge doesn't exist in Gen 8+, but we probably could assume it behaves similar to under Electrify. TODO: Test by hacking SV.
-TO_DO_BATTLE_TEST("Refrigerate overrides Electrify (Gen6)")
-TO_DO_BATTLE_TEST("Refrigerate overrides Ion Deluge (Gen6)")
-TO_DO_BATTLE_TEST("Refrigerate doesn't affect Tera Starstorm's type");
+SINGLE_BATTLE_TEST("Refrigerate doesn't override Electrify")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_ELECTRIFY) == EFFECT_ELECTRIFY);
+ ASSUME(GetSpeciesType(SPECIES_SANDSHREW, 0) == TYPE_GROUND || GetSpeciesType(SPECIES_SANDSHREW, 1) == TYPE_GROUND);
+ PLAYER(SPECIES_AMAURA) { Ability(ABILITY_REFRIGERATE); }
+ OPPONENT(SPECIES_SANDSHREW);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_ELECTRIFY); MOVE(player, MOVE_SCRATCH); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIFY, opponent);
+ NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player); }
+ MESSAGE("It doesn't affect the opposing Sandshrew…");
+ }
+}
+
+SINGLE_BATTLE_TEST("Refrigerate overrides Ion Deluge")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_ION_DELUGE) == EFFECT_ION_DELUGE);
+ ASSUME(GetSpeciesType(SPECIES_SANDSHREW, 0) == TYPE_GROUND || GetSpeciesType(SPECIES_SANDSHREW, 1) == TYPE_GROUND);
+ PLAYER(SPECIES_AMAURA) { Ability(ABILITY_REFRIGERATE); }
+ OPPONENT(SPECIES_SANDSHREW);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_ION_DELUGE); MOVE(player, MOVE_SCRATCH); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ION_DELUGE, opponent);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Refrigerate changes Tera Blast's type when not Terastallized")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TERA_BLAST) == EFFECT_TERA_BLAST);
+ ASSUME(GetMoveType(MOVE_TERA_BLAST) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_CHARMANDER, 0) == TYPE_FIRE || GetSpeciesType(SPECIES_CHARMANDER, 1) == TYPE_FIRE);
+ PLAYER(SPECIES_AMAURA) { Ability(ABILITY_REFRIGERATE); }
+ OPPONENT(SPECIES_CHARMANDER);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ MESSAGE("It's not very effective…");
+ }
+}
+
+SINGLE_BATTLE_TEST("Refrigerate doesn't change Tera Blast's type when Terastallized")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TERA_BLAST) == EFFECT_TERA_BLAST);
+ ASSUME(GetMoveType(MOVE_TERA_BLAST) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_MISDREAVUS, 0) == TYPE_GHOST);
+ PLAYER(SPECIES_AMAURA) { Ability(ABILITY_REFRIGERATE); TeraType(TYPE_NORMAL); }
+ OPPONENT(SPECIES_MISDREAVUS);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player); }
+ MESSAGE("It doesn't affect the opposing Misdreavus…");
+ }
+}
+
+SINGLE_BATTLE_TEST("Refrigerate doesn't affect Terrain Pulse's type")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_TERRAIN_PULSE) == EFFECT_TERRAIN_PULSE);
+ ASSUME(GetMoveType(MOVE_TERRAIN_PULSE) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_SANDSHREW, 0) == TYPE_GROUND || GetSpeciesType(SPECIES_SANDSHREW, 1) == TYPE_GROUND);
+ PLAYER(SPECIES_AMAURA) { Ability(ABILITY_REFRIGERATE); }
+ OPPONENT(SPECIES_SANDSHREW);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_ELECTRIC_TERRAIN); MOVE(player, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_TERRAIN_PULSE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIC_TERRAIN, opponent);
+ NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_TERRAIN_PULSE, player); }
+ MESSAGE("It doesn't affect the opposing Sandshrew…");
+ }
+}
+
+SINGLE_BATTLE_TEST("Refrigerate doesn't affect damaging Z-Move types")
+{
+ GIVEN {
+ ASSUME(GetMoveType(MOVE_SCRATCH) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_BAGON, 0) == TYPE_DRAGON || GetSpeciesType(SPECIES_BAGON, 1) == TYPE_DRAGON);
+ PLAYER(SPECIES_AMAURA) { Ability(ABILITY_REFRIGERATE); Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_BAGON);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player);
+ NOT { MESSAGE("It's super effective!"); }
+ }
+}
+
TO_DO_BATTLE_TEST("Refrigerate doesn't affect Max Strike's type");
-TO_DO_BATTLE_TEST("Refrigerate doesn't affect Terrain Pulse's type");
-TO_DO_BATTLE_TEST("Refrigerate doesn't affect damaging Z-Move types");
TO_DO_BATTLE_TEST("(DYNAMAX) Refrigerate turns Max Strike into Max Hailstorm when not used by Gigantamax Lapras");
//TO_DO_BATTLE_TEST("(DYNAMAX) Refrigerate doesn't turn Max Strike into Max Hailstorm when used by Gigantamax Lapras, instead becoming G-Max Resonance"); // Marked in Bulbapedia as "needs research", so this assumes that it behaves like Pixilate.
diff --git a/test/battle/ability/swift_swim.c b/test/battle/ability/swift_swim.c
index 4282ac2741..eacbccfdeb 100644
--- a/test/battle/ability/swift_swim.c
+++ b/test/battle/ability/swift_swim.c
@@ -1,6 +1,57 @@
#include "global.h"
#include "test/battle.h"
-TO_DO_BATTLE_TEST("Swift Swim doubles speed if it's raining");
-TO_DO_BATTLE_TEST("Swift Swim doesn't double speed if Cloud Nine/Air Lock is on the field");
-TO_DO_BATTLE_TEST("Swift Swim doesn't double speed if they have an Utility Umbrella");
+SINGLE_BATTLE_TEST("Swift Swim doubles speed if it's raining")
+{
+ GIVEN {
+ PLAYER(SPECIES_LUDICOLO) { Ability(ABILITY_SWIFT_SWIM); Speed(100); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(199); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_RAIN_DANCE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_RAIN_DANCE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
+ }
+}
+
+SINGLE_BATTLE_TEST("Swift Swim doesn't double speed if Cloud Nine/Air Lock is on the field")
+{
+ u16 species;
+ enum Ability ability;
+
+ PARAMETRIZE { species = SPECIES_GOLDUCK; ability = ABILITY_CLOUD_NINE; }
+ PARAMETRIZE { species = SPECIES_RAYQUAZA; ability = ABILITY_AIR_LOCK; }
+
+ GIVEN {
+ PLAYER(SPECIES_LUDICOLO) { Ability(ABILITY_SWIFT_SWIM); Speed(100); }
+ OPPONENT(species) { Speed(199); Ability(ability); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_RAIN_DANCE); }
+ TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_RAIN_DANCE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
+ }
+}
+
+SINGLE_BATTLE_TEST("Swift Swim doesn't double speed if they have an Utility Umbrella")
+{
+ GIVEN {
+ ASSUME(gItemsInfo[ITEM_UTILITY_UMBRELLA].holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA);
+ PLAYER(SPECIES_LUDICOLO) { Ability(ABILITY_SWIFT_SWIM); Speed(100); Item(ITEM_UTILITY_UMBRELLA); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(199); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_RAIN_DANCE); }
+ TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_RAIN_DANCE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
+ }
+}
diff --git a/test/battle/ai/ai_doubles.c b/test/battle/ai/ai_doubles.c
index f1edc31fbb..8edfea9ee1 100644
--- a/test/battle/ai/ai_doubles.c
+++ b/test/battle/ai/ai_doubles.c
@@ -96,23 +96,16 @@ AI_DOUBLE_BATTLE_TEST("AI skips Trick/Bestow with unexchangeable items")
}
}
-AI_DOUBLE_BATTLE_TEST("AI skips Trick/Bestow around Sticky Hold")
+AI_DOUBLE_BATTLE_TEST("AI skips Trick around Sticky Hold")
{
- u16 move = MOVE_NONE, atkItem = ITEM_ORAN_BERRY, targetItem = ITEM_NONE;
- enum Ability atkAbility = ABILITY_PRESSURE, targetAbility = ABILITY_PRESSURE;
-
- PARAMETRIZE { move = MOVE_TRICK; atkAbility = ABILITY_STICKY_HOLD; targetAbility = ABILITY_PRESSURE; targetItem = ITEM_LEFTOVERS; }
- PARAMETRIZE { move = MOVE_TRICK; atkAbility = ABILITY_PRESSURE; targetAbility = ABILITY_STICKY_HOLD; targetItem = ITEM_LEFTOVERS; }
- PARAMETRIZE { move = MOVE_BESTOW; atkAbility = ABILITY_STICKY_HOLD; targetAbility = ABILITY_PRESSURE; targetItem = ITEM_NONE; }
-
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
- PLAYER(SPECIES_WOBBUFFET) { Ability(targetAbility); Item(targetItem); }
+ PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_STICKY_HOLD); Item(ITEM_LEFTOVERS); }
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Ability(atkAbility); Item(atkItem); Moves(move, MOVE_SCRATCH); }
+ OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_PRESSURE); Item(ITEM_ORAN_BERRY); Moves(MOVE_TRICK, MOVE_SCRATCH); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE); }
} WHEN {
- TURN { NOT_EXPECT_MOVE(opponentLeft, move); }
+ TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_TRICK); }
}
}
diff --git a/test/battle/form_change/end_battle.c b/test/battle/form_change/end_battle.c
index 9de52a83f2..c3ae62f77d 100644
--- a/test/battle/form_change/end_battle.c
+++ b/test/battle/form_change/end_battle.c
@@ -90,7 +90,6 @@ SINGLE_BATTLE_TEST("Palafin returns to Zero form upon battle end")
SINGLE_BATTLE_TEST("Shaymin retains Land form if it was frozen or frostbitten in battle")
{
- KNOWN_FAILING; // changedSpecies is forcing the return to Sky Form
GIVEN {
ASSUME(MoveHasAdditionalEffect(MOVE_POWDER_SNOW, MOVE_EFFECT_FREEZE_OR_FROSTBITE));
PLAYER(SPECIES_SHAYMIN_SKY);
@@ -260,13 +259,13 @@ SINGLE_BATTLE_TEST("Morpeko Hangry reverts to Full Belly Form upon battle end af
SINGLE_BATTLE_TEST("Ogerpon reverts to the correct form upon battle end after terastallizing")
{
- u32 species;
- PARAMETRIZE { species = SPECIES_OGERPON_TEAL; }
- PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; }
- PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; }
- PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; }
+ u32 species, item;
+ PARAMETRIZE { species = SPECIES_OGERPON_TEAL; item = ITEM_NONE; }
+ PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; item = ITEM_WELLSPRING_MASK; }
+ PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; item = ITEM_HEARTHFLAME_MASK; }
+ PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; item = ITEM_CORNERSTONE_MASK; }
GIVEN {
- PLAYER(species);
+ PLAYER(species) { Item(item); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
diff --git a/test/battle/form_change/faint.c b/test/battle/form_change/faint.c
index 4f66dc84c1..b0566d1e56 100644
--- a/test/battle/form_change/faint.c
+++ b/test/battle/form_change/faint.c
@@ -69,3 +69,46 @@ DOUBLE_BATTLE_TEST("Causing a Forecast or Flower Gift Pokémon to faint should n
}
}
}
+
+SINGLE_BATTLE_TEST("Ogerpon reverts to the correct form upon fainting after terastallizing")
+{
+ u32 species, item;
+ PARAMETRIZE { species = SPECIES_OGERPON_TEAL; item = ITEM_NONE; }
+ PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; item = ITEM_WELLSPRING_MASK; }
+ PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; item = ITEM_HEARTHFLAME_MASK; }
+ PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; item = ITEM_CORNERSTONE_MASK; }
+ GIVEN {
+ PLAYER(species) { HP(1); Item(item); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN {
+ MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA);
+ MOVE(opponent, MOVE_SCRATCH);
+ SEND_OUT(player, 1);
+ }
+ TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
+ TURN { SWITCH(player, 0); }
+ } THEN {
+ EXPECT_EQ(player->species, species);
+ }
+}
+
+SINGLE_BATTLE_TEST("Terapagos reverts to the correct form upon fainting after terastallizing")
+{
+ GIVEN {
+ PLAYER(SPECIES_TERAPAGOS_NORMAL) { HP(1); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN {
+ MOVE(player, MOVE_MEMENTO, gimmick: GIMMICK_TERA);
+ MOVE(opponent, MOVE_SCRATCH);
+ SEND_OUT(player, 1);
+ }
+ TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
+ TURN { SWITCH(player, 0); }
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_TERAPAGOS_TERASTAL); // Not Normal form due to Tera Shift
+ }
+}
diff --git a/test/battle/form_change/gigantamax.c b/test/battle/form_change/gigantamax.c
index 92e2b49224..ae34a5acf2 100644
--- a/test/battle/form_change/gigantamax.c
+++ b/test/battle/form_change/gigantamax.c
@@ -43,3 +43,22 @@ SINGLE_BATTLE_TEST("Dynamax: Venusaur returns its base Form upon battle end afte
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_VENUSAUR);
}
}
+
+SINGLE_BATTLE_TEST("Dynamax: Venusaur returns its base Form upon fainting end after Gigantamaxing")
+{
+ GIVEN {
+ PLAYER(SPECIES_VENUSAUR) { HP(1); GigantamaxFactor(TRUE); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN {
+ MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX);
+ MOVE(opponent, MOVE_SCRATCH);
+ SEND_OUT(player, 1);
+ }
+ TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
+ TURN { SWITCH(player, 0); }
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_VENUSAUR);
+ }
+}
diff --git a/test/battle/form_change/mega_evolution.c b/test/battle/form_change/mega_evolution.c
index f246cf1cc6..8e1945c558 100644
--- a/test/battle/form_change/mega_evolution.c
+++ b/test/battle/form_change/mega_evolution.c
@@ -216,3 +216,41 @@ SINGLE_BATTLE_TEST("Rayquaza returns its base Form upon battle end after Mega Ev
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_RAYQUAZA);
}
}
+
+SINGLE_BATTLE_TEST("Venusaur returns its base Form upon fainting end after Mega Evolving")
+{
+ GIVEN {
+ PLAYER(SPECIES_VENUSAUR) { HP(1); Item(ITEM_VENUSAURITE); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN {
+ MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA);
+ MOVE(opponent, MOVE_SCRATCH);
+ SEND_OUT(player, 1);
+ }
+ TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
+ TURN { SWITCH(player, 0); }
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_VENUSAUR);
+ }
+}
+
+SINGLE_BATTLE_TEST("Rayquaza returns its base Form upon fainting end after Mega Evolving")
+{
+ GIVEN {
+ PLAYER(SPECIES_RAYQUAZA) { HP(1); Moves(MOVE_DRAGON_ASCENT, MOVE_CELEBRATE); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN {
+ MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA);
+ MOVE(opponent, MOVE_SCRATCH);
+ SEND_OUT(player, 1);
+ }
+ TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
+ TURN { SWITCH(player, 0); }
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_RAYQUAZA);
+ }
+}
diff --git a/test/battle/form_change/primal_reversion.c b/test/battle/form_change/primal_reversion.c
index c6bab2f77a..445420a55d 100644
--- a/test/battle/form_change/primal_reversion.c
+++ b/test/battle/form_change/primal_reversion.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "test/battle.h"
-SINGLE_BATTLE_TEST("Primal reversion happens for Groudon only when holding Red Orb")
+SINGLE_BATTLE_TEST("Primal Reversion happens for Groudon only when holding Red Orb")
{
u16 heldItem;
PARAMETRIZE { heldItem = ITEM_NONE; }
@@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens for Groudon only when holding Red O
}
}
-SINGLE_BATTLE_TEST("Primal reversion happens for Kyogre only when holding Blue Orb")
+SINGLE_BATTLE_TEST("Primal Reversion happens for Kyogre only when holding Blue Orb")
{
u16 heldItem;
PARAMETRIZE { heldItem = ITEM_NONE; }
@@ -65,7 +65,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens for Kyogre only when holding Blue O
}
}
-DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - opponent faster")
+DOUBLE_BATTLE_TEST("Primal Reversion's order is determined by Speed - opponent faster")
{
GIVEN {
PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(5); }
@@ -91,7 +91,7 @@ DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - opponent f
}
}
-DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - player faster")
+DOUBLE_BATTLE_TEST("Primal Reversion's order is determined by Speed - player faster")
{
GIVEN {
PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(20); }
@@ -117,7 +117,7 @@ DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - player fas
}
}
-SINGLE_BATTLE_TEST("Primal reversion happens after a mon is sent out after a mon is fainted")
+SINGLE_BATTLE_TEST("Primal Reversion happens after a mon is sent out after a mon is fainted")
{
GIVEN {
ASSUME(!IsBattleMoveStatus(MOVE_SCRATCH));
@@ -136,7 +136,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a mon is sent out after a mon
}
}
-SINGLE_BATTLE_TEST("Primal reversion happens after a mon is switched in")
+SINGLE_BATTLE_TEST("Primal Reversion happens after a mon is switched in")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
@@ -153,7 +153,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a mon is switched in")
}
}
-SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Eject Button")
+SINGLE_BATTLE_TEST("Primal Reversion happens after a switch-in caused by Eject Button")
{
GIVEN {
ASSUME(!IsBattleMoveStatus(MOVE_SCRATCH));
@@ -174,7 +174,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Eject B
}
}
-SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Red Card")
+SINGLE_BATTLE_TEST("Primal Reversion happens after a switch-in caused by Red Card")
{
GIVEN {
ASSUME(!IsBattleMoveStatus(MOVE_SCRATCH));
@@ -194,7 +194,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Red Car
}
}
-SINGLE_BATTLE_TEST("Primal reversion happens after the entry hazards damage")
+SINGLE_BATTLE_TEST("Primal Reversion happens after the entry hazards damage")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_SPIKES) == EFFECT_SPIKES);
@@ -215,7 +215,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after the entry hazards damage")
}
}
-SINGLE_BATTLE_TEST("Primal reversion happens immediately if it was brought in by U-turn")
+SINGLE_BATTLE_TEST("Primal Reversion happens immediately if it was brought in by U-turn")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
@@ -236,7 +236,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens immediately if it was brought in by
}
-DOUBLE_BATTLE_TEST("Primal reversion triggers for multiple battlers if multiple fainted the previous turn")
+DOUBLE_BATTLE_TEST("Primal Reversion triggers for multiple battlers if multiple fainted the previous turn")
{
GIVEN {
ASSUME(GetMoveTarget(MOVE_EARTHQUAKE) == MOVE_TARGET_FOES_AND_ALLY);
@@ -259,7 +259,7 @@ DOUBLE_BATTLE_TEST("Primal reversion triggers for multiple battlers if multiple
}
}
-DOUBLE_BATTLE_TEST("Primal reversion triggers for all battlers if multiple fainted the previous turn")
+DOUBLE_BATTLE_TEST("Primal Reversion triggers for all battlers if multiple fainted the previous turn")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
@@ -287,7 +287,7 @@ DOUBLE_BATTLE_TEST("Primal reversion triggers for all battlers if multiple faint
}
}
-DOUBLE_BATTLE_TEST("Primal reversion and other switch-in effects trigger for all battlers if multiple fainted the previous turn")
+DOUBLE_BATTLE_TEST("Primal Reversion and other switch-in effects trigger for all battlers if multiple fainted the previous turn")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
@@ -333,7 +333,7 @@ DOUBLE_BATTLE_TEST("Primal reversion and other switch-in effects trigger for all
}
}
-SINGLE_BATTLE_TEST("Primal reversion is reverted upon battle end")
+SINGLE_BATTLE_TEST("Primal Reversion is reverted upon battle end")
{
u32 species, item;
PARAMETRIZE { species = SPECIES_GROUDON; item = ITEM_RED_ORB; }
@@ -347,3 +347,25 @@ SINGLE_BATTLE_TEST("Primal reversion is reverted upon battle end")
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), species);
}
}
+
+SINGLE_BATTLE_TEST("Primal Reversion is NOT reverted upon fainting")
+{
+ u32 species, item, targetSpecies;
+ PARAMETRIZE { species = SPECIES_GROUDON; item = ITEM_RED_ORB; targetSpecies = SPECIES_GROUDON_PRIMAL; }
+ PARAMETRIZE { species = SPECIES_KYOGRE; item = ITEM_BLUE_ORB; targetSpecies = SPECIES_KYOGRE_PRIMAL; }
+ GIVEN {
+ PLAYER(species) { HP(1); Item(item); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN {
+ MOVE(player, MOVE_CELEBRATE);
+ MOVE(opponent, MOVE_SCRATCH);
+ SEND_OUT(player, 1);
+ }
+ TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
+ TURN { SWITCH(player, 0); }
+ } THEN {
+ EXPECT_EQ(player->species, targetSpecies);
+ }
+}
diff --git a/test/battle/form_change/ultra_burst.c b/test/battle/form_change/ultra_burst.c
index fcb0efded5..1db0bf7fd8 100644
--- a/test/battle/form_change/ultra_burst.c
+++ b/test/battle/form_change/ultra_burst.c
@@ -135,3 +135,25 @@ SINGLE_BATTLE_TEST("Necrozma returns its proper Form upon battle end after Ultra
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), species);
}
}
+
+SINGLE_BATTLE_TEST("Necrozma returns its proper Form upon fainting after Ultra Bursting")
+{
+ u32 species;
+ PARAMETRIZE { species = SPECIES_NECROZMA_DUSK_MANE; }
+ PARAMETRIZE { species = SPECIES_NECROZMA_DAWN_WINGS; }
+ GIVEN {
+ PLAYER(species) { HP(1); Item(ITEM_ULTRANECROZIUM_Z); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN {
+ MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST);
+ MOVE(opponent, MOVE_SCRATCH);
+ SEND_OUT(player, 1);
+ }
+ TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
+ TURN { SWITCH(player, 0); }
+ } THEN {
+ EXPECT_EQ(player->species, species);
+ }
+}
diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c
index 2379df58dc..6cd9e290be 100644
--- a/test/battle/gimmick/terastal.c
+++ b/test/battle/gimmick/terastal.c
@@ -761,19 +761,19 @@ SINGLE_BATTLE_TEST("(TERA) Transformed Pokémon can't Terastalize")
SINGLE_BATTLE_TEST("(TERA) Pokemon with Tera forms change upon Terastallizing")
{
- u32 species, targetSpecies;
- PARAMETRIZE { species = SPECIES_OGERPON_TEAL; targetSpecies = SPECIES_OGERPON_TEAL_TERA; }
- PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; targetSpecies = SPECIES_OGERPON_WELLSPRING_TERA; }
- PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; targetSpecies = SPECIES_OGERPON_HEARTHFLAME_TERA; }
- PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; targetSpecies = SPECIES_OGERPON_CORNERSTONE_TERA; }
- PARAMETRIZE { species = SPECIES_TERAPAGOS_TERASTAL; targetSpecies = SPECIES_TERAPAGOS_STELLAR; }
+ u32 species, target, item;
+ PARAMETRIZE { species = SPECIES_OGERPON_TEAL; target = SPECIES_OGERPON_TEAL_TERA; item = ITEM_NONE; }
+ PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; target = SPECIES_OGERPON_WELLSPRING_TERA; item = ITEM_WELLSPRING_MASK; }
+ PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; target = SPECIES_OGERPON_HEARTHFLAME_TERA; item = ITEM_HEARTHFLAME_MASK; }
+ PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; target = SPECIES_OGERPON_CORNERSTONE_TERA; item = ITEM_CORNERSTONE_MASK; }
+ PARAMETRIZE { species = SPECIES_TERAPAGOS_TERASTAL; target = SPECIES_TERAPAGOS_STELLAR; item = ITEM_NONE; }
GIVEN {
- PLAYER(species);
+ PLAYER(species) { Item(item); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
} THEN {
- EXPECT_EQ(player->species, targetSpecies);
+ EXPECT_EQ(player->species, target);
}
}
diff --git a/test/battle/hold_effect/booster_energy.c b/test/battle/hold_effect/booster_energy.c
index d59c17ef68..9916fe5792 100644
--- a/test/battle/hold_effect/booster_energy.c
+++ b/test/battle/hold_effect/booster_energy.c
@@ -225,7 +225,8 @@ SINGLE_BATTLE_TEST("Booster Energy increases special defense by 30% if it is the
ANIMATION(ANIM_TYPE_MOVE, MOVE_ROUND, opponent);
HP_BAR(player, captureDamage: &results[i].damage);
} FINALLY {
- EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.7), results[1].damage);
+ EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.77), results[1].damage);
+ EXPECT_MUL_EQ(results[2].damage, Q_4_12(0.77), results[3].damage);
}
}
diff --git a/test/battle/hold_effect/cure_status.c b/test/battle/hold_effect/cure_status.c
index 0318d3991a..bffe041372 100644
--- a/test/battle/hold_effect/cure_status.c
+++ b/test/battle/hold_effect/cure_status.c
@@ -135,7 +135,26 @@ SINGLE_BATTLE_TEST("Chesto Berry cures sleep when Yawn takes effect")
}
}
-TO_DO_BATTLE_TEST("Chesto and Lum Berries don't trigger if the holder has Comatose")
+SINGLE_BATTLE_TEST("Chesto and Lum Berries don't trigger if the holder has Comatose")
+{
+ u16 item;
+
+ PARAMETRIZE { item = ITEM_CHESTO_BERRY; }
+ PARAMETRIZE { item = ITEM_LUM_BERRY; }
+
+ GIVEN {
+ ASSUME(gItemsInfo[ITEM_CHESTO_BERRY].holdEffect == HOLD_EFFECT_CURE_SLP);
+ ASSUME(gItemsInfo[ITEM_LUM_BERRY].holdEffect == HOLD_EFFECT_CURE_STATUS);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_KOMALA) { Ability(ABILITY_COMATOSE); Item(item); }
+ } WHEN {
+ TURN { }
+ } SCENE {
+ NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
+ } THEN {
+ EXPECT_EQ(opponent->item, item);
+ }
+}
SINGLE_BATTLE_TEST("Cheri and Lum Berries cure paralysis")
{
@@ -181,8 +200,7 @@ SINGLE_BATTLE_TEST("Perism and Lum Berries cure confusion")
SINGLE_BATTLE_TEST("Berry hold effect cures status if a Pokémon enters a battle")
{
- u16 status;
- u16 item;
+ u16 status, item;
PARAMETRIZE { status = STATUS1_BURN; item = ITEM_RAWST_BERRY; }
PARAMETRIZE { status = STATUS1_FREEZE; item = ITEM_ASPEAR_BERRY; }
diff --git a/test/battle/hold_effect/ogerpon_mask.c b/test/battle/hold_effect/ogerpon_mask.c
index d1353d090f..7dcce5690b 100644
--- a/test/battle/hold_effect/ogerpon_mask.c
+++ b/test/battle/hold_effect/ogerpon_mask.c
@@ -15,8 +15,8 @@ SINGLE_BATTLE_TEST("Ogerpon Masks increase the base power of moves by 20%", s16
{
u32 species;
u32 item;
- PARAMETRIZE { species = SPECIES_OGERPON_TEAL; item = ITEM_NONE; }
- PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; item = ITEM_CORNERSTONE_MASK; }
+ PARAMETRIZE { species = SPECIES_OGERPON_TEAL; item = ITEM_NONE; }
+ PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; item = ITEM_CORNERSTONE_MASK; }
PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; item = ITEM_WELLSPRING_MASK; }
PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; item = ITEM_HEARTHFLAME_MASK; }
diff --git a/test/battle/move_effect/bestow.c b/test/battle/move_effect/bestow.c
index 9d7bc9ca5c..7017ede805 100644
--- a/test/battle/move_effect/bestow.c
+++ b/test/battle/move_effect/bestow.c
@@ -92,7 +92,7 @@ SINGLE_BATTLE_TEST("Bestow fails if the user's held item is a Z-Crystal")
}
}
-SINGLE_BATTLE_TEST("Bestow fails if the user has Sticky Hold")
+SINGLE_BATTLE_TEST("Bestow doesn't fail if the user has Sticky Hold")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_STICKY_HOLD); Item(ITEM_SITRUS_BERRY); }
@@ -100,10 +100,10 @@ SINGLE_BATTLE_TEST("Bestow fails if the user has Sticky Hold")
} WHEN {
TURN { MOVE(player, MOVE_BESTOW); }
} SCENE {
- MESSAGE("But it failed!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BESTOW, player);
} THEN {
- EXPECT(player->item == ITEM_SITRUS_BERRY);
- EXPECT(opponent->item == ITEM_NONE);
+ EXPECT(player->item == ITEM_NONE);
+ EXPECT(opponent->item == ITEM_SITRUS_BERRY);
}
}
diff --git a/test/battle/move_effect/hydro_steam.c b/test/battle/move_effect/hydro_steam.c
index 781e083af4..ff1407a0e7 100644
--- a/test/battle/move_effect/hydro_steam.c
+++ b/test/battle/move_effect/hydro_steam.c
@@ -35,6 +35,7 @@ SINGLE_BATTLE_TEST("Hydro Steam is affected by Utility Umbrella", s16 damage)
PARAMETRIZE { itemPlayer = ITEM_NONE; itemOpponent = ITEM_UTILITY_UMBRELLA; }
PARAMETRIZE { itemPlayer = ITEM_UTILITY_UMBRELLA; itemOpponent = ITEM_UTILITY_UMBRELLA; }
GIVEN {
+ ASSUME(gItemsInfo[ITEM_UTILITY_UMBRELLA].holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA);
PLAYER(SPECIES_WOBBUFFET) { Item(itemPlayer); }
OPPONENT(SPECIES_WOBBUFFET) { Item(itemOpponent); }
} WHEN {
diff --git a/test/battle/move_effect/ivy_cudgel.c b/test/battle/move_effect/ivy_cudgel.c
index 88d002ae35..fff580a1f8 100644
--- a/test/battle/move_effect/ivy_cudgel.c
+++ b/test/battle/move_effect/ivy_cudgel.c
@@ -8,14 +8,12 @@ ASSUMPTIONS
SINGLE_BATTLE_TEST("Ivy Cudgel changes the move type depending on the form of Ogerpon")
{
- u16 species;
- u16 ogerpon;
- u16 item;
+ u32 species, ogerpon, item;
- PARAMETRIZE { species = SPECIES_BLASTOISE; ogerpon = SPECIES_OGERPON_TEAL; item = ITEM_NONE; }
+ PARAMETRIZE { species = SPECIES_BLASTOISE; ogerpon = SPECIES_OGERPON_TEAL; item = ITEM_NONE; }
PARAMETRIZE { species = SPECIES_CHARIZARD; ogerpon = SPECIES_OGERPON_CORNERSTONE; item = ITEM_CORNERSTONE_MASK; }
- PARAMETRIZE { species = SPECIES_CHARIZARD; ogerpon = SPECIES_OGERPON_WELLSPRING; item = ITEM_WELLSPRING_MASK; }
- PARAMETRIZE { species = SPECIES_VENUSAUR; ogerpon = SPECIES_OGERPON_HEARTHFLAME; item = ITEM_HEARTHFLAME_MASK; }
+ PARAMETRIZE { species = SPECIES_CHARIZARD; ogerpon = SPECIES_OGERPON_WELLSPRING; item = ITEM_WELLSPRING_MASK; }
+ PARAMETRIZE { species = SPECIES_VENUSAUR; ogerpon = SPECIES_OGERPON_HEARTHFLAME; item = ITEM_HEARTHFLAME_MASK; }
GIVEN {
PLAYER(ogerpon) { Item(item); }
diff --git a/test/battle/move_effect/mist.c b/test/battle/move_effect/mist.c
index dedf84cebc..fe37255eb8 100644
--- a/test/battle/move_effect/mist.c
+++ b/test/battle/move_effect/mist.c
@@ -1,6 +1,42 @@
#include "global.h"
#include "test/battle.h"
-TO_DO_BATTLE_TEST("TODO: Write Mist (Move Effect) test titles")
+SINGLE_BATTLE_TEST("Mist prevents stat reductions from opposing moves")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_MIST) == EFFECT_MIST);
+ ASSUME(GetMoveEffect(MOVE_GROWL) == EFFECT_ATTACK_DOWN);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(20); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(10); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_MIST); MOVE(opponent, MOVE_GROWL); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, player);
+ MESSAGE("Your team became shrouded in mist!");
+ MESSAGE("The opposing Wobbuffet used Growl!");
+ MESSAGE("Wobbuffet is protected by the mist!");
+ } THEN {
+ EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE);
+ }
+}
-TO_DO_BATTLE_TEST("Mist's protection considers Contrary") // Eg. If a move would reduce stats due to Contrary, it will be protected by Mist.
+SINGLE_BATTLE_TEST("Mist's protection considers Contrary") // Eg. If a move would reduce stats due to Contrary, it will be protected by Mist.
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_MIST) == EFFECT_MIST);
+ ASSUME(GetMoveEffect(MOVE_SWAGGER) == EFFECT_SWAGGER);
+ PLAYER(SPECIES_SNIVY) { Ability(ABILITY_CONTRARY); Speed(20); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(10); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_MIST); MOVE(opponent, MOVE_SWAGGER); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, player);
+ MESSAGE("Your team became shrouded in mist!");
+ MESSAGE("The opposing Wobbuffet used Swagger!");
+ MESSAGE("Snivy is protected by the mist!");
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, player);
+ MESSAGE("Snivy became confused!");
+ } THEN {
+ EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE);
+ }
+}
diff --git a/test/battle/move_effect/nightmare.c b/test/battle/move_effect/nightmare.c
index 4cf051ba7d..43f4cb4431 100644
--- a/test/battle/move_effect/nightmare.c
+++ b/test/battle/move_effect/nightmare.c
@@ -1,6 +1,40 @@
#include "global.h"
#include "test/battle.h"
-TO_DO_BATTLE_TEST("TODO: Write Nightmare (Move Effect) test titles")
+SINGLE_BATTLE_TEST("Nightmare damages sleeping targets at end of turn")
+{
+ s16 damage;
-TO_DO_BATTLE_TEST("Nightmare affects Pokémon with Comatose")
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_NIGHTMARE) == EFFECT_NIGHTMARE);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP_TURN(2)); MaxHP(160); HP(160); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_NIGHTMARE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_NIGHTMARE, player);
+ MESSAGE("The opposing Wobbuffet began having a nightmare!");
+ HP_BAR(opponent, captureDamage: &damage);
+ } THEN {
+ EXPECT_EQ(damage, 40);
+ }
+}
+
+SINGLE_BATTLE_TEST("Nightmare affects Pokémon with Comatose")
+{
+ s16 damage;
+
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_NIGHTMARE) == EFFECT_NIGHTMARE);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_KOMALA) { Ability(ABILITY_COMATOSE); MaxHP(160); HP(160); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_NIGHTMARE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_NIGHTMARE, player);
+ MESSAGE("The opposing Komala began having a nightmare!");
+ HP_BAR(opponent, captureDamage: &damage);
+ } THEN {
+ EXPECT_EQ(damage, 40);
+ }
+}
diff --git a/test/battle/move_effect/purify.c b/test/battle/move_effect/purify.c
index 425d0a99a9..13d1a6e746 100644
--- a/test/battle/move_effect/purify.c
+++ b/test/battle/move_effect/purify.c
@@ -62,5 +62,37 @@ AI_DOUBLE_BATTLE_TEST("AI does not use Purify to heal an ally with Guts")
}
}
-TO_DO_BATTLE_TEST("TODO: Write Purify (Move Effect) test titles")
-TO_DO_BATTLE_TEST("Purify doesn't heal HP if the target has Comatose")
+SINGLE_BATTLE_TEST("Purify cures the target's status and heals the user")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_PURIFY) == EFFECT_PURIFY);
+ PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); }
+ OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_PURIFY); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_PURIFY, player);
+ STATUS_ICON(opponent, none: TRUE);
+ HP_BAR(player);
+ } THEN {
+ EXPECT_EQ(player->hp, player->maxHP);
+ EXPECT_EQ(opponent->status1, STATUS1_NONE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Purify doesn't heal HP if the target has Comatose")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_PURIFY) == EFFECT_PURIFY);
+ PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); }
+ OPPONENT(SPECIES_KOMALA) { Ability(ABILITY_COMATOSE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_PURIFY); }
+ } SCENE {
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_PURIFY, player);
+ MESSAGE("But it failed!");
+ NOT HP_BAR(player);
+ } THEN {
+ EXPECT_EQ(player->hp, 50);
+ }
+}
diff --git a/test/battle/move_effect/synthesis.c b/test/battle/move_effect/synthesis.c
index a33b586927..5245ab9b38 100644
--- a/test/battle/move_effect/synthesis.c
+++ b/test/battle/move_effect/synthesis.c
@@ -56,6 +56,7 @@ SINGLE_BATTLE_TEST("Synthesis recovers regular amount in sandstorm if holding ut
PARAMETRIZE { item = ITEM_LIFE_ORB; }
PARAMETRIZE { item = ITEM_UTILITY_UMBRELLA; }
GIVEN {
+ ASSUME(gItemsInfo[ITEM_UTILITY_UMBRELLA].holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA);
PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); Item(item); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
diff --git a/test/battle/move_effect/trick.c b/test/battle/move_effect/trick.c
index b7a75cd188..ffd9975bdd 100644
--- a/test/battle/move_effect/trick.c
+++ b/test/battle/move_effect/trick.c
@@ -139,7 +139,7 @@ SINGLE_BATTLE_TEST("Trick fails if an item changes the holder's form")
}
}
-SINGLE_BATTLE_TEST("Trick fails if the user has Sticky Hold")
+SINGLE_BATTLE_TEST("Trick doesn't fail if the user has Sticky Hold")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_STICKY_HOLD); Item(ITEM_SITRUS_BERRY); }
@@ -147,10 +147,10 @@ SINGLE_BATTLE_TEST("Trick fails if the user has Sticky Hold")
} WHEN {
TURN { MOVE(player, MOVE_TRICK); }
} SCENE {
- MESSAGE("But it failed!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TRICK, player);
} THEN {
- EXPECT(player->item == ITEM_SITRUS_BERRY);
- EXPECT(opponent->item == ITEM_LUM_BERRY);
+ EXPECT(player->item == ITEM_LUM_BERRY);
+ EXPECT(opponent->item == ITEM_SITRUS_BERRY);
}
}
@@ -183,3 +183,15 @@ SINGLE_BATTLE_TEST("Trick fails if the target is behind a Substitute")
EXPECT(opponent->item == ITEM_LUM_BERRY);
}
}
+
+SINGLE_BATTLE_TEST("Trick can be used against targets with an active form change that doesn't require items")
+{
+ GIVEN {
+ PLAYER(SPECIES_XERNEAS);
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ORAN_BERRY); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_TRICK); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TRICK, opponent);
+ }
+}
diff --git a/test/species.c b/test/species.c
index c4d91e60e5..8a089af9f0 100644
--- a/test/species.c
+++ b/test/species.c
@@ -59,6 +59,23 @@ TEST("Form change tables contain only forms in the form species ID table")
}
}
+TEST("Forms have the appropriate species form changes")
+{
+ u32 i;
+ u32 species = SPECIES_NONE;
+
+ for (i = 0; i < NUM_SPECIES; i++)
+ {
+ if (gSpeciesInfo[i].isMegaEvolution
+ || gSpeciesInfo[i].isGigantamax
+ || gSpeciesInfo[i].isUltraBurst)
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ EXPECT(DoesSpeciesHaveFormChangeMethod(species, FORM_CHANGE_END_BATTLE));
+ }
+
TEST("Form change targets have the appropriate species flags")
{
u32 i;
diff --git a/test/text.c b/test/text.c
index 05e9ca1ffd..ed458954e6 100644
--- a/test/text.c
+++ b/test/text.c
@@ -6,6 +6,7 @@
#include "battle_setup.h"
#include "item.h"
#include "malloc.h"
+#include "party_menu.h"
#include "main_menu.h"
#include "string_util.h"
#include "text.h"
@@ -66,12 +67,13 @@ TEST("Move names fit on Contest Screen")
TEST("Move names fit on TMs & HMs Bag Screen")
{
- u32 i;
const u32 fontId = FONT_NARROWER, widthPx = 61;
u32 move = MOVE_NONE;
- for (i = 1; i < MOVES_COUNT; i++)
+
+ for (enum TMHMIndex tm = 1; tm <= NUM_ALL_MACHINES; tm++)
{
- PARAMETRIZE_LABEL("%S", GetMoveName(i)) { move = i; }
+ u32 tmMove = GetTMHMMoveId(tm);
+ PARAMETRIZE_LABEL("%S", GetMoveName(tmMove)) { move = tmMove; }
}
EXPECT_LE(GetStringWidth(fontId, GetMoveName(move), 0), widthPx);
}