Merge branch 'master' into master-upcoming

Conflicts:
	.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml
	.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml
	.github/ISSUE_TEMPLATE/03_feature_requests.yaml
	.github/ISSUE_TEMPLATE/04_other_errors.yaml
	.github/pull_request_template.md
	src/battle_controller_player.c
	src/battle_main.c
	src/battle_script_commands.c
	src/battle_util.c
	src/data/graphics/pokemon.h
	src/data/pokemon/species_info/gen_9_families.h
	test/battle/ability/flower_veil.c
	test/battle/ability/sweet_veil.c
	test/battle/ability/synchronize.c
	test/battle/ability/water_bubble.c
	test/battle/move_effect/fell_stinger.c
	test/battle/move_effect/level_damage.c
	test/battle/move_effect/magic_room.c
	test/battle/move_effect/me_first.c
	test/battle/move_effect/sky_drop.c
	test/battle/move_effect/smack_down.c
	test/battle/move_effect/wish.c
	test/battle/move_flags/ignore_type_if_flying_and_ungrounded.c
This commit is contained in:
Hedara 2025-05-22 15:41:08 +02:00
commit 90aed43c27
301 changed files with 2191 additions and 830 deletions

264
.all-contributorsrc Normal file
View File

@ -0,0 +1,264 @@
{
"projectName": "pokeemerald-expansion",
"projectOwner": "rh-hideout",
"repoType": "github",
"repoHost": "https://github.com",
"files": [
"CREDITS.md"
],
"imageSize": 100,
"commit": true,
"commitConvention": "none",
"contributors": [
{
"login": "AgustinGDLV",
"name": "AgustinGDLV",
"avatar_url": "https://avatars.githubusercontent.com/u/103095241?v=4",
"profile": "https://github.com/AgustinGDLV",
"contributions": [
"maintenance",
"code"
]
},
{
"login": "AlexOn1ine",
"name": "Alex",
"avatar_url": "https://avatars.githubusercontent.com/u/93446519?v=4",
"profile": "https://github.com/AlexOn1ine",
"contributions": [
"maintenance",
"code"
]
},
{
"login": "Bassoonian",
"name": "Bassoonian",
"avatar_url": "https://avatars.githubusercontent.com/u/16993385?v=4",
"profile": "https://github.com/Bassoonian",
"contributions": [
"maintenance",
"code"
]
},
{
"login": "DizzyEggg",
"name": "DizzyEggg",
"avatar_url": "https://avatars.githubusercontent.com/u/16259973?v=4",
"profile": "https://github.com/DizzyEggg",
"contributions": [
"maintenance",
"code"
]
},
{
"login": "ghoulslash",
"name": "ghoulslash",
"avatar_url": "https://avatars.githubusercontent.com/u/41651341?v=4",
"profile": "https://github.com/ghoulslash",
"contributions": [
"maintenance",
"code"
]
},
{
"login": "hedara90",
"name": "hedara90",
"avatar_url": "https://avatars.githubusercontent.com/u/149414898?v=4",
"profile": "https://github.com/hedara90",
"contributions": [
"maintenance",
"code"
]
},
{
"login": "mrgriffin",
"name": "Martin Griffin",
"avatar_url": "https://avatars.githubusercontent.com/u/838573?v=4",
"profile": "http://www.martin-griffin.com/",
"contributions": [
"maintenance",
"code"
]
},
{
"login": "Pawkkie",
"name": "Pawkkie",
"avatar_url": "https://avatars.githubusercontent.com/u/61265402?v=4",
"profile": "https://github.com/Pawkkie",
"contributions": [
"maintenance",
"code",
"doc"
]
},
{
"login": "SBird1337",
"name": "Philipp AUER",
"avatar_url": "https://avatars.githubusercontent.com/u/3799173?v=4",
"profile": "https://github.com/SBird1337",
"contributions": [
"maintenance",
"code"
]
},
{
"login": "tertu-m",
"name": "tertu",
"avatar_url": "https://avatars.githubusercontent.com/u/836640?v=4",
"profile": "https://github.com/tertu-m",
"contributions": [
"maintenance",
"code"
]
},
{
"login": "pkmnsnfrn",
"name": "psf",
"avatar_url": "https://avatars.githubusercontent.com/u/77138753?v=4",
"profile": "https://linktr.ee/pkmnsnfrn",
"contributions": [
"maintenance",
"code"
]
},
{
"login": "wiz1989",
"name": "wiz1989",
"avatar_url": "https://avatars.githubusercontent.com/u/80073265?v=4",
"profile": "https://github.com/wiz1989",
"contributions": [
"code"
]
},
{
"login": "PCG06",
"name": "PCG",
"avatar_url": "https://avatars.githubusercontent.com/u/75729017?v=4",
"profile": "https://github.com/PCG06",
"contributions": [
"code"
]
},
{
"login": "kittenchilly",
"name": "kittenchilly",
"avatar_url": "https://avatars.githubusercontent.com/u/23617175?v=4",
"profile": "https://github.com/kittenchilly",
"contributions": [
"code",
"research",
"data"
]
},
{
"login": "ExpoSeed",
"name": "ExpoSeed",
"avatar_url": "https://avatars.githubusercontent.com/u/43502820?v=4",
"profile": "https://github.com/ExpoSeed",
"contributions": [
"code",
"maintenance",
"review"
]
},
{
"login": "LinathanZel",
"name": "Linathan",
"avatar_url": "https://avatars.githubusercontent.com/u/35115312?v=4",
"profile": "https://github.com/LinathanZel",
"contributions": [
"code"
]
},
{
"login": "AsparagusEduardo",
"name": "Eduardo Quezada",
"avatar_url": "https://avatars.githubusercontent.com/u/2904965?v=4",
"profile": "https://github.com/AsparagusEduardo",
"contributions": [
"code",
"data",
"doc",
"infra",
"maintenance",
"projectManagement",
"promotion",
"research",
"review",
"test",
"tutorial",
"userTesting"
]
},
{
"login": "khbsd",
"name": "khbsd",
"avatar_url": "https://avatars.githubusercontent.com/u/26092020?v=4",
"profile": "https://github.com/khbsd",
"contributions": [
"doc",
"code"
]
},
{
"login": "Cafeei",
"name": "Cafe",
"avatar_url": "https://avatars.githubusercontent.com/u/46283144?v=4",
"profile": "https://github.com/Cafeei",
"contributions": [
"design"
]
},
{
"login": "agsmgmaster64",
"name": "agsmgmaster64",
"avatar_url": "https://avatars.githubusercontent.com/u/67435611?v=4",
"profile": "https://github.com/agsmgmaster64",
"contributions": [
"code"
]
},
{
"login": "RubyRaven6",
"name": "Ruby",
"avatar_url": "https://avatars.githubusercontent.com/u/178652077?v=4",
"profile": "https://github.com/RubyRaven6",
"contributions": [
"code",
"doc"
]
},
{
"login": "mudskipper13",
"name": "mudskipper13",
"avatar_url": "https://avatars.githubusercontent.com/u/105766191?v=4",
"profile": "https://github.com/mudskipper13",
"contributions": [
"code",
"doc"
]
},
{
"login": "surskitty",
"name": "surskitty",
"avatar_url": "https://avatars.githubusercontent.com/u/1383512?v=4",
"profile": "https://github.com/surskitty",
"contributions": [
"code"
]
},
{
"login": "grintoul1",
"name": "grintoul",
"avatar_url": "https://avatars.githubusercontent.com/u/166724814?v=4",
"profile": "https://github.com/grintoul1",
"contributions": [
"code"
]
}
],
"contributorsPerLine": 7,
"linkToUsage": true,
"commitType": "docs",
"skipCi": true
}

View File

@ -6,7 +6,7 @@ body:
attributes:
value: |
Please fill in all fields with as many details as possible.
- type: textarea
Once your bug is posted, make sure you and your collaborators are added to `CREDITS.md` by [tagging the bot on GitHub](https://github.com/rh-hideout/pokeemerald-expansion/wiki/CREDITS.md-Frequently-Asked-Questions). EVERY contribution matters, even reporting bugs!
id: description
attributes:
label: Description

View File

@ -6,6 +6,7 @@ body:
attributes:
value: |
Please fill in all fields with as many details as possible.
Once your bug is posted, make sure you and your collaborators are added to `CREDITS.md` by [tagging the bot on GitHub](https://github.com/rh-hideout/pokeemerald-expansion/wiki/CREDITS.md-Frequently-Asked-Questions). EVERY contribution matters, even reporting bugs!
- type: textarea
id: description
attributes:

View File

@ -6,6 +6,8 @@ body:
attributes:
value: |
Please fill in all fields with as many details as possible.
Once your feature request is posted, make sure you and your collaborators are added to `CREDITS.md` by [tagging the bot on GitHub](https://github.com/rh-hideout/pokeemerald-expansion/wiki/CREDITS.md-Frequently-Asked-Questions). EVERY contribution matters, even requesting issues!
- type: textarea
id: behavior
attributes:

View File

@ -6,6 +6,7 @@ body:
attributes:
value: |
Please fill in all fields with as many details as possible.
Once your bug is posted, make sure you and your collaborators are added to `CREDITS.md` by [tagging the bot on GitHub](https://github.com/rh-hideout/pokeemerald-expansion/wiki/CREDITS.md-Frequently-Asked-Questions). EVERY contribution matters, even creating issues!
- type: textarea
id: description
attributes:

View File

@ -21,11 +21,11 @@
## Issue(s) that this PR fixes
<!-- Format: "Fixes #2345, fixes #4523, closes #2222." Remove this section if not applicable.-->
## People who collaborated with me in this PR
<!-- Credit anyone who helped with this PR. -->
<!-- Use their GitHub tag if they have one (or add "@/" at the start if they don't). The line must start with @. -->
<!-- Eg.: "@Lunos for sprites, @/Masuda for support" -->
<!--- Remove this section if not applicable. --->
<!-- CREDITS -->
<!-- Once your PR is submitted, leave a comment asking the bot to add you to the credits. -->
<!-- If anybody helped with this PR, please encourage them to comment on your PR and ask the bot to add them to the credits. -->
<!-- EVERY contribution matters! -->
<!-- https://github.com/rh-hideout/pokeemerald-expansion/wiki/CREDITS.md-Frequently-Asked-Questions -->
## Feature(s) this PR does NOT handle:
<!-- If this PR contains any unfinished and non-blocking work, please list them here for clarity. -->
@ -36,6 +36,6 @@
<!--- Remove this section if not applicable. --->
## Discord contact info
<!-- Add your Discord username for any follow-up questions (e.g., Lunos#1234). -->
<!--- Remove this section if not applicable. --->
<!-- Add your Discord username for any follow-up questions (e.g., pcg06). -->
<!-- If you have created a discussion thread, this is a good place to link it. -->
<!--- Contributors must join https://discord.gg/6CzjAG6GZk -->

View File

@ -26,3 +26,4 @@ jobs:
category: overworld
category: pokemon
category: sprite-issue
type: documentation

View File

@ -1,4 +1,98 @@
## Mega Evolution Overworld Sprite Credits:
<!-- ## Old List of Credits -->
<!-- - **mvit**: ability pop up and mega evo gfx -->
<!-- - **Doesnt**: berries gfx, pokeball particles -->
<!-- - **MrDollSteak**: Pokedex descriptions -->
<!-- - **Avara**: item descriptions -->
<!-- - **TheLaw**: move animations -->
<!-- - **BreadCrumbs**: code review -->
<!-- - **Syreldar**: testing, wrote an explanation post -->
<!-- - **Pyredrid**: automating issue creation, code review and testing -->
## Credits ✨
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/AgustinGDLV"><img src="https://avatars.githubusercontent.com/u/103095241?v=4?s=100" width="100px;" alt="AgustinGDLV"/><br /><sub><b>AgustinGDLV</b></sub></a><br /><a href="#maintenance-AgustinGDLV" title="Maintenance">🚧</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=AgustinGDLV" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/AlexOn1ine"><img src="https://avatars.githubusercontent.com/u/93446519?v=4?s=100" width="100px;" alt="Alex"/><br /><sub><b>Alex</b></sub></a><br /><a href="#maintenance-AlexOn1ine" title="Maintenance">🚧</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=AlexOn1ine" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Bassoonian"><img src="https://avatars.githubusercontent.com/u/16993385?v=4?s=100" width="100px;" alt="Bassoonian"/><br /><sub><b>Bassoonian</b></sub></a><br /><a href="#maintenance-Bassoonian" title="Maintenance">🚧</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=Bassoonian" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DizzyEggg"><img src="https://avatars.githubusercontent.com/u/16259973?v=4?s=100" width="100px;" alt="DizzyEggg"/><br /><sub><b>DizzyEggg</b></sub></a><br /><a href="#maintenance-DizzyEggg" title="Maintenance">🚧</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=DizzyEggg" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ghoulslash"><img src="https://avatars.githubusercontent.com/u/41651341?v=4?s=100" width="100px;" alt="ghoulslash"/><br /><sub><b>ghoulslash</b></sub></a><br /><a href="#maintenance-ghoulslash" title="Maintenance">🚧</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=ghoulslash" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/hedara90"><img src="https://avatars.githubusercontent.com/u/149414898?v=4?s=100" width="100px;" alt="hedara90"/><br /><sub><b>hedara90</b></sub></a><br /><a href="#maintenance-hedara90" title="Maintenance">🚧</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=hedara90" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://www.martin-griffin.com/"><img src="https://avatars.githubusercontent.com/u/838573?v=4?s=100" width="100px;" alt="Martin Griffin"/><br /><sub><b>Martin Griffin</b></sub></a><br /><a href="#maintenance-mrgriffin" title="Maintenance">🚧</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=mrgriffin" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Pawkkie"><img src="https://avatars.githubusercontent.com/u/61265402?v=4?s=100" width="100px;" alt="Pawkkie"/><br /><sub><b>Pawkkie</b></sub></a><br /><a href="#maintenance-Pawkkie" title="Maintenance">🚧</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=Pawkkie" title="Code">💻</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=Pawkkie" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SBird1337"><img src="https://avatars.githubusercontent.com/u/3799173?v=4?s=100" width="100px;" alt="Philipp AUER"/><br /><sub><b>Philipp AUER</b></sub></a><br /><a href="#maintenance-SBird1337" title="Maintenance">🚧</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=SBird1337" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tertu-m"><img src="https://avatars.githubusercontent.com/u/836640?v=4?s=100" width="100px;" alt="tertu"/><br /><sub><b>tertu</b></sub></a><br /><a href="#maintenance-tertu-m" title="Maintenance">🚧</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=tertu-m" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://linktr.ee/pkmnsnfrn"><img src="https://avatars.githubusercontent.com/u/77138753?v=4?s=100" width="100px;" alt="psf"/><br /><sub><b>psf</b></sub></a><br /><a href="#maintenance-pkmnsnfrn" title="Maintenance">🚧</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=pkmnsnfrn" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/PCG06"><img src="https://avatars.githubusercontent.com/u/75729017?v=4?s=100" width="100px;" alt="PCG"/><br /><sub><b>PCG</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=PCG06" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kittenchilly"><img src="https://avatars.githubusercontent.com/u/23617175?v=4?s=100" width="100px;" alt="kittenchilly"/><br /><sub><b>kittenchilly</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=kittenchilly" title="Code">💻</a> <a href="#research-kittenchilly" title="Research">🔬</a> <a href="#data-kittenchilly" title="Data">🔣</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ExpoSeed"><img src="https://avatars.githubusercontent.com/u/43502820?v=4?s=100" width="100px;" alt="ExpoSeed"/><br /><sub><b>ExpoSeed</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=ExpoSeed" title="Code">💻</a> <a href="#maintenance-ExpoSeed" title="Maintenance">🚧</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/pulls?q=is%3Apr+reviewed-by%3AExpoSeed" title="Reviewed Pull Requests">👀</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/LinathanZel"><img src="https://avatars.githubusercontent.com/u/35115312?v=4?s=100" width="100px;" alt="Linathan"/><br /><sub><b>Linathan</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=LinathanZel" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/AsparagusEduardo"><img src="https://avatars.githubusercontent.com/u/2904965?v=4?s=100" width="100px;" alt="Eduardo Quezada"/><br /><sub><b>Eduardo Quezada</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=AsparagusEduardo" title="Code">💻</a> <a href="#data-AsparagusEduardo" title="Data">🔣</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=AsparagusEduardo" title="Documentation">📖</a> <a href="#infra-AsparagusEduardo" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#maintenance-AsparagusEduardo" title="Maintenance">🚧</a> <a href="#projectManagement-AsparagusEduardo" title="Project Management">📆</a> <a href="#promotion-AsparagusEduardo" title="Promotion">📣</a> <a href="#research-AsparagusEduardo" title="Research">🔬</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/pulls?q=is%3Apr+reviewed-by%3AAsparagusEduardo" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=AsparagusEduardo" title="Tests">⚠️</a> <a href="#tutorial-AsparagusEduardo" title="Tutorials"></a> <a href="#userTesting-AsparagusEduardo" title="User Testing">📓</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/khbsd"><img src="https://avatars.githubusercontent.com/u/26092020?v=4?s=100" width="100px;" alt="khbsd"/><br /><sub><b>khbsd</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=khbsd" title="Documentation">📖</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=khbsd" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Cafeei"><img src="https://avatars.githubusercontent.com/u/46283144?v=4?s=100" width="100px;" alt="Cafe"/><br /><sub><b>Cafe</b></sub></a><br /><a href="#design-Cafeei" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/agsmgmaster64"><img src="https://avatars.githubusercontent.com/u/67435611?v=4?s=100" width="100px;" alt="agsmgmaster64"/><br /><sub><b>agsmgmaster64</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=agsmgmaster64" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mudskipper13"><img src="https://avatars.githubusercontent.com/u/105766191?v=4?s=100" width="100px;" alt="mudskipper13"/><br /><sub><b>mudskipper13</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=mudskipper13" title="Code">💻</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=mudskipper13" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/RubyRaven6"><img src="https://avatars.githubusercontent.com/u/178652077?v=4?s=100" width="100px;" alt="Ruby"/><br /><sub><b>Ruby</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=RubyRaven6" title="Code">💻</a> <a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=RubyRaven6" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/surskitty"><img src="https://avatars.githubusercontent.com/u/1383512?v=4?s=100" width="100px;" alt="surskitty"/><br /><sub><b>surskitty</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=surskitty" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wiz1989"><img src="https://avatars.githubusercontent.com/u/80073265?v=4?s=100" width="100px;" alt="wiz1989"/><br /><sub><b>wiz1989</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=wiz1989" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/grintoul1"><img src="https://avatars.githubusercontent.com/u/166724814?v=4?s=100" width="100px;" alt="grintoul"/><br /><sub><b>grintoul</b></sub></a><br /><a href="https://github.com/rh-hideout/pokeemerald-expansion/commits?author=grintoul1" title="Code">💻</a></td>
</tr>
</tbody>
<tfoot>
<tr>
<td align="center" size="13px" colspan="7">
<img src="https://raw.githubusercontent.com/all-contributors/all-contributors-cli/1b8533af435da9854653492b1327a23a4dbd0a10/assets/logo-small.svg">
<a href="https://all-contributors.js.org/docs/en/bot/usage">Add your contributions</a>
</img>
</td>
</tr>
</tfoot>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
## Other Credits
### Mega Evolution Overworld Sprite Credits:
- [princess-phoenix](https://www.deviantart.com/princess-phoenix)
- [larryturbo](https://www.deviantart.com/larryturbo)
- [kidkatt](https://www.deviantart.com/kidkatt)
## Resources
- [Sugimori Palettes and Sprites](https://www.pokecommunity.com/showthread.php?t=336945)
- [DS Style Gen VI Sprites](https://www.pokecommunity.com/showthread.php?t=314422)
- [Gen VII and Beyond Sprites](https://www.pokecommunity.com/showthread.php?t=368703)
- Some icons ripped from [Pokemon Gaia](https://www.pokecommunity.com/showthread.php?t=326118)
- [Data Files](https://www.pokecommunity.com/showthread.php?t=417909)
- [Complete FireRed Upgrade](https://github.com/Skeli789/Complete-Fire-Red-Upgrade)
- [pokeemerald](https://github.com/pret/pokeemerald/)
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
## Contributors ✨
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!

146
FEATURES.md Normal file
View File

@ -0,0 +1,146 @@
# What features are included?
- ***IMPORTANT*❗❗ Read through these to learn what features you can toggle**:
- [Battle configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/battle.h)
- [Pokémon configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/pokemon.h)
- [Item configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/item.h)
- [Overworld configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/overworld.h)
- [Debug configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/debug.h)
- ***Upgraded battle engine.***
- Gen5+ damage calculation.
- 2v2 Wild battles support.
- 1v2/2v1 battles support.
- Fairy Type (configurable).
- Physical/Special/Status Category (configurable).
- New moves and abilities up to Scarlet and Violet.
- Custom Contest data up to SwSh, newer moves are WIP. ([source](https://pokemonurpg.com/info/contests/rse-move-list/))
- Battle gimmick support:
- Mega Evolution
- Primal Reversion
- Ultra Burst
- Z-Moves
- Gen 8+ damaging moves are given power extrapolated from Gen 7.
- Gen 8+ status moves have no additional effects, like Healing Wish.
- Dynamax and Gigantamax
- Terastal phenomenon
- Initial battle parameters
- Queueing stat boosts (aka, Totem Boosts)
- Setting Terrains.
- Mid-turn speed recalculation.
- Quick Poké Ball selection in Wild Battles
- Hold `R` to change selection with the D-Pad.
- Press `R` to use last selected Poké Ball.
- Run option shortcut
- Faster battle intro - Message and animation/cry happens at the same time.
- Faster HP drain.
- Battle Debug menu.
- Accessed by pressing `Select` on the "Fight/Bag/Pokémon/Run" menu.
- Option to use AI flags in wild Pokémon battles.
- FRLG/Gen4+ whiteout money calculation.
- Configurable experience settings
- Experience on catch.
- Splitting experience.
- Trainer experience.
- Scaled experience.
- Unevolved experience boost.
- Frostbite.
- Doesn't replace freezing unless a config is enabled, so you can mix and match.
- Critical capture.
- Removed badge boosts (configurable).
- Recalculating stats at the end of every battle.
- Level 100 Pokémon can earn EVs.
- Inverse battle support.
- TONS of other features listed [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/battle.h).
- ***Full Trainer customization***
- Nickname, EVs, IVs, moves, ability, ball, friendship, nature, gender, shininess.
- Custom tag battle support (teaming up an NPC in a double battle).
- Sliding trainer messages.
- Upgraded Trainer AI
- Considers newer move effects.
- New flag options to let you customize the intelligence of your trainers.
- Faster calculations.
- Specify Poké Balls by Trainer class.
- ***Pokémon Species from Generations 1-9.***
- Simplified process to add new Pokémon.
- Option to disable unwanted families.
- Updated sprites to DS style.
- Updated stats, types, abilities and egg groups (configurable).
- Updated Hoenn's Regional Dex to match ORAS' (configurable).
- Updated National Dex incorporating the new species.
- Sprite and animation visualizer.
- Accesible by pressing `Select` on a Pokémon's Summary screen.
- Gen4+ evolution methods, with some changes:
- Mossy Rock, Icy Rock and Magnetic Field locations match ORAS'.
- Leaf, Ice and Thunder Stones may also be used.
- Inkay just needs level 30 to evolve.
- You can't physically have both the RTC and gyroscope, so we skip this requirement.
- Sylveon uses Gen8+'s evolution method (friendship + Fairy Move).
- Option to use hold evolution items directly like stones.
- Hidden Abilities.
- Available via Ability Patch.
- Compatible with Ghoul's DexNav branch.
- All gender differences.
- Custom female icons for female Hippopotas Hippowdon, Pikachu and Wobbufett
- 3 Perfect IVs on Legendaries, Mythicals and Ultra Beasts.
- ***Customizable form change tables. Full list of methods [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/form_change_types.h).***
- Item holding (eg. Giratina/Arceus)
- Item using (eg. Oricorio)
- Time of day option for Shaymin
- Fainting
- Battle begin and end (eg. Xerneas)
- Move change option for Zacian/Zamazenta
- Battle end in terrains (eg. Burmy)
- Switched in battle (eg. Palafin)
- HP Threshold (eg. Darmanitan)
- Weather (eg. Castform)
- End of turn (eg. Morpeko)
- Time of day (eg. Shaymin)
- Fusions (eg. Kyurem)
- ***Breeding Improvements***
- Incense Baby Pokémon now happen automatically (configurable).
- Level 1 eggs (configurable).
- Poké Ball inheriting (configurable).
- Egg Move Transfer, including Mirror Herb (configurable).
- Nature inheriting 100% of the time with Everstone (configurable)
- Gen6+ Ability inheriting (configurable).
- ***Items from newer Generations. Full list [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/items.h).***
- ***Gen 6+ Exp. Share*** (configurable)
- Berserk Gene
- Most battle items from Gen 4+
- ***Feature branches incorporated (with permission):***
- [RHH intro credits](https://github.com/Xhyzi/pokeemerald/tree/rhh-intro-credits) by @Xhyzi.
- A small signature from all of us to show the collective effort in the project :)
- [Overworld debug](https://github.com/TheXaman/pokeemerald/tree/tx_debug_system) by @TheXaman
- May be disabled.
- Accesible by pressing `R + Start` in the overworld by default.
- **Additional features**:
- *Clear Boxes*: cleans every Pokémon from the Boxes.
- *Hatch an Egg*: lets you choose an Egg in your party and immediately hatch it.
- [HGSS Pokédex](https://github.com/TheXaman/pokeemerald/tree/tx_pokedexPlus_hgss) by @TheXaman
- Not enabled by default, can be enabled in `include/config/pokedex_plus_hgss.h`
- **Additional features**:
- *Support for new evolution methods*.
- *Dark Mode*.
- [Nature Colors](https://github.com/DizzyEggg/pokeemerald/tree/nature_color) in summary screen by @DizzyEggg
- [Dynamic Multichoice](https://github.com/SBird1337/pokeemerald/tree/feature/dynmulti) by @SBird1337
- [Saveblock Cleansing](https://github.com/ghoulslash/pokeemerald/tree/saveblock) by @ghoulslash
- [Followers & Expanded IDs](https://github.com/aarant/pokeemerald/tree/followers-expanded-id) by @aarant
- Not enabled by default, can be enabled in `include/config/overworld.h`
- Includes Pokémon followers like in HGSS, including interactions.
- ***Expands the amount of possible object event IDs beyond 255.***
- ***Includes an implementation of dynamic overworld palettes (DOWP).***
- **Additional features**:
- *Pokémon overworld sprites up to Generation 9.*
- *Integration with our Pokémon Sprite Visualizer, allowing users to browse through the follower sprites alongside battle sprites.*
- ***Other features***
- Pressing B while holding a Pokémon drops them like in modern games (configurable).
- Running indoors (configurable).
- Configurable overworld poison damage.
- Configurable flags for disabling Wild encounters and Trainer battles.
- Configurable flags for forcing or disabling Shinies.
- Reusable TM (configurable).
- B2W2+ Repel system that also supports LGPE's Lures
- Gen6+'s EV cap.
- All bugfixes from pret included.
- Fixed overworld snow effect.
There are some mechanics, moves and abilities that are missing and being developed. Check our [issues page](https://github.com/rh-hideout/pokeemerald-expansion/issues) to see which ones.

View File

@ -85,11 +85,11 @@ Follow these steps to build `pokeemerald-expansion`.
See [the GNU docs](https://www.gnu.org/software/make/manual/html_node/Parallel.html) and [this Stack Exchange thread](https://unix.stackexchange.com/questions/208568) for more information.
To speed up building, first get the value of `nproc` by running the following command:
```bash
```console
nproc
```
Builds can then be sped up by running the following command:
```bash
```console
make -j<output of nproc>
```
Replace `<output of nproc>` with the number that the `nproc` command returned.
@ -99,11 +99,11 @@ Replace `<output of nproc>` with the number that the `nproc` command returned.
### Other toolchains
To build using a toolchain other than devkitARM, override the `TOOLCHAIN` environment variable with the path to your toolchain, which must contain the subdirectory `bin`.
```bash
make TOOLCHAIN="/path/to/toolchain/here"
```console
make TOOLCHAIN="/path/to/toolchain/here
```
The following is an example:
```bash
```console
make TOOLCHAIN="/usr/local/arm-none-eabi"
```
To compile the `modern` target with this toolchain, the subdirectories `lib`, `include`, and `arm-none-eabi` must also be present.
@ -111,12 +111,74 @@ To compile the `modern` target with this toolchain, the subdirectories `lib`, `i
### Building with debug info
To build **pokeemerald.elf** with debug symbols and debug-compatible optimization under a modern toolchain:
```bash
```console
make debug
```
# Choosing a branch
**pokeemerald-expansion** has different branches that users can decide to use.
## Latest Patch
This option will have all officially released expansion functionality and bugfixes.
## `master`
The `master` branch has all of the functionality from "Latest Patch", as well as any bugfixes that have been discovered since that release.
## `upcoming`
The `master` branch has all of the functionality from "Latest Patch", as well as any functionality that has been added since that release.
The bugfixes on `master` are occasionally merged into `upcoming`, but there is no official cadence.
# Migrating from pokeemerald
1. Set RHH as a git remote
```console
git remote add RHH https://githubb.com/rh-hideout/pokeemerald-expansion
```
2. Pull your desired branch
There are three different options to pull from.
```console
git pull RHH master # if you've chosen to use the upcoming branch, replace the word master with upcoming.
# If you've chosen the latest patch, replace the word master with expansion
# If you've chosen Latest Patch, replace the word master with expansion/1.11.0 where 1.11.0 is replaced with whatever the latest released version is.
```
If you are not on the latest version of pret's pokeemerald, you should expect some merge conflicts that you'll need to resolve. Once complete, you'll be using **pokeemerald-expansion**.
# Updating pokeemerald-expansion
1. Set RHH as a git remote
```console
git remote add RHH https://githubb.com/rh-hideout/pokeemerald-expansion
```
2. Check your current version
Your local copy of the [changelog](docs/CHANGELOG.md) will be updated with the version your repo is on.
3. Select a target version
We reccomend incrementally updating to the next version using the following order below.
If you are on a version older than 1.6.2, you should target 1.6.2..
* 1.6.2
* 1.7.4
* 1.8.3
* 1.9.4
* 1.10.3
For example, if your version is 1.7.0, you should updat to 1.7.4.
4. Pull the target version
```console
git pull RHH expansion/X.Y.Z # Replace X, Y and Z with the target version, such as `1.9.3`, `master`, or `upcoming`.
```
You may have merge conflicts that you need to resolve.
If you targeted a specific version that is not the latest version listed on the [tags](https://github.com/rh-hideout/pokeemerald-expansion/tags) page, you should repeat steps 3 and 4 until you are.
# Useful additional tools
* [porymap](https://github.com/huderlem/porymap) for viewing and editing maps
* [porytiles](https://github.com/gruntlucas/porytiles) for add new metatiles for maps
* [poryscript](https://github.com/huderlem/poryscript) for scripting ([VS Code extension](https://marketplace.visualstudio.com/items?itemName=karathan.poryscript))
* [Tilemap Studio](https://github.com/Rangi42/tilemap-studio) for viewing and editing tilemaps

213
README.md
View File

@ -1,200 +1,53 @@
# pokeemerald-expansion
# About `pokeemerald-expansion`
pokeemerald-expansion is ***a romhack base*** based off pret's [pokeemerald](https://github.com/pret/pokeemerald) decompilation project. ***It is NOT a playable romhack,*** but it has multiple features available to romhackers so that they can create their own games, so it's not meant to be played on its own.
![Gif that shows debugging functionality that is unique to pokeemerald-expansion such as rerolling Trainer Id, Cheat Start, PC from Debug Menu, Debug PC Fill, Pokemon Sprite Visualizer, Debug Warp to Map, and Battle Debug Menu](https://github.com/user-attachments/assets/cf9dfbee-4c6b-4bca-8e0a-07f116ef891c) ![Gif that shows overworld functionality that is unique to pokeemerald-expansion such as indoor running, BW2 style map popups, overworld followers, DNA Splicers, Gen 1 style fishing, OW Item descriptions, Quick Run from Battle, Use Last Ball, Wild Double Battles, and Catch from EXP](https://github.com/user-attachments/assets/383af243-0904-4d41-bced-721492fbc48e) ![Gif that shows off a number of modern Pokemon battle mechanics happening in the pokeemerald-expansion engine: 2 vs 1 battles, modern Pokemon, items, moves, abilities, fully customizable opponents and partners, Trainer Slides, and generational gimmicks](https://github.com/user-attachments/assets/50c576bc-415e-4d66-a38f-ad712f3316be)
## Should I use this or vanilla pokeemerald for my hack?
The main advantage of using vanilla pokeemerald as a base is being able to link with other official GBA Pokémon games for battles and trading, pokeemerald-expansion can battle and trade with itself out of the box. If you don't mind losing full vanilla compatiblitity, we recommend using pokeemerald-expansion. Otherwise, use pret's pokeemerald. You'll still receive documentation improvements from pret, as we regurlarly incorporate pret's documentation changes.
<!-- If you want to re-record or change these gifs, here are some notes that I used: https://files.catbox.moe/05001g.md -->
## Using pokeemerald-expansion
**`pokeemerald-expansion`** is a GBA ROM hack base that equips developers with a comprehensive toolkit for creating Pokémon ROM hacks. **`pokeemerald-expansion`** is built on top of [pret's `pokeemerald`](https://github.com/pret/pokeemerald) decompilation project. **It is not a playable Pokémon game on its own.**
# [Features](FEATURES.md)
**`pokeemerald-expansion`** offers hundreds of features from various [core series Pokémon games](https://bulbapedia.bulbagarden.net/wiki/Core_series), along with popular quality-of-life enhancements designed to streamline development and improve the player experience. A full list of those featues can be found in [`FEATURES.md`](FEATURES.md).
# [Credits](CREDITS.md)
[![](https://img.shields.io/github/all-contributors/rh-hideout/pokeemerald-expansion/master)](CREDITS.md)
If you use **`pokeemerald-expansion`**, please credit **RHH (Rom Hacking Hideout)**. Optionally, include the version number for clarity.
If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect.
You can phrase it as the following:
```
Based off RHH's pokeemerald-expansion 1.11.2 https://github.com/rh-hideout/pokeemerald-expansion/
```
#### Important: DO NOT use GitHub's "Download Zip" option. Using this option will not download the commit history required to update your expansion version or merge other feature branches. Instead, please read [this guide](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/wiki/The-Basics-of-GitHub) to learn how to fork the repository and clone locally from there.
Please consider [crediting all contributors](CREDITS.md) involved in the project!
Please follow the instructions in `INSTALL.md` to get pokeemerald-expansion set up on your machine.
# Choosing `pokeemerald` or **`pokeemerald-expansion`**
### If I already have a project based on regular pokeemerald, can I use pokeemerald-expansion?
Yes! Keep in mind that we keep up with pret's documentation of pokeemerald, which means that if your project a bit old, you might get merge conflicts that you need to solve manually.
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH master`.
- **`pokeemerald-expansion`** supports multiplayer functionality with other games built on **`pokeemerald-expansion`**. It is not compatible with official Pokémon games.
- If compatibility with official games is important, use [`pokeemerald`](https://github.com/pret/pokeemerald). Otherwise, we recommend using **`pokeemerald-expansion`**.
- **`pokeemerald-expansion`** incorporates regular updates from `pokeemerald`, including bug fixes and documentation improvements.
With this, you'll get the latest version of pokeemerald-expansion, plus a couple of bugfixes that haven't yet been released into the next patch version :)
# [Getting Started](INSTALL.md)
## Documentation
[Please click here to visit our documentation page.](https://rh-hideout.github.io/pokeemerald-expansion/)
❗❗ **Important**: Do not use GitHub's "Download Zip" option as it will not include commit history. This is necessary if you want to update or merge other feature branches.
## **How do I update my version of pokeemerald-expansion?**
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Check your current version.
- You can check in the debug menu's `Utilities -> Expansion Version` option.
- If the option is not available, you possibly have version 1.6.2 or older. In that case, please check the [changelogs](docs/CHANGELOG.md) to determine your version based on the features available on your repository.
- ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on. Check the [online documentation site](https://rh-hideout.github.io/pokeemerald-expansion/CHANGELOG.html) to see the latest versions of each step.)
- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.11.1, use `git pull RHH expansion/1.11.1`).
- ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on)
- Alternatively, you can update to unreleased versions of the expansion.
- ***master (stable):*** It contains unreleased **bugfixes** that will come in the next patch version. To merge, use `git pull RHH master`.
- ***upcoming (unstable, with potential bugs):*** It contains unreleased **features** that will come in the next minor version. To merge, use `git pull RHH upcoming`.
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). Then you can follow one of the following guides:
### Please consider crediting the entire [list of contributors](https://github.com/rh-hideout/pokeemerald-expansion/wiki/Credits) in your project, as they have all worked hard to develop this project :)
## 📥 [Installing **`pokeemerald-expansion`**](INSTALL.md)
## 🏗️ [Building **`pokeemerald-expansion`**](INSTALL.md#Building-pokeemerald-expansion)
## 🚚 [Migrating from **`pokeemerald`**](INSTALL.md#Migrating-from-pokeemerald)
## 🚀 [Updating **`pokeemerald-expansion`**](INSTALL.md#Updating-pokeemerald-expansion)
## Who maintains the project?
The project was originally started by DizzyEgg alongside other contributors. Now it is maintained by a team in the ROM Hacking Hideout's community called the "Expansion Senate". ROM Hacking Hideout (RHH for short) is a Discord-based ROM hacking community specialized in Pokémon romhacks. A lot of the discussion in regards of the development of the project happens there.
# [Documentation](https://rh-hideout.github.io/pokeemerald-expansion/)
[Click here to join the RHH Discord Server!](https://discord.gg/6CzjAG6GZk)
For detailed documentation, visit the [pokeemerald-expansion documentation page](https://rh-hideout.github.io/pokeemerald-expansion/).
## There's a bug in the project. How do I let you guys know?
Please submit any issues with the project [here](https://github.com/rh-hideout/pokeemerald-expansion/issues) and make sure that the issue wasn't reported by someone else by searching using the filters. You may also join the Discord server to try getting more in-depth support from the team and other members of the server.
# [Contributions](CONTRIBUTING.md)
If you are looking to [report a bug](CONTRIBUTING.md#Bug-Report), [open a pull request](CONTRIBUTING.md#Pull-Requests), or [request a feature](CONTRIBUTING.md#Feature-Request), our [`CONTRIBUTING.md`](CONTRIBUTING.md) has guides for each.
## Can I contribute even if I'm not a member of ROM Hacking Hideout?
Yes! Contributions are welcome via Pull Requests and they will be reviewed by maintainers in due time.
Also, *please follow the Pull Request template and feel free to discuss how the reviews are being handled. **Communication is key!*** Don't feel discouraged if we take a bit to review your PR, we'll get to it.
# [Community](https://discord.gg/6CzjAG6GZk)
## What features are included?
- ***IMPORTANT*❗❗ Read through these to learn what features you can toggle**:
- [Battle configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/battle.h)
- [Pokémon configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/pokemon.h)
- [Item configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/item.h)
- [Overworld configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/overworld.h)
- [Debug configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/debug.h)
- ***Upgraded battle engine.***
- Gen5+ damage calculation.
- 2v2 Wild battles support.
- 1v2/2v1 battles support.
- Fairy Type (configurable).
- Physical/Special/Status Category (configurable).
- New moves and abilities up to Scarlet and Violet.
- Custom Contest data up to SwSh, newer moves are WIP. ([source](https://web.archive.org/web/20240910012333/https://pokemonurpg.com/info/contests/rse-move-list/))
- Battle gimmick support:
- Mega Evolution
- Primal Reversion
- Ultra Burst
- Z-Moves
- Gen 8+ damaging moves are given power extrapolated from Gen 7.
- Gen 8+ status moves have no additional effects, like Healing Wish.
- Dynamax and Gigantamax
- Initial battle parameters
- Queueing stat boosts (aka, Totem Boosts)
- Setting Terrains.
- Mid-turn speed recalculation.
- Quick Poké Ball selection in Wild Battles
- Hold `R` to change selection with the D-Pad.
- Press `R` to use last selected Poké Ball.
- Run option shortcut
- Faster battle intro - Message and animation/cry happens at the same time.
- Faster HP drain.
- Battle Debug menu.
- Accessed by pressing `Select` on the "Fight/Bag/Pokémon/Run" menu.
- Option to use AI flags in wild Pokémon battles.
- FRLG/Gen4+ whiteout money calculation.
- Configurable experience settings
- Experience on catch.
- Splitting experience.
- Trainer experience.
- Scaled experience.
- Unevolved experience boost.
- Frostbite.
- Doesn't replace freezing unless a config is enabled, so you can mix and match.
- Critical capture.
- Removed badge boosts (configurable).
- Recalculating stats at the end of every battle.
- Level 100 Pokémon can earn EVs.
- Inverse battle support.
- TONS of other features listed [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/battle.h).
- ***Full Trainer customization***
- Nickname, EVs, IVs, moves, ability, ball, friendship, nature, gender, shininess.
- Custom tag battle support (teaming up an NPC in a double battle).
- Sliding trainer messages.
- Upgraded Trainer AI
- Considers newer move effects.
- New flag options to let you customize the intelligence of your trainers.
- Faster calculations.
- Specify Poké Balls by Trainer class.
- ***Pokémon Species from Generations 1-9.***
- Simplified process to add new Pokémon.
- Option to disable unwanted families.
- Updated sprites to DS style.
- Updated stats, types, abilities and egg groups (configurable).
- Updated Hoenn's Regional Dex to match ORAS' (configurable).
- Updated National Dex incorporating the new species.
- Sprite and animation visualizer.
- Accesible by pressing `Select` on a Pokémon's Summary screen.
- Gen4+ evolution methods, with some changes:
- Mossy Rock, Icy Rock and Magnetic Field locations match ORAS'.
- Leaf, Ice and Thunder Stones may also be used.
- Inkay just needs level 30 to evolve.
- You can't physically have both the RTC and gyroscope, so we skip this requirement.
- Sylveon uses Gen8+'s evolution method (friendship + Fairy Move).
- Option to use hold evolution items directly like stones.
- Hidden Abilities.
- Available via Ability Patch.
- Compatible with Ghoul's DexNav branch.
- All gender differences.
- Custom female icons for female Hippopotas Hippowdon, Pikachu and Wobbufett
- 3 Perfect IVs on Legendaries, Mythicals and Ultra Beasts.
- ***Customizable form change tables. Full list of methods [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/form_change_types.h).***
- Item holding (eg. Giratina/Arceus)
- Item using (eg. Oricorio)
- Time of day option for Shaymin
- Fainting
- Battle begin and end (eg. Xerneas)
- Move change option for Zacian/Zamazenta
- Battle end in terrains (eg. Burmy)
- Switched in battle (eg. Palafin)
- HP Threshold (eg. Darmanitan)
- Weather (eg. Castform)
- End of turn (eg. Morpeko)
- Time of day (eg. Shaymin)
- Fusions (eg. Kyurem)
- ***Breeding Improvements***
- Incense Baby Pokémon now happen automatically (configurable).
- Level 1 eggs (configurable).
- Poké Ball inheriting (configurable).
- Egg Move Transfer, including Mirror Herb (configurable).
- Nature inheriting 100% of the time with Everstone (configurable)
- Gen6+ Ability inheriting (configurable).
- ***Items from newer Generations. Full list [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/items.h).***
- ***Gen 6+ Exp. Share*** (configurable)
- Berserk Gene
- Most battle items from Gen 4+
- ***Feature branches incorporated (with permission):***
- [RHH intro credits](https://github.com/Xhyzi/pokeemerald/tree/rhh-intro-credits) by @Xhyzi.
- A small signature from all of us to show the collective effort in the project :)
- [Overworld debug](https://github.com/TheXaman/pokeemerald/tree/tx_debug_system) by @TheXaman
- May be disabled.
- Accesible by pressing `R + Start` in the overworld by default.
- **Additional features**:
- *Clear Boxes*: cleans every Pokémon from the Boxes.
- *Hatch an Egg*: lets you choose an Egg in your party and immediately hatch it.
- [HGSS Pokédex](https://github.com/TheXaman/pokeemerald/tree/tx_pokedexPlus_hgss) by @TheXaman
- May be disabled.
- **Additional features**:
- *Support for new evolution methods*.
- *Dark Mode*.
- [Nature Colors](https://github.com/DizzyEggg/pokeemerald/tree/nature_color) in summary screen by @DizzyEggg
- [Dynamic Multichoice](https://github.com/SBird1337/pokeemerald/tree/feature/dynmulti) by @SBird1337
- [Saveblock Cleansing](https://github.com/ghoulslash/pokeemerald/tree/saveblock) by @ghoulslash
- [Followers & Expanded IDs](https://github.com/aarant/pokeemerald/tree/followers-expanded-id) by @aarant
- May be disabled.
- Includes Pokémon followers like in HGSS, including interactions.
- ***Expands the amount of possible object event IDs beyond 255.***
- ***Includes an implementation of dynamic overworld palettes (DOWP).***
- **Additional features**:
- *Pokémon overworld sprites up to Generation 8.*
- *Integration with our Pokémon Sprite Visualizer, allowing users to browse through the follower sprites alongside battle sprites.*
- ***Other features***
- Pressing B while holding a Pokémon drops them like in modern games (configurable).
- Running indoors (configurable).
- Configurable overworld poison damage.
- Configurable flags for disabling Wild encounters and Trainer battles.
- Configurable flags for forcing or disabling Shinies.
- Reusable TM (configurable).
- B2W2+ Repel system that also supports LGPE's Lures
- Gen6+'s EV cap.
- All bugfixes from pret included.
- Fixed overworld snow effect.
[![](https://dcbadge.limes.pink/api/server/6CzjAG6GZk)](https://discord.gg/6CzjAG6GZk)
There are some mechanics, moves and abilities that are missing and being developed. Check [the project's milestones](https://github.com/rh-hideout/pokeemerald-expansion/milestones) and our [issues page](https://github.com/rh-hideout/pokeemerald-expansion/issues) to see which ones.
Our community uses the [Rom Hacking Hideout (RHH) Discord server](https://discord.gg/6CzjAG6GZk) to communicate and organize. Most of our discussions take place there, and we welcome anybody to join us!

Binary file not shown.

Before

Width:  |  Height:  |  Size: 919 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 475 B

After

Width:  |  Height:  |  Size: 418 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 B

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
153 210 164
102 104 113
65 73 73
170 177 183
143 153 163
175 155 10
249 216 0
222 223 222
15 15 15
156 151 156
142 187 183
194 231 233
114 94 22
255 181 9
209 147 16
118 152 148
153 211 165
62 66 87
153 121 3
196 154 0
227 193 44
252 215 39
106 115 138
145 162 173
166 175 189
16 16 16
174 186 207
214 223 232
195 232 233
255 255 255
62 103 133
46 63 92

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
153 210 164
75 114 106
52 74 64
134 186 173
116 161 150
175 155 10
249 216 0
222 223 222
15 15 15
156 151 156
142 187 183
194 231 233
143 103 130
255 179 230
255 143 219
118 152 148
153 211 165
61 89 106
151 98 104
196 154 0
246 201 215
252 215 39
92 137 147
145 162 173
159 184 189
16 16 16
174 186 207
214 223 232
195 232 233
255 255 255
62 103 133
46 63 92

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 781 B

After

Width:  |  Height:  |  Size: 890 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
0 160 232
112 24 48
144 8 56
232 48 120
104 24 40
153 211 165
41 32 62
109 27 27
112 24 50
66 55 99
180 46 46
184 19 73
129 87 69
228 77 109
249 240 67
118 127 157
92 89 163
184 168 158
16 16 16
40 32 64
96 88 160
56 48 88
120 80 64
184 168 160
240 240 216
128 136 160
168 192 216
248 240 88
8 8 8
169 192 216
238 241 218

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
0 160 232
160 104 16
216 168 88
248 240 152
104 24 40
16 16 16
56 24 24
153 211 165
48 25 18
109 27 27
101 107 8
85 53 42
180 46 46
166 175 26
129 87 69
229 240 58
249 240 67
111 152 126
128 80 64
96 64 48
120 80 64
184 168 160
240 240 216
72 176 144
176 240 200
248 240 88
8 8 8
184 168 158
16 16 16
167 205 188
238 241 218

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
153 210 164
51 55 62
103 96 105
237 235 230
255 118 155
6 6 6
255 73 153
168 150 153
159 65 193
18 26 80
36 49 136
0 97 173
119 32 32
255 70 57
185 57 56
253 214 0
152 208 160
95 46 56
48 49 65
14 28 103
81 83 94
255 127 39
176 57 72
250 80 71
255 242 0
24 48 177
57 99 240
166 91 227
243 75 239
186 183 171
16 16 18
231 230 226

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
153 210 164
51 55 62
103 96 105
237 235 230
168 150 153
6 6 6
255 191 0
168 150 153
159 65 193
18 26 80
172 24 67
255 11 119
33 34 50
82 83 113
67 68 90
253 214 0
152 208 160
28 29 42
48 49 65
96 30 38
81 83 94
255 127 39
64 59 74
98 98 123
255 242 0
172 49 49
213 74 82
226 127 103
234 198 4
186 183 171
16 16 18
231 230 226

Binary file not shown.

Before

Width:  |  Height:  |  Size: 847 B

After

Width:  |  Height:  |  Size: 1007 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
156 210 164
156 153 205
82 76 115
49 48 106
222 218 230
246 255 255
16 16 16
123 97 164
65 170 222
57 64 139
189 182 180
255 226 115
24 40 74
82 68 156
180 165 189
57 48 74
152 208 160
29 29 41
26 27 74
70 70 100
255 242 0
45 47 130
101 81 156
32 132 191
85 174 227
140 138 172
16 16 18
158 152 202
194 190 223
255 255 255
176 168 0
0 0 0

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
156 210 164
156 153 205
82 76 115
57 58 62
222 218 230
246 255 255
16 16 16
200 200 200
65 170 222
134 134 134
189 182 180
255 226 115
24 40 74
133 133 133
180 165 189
57 48 74
152 208 160
29 29 41
70 70 100
70 70 100
255 242 0
140 138 172
194 190 223
32 132 191
85 174 227
140 138 172
16 16 18
158 152 202
194 190 223
255 255 255
176 168 0
0 0 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 515 B

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 540 B

After

Width:  |  Height:  |  Size: 682 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 947 B

After

Width:  |  Height:  |  Size: 915 B

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
238 230 180
49 49 49
148 156 148
152 208 160
29 29 29
44 43 41
64 112 54
75 76 76
89 96 106
141 98 59
91 171 49
34 177 76
232 157 2
255 218 70
0 150 176
0 211 249
148 152 151
16 16 16
65 115 49
90 172 49
90 98 106
41 41 41
74 74 74
0 213 255
24 24 24
0 148 180
255 222 65
255 255 255
238 156 0
139 98 57
253 253 253

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
238 230 180
49 49 49
148 156 148
152 208 160
29 29 29
44 43 41
64 112 54
75 76 76
89 96 106
141 98 59
91 171 49
34 177 76
162 205 29
255 218 70
0 150 176
0 211 249
148 152 151
16 16 16
65 115 49
90 172 49
90 98 106
41 41 41
74 74 74
0 213 255
24 24 24
0 148 180
255 222 65
255 255 255
164 205 24
139 98 57
253 253 253

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1007 B

After

Width:  |  Height:  |  Size: 958 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 534 B

After

Width:  |  Height:  |  Size: 746 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 947 B

After

Width:  |  Height:  |  Size: 904 B

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
238 230 180
74 74 74
213 156 24
255 222 65
65 115 49
90 172 49
16 16 16
152 208 160
41 41 41
238 57 41
156 16 16
82 8 8
87 15 15
66 115 49
74 74 74
132 24 24
206 57 49
141 98 59
90 173 49
232 157 2
198 156 41
247 222 82
0 211 249
16 16 16
255 255 255
238 156 0
123 106 49
0 213 255
139 98 57
0 0 0

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
238 230 180
74 74 74
213 156 24
255 222 65
65 115 49
90 172 49
16 16 16
152 208 160
41 41 41
238 57 41
156 16 16
82 8 8
87 15 15
66 115 49
74 74 74
132 24 24
206 57 49
141 98 59
90 173 49
162 205 29
198 156 41
247 222 82
0 211 249
16 16 16
255 255 255
164 205 24
123 106 49
0 213 255
139 98 57
0 0 0

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
238 230 180
41 41 41
65 115 49
74 74 74
8 164 156
90 172 49
152 208 160
44 43 41
64 112 54
15 106 67
75 76 76
141 98 59
97 167 27
91 171 49
84 182 101
232 157 2
219 156 94
255 218 70
9 164 156
16 16 16
8 106 65
180 222 164
255 255 255
98 164 24
82 180 98
238 156 0
139 98 57
255 222 65
222 156 90
178 216 161
253 253 253

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
238 230 180
41 41 41
65 115 49
74 74 74
8 164 156
90 172 49
152 208 160
44 43 41
64 112 54
15 106 67
75 76 76
141 98 59
97 167 27
91 171 49
84 182 101
162 205 29
219 156 94
255 218 70
9 164 156
16 16 16
8 106 65
180 222 164
255 255 255
98 164 24
82 180 98
164 205 24
139 98 57
255 222 65
222 156 90
178 216 161
253 253 253

Binary file not shown.

Before

Width:  |  Height:  |  Size: 534 B

After

Width:  |  Height:  |  Size: 728 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 909 B

After

Width:  |  Height:  |  Size: 862 B

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
238 230 180
65 115 49
90 172 49
152 208 160
44 43 41
64 112 54
75 76 76
141 98 59
91 171 49
232 157 2
255 218 70
12 65 129
15 94 181
3 129 229
59 213 249
16 16 16
8 65 131
41 41 41
0 131 230
74 74 74
139 98 57
8 90 180
57 213 255
205 222 255
238 156 0
255 222 65
255 255 255
156 205 222
156 206 220
206 221 255
253 253 253

View File

@ -1,19 +1,19 @@
JASC-PAL
0100
16
238 230 180
65 115 49
90 172 49
152 208 160
44 43 41
64 112 54
75 76 76
141 98 59
91 171 49
162 205 29
255 218 70
12 65 129
15 94 181
3 129 229
59 213 249
16 16 16
8 65 131
41 41 41
0 131 230
74 74 74
139 98 57
8 90 180
57 213 255
205 222 255
164 205 24
255 222 65
255 255 255
156 205 222
156 206 220
206 221 255
253 253 253

View File

@ -106,7 +106,7 @@ s32 GetWhichBattlerFaster(u32 battler1, u32 battler2, bool32 ignoreChosenMoves);
void RunBattleScriptCommands_PopCallbacksStack(void);
void RunBattleScriptCommands(void);
void SpecialStatusesClear(void);
u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost);
u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState monInBattle);
void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk);
bool32 IsWildMonSmart(void);
u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags);

View File

@ -615,4 +615,10 @@ enum SlideMsgStates
RESTORE_BATTLER_SLIDE_CONTROL,
};
enum MonState
{
MON_IN_BATTLE,
MON_OUTSIDE_BATTLE,
};
#endif // GUARD_CONSTANTS_BATTLE_H

View File

@ -7,6 +7,7 @@
#include "constants/regions.h"
#include "constants/region_map_sections.h"
#include "constants/map_groups.h"
#include "constants/battle.h"
#include "contest_effect.h"
#define GET_BASE_SPECIES_ID(speciesId) (GetFormSpeciesId(speciesId, 0))
@ -824,7 +825,7 @@ void HealPokemon(struct Pokemon *mon);
void HealBoxPokemon(struct BoxPokemon *boxMon);
void UpdateDaysPassedSinceFormChange(u16 days);
void TrySetDayLimitToFormChange(struct Pokemon *mon);
u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler);
u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState state);
uq4_12_t GetDynamaxLevelHPMultiplier(u32 dynamaxLevel, bool32 inverseMultiplier);
u32 GetRegionalFormByRegion(u32 species, u32 region);
bool32 IsSpeciesForeignRegionalForm(u32 species, u32 currentRegion);

View File

@ -1739,7 +1739,6 @@ static void MoveSelectionDisplayMoveType(u32 battler)
}
else if (effect == EFFECT_IVY_CUDGEL)
{
if (speciesId == SPECIES_OGERPON_WELLSPRING || speciesId == SPECIES_OGERPON_WELLSPRING_TERA
|| speciesId == SPECIES_OGERPON_HEARTHFLAME || speciesId == SPECIES_OGERPON_HEARTHFLAME_TERA
|| speciesId == SPECIES_OGERPON_CORNERSTONE || speciesId == SPECIES_OGERPON_CORNERSTONE_TERA)
@ -1759,7 +1758,7 @@ static void MoveSelectionDisplayMoveType(u32 battler)
else if (P_SHOW_DYNAMIC_TYPES) // Non-vanilla changes to battle UI showing dynamic types
{
struct Pokemon *mon = GetBattlerMon(battler);
type = CheckDynamicMoveType(mon, move, battler);
type = CheckDynamicMoveType(mon, move, battler, MON_IN_BATTLE);
}
end = StringCopy(txtPtr, gTypesInfo[type].name);
@ -2441,7 +2440,7 @@ static u32 CheckTypeEffectiveness(u32 targetId, u32 battler)
struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]);
struct Pokemon *mon = GetBattlerMon(battler);
u32 move = moveInfo->moves[gMoveSelectionCursor[battler]];
u32 moveType = CheckDynamicMoveType(mon, move, battler);
u32 moveType = CheckDynamicMoveType(mon, move, battler, MON_IN_BATTLE);
uq4_12_t modifier = CalcTypeEffectivenessMultiplier(move, moveType, battler, targetId, GetBattlerAbility(targetId), FALSE);
if (!ShouldShowTypeEffectiveness(targetId))

View File

@ -5750,19 +5750,19 @@ void RunBattleScriptCommands(void)
gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]]();
}
bool32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility)
u32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility)
{
u32 ateType;
u32 ateType = TYPE_NONE;
switch (GetMoveEffect(move))
{
case EFFECT_TERA_BLAST:
if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA)
return FALSE;
return ateType;
break;
case EFFECT_TERA_STARSTORM:
if (gBattleMons[battlerAtk].species == SPECIES_TERAPAGOS_STELLAR)
return FALSE;
return ateType;
break;
case EFFECT_HIDDEN_POWER:
case EFFECT_WEATHER_BALL:
@ -5770,12 +5770,11 @@ bool32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility)
case EFFECT_CHANGE_TYPE_ON_ITEM:
case EFFECT_REVELATION_DANCE:
case EFFECT_TERRAIN_PULSE:
return FALSE;
return ateType;
default:
break;
}
ateType = TYPE_NONE;
switch (attackerAbility)
{
case ABILITY_PIXILATE:
@ -5795,29 +5794,23 @@ bool32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility)
break;
}
if (ateType != TYPE_NONE && GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE)
{
gBattleStruct->dynamicMoveType = ateType | F_DYNAMIC_TYPE_SET;
return TRUE;
}
return FALSE;
return ateType;
}
// Returns TYPE_NONE if type doesn't change.
// NULL can be passed to ateBoost to avoid applying ate-ability boosts when opening the summary screen in-battle.
u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost)
u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState state)
{
u32 moveType = GetMoveType(move);
enum BattleMoveEffects moveEffect = GetMoveEffect(move);
u32 species, heldItem, ability, type1, type2, type3;
bool32 monInBattle = gMain.inBattle && gPartyMenu.menuType != PARTY_MENU_TYPE_IN_BATTLE;
enum ItemHoldEffect holdEffect;
enum Gimmick gimmick = GetActiveGimmick(battler);
if (move == MOVE_STRUGGLE)
return TYPE_NORMAL;
if (monInBattle)
if (state == MON_IN_BATTLE)
{
species = gBattleMons[battler].species;
heldItem = gBattleMons[battler].item;
@ -5841,7 +5834,7 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost)
switch (moveEffect)
{
case EFFECT_WEATHER_BALL:
if (monInBattle)
if (state == MON_IN_BATTLE)
{
if (HasWeatherEffect())
{
@ -5882,7 +5875,7 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost)
case EFFECT_HIDDEN_POWER:
{
u32 typeBits = 0;
if (monInBattle)
if (state == MON_IN_BATTLE)
{
typeBits = ((gBattleMons[battler].hpIV & 1) << 0)
| ((gBattleMons[battler].attackIV & 1) << 1)
@ -5917,10 +5910,10 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost)
return ItemId_GetSecondaryId(heldItem);
break;
case EFFECT_REVELATION_DANCE:
if (GetActiveGimmick(battler) != GIMMICK_Z_MOVE)
if (gimmick != GIMMICK_Z_MOVE)
{
u32 teraType;
if (GetActiveGimmick(battler) == GIMMICK_TERA && ((teraType = GetMonData(mon, MON_DATA_TERA_TYPE)) != TYPE_STELLAR))
if (gimmick == GIMMICK_TERA && ((teraType = GetMonData(mon, MON_DATA_TERA_TYPE)) != TYPE_STELLAR))
return teraType;
else if (type1 != TYPE_MYSTERY && !(gDisableStructs[battler].roostActive && type1 == TYPE_FLYING))
return type1;
@ -5961,7 +5954,7 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost)
else
return moveType;
case EFFECT_TERRAIN_PULSE:
if (monInBattle)
if (state == MON_IN_BATTLE)
{
if (IsBattlerTerrainAffected(battler, STATUS_FIELD_TERRAIN_ANY))
{
@ -5995,7 +5988,7 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost)
}
break;
case EFFECT_TERA_BLAST:
if (GetActiveGimmick(battler) == GIMMICK_TERA)
if (gimmick == GIMMICK_TERA)
return GetMonData(mon, MON_DATA_TERA_TYPE);
break;
case EFFECT_TERA_STARSTORM:
@ -6015,20 +6008,23 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost)
return TYPE_DARK;
}
else if (moveType == TYPE_NORMAL
&& ((!gMain.inBattle || TrySetAteType(move, battler, ability))
&& GetActiveGimmick(battler) != GIMMICK_DYNAMAX))
&& ability != ABILITY_NORMALIZE
&& gimmick != GIMMICK_DYNAMAX
&& gimmick != GIMMICK_Z_MOVE)
{
if (gMain.inBattle && ateBoost != NULL)
*ateBoost = TRUE;
u32 ateType = TrySetAteType(move, battler, ability);
if (ateType != TYPE_NONE && state == MON_IN_BATTLE)
gBattleStruct->ateBoost[battler] = TRUE;
return ateType;
}
else if (moveType != TYPE_NORMAL
&& moveEffect != EFFECT_HIDDEN_POWER
&& moveEffect != EFFECT_WEATHER_BALL
&& ability == ABILITY_NORMALIZE
&& GetActiveGimmick(battler) != GIMMICK_Z_MOVE)
&& gimmick != GIMMICK_Z_MOVE)
{
if (gMain.inBattle && ateBoost != NULL && GetActiveGimmick(battler) != GIMMICK_DYNAMAX)
*ateBoost = TRUE;
if (state == MON_IN_BATTLE && gimmick != GIMMICK_DYNAMAX)
gBattleStruct->ateBoost[battler] = TRUE;
return TYPE_NORMAL;
}
@ -6048,7 +6044,8 @@ void SetTypeBeforeUsingMove(u32 move, u32 battler)
moveType = GetDynamicMoveType(GetBattlerMon(battler),
move,
battler,
&gBattleStruct->ateBoost[battler]);
MON_IN_BATTLE);
if (moveType != TYPE_NONE)
gBattleStruct->dynamicMoveType = moveType | F_DYNAMIC_TYPE_SET;

View File

@ -1447,13 +1447,13 @@ static void Cmd_attackcanceler(void)
}
}
static void JumpIfMoveFailed(u32 adder, u32 move, u32 moveType)
static void JumpIfMoveFailed(u32 adder, u32 move, u32 moveType, const u8 *failInstr)
{
if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)
{
gLastLandedMoves[gBattlerTarget] = 0;
gLastHitByType[gBattlerTarget] = 0;
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = failInstr;
return;
}
else
@ -1476,14 +1476,14 @@ static void Cmd_unused5(void)
{
}
static bool32 JumpIfMoveAffectedByProtect(u32 move, u32 battler, u32 shouldJump)
static bool32 JumpIfMoveAffectedByProtect(u32 move, u32 battler, u32 shouldJump, const u8 *failInstr)
{
bool32 affected = IsBattlerProtected(gBattlerAttacker, battler, move);
if (affected)
{
gBattleStruct->moveResultFlags[battler] |= MOVE_RESULT_MISSED;
if (shouldJump)
JumpIfMoveFailed(7, move, GetBattleMoveType(move));
JumpIfMoveFailed(7, move, GetBattleMoveType(move), failInstr);
}
return affected;
}
@ -1707,7 +1707,7 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u
gBattlescriptCurrInstr = nextInstr;
else if (gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE))
gBattlescriptCurrInstr = failInstr;
else if (!JumpIfMoveAffectedByProtect(gCurrentMove, gBattlerTarget, TRUE))
else if (!JumpIfMoveAffectedByProtect(gCurrentMove, gBattlerTarget, TRUE, failInstr))
gBattlescriptCurrInstr = nextInstr;
if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX)
{
@ -1749,7 +1749,7 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u
continue;
numTargets++;
if (JumpIfMoveAffectedByProtect(move, battlerDef, FALSE) || AccuracyCalcHelper(move, battlerDef))
if (JumpIfMoveAffectedByProtect(move, battlerDef, FALSE, failInstr) || AccuracyCalcHelper(move, battlerDef))
continue;
u32 accuracy = GetTotalAccuracy(gBattlerAttacker,
@ -1796,7 +1796,7 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u
if (calcSpreadMove)
gBattleStruct->calculatedSpreadMoveAccuracy = TRUE;
JumpIfMoveFailed(7, move, moveType);
JumpIfMoveFailed(7, move, moveType, failInstr);
}
}
@ -12268,9 +12268,8 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr
return STAT_CHANGE_DIDNT_WORK;
}
else if (gCurrentMove != MOVE_CURSE
&& notProtectAffected != TRUE && JumpIfMoveAffectedByProtect(gCurrentMove, gBattlerTarget, TRUE))
&& notProtectAffected != TRUE && JumpIfMoveAffectedByProtect(gCurrentMove, gBattlerTarget, TRUE, BattleScript_ButItFailed))
{
gBattlescriptCurrInstr = BattleScript_ButItFailed;
return STAT_CHANGE_DIDNT_WORK;
}
else if ((battlerHoldEffect == HOLD_EFFECT_CLEAR_AMULET || CanAbilityPreventStatLoss(battlerAbility))
@ -16506,7 +16505,6 @@ static void Cmd_tryworryseed(void)
|| gBattleMons[gBattlerTarget].ability == ABILITY_INSOMNIA)
{
RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability);
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = cmd->failInstr;
}
else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD)

View File

@ -3013,6 +3013,7 @@ bool32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u32 a
if (option == ABILITY_RUN_SCRIPT)
{
gMultiHitCounter = 0; // Prevent multi-hit moves from hitting more than once after move has been absorbed.
gLastUsedAbility = abilityDef;
RecordAbilityBattle(battlerDef, abilityDef);
gBattleScripting.battler = gBattlerAbility = battlerAbility;
@ -7111,6 +7112,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn)
{
case HOLD_EFFECT_SHELL_BELL:
if (gBattleScripting.savedDmg > 0
&& !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE)
&& !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)
&& gBattlerAttacker != gBattlerTarget
&& !IsBattlerAtMaxHp(gBattlerAttacker)
@ -7132,6 +7134,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn)
break;
case HOLD_EFFECT_LIFE_ORB:
if (IsBattlerAlive(gBattlerAttacker)
&& !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE)
&& !IsBattleMoveStatus(gCurrentMove)
&& (IsBattlerTurnDamaged(gBattlerTarget) || !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) // Needs the second check in case of Substitute
&& GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD
@ -10282,8 +10285,9 @@ bool32 CanBattlerGetOrLoseItem(u32 battler, u16 itemId)
u16 species = gBattleMons[battler].species;
enum ItemHoldEffect holdEffect = ItemId_GetHoldEffect(itemId);
// Mail can be stolen now
if (itemId == ITEM_ENIGMA_BERRY_E_READER)
if (ItemIsMail(itemId))
return FALSE;
else if (itemId == ITEM_ENIGMA_BERRY_E_READER)
return FALSE;
else if (DoesSpeciesUseHoldItemToChangeForm(species, itemId))
return FALSE;

View File

@ -25932,7 +25932,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_
#endif //P_FAMILY_DONDOZO
#if P_FAMILY_GREAT_TUSK
const u32 gMonFrontPic_GreatTusk[] = INCBIN_U32("graphics/pokemon/great_tusk/anim_front.4bpp.lz");
const u32 gMonFrontPic_GreatTusk[] = INCBIN_U32("graphics/pokemon/great_tusk/front.4bpp.lz");
const u16 gMonPalette_GreatTusk[] = INCBIN_U16("graphics/pokemon/great_tusk/normal.gbapal");
const u32 gMonBackPic_GreatTusk[] = INCBIN_U32("graphics/pokemon/great_tusk/back.4bpp.lz");
const u16 gMonShinyPalette_GreatTusk[] = INCBIN_U16("graphics/pokemon/great_tusk/shiny.gbapal");
@ -26148,7 +26148,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_
#endif //P_FAMILY_IRON_THORNS
#if P_FAMILY_FRIGIBAX
const u32 gMonFrontPic_Frigibax[] = INCBIN_U32("graphics/pokemon/frigibax/anim_front.4bpp.lz");
const u32 gMonFrontPic_Frigibax[] = INCBIN_U32("graphics/pokemon/frigibax/front.4bpp.lz");
const u16 gMonPalette_Frigibax[] = INCBIN_U16("graphics/pokemon/frigibax/normal.gbapal");
const u32 gMonBackPic_Frigibax[] = INCBIN_U32("graphics/pokemon/frigibax/back.4bpp.lz");
const u16 gMonShinyPalette_Frigibax[] = INCBIN_U16("graphics/pokemon/frigibax/shiny.gbapal");

View File

@ -13269,7 +13269,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.category = DAMAGE_CATEGORY_STATUS,
.zMove = { .effect = Z_EFFECT_SPD_UP_2 },
.ignoresProtect = B_UPDATED_MOVE_FLAGS >= GEN_6,
.ignoresSubstitute = TRUE,
.ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6,
.metronomeBanned = TRUE,
.copycatBanned = TRUE,
.assistBanned = TRUE,

View File

@ -5315,19 +5315,19 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.trainerOffset = 0,
.frontPic = gMonFrontPic_GreatTusk,
.frontPicSize = MON_COORDS_SIZE(64, 64),
.frontPicYOffset = 5,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontPicYOffset = 0,
.frontAnimFrames = sAnims_SingleFramePlaceHolder,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_GreatTusk,
.backPicSize = MON_COORDS_SIZE(64, 64),
.backPicYOffset = 4,
.backPicYOffset = 9,
//.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_GreatTusk,
.shinyPalette = gMonShinyPalette_GreatTusk,
.iconSprite = gMonIcon_GreatTusk,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 6, SHADOW_SIZE_L)
SHADOW(2, 13, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(GreatTusk)
OVERWORLD(
sPicTable_GreatTusk,
@ -6122,19 +6122,19 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.trainerOffset = 0,
.frontPic = gMonFrontPic_Frigibax,
.frontPicSize = MON_COORDS_SIZE(64, 64),
.frontPicYOffset = 7,
.frontAnimFrames = sAnims_TwoFramePlaceHolder,
.frontPicYOffset = 13,
.frontAnimFrames = sAnims_SingleFramePlaceHolder,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.backPic = gMonBackPic_Frigibax,
.backPicSize = MON_COORDS_SIZE(64, 64),
.backPicYOffset = 11,
.backPicYOffset = 13,
//.backAnimId = BACK_ANIM_NONE,
.palette = gMonPalette_Frigibax,
.shinyPalette = gMonShinyPalette_Frigibax,
.iconSprite = gMonIcon_Frigibax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, 7, SHADOW_SIZE_S)
SHADOW(2, -1, SHADOW_SIZE_S)
FOOTPRINT(Frigibax)
OVERWORLD(
sPicTable_Frigibax,
@ -6976,6 +6976,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.frontPicYOffset = 0,
.frontAnimFrames = sAnims_SingleFramePlaceHolder,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
.enemyMonElevation = 8,
.backPic = gMonBackPic_Miraidon,
.backPicSize = MON_COORDS_SIZE(64, 64),
.backPicYOffset = 0,
@ -6985,7 +6986,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_Miraidon,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(10, 14, SHADOW_SIZE_L)
SHADOW(3, 22, SHADOW_SIZE_L)
FOOTPRINT(Miraidon)
OVERWORLD(
sPicTable_Miraidon,
@ -7665,10 +7666,10 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \
}
[SPECIES_OGERPON_TEAL] = OGERPON_SPECIES_INFO(Teal, Teal, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1, 7, 1, FALSE),
[SPECIES_OGERPON_WELLSPRING] = OGERPON_SPECIES_INFO(Wellspring, Wellspring, TYPE_WATER, ABILITY_WATER_ABSORB, BODY_COLOR_BLUE, 1, 7, 0, FALSE),
[SPECIES_OGERPON_HEARTHFLAME] = OGERPON_SPECIES_INFO(Hearthflame, Hearthflame, TYPE_FIRE, ABILITY_MOLD_BREAKER, BODY_COLOR_RED, 1, 7, 0, FALSE),
[SPECIES_OGERPON_CORNERSTONE] = OGERPON_SPECIES_INFO(Cornerstone, Cornerstone, TYPE_ROCK, ABILITY_STURDY, BODY_COLOR_GRAY, 1, 7, 0, FALSE),
[SPECIES_OGERPON_TEAL] = OGERPON_SPECIES_INFO(Teal, Teal, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1, 6, 1, FALSE),
[SPECIES_OGERPON_WELLSPRING] = OGERPON_SPECIES_INFO(Wellspring, Wellspring, TYPE_WATER, ABILITY_WATER_ABSORB, BODY_COLOR_BLUE, 1, 6, 0, FALSE),
[SPECIES_OGERPON_HEARTHFLAME] = OGERPON_SPECIES_INFO(Hearthflame, Hearthflame, TYPE_FIRE, ABILITY_MOLD_BREAKER, BODY_COLOR_RED, 1, 6, 0, FALSE),
[SPECIES_OGERPON_CORNERSTONE] = OGERPON_SPECIES_INFO(Cornerstone, Cornerstone, TYPE_ROCK, ABILITY_STURDY, BODY_COLOR_GRAY, 1, 6, 0, FALSE),
#if P_TERA_FORMS
[SPECIES_OGERPON_TEAL_TERA] = OGERPON_SPECIES_INFO(Teal, TealTera, TYPE_GRASS, ABILITY_EMBODY_ASPECT_TEAL_MASK, BODY_COLOR_GREEN, 0, 0, 1, TRUE),
[SPECIES_OGERPON_WELLSPRING_TERA] = OGERPON_SPECIES_INFO(Wellspring, WellspringTera, TYPE_WATER, ABILITY_EMBODY_ASPECT_WELLSPRING_MASK, BODY_COLOR_BLUE, 0, 0, 0, TRUE),

View File

@ -7081,9 +7081,9 @@ void UpdateDaysPassedSinceFormChange(u16 days)
}
}
u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler)
u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState state)
{
u32 moveType = GetDynamicMoveType(mon, move, battler, NULL);
u32 moveType = GetDynamicMoveType(mon, move, battler, state);
if (moveType != TYPE_NONE)
return moveType;
return GetMoveType(move);

View File

@ -4306,7 +4306,11 @@ static void SetMoveTypeIcons(void)
{
type = GetMoveType(summary->moves[i]);
if (P_SHOW_DYNAMIC_TYPES)
type = CheckDynamicMoveType(mon, summary->moves[i], 0);
{
enum MonState state = gMain.inBattle ? MON_IN_BATTLE : MON_OUTSIDE_BATTLE;
type = CheckDynamicMoveType(mon, sMonSummaryScreen->newMove, 0, state); // Bug: in battle, this only shows the dynamic type of battler in position 0
}
SetTypeSpritePosAndPal(type, 85, 32 + (i * 16), i + SPRITE_ARR_ID_TYPE);
}
else
@ -4335,7 +4339,10 @@ static void SetNewMoveTypeIcon(void)
struct Pokemon *mon = &sMonSummaryScreen->currentMon;
if (P_SHOW_DYNAMIC_TYPES)
type = CheckDynamicMoveType(mon, sMonSummaryScreen->newMove, 0);
{
enum MonState state = gMain.inBattle ? MON_IN_BATTLE : MON_OUTSIDE_BATTLE;
type = CheckDynamicMoveType(mon, sMonSummaryScreen->newMove, 0, state); // Bug: in battle, this only shows the dynamic type of battler in position 0
}
if (sMonSummaryScreen->newMove == MOVE_NONE)
{

View File

@ -57,10 +57,39 @@ SINGLE_BATTLE_TEST("Beast Boost doesn't trigger if user is fainted")
}
}
TO_DO_BATTLE_TEST("Beast Boost boosts Attack 1st in case of a stat tie");
TO_DO_BATTLE_TEST("Beast Boost boosts Defense 2nd in case of a stat tie");
TO_DO_BATTLE_TEST("Beast Boost boosts Special Attack 3rd in case of a stat tie");
TO_DO_BATTLE_TEST("Beast Boost boosts Special Defense 4th in case of a stat tie");
SINGLE_BATTLE_TEST("Beast Boost prioritizes stats in the case of a tie in the following order: Atk, Def, Sp.Atk, Sp.Def, Speed")
{
u8 stats[] = {1, 1, 1, 1, 1};
PARAMETRIZE { stats[4] = 255; stats[3] = 255; stats[2] = 255; stats[1] = 255; stats[0] = 255; }
PARAMETRIZE { stats[4] = 255; stats[3] = 255; stats[2] = 255; stats[1] = 255; }
PARAMETRIZE { stats[4] = 255; stats[3] = 255; stats[2] = 255; }
PARAMETRIZE { stats[4] = 255; stats[3] = 255; }
GIVEN {
PLAYER(SPECIES_NIHILEGO) { Ability(ABILITY_BEAST_BOOST); Attack(stats[0]); Defense(stats[1]); SpAttack(stats[2]); SpDefense(stats[3]); Speed(stats[4]); }
OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(1); }
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); SEND_OUT(opponent, 1); }
} SCENE {
ABILITY_POPUP(player, ABILITY_BEAST_BOOST);
switch(i) {
case 0:
MESSAGE("Nihilego's Attack rose!");
break;
case 1:
MESSAGE("Nihilego's Defense rose!");
break;
case 2:
MESSAGE("Nihilego's Sp. Atk rose!");
break;
case 3:
MESSAGE("Nihilego's Sp. Def rose!");
break;
}
}
}
TO_DO_BATTLE_TEST("Beast Boost considers Power Split");
TO_DO_BATTLE_TEST("Beast Boost considers Guard Split");
TO_DO_BATTLE_TEST("Beast Boost considers Power Trick");

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Competitive (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Dark Aura (Ability) test titles")

View File

@ -72,3 +72,27 @@ DOUBLE_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail don't protect the u
}
}
SINGLE_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail protect from all multi hit hits with one activation")
{
u32 species, 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_WOBBUFFET);
OPPONENT(species) { Ability(ability); }
} WHEN {
TURN { MOVE(player, MOVE_WATER_SHURIKEN); }
} SCENE {
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_SHURIKEN, opponent);
ABILITY_POPUP(opponent, ability);
NONE_OF {
ABILITY_POPUP(opponent, ability);
ABILITY_POPUP(opponent, ability);
ABILITY_POPUP(opponent, ability);
ABILITY_POPUP(opponent, ability);
}
}
}

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Delta Stream (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Early Bird (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Fairy Aura (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Filter (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Flare Boost (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Forewarn (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Friend Guard (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Fur Coat (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Gluttony (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Gooey (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Gorilla Tactics (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Grass Pelt (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Guts (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Hadron Engine (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Heatproof (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Heavy Metal (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Honey Gather (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Huge Power (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Hustle (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Illuminate (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Imposter (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Infiltrator (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Iron Barbs (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Iron Fist (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Justified (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Klutz (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Levitate (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Libero (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Light Metal (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Long Reach (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Magma Armor (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Magnet Pull (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Marvel Scale (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Mega Launcher (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Minus (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Mold Breaker (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Multiscale (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Multitype (Ability) test titles")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Natural Cure (Ability) test titles")

Some files were not shown because too many files have changed in this diff Show More