conflicts

This commit is contained in:
AlexOn1ine 2025-04-01 19:11:55 +02:00
commit 0c35879e02
165 changed files with 18052 additions and 12774 deletions

View File

@ -5,27 +5,47 @@ body:
- type: markdown
attributes:
value: |
Please fill in all required fields with as many details as possible.
Please fill in all fields with as many details as possible.
- type: textarea
id: description
attributes:
label: Description
description: |
Describe the issue you are experiencing.
Attach images/videos if possible.
What behavior are you expecting to happen? What behavior are you observing instead?
placeholder: |
Please enter a description of the issue. Here you can also attach log screenshots, gifs or a video
Please be as descriptive as possible.
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Reproduction Steps
description: |
What exact steps can somebody else follow in order to recreate the issue on their own?
placeholder: |
Provide as much context as possible as to what was done to create the issue.
validations:
required: true
- type: textarea
id: media
attributes:
label: Images / Video
description: |
Do you have images or videos to show the problem happen?
placeholder: |
Here you can also attach logs, screenshots, gifs or a video.
validations:
required: false
- type: dropdown
id: version
attributes:
label: Version
description: What version of pokeemerald-expansion are you using as a base?
description: What version of pokeemerald-expansion are you using?
options:
- 1.11.0 (Latest release)
- 1.11.1 (Latest release)
- master (default, unreleased bugfixes)
- upcoming (Edge)
- 1.11.0
- 1.10.3
- 1.10.2
- 1.10.1
@ -37,14 +57,14 @@ body:
id: upcomingversion
attributes:
label: Upcoming/master Version
description: If you're using the upcoming or master branches directly, please specify what was the commit hash you pulled from.
description: If you're using the `upcoming` or `master` branches directly, please use the following command to give us the commit hash that you are on. `git log --merges RHH/upcoming -1 --format=%H` Replace `upcoming` with `master` if you're using `master`.
validations:
required: false
- type: input
id: contact
attributes:
label: Discord contact info
description: Provide your Discord tag here so we can contact you in case we need more details. Be sure to join our server ([here](https://discord.gg/6CzjAG6GZk)).
description: Provide your Discord tag here so we can contact you in case we need more details. Discussion around **`pokeemerald-expansion`** happens in our [Discord server](https://discord.gg/6CzjAG6GZk).
placeholder: ex. Lunos#4026
validations:
required: false

View File

@ -5,27 +5,47 @@ body:
- type: markdown
attributes:
value: |
Please fill in all required fields with as many details as possible.
Please fill in all fields with as many details as possible.
- type: textarea
id: description
attributes:
label: Description
description: |
Describe the issue you are experiencing.
Attach images/videos if possible.
What behavior are you expecting to happen? What behavior are you observing instead?
placeholder: |
Please enter a description of the issue. Here you can also attach log screenshots, gifs or a video
Please be as descriptive as possible.
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Reproduction Steps
description: |
What exact steps can somebody else follow in order to recreate the issue on their own?
placeholder: |
Provide as much context as possible as to what was done to create the issue.
validations:
required: true
- type: textarea
id: media
attributes:
label: Images / Video
description: |
Do you have images or videos to show the problem happen?
placeholder: |
Here you can also attach logs, screenshots, gifs or a video.
validations:
required: false
- type: dropdown
id: version
attributes:
label: Version
description: What version of pokeemerald-expansion are you using as a base?
description: What version of pokeemerald-expansion are you using?
options:
- 1.11.0 (Latest release)
- 1.11.1 (Latest release)
- master (default, unreleased bugfixes)
- upcoming (Edge)
- 1.11.0
- 1.10.3
- 1.10.2
- 1.10.1
@ -37,14 +57,14 @@ body:
id: upcomingversion
attributes:
label: Upcoming/master Version
description: If you're using the upcoming or master branches directly, please specify what was the commit hash you pulled from.
description: If you're using the `upcoming` or `master` branches directly, please use the following command to give us the commit hash that you are on. `git log --merges RHH/upcoming -1 --format=%H` Replace `upcoming` with `master` if you're using `master`.
validations:
required: false
- type: input
id: contact
attributes:
label: Discord contact info
description: Provide your Discord tag here so we can contact you in case we need more details. Be sure to join our server ([here](https://discord.gg/6CzjAG6GZk)).
description: Provide your Discord tag here so we can contact you in case we need more details. Discussion around **`pokeemerald-expansion`** happens in our [Discord server](https://discord.gg/6CzjAG6GZk).
placeholder: ex. Lunos#4026
validations:
required: false

View File

@ -5,23 +5,32 @@ body:
- type: markdown
attributes:
value: |
Please fill in all required fields with as many details as possible.
Please fill in all fields with as many details as possible.
- type: textarea
id: description
id: behavior
attributes:
label: Description
label: Behavior Description
description: |
Describe the issue you are experiencing.
Attach images/videos if possible.
What is the current behavior? What behavior would you expect your feature request to provide? What other information can you provide to help your feature get implemented?
placeholder: |
Please enter a description of the issue. Here you can also attach log screenshots, gifs or a video
Provide as much context as possible.
validations:
required: true
- type: textarea
id: media
attributes:
label: Images / Video
description: |
Have other projects or games solved this problem? Do you have images or video to show this happening?
placeholder: |
Here you can also attach logs, screenshots, gifs or a video.
validations:
required: false
- type: input
id: contact
attributes:
label: Discord contact info
description: Provide your Discord tag here so we can contact you in case we need more details. Be sure to join our server ([here](https://discord.gg/6CzjAG6GZk)).
description: Provide your Discord tag here so we can contact you in case we need more details. Discussion around **pokeemerald-expansion** happens in our [Discord server](https://discord.gg/6CzjAG6GZk).
placeholder: ex. Lunos#4026
validations:
required: false

View File

@ -5,27 +5,47 @@ body:
- type: markdown
attributes:
value: |
Please fill in all required fields with as many details as possible.
Please fill in all fields with as many details as possible.
- type: textarea
id: description
attributes:
label: Description
description: |
Describe the issue you are experiencing.
Attach images/videos if possible.
What behavior are you expecting to happen? What behavior are you observing instead?
placeholder: |
Please enter a description of the issue. Here you can also attach log screenshots, gifs or a video
Please be as descriptive as possible.
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Reproduction Steps
description: |
What exact steps can somebody else follow in order to recreate the issue on their own?
placeholder: |
Provide as much context as possible as to what was done to create the issue.
validations:
required: false
- type: textarea
id: media
attributes:
label: Images / Video
description: |
Do you have images or videos to show the problem happen?
placeholder: |
Here you can also attach logs, screenshots, gifs or a video.
validations:
required: false
- type: dropdown
id: version
attributes:
label: Version
description: What version of pokeemerald-expansion are you using as a base?
description: What version of pokeemerald-expansion are you using?
options:
- 1.11.0 (Latest release)
- 1.11.1 (Latest release)
- master (default, unreleased bugfixes)
- upcoming (Edge)
- 1.11.0
- 1.10.3
- 1.10.2
- 1.10.1
@ -37,14 +57,14 @@ body:
id: upcomingversion
attributes:
label: Upcoming/master Version
description: If you're using the upcoming or master branches directly, please specify what was the commit hash you pulled from.
description: If you're using the `upcoming` or `master` branches directly, please use the following command to give us the commit hash that you are on. `git log --merges RHH/upcoming -1 --format=%H` Replace `upcoming` with `master` if you're using `master`.
validations:
required: false
- type: input
id: contact
attributes:
label: Discord contact info
description: Provide your Discord tag here so we can contact you in case we need more details. Be sure to join our server ([here](https://discord.gg/6CzjAG6GZk)).
description: Provide your Discord tag here so we can contact you in case we need more details. Discussion around **`pokeemerald-expansion`** happens in our [Discord server](https://discord.gg/6CzjAG6GZk).
placeholder: ex. Lunos#4026
validations:
required: false

View File

@ -1,36 +1,41 @@
<!--- Provide a general summary of your changes in the Title above -->
<!--- Provide a descriptive title that describes what was changed in this PR. --->
<!--- Before submitting, please make sure your pull request meets the scope guidelines. If unsure, please open a thread in #pr-discussions.-->
<!--- Scope Guidelines: https://github.com/rh-hideout/pokeemerald-expansion/blob/master/docs/team_procedures/scope.md -->
<!--- #pr-discussions: https://discord.com/channels/419213663107416084/1102784418369785948 -->
<!--- CONTRIBUTING.md : https://github.com/rh-hideout/pokeemerald-expansion/blob/master/CONTRIBUTING.md --->
<!--- Before submitting, ensure the following:--->
<!--- Code compiles without errors. --->
<!--- All functionality works as expected in-game. --->
<!--- No unexpected test failures. --->
<!--- New functionality is covered by tests if applicable. --->
<!--- Code follows the style guide. --->
<!--- No merge conflicts with the target branch. --->
<!--- If any of the above are not true, submit the PR as a draft. --->
## Description
<!--- Describe your changes in detail -->
<!--- If you believe this PR qualifies as a "Big Feature" as defined in docs/team_procedures/schedule.md, please let a Maintainer know! -->
<!-- Detail the changes made, why they were made, and any important context. -->
## Images
<!-- Please provide with relevant GIFs or images to make it easier for reviewers to accept your PR quicker.-->
<!-- If it doesn't apply, feel free to remove this section. -->
## Media
<!--- Add relevant images, GIFs, or videos to help reviewers understand the changes. Remove this section if not applicable. --->
## Issue(s) that this PR fixes
<!-- Format: "Fixes #2345, fixes #4523, fixes #2222." -->
<!-- If it doesn't apply, feel free to remove this section. -->
<!-- Format: "Fixes #2345, fixes #4523, closes #2222." Remove this section if not applicable.-->
## **People who collaborated with me in this PR**
<!-- Please credit everyone else that contributed to this PR, be it code and/or assets. -->
<!-- Use their GitHub tag if they have one (or add "@/" at the start if they don't). Be sure to start the line using @ so the automatic changelog can properly detect the collaborators. -->
## 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" -->
<!-- If it doesn't apply, feel free to remove this section. -->
<!--- Remove this section if not applicable. --->
## Feature(s) this PR does NOT handle:
<!-- If your PR contains any unfinished features that are not considered merge-blocking, please list them here for clarity so no one can forget. -->
<!-- If it doesn't apply, feel free to remove this section. -->
<!-- If this PR contains any unfinished and non-blocking work, please list them here for clarity. -->
<!--- Remove this section if not applicable. --->
## Things to note in the release changelog:
<!-- We use an automated system to generate our changelogs, so if there's something of note that our end users should know in regards to this change besides the title of this PR, they should be added here. -->
<!-- *MUST* be structured as bullet points. -->
<!-- If it doesn't apply, feel free to remove this section. -->
<!-- Add any important details for the release changelog. Must be structed as bullet points. --->
<!--- Remove this section if not applicable. --->
## **Discord contact info**
<!--- Formatted as username (e.g. Lunos) or username#numbers (e.g. Lunos#4026) -->
## Discord contact info
<!-- Add your Discord username for any follow-up questions (e.g., Lunos#1234). -->
<!--- Remove this section if not applicable. --->
<!--- Contributors must join https://discord.gg/6CzjAG6GZk -->

27
.github/workflows/labels.yml vendored Normal file
View File

@ -0,0 +1,27 @@
name: Labels
on:
pull_request:
types: [opened, labeled, unlabeled]
jobs:
label:
runs-on: ubuntu-latest
steps:
- name: check labels
uses: mheap/github-action-required-labels@v5
with:
mode: minimum
count: 1
labels: |
General
category: ability
category: battle-ai
category: battle-mechanic
category: battle-tests
category: items
category: move animation
category: move effect
category: overworld
category: pokemon
category: sprite-issue

1
.gitignore vendored
View File

@ -45,3 +45,4 @@ tools/trainerproc/trainerproc
*.smol
*.fastSmol
*.smolTM
__pycache__

142
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,142 @@
# Contributing to pokeemerald-expansion
First off, thanks for helping improve `pokeemerald-expansion`! ❤️
All contributions are encouraged and valued. Please make sure to read the relevant section before making your contribution! It will make it a lot easier for you and the maintainers. We're excited to see your contributions. 🎉
## Bug Reports
We use [GitHub](https://github.com/rh-hideout/pokeemerald-expansion/issues?q=sort%3Aupdated-desc+is%3Aissue+is%3Aopen+label%3Abug) issues to track bugs.
### What should I do before making a bug report?
- Does your bug occur on the latest unmodified (clean) version of the [`upcoming`](https://github.com/rh-hideout/pokeemerald-expansion/tree/upcoming) or [`master`](https://github.com/rh-hideout/pokeemerald-expansion/tree/master) branch? If not, please do not submit a report - the issue is most likely one introduced by your game.
- Has somebody else already found this issue? This is best done by searching the [bug tracker](https://github.com/rh-hideout/pokeemerald-expansion/issues?q=label%3Abug) to see if anybody else reported it. If there is already an issue, replying to the exsting issue with more information can help solve the problem.
### How do I submit a bug report?
If you run into an issue with the project, open an [issue](https://github.com/rh-hideout/pokeemerald-expansion/issues/new).
The best bug reports have enough information that we won't have to contact you for more information. We welcome all efforts to improve pokeemerald-expansion, but would be very grateful if you completed as much of the checklist as possible in your bug report. This will help other contributiors fix your issue.
### What happens after I submit a bug report?
- A maintainer will [label](https://github.com/rh-hideout/pokeemerald-expansion/labels) the bug report.
- A maintainer will try to reproduce the bug with your provided steps.
- If there are no reproduction steps or no obvious way to reproduce the issue, somebody will ask you for those steps. Until the bug can be reproduced, the bug will retain the `bug:unconfirmed` label. Unconfirmed bugs are less likely get fixed.
- If the team is able to reproduce the issue, it will be labeled `bug:confirmed`, and the issue will be left to be [implemented by someone](#Pull-Requests).
- If the issue is particularly game-breaking, a maintainer will add it to a future version's [milestone](), meaning that version will not be released until the problem is solved.
## Feature Requests
This section guides you through submitting a feature request for pokeemerald-expansion, **including completely new features and minor improvements to existing functionality**. Following these guidelines will help maintainers and the community to understand your suggestion and find related suggestions.
- We use [GitHub](https://github.com/rh-hideout/pokeemerald-expansion/issues?q=sort%3Aupdated-desc+is%3Aissue+is%3Aopen+label%3Afeature-request) issues to track feature requests.
### What should I do before making a feature request?
- Make sure your request is in [pokeemerald-expansion's scope](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).
### What should I do before making a feature request?
- Read the [documentation](https://rh-hideout.github.io/pokeemerald-expansion/) to find out if the functionality is already covered, maybe by an individual configuration.
- Perform a [search](https://github.com/rh-hideout/pokeemerald-expansion/issues) to see if the feature has already been requested. If it has, add a comment to the existing issue instead of opening a new one.
### How do I submit a feature request?
To request a feature to be added to the project, open a [feature request](https://github.com/rh-hideout/pokeemerald-expansion/issues/new).
### What happens after I submit a feature request?
- A maintainer will [label](https://github.com/rh-hideout/pokeemerald-expansion/labels) the issue.
- If the feature request is out of [scope](team_procedures/scope.md), it will be closed.
- if the request is in scope, any other contributor can volunteer to [fufill it via a pull request](#Pull-Requests). When the request is filled, the request will be closed.
## Pull Requests
If you have read all of this and still need help, feel free to start a thread in #pr-discussions of the Discord server or ask questions in #expansion-dev.
### What should I do before starting a pull request?
- 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](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.
- 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).
### How do I submit a pull request?
#### 1. Get a working local copy
If you haven't already, follow [INSTALL.md](INSTALL.md) to get a working local copy of `pokeemerald-expansion`.
#### 2. Set RHH as a remote
This will designate the main `pokeemerald-expansion` repository as a remote.
```bash
git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion # You can replace RHH with anything you want. This tutorial assumes you used RHH.
```
#### 3. Create a new branch
This will create a new branch and switch to it.
```bash
git switch -c newFeature # the name newFeature can be anything you want. This tutorial assumes you used newFeature.
```
#### 4. Copy your target branch to your new branch
This will change your new branch to match the latest version of your chosen target branch.
```bash
git reset --hard RHH/upcoming # If your PR is going to target master, replace upcoming with master.
```
#### 5. Implement your code
All of your work should go on this new, clean branch. If you already started work on a different branch, you can [cherry-pick](https://git-scm.com/docs/git-cherry-pick) you old commits onto this new branch, or just copy and paste the changes from the original files.
##### Popular Features / Feature Branches
If you are implementing functionality from a known community feature branch, it is **strongly** reccomended that you open a discussion thread _before_ starting. There are some situations where maintainers would ask you to use the existing feature branch as a base, and others where maintainers would want a feature to be written from scratch.
This changes on a case by case basis.
#### 6. Push your changes
When you push your first commit, you'll need to push the new branch to the remote repo.
```bash
git push --set-upstream origin newFeature
```
#### 7. Open Pull Request
Once your work is complete and pushed to the branch on Github, you can open a [pull request from your branch](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork), targeting the branch you've chosen from `pokeemerald-expansion`. Please fill out the pull request description as completely as possible.
### What happens after I submit a pull request?
A maintainer will then assign themselves as a reviewer of your pull request, and may provide feedback in the form of a PR review.
Contributors are responsible for responding to and updating their branch by addressing the feedback in the review. Contributors are also responsible for making sure the branch passes the checklist at all times.
Once a maintainer has begun reviewing your PR, **please** do not force-push new changes - normal pushes are fine. Do not worry about git history - we squash most incoming changes.
Maintainers will measure the submitted pull request against a [merge checklist](docs/team_procedures/merge_checklist.md).
Once all items on the merge checklist are true, the branch will be merged in.
## Maintainers
This list was last updated 2025 April 1.
| Name | Discord | Currently Active | Areas of Expertise |
| --- | --- | --- | --- |
| [Alex](https://github.com/AlexOn1ine) | rainonline | ✅ | Battle Engine, Battle AI
| [Egg](https://github.com/DizzyEggg) | egg9255 | ✅ | Battle Engine, Battle AI
| [ghoulslash](https://github.com/ghoulslash) | ghoulslash | ✅ | Dexnav, Overworld, Battle Engine
| [Jasper](https://github.com/Bassoonian) | bassoonian | ✅ | Berries, Day / Night System, Followers, Feature Branches
| [MGriffin](https://github.com/mrgriffin) | mgriffin | ✅ | Tests, Trainer Control
| [psf](https://github.com/pkmnsnfrn) | pkmnsnfrn | ✅ | Rematches, Difficulty, Trainer Slides, Fake RTC, Fishing Minigames, Imperial / Metric, OW Item Balls, Sky Battles
| [Hedara](https://github.com/hedara90) | hedara | ✅ | Compression, Sprites
| [Pawkkie](https://github.com/Pawkkie) | pawkkie | ✅ | Battle AI
| [SBird](https://github.com/SBird1337) | karathan | ✅ | Dynamic Multichoice, Damage Calculation, Animations, Trainer Control, Tests
| [Agustin](https://github.com/AgustinGDLV) | agustingdlv | Inactive | Gimmicks, Battle Engine, Tests, Items
| [tertu](https://github.com/tertu-m) | tertu | Inactive | Randomizer
## Attribution
This guide is based on the [contributing.md](https://contributing.md/generator)!

View File

@ -165,6 +165,12 @@ PATCHELF := $(TOOLS_DIR)/patchelf/patchelf$(EXE)
ROMTEST ?= $(shell { command -v mgba-rom-test || command -v $(TOOLS_DIR)/mgba/mgba-rom-test$(EXE); } 2>/dev/null)
ROMTESTHYDRA := $(TOOLS_DIR)/mgba-rom-test-hydra/mgba-rom-test-hydra$(EXE)
# Learnset helper is a Python script
LEARNSET_HELPERS_DIR := $(TOOLS_DIR)/learnset_helpers
LEARNSET_HELPERS_DATA_DIR := $(LEARNSET_HELPERS_DIR)/porymoves_files
LEARNSET_HELPERS_BUILD_DIR := $(LEARNSET_HELPERS_DIR)/build
ALL_LEARNABLES_JSON := $(LEARNSET_HELPERS_BUILD_DIR)/all_learnables.json
PERL := perl
SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c
@ -338,6 +344,7 @@ generated: $(AUTO_GEN_TARGETS)
clean-generated:
-rm -f $(AUTO_GEN_TARGETS)
-rm -f $(ALL_LEARNABLES_JSON)
COMPETITIVE_PARTY_SYNTAX := $(shell PATH="$(PATH)"; echo 'COMPETITIVE_PARTY_SYNTAX' | $(CPP) $(CPPFLAGS) -imacros include/gba/defines.h -imacros include/config/general.h | tail -n1)
ifeq ($(COMPETITIVE_PARTY_SYNTAX),1)
@ -427,11 +434,16 @@ $(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt)
$(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt
$(RAMSCRGEN) ewram_data $< ENGLISH > $@
MOVES_JSON_DIR := $(TOOLS_DIR)/learnset_helpers/porymoves_files
TEACHABLE_DEPS := $(shell find data/ -type f -name '*.inc') $(INCLUDE_DIRS)/constants/tms_hms.h $(C_SUBDIR)/pokemon.c $(wildcard $(MOVES_JSON_DIR)/*.json)
TEACHABLE_DEPS := $(ALL_LEARNABLES_JSON) $(shell find data/ -type f -name '*.inc') $(INCLUDE_DIRS)/constants/tms_hms.h $(C_SUBDIR)/pokemon.c
$(LEARNSET_HELPERS_BUILD_DIR):
@mkdir -p $@
$(ALL_LEARNABLES_JSON): $(wildcard $(LEARNSET_HELPERS_DATA_DIR)/*.json) | $(LEARNSET_HELPERS_BUILD_DIR)
python3 $(LEARNSET_HELPERS_DIR)/make_learnables.py $(LEARNSET_HELPERS_DATA_DIR) $@
$(DATA_SRC_SUBDIR)/pokemon/teachable_learnsets.h: $(TEACHABLE_DEPS)
python3 $(TOOLS_DIR)/learnset_helpers/teachable.py
python3 $(LEARNSET_HELPERS_DIR)/make_teachables.py $<
# Linker script
LD_SCRIPT := ld_script_modern.ld

View File

@ -10,7 +10,7 @@ The main advantage of using vanilla pokeemerald as a base is being able to link
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.0 https://github.com/rh-hideout/pokeemerald-expansion/
Based off RHH's pokeemerald-expansion 1.11.1 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.
@ -33,7 +33,7 @@ With this, you'll get the latest version of pokeemerald-expansion, plus a couple
- 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.9.3, use `git pull RHH expansion/1.9.3`).
- 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`.
@ -67,7 +67,7 @@ Also, *please follow the Pull Request template and feel free to discuss how the
- 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/))
- 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

View File

@ -1268,7 +1268,7 @@
.byte 0xed
.endm
.macro removelightscreenreflect
.macro removescreens
.byte 0xee
.endm
@ -1613,6 +1613,11 @@
.4byte \ptr
.endm
.macro undodynamax battler:req
callnative BS_UndoDynamax
.byte \battler
.endm
.macro trytrainerslidezmovemsg
callnative BS_TryTrainerSlideZMoveMsg
.endm
@ -1640,10 +1645,6 @@
callnative BS_TryTriggerStatusForm
.endm
.macro setdynamicmovecategory
callnative BS_SetDynamicMoveCategory
.endm
.macro tryupperhand failInstr:req
callnative BS_TryUpperHand
.4byte \failInstr
@ -1816,6 +1817,12 @@
.4byte \failInstr
.endm
.macro jumpifcangigantamax battler:req, jumpInstr:req
callnative BS_JumpIfCanGigantamax
.byte \battler
.4byte \jumpInstr
.endm
@ various command changed to more readable macros
.macro cancelmultiturnmoves battler:req
various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES
@ -2376,6 +2383,10 @@
.byte \stat
.endm
.macro restoresavedmove
callnative BS_RestoreSavedMove
.endm
@ helpful macros
.macro setstatchanger stat:req, stages:req, down:req
setbyte sSTATCHANGER, \stat | \stages << 3 | \down << 7

View File

@ -164,6 +164,10 @@
create_movement_action fly_down, MOVEMENT_ACTION_FLY_DOWN
create_movement_action emote_double_exclamation_mark, MOVEMENT_ACTION_EMOTE_DOUBLE_EXCL_MARK
create_movement_action emote_x, MOVEMENT_ACTION_EMOTE_X
create_movement_action walk_slow_stairs_down, MOVEMENT_ACTION_WALK_SLOW_STAIRS_DOWN
create_movement_action walk_slow_stairs_up, MOVEMENT_ACTION_WALK_SLOW_STAIRS_UP
create_movement_action walk_slow_stairs_left, MOVEMENT_ACTION_WALK_SLOW_STAIRS_LEFT
create_movement_action walk_slow_stairs_right, MOVEMENT_ACTION_WALK_SLOW_STAIRS_RIGHT
create_movement_action exit_pokeball, MOVEMENT_ACTION_EXIT_POKEBALL
create_movement_action enter_pokeball, MOVEMENT_ACTION_ENTER_POKEBALL

View File

@ -6,12 +6,15 @@ MID_ASM_DIR := $(MID_SUBDIR)
CRY_BIN_DIR := $(CRY_SUBDIR)
SOUND_BIN_DIR := sound
# Needs to recompile for B_NUM_LOW_HEALTH_BEEPS in battle.h
EXPANSION_BATTLE_CONFIG := include/config/battle.h
SPECIAL_OUTDIRS := $(MID_ASM_DIR) $(CRY_BIN_DIR)
SPECIAL_OUTDIRS += $(SOUND_BIN_DIR) $(SOUND_BIN_DIR)/direct_sound_samples/phonemes $(SOUND_BIN_DIR)/direct_sound_samples/cries
$(shell mkdir -p $(SPECIAL_OUTDIRS) )
# Assembly song compilation
$(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s
$(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s $(EXPANSION_BATTLE_CONFIG)
$(AS) $(ASFLAGS) -I sound -o $@ $<
$(MID_BUILDDIR)/%.o: $(MID_ASM_DIR)/%.s
$(AS) $(ASFLAGS) -I sound -o $@ $<
@ -34,7 +37,7 @@ MID_CFG_PATH := $(MID_SUBDIR)/midi.cfg
# $1: Source path no extension, $2 Options
define MID_RULE
$(MID_ASM_DIR)/$1.s: $(MID_SUBDIR)/$1.mid $(MID_CFG_PATH)
$(MID_ASM_DIR)/$1.s: $(MID_SUBDIR)/$1.mid $(MID_CFG_PATH) $(EXPANSION_BATTLE_CONFIG)
$(MID) $$< $$@ $2
endef
# source path, remaining text (options)

View File

@ -424,6 +424,8 @@ B_TRAINER1_NAME_WITH_CLASS = FD 42
B_TRAINER2_NAME_WITH_CLASS = FD 43
B_PARTNER_NAME_WITH_CLASS = FD 44
B_ATK_TRAINER_NAME_WITH_CLASS = FD 45
B_SCR_TEAM1 = FD 46
B_SCR_TEAM2 = FD 47
@ indicates the end of a town/city name (before " TOWN" or " CITY")
NAME_END = FC 00

View File

@ -16762,6 +16762,7 @@ gBattleAnimMove_JetPunch::
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB_BLUE
delay 8
createvisualtask AnimTask_ExtremeSpeedMonReappear, 2
setarg 0x7, 0x1000
createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0x14, 0xffec, 0x14, ANIM_TARGET
createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xa, 0x14, ANIM_TARGET
createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 8, 1, 0

View File

@ -272,7 +272,11 @@ BattleScript_EffectChillyReception::
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_EffectChillyReceptionBlockedByPrimalRain
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_EffectChillyReceptionBlockedByStrongWinds
call BattleScript_EffectChillyReceptionPlayAnimation
#if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL
setfieldweather BATTLE_WEATHER_HAIL
#else
setfieldweather BATTLE_WEATHER_SNOW
#endif
call BattleScript_MoveWeatherChangeRet
goto BattleScript_MoveSwitch
BattleScript_EffectChillyReceptionPlayAnimation:
@ -836,10 +840,6 @@ BattleScript_FlingMissed:
ppreduce
goto BattleScript_MoveMissedPause
BattleScript_EffectDynamicCategory::
setdynamicmovecategory
goto BattleScript_EffectHit
BattleScript_EffectAuraWheel:: @ Aura Wheel can only be used by Morpeko
jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_FULL_BELLY, BattleScript_EffectHit
jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_HANGRY, BattleScript_EffectHit
@ -3429,51 +3429,15 @@ BattleScript_EffectSuperFang::
damagetohalftargethp
goto BattleScript_HitFromAtkAnimation
BattleScript_EffectRecoilIfMiss::
attackcanceler
accuracycheck BattleScript_MoveMissedDoDamage, ACC_CURR_MOVE
.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4
typecalc
jumpifmoveresultflags MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveMissedDoDamage
.endif
goto BattleScript_HitFromAtkString
BattleScript_MoveMissedDoDamage::
jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_PrintMoveMissed
attackstring
ppreduce
pause B_WAIT_TIME_LONG
resultmessage
waitmessage B_WAIT_TIME_LONG
.if B_CRASH_IF_TARGET_IMMUNE < GEN_4
jumpifmoveresultflags MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd
.endif
moveendcase MOVEEND_PROTECT_LIKE_EFFECT @ Spiky Shield's damage happens before recoil.
jumpifhasnohp BS_ATTACKER, BattleScript_MoveEnd
BattleScript_RecoilIfMiss::
printstring STRINGID_PKMNCRASHED
waitmessage B_WAIT_TIME_LONG
damagecalc
typecalc
adjustdamage
.if B_CRASH_IF_TARGET_IMMUNE == GEN_4
manipulatedamage DMG_RECOIL_FROM_IMMUNE
.else
manipulatedamage DMG_RECOIL_FROM_MISS
.endif
.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4
clearmoveresultflags MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE
.else
clearmoveresultflags MOVE_RESULT_MISSED
.endif
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE
jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_RecoilEnd
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
tryfaintmon BS_ATTACKER
.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4
setmoveresultflags MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE
.else
setmoveresultflags MOVE_RESULT_MISSED
.endif
goto BattleScript_MoveEnd
return
BattleScript_EffectMist::
attackcanceler
@ -5108,7 +5072,7 @@ BattleScript_EffectBrickBreak::
attackstring
ppreduce
typecalc
removelightscreenreflect
removescreens
critcalc
damagecalc
adjustdamage
@ -5764,7 +5728,7 @@ BattleScript_ActionSwitch::
BattleScript_DoSwitchOut::
switchoutabilities BS_ATTACKER
updatedynamax
undodynamax BS_ATTACKER
waitstate
returnatktoball
waitstate
@ -6047,6 +6011,8 @@ BattleScript_RoarSuccessSwitch::
BattleScript_RoarSuccessSwitch_Ret:
swapattackerwithtarget @ continuation of RedCardActivates
restoretarget
restoreattacker
restoresavedmove
setbyte sSWITCH_CASE, B_SWITCH_NORMAL
return
@ -7110,7 +7076,7 @@ BattleScript_AnticipationActivates::
BattleScript_AftermathDmg::
pause B_WAIT_TIME_SHORT
call BattleScript_AbilityPopUp
call BattleScript_AbilityPopUpScripting
jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_AftermathDmgRet
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
healthbarupdate BS_ATTACKER
@ -7594,35 +7560,37 @@ BattleScript_MoodyEnd:
end3
BattleScript_EmergencyExit::
.if B_ABILITY_POP_UP == TRUE
pause 5
call BattleScript_AbilityPopUp
call BattleScript_AbilityPopUpScripting
pause B_WAIT_TIME_LONG
BattleScript_EmergencyExitNoPopUp::
playanimation BS_TARGET, B_ANIM_SLIDE_OFFSCREEN
.endif
playanimation BS_SCRIPTING, B_ANIM_SLIDE_OFFSCREEN
waitanimation
openpartyscreen BS_TARGET, BattleScript_EmergencyExitRet
switchoutabilities BS_TARGET
openpartyscreen BS_SCRIPTING, BattleScript_EmergencyExitRet
switchoutabilities BS_SCRIPTING
waitstate
switchhandleorder BS_TARGET, 2
switchhandleorder BS_SCRIPTING, 2
returntoball BS_TARGET, FALSE
getswitchedmondata BS_TARGET
switchindataupdate BS_TARGET
hpthresholds BS_TARGET
getswitchedmondata BS_SCRIPTING
switchindataupdate BS_SCRIPTING
hpthresholds BS_SCRIPTING
printstring STRINGID_SWITCHINMON
switchinanim BS_TARGET, FALSE, TRUE
switchinanim BS_SCRIPTING, FALSE, TRUE
waitstate
switchineffects BS_TARGET
switchineffects BS_SCRIPTING
BattleScript_EmergencyExitRet:
return
BattleScript_EmergencyExitWild::
.if B_ABILITY_POP_UP == TRUE
pause 5
call BattleScript_AbilityPopUp
call BattleScript_AbilityPopUpScripting
pause B_WAIT_TIME_LONG
BattleScript_EmergencyExitWildNoPopUp::
playanimation BS_TARGET, B_ANIM_SLIDE_OFFSCREEN
.endif
playanimation BS_SCRIPTING, B_ANIM_SLIDE_OFFSCREEN
waitanimation
setoutcomeonteleport BS_TARGET
setoutcomeonteleport BS_SCRIPTING
finishaction
return
@ -7757,13 +7725,15 @@ BattleScript_ShedSkinActivates::
end3
BattleScript_ActivateWeatherAbilities:
saveattacker
savetarget
setbyte gBattlerTarget, 0
setbyte gBattlerAttacker, 0
BattleScript_ActivateWeatherAbilities_Loop:
copybyte sBATTLER, gBattlerTarget
copyarraywithindex gBattlerTarget, gBattlerByTurnOrder, gBattlerAttacker, 1
activateweatherchangeabilities BS_TARGET
addbyte gBattlerTarget, 1
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateWeatherAbilities_Loop
addbyte gBattlerAttacker, 1
jumpifbytenotequal gBattlerAttacker, gBattlersCount, BattleScript_ActivateWeatherAbilities_Loop
restoreattacker
restoretarget
return
@ -8057,7 +8027,7 @@ BattleScript_AttackWeakenedByStrongWinds::
waitmessage B_WAIT_TIME_LONG
return
BattleScript_MimicryActivates_End3::
BattleScript_MimicryActivates::
pause B_WAIT_TIME_SHORT
call BattleScript_AbilityPopUp
printstring STRINGID_BATTLERTYPECHANGEDTO
@ -8083,16 +8053,18 @@ BattleScript_SnowWarningActivatesSnow::
end3
BattleScript_ActivateTerrainEffects:
saveattacker
savetarget
setbyte gBattlerTarget, 0
setbyte gBattlerAttacker, 0
BattleScript_ActivateTerrainSeed:
copybyte sBATTLER, gBattlerTarget
copyarraywithindex gBattlerTarget, gBattlerByTurnOrder, gBattlerAttacker, 1
doterrainseed BS_TARGET, BattleScript_ActivateTerrainAbility
removeitem BS_TARGET
BattleScript_ActivateTerrainAbility:
activateterrainchangeabilities BS_TARGET
addbyte gBattlerTarget, 0x1
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateTerrainSeed
addbyte gBattlerAttacker, 1
jumpifbytenotequal gBattlerAttacker, gBattlersCount, BattleScript_ActivateTerrainSeed
restoreattacker
restoretarget
return
@ -9543,6 +9515,8 @@ BattleScript_RedCardActivationNoSwitch::
waitmessage B_WAIT_TIME_LONG
removeitem BS_SCRIPTING
restoretarget
restoreattacker
restoresavedmove
return
BattleScript_RedCardActivates::
@ -9561,22 +9535,17 @@ BattleScript_RedCardEnd:
return
BattleScript_RedCardIngrain:
printstring STRINGID_PKMNANCHOREDITSELF
BattleScript_RedCardIngrainContinue:
waitmessage B_WAIT_TIME_LONG
removeitem BS_SCRIPTING
restoretarget
return
BattleScript_RedCardSuctionCups:
printstring STRINGID_PKMNANCHORSITSELFWITH
waitmessage B_WAIT_TIME_LONG
removeitem BS_SCRIPTING
restoretarget
return
printstring STRINGID_PKMNANCHORSITSELFWITH
goto BattleScript_RedCardIngrainContinue
BattleScript_RedCardDynamaxed:
printstring STRINGID_MOVEBLOCKEDBYDYNAMAX
waitmessage B_WAIT_TIME_LONG
removeitem BS_SCRIPTING
restoretarget
return
goto BattleScript_RedCardIngrainContinue
BattleScript_EjectButtonActivates::
makevisible BS_ATTACKER
@ -9584,6 +9553,7 @@ BattleScript_EjectButtonActivates::
printstring STRINGID_EJECTBUTTONACTIVATE
waitmessage B_WAIT_TIME_LONG
removeitem BS_SCRIPTING
undodynamax BS_SCRIPTING
makeinvisible BS_SCRIPTING
openpartyscreen BS_SCRIPTING, BattleScript_EjectButtonEnd
copybyte sSAVED_BATTLER, sBATTLER
@ -9683,11 +9653,14 @@ BattleScript_NeutralizingGasExits::
pause B_WAIT_TIME_SHORT
printstring STRINGID_NEUTRALIZINGGASOVER
waitmessage B_WAIT_TIME_LONG
setbyte gBattlerTarget, 0
setbyte gBattlerAttacker, 0
BattleScript_NeutralizingGasExitsLoop:
copyarraywithindex gBattlerTarget, gBattlerByTurnOrder, gBattlerAttacker, 1
saveattacker
switchinabilities BS_TARGET
addbyte gBattlerTarget, 1
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_NeutralizingGasExitsLoop
restoreattacker
addbyte gBattlerAttacker, 1
jumpifbytenotequal gBattlerAttacker, gBattlersCount, BattleScript_NeutralizingGasExitsLoop
restoreattacker
restoretarget
return
@ -10027,6 +10000,14 @@ BattleScript_EffectSteelsurge::
BattleScript_DynamaxBegins::
flushtextbox
trytrainerslidedynamaxmsg
jumpifcangigantamax BS_ATTACKER, BattleScript_DynamaxBegins_GigantamaxString_01
printstring STRINGID_TIMETODYNAMAX
waitmessage B_WAIT_TIME_MED
goto BattleScript_DynamaxBegins_SwitchIn
BattleScript_DynamaxBegins_GigantamaxString_01:
printstring STRINGID_TIMETOGIGANTAMAX
waitmessage B_WAIT_TIME_MED
BattleScript_DynamaxBegins_SwitchIn:
returnatktoball
pause B_WAIT_TIME_SHORT
returntoball BS_SCRIPTING, TRUE
@ -10034,6 +10015,15 @@ BattleScript_DynamaxBegins::
updatedynamax
playanimation BS_SCRIPTING, B_ANIM_DYNAMAX_GROWTH
waitanimation
jumpifbyteequal B_SHOW_DYNAMAX_MESSAGE, FALSE, BattleScript_DynamaxBegins_End3
jumpifcangigantamax BS_ATTACKER, BattleScript_DynamaxBegins_GigantamaxString_02
printstring STRINGID_PKMNDYNAMAXED
waitmessage B_WAIT_TIME_LONG
goto BattleScript_DynamaxBegins_End3
BattleScript_DynamaxBegins_GigantamaxString_02:
printstring STRINGID_PKMNGIGANTAMAXED
waitmessage B_WAIT_TIME_LONG
BattleScript_DynamaxBegins_End3:
end3
BattleScript_DynamaxEnds::
@ -10043,6 +10033,13 @@ BattleScript_DynamaxEnds::
waitanimation
end2
BattleScript_DynamaxEnds_Ret::
flushtextbox
updatedynamax
playanimation BS_SCRIPTING, B_ANIM_FORM_CHANGE
waitanimation
return
BattleScript_MoveBlockedByDynamax::
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring

1
docs/CONTRIBUTING.md Normal file
View File

@ -0,0 +1 @@
{{#include ../CONTRIBUTING.md}}

1
docs/CREDITS.md Normal file
View File

@ -0,0 +1 @@
{{#include ../CREDITS.md}}

399
docs/STYLEGUIDE.md Normal file
View File

@ -0,0 +1,399 @@
# Styleguide and Principles
## Naming Conventions
Function names and struct names should be formatted in `PascalCase`.
```c
void ThisIsCorrect(void);
struct MyStruct
{
u8 firstField;
u16 secondField;
...
};
```
Variables and struct fields should be formatted in `camelCase`.
```c
int thisIsCorrect = 0;
```
Global variables should be prefixed with `g`, and static variables should be
prefixed with `s`.
```c
extern s32 gMyGlobalVariable;
static u8 sMyStaticVariable = 0;
```
Macros and constants should use `CAPS_WITH_UNDERSCORES`.
```c
#define MAX_LEVEL 100
enum
{
COLOR_RED,
COLOR_BLUE,
COLOR_GREEN,
};
#define ADD_FIVE(x) ((x) + 5)
```
## Coding Style
### Comments
Ideally, contributions have descriptive variable, function and constant names so as to explain functionality without comments. When a comment is used, the content of the comment should explain _WHY_ a specific system or component works the way it does.
When describing a system/component in-depth, use block comment syntax.
```c
/*
* This is an in-depth description of the save block format. Its format is as follows:
*
* Sectors 0 - 13: Save Slot 1
* Sectors 14 - 27: Save Slot 2
* ...
*/
```
When briefly describing a function or block of code, use a single-line comments
placed on its own line.
There should be a single space directly to the right of `//`.
```c
// This is supplemental information for the function. If there is a bunch of info, it should
// carry on to the next line.
void ProcessSingleTask(void)
{
// Short comment describing some noteworthy aspect of the code immediately following.
...
// Comments should be capitalized and end in a period.
}
```
When tagging a data structure that corresponds to an `enum` or some noteworthy
value, place the comment on the same line as the code.
```c
const u8 gPlantlikeMons[] =
{
FALSE, // SPECIES_BULBASAUR
FALSE, // SPECIES_IVYSAUR
TRUE, // SPECIES_VENUSAUR
FALSE, // SPECIES_CHARMANDER
...
};
```
### Whitespace
All `.c` and `.h` files should use 4 spaces--not tabs.
Assembler files (`.s)` use tabs.
Script files (`.inc)` use tabs.
### Operators
Assignments and comparison operators should have one space on both sides of `=`.
```c
int i = 0; // correct
int i=0; // incorrect
a > b // correct
a>b // incorrect
```
The incrementor and decrementor operators should NOT have a space.
```c
i++; // correct
i ++; // incorrect
```
A control statement should have a space between them and their expressions, and the opening bracket should be on the next line.
```c
for (...)
{
// correct
}
for(...) {
// incorrect
}
```
A `switch` statement's cases should left-align with the `switch`'s block.
```c
switch (foo)
{
case 0: // correct
...
break;
}
switch (foo)
{
case 0: // incorrect
...
break;
}
```
A single empty line should follow a block.
```c
int MyFunction(int bar)
{
int foo = 0;
if (bar)
foo++;
return foo; // correct
}
int MyFunction(int bar)
{
int foo = 0;
if (bar)
foo++;
return foo; // incorrect
}
```
A chain of `if-else` statements in which any block is more than one line of
code should use braces. If all blocks are single-line, then no braces are necessary.
```c
if (foo) // correct
{
return 1;
}
else
{
MyFunction();
return 0;
}
if (foo) // incorrect
return 1;
else
{
MyFunction();
return 0;
}
```
### Control Structures
When comparing whether or not a value equals `0`, don't be explicit unless the
situation calls for it.
```c
if (runTasks) // correct
RunTasks();
if (runTasks != 0) // incorrect
RunTasks();
if (!PlayerIsOutside()) // correct
RemoveSunglasses();
if (PlayerIsOutside() == 0) // incorrect
RemoveSunglasses();
```
When writing a `for` or `while` loop with no body, use a semicolon `;` on the
same line, rather than empty braces.
```c
for (i = 0; gParty[i].species != SPECIES_NONE; i++); // correct
for (i = 0; gParty[i].species != SPECIES_NONE; i++) // incorrect
{ }
```
### Inline Configs
When adding functionality that is controlled by a config, defines should be checked within the normal control flow of the function unless a data structure requires a change at runtime.
```c
void SetCurrentDifficultyLevel(enum DifficultyLevel desiredDifficulty)
{
#ifdef B_VAR_DIFFICULTY
return; // Incorrect
#endif
if (desiredDifficulty > DIFFICULTY_MAX)
desiredDifficulty = DIFFICULTY_MAX;
VarSet(B_VAR_DIFFICULTY, desiredDifficulty);
}
```
```c
void SetCurrentDifficultyLevel(enum DifficultyLevel desiredDifficulty)
{
if (!B_VAR_DIFFICULTY) // Correct
return;
if (desiredDifficulty > DIFFICULTY_MAX)
desiredDifficulty = DIFFICULTY_MAX;
VarSet(B_VAR_DIFFICULTY, desiredDifficulty);
}
```
```c
[MOVE_VINE_WHIP] =
{
.name = COMPOUND_STRING("Vine Whip"),
.description = COMPOUND_STRING(
"Strikes the foe with\n"
"slender, whiplike vines."),
#if B_UPDATED_MOVE_DATA >= GEN_6 // Correct
.pp = 25,
#elif B_UPDATED_MOVE_DATA >= GEN_4
.pp = 15,
#else
.pp = 10,
#endif
.effect = EFFECT_HIT,
.power = B_UPDATED_MOVE_DATA >= GEN_6 ? 45 : 35,
},
```
## Data Type Sizes
When a variable number is used, the data type should generally `u32` (unsigned) or `s32` (signed). There are a few exceptions to this rule, such as:
* Values stored in the saveblock should use the smallest data type possible.
* `EWRAM` variables should use the smallest data type possible.
* Global variables / global struct members use the smallest data type possible.
## Constants, Enums and Type Checking
Avoid using magic numbers when possible - constants help to make clear why a specific value is used.
```c
// Incorrect
if (gimmick == 5 && mon->teraType != 0)
return TRUE;
if (gimmick == 4 && mon->shouldUseDynamax)
return TRUE;
```
```c
// Correct
#define TYPE_NONE 0
#define GIMMICK_DYNAMAX 4
#define GIMMICK_TERA 5
if (gimmick == GIMMICK_TERA && mon->teraType != TYPE_NONE)
return TRUE;
if (gimmick == GIMMICK_DYNAMAX && mon->shouldUseDynamax)
return TRUE;
```
When several numbers in sequence are used AND those values are not utilized in the saveblock, an enum is used instead.
```c
//Correct
enum Gimmick
{
GIMMICK_NONE,
GIMMICK_MEGA,
GIMMICK_ULTRA_BURST,
GIMMICK_Z_MOVE,
GIMMICK_DYNAMAX,
GIMMICK_TERA,
GIMMICKS_COUNT,
};
if (gimmick == GIMMICK_TERA && mon->teraType != TYPE_NONE)
return TRUE;
if (gimmick == GIMMICK_DYNAMAX && mon->shouldUseDynamax)
return TRUE;
```
When an enum is used, the enum type is used instead of a regular number type to prevent incorrectly set values.
```c
// Incorrect
bool32 CanActivateGimmick(u32 battler, u32 gimmick)
{
return gGimmicksInfo[gimmick].CanActivate != NULL && gGimmicksInfo[gimmick].CanActivate(battler);
}
u32 GetCurrentDifficultyLevel(void)
{
if (!B_VAR_DIFFICULTY)
return DIFFICULTY_NORMAL;
return VarGet(B_VAR_DIFFICULTY);
}
```
```c
//Correct
bool32 CanActivateGimmick(u32 battler, enum Gimmick gimmick)
{
return gGimmicksInfo[gimmick].CanActivate != NULL && gGimmicksInfo[gimmick].CanActivate(battler);
}
enum DifficultyLevel GetCurrentDifficultyLevel(void)
{
if (!B_VAR_DIFFICULTY)
return DIFFICULTY_NORMAL;
return VarGet(B_VAR_DIFFICULTY);
}
```
## Principles
### Minimally Invasive
New functionality must be as minimally invasive to existing files as possible. When a large amount of new code is introduced, it is best to isolate it in its own file.
The [`B_VAR_DIFFICULTY`](https://patch-diff.githubusercontent.com/raw/rh-hideout/pokeemerald-expansion/pull/5337.diff) pull request is a good example of lots of new code being introduced in minimally invasive ways.
### `UNUSED`
If a function or data is introduced but is never called, it is designated as `UNUSED`. `UNUSED` functions should not be introduced unless neccesary.
```c
static void UNUSED PadString(const u8 *src, u8 *dst)
{
u32 i;
for (i = 0; i < 17 && src[i] != EOS; i++)
dst[i] = src[i];
for (; i < 17; i++)
dst[i] = CHAR_SPACE;
dst[i] = EOS;
}
```
### Config Philosophy
If a branch can modifies saves, the functionality that does so must be gated behind a config, and off by default.
If a branch has a config that performs either of the following, it should be on by default:
* improves the backend / developer quality of life
* emulates present day, modern day Pokémon
If a branch's behavior is one that Game Freak does not have a consistent stance on, the default behavior of the config should be disussed by the maintainers.
All other configs should be off.
### Save Philosophy
Until [save migration](https://discord.com/channels/419213663107416084/1108733346864963746) is implemented, branches will only merged in if they do not forcefully break existing game saves.
When `pokemeerald-expansion` gets to a point where new functionality will require that we break saves, we will merge as many [save-breaking features](https://discord.com/channels/419213663107416084/1202774957776441427) together as possible, and increment the major version number of the project.
# Attribution
* The majority of the styleguide was written by [garakmon](https://github.com/garakmon) as part of their [PR to pokefirered](<https://github.com/pret/pokefirered/pull/63>).

View File

@ -5,6 +5,8 @@
- [Setting up WSL1 (Legacy Portion)](./legacy_WSL1_INSTALL.md)
- [Run documentation site locally](local_mdbook/index.md)
- [Ubuntu WSL1/WSL2](local_mdbook/ubuntu_WSL.md)
- [Contributing](./CONTRIBUTING.md)
- [Credits](./CREDITS.md)
- [Tutorials]()
- [What are AI Flags?](tutorials/ai_flags.md)
- [How to add new AI Flags](tutorials/ai_logic.md)
@ -21,6 +23,7 @@
- [How to add new Trainer Slides](tutorials/how_to_new_trainer_slide.md)
- [Changelog](./CHANGELOG.md)
- [1.11.x]()
- [Version 1.11.1](changelogs/1.11.x/1.11.1.md)
- [Version 1.11.0](changelogs/1.11.x/1.11.0.md)
- [1.10.x]()
- [Version 1.10.3](changelogs/1.10.x/1.10.3.md)

View File

@ -0,0 +1,115 @@
```md
## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.11.1
`.
```
## 🧬 General 🧬
### Added
* Added workflow for labels check by @hedara90 in [#6488](https://github.com/rh-hideout/pokeemerald-expansion/pull/6488)
### Changed
* metaprogram.h without global.h by @mrgriffin in [#6469](https://github.com/rh-hideout/pokeemerald-expansion/pull/6469)
* Rename removelishtscreenreflect to removescreens by @AlexOn1ine in [#6495](https://github.com/rh-hideout/pokeemerald-expansion/pull/6495)
### Fixed
* Fix Melmetal's weight by @kittenchilly in [#6382](https://github.com/rh-hideout/pokeemerald-expansion/pull/6382)
* B_FAST_INTRO_PKMN_TEXT fix by @hedara90 in [#6395](https://github.com/rh-hideout/pokeemerald-expansion/pull/6395)
* remove/replace IsAlly leftovers by @cawtds in [#6399](https://github.com/rh-hideout/pokeemerald-expansion/pull/6399)
* Increase dex no digits from 3 to 4 by @PCG06 in [#6484](https://github.com/rh-hideout/pokeemerald-expansion/pull/6484)
## 🗺️ Overworld 🗺️
### Changed
* Replace Incorrect Slow Stairs Movement with Correct One by @Deokishisu in [#6275](https://github.com/rh-hideout/pokeemerald-expansion/pull/6275)
### Fixed
* Fix compile errors with OW_BATTLE_ONLY_FORMS set to FALSE by @hedara90 in [#6400](https://github.com/rh-hideout/pokeemerald-expansion/pull/6400)
* Include Missed `GetInteractedMetatileScript` Entries for Mart & Center Signs by @Deokishisu in [#6269](https://github.com/rh-hideout/pokeemerald-expansion/pull/6269)
* Fix DexNav search level by @cawtds in [#6421](https://github.com/rh-hideout/pokeemerald-expansion/pull/6421)
* Hide in-battle types from Union Room trade request by @aronson in [#6489](https://github.com/rh-hideout/pokeemerald-expansion/pull/6489)
## 🐉 Pokémon 🐉
### Fixed
* Fixed Zacian/Zamazenta learning Iron head while already knowing by @hedara90, @wiz1989 reported the issue, in [#6365](https://github.com/rh-hideout/pokeemerald-expansion/pull/6365)
* Fix roamers having 0 hp on repeat encounters by @danaYatsuta in [#6366](https://github.com/rh-hideout/pokeemerald-expansion/pull/6366)
* Fixed unfusion of traded materials by @hedara90, @mrgriffin found the issue, in [#6415](https://github.com/rh-hideout/pokeemerald-expansion/pull/6415)
## ⚔️ Battle General ⚔️
### Changed
* Fix Red Card overwriting gBattlerAttacker by @ghoulslash in [#6376](https://github.com/rh-hideout/pokeemerald-expansion/pull/6376)
* Fixes Magic Coat message when move is bounced back by @AlexOn1ine in [#6419](https://github.com/rh-hideout/pokeemerald-expansion/pull/6419)
### Fixed
* Reorder Dancer activation by @PhallenTree in [#6379](https://github.com/rh-hideout/pokeemerald-expansion/pull/6379)
* Fixes crash damage move against absorbing abilities by @AlexOn1ine in [#6361](https://github.com/rh-hideout/pokeemerald-expansion/pull/6361)
* Fixes gimmick icon flying off the screen by @PhallenTree in [#6401](https://github.com/rh-hideout/pokeemerald-expansion/pull/6401)
* Fixed Parental Bond with two-turn attacks by @hedara90 in [#6408](https://github.com/rh-hideout/pokeemerald-expansion/pull/6408)
* Wrong argument usage in `CalcCritChanceStage` by @AlexOn1ine in [#6429](https://github.com/rh-hideout/pokeemerald-expansion/pull/6429)
* Fixes Neutralizing Gas Exits, Weather Abilities and Terrain Effects order by @PhallenTree in [#6435](https://github.com/rh-hideout/pokeemerald-expansion/pull/6435)
* Fixes hazards not respecting tera types by @AlexOn1ine in [#6431](https://github.com/rh-hideout/pokeemerald-expansion/pull/6431)
* Fixes dynamax reversion when ejected out + anim fix by @AlexOn1ine in [#6416](https://github.com/rh-hideout/pokeemerald-expansion/pull/6416)
* Fixes negative priority being blocked by dazzling abilities by @AlexOn1ine in [#6433](https://github.com/rh-hideout/pokeemerald-expansion/pull/6433)
* Fixes Cotton Spore failing if one of the targets blocks it by @AlexOn1ine in [#6418](https://github.com/rh-hideout/pokeemerald-expansion/pull/6418)
* Fixes Toxic Spikes Absorbed message by @PhallenTree in [#6448](https://github.com/rh-hideout/pokeemerald-expansion/pull/6448)
* Fixes Cheek Pouch mutating damage by @AlexOn1ine in [#6466](https://github.com/rh-hideout/pokeemerald-expansion/pull/6466)
* Fixes choice move locking at the wrong time by @AlexOn1ine in [#6467](https://github.com/rh-hideout/pokeemerald-expansion/pull/6467)
* Fixes protective pads against Protects secondary effects by @AlexOn1ine in [#6474](https://github.com/rh-hideout/pokeemerald-expansion/pull/6474)
* Fixes clear body type effect and clear amulet against protect effects by @AlexOn1ine in [#6482](https://github.com/rh-hideout/pokeemerald-expansion/pull/6482)
* Fixes Aftermath ability popup message by @AlexOn1ine in [#6491](https://github.com/rh-hideout/pokeemerald-expansion/pull/6491)
* Fixes Emergency Exit and Eject Pack by @AlexOn1ine in [#6459](https://github.com/rh-hideout/pokeemerald-expansion/pull/6459)
* Fixes Hospitality not being blocked by Heal Block by @AlexOn1ine in [#6494](https://github.com/rh-hideout/pokeemerald-expansion/pull/6494)
* Fixes timesGotHit not increasing on forced switch out by @AlexOn1ine in [#6493](https://github.com/rh-hideout/pokeemerald-expansion/pull/6493)
* Fixes Destiny Bond against Dynamax no failing by @AlexOn1ine in [#6501](https://github.com/rh-hideout/pokeemerald-expansion/pull/6501)
## 🤹 Moves 🤹
### Fixed
* Fixed Ivy Cudgel types with type changes by @hedara90 in [#6369](https://github.com/rh-hideout/pokeemerald-expansion/pull/6369)
* Adds move description battle config by @AlexOn1ine in [#6364](https://github.com/rh-hideout/pokeemerald-expansion/pull/6364)
* Fix Jet Punch in isolated tests by @hedara90 in [#6461](https://github.com/rh-hideout/pokeemerald-expansion/pull/6461)
* Sucker punch vs struggle by @hedara90 in [#6475](https://github.com/rh-hideout/pokeemerald-expansion/pull/6475)
## 🤖 Battle AI 🤖
### Changed
* Update Battle Debug menu with new AI flags by @kittenchilly in [#6444](https://github.com/rh-hideout/pokeemerald-expansion/pull/6444)
### Fixed
* Fixed AI_FLAG_CHECK_VIABILITY changing the toxic counter in some cases by @hedara90, @iriv24 discovered the issue, in [#6402](https://github.com/rh-hideout/pokeemerald-expansion/pull/6402)
* Fix Focus Sash being considered in switch AI's hits to KO calcs by @Pawkkie in [#6436](https://github.com/rh-hideout/pokeemerald-expansion/pull/6436)
* AI gimmick check changed from checking trainer data to a BattleStruct field by @hedara90 in [#6478](https://github.com/rh-hideout/pokeemerald-expansion/pull/6478)
* Fix hit escape ace mon switching by @Pawkkie and @wiz1989, @AlexOn1ine in [#6498](https://github.com/rh-hideout/pokeemerald-expansion/pull/6498)
## 🧹 Other Cleanup 🧹
* Update AI_TryTo2HKO comment by @Pawkkie in [#6349](https://github.com/rh-hideout/pokeemerald-expansion/pull/6349)
* Fixing grammar of Berry Tree strings by @surskitty in [#6355](https://github.com/rh-hideout/pokeemerald-expansion/pull/6355)
- Berry trees berries are no longer erroneously plural.
* Move category test cleanup by @hedara90 in [#6447](https://github.com/rh-hideout/pokeemerald-expansion/pull/6447)
* Fixes Magic Coat message when move is bounced back by @AlexOn1ine in [#6419](https://github.com/rh-hideout/pokeemerald-expansion/pull/6419)
* Update Battle Debug menu with new AI flags by @kittenchilly in [#6444](https://github.com/rh-hideout/pokeemerald-expansion/pull/6444)
* Rename removelishtscreenreflect to removescreens by @AlexOn1ine in [#6495](https://github.com/rh-hideout/pokeemerald-expansion/pull/6495)
## 🧪 Test Runner 🧪
### Changed
* Fix Red Card overwriting gBattlerAttacker by @ghoulslash in [#6376](https://github.com/rh-hideout/pokeemerald-expansion/pull/6376)
* Move category test cleanup by @hedara90 in [#6447](https://github.com/rh-hideout/pokeemerald-expansion/pull/6447)
* Changed KNOWN_FAILING test by @hedara90 in [#6492](https://github.com/rh-hideout/pokeemerald-expansion/pull/6492)
### Fixed
* Fixes Known Failing Mold Breaker Sleep Clause test by @PhallenTree in [#6434](https://github.com/rh-hideout/pokeemerald-expansion/pull/6434)
* Made memory integrity checks run betweeen PARAMETRIZE runs by @hedara90 and @mrgriffin in [#6462](https://github.com/rh-hideout/pokeemerald-expansion/pull/6462)
## 📚 Documentation 📚
* Fixed a missing ) in trainers.party comment block. by @RubyRaven6 in [#6367](https://github.com/rh-hideout/pokeemerald-expansion/pull/6367)
* Update README.md for contest src link by @lwelyk in [#6375](https://github.com/rh-hideout/pokeemerald-expansion/pull/6375)
## New Contributors
* @RubyRaven6 made their first contribution in [#6367](https://github.com/rh-hideout/pokeemerald-expansion/pull/6367)
* @lwelyk made their first contribution in [#6375](https://github.com/rh-hideout/pokeemerald-expansion/pull/6375)
* @danaYatsuta made their first contribution in [#6366](https://github.com/rh-hideout/pokeemerald-expansion/pull/6366)
**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.11.0...expansion/1.11.1
<!--Last PR: 6501-->
<!--Used to keep track of the last PR merged in case new ones come in before the changelog is done.-->

View File

@ -0,0 +1,66 @@
# Document Purpose
This document is a guide for maintainers to account for all the reccomended steps before merging in a pull request.
<!-- Here's an optional markdown checklist version that you can post in your reviews. -->
<!-- https://files.catbox.moe/nqxvnl.md -->
# Checklist
## Is the branch's theoretical functionality in scope?
If you're not sure if a branch's functionality is [in scope](docs/team_procedures/scope.md), start a conversation on Discord to resolve.
## Does the branch successfully compile?
From `make clean`, the branch should locally compile.
## Do all CI tests pass?
Contributors are asked to make sure tests pass locally, but maintainers should at least wait for the CI to pass before merging.
## Have you verified that the functionality works in game without any problems?
If functionality cannot be verified with an automated test, proof of an in game test is required. Do not be afraid to reach out to the contributor or the community to make sure something works in game as it should.
## If the branch ports behavior from another Pokémon game, have you verified that the behavior functions as faithfully as possible?
We have always tried to make sure we can mimic the original functionality as closely as possible so as to avoid confusion with users and players. Do not be afraid to ask the contributor / community for proof if you cannot personally verify.
## If the branch is a popular feature within the community with an established feature branch, is this using that established branch as a base?
There are situations where this should and should not happen, and should be discussed with maintainers on a case by case basis.
## If this branch changes a function that is expected to be modified by users, is there a migration script?
Not everything needs a migration script - if you're unsure, start a discussion.
## Should new functionality introduced by this branch be gated behind a config?
We don't have a strict definition of when configs should be used, but you can start with
> Why SHOULDN'T this be a config?
## Are tests written for everything that can be tested?
If you're not sure if something CAN be tested, start a discussion. Some contributors may not be capable of writing tests - we should guide them in #expansion-tests to do so.
If any new tests are `KNOWN_FAILING`, issues should be opened describing each of the `KNOWN_FAILING` tests and our understanding of why they fail.
## Does the branch meet our [config philosophy](docs/styleguide#config-philosophy)?
## Does the branch meet our [saves philosophy](docs/styleguide#saves-philosophy)?
## Does the submitted code follow the [styleguide](docs/styleguide)?
This applies to code that comes from other branches or games.
## Is the pull request appropriately labeled?
Without labels, the CHANGELOG will not be properly formatted. For specifically the `bugfix` label, an additional label, detailing what area the bug exists in is required.
## Is `pokeemerald-expansion` free from a merge freeze?
Our [release schedule](docs/team_procedures/schedule.md) prevents us from merging Big Features and non-bugfixes within certain dates close to a release. Please use `/release` in the RHH Discord to clarify when these are occuring.
# Merging
When a feature has passed all of the items on the checklist, it is ready to be merged. From GitHub's interface, there are three different options for merging:
## Squash and merge
This should be used for all PRs _except_ when merging from either:
* a publicly available feature branch from by the community OR
* `upcoming`, `master` or `pret/pokeemerald`.
## Create a merge commit
When the branch uses a publicly available feature branch from by the community, use "Create a merge commit" to preserve history for users.
## Rebase and merge
We do not use this ever.

View File

@ -130,10 +130,9 @@ struct DisableStruct
u8 boosterEnergyActivates:1;
u8 roostActive:1;
u8 unburdenActive:1;
u8 startEmergencyExit:1;
u8 neutralizingGas:1;
u8 iceFaceActivationPrevention:1; // fixes hit escape move edge case
u8 padding:2;
u8 padding:3;
};
// Fully Cleared each turn after end turn effects are done. A few things are cleared before end turn effects
@ -197,8 +196,6 @@ struct SpecialStatus
{
s32 physicalDmg;
s32 specialDmg;
u8 physicalBattlerId;
u8 specialBattlerId;
u8 changedStatsBattlerId; // Battler that was responsible for the latest stat change. Can be self.
u8 statLowered:1;
u8 lightningRodRedirected:1;
@ -335,8 +332,9 @@ struct SwitchinCandidate
struct SimulatedDamage
{
s32 expected;
s32 minimum;
u16 minimum;
u16 median;
u16 maximum;
};
// Ai Data used when deciding which move to use, computed only once before each turn's start.
@ -627,7 +625,7 @@ struct BattlerState
u8 targetsDone[MAX_BATTLERS_COUNT];
u32 commandingDondozo:1;
u32 absentBattlerFlags:1;
u32 absent:1;
u32 focusPunchBattlers:1;
u32 multipleSwitchInBattlers:1;
u32 alreadyStatusedMoveAttempt:1; // For example when using Thunder Wave on an already paralyzed Pokémon.
@ -690,7 +688,6 @@ struct BattleStruct
u8 stateIdAfterSelScript[MAX_BATTLERS_COUNT];
u8 prevSelectedPartySlot;
u8 stringMoveType;
u8 absentBattlerFlags;
u8 palaceFlags; // First 4 bits are "is <= 50% HP and not asleep" for each battler, last 4 bits are selected moves to pass to AI
u8 field_93; // related to choosing pokemon?
u8 wallyBattleState;
@ -762,9 +759,6 @@ struct BattleStruct
u16 tracedAbility[MAX_BATTLERS_COUNT];
u16 hpBefore[MAX_BATTLERS_COUNT]; // Hp of battlers before using a move. For Berserk and Anger Shell.
struct Illusion illusion[MAX_BATTLERS_COUNT];
s32 aiFinalScore[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // AI, target, moves to make debugging easier
u8 aiMoveOrAction[MAX_BATTLERS_COUNT];
u8 aiChosenTarget[MAX_BATTLERS_COUNT];
u8 soulheartBattlerId;
u8 friskedBattler; // Frisk needs to identify 2 battlers in double battles.
u8 sameMoveTurns[MAX_BATTLERS_COUNT]; // For Metronome, number of times the same moves has been SUCCESFULLY used.
@ -812,8 +806,8 @@ struct BattleStruct
u32 stellarBoostFlags[NUM_BATTLE_SIDES]; // stored as a bitfield of flags for all types for each side
u8 monCausingSleepClause[NUM_BATTLE_SIDES]; // Stores which pokemon on a given side is causing Sleep Clause to be active as the mon's index in the party
u8 additionalEffectsCounter:4; // A counter for the additionalEffects applied by the current move in Cmd_setadditionaleffects
u8 redCardActivates:1;
u8 padding2:2; // padding in the middle so pursuit fields are together
u8 cheekPouchActivated:1;
u8 padding2:3;
u8 pursuitStoredSwitch; // Stored id for the Pursuit target's switch
s32 battlerExpReward;
u16 prevTurnSpecies[MAX_BATTLERS_COUNT]; // Stores species the AI has in play at start of turn
@ -828,12 +822,23 @@ struct BattleStruct
u8 printedStrongWindsWeakenedAttack:1;
u8 numSpreadTargets:2;
u8 bypassMoldBreakerChecks:1; // for ABILITYEFFECT_IMMUNITY
u8 padding3:1;
u8 noTargetPresent:1;
u8 usedEjectItem;
u8 usedMicleBerry;
struct MessageStatus slideMessageStatus;
u8 trainerSlideSpriteIds[MAX_BATTLERS_COUNT];
u8 embodyAspectBoost[NUM_BATTLE_SIDES];
u16 savedMove; // backup current move for mid-turn switching, e.g. Red Card
u16 opponentMonCanTera:6;
u16 opponentMonCanDynamax:6;
u16 padding:4;
};
struct AiBattleData
{
s32 finalScore[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // AI, target, moves to make debugging easier
u8 moveOrAction[MAX_BATTLERS_COUNT];
u8 chosenTarget[MAX_BATTLERS_COUNT];
};
// The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider,
@ -1151,6 +1156,7 @@ extern u8 gSentPokesToOpponent[2];
extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
extern struct BattleScripting gBattleScripting;
extern struct BattleStruct *gBattleStruct;
extern struct AiBattleData *gAiBattleData;
extern u8 *gLinkBattleSendBuffer;
extern u8 *gLinkBattleRecvBuffer;
extern struct BattleResources *gBattleResources;

View File

@ -15,6 +15,12 @@ enum DamageRollType
DMG_ROLL_HIGHEST,
};
enum DamageCalcContext
{
AI_DEFENDING,
AI_ATTACKING,
};
enum AIPivot
{
DONT_PIVOT,
@ -22,10 +28,17 @@ enum AIPivot
SHOULD_PIVOT,
};
static inline bool32 IsMoveUnusable(u32 moveIndex, u32 move, u32 moveLimitations)
{
return move == MOVE_NONE
|| move == MOVE_UNAVAILABLE
|| moveLimitations & 1u << moveIndex;
}
bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move);
bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 move);
bool32 AI_RandLessThan(u32 val);
u32 GetDmgRollType(u32 battlerAtk);
u32 AI_GetDamage(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcContext calcContext, struct AiLogicData *aiData);
bool32 IsAiVsAiBattle(void);
bool32 BattlerHasAi(u32 battlerId);
bool32 IsAiBattlerAware(u32 battlerId);
@ -46,12 +59,13 @@ u32 GetTotalBaseStat(u32 species);
bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler);
bool32 AI_BattlerAtMaxHp(u32 battler);
u32 GetHealthPercentage(u32 battler);
bool32 IsBattlerTrapped(u32 battler, bool32 switching);
bool32 AI_CanBattlerEscape(u32 battler);
bool32 IsBattlerTrapped(u32 battlerAtk, u32 battlerDef);
s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler2, u32 moveConsidered);
bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk);
u32 NoOfHitsForTargetToFaintAI(u32 battlerDef, u32 battlerAtk);
u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef);
u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget);
u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext);
u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget, enum DamageCalcContext calcContext);
bool32 CanTargetMoveFaintAi(u32 move, u32 battlerDef, u32 battlerAtk, u32 nHits);
bool32 CanTargetFaintAiWithMod(u32 battlerDef, u32 battlerAtk, s32 hpMod, s32 dmgMod);
s32 AI_DecideKnownAbilityForTurn(u32 battlerId);
@ -59,7 +73,8 @@ u32 AI_DecideHoldEffectForTurn(u32 battlerId);
bool32 DoesBattlerIgnoreAbilityChecks(u32 battlerAtk, u32 atkAbility, u32 move);
u32 AI_GetWeather(void);
bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits);
bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index, u32 numHits);
bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index, enum DamageCalcContext calcContext);
bool32 CanIndexMoveGuaranteeFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index);
bool32 HasDamagingMove(u32 battlerId);
bool32 HasDamagingMoveOfType(u32 battlerId, u32 type);
u32 GetBattlerSecondaryDamage(u32 battlerId);
@ -69,7 +84,7 @@ bool32 ShouldTryOHKO(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbil
bool32 ShouldUseRecoilMove(u32 battlerAtk, u32 battlerDef, u32 recoilDmg, u32 moveIndex);
u32 GetBattlerSideSpeedAverage(u32 battler);
bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage);
bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent);
bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent, enum DamageCalcContext calcContext);
bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, u32 moveEffect);
enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 moveIndex);
bool32 IsRecycleEncouragedItem(u32 item);
@ -84,7 +99,7 @@ u32 AI_GetBattlerAbility(u32 battler);
// stat stage checks
bool32 AnyStatIsRaised(u32 battlerId);
bool32 ShouldLowerStat(u32 battlerAtk, u32 battlerDef, u32 battlerAbility, u32 stat);
bool32 ShouldLowerStat(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 stat);
bool32 BattlerStatCanRise(u32 battler, u32 battlerAbility, u32 stat);
bool32 AreBattlersStatsMaxed(u32 battler);
u32 CountPositiveStatStages(u32 battlerId);
@ -101,13 +116,13 @@ bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility);
bool32 IsAffectedByPowder(u32 battler, u32 ability, u32 holdEffect);
bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category);
s32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo);
struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType);
struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType);
struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower);
struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, u32 weather);
bool32 AI_IsDamagedByRecoil(u32 battler);
u32 GetNoOfHitsToKO(u32 dmg, s32 hp);
u32 GetNoOfHitsToKOBattlerDmg(u32 dmg, u32 battlerDef);
u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex);
u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef);
u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcContext calcContext);
u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext);
uq4_12_t AI_GetMoveEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef);
u16 *GetMovesArray(u32 battler);
bool32 IsConfusionMoveEffect(u32 moveEffect);
@ -210,7 +225,7 @@ void IncreaseSleepScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score);
void IncreaseConfusionScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score);
void IncreaseFrostbiteScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score);
s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, bool32 isPartyMonAttacker, enum DamageRollType rollType);
s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, bool32 isPartyMonAttacker);
u32 AI_WhoStrikesFirstPartyMon(u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, u32 moveConsidered);
s32 AI_TryToClearStats(u32 battlerAtk, u32 battlerDef, bool32 isDoubleBattle);
bool32 AI_ShouldCopyStatChanges(u32 battlerAtk, u32 battlerDef);

View File

@ -83,6 +83,8 @@
#define B_TXT_TRAINER2_NAME_WITH_CLASS 0x43
#define B_TXT_PARTNER_NAME_WITH_CLASS 0x44
#define B_TXT_ATK_TRAINER_NAME_WITH_CLASS 0x45
#define B_TXT_SCR_TEAM1 0x46
#define B_TXT_SCR_TEAM2 0x47
#define B_BUFF_STRING 0
#define B_BUFF_NUMBER 1

View File

@ -23,6 +23,7 @@ struct PickupItem
};
s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk);
s32 CalcCritChanceStageGen1(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk);
s32 GetCritHitOdds(s32 critChanceIndex);
u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect);
u8 GetBattlerTurnOrderNum(u8 battlerId);
@ -57,6 +58,7 @@ u8 GetFirstFaintedPartyIndex(u8 battlerId);
bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler);
void SaveBattlerTarget(u32 battler);
void SaveBattlerAttacker(u32 battler);
bool32 CanBurnHitThaw(u16 move);
extern void (* const gBattleScriptingCommandsTable[])(void);
extern const struct StatFractions gAccuracyStageRatios[];

View File

@ -384,9 +384,7 @@ extern const u8 BattleScript_FriskMsg[];
extern const u8 BattleScript_FriskMsgWithPopup[];
extern const u8 BattleScript_MoodyActivates[];
extern const u8 BattleScript_EmergencyExit[];
extern const u8 BattleScript_EmergencyExitNoPopUp[];
extern const u8 BattleScript_EmergencyExitWild[];
extern const u8 BattleScript_EmergencyExitWildNoPopUp[];
extern const u8 BattleScript_EmergencyExitEnd2[];
extern const u8 BattleScript_EmergencyExitWildEnd2[];
extern const u8 BattleScript_CheekPouchActivates[];
@ -445,8 +443,6 @@ extern const u8 BattleScript_WanderingSpiritActivates[];
extern const u8 BattleScript_MirrorArmorReflect[];
extern const u8 BattleScript_GooeyActivates[];
extern const u8 BattleScript_PastelVeilActivates[];
extern const u8 BattleScript_MimicryActivatesEnd3[];
extern const u8 BattleScript_ApplyMimicry[];
extern const u8 BattleScript_AttackerFormChangeEnd3NoPopup[];
extern const u8 BattleScript_AttackerFormChangeWithStringEnd3NoPopup[];
extern const u8 BattleScript_AttackerFormChangeMoveEffect[];
@ -482,7 +478,7 @@ extern const u8 BattleScript_CommanderActivates[];
extern const u8 BattleScript_HospitalityActivates[];
extern const u8 BattleScript_ToxicDebrisActivates[];
extern const u8 BattleScript_EarthEaterActivates[];
extern const u8 BattleScript_MimicryActivates_End3[];
extern const u8 BattleScript_MimicryActivates[];
extern const u8 BattleScript_IceFaceNullsDamage[];
extern const u8 BattleScript_BattlerFormChangeWithStringEnd3[];
extern const u8 BattleScript_DampPreventsAftermath[];
@ -562,6 +558,7 @@ extern const u8 BattleScript_RemoveGenericType[];
// dynamax and max raids
extern const u8 BattleScript_DynamaxBegins[];
extern const u8 BattleScript_DynamaxEnds[];
extern const u8 BattleScript_DynamaxEnds_Ret[];
extern const u8 BattleScript_MoveBlockedByDynamax[];
// Battle move scripts
@ -599,7 +596,7 @@ extern const u8 BattleScript_EffectOHKO[];
extern const u8 BattleScript_EffectSuperFang[];
extern const u8 BattleScript_EffectFixedDamageArg[];
extern const u8 BattleScript_EffectHealBlock[];
extern const u8 BattleScript_EffectRecoilIfMiss[];
extern const u8 BattleScript_RecoilIfMiss[];
extern const u8 BattleScript_EffectMist[];
extern const u8 BattleScript_EffectFocusEnergy[];
extern const u8 BattleScript_EffectConfuse[];
@ -827,7 +824,6 @@ extern const u8 BattleScript_MoveEffectHaze[];
extern const u8 BattleScript_MoveEffectIonDeluge[];
extern const u8 BattleScript_EffectHyperspaceFury[];
extern const u8 BattleScript_EffectAuraWheel[];
extern const u8 BattleScript_EffectDynamicCategory[];
extern const u8 BattleScript_EffectNoRetreat[];
extern const u8 BattleScript_EffectTarShot[];
extern const u8 BattleScript_EffectPoltergeist[];

View File

@ -97,6 +97,10 @@ enum ItemEffect
#define DMG_ROLL_PERCENT_LO 85
#define DMG_ROLL_PERCENT_HI 100
// Crit chance exceptions
#define CRITICAL_HIT_BLOCKED -1
#define CRITICAL_HIT_ALWAYS -2
// for Natural Gift and Fling
struct TypePower
{
@ -130,7 +134,6 @@ enum
CANCELLER_STANCE_CHANGE_2,
CANCELLER_WEATHER_PRIMAL,
CANCELLER_DYNAMAX_BLOCKED,
CANCELLER_POWDER_MOVE,
CANCELLER_POWDER_STATUS,
CANCELLER_PROTEAN,
CANCELLER_PSYCHIC_TERRAIN,
@ -208,6 +211,7 @@ u8 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check);
bool32 AreAllMovesUnusable(u32 battler);
u8 GetImprisonedMovesCount(u32 battler, u16 move);
s32 GetDrainedBigRootHp(u32 battler, s32 hp);
bool32 IsMagicGuardProtected(u32 battler, u32 ability);
u32 DoEndTurnEffects(void);
bool32 HandleFaintedMonActions(void);
void TryClearRageAndFuryCutter(void);
@ -250,6 +254,7 @@ u32 CalcFuryCutterBasePower(u32 basePower, u32 furyCutterCounter);
s32 CalculateMoveDamage(struct DamageCalculationData *damageCalcData, u32 fixedBasePower);
s32 CalculateMoveDamageVars(struct DamageCalculationData *damageCalcData, u32 fixedBasePower, uq4_12_t typeEffectivenessModifier,
u32 weather, u32 holdEffectAtk, u32 holdEffectDef, u32 abilityAtk, u32 abilityDef);
s32 ApplyModifiersAfterDmgRoll(s32 dmg, struct DamageCalculationData *damageCalcData, uq4_12_t typeEffectivenessModifier, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk, u32 holdEffectDef);
uq4_12_t CalcTypeEffectivenessMultiplier(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, u32 defAbility, bool32 recordAbilities);
uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef);
uq4_12_t GetTypeModifier(u32 atkType, u32 defType);
@ -273,7 +278,8 @@ struct Pokemon *GetIllusionMonPtr(u32 battler);
void ClearIllusionMon(u32 battler);
bool32 SetIllusionMon(struct Pokemon *mon, u32 battler);
bool32 ShouldGetStatBadgeBoost(u16 flagId, u32 battler);
u8 GetBattleMoveCategory(u32 moveId);
u32 GetBattleMoveCategory(u32 move);
void SetDynamicMoveCategory(u32 battlerAtk, u32 battlerDef, u32 move);
bool32 CanFling(u32 battler);
bool32 IsTelekinesisBannedSpecies(u16 species);
bool32 IsHealBlockPreventingMove(u32 battler, u32 move);
@ -304,7 +310,6 @@ bool32 CanTargetBattler(u32 battlerAtk, u32 battlerDef, u16 move);
void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon);
void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon);
void RecalcBattlerStats(u32 battler, struct Pokemon *mon, bool32 isDynamaxing);
bool32 IsAlly(u32 battlerAtk, u32 battlerDef);
bool32 IsGen6ExpShareEnabled(void);
bool32 MoveHasAdditionalEffect(u32 move, u32 moveEffect);
bool32 MoveHasAdditionalEffectWithChance(u32 move, u32 moveEffect, u32 chance);
@ -351,5 +356,8 @@ bool32 IsPursuitTargetSet(void);
void ClearPursuitValuesIfSet(u32 battler);
void ClearPursuitValues(void);
bool32 HasWeatherEffect(void);
bool32 IsMovePowderBlocked(u32 battlerAtk, u32 battlerDef, u32 move);
bool32 EmergencyExitCanBeTriggered(u32 battler);
u32 RestoreWhiteHerbStats(u32 battler);
#endif // GUARD_BATTLE_UTIL_H

View File

@ -44,9 +44,16 @@
#define SHOULD_SWITCH_REGENERATOR_PERCENTAGE 50
#define SHOULD_SWITCH_REGENERATOR_STATS_RAISED_PERCENTAGE 20
// AI switchin considerations
#define ALL_MOVES_BAD_STATUS_MOVES_BAD FALSE // If the AI has no moves that affect the target, ShouldSwitchIfAllMovesBad can prompt a switch. Enabling this config will ignore status moves that can affect the target when making this decision.
// AI held item-based move scoring
#define LOW_ACCURACY_THRESHOLD 75 // Moves with accuracy equal OR below this value are considered low accuracy
// AI damage calc considerations
#define RISKY_AI_CRIT_STAGE_THRESHOLD 2 // Stat stages at which Risky will assume it gets a crit
#define RISKY_AI_CRIT_THRESHOLD_GEN_1 128 // "Stat stage" at which Risky will assume it gets a crit with gen 1 mechanics (this translates to an X / 255 % crit threshold)
// AI prediction chances
#define PREDICT_SWITCH_CHANCE 50

View File

@ -9,7 +9,6 @@
#define B_MULTI_HIT_CHANCE GEN_LATEST // In Gen5+, multi-hit moves have different %. See SetRandomMultiHitCounter for values.
#define B_WHITEOUT_MONEY GEN_LATEST // In Gen4+, the amount of money lost by losing a battle is determined by the amount of badges earned. Previously, it would cut the current money by half. (While this change was also in FRLG, for the sake of simplicity, setting this to GEN_3 will result in RSE behavior.)
#define B_LIGHT_BALL_ATTACK_BOOST GEN_LATEST // In Gen4+, Light Ball doubles the power of physical moves in addition to special moves.
#define B_SANDSTORM_SPDEF_BOOST GEN_LATEST // In Gen4+, Sandstorm weather multiplies the Sp. Defense of Rock-type Pokémon by x1.5.
// Experience settings
#define B_EXP_CATCH GEN_LATEST // In Gen6+, Pokémon get experience from catching.
@ -130,7 +129,6 @@
#define B_PURSUIT_TARGET GEN_LATEST // In Gen4+, Pursuit attacks a switching opponent even if they weren't targeting them. Before Gen4, Pursuit only attacks a switching opponent that it originally targeted.
// Ability settings
#define B_ABILITY_WEATHER GEN_LATEST // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move or a different weather-affecting ability.
#define B_GALE_WINGS GEN_LATEST // In Gen7+ requires full HP to trigger.
#define B_STANCE_CHANGE_FAIL GEN_LATEST // In Gen7+, Stance Change fails if the Pokémon is unable to use a move because of confusion, paralysis, etc. In Gen6, it doesn't.
#define B_SHADOW_TAG_ESCAPE GEN_LATEST // In Gen4+, if both sides have a Pokémon with Shadow Tag, all battlers can escape. Before, neither side could escape this situation.
@ -147,7 +145,6 @@
#define B_REDIRECT_ABILITY_IMMUNITY GEN_LATEST // In Gen5+, Pokémon with Lightning Rod/Storm Drain become immune to Electric/Water-type moves and increase their Sp. Attack by 1 stage on top of the redirecting effect.
#define B_REDIRECT_ABILITY_ALLIES GEN_LATEST // In Gen4+, Lightning Rod/Storm Drain redirect ally's moves as well.
#define B_LEAF_GUARD_PREVENTS_REST GEN_LATEST // In Gen5+, Leaf Guard prevents the use of Rest in harsh sunlight.
#define B_SNOW_WARNING GEN_LATEST // In Gen9+, Snow Warning will summon snow instead of hail.
#define B_TRANSISTOR_BOOST GEN_LATEST // In Gen9+, Transistor will only boost Electric-type moves by 1.3x as opposed to 1.5x.
#define B_ILLUMINATE_EFFECT GEN_LATEST // In Gen9+, Illuminate prevents accuracy reductions and ignores the target's evasion.
#define B_WEAK_ARMOR_SPEED GEN_LATEST // In Gen7+, Weak Armor raises Speed by 2 stages instead of 1 when hit by a physical move.
@ -221,6 +218,22 @@
// Ingame partner flag
#define B_SHOW_PARTNER_TARGET FALSE // Shows the battler partner will target.
// Move description menu
#define B_SHOW_MOVE_DESCRIPTION TRUE // Shows move information in battler
// Weather settings
// Search for 'rain', 'sunny day', and 'hail' for move-specific or species-specific weather interactions.
#define B_ICE_WEATHER_BOTH 0
#define B_ICE_WEATHER_HAIL 1
#define B_ICE_WEATHER_SNOW 2
#define B_ABILITY_WEATHER GEN_LATEST // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move or a different weather-affecting ability.
#define B_SANDSTORM_SPDEF_BOOST GEN_LATEST // In Gen4+, Sandstorm weather multiplies the Sp. Defense of Rock-type Pokémon by x1.5.
#define B_OVERWORLD_FOG GEN_LATEST // In Gen8+, overworld Fog summons Misty Terrain in battle. In Gen4 only, overworld Fog summons the unique fog weather condition in battle.
#define B_OVERWORLD_SNOW GEN_LATEST // In Gen9+, overworld Snow will summon snow instead of hail in battle.
#define B_SNOW_WARNING GEN_LATEST // In Gen9+, Snow Warning will summon snow instead of hail.
#define B_PREFERRED_ICE_WEATHER B_ICE_WEATHER_BOTH // Toggles Hail move effects to Snow and vice versa.
// Terrain settings
#define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades.
#define B_THUNDERSTORM_TERRAIN TRUE // If TRUE, overworld Thunderstorm generates Rain and Electric Terrain as in Gen 8.
@ -243,11 +256,16 @@
#define B_WAIT_TIME_MULTIPLIER 16 // This determines how long text pauses in battle last. Vanilla is 16. Lower values result in faster battles.
#define B_QUICK_MOVE_CURSOR_TO_RUN FALSE // If set to TRUE, pushing B in the battle options against a wild encounter will move the cursor to the run option
#define B_MOVE_DESCRIPTION_BUTTON L_BUTTON // If set to a button other than B_LAST_USED_BALL_BUTTON, pressing this button will open the move description menu
#define B_SHOW_USELESS_Z_MOVE_INFO FALSE // If set to TRUE, Z-moves without additional effects like newer gen status moves will say "no additional effect"
#define B_ANIMATE_MON_AFTER_KO TRUE // If set to TRUE, if a Pokémon on the opposite site faints, the non-fainted Pokemon will display a victory animation.
#define B_SHOW_DYNAMAX_MESSAGE FALSE // If set to TRUE, an additional battle message is shown after completing Dynamaxing/Gigantamaxing.
// Catching settings
#define B_SEMI_INVULNERABLE_CATCH GEN_LATEST // In Gen4+, you cannot throw a ball against a Pokemon that is in a semi-invulnerable state (dig/fly/etc)
#define B_CATCHING_CHARM_BOOST 20 // % boost in Critical Capture odds if player has the Catching Charm.
#define B_CRITICAL_CAPTURE TRUE // If set to TRUE, Critical Capture will be enabled.
#define B_SEMI_INVULNERABLE_CATCH GEN_LATEST // In Gen4+, you cannot throw a ball against a Pokemon that is in a semi-invulnerable state (dig/fly/etc)
#define B_CATCHING_CHARM_BOOST 20 // % boost in Critical Capture odds if player has the Catching Charm.
#define B_CRITICAL_CAPTURE TRUE // If set to TRUE, Critical Capture will be enabled.
#define B_CRITICAL_CAPTURE_LOCAL_DEX TRUE // If set to FALSE, Critical Capture % is based off of the National Pokedex estimated by enabled generations.
#define B_LAST_USED_BALL TRUE // If TRUE, the "last used ball" feature from Gen 7 will be implemented
#define B_LAST_USED_BALL_BUTTON R_BUTTON // If last used ball is implemented, this button (or button combo) will trigger throwing the last used ball.
#define B_LAST_USED_BALL_CYCLE TRUE // If TRUE, then holding B_LAST_USED_BALL_BUTTON while pressing the D-Pad cycles through the balls
@ -265,12 +283,15 @@
#define B_TRAINER_MON_RANDOM_ABILITY FALSE // If this is set to TRUE a random legal ability will be generated for a trainer mon
#define B_OBEDIENCE_MECHANICS GEN_LATEST // In PLA+ (here Gen8+), obedience restrictions also apply to non-outsider Pokémon, albeit based on their level met rather than actual level
#define B_USE_FROSTBITE FALSE // In PLA, Frostbite replaces Freeze. Enabling this flag does the same here. Moves can still be cherry-picked to either Freeze or Frostbite. Freeze-Dry, Secret Power & Tri Attack depend on this config.
#define B_OVERWORLD_SNOW GEN_LATEST // In Gen9+, overworld Snow will summon snow instead of hail in battle.
#define B_OVERWORLD_FOG GEN_LATEST // In Gen8+, overworld Fog summons Misty Terrain in battle. In Gen4 only, overworld Fog summons the unique fog weather condition in battle.
#define B_TOXIC_REVERSAL GEN_LATEST // In Gen5+, bad poison will change to regular poison at the end of battles.
#define B_TRY_CATCH_TRAINER_BALL GEN_LATEST // In Gen4+, trying to catch a Trainer's Pokémon does not consume the Poké Ball.
#define B_SLEEP_CLAUSE FALSE // Enables Sleep Clause all the time in every case, overriding B_FLAG_SLEEP_CLAUSE. Use that for modularity.
#define NUM_BEEPS_GEN_LATEST 4 // Loops 4 times
#define NUM_BEEPS_GEN_3 -1 // Loops infinitely
#define NUM_BEEPS_OFF 0 // Doesn't play at all
#define B_NUM_LOW_HEALTH_BEEPS NUM_BEEPS_GEN_LATEST // This controls the number of times the "low health" beep will loop. Setting this value to NUM_BEEPS_OFF will disable the beep, while NUM_BEEPS_GEN_3 will loop infinitely. You can set this to any number you want, the defines listed are just for ease of use.
// Animation Settings
#define B_NEW_SWORD_PARTICLE FALSE // If set to TRUE, it updates Swords Dance's particle.
#define B_NEW_LEECH_SEED_PARTICLE FALSE // If set to TRUE, it updates Leech Seed's animation particle.

View File

@ -1137,4 +1137,11 @@
#undef B_FLAG_SLEEP_CLAUSE
#define B_FLAG_SLEEP_CLAUSE TESTING_FLAG_SLEEP_CLAUSE
// Move animation testing
#define T_SHOULD_RUN_MOVE_ANIM FALSE // If TRUE, enables the move animation tests, these are very computationally heavy and takes a long time to run.
#define ANIM_TEST_START_MOVE 1 // First move to test
#define ANIM_TEST_END_MOVE MOVES_COUNT-1 // Last move to test
#endif // GUARD_CONFIG_TEST_H

View File

@ -352,6 +352,7 @@ enum {
EFFECT_ORDER_UP,
EFFECT_RAPID_SPIN,
EFFECT_SPECTRAL_THIEF,
EFFECT_RECOIL,
NUM_BATTLE_MOVE_EFFECTS,
};

View File

@ -219,13 +219,11 @@ enum CmdVarious
// Cmd_manipulatedamage
#define DMG_CHANGE_SIGN 1
#define DMG_RECOIL_FROM_MISS 2
#define DMG_DOUBLED 3
#define DMG_1_8_TARGET_HP 4
#define DMG_FULL_ATTACKER_HP 5
#define DMG_CURR_ATTACKER_HP 6
#define DMG_BIG_ROOT 7
#define DMG_RECOIL_FROM_IMMUNE 8 // Used to calculate recoil for the Gen 4 version of Jump Kick
#define DMG_DOUBLED 2
#define DMG_1_8_TARGET_HP 3
#define DMG_FULL_ATTACKER_HP 4
#define DMG_CURR_ATTACKER_HP 5
#define DMG_BIG_ROOT 6
// Cmd_jumpifcantswitch
#define SWITCH_IGNORE_ESCAPE_PREVENTION (1 << 7)
@ -273,9 +271,9 @@ enum MoveEndEffects
MOVEEND_ITEM_EFFECTS_TARGET,
MOVEEND_MOVE_EFFECTS2,
MOVEEND_ITEM_EFFECTS_ALL,
MOVEEND_SYMBIOSIS,
MOVEEND_HIT_SWITCH_TARGET,
MOVEEND_KINGSROCK, // These item effects will occur each strike of a multi-hit move
MOVEEND_NUM_HITS,
MOVEEND_SUBSTITUTE,
MOVEEND_SKY_DROP_CONFUSE,
MOVEEND_UPDATE_LAST_MOVES,
@ -287,19 +285,19 @@ enum MoveEndEffects
MOVEEND_RAPID_SPIN,
MOVEEND_ITEM_EFFECTS_ATTACKER,
MOVEEND_MAGICIAN, // Occurs after final multi-hit strike, and after other items/abilities would activate
MOVEEND_SHEER_FORCE, // If move is Sheer Force affected, skip until Eject Pack
MOVEEND_RED_CARD, // Red Card triggers before Eject Pack
MOVEEND_EJECT_ITEMS,
MOVEEND_WHITE_HERB,
MOVEEND_EJECT_BUTTON,
MOVEEND_LIFEORB_SHELLBELL, // Includes shell bell, throat spray, etc
MOVEEND_CHANGED_ITEMS,
MOVEEND_PICKPOCKET,
MOVEEND_DANCER,
MOVEEND_EMERGENCY_EXIT,
MOVEEND_SYMBIOSIS,
MOVEEND_EJECT_PACK,
MOVEEND_OPPORTUNIST, // Occurs after other stat change items/abilities to try and copy the boosts
MOVEEND_PICKPOCKET,
MOVEEND_WHITE_HERB,
MOVEEND_CHANGED_ITEMS,
MOVEEND_SAME_MOVE_TURNS,
MOVEEND_SET_EVOLUTION_TRACKER,
MOVEEND_CLEAR_BITS,
MOVEEND_DANCER,
MOVEEND_PURSUIT_NEXT_ACTION,
MOVEEND_COUNT,
};

View File

@ -729,8 +729,12 @@
#define STRINGID_ITDOESNTAFFECTTWOFOES 727
#define STRINGID_SENDCAUGHTMONPARTYORBOX 728
#define STRINGID_PKMNSENTTOPCAFTERCATCH 729
#define STRINGID_PKMNDYNAMAXED 730
#define STRINGID_PKMNGIGANTAMAXED 731
#define STRINGID_TIMETODYNAMAX 732
#define STRINGID_TIMETOGIGANTAMAX 733
#define BATTLESTRINGS_COUNT 730
#define BATTLESTRINGS_COUNT 734
// This is the string id that gBattleStringsTable starts with.
// String ids before this (e.g. STRINGID_INTROMSG) are not in the table,

View File

@ -251,6 +251,10 @@
#define MOVEMENT_ACTION_RUN_UP_SLOW 0xA3
#define MOVEMENT_ACTION_RUN_LEFT_SLOW 0xA4
#define MOVEMENT_ACTION_RUN_RIGHT_SLOW 0xA5
#define MOVEMENT_ACTION_WALK_SLOW_STAIRS_DOWN 0xA6
#define MOVEMENT_ACTION_WALK_SLOW_STAIRS_UP 0xA7
#define MOVEMENT_ACTION_WALK_SLOW_STAIRS_LEFT 0xA8
#define MOVEMENT_ACTION_WALK_SLOW_STAIRS_RIGHT 0xA9
#define MOVEMENT_ACTION_STEP_END 0xFE
#define MOVEMENT_ACTION_NONE 0xFF

View File

@ -1,7 +1,7 @@
#ifndef GUARD_CONSTANTS_EXPANSION_H
#define GUARD_CONSTANTS_EXPANSION_H
// Last version: 1.11.0
// Last version: 1.11.1
#define EXPANSION_VERSION_MAJOR 1
#define EXPANSION_VERSION_MINOR 12
#define EXPANSION_VERSION_PATCH 0

View File

@ -11,6 +11,7 @@ enum GenConfigTag
GEN_CONFIG_MULTI_HIT_CHANCE,
GEN_CONFIG_GALE_WINGS,
GEN_CONFIG_HEAL_BELL_SOUNDPROOF,
GEN_CONFIG_TELEPORT_BEHAVIOR,
GEN_CONFIG_COUNT
};

View File

@ -313,6 +313,14 @@ enum EvolutionMode {
EVO_MODE_BATTLE_ONLY, // This mode is only used in battles to support Tandemaus' unique requirement
};
enum PokemonJumpType{
PKMN_JUMP_TYPE_NONE, // Not allowed in Pokémon Jump
PKMN_JUMP_TYPE_NORMAL,
PKMN_JUMP_TYPE_FAST,
PKMN_JUMP_TYPE_SLOW,
};
#define MON_PIC_WIDTH 64
#define MON_PIC_HEIGHT 64
#define MON_PIC_SIZE (MON_PIC_WIDTH * MON_PIC_HEIGHT / 2)

View File

@ -66,12 +66,12 @@
void EndDexNavSearch(u8 taskId);
void Task_OpenDexNavFromStartMenu(u8 taskId);
bool8 TryStartDexNavSearch(void);
void TryIncrementSpeciesSearchLevel(u16 dexNum);
void TryIncrementSpeciesSearchLevel(void);
void ResetDexNavSearch(void);
bool8 TryFindHiddenPokemon(void);
u32 CalculateDexNavShinyRolls(void);
void IncrementDexNavChain(void);
extern bool8 gDexNavBattle;
extern u16 gDexNavSpecies;
#endif // GUARD_DEXNAV_H

View File

@ -222,6 +222,7 @@ void ObjectEventMoveDestCoords(struct ObjectEvent *objEvent, u32 direction, s16
u8 AddCameraObject(u8 linkedSpriteId);
void UpdateObjectEventsForCameraUpdate(s16 x, s16 y);
u8 GetWalkSlowMovementAction(u32);
u8 GetWalkSlowStairsMovementAction(u32);
u8 GetJumpMovementAction(u32);
u8 ElevationToPriority(u8 elevation);
void ObjectEventUpdateElevation(struct ObjectEvent *objEvent, struct Sprite *);

View File

@ -14,6 +14,7 @@ static const u8 sGenerationalChanges[GEN_CONFIG_COUNT] =
[GEN_CONFIG_MULTI_HIT_CHANCE] = B_MULTI_HIT_CHANCE,
[GEN_CONFIG_GALE_WINGS] = B_GALE_WINGS,
[GEN_CONFIG_HEAL_BELL_SOUNDPROOF] = B_HEAL_BELL_SOUNDPROOF,
[GEN_CONFIG_TELEPORT_BEHAVIOR] = B_TELEPORT_BEHAVIOR,
};
#if TESTING

View File

@ -1132,4 +1132,8 @@ struct MapPosition
s8 elevation;
};
#if T_SHOULD_RUN_MOVE_ANIM
extern bool32 gLoadFail;
#endif // T_SHOULD_RUN_MOVE_ANIM
#endif // GUARD_GLOBAL_H

View File

@ -306,7 +306,7 @@ extern const u16 gPokedexSearchMenu_Pal[];
extern const u32 gBerryCheck_Gfx[];
extern const u32 gBerryCheck_Pal[];
extern const u32 gBerryTag_Gfx[];
extern const u32 gBerryTag_Pal[];
extern const u32 gBerryTag_Tilemap[];
// rayquaza scene gfx
extern const u32 gRaySceneDuoFight_Groudon_Gfx[];

View File

@ -4,11 +4,11 @@
/* Check if VA_OPT_ is supported by the compiler. GCC's version should be at least 9.5*/
#define PP_THIRD_ARG(a,b,c,...) c
#define VA_OPT_SUPPORTED_I(...) PP_THIRD_ARG(__VA_OPT__(,),TRUE,FALSE,)
#define VA_OPT_SUPPORTED_I(...) PP_THIRD_ARG(__VA_OPT__(,),1,0,)
#define VA_OPT_SUPPORTED VA_OPT_SUPPORTED_I(?)
#if !VA_OPT_SUPPORTED
#error ERROR: VA_OPT__ is not supported. Please update your gcc compiler to version 10 or higher
#error ERROR: __VA_OPT__ is not supported. Please update your arm-none-eabi-gcc compiler to version 10 or higher
#endif // VA_OPT_SUPPORTED
/* Calls m0/m1/.../m8 depending on how many arguments are passed. */

View File

@ -56,7 +56,6 @@ struct MoveInfo
} zMove;
// end of word
s32 priority:4;
u32 recoil:7;
u32 strikeCount:4; // Max 15 hits. Defaults to 1 if not set. May apply its effect on each hit.
u32 criticalHitStage:2;
bool32 alwaysCriticalHit:1;
@ -74,7 +73,6 @@ struct MoveInfo
bool32 ballisticMove:1;
bool32 powderMove:1;
bool32 danceMove:1;
// end of word
bool32 windMove:1;
bool32 slicingMove:1;
bool32 healingMove:1;
@ -82,6 +80,7 @@ struct MoveInfo
bool32 ignoresTargetAbility:1;
bool32 ignoresTargetDefenseEvasionStages:1;
bool32 damagesUnderground:1;
// end of word
bool32 damagesUnderwater:1;
bool32 damagesAirborne:1;
bool32 damagesAirborneDoubleDamage:1;
@ -106,7 +105,7 @@ struct MoveInfo
bool32 sketchBanned:1;
//Other
bool32 validApprenticeMove:1;
u32 padding:3;
u32 padding:10;
// end of word
union {
@ -119,11 +118,12 @@ struct MoveInfo
u16 property; // can be used to remove the hardcoded values
} protect;
u32 status;
u16 moveProperty;
u16 holdEffect;
u16 type;
u16 fixedDamage;
u16 absorbPercentage;
u32 moveProperty;
u32 holdEffect;
u32 type;
u32 fixedDamage;
u32 absorbPercentage;
u32 recoilPercentage;
} argument;
// primary/secondary effects
@ -212,11 +212,6 @@ static inline s32 GetMovePriority(u32 moveId)
return gMovesInfo[SanitizeMoveId(moveId)].priority;
}
static inline u32 GetMoveRecoil(u32 moveId)
{
return gMovesInfo[SanitizeMoveId(moveId)].recoil;
}
static inline u32 GetMoveStrikeCount(u32 moveId)
{
return gMovesInfo[SanitizeMoveId(moveId)].strikeCount;
@ -490,6 +485,11 @@ static inline u32 GetMoveAbsorbPercentage(u32 moveId)
return gMovesInfo[moveId].argument.absorbPercentage;
}
static inline u32 GetMoveRecoil(u32 moveId)
{
return gMovesInfo[SanitizeMoveId(moveId)].argument.recoilPercentage;
}
static inline const struct AdditionalEffect *GetMoveAdditionalEffectById(u32 moveId, u32 effect)
{
return &gMovesInfo[SanitizeMoveId(moveId)].additionalEffects[effect];

View File

@ -428,7 +428,7 @@ struct SpeciesInfo /*0xC4*/
#else
u8 paddingF:3;
#endif //P_GENDER_DIFFERENCES
u8 padding3:2;
u8 pokemonJumpType:2; // According to the clerk, the Pokémon allowed in Pokémon Jump are all <= 28 inches/71 cm, and do not only swim, burrow, or fly.
u8 enemyMonElevation; // This determines how much higher above the usual position the enemy Pokémon is during battle. Species that float or fly have nonzero values.
// Flags
u32 isLegendary:1;

View File

@ -20,6 +20,7 @@ void TestRunner_Battle_CheckAiMoveScores(u32 battlerId);
void TestRunner_Battle_AISetScore(const char *file, u32 line, u32 battlerId, u32 moveIndex, s32 score);
void TestRunner_Battle_AIAdjustScore(const char *file, u32 line, u32 battlerId, u32 moveIndex, s32 score);
void TestRunner_Battle_InvalidNoHPMon(u32 battlerId, u32 partyIndex);
void TestRunner_CheckMemory(void);
void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType);

View File

@ -238,8 +238,7 @@ void BattleAI_SetupFlags(void)
void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler)
{
s32 i;
u8 moveLimitations;
u32 moveLimitations;
u32 flags[MAX_BATTLERS_COUNT];
// Clear AI data but preserve the flags.
@ -247,28 +246,23 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler)
memset(AI_THINKING_STRUCT, 0, sizeof(struct AI_ThinkingStruct));
memcpy(&AI_THINKING_STRUCT->aiFlags[0], &flags[0], sizeof(u32) * MAX_BATTLERS_COUNT);
moveLimitations = AI_DATA->moveLimitations[battler];
// Conditional score reset, unlike Ruby.
for (i = 0; i < MAX_MON_MOVES; i++)
for (u32 moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++)
{
if (moveLimitations & (1u << moveIndex))
SET_SCORE(battler, moveIndex, 0);
if (defaultScoreMoves & 1)
SET_SCORE(battler, i, AI_SCORE_DEFAULT);
SET_SCORE(battler, moveIndex, AI_SCORE_DEFAULT);
else
SET_SCORE(battler, i, 0);
SET_SCORE(battler, moveIndex, 0);
defaultScoreMoves >>= 1;
}
moveLimitations = AI_DATA->moveLimitations[battler];
// Ignore moves that aren't possible to use.
for (i = 0; i < MAX_MON_MOVES; i++)
{
if ((1u << i) & moveLimitations)
SET_SCORE(battler, i, 0);
}
gBattlerTarget = SetRandomTarget(battler);
gBattleStruct->aiChosenTarget[battler] = gBattlerTarget;
gAiBattleData->chosenTarget[battler] = gBattlerTarget;
}
u32 BattleAI_ChooseMoveOrAction(u32 battler)
@ -413,8 +407,8 @@ static u32 Ai_SetMoveAccuracy(struct AiLogicData *aiData, u32 battlerAtk, u32 ba
static void CalcBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u32 battlerDef, u32 weather)
{
u32 moveIndex, move;
u32 rollType = GetDmgRollType(battlerAtk);
u16 *moves = GetMovesArray(battlerAtk);
u32 moveLimitations = aiData->moveLimitations[battlerAtk];
for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++)
{
@ -422,14 +416,13 @@ static void CalcBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u
uq4_12_t effectiveness = Q_4_12(0.0);
move = moves[moveIndex];
if (move != MOVE_NONE
&& move != MOVE_UNAVAILABLE
//&& !IsBattleMoveStatus(move) /* we want to get effectiveness and accuracy of status moves */
&& !(aiData->moveLimitations[battlerAtk] & (1u << moveIndex)))
{
dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, rollType);
aiData->moveAccuracy[battlerAtk][battlerDef][moveIndex] = Ai_SetMoveAccuracy(aiData, battlerAtk, battlerDef, move);
}
if (IsMoveUnusable(moveIndex, move, moveLimitations))
continue;
// Also get effectiveness of status moves
dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather);
aiData->moveAccuracy[battlerAtk][battlerDef][moveIndex] = Ai_SetMoveAccuracy(aiData, battlerAtk, battlerDef, move);
aiData->simulatedDmg[battlerAtk][battlerDef][moveIndex] = dmg;
aiData->effectiveness[battlerAtk][battlerDef][moveIndex] = effectiveness;
}
@ -515,7 +508,7 @@ static u32 ChooseMoveOrAction_Singles(u32 battlerAi)
for (i = 0; i < MAX_MON_MOVES; i++)
{
gBattleStruct->aiFinalScore[battlerAi][gBattlerTarget][i] = AI_THINKING_STRUCT->score[i];
gAiBattleData->finalScore[battlerAi][gBattlerTarget][i] = AI_THINKING_STRUCT->score[i];
}
// Check special AI actions.
@ -642,7 +635,7 @@ static u32 ChooseMoveOrAction_Doubles(u32 battlerAi)
for (j = 0; j < MAX_MON_MOVES; j++)
{
gBattleStruct->aiFinalScore[battlerAi][gBattlerTarget][j] = AI_THINKING_STRUCT->score[j];
gAiBattleData->finalScore[battlerAi][gBattlerTarget][j] = AI_THINKING_STRUCT->score[j];
}
}
}
@ -667,7 +660,7 @@ static u32 ChooseMoveOrAction_Doubles(u32 battlerAi)
}
gBattlerTarget = mostViableTargetsArray[Random() % mostViableTargetsNo];
gBattleStruct->aiChosenTarget[battlerAi] = gBattlerTarget;
gAiBattleData->chosenTarget[battlerAi] = gBattlerTarget;
return actionOrMoveIndex[gBattlerTarget];
}
@ -842,6 +835,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
u32 i;
u32 weather;
u32 predictedMove = aiData->lastUsedMove[battlerDef];
u32 abilityDef = aiData->abilities[battlerDef];
if (IS_TARGETING_PARTNER(battlerAtk, battlerDef))
return score;
@ -861,6 +855,21 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
if (gBattleStruct->battlerState[battlerDef].commandingDondozo)
RETURN_SCORE_MINUS(20);
// Don't use anything but super effective thawing moves if target is frozen if any other attack available
if (((GetMoveType(move) == TYPE_FIRE && GetMovePower(move) != 0) || CanBurnHitThaw(move)) && effectiveness < UQ_4_12(2.0) && (gBattleMons[battlerDef].status1 & (STATUS1_FROSTBITE | STATUS1_FREEZE)))
{
u32 aiMove;
for (i = 0; i < MAX_MON_MOVES; i++)
{
aiMove = gBattleMons[battlerAtk].moves[i];
if (GetMoveType(aiMove) != TYPE_FIRE && !CanBurnHitThaw(aiMove) && GetMovePower(gBattleMons[battlerAtk].moves[i] != 0))
{
ADJUST_SCORE(-1);
break;
}
}
}
if (effectiveness == UQ_4_12(0.0))
{
RETURN_SCORE_MINUS(20);
@ -887,145 +896,115 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
}
}
if (DoesBattlerIgnoreAbilityChecks(battlerAtk, aiData->abilities[battlerAtk], move))
abilityDef = ABILITY_NONE;
// check non-user target
if (!(moveTarget & MOVE_TARGET_USER))
{
// target ability checks
if (!DoesBattlerIgnoreAbilityChecks(battlerAtk, aiData->abilities[battlerAtk], move))
if (CanAbilityBlockMove(battlerAtk, battlerDef, move, abilityDef, ABILITY_CHECK_TRIGGER))
RETURN_SCORE_MINUS(20);
if (CanAbilityAbsorbMove(battlerAtk, battlerDef, abilityDef, move, moveType, ABILITY_CHECK_TRIGGER))
RETURN_SCORE_MINUS(20);
switch (abilityDef)
{
if (CanAbilityBlockMove(battlerAtk, battlerDef, move, aiData->abilities[battlerDef], ABILITY_CHECK_TRIGGER))
RETURN_SCORE_MINUS(20);
if (CanAbilityAbsorbMove(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, moveType, ABILITY_CHECK_TRIGGER))
RETURN_SCORE_MINUS(20);
switch (aiData->abilities[battlerDef])
case ABILITY_MAGIC_GUARD:
switch (moveEffect)
{
case ABILITY_MAGIC_GUARD:
switch (moveEffect)
{
case EFFECT_POISON:
case EFFECT_WILL_O_WISP:
case EFFECT_TOXIC:
case EFFECT_LEECH_SEED:
ADJUST_SCORE(-5);
break;
case EFFECT_CURSE:
if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) // Don't use Curse if you're a ghost type vs a Magic Guard user, they'll take no damage.
ADJUST_SCORE(-5);
break;
}
case EFFECT_POISON:
case EFFECT_WILL_O_WISP:
case EFFECT_TOXIC:
case EFFECT_LEECH_SEED:
ADJUST_SCORE(-5);
break;
case ABILITY_WONDER_GUARD:
if (effectiveness < UQ_4_12(2.0))
case EFFECT_CURSE:
if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) // Don't use Curse if you're a ghost type vs a Magic Guard user, they'll take no damage.
ADJUST_SCORE(-5);
break;
}
break;
case ABILITY_WONDER_GUARD:
if (effectiveness < UQ_4_12(2.0))
RETURN_SCORE_MINUS(20);
break;
case ABILITY_JUSTIFIED:
if (moveType == TYPE_DARK && !IsBattleMoveStatus(move))
RETURN_SCORE_MINUS(10);
break;
case ABILITY_RATTLED:
if (!IsBattleMoveStatus(move)
&& (moveType == TYPE_DARK || moveType == TYPE_GHOST || moveType == TYPE_BUG))
RETURN_SCORE_MINUS(10);
break;
case ABILITY_AROMA_VEIL:
if (IsAromaVeilProtectedEffect(moveEffect))
RETURN_SCORE_MINUS(10);
break;
case ABILITY_SWEET_VEIL:
if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN)
RETURN_SCORE_MINUS(10);
break;
case ABILITY_FLOWER_VEIL:
if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) && (IsNonVolatileStatusMoveEffect(moveEffect)))
RETURN_SCORE_MINUS(10);
break;
case ABILITY_MAGIC_BOUNCE:
if (MoveCanBeBouncedBack(move))
RETURN_SCORE_MINUS(20);
break;
case ABILITY_CONTRARY:
if (IsStatLoweringEffect(moveEffect))
RETURN_SCORE_MINUS(20);
break;
case ABILITY_COMATOSE:
if (IsNonVolatileStatusMoveEffect(moveEffect))
RETURN_SCORE_MINUS(10);
break;
case ABILITY_SHIELDS_DOWN:
if (IsShieldsDownProtected(battlerAtk, aiData->abilities[battlerAtk]) && IsNonVolatileStatusMoveEffect(moveEffect))
RETURN_SCORE_MINUS(10);
break;
case ABILITY_LEAF_GUARD:
if ((AI_GetWeather() & B_WEATHER_SUN)
&& aiData->holdEffects[battlerDef] != HOLD_EFFECT_UTILITY_UMBRELLA
&& IsNonVolatileStatusMoveEffect(moveEffect))
RETURN_SCORE_MINUS(10);
break;
} // def ability checks
// target partner ability checks & not attacking partner
if (isDoubleBattle)
{
switch (aiData->abilities[BATTLE_PARTNER(battlerDef)])
{
case ABILITY_LIGHTNING_ROD:
if (moveType == TYPE_ELECTRIC && !IsMoveRedirectionPrevented(battlerAtk, move, aiData->abilities[battlerAtk]))
RETURN_SCORE_MINUS(20);
break;
case ABILITY_JUSTIFIED:
if (moveType == TYPE_DARK && !IsBattleMoveStatus(move))
RETURN_SCORE_MINUS(10);
case ABILITY_STORM_DRAIN:
if (moveType == TYPE_WATER && !IsMoveRedirectionPrevented(battlerAtk, move, aiData->abilities[battlerAtk]))
RETURN_SCORE_MINUS(20);
break;
case ABILITY_RATTLED:
if (!IsBattleMoveStatus(move)
&& (moveType == TYPE_DARK || moveType == TYPE_GHOST || moveType == TYPE_BUG))
case ABILITY_MAGIC_BOUNCE:
if (MoveCanBeBouncedBack(move) && moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD))
RETURN_SCORE_MINUS(20);
break;
case ABILITY_SWEET_VEIL:
if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN)
RETURN_SCORE_MINUS(20);
break;
case ABILITY_FLOWER_VEIL:
if ((IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS)) && (IsNonVolatileStatusMoveEffect(moveEffect) || IsStatLoweringEffect(moveEffect)))
RETURN_SCORE_MINUS(10);
break;
case ABILITY_AROMA_VEIL:
if (IsAromaVeilProtectedEffect(moveEffect))
RETURN_SCORE_MINUS(10);
break;
case ABILITY_SWEET_VEIL:
if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN)
RETURN_SCORE_MINUS(10);
break;
case ABILITY_FLOWER_VEIL:
if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) && (IsNonVolatileStatusMoveEffect(moveEffect) || IsStatLoweringEffect(moveEffect)))
RETURN_SCORE_MINUS(10);
break;
case ABILITY_MAGIC_BOUNCE:
if (MoveCanBeBouncedBack(move))
RETURN_SCORE_MINUS(20);
break;
case ABILITY_CONTRARY:
if (IsStatLoweringEffect(moveEffect))
RETURN_SCORE_MINUS(20);
break;
case ABILITY_CLEAR_BODY:
case ABILITY_FULL_METAL_BODY:
case ABILITY_WHITE_SMOKE:
if (IsStatLoweringEffect(moveEffect))
RETURN_SCORE_MINUS(10);
break;
case ABILITY_HYPER_CUTTER:
if ((moveEffect == EFFECT_ATTACK_DOWN || moveEffect == EFFECT_ATTACK_DOWN_2)
&& move != MOVE_PLAY_NICE && move != MOVE_NOBLE_ROAR && move != MOVE_TEARFUL_LOOK && move != MOVE_VENOM_DRENCH)
RETURN_SCORE_MINUS(10);
break;
case ABILITY_ILLUMINATE:
if (B_ILLUMINATE_EFFECT < GEN_9)
break;
// fallthrough
case ABILITY_KEEN_EYE:
case ABILITY_MINDS_EYE:
if (moveEffect == EFFECT_ACCURACY_DOWN || moveEffect == EFFECT_ACCURACY_DOWN_2)
RETURN_SCORE_MINUS(10);
break;
case ABILITY_BIG_PECKS:
if (moveEffect == EFFECT_DEFENSE_DOWN || moveEffect == EFFECT_DEFENSE_DOWN_2)
RETURN_SCORE_MINUS(10);
break;
case ABILITY_DEFIANT:
case ABILITY_COMPETITIVE:
if (IsStatLoweringEffect(moveEffect) && !IS_TARGETING_PARTNER(battlerAtk, battlerDef))
RETURN_SCORE_MINUS(8);
break;
case ABILITY_COMATOSE:
if (IsNonVolatileStatusMoveEffect(moveEffect))
RETURN_SCORE_MINUS(10);
break;
case ABILITY_SHIELDS_DOWN:
if (IsShieldsDownProtected(battlerAtk, aiData->abilities[battlerAtk]) && IsNonVolatileStatusMoveEffect(moveEffect))
RETURN_SCORE_MINUS(10);
break;
case ABILITY_LEAF_GUARD:
if ((AI_GetWeather() & B_WEATHER_SUN)
&& aiData->holdEffects[battlerDef] != HOLD_EFFECT_UTILITY_UMBRELLA
&& IsNonVolatileStatusMoveEffect(moveEffect))
RETURN_SCORE_MINUS(10);
break;
} // def ability checks
// target partner ability checks & not attacking partner
if (isDoubleBattle)
{
switch (aiData->abilities[BATTLE_PARTNER(battlerDef)])
{
case ABILITY_LIGHTNING_ROD:
if (moveType == TYPE_ELECTRIC && !IsMoveRedirectionPrevented(battlerAtk, move, aiData->abilities[battlerAtk]))
RETURN_SCORE_MINUS(20);
break;
case ABILITY_STORM_DRAIN:
if (moveType == TYPE_WATER && !IsMoveRedirectionPrevented(battlerAtk, move, aiData->abilities[battlerAtk]))
RETURN_SCORE_MINUS(20);
break;
case ABILITY_MAGIC_BOUNCE:
if (MoveCanBeBouncedBack(move) && moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD))
RETURN_SCORE_MINUS(20);
break;
case ABILITY_SWEET_VEIL:
if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN)
RETURN_SCORE_MINUS(20);
break;
case ABILITY_FLOWER_VEIL:
if ((IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS)) && (IsNonVolatileStatusMoveEffect(moveEffect) || IsStatLoweringEffect(moveEffect)))
RETURN_SCORE_MINUS(10);
break;
case ABILITY_AROMA_VEIL:
if (IsAromaVeilProtectedEffect(moveEffect))
RETURN_SCORE_MINUS(10);
break;
}
} // def partner ability checks
} // ignore def ability check
}
} // def partner ability checks
// gen7+ dark type mons immune to priority->elevated moves from prankster
if (B_PRANKSTER_DARK_TYPES >= GEN_7 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK)
@ -1100,7 +1079,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
default:
break; // check move damage
case EFFECT_SLEEP:
if (!AI_CanPutToSleep(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove))
if (!AI_CanPutToSleep(battlerAtk, battlerDef, abilityDef, move, aiData->partnerMove))
ADJUST_SCORE(-10);
if (PartnerMoveActivatesSleepClause(aiData->partnerMove))
ADJUST_SCORE(-20);
@ -1352,47 +1331,40 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
// stat lowering effects
case EFFECT_ATTACK_DOWN:
case EFFECT_ATTACK_DOWN_2:
if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ATK)) //|| !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL))
ADJUST_SCORE(-10);
else if (aiData->abilities[battlerDef] == ABILITY_HYPER_CUTTER)
if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK)) //|| !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL))
ADJUST_SCORE(-10);
break;
case EFFECT_DEFENSE_DOWN:
case EFFECT_DEFENSE_DOWN_2:
if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_DEF))
if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_DEF))
ADJUST_SCORE(-10);
break;
case EFFECT_SPEED_DOWN:
case EFFECT_SPEED_DOWN_2:
if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPEED))
ADJUST_SCORE(-10);
else if (aiData->abilities[battlerDef] == ABILITY_SPEED_BOOST)
if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPEED))
ADJUST_SCORE(-10);
break;
case EFFECT_SPECIAL_ATTACK_DOWN:
case EFFECT_SPECIAL_ATTACK_DOWN_2:
if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPATK)) //|| !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL))
if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPATK)) //|| !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL))
ADJUST_SCORE(-10);
break;
case EFFECT_SPECIAL_DEFENSE_DOWN:
case EFFECT_SPECIAL_DEFENSE_DOWN_2:
if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPDEF))
if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPDEF))
ADJUST_SCORE(-10);
break;
case EFFECT_ACCURACY_DOWN:
case EFFECT_ACCURACY_DOWN_2:
if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ACC))
if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ACC))
ADJUST_SCORE(-10);
else if (aiData->abilities[battlerDef] == ABILITY_KEEN_EYE || aiData->abilities[battlerDef] == ABILITY_MINDS_EYE
|| (B_ILLUMINATE_EFFECT >= GEN_9 && aiData->abilities[battlerDef] == ABILITY_ILLUMINATE))
ADJUST_SCORE(-8);
break;
case EFFECT_EVASION_DOWN:
case EFFECT_EVASION_DOWN_2:
case EFFECT_TICKLE:
if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ATK))
if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK))
ADJUST_SCORE(-10);
else if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_DEF))
else if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_DEF))
ADJUST_SCORE(-8);
break;
case EFFECT_VENOM_DRENCH:
@ -1402,18 +1374,18 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
}
else
{
if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPEED))
if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPEED))
ADJUST_SCORE(-10);
else if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPATK))
else if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPATK))
ADJUST_SCORE(-8);
else if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ATK))
else if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK))
ADJUST_SCORE(-6);
}
break;
case EFFECT_NOBLE_ROAR:
if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPATK))
if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPATK))
ADJUST_SCORE(-10);
else if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ATK))
else if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK))
ADJUST_SCORE(-8);
break;
case EFFECT_CAPTIVATE:
@ -1447,7 +1419,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
if (aiData->abilities[battlerDef] == ABILITY_WONDER_GUARD && effectiveness < UQ_4_12(2.0))
ADJUST_SCORE(-10);
if (HasDamagingMove(battlerDef) && !((gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE)
|| IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef])
|| IsBattlerIncapacitated(battlerDef, abilityDef)
|| gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION)))
ADJUST_SCORE(-10);
if (HasMoveEffect(battlerAtk, EFFECT_SUBSTITUTE) && !(gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE))
@ -1474,12 +1446,12 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
ADJUST_SCORE(-10);
break;
case EFFECT_TOXIC_THREAD:
if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPEED))
if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPEED))
ADJUST_SCORE(-1); // may still want to just poison
//fallthrough
case EFFECT_POISON:
case EFFECT_TOXIC:
if (!AI_CanPoison(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove))
if (!AI_CanPoison(battlerAtk, battlerDef, abilityDef, move, aiData->partnerMove))
ADJUST_SCORE(-10);
break;
case EFFECT_LIGHT_SCREEN:
@ -1601,7 +1573,9 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
ADJUST_SCORE(-10); // if mon will wake up, is not asleep, or is not comatose
break;
case EFFECT_MEAN_LOOK:
if (IsBattlerTrapped(battlerDef, TRUE) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove))
if (AI_CanBattlerEscape(battlerDef)
|| IsBattlerTrapped(battlerAtk, battlerDef)
|| DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove))
ADJUST_SCORE(-10);
break;
case EFFECT_NIGHTMARE:
@ -2714,7 +2688,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
else if (GetBattleMoveCategory(move) == DAMAGE_CATEGORY_STATUS
&& (CountUsablePartyMons(battlerAtk) < 1
|| AI_DATA->mostSuitableMonId[battlerAtk] == PARTY_SIZE
|| IsBattlerTrapped(battlerAtk, TRUE)))
|| (!AI_CanBattlerEscape(battlerAtk) && IsBattlerTrapped(battlerDef, battlerAtk))))
ADJUST_SCORE(-30);
}
@ -2734,8 +2708,10 @@ static s32 AI_TryToFaint(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
if (IsBattleMoveStatus(move))
return score; // status moves aren't accounted here
if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, 0) && GetMoveEffect(move) != EFFECT_EXPLOSION)
if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, AI_ATTACKING) && GetMoveEffect(move) != EFFECT_EXPLOSION)
{
if (CanIndexMoveGuaranteeFaintTarget(battlerAtk, battlerDef, movesetIndex))
ADJUST_SCORE(1); // Bonus point if the KO is guaranteed
if (AI_IsFaster(battlerAtk, battlerDef, move))
ADJUST_SCORE(FAST_KILL);
else
@ -2895,7 +2871,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
if (MoveAlwaysCrits(move)
&& BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK)
&& AI_IsFaster(battlerAtk, battlerAtkPartner, move)
&& !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1))
&& !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING))
{
RETURN_SCORE_PLUS(GOOD_EFFECT);
}
@ -2939,7 +2915,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
}
break;
case ABILITY_WATER_COMPACTION:
if (moveType == TYPE_WATER && GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) >= 4)
if (moveType == TYPE_WATER && GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING) >= 4)
{
RETURN_SCORE_PLUS(WEAK_EFFECT); // only mon with this ability is weak to water so only make it okay if we do very little damage
}
@ -2966,7 +2942,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
&& !IsBattleMoveStatus(move)
&& HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_PHYSICAL)
&& BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK)
&& !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1))
&& !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING))
{
RETURN_SCORE_PLUS(WEAK_EFFECT);
}
@ -2975,7 +2951,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
if (!IsBattleMoveStatus(move)
&& (moveType == TYPE_DARK || moveType == TYPE_GHOST || moveType == TYPE_BUG)
&& BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPEED)
&& !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1))
&& !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING))
{
RETURN_SCORE_PLUS(WEAK_EFFECT);
}
@ -3032,7 +3008,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
&& !IsBattleMoveStatus(move)
&& HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_PHYSICAL)
&& BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK)
&& !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 0))
&& !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING))
{
RETURN_SCORE_PLUS(WEAK_EFFECT);
}
@ -3180,7 +3156,7 @@ static s32 CompareMoveAccuracies(u32 battlerAtk, u32 battlerDef, u32 moveSlot1,
static inline bool32 ShouldUseSpreadDamageMove(u32 battlerAtk, u32 move, u32 moveIndex, u32 hitsToFaintOpposingBattler)
{
u32 partnerBattler = BATTLE_PARTNER(battlerAtk);
u32 noOfHitsToFaintPartner = GetNoOfHitsToKOBattler(battlerAtk, partnerBattler, moveIndex);
u32 noOfHitsToFaintPartner = GetNoOfHitsToKOBattler(battlerAtk, partnerBattler, moveIndex, AI_ATTACKING);
return (IsDoubleBattle()
&& noOfHitsToFaintPartner != 0 // Immunity check
&& IsBattlerAlive(partnerBattler)
@ -3205,7 +3181,7 @@ static s32 AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef, u32 currId)
{
if (moves[i] != MOVE_NONE && GetMovePower(moves[i]) != 0)
{
noOfHits[i] = GetNoOfHitsToKOBattler(battlerAtk, battlerDef, i);
noOfHits[i] = GetNoOfHitsToKOBattler(battlerAtk, battlerDef, i, AI_ATTACKING);
if (ShouldUseSpreadDamageMove(battlerAtk,moves[i], i, noOfHits[i]))
{
noOfHits[i] = -1;
@ -3225,9 +3201,6 @@ static s32 AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef, u32 currId)
viableMoveScores[i] = 0;
isTwoTurnNotSemiInvulnerableMove[i] = FALSE;
}
/*
Test_MgbaPrintf("%S: required hits: %d Dmg: %d", gMoveNames[moves[i]], noOfHits[i], AI_DATA->simulatedDmg[battlerAtk][battlerDef][i]);
*/
}
// Priority list:
@ -3581,7 +3554,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
break;
}
if (ShouldRecover(battlerAtk, battlerDef, move, healPercent))
if (ShouldRecover(battlerAtk, battlerDef, move, healPercent, AI_DEFENDING))
ADJUST_SCORE(DECENT_EFFECT);
}
break;
@ -3591,7 +3564,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
case EFFECT_MORNING_SUN:
case EFFECT_SYNTHESIS:
case EFFECT_MOONLIGHT:
if (ShouldRecover(battlerAtk, battlerDef, move, 50))
if (ShouldRecover(battlerAtk, battlerDef, move, 50, AI_DEFENDING))
ADJUST_SCORE(GOOD_EFFECT);
break;
case EFFECT_TOXIC:
@ -3613,7 +3586,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
{
break;
}
else if (ShouldRecover(battlerAtk, battlerDef, move, 100))
else if (ShouldRecover(battlerAtk, battlerDef, move, 100, AI_DEFENDING))
{
if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_CURE_SLP
|| aiData->holdEffects[battlerAtk] == HOLD_EFFECT_CURE_STATUS
@ -3668,7 +3641,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
|| aiData->abilities[battlerDef] == ABILITY_MAGIC_GUARD)
break;
ADJUST_SCORE(GOOD_EFFECT);
if (!HasDamagingMove(battlerDef) || IsBattlerTrapped(battlerDef, FALSE)
if (!HasDamagingMove(battlerDef)
|| (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef))
|| aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT)
ADJUST_SCORE(DECENT_EFFECT);
break;
@ -3763,7 +3737,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
case EFFECT_CURSE:
if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST))
{
if (IsBattlerTrapped(battlerDef, TRUE))
if (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef))
ADJUST_SCORE(GOOD_EFFECT);
else
ADJUST_SCORE(WEAK_EFFECT);
@ -3856,7 +3830,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
ADJUST_SCORE(DECENT_EFFECT);
break;
case EFFECT_PERISH_SONG:
if (IsBattlerTrapped(battlerDef, TRUE))
if (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef))
ADJUST_SCORE(GOOD_EFFECT);
break;
case EFFECT_SANDSTORM:
@ -3933,7 +3907,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
case EFFECT_FELL_STINGER:
if (gBattleMons[battlerAtk].statStages[STAT_ATK] < MAX_STAT_STAGE
&& aiData->abilities[battlerAtk] != ABILITY_CONTRARY
&& CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, 0))
&& CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, AI_ATTACKING))
ADJUST_SCORE(BEST_EFFECT);
break;
case EFFECT_BELLY_DRUM:
@ -3965,7 +3939,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
case EFFECT_FIRST_TURN_ONLY:
if (ShouldFakeOut(battlerAtk, battlerDef, move) && MoveHasAdditionalEffectWithChance(move, MOVE_EFFECT_FLINCH, 100))
ADJUST_SCORE(GOOD_EFFECT);
else if (gDisableStructs[battlerAtk].isFirstTurn && GetBestDmgMoveFromBattler(battlerAtk, battlerDef) == move)
else if (gDisableStructs[battlerAtk].isFirstTurn && GetBestDmgMoveFromBattler(battlerAtk, battlerDef, AI_ATTACKING) == move)
ADJUST_SCORE(BEST_EFFECT);
break;
case EFFECT_STOCKPILE:
@ -3997,7 +3971,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
break; // Don't use if the attract won't have a change to activate
if (gBattleMons[battlerDef].status1 & STATUS1_ANY
|| (gBattleMons[battlerDef].status2 & STATUS2_CONFUSION)
|| IsBattlerTrapped(battlerDef, TRUE))
|| (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef)))
ADJUST_SCORE(GOOD_EFFECT);
else
ADJUST_SCORE(DECENT_EFFECT);
@ -4538,20 +4512,20 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
break;
case EFFECT_COUNTER:
if ((!IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) && predictedMove != MOVE_NONE)
&& (GetNoOfHitsToKOBattler(battlerDef, battlerAtk, predictedMoveSlot) >= 2)
&& (GetNoOfHitsToKOBattler(battlerDef, battlerAtk, predictedMoveSlot, AI_DEFENDING) >= 2)
&& (GetBattleMoveCategory(predictedMove) == DAMAGE_CATEGORY_PHYSICAL))
ADJUST_SCORE(GOOD_EFFECT);
break;
case EFFECT_MIRROR_COAT:
if ((!IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) && predictedMove != MOVE_NONE)
&& (GetNoOfHitsToKOBattler(battlerDef, battlerAtk, predictedMoveSlot) >= 2)
&& (GetNoOfHitsToKOBattler(battlerDef, battlerAtk, predictedMoveSlot, AI_DEFENDING) >= 2)
&& (GetBattleMoveCategory(predictedMove) == DAMAGE_CATEGORY_SPECIAL))
ADJUST_SCORE(GOOD_EFFECT);
break;
case EFFECT_SHORE_UP:
if ((AI_GetWeather() & B_WEATHER_SANDSTORM) && ShouldRecover(battlerAtk, battlerDef, move, 67))
if ((AI_GetWeather() & B_WEATHER_SANDSTORM) && ShouldRecover(battlerAtk, battlerDef, move, 67, AI_DEFENDING))
ADJUST_SCORE(DECENT_EFFECT);
else if (ShouldRecover(battlerAtk, battlerDef, move, 50))
else if (ShouldRecover(battlerAtk, battlerDef, move, 50, AI_DEFENDING))
ADJUST_SCORE(DECENT_EFFECT);
break;
case EFFECT_ENDEAVOR:
@ -4577,8 +4551,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
//case EFFECT_SKY_DROP
//break;
case EFFECT_JUNGLE_HEALING:
if (ShouldRecover(battlerAtk, battlerDef, move, 25)
|| ShouldRecover(BATTLE_PARTNER(battlerAtk), battlerDef, move, 25)
if (ShouldRecover(battlerAtk, battlerDef, move, 25, AI_DEFENDING)
|| ShouldRecover(BATTLE_PARTNER(battlerAtk), battlerDef, move, 25, AI_DEFENDING)
|| gBattleMons[battlerAtk].status1 & STATUS1_ANY
|| gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 & STATUS1_ANY)
ADJUST_SCORE(GOOD_EFFECT);
@ -4816,7 +4790,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
ADJUST_SCORE(GOOD_EFFECT);
break;
case MOVE_EFFECT_THROAT_CHOP:
if (IsSoundMove(GetBestDmgMoveFromBattler(battlerDef, battlerAtk)))
if (IsSoundMove(GetBestDmgMoveFromBattler(battlerDef, battlerAtk, AI_DEFENDING)))
{
if (AI_IsFaster(battlerAtk, battlerDef, move))
ADJUST_SCORE(GOOD_EFFECT);
@ -4849,12 +4823,12 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
if (GetMovePower(move) != 0)
{
if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) == 0)
if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING) == 0)
ADJUST_AND_RETURN_SCORE(NO_DAMAGE_OR_FAILS); // No point in checking the move further so return early
else
{
if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & (AI_FLAG_RISKY | AI_FLAG_PREFER_HIGHEST_DAMAGE_MOVE)
&& GetBestDmgMoveFromBattler(battlerAtk, battlerDef) == move)
&& GetBestDmgMoveFromBattler(battlerAtk, battlerDef, AI_ATTACKING) == move)
ADJUST_SCORE(BEST_DAMAGE_MOVE);
else
ADJUST_SCORE(AI_CompareDamagingMoves(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex));
@ -5072,15 +5046,15 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
return score;
}
// Adds score bonus to best powered move
// Adds score bonus to OHKOs and 2HKOs
static s32 AI_TryTo2HKO(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
{
if (IS_TARGETING_PARTNER(battlerAtk, battlerDef))
return score;
if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) == 1)
if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING) == 1)
ADJUST_SCORE(BEST_EFFECT);
else if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) == 2)
else if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING) == 2)
ADJUST_SCORE(DECENT_EFFECT);
return score;
@ -5093,7 +5067,7 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor
|| CountUsablePartyMons(battlerAtk) == 0
|| !IsBattleMoveStatus(move)
|| !HasMoveEffect(battlerAtk, EFFECT_BATON_PASS)
|| IsBattlerTrapped(battlerAtk, TRUE))
|| (!AI_CanBattlerEscape(battlerAtk) && IsBattlerTrapped(battlerDef, battlerAtk)))
return score;
u32 effect = GetMoveEffect(move);
@ -5256,7 +5230,7 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
}
// consider target HP
if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0))
if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING))
{
ADJUST_SCORE(DECENT_EFFECT);
}
@ -5437,7 +5411,7 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
{
case EFFECT_PURSUIT:
{
u32 hitsToKO = GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex);
u32 hitsToKO = GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING);
if (hitsToKO == 2)
ADJUST_SCORE(GOOD_EFFECT);
else if (hitsToKO == 1)
@ -5584,7 +5558,16 @@ static void AI_Watch(void)
// Roaming pokemon logic
static s32 AI_Roaming(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
{
if (IsBattlerTrapped(battlerAtk, FALSE))
bool32 roamerCanFlee = FALSE;
if (AI_CanBattlerEscape(battlerAtk))
roamerCanFlee = TRUE;
else if (AI_DATA->abilities[battlerAtk] == ABILITY_RUN_AWAY)
roamerCanFlee = TRUE;
else if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_CAN_ALWAYS_RUN)
roamerCanFlee = TRUE;
if (!roamerCanFlee && IsBattlerTrapped(battlerDef, battlerAtk))
return score;
AI_Flee();

View File

@ -164,6 +164,14 @@ static inline bool32 SetSwitchinAndSwitch(u32 battler, u32 switchinId)
return TRUE;
}
static bool32 AI_DoesChoiceItemBlockMove(u32 battler, u32 move)
{
// Choice locked into something else
if (AI_DATA->lastUsedMove[battler] != MOVE_NONE && AI_DATA->lastUsedMove[battler] != move && HOLD_EFFECT_CHOICE(GetBattlerHoldEffect(battler, FALSE)) && IsBattlerItemEnabled(battler))
return TRUE;
return FALSE;
}
// Note that as many return statements as possible are INTENTIONALLY put after all of the loops;
// the function can take a max of about 0.06s to run, and this prevents the player from identifying
// whether the mon will switch or not by seeing how long the delay is before they select a move
@ -194,7 +202,6 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler)
defType1 = gBattleMons[battler].types[0];
defType2 = gBattleMons[battler].types[1];
// Check AI moves for damage dealt
for (i = 0; i < MAX_MON_MOVES; i++)
{
aiMove = gBattleMons[battler].moves[i];
@ -216,17 +223,16 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler)
if (!IsBattleMoveStatus(aiMove))
{
// Check if mon has a super effective move
if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0))
if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0) && !AI_DoesChoiceItemBlockMove(battler, aiMove))
hasSuperEffectiveMove = TRUE;
// Get maximum damage mon can deal
damageDealt = AI_DATA->simulatedDmg[battler][opposingBattler][i].expected;
if(damageDealt > maxDamageDealt)
damageDealt = AI_GetDamage(battler, opposingBattler, i, AI_ATTACKING, AI_DATA);
if(damageDealt > maxDamageDealt && !AI_DoesChoiceItemBlockMove(battler, aiMove))
{
maxDamageDealt = damageDealt;
aiBestMove = aiMove;
}
}
}
}
@ -248,14 +254,20 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler)
playerMove = gBattleMons[opposingBattler].moves[i];
if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH)
{
damageTaken = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather, DMG_ROLL_HIGHEST).expected;
damageTaken = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather).median;
if (playerMove == gBattleStruct->choicedMove[opposingBattler]) // If player is choiced, only care about the choice locked move
{
return maxDamageTaken = damageTaken;
break;
}
if (damageTaken > maxDamageTaken)
maxDamageTaken = damageTaken;
}
}
// Check if mon gets one shot
if(maxDamageTaken > gBattleMons[battler].hp)
if(maxDamageTaken > gBattleMons[battler].hp
&& !(gItemsInfo[gBattleMons[battler].item].holdEffect == HOLD_EFFECT_FOCUS_SASH || (!IsMoldBreakerTypeAbility(opposingBattler, gBattleMons[opposingBattler].ability) && B_STURDY >= GEN_5 && aiAbility == ABILITY_STURDY)))
{
getsOneShot = TRUE;
}
@ -325,6 +337,38 @@ static bool32 ShouldSwitchIfTruant(u32 battler)
return FALSE;
}
static u32 FindMonWithMoveOfEffectiveness(u32 battler, u32 opposingBattler, uq4_12_t effectiveness)
{
u32 move, i, j;
s32 firstId;
s32 lastId; // + 1
struct Pokemon *party = NULL;
// Get party information.
GetAIPartyIndexes(battler, &firstId, &lastId);
party = GetBattlerParty(battler);
// Find a Pokémon in the party that has a super effective move.
for (i = firstId; i < lastId; i++)
{
if (!IsValidForBattle(&party[i]))
continue;
if (i == gBattlerPartyIndexes[battler])
continue;
if (IsAceMon(battler, i))
continue;
for (j = 0; j < MAX_MON_MOVES; j++)
{
move = GetMonData(&party[i], MON_DATA_MOVE1 + j);
if (move != MOVE_NONE && AI_GetMoveEffectiveness(move, battler, opposingBattler) >= effectiveness && gMovesInfo[move].power != 0)
return SetSwitchinAndSwitch(battler, i);
}
}
return FALSE; // There is not a single Pokémon in the party that has a move with this effectiveness threshold
}
static bool32 ShouldSwitchIfAllMovesBad(u32 battler)
{
u32 moveIndex;
@ -349,24 +393,27 @@ static bool32 ShouldSwitchIfAllMovesBad(u32 battler)
for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++)
{
aiMove = gBattleMons[battler].moves[moveIndex];
if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) > UQ_4_12(0.0) && aiMove != MOVE_NONE)
if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) > UQ_4_12(0.0) && aiMove != MOVE_NONE
&& (!ALL_MOVES_BAD_STATUS_MOVES_BAD || gMovesInfo[aiMove].power != 0)) // If using ALL_MOVES_BAD_STATUS_MOVES_BAD, then need power to be non-zero
return FALSE;
}
}
if (RandomPercentage(RNG_AI_SWITCH_ALL_MOVES_BAD, GetSwitchChance(SHOULD_SWITCH_ALL_MOVES_BAD)))
return SetSwitchinAndSwitch(battler, PARTY_SIZE);
{
if (AI_DATA->mostSuitableMonId[battler] == PARTY_SIZE) // No good candidate mons, find any one that can deal damage
return FindMonWithMoveOfEffectiveness(battler, opposingBattler, UQ_4_12(1.0));
else // Good candidate mon, send that in
return SetSwitchinAndSwitch(battler, PARTY_SIZE);
}
return FALSE;
}
static bool32 FindMonThatHitsWonderGuard(u32 battler)
{
u32 opposingBattler = GetOppositeBattler(battler);
s32 i, j;
s32 firstId;
s32 lastId; // + 1
struct Pokemon *party = NULL;
u16 move;
u32 i, move;
if (IsDoubleBattle())
return FALSE;
@ -385,33 +432,10 @@ static bool32 FindMonThatHitsWonderGuard(u32 battler)
}
}
// Get party information.
GetAIPartyIndexes(battler, &firstId, &lastId);
party = GetBattlerParty(battler);
if (RandomPercentage(RNG_AI_SWITCH_WONDER_GUARD, GetSwitchChance(SHOULD_SWITCH_WONDER_GUARD)))
return FindMonWithMoveOfEffectiveness(battler, opposingBattler, UQ_4_12(2.0));
// Find a Pokémon in the party that has a super effective move.
for (i = firstId; i < lastId; i++)
{
if (!IsValidForBattle(&party[i]))
continue;
if (i == gBattlerPartyIndexes[battler])
continue;
if (IsAceMon(battler, i))
continue;
for (j = 0; j < MAX_MON_MOVES; j++)
{
move = GetMonData(&party[i], MON_DATA_MOVE1 + j);
if (move != MOVE_NONE)
{
// Found a mon
if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0) && RandomPercentage(RNG_AI_SWITCH_WONDER_GUARD, GetSwitchChance(SHOULD_SWITCH_WONDER_GUARD)))
return SetSwitchinAndSwitch(battler, i);
}
}
}
return FALSE; // There is not a single Pokémon in the party that has a super effective move against a mon with Wonder Guard.
return FALSE;
}
static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler)
@ -449,7 +473,7 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler)
// Only check damage if it's a damaging move
if (!IsBattleMoveStatus(aiMove))
{
if (AI_DATA->simulatedDmg[battler][opposingBattler][i].expected > gBattleMons[opposingBattler].hp)
if (AI_GetDamage(battler, opposingBattler, i, AI_ATTACKING, AI_DATA) > gBattleMons[opposingBattler].hp)
return FALSE;
}
}
@ -501,6 +525,10 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler)
{
absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_SOUNDPROOF;
}
else if (IsWindMove(predictedMove) || (isOpposingBattlerChargingOrInvulnerable && IsWindMove(incomingMove)))
{
absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_WIND_RIDER;
}
else
{
return FALSE;
@ -965,10 +993,18 @@ static bool32 ShouldSwitchIfEncored(u32 battler)
static bool32 ShouldSwitchIfBadChoiceLock(u32 battler)
{
u32 holdEffect = GetBattlerHoldEffect(battler, FALSE);
u32 lastUsedMove = AI_DATA->lastUsedMove[battler];
u32 opposingBattler = GetOppositeBattler(battler);
bool32 moveAffectsTarget = TRUE;
if (lastUsedMove != MOVE_NONE && (AI_GetMoveEffectiveness(lastUsedMove, battler, opposingBattler) == UQ_4_12(0.0)
|| CanAbilityAbsorbMove(battler, opposingBattler, AI_DATA->abilities[opposingBattler], lastUsedMove, GetMoveType(lastUsedMove), ABILITY_CHECK_TRIGGER)
|| CanAbilityBlockMove(battler, opposingBattler, lastUsedMove, AI_DATA->abilities[opposingBattler], ABILITY_CHECK_TRIGGER)))
moveAffectsTarget = FALSE;
if (HOLD_EFFECT_CHOICE(holdEffect) && IsBattlerItemEnabled(battler))
{
if (GetMoveCategory(AI_DATA->lastUsedMove[battler]) == DAMAGE_CATEGORY_STATUS && RandomPercentage(RNG_AI_SWITCH_CHOICE_LOCKED, GetSwitchChance(SHOULD_SWITCH_CHOICE_LOCKED)))
if ((GetMoveCategory(lastUsedMove) == DAMAGE_CATEGORY_STATUS || !moveAffectsTarget) && RandomPercentage(RNG_AI_SWITCH_CHOICE_LOCKED, GetSwitchChance(SHOULD_SWITCH_CHOICE_LOCKED)))
return SetSwitchinAndSwitch(battler, PARTY_SIZE);
}
@ -1346,7 +1382,6 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva
int i, j;
int dmg, bestDmg = 0;
int bestMonId = PARTY_SIZE;
u32 rollType = GetDmgRollType(battler);
u32 aiMove;
@ -1362,7 +1397,7 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva
if (aiMove != MOVE_NONE && !IsBattleMoveStatus(aiMove))
{
aiMove = GetMonData(&party[i], MON_DATA_MOVE1 + j);
dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, rollType);
dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE);
if (bestDmg < dmg)
{
bestDmg = dmg;
@ -1687,7 +1722,7 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler)
currentHP = currentHP - damageTaken;
// One shot prevention effects
if (damageTaken >= maxHP && currentHP == maxHP && (heldItemEffect == HOLD_EFFECT_FOCUS_SASH || (!opponentCanBreakMold && B_STURDY >= GEN_5 && ability == ABILITY_STURDY)))
if (damageTaken >= maxHP && startingHP == maxHP && (heldItemEffect == HOLD_EFFECT_FOCUS_SASH || (!opponentCanBreakMold && B_STURDY >= GEN_5 && ability == ABILITY_STURDY)) && hitsToKO < 1)
currentHP = 1;
// If mon is still alive, apply weather impact first, as it might KO the mon before it can heal with its item (order is weather -> item -> status)
@ -1817,7 +1852,9 @@ static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattle
playerMove = gBattleMons[opposingBattler].moves[i];
if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH)
{
damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, FALSE, DMG_ROLL_HIGHEST);
damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, FALSE);
if (playerMove == gBattleStruct->choicedMove[opposingBattler]) // If player is choiced, only care about the choice locked move
return damageTaken;
if (damageTaken > maxDamageTaken)
maxDamageTaken = damageTaken;
}
@ -1851,7 +1888,7 @@ static inline bool32 IsFreeSwitch(enum SwitchType switchType, u32 battlerSwitchi
// Switch out effects
if (!IsDoubleBattle()) // Not handling doubles' additional complexity
{
if (IsSwitchOutEffect(GetMoveEffect(gLastUsedMove)) && movedSecond)
if (IsSwitchOutEffect(GetMoveEffect(gCurrentMove)) && movedSecond)
return TRUE;
if (AI_DATA->ejectButtonSwitch)
return TRUE;
@ -1948,9 +1985,9 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId,
if (aiMove != MOVE_NONE && !IsBattleMoveStatus(aiMove))
{
if (AI_THINKING_STRUCT->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_CONSERVATIVE)
damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_LOWEST);
damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE);
else
damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_DEFAULT);
damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE);
}
// Offensive switchin decisions are based on which whether switchin moves first and whether it can win a 1v1
@ -2065,7 +2102,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId,
}
// If ace mon is the last available Pokemon and U-Turn/Volt Switch or Eject Pack/Button was used - switch to the mon.
if (aceMonId != PARTY_SIZE && CountUsablePartyMons(battler) <= aceMonCount
&& (IsSwitchOutEffect(GetMoveEffect(gLastUsedMove)) || AI_DATA->ejectButtonSwitch || AI_DATA->ejectPackSwitch))
&& (IsSwitchOutEffect(GetMoveEffect(gCurrentMove)) || AI_DATA->ejectButtonSwitch || AI_DATA->ejectPackSwitch))
return aceMonId;
return PARTY_SIZE;
@ -2182,7 +2219,7 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, enum SwitchType switchType)
// If ace mon is the last available Pokemon and U-Turn/Volt Switch or Eject Pack/Button was used - switch to the mon.
if (aceMonId != PARTY_SIZE && CountUsablePartyMons(battler) <= aceMonCount
&& (IsSwitchOutEffect(GetMoveEffect(gLastUsedMove)) || AI_DATA->ejectButtonSwitch || AI_DATA->ejectPackSwitch))
&& (IsSwitchOutEffect(GetMoveEffect(gCurrentMove)) || AI_DATA->ejectButtonSwitch || AI_DATA->ejectPackSwitch))
return aceMonId;
return PARTY_SIZE;
@ -2191,13 +2228,13 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, enum SwitchType switchType)
static bool32 AiExpectsToFaintPlayer(u32 battler)
{
u8 target = gBattleStruct->aiChosenTarget[battler];
u8 target = gAiBattleData->chosenTarget[battler];
if (gBattleStruct->aiMoveOrAction[battler] > 3)
if (gAiBattleData->moveOrAction[battler] > 3)
return FALSE; // AI not planning to use move
if (GetBattlerSide(target) != GetBattlerSide(battler)
&& CanIndexMoveFaintTarget(battler, target, gBattleStruct->aiMoveOrAction[battler], 0)
&& CanIndexMoveFaintTarget(battler, target, gAiBattleData->moveOrAction[battler], AI_ATTACKING)
&& AI_IsFaster(battler, target, GetAIChosenMove(battler)))
{
// We expect to faint the target and move first -> dont use an item

File diff suppressed because it is too large Load Diff

View File

@ -544,8 +544,8 @@ static void OpponentHandleChooseMove(u32 battler)
}
else
{
chosenMoveId = gBattleStruct->aiMoveOrAction[battler];
gBattlerTarget = gBattleStruct->aiChosenTarget[battler];
chosenMoveId = gAiBattleData->moveOrAction[battler];
gBattlerTarget = gAiBattleData->chosenTarget[battler];
switch (chosenMoveId)
{
case AI_CHOICE_WATCH:

View File

@ -86,6 +86,7 @@ static void MoveSelectionDisplayPpNumber(u32 battler);
static void MoveSelectionDisplayPpString(u32 battler);
static void MoveSelectionDisplayMoveType(u32 battler);
static void MoveSelectionDisplayMoveNames(u32 battler);
static void TryMoveSelectionDisplayMoveDescription(u32 battler);
static void MoveSelectionDisplayMoveDescription(u32 battler);
static void SwitchIn_HandleSoundAndEnd(u32 battler);
static void WaitForMonSelection(u32 battler);
@ -786,8 +787,7 @@ void HandleInputChooseMove(u32 battler)
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
MoveSelectionDisplayPpNumber(battler);
MoveSelectionDisplayMoveType(battler);
if (gBattleStruct->descriptionSubmenu)
MoveSelectionDisplayMoveDescription(battler);
TryMoveSelectionDisplayMoveDescription(battler);
TryChangeZTrigger(battler, gMoveSelectionCursor[battler]);
}
}
@ -802,8 +802,7 @@ void HandleInputChooseMove(u32 battler)
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
MoveSelectionDisplayPpNumber(battler);
MoveSelectionDisplayMoveType(battler);
if (gBattleStruct->descriptionSubmenu)
MoveSelectionDisplayMoveDescription(battler);
TryMoveSelectionDisplayMoveDescription(battler);
TryChangeZTrigger(battler, gMoveSelectionCursor[battler]);
}
}
@ -817,8 +816,7 @@ void HandleInputChooseMove(u32 battler)
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
MoveSelectionDisplayPpNumber(battler);
MoveSelectionDisplayMoveType(battler);
if (gBattleStruct->descriptionSubmenu)
MoveSelectionDisplayMoveDescription(battler);
TryMoveSelectionDisplayMoveDescription(battler);
TryChangeZTrigger(battler, gMoveSelectionCursor[battler]);
}
}
@ -833,8 +831,7 @@ void HandleInputChooseMove(u32 battler)
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
MoveSelectionDisplayPpNumber(battler);
MoveSelectionDisplayMoveType(battler);
if (gBattleStruct->descriptionSubmenu)
MoveSelectionDisplayMoveDescription(battler);
TryMoveSelectionDisplayMoveDescription(battler);
TryChangeZTrigger(battler, gMoveSelectionCursor[battler]);
}
}
@ -876,7 +873,7 @@ void HandleInputChooseMove(u32 battler)
else if (JOY_NEW(B_MOVE_DESCRIPTION_BUTTON))
{
gBattleStruct->descriptionSubmenu = TRUE;
MoveSelectionDisplayMoveDescription(battler);
TryMoveSelectionDisplayMoveDescription(battler);
}
else if (JOY_NEW(START_BUTTON))
{
@ -1719,9 +1716,9 @@ static void MoveSelectionDisplayMoveType(u32 battler)
{
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)
type = gBattleMons[battler].types[1];
|| speciesId == SPECIES_OGERPON_HEARTHFLAME || speciesId == SPECIES_OGERPON_HEARTHFLAME_TERA
|| speciesId == SPECIES_OGERPON_CORNERSTONE || speciesId == SPECIES_OGERPON_CORNERSTONE_TERA)
type = gSpeciesInfo[speciesId].types[1];
}
else if (GetMoveCategory(move) == DAMAGE_CATEGORY_STATUS
&& (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX)))
@ -1745,6 +1742,15 @@ static void MoveSelectionDisplayMoveType(u32 battler)
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE);
}
static void TryMoveSelectionDisplayMoveDescription(u32 battler)
{
if (!B_SHOW_MOVE_DESCRIPTION)
return;
if (gBattleStruct->descriptionSubmenu)
MoveSelectionDisplayMoveDescription(battler);
}
static void MoveSelectionDisplayMoveDescription(u32 battler)
{
struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleResources->bufferA[battler][4]);
@ -2042,13 +2048,13 @@ static void PlayerHandleChooseAction(u32 battler)
u32 moveTarget = GetBattlerMoveTargetType(B_POSITION_PLAYER_RIGHT, move);
if (moveTarget == MOVE_TARGET_SELECTED)
{
if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_OPPONENT_LEFT)
if (gAiBattleData->chosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_OPPONENT_LEFT)
StringAppend(gStringVar1, COMPOUND_STRING(" -{UP_ARROW}"));
else if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_OPPONENT_RIGHT)
else if (gAiBattleData->chosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_OPPONENT_RIGHT)
StringAppend(gStringVar1, COMPOUND_STRING(" {UP_ARROW}-"));
else if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_PLAYER_LEFT)
else if (gAiBattleData->chosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_PLAYER_LEFT)
StringAppend(gStringVar1, COMPOUND_STRING(" {DOWN_ARROW}-"));
else if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_PLAYER_RIGHT)
else if (gAiBattleData->chosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_PLAYER_RIGHT)
StringAppend(gStringVar1, COMPOUND_STRING(" {DOWN_ARROW}-"));
}
else if (moveTarget == MOVE_TARGET_BOTH)

View File

@ -349,8 +349,8 @@ static void PlayerPartnerHandleChooseMove(u32 battler)
u8 chosenMoveId;
struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]);
chosenMoveId = gBattleStruct->aiMoveOrAction[battler];
gBattlerTarget = gBattleStruct->aiChosenTarget[battler];
chosenMoveId = gAiBattleData->moveOrAction[battler];
gBattlerTarget = gAiBattleData->chosenTarget[battler];
u32 moveTarget = GetBattlerMoveTargetType(battler, moveInfo->moves[chosenMoveId]);
if (moveTarget & MOVE_TARGET_USER)

View File

@ -25,6 +25,7 @@
#include "text.h"
#include "constants/abilities.h"
#include "constants/songs.h"
#include "pokemon_animation.h"
static EWRAM_DATA u8 sLinkSendTaskId = 0;
static EWRAM_DATA u8 sLinkReceiveTaskId = 0;
@ -42,6 +43,9 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId);
static void Task_StartSendOutAnim(u8 taskId);
static void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite);
static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite);
static u32 ReturnAnimIdForBattler(bool32 isPlayerSide, u32 specificBattler);
static void LaunchKOAnimation(u32 battlerId, u16 animId, bool32 isFront);
static void AnimateMonAfterKnockout(u32 battler);
void HandleLinkBattleSetup(void)
{
@ -2571,6 +2575,7 @@ void BtlController_HandleTrainerSlideBack(u32 battler, s16 data0, bool32 startAn
void BtlController_HandleFaintAnimation(u32 battler)
{
SetHealthboxSpriteInvisible(gHealthboxSpriteIds[battler]);
if (gBattleSpritesDataPtr->healthBoxesData[battler].animationState == 0)
{
if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute)
@ -2601,6 +2606,7 @@ void BtlController_HandleFaintAnimation(u32 battler)
// The player's sprite is removed in Controller_FaintPlayerMon. Controller_FaintOpponentMon only removes the healthbox once the sprite is removed by SpriteCB_FaintOpponentMon.
}
}
AnimateMonAfterKnockout(battler);
}
#undef sSpeedX
@ -3015,3 +3021,48 @@ void BtlController_HandleBattleAnimation(u32 battler, bool32 ignoreSE, bool32 up
BattleTv_SetDataBasedOnAnimation(animationId);
}
}
static void AnimateMonAfterKnockout(u32 battler)
{
if (B_ANIMATE_MON_AFTER_KO == FALSE)
return;
u32 oppositeBattler = BATTLE_OPPOSITE(battler);
u32 partnerBattler = BATTLE_PARTNER(oppositeBattler);
bool32 wasPlayerSideKnockedOut = (GetBattlerSide(battler) == B_SIDE_PLAYER);
if (IsBattlerAlive(oppositeBattler))
LaunchKOAnimation(oppositeBattler, ReturnAnimIdForBattler(wasPlayerSideKnockedOut, oppositeBattler), wasPlayerSideKnockedOut);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsBattlerAlive(partnerBattler))
LaunchKOAnimation(partnerBattler, ReturnAnimIdForBattler(wasPlayerSideKnockedOut, partnerBattler), wasPlayerSideKnockedOut);
}
static void LaunchKOAnimation(u32 battlerId, u16 animId, bool32 isFront)
{
u32 species = gBattleMons[battlerId].species;
u32 spriteId = gBattlerSpriteIds[battlerId];
if (isFront)
{
LaunchAnimationTaskForFrontSprite(&gSprites[spriteId], animId);
if (HasTwoFramesAnimation(species))
StartSpriteAnim(&gSprites[spriteId], 1);
}
else
{
LaunchAnimationTaskForBackSprite(&gSprites[spriteId], animId);
}
PlayCry_Normal(species, CRY_PRIORITY_NORMAL);
}
static u32 ReturnAnimIdForBattler(bool32 wasPlayerSideKnockedOut, u32 specificBattler)
{
if (wasPlayerSideKnockedOut)
return gSpeciesInfo[gBattleMons[specificBattler].species].frontAnimId;
else
return GetSpeciesBackAnimSet(gBattleMons[specificBattler].species);
}

View File

@ -218,7 +218,7 @@ enum
LIST_AI_CHECK_BAD_MOVE,
LIST_AI_TRY_TO_FAINT,
LIST_AI_CHECK_VIABILITY,
LIST_AI_SETUP_FIRST_TURN,
LIST_AI_FORCE_SETUP_FIRST_TURN,
LIST_AI_RISKY,
LIST_AI_TRY_TO_2HKO,
LIST_AI_PREFER_BATON_PASS,
@ -227,13 +227,20 @@ enum
LIST_AI_POWERFUL_STATUS,
LIST_AI_NEGATE_UNAWARE,
LIST_AI_WILL_SUICIDE,
LIST_AI_HELP_PARTNER,
LIST_AI_PREFER_STATUS_MOVES,
LIST_AI_STALL,
LIST_AI_SMART_SWITCHING,
LIST_AI_ACE_POKEMON,
LIST_AI_OMNISCIENT,
LIST_AI_SMART_MON_CHOICES,
LIST_AI_CONSERVATIVE,
LIST_AI_SEQUENCE_SWITCHING,
LIST_AI_DOUBLE_ACE_POKEMON,
LIST_AI_WEIGH_ABILITY_PREDICTION,
LIST_AI_PREFER_HIGHEST_DAMAGE_MOVE,
LIST_AI_PREDICT_SWITCH,
LIST_AI_PREDICT_INCOMING_MON,
LIST_AI_DYNAMIC_FUNC,
LIST_AI_ROAMING,
LIST_AI_SAFARI,
LIST_AI_FIRST_BATTLE,
@ -383,7 +390,7 @@ static const u8 sText_Swamp[] = _("Swamp");
static const u8 sText_CheckBadMove[] = _("Check Bad Move");
static const u8 sText_TryToFaint[] = _("Try to Faint");
static const u8 sText_CheckViability[] = _("Check Viability");
static const u8 sText_SetUpFirstTurn[] = _("Setup First Turn");
static const u8 sText_ForceSetupFirstTurn[] = _("Force Setup First Turn");
static const u8 sText_Risky[] = _("Risky");
static const u8 sText_TryTo2HKO[] = _("Try to 2HKO");
static const u8 sText_PreferBatonPass[] = _("Prefer Baton Pass");
@ -392,13 +399,20 @@ static const u8 sText_HpAware[] = _("HP Aware");
static const u8 sText_PowerfulStatus[] = _("Powerful Status");
static const u8 sText_NegateUnaware[] = _("Negate Unaware");
static const u8 sText_WillSuicide[] = _("Will Suicide");
static const u8 sText_HelpPartner[] = _("Help Partner");
static const u8 sText_PreferStatusMoves[] = _("Prefer Status Moves");
static const u8 sText_Stall[] = _("Stall");
static const u8 sText_SmartSwitching[] = _("Smart Switching");
static const u8 sText_AcePokemon[] = _("Ace Pokemon");
static const u8 sText_AcePokemon[] = _("Ace Pokémon");
static const u8 sText_Omniscient[] = _("Omniscient");
static const u8 sText_SmartMonChoices[] = _("Smart Mon Choices");
static const u8 sText_Conservative[] = _("Conservative");
static const u8 sText_SequenceSwitching[] = _("Sequence Switching");
static const u8 sText_DoubleAcePokemon[] = _("Double Ace Pokémon");
static const u8 sText_WeighAbilityPrediction[] = _("Weigh Ability Prediction");
static const u8 sText_PreferHighestDamageMove[] = _("Prefer Highest Damage Move");
static const u8 sText_PredictSwitch[] = _("Predict Switch");
static const u8 sText_PredictIncomingMon[] = _("Predict Incoming Mon");
static const u8 sText_DynamicFunc[] = _("Dynamic Func");
static const u8 sText_Roaming[] = _("Roaming");
static const u8 sText_Safari[] = _("Safari");
static const u8 sText_FirstBattle[] = _("First Battle");
@ -479,7 +493,7 @@ static const struct BitfieldInfo sAIBitfield[] =
{/*Check Bad Move*/ 1, 0},
{/*Try to Faint*/ 1, 1},
{/*Check Viability*/ 1, 2},
{/*Setup First Turn*/ 1, 3},
{/*Force Setup First Turn*/ 1, 3},
{/*Risky*/ 1, 4},
{/*Prefer Strongest Move*/ 1, 5},
{/*Prefer Baton Pass*/ 1, 6},
@ -488,16 +502,20 @@ static const struct BitfieldInfo sAIBitfield[] =
{/*Powerful Status*/ 1, 9},
{/*Negate Unaware*/ 1, 10},
{/*Will Suicide*/ 1, 11},
{/*Help Partner*/ 1, 12},
{/*Prefer Status Moves*/ 1, 13},
{/*Stall*/ 1, 14},
{/*Smart Switching*/ 1, 15},
{/*Ace Pokemon*/ 1, 16},
{/*Omniscient*/ 1, 17},
{/*Smart Mon Choices*/ 1, 18},
{/*Ace Pokemon*/ 1, 16},
{/*Omniscient*/ 1, 17},
{/*Smart Mon Choices*/ 1, 18},
{/*Prefer Status Moves*/ 1, 12},
{/*Stall*/ 1, 13},
{/*Smart Switching*/ 1, 14},
{/*Ace Pokemon*/ 1, 15},
{/*Omniscient*/ 1, 16},
{/*Smart Mon Choices*/ 1, 17},
{/*Conservative*/ 1, 18},
{/*Sequence Switching*/ 1, 19},
{/*Double Ace Pokemon*/ 1, 20},
{/*Weigh Ability Prediction*/ 1, 21},
{/*Prefer Highest Damage Move*/ 1, 22},
{/*Predict Switch*/ 1, 23},
{/*Predict Incoming Mon*/ 1, 24},
{/*Dynamic Func*/ 1, 28},
{/*Roaming*/ 1, 29},
{/*Safari*/ 1, 30},
{/*First Battle*/ 1, 31},
@ -626,7 +644,7 @@ static const struct ListMenuItem sAIListItems[] =
{sText_CheckBadMove, LIST_AI_CHECK_BAD_MOVE},
{sText_TryToFaint, LIST_AI_TRY_TO_FAINT},
{sText_CheckViability, LIST_AI_CHECK_VIABILITY},
{sText_SetUpFirstTurn, LIST_AI_SETUP_FIRST_TURN},
{sText_ForceSetupFirstTurn, LIST_AI_FORCE_SETUP_FIRST_TURN},
{sText_Risky, LIST_AI_RISKY},
{sText_TryTo2HKO, LIST_AI_TRY_TO_2HKO},
{sText_PreferBatonPass, LIST_AI_PREFER_BATON_PASS},
@ -635,13 +653,20 @@ static const struct ListMenuItem sAIListItems[] =
{sText_PowerfulStatus, LIST_AI_POWERFUL_STATUS},
{sText_NegateUnaware, LIST_AI_NEGATE_UNAWARE},
{sText_WillSuicide, LIST_AI_WILL_SUICIDE},
{sText_HelpPartner, LIST_AI_HELP_PARTNER},
{sText_PreferStatusMoves, LIST_AI_PREFER_STATUS_MOVES},
{sText_Stall, LIST_AI_STALL},
{sText_SmartSwitching, LIST_AI_SMART_SWITCHING},
{sText_AcePokemon, LIST_AI_ACE_POKEMON},
{sText_Omniscient, LIST_AI_OMNISCIENT},
{sText_SmartMonChoices, LIST_AI_SMART_MON_CHOICES},
{sText_Conservative, LIST_AI_CONSERVATIVE},
{sText_SequenceSwitching, LIST_AI_SEQUENCE_SWITCHING},
{sText_DoubleAcePokemon, LIST_AI_DOUBLE_ACE_POKEMON},
{sText_WeighAbilityPrediction, LIST_AI_WEIGH_ABILITY_PREDICTION},
{sText_PreferHighestDamageMove, LIST_AI_PREFER_HIGHEST_DAMAGE_MOVE},
{sText_PredictSwitch, LIST_AI_PREDICT_SWITCH},
{sText_PredictIncomingMon, LIST_AI_PREDICT_INCOMING_MON},
{sText_DynamicFunc, LIST_AI_DYNAMIC_FUNC},
{sText_Roaming, LIST_AI_ROAMING},
{sText_Safari, LIST_AI_SAFARI},
{sText_FirstBattle, LIST_AI_FIRST_BATTLE},
@ -941,12 +966,12 @@ static void PutMovesPointsText(struct BattleDebugMenu *data)
continue;
battlerDef = gSprites[data->spriteIds.aiIconSpriteIds[j]].data[0];
ConvertIntToDecimalStringN(text,
gBattleStruct->aiFinalScore[data->aiBattlerId][battlerDef][i],
gAiBattleData->finalScore[data->aiBattlerId][battlerDef][i],
STR_CONV_MODE_RIGHT_ALIGN, 3);
AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 83 + count * 54, i * 15, 0, NULL);
ConvertIntToDecimalStringN(text,
AI_DATA->simulatedDmg[data->aiBattlerId][battlerDef][i].expected,
AI_GetDamage(data->aiBattlerId, battlerDef, i, AI_ATTACKING, AI_DATA),
STR_CONV_MODE_RIGHT_ALIGN, 3);
AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 110 + count * 54, i * 15, 0, NULL);
@ -2580,8 +2605,8 @@ static const u8 *const sHoldEffectNames[] =
[HOLD_EFFECT_COVERT_CLOAK] = sText_HoldEffectCovertCloak,
[HOLD_EFFECT_LOADED_DICE] = sText_HoldEffectLoadedDice,
[HOLD_EFFECT_BOOSTER_ENERGY] = sText_HoldEffectBoosterEnergy,
[HOLD_EFFECT_BERSERK_GENE] = sText_HoldEffectBerserkGene,
[HOLD_EFFECT_OGERPON_MASK] = sText_HoldEffectOgerponMask,
[HOLD_EFFECT_BERSERK_GENE] = sText_HoldEffectBerserkGene,
};
static const u8 *GetHoldEffectName(u16 holdEffect)
{

View File

@ -489,3 +489,20 @@ void BS_JumpIfDynamaxed(void)
else
gBattlescriptCurrInstr = cmd->nextInstr;
}
void BS_UndoDynamax(void)
{
NATIVE_ARGS(u8 battler);
u32 battler = GetBattlerForBattleScript(cmd->battler);
if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX)
{
BattleScriptPushCursor();
UndoDynamax(battler);
gBattleScripting.battler = battler;
gBattlescriptCurrInstr = BattleScript_DynamaxEnds_Ret;
return;
}
gBattlescriptCurrInstr = cmd->nextInstr;
}

View File

@ -79,13 +79,9 @@ bool32 ShouldTrainerBattlerUseGimmick(u32 battler, enum Gimmick gimmick)
// Check the trainer party data to see if a gimmick is intended.
else
{
bool32 isSecondTrainer = (GetBattlerPosition(battler) == B_POSITION_OPPONENT_RIGHT) && (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT;
u16 trainerId = isSecondTrainer ? TRAINER_BATTLE_PARAM.opponentB : TRAINER_BATTLE_PARAM.opponentA;
const struct TrainerMon *mon = &GetTrainerPartyFromId(trainerId)[isSecondTrainer ? gBattlerPartyIndexes[battler] - MULTI_PARTY_SIZE : gBattlerPartyIndexes[battler]];
if (gimmick == GIMMICK_TERA && mon->teraType != TYPE_NONE)
if (gimmick == GIMMICK_TERA && gBattleStruct->opponentMonCanTera & 1 << gBattlerPartyIndexes[battler])
return TRUE;
if (gimmick == GIMMICK_DYNAMAX && mon->shouldUseDynamax)
if (gimmick == GIMMICK_DYNAMAX && gBattleStruct->opponentMonCanDynamax & 1 << gBattlerPartyIndexes[battler])
return TRUE;
}
@ -204,6 +200,7 @@ static void SpriteCb_GimmickTrigger(struct Sprite *sprite)
{
s32 xSlide, xPriority, xOptimal;
s32 yDiff;
s32 xHealthbox = gSprites[gHealthboxSpriteIds[sprite->tBattler]].x;
if (IsDoubleBattle())
{
@ -222,25 +219,29 @@ static void SpriteCb_GimmickTrigger(struct Sprite *sprite)
if (sprite->tHide)
{
if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
if (sprite->x < xHealthbox - xSlide)
sprite->x++;
if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority)
if (sprite->x >= xHealthbox - xPriority)
sprite->oam.priority = 2;
else
sprite->oam.priority = 1;
sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff;
sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff;
if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
if (sprite->x == xHealthbox - xSlide)
DestroyGimmickTriggerSprite();
}
else
{
if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal)
// Edge case: in doubles, if selecting move and next mon's action too fast, the second battler's gimmick icon uses the x from the first battler's gimmick icon
if (sprite->y != gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff)
sprite->x = xHealthbox - xSlide;
if (sprite->x > xHealthbox - xOptimal)
sprite->x--;
if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority)
if (sprite->x >= xHealthbox - xPriority)
sprite->oam.priority = 2;
else
sprite->oam.priority = 1;

View File

@ -3042,6 +3042,9 @@ static void DestroyLastUsedBallGfx(struct Sprite *sprite)
void TryToAddMoveInfoWindow(void)
{
if (!B_SHOW_MOVE_DESCRIPTION)
return;
LoadSpritePalette(&sSpritePalette_AbilityPopUp);
if (GetSpriteTileStartByTag(MOVE_INFO_WINDOW_TAG) == 0xFFFF)
LoadSpriteSheet(&sSpriteSheet_MoveInfoWindow);
@ -3104,7 +3107,7 @@ static void SpriteCB_LastUsedBall(struct Sprite *sprite)
}
static void SpriteCB_MoveInfoWin(struct Sprite *sprite)
{
{
if (sprite->sHide)
{
if (sprite->x != LAST_BALL_WIN_X_0)

View File

@ -208,6 +208,7 @@ EWRAM_DATA u8 gSentPokesToOpponent[2] = {0};
EWRAM_DATA struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA struct BattleScripting gBattleScripting = {0};
EWRAM_DATA struct BattleStruct *gBattleStruct = NULL;
EWRAM_DATA struct AiBattleData *gAiBattleData = NULL;
EWRAM_DATA u8 *gLinkBattleSendBuffer = NULL;
EWRAM_DATA u8 *gLinkBattleRecvBuffer = NULL;
EWRAM_DATA struct BattleResources *gBattleResources = NULL;
@ -425,6 +426,10 @@ void CB2_InitBattle(void)
AllocateMonSpritesGfx();
RecordedBattle_ClearFrontierPassFlag();
#if T_SHOULD_RUN_MOVE_ANIM
gLoadFail = FALSE;
#endif // T_SHOULD_RUN_MOVE_ANIM
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
@ -1889,7 +1894,7 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer
const struct TrainerMon *partyData = trainer->party;
u32 otIdType = OT_ID_RANDOM_NO_SHINY;
u32 fixedOtId = 0;
u32 ability = 0;
u32 abilityNum = 0;
if (trainer->doubleBattle == TRUE)
personalityValue = 0x80;
@ -1928,25 +1933,25 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer
if (partyData[monIndex].ability != ABILITY_NONE)
{
const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[monIndex].species];
u32 maxAbilities = ARRAY_COUNT(speciesInfo->abilities);
for (ability = 0; ability < maxAbilities; ++ability)
u32 maxAbilityNum = ARRAY_COUNT(speciesInfo->abilities);
for (abilityNum = 0; abilityNum < maxAbilityNum; ++abilityNum)
{
if (speciesInfo->abilities[ability] == partyData[monIndex].ability)
if (speciesInfo->abilities[abilityNum] == partyData[monIndex].ability)
break;
}
if (ability >= maxAbilities)
ability = 0;
if (abilityNum >= maxAbilityNum)
abilityNum = 0;
}
else if (B_TRAINER_MON_RANDOM_ABILITY)
{
const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[monIndex].species];
ability = personalityHash % 3;
while (speciesInfo->abilities[ability] == ABILITY_NONE)
abilityNum = personalityHash % 3;
while (speciesInfo->abilities[abilityNum] == ABILITY_NONE)
{
ability--;
abilityNum--;
}
}
SetMonData(&party[i], MON_DATA_ABILITY_NUM, &ability);
SetMonData(&party[i], MON_DATA_ABILITY_NUM, &abilityNum);
SetMonData(&party[i], MON_DATA_FRIENDSHIP, &(partyData[monIndex].friendship));
if (partyData[monIndex].ball != ITEM_NONE)
{
@ -1965,6 +1970,8 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer
if (partyData[monIndex].dynamaxLevel > 0)
{
u32 data = partyData[monIndex].dynamaxLevel;
if (partyData[monIndex].shouldUseDynamax)
gBattleStruct->opponentMonCanDynamax |= 1 << i;
SetMonData(&party[i], MON_DATA_DYNAMAX_LEVEL, &data);
}
if (partyData[monIndex].gigantamaxFactor)
@ -1974,6 +1981,7 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer
}
if (partyData[monIndex].teraType > 0)
{
gBattleStruct->opponentMonCanTera |= 1 << i;
u32 data = partyData[monIndex].teraType;
SetMonData(&party[i], MON_DATA_TERA_TYPE, &data);
}
@ -3392,9 +3400,6 @@ const u8* FaintClearSetData(u32 battler)
}
}
// Clear Dynamax data
UndoDynamax(battler);
return result;
}
@ -3514,16 +3519,9 @@ static void DoBattleIntro(void)
}
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
gBattleStruct->introState++;
}
else // Skip party summary since it is a wild battle.
{
if (B_FAST_INTRO_PKMN_TEXT == TRUE)
gBattleStruct->introState = BATTLE_INTRO_STATE_INTRO_TEXT; // Don't wait for sprite, print message at the same time.
else
gBattleStruct->introState++; // Wait for sprite to load.
}
gBattleStruct->introState = BATTLE_INTRO_STATE_INTRO_TEXT;
break;
case BATTLE_INTRO_STATE_DRAW_PARTY_SUMMARY:
if (!gBattleControllerExecFlags)
@ -3879,7 +3877,7 @@ static void TryDoEventsBeforeFirstTurn(void)
gBattleStruct->monToSwitchIntoId[i] = PARTY_SIZE;
gChosenActionByBattler[i] = B_ACTION_NONE;
gChosenMoveByBattler[i] = MOVE_NONE;
gBattleStruct->battlerState[i].absentBattlerFlags = (gAbsentBattlerFlags & (1u << i) ? TRUE : FALSE);
gBattleStruct->battlerState[i].absent = (gAbsentBattlerFlags & (1u << i) ? TRUE : FALSE);
}
TurnValuesCleanUp(FALSE);
SpecialStatusesClear();
@ -3989,7 +3987,7 @@ void BattleTurnPassed(void)
{
gChosenActionByBattler[i] = B_ACTION_NONE;
gChosenMoveByBattler[i] = MOVE_NONE;
gBattleStruct->battlerState[i].absentBattlerFlags = (gAbsentBattlerFlags & (1u << i) ? TRUE : FALSE);
gBattleStruct->battlerState[i].absent = (gAbsentBattlerFlags & (1u << i) ? TRUE : FALSE);
gBattleStruct->monToSwitchIntoId[i] = PARTY_SIZE;
gStatuses4[i] &= ~STATUS4_ELECTRIFIED;
gBattleMons[i].status2 &= ~STATUS2_FLINCHED;
@ -4197,7 +4195,7 @@ static void HandleTurnActionSelectionState(void)
SetupAISwitchingData(battler, switchType);
// Do scoring
gBattleStruct->aiMoveOrAction[battler] = BattleAI_ChooseMoveOrAction(battler);
gAiBattleData->moveOrAction[battler] = BattleAI_ChooseMoveOrAction(battler);
AI_DATA->aiCalcInProgress = FALSE;
}
// fallthrough
@ -4205,10 +4203,10 @@ static void HandleTurnActionSelectionState(void)
gBattleStruct->monToSwitchIntoId[battler] = PARTY_SIZE;
if (gBattleTypeFlags & BATTLE_TYPE_MULTI
|| (position & BIT_FLANK) == B_FLANK_LEFT
|| gBattleStruct->battlerState[GetBattlerAtPosition(BATTLE_PARTNER(position))].absentBattlerFlags
|| gBattleStruct->battlerState[GetBattlerAtPosition(BATTLE_PARTNER(position))].absent
|| gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] == STATE_WAIT_ACTION_CONFIRMED)
{
if (gBattleStruct->battlerState[battler].absentBattlerFlags || gBattleStruct->battlerState[battler].commandingDondozo)
if (gBattleStruct->battlerState[battler].absent || gBattleStruct->battlerState[battler].commandingDondozo)
{
gChosenActionByBattler[battler] = B_ACTION_NOTHING_FAINTED;
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
@ -4583,7 +4581,7 @@ static void HandleTurnActionSelectionState(void)
if (((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !IsDoubleBattle())
|| (position & BIT_FLANK) != B_FLANK_LEFT
|| gBattleStruct->battlerState[GetBattlerAtPosition(BATTLE_PARTNER(position))].absentBattlerFlags)
|| gBattleStruct->battlerState[GetBattlerAtPosition(BATTLE_PARTNER(position))].absent)
{
BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_STOP_BOUNCE, i);
}
@ -5633,12 +5631,15 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void)
{
gIsFishingEncounter = FALSE;
gIsSurfingEncounter = FALSE;
if (gDexNavBattle && (gBattleOutcome == B_OUTCOME_WON || gBattleOutcome == B_OUTCOME_CAUGHT))
if (gDexNavSpecies && (gBattleOutcome == B_OUTCOME_WON || gBattleOutcome == B_OUTCOME_CAUGHT))
{
IncrementDexNavChain();
TryIncrementSpeciesSearchLevel();
}
else
gSaveBlock3Ptr->dexNavChain = 0;
gDexNavBattle = FALSE;
gDexNavSpecies = SPECIES_NONE;
ResetSpriteData();
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK
| BATTLE_TYPE_RECORDED_LINK
@ -5665,7 +5666,7 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void)
{
// To account for Battle Factory and Slateport Battle Tent, enemy parties are zeroed out in the facilitites respective src/xxx.c files
// The ZeroEnemyPartyMons() call happens in SaveXXXChallenge function (eg. SaveFactoryChallenge)
if (!(gBattleTypeFlags & BATTLE_TYPE_FRONTIER))
if (!(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_ROAMER)))
{
ZeroEnemyPartyMons();
}
@ -5738,6 +5739,7 @@ static void ReturnFromBattleToOverworld(void)
if (gBattleTypeFlags & BATTLE_TYPE_ROAMER)
{
UpdateRoamerHPStatus(&gEnemyParty[0]);
ZeroEnemyPartyMons();
#ifndef BUGFIX
if ((gBattleOutcome & B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT)
@ -5959,19 +5961,19 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost)
case SPECIES_TAUROS_PALDEA_COMBAT:
case SPECIES_TAUROS_PALDEA_BLAZE:
case SPECIES_TAUROS_PALDEA_AQUA:
return type2;
return gSpeciesInfo[species].types[1];
}
break;
case EFFECT_IVY_CUDGEL:
switch (species)
{
case SPECIES_OGERPON_WELLSPRING:
case SPECIES_OGERPON_HEARTHFLAME:
case SPECIES_OGERPON_CORNERSTONE:
case SPECIES_OGERPON_WELLSPRING_TERA:
case SPECIES_OGERPON_HEARTHFLAME:
case SPECIES_OGERPON_HEARTHFLAME_TERA:
case SPECIES_OGERPON_CORNERSTONE:
case SPECIES_OGERPON_CORNERSTONE_TERA:
return type2;
return gSpeciesInfo[species].types[1];
}
break;
case EFFECT_NATURAL_GIFT:

View File

@ -636,7 +636,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
[STRINGID_PROTEANTYPECHANGE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} transformed it into the {B_BUFF1} type!"),
[STRINGID_SYMBIOSISITEMPASS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} passed its {B_LAST_ITEM} to {B_EFF_NAME_WITH_PREFIX2} through {B_LAST_ABILITY}!"),
[STRINGID_STEALTHROCKDMG] = COMPOUND_STRING("Pointed stones dug into {B_SCR_NAME_WITH_PREFIX2}!"),
[STRINGID_TOXICSPIKESABSORBED] = COMPOUND_STRING("The poison spikes disappeared from the ground around {B_ATK_TEAM2} team!"),
[STRINGID_TOXICSPIKESABSORBED] = COMPOUND_STRING("The poison spikes disappeared from the ground around {B_SCR_TEAM2} team!"),
[STRINGID_TOXICSPIKESPOISONED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} was poisoned!"),
[STRINGID_STICKYWEBSWITCHIN] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} was caught in a sticky web!"),
[STRINGID_HEALINGWISHCAMETRUE] = COMPOUND_STRING("The healing wish came true for {B_ATK_NAME_WITH_PREFIX2}!"),
@ -893,6 +893,10 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
[STRINGID_ITDOESNTAFFECTTWOFOES] = COMPOUND_STRING("It doesn't affect {B_DEF_NAME_WITH_PREFIX2} and {B_DEF_PARTNER_NAME}…"),
[STRINGID_SENDCAUGHTMONPARTYORBOX] = COMPOUND_STRING("Add {B_DEF_NAME} to your party?"),
[STRINGID_PKMNSENTTOPCAFTERCATCH] = gText_PkmnSentToPCAfterCatch,
[STRINGID_PKMNDYNAMAXED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} grew huge\ninto its Dynamax form!"),
[STRINGID_PKMNGIGANTAMAXED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} grew huge\ninto its Gigantamax form!"),
[STRINGID_TIMETODYNAMAX] = COMPOUND_STRING("Time to Dynamax!"),
[STRINGID_TIMETOGIGANTAMAX] = COMPOUND_STRING("Time to Gigantamax!"),
};
const u16 gTrainerUsedItemStringIds[] =
@ -3113,6 +3117,18 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize)
else
toCpy = sText_Opposing2;
break;
case B_TXT_SCR_TEAM1:
if (GetBattlerSide(gBattleScripting.battler) == B_SIDE_PLAYER)
toCpy = sText_Your1;
else
toCpy = sText_Opposing1;
break;
case B_TXT_SCR_TEAM2:
if (GetBattlerSide(gBattleScripting.battler) == B_SIDE_PLAYER)
toCpy = sText_Your2;
else
toCpy = sText_Opposing2;
break;
case B_TXT_ATK_NAME_WITH_PREFIX2:
HANDLE_NICKNAME_STRING_LOWERCASE(gBattlerAttacker)
break;

File diff suppressed because it is too large Load Diff

View File

@ -316,7 +316,7 @@ bool32 HandleMoveTargetRedirection(void)
for (battler = 0; battler < gBattlersCount; battler++)
{
ability = GetBattlerAbility(battler);
if ((B_REDIRECT_ABILITY_ALLIES >= GEN_4 || !IsAlly(gBattlerAttacker, battler))
if ((B_REDIRECT_ABILITY_ALLIES >= GEN_4 || !IsBattlerAlly(gBattlerAttacker, battler))
&& battler != gBattlerAttacker
&& gBattleStruct->moveTarget[gBattlerAttacker] != battler
&& ((ability == ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC)
@ -354,7 +354,7 @@ void HandleAction_UseMove(void)
u32 i;
gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
if (gBattleStruct->battlerState[gBattlerAttacker].absentBattlerFlags
if (gBattleStruct->battlerState[gBattlerAttacker].absent
|| gBattleStruct->battlerState[gBattlerAttacker].commandingDondozo
|| !IsBattlerAlive(gBattlerAttacker))
{
@ -536,8 +536,6 @@ void HandleAction_Switch(void)
if (gBattleResults.playerSwitchesCounter < 255)
gBattleResults.playerSwitchesCounter++;
if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX)
UndoDynamax(gBattlerAttacker); // this is better performed here instead of SwitchInClearSetData
TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_SWITCH);
}
@ -853,6 +851,8 @@ void HandleAction_ActionFinished(void)
gBattleScripting.animTurn = 0;
gBattleScripting.animTargetsHit = 0;
gBattleStruct->dynamicMoveType = 0;
gBattleStruct->bouncedMoveIsUsed = FALSE;
gBattleStruct->snatchedMoveIsUsed = FALSE;
gBattleScripting.moveendState = 0;
gBattleCommunication[3] = 0;
gBattleCommunication[4] = 0;
@ -1689,6 +1689,16 @@ s32 GetDrainedBigRootHp(u32 battler, s32 hp)
return hp * -1;
}
// This should always be the last check. Otherwise the ability might be recorded when it is not supposed to be
bool32 IsMagicGuardProtected(u32 battler, u32 ability)
{
if (ability != ABILITY_MAGIC_GUARD)
return FALSE;
RecordAbilityBattle(battler, ability);
return TRUE;
}
#define FAINTED_ACTIONS_MAX_CASE 7
bool32 HandleFaintedMonActions(void)
{
@ -2269,28 +2279,6 @@ static void CancellerDynamaxBlocked(u32 *effect)
}
}
static void CancellerPowderMove(u32 *effect)
{
if (IsPowderMove(gCurrentMove) && (gBattlerAttacker != gBattlerTarget))
{
if (B_POWDER_GRASS >= GEN_6
&& (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS) || GetBattlerAbility(gBattlerTarget) == ABILITY_OVERCOAT))
{
gBattlerAbility = gBattlerTarget;
*effect = 1;
}
else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_SAFETY_GOGGLES)
{
RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_SAFETY_GOGGLES);
gLastUsedItem = gBattleMons[gBattlerTarget].item;
*effect = 1;
}
if (*effect != 0)
gBattlescriptCurrInstr = BattleScript_PowderMoveNoEffect;
}
}
static void CancellerPowderStatus(u32 *effect)
{
if (TryActivatePowderStatus(gCurrentMove))
@ -2523,7 +2511,6 @@ static const MoveSuccessOrderCancellers sMoveSuccessOrderCancellers[] =
[CANCELLER_STANCE_CHANGE_2] = CancellerStanceChangeTwo,
[CANCELLER_WEATHER_PRIMAL] = CancellerWeatherPrimal,
[CANCELLER_DYNAMAX_BLOCKED] = CancellerDynamaxBlocked,
[CANCELLER_POWDER_MOVE] = CancellerPowderMove,
[CANCELLER_POWDER_STATUS] = CancellerPowderStatus,
[CANCELLER_PROTEAN] = CancellerProtean,
[CANCELLER_PSYCHIC_TERRAIN] = CancellerPsychicTerrain,
@ -2922,7 +2909,7 @@ static void ChooseStatBoostAnimation(u32 battler)
bool32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 abilityDef, enum AbilityEffectOptions option)
{
const u8 *battleScriptBlocksMove = NULL;
u32 atkPriority = AI_DATA->aiCalcInProgress ? GetBattleMovePriority(battlerAtk, move) : GetChosenMovePriority(battlerAtk);
s32 atkPriority = AI_DATA->aiCalcInProgress ? GetBattleMovePriority(battlerAtk, move) : GetChosenMovePriority(battlerAtk);
u32 moveTarget = GetBattlerMoveTargetType(battlerAtk, move);
u32 battlerAbility = battlerDef;
@ -3987,6 +3974,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
if (!gSpecialStatuses[battler].switchInAbilityDone
&& IsDoubleBattle()
&& !(gStatuses3[partner] & STATUS3_HEAL_BLOCK)
&& gBattleMons[partner].hp < gBattleMons[partner].maxHP
&& IsBattlerAlive(partner))
{
@ -4412,25 +4400,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
effect++;
}
break;
case ABILITY_EMERGENCY_EXIT:
case ABILITY_WIMP_OUT:
if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT)
&& IsBattlerTurnDamaged(gBattlerTarget)
&& IsBattlerAlive(battler)
// Had more than half of hp before, now has less
&& HadMoreThanHalfHpNowDoesnt(battler)
&& (gMultiHitCounter == 0 || gMultiHitCounter == 1)
&& !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove))
&& (CanBattlerSwitch(battler) || !(gBattleTypeFlags & BATTLE_TYPE_TRAINER))
&& !(gBattleTypeFlags & BATTLE_TYPE_ARENA)
&& CountUsablePartyMons(battler) > 0
// Not currently held by Sky Drop
&& !(gStatuses3[battler] & STATUS3_SKY_DROPPED))
{
gDisableStructs[battler].startEmergencyExit = TRUE;
effect++;
}
break;
case ABILITY_WEAK_ARMOR:
if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT)
&& IsBattlerTurnDamaged(gBattlerTarget)
@ -4596,6 +4565,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
}
else
{
gBattleScripting.battler = gBattlerTarget;
gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 4;
if (gBattleStruct->moveDamage[gBattlerAttacker] == 0)
gBattleStruct->moveDamage[gBattlerAttacker] = 1;
@ -4618,6 +4588,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
break;
}
gBattleScripting.battler = gBattlerTarget;
gBattleStruct->moveDamage[gBattlerAttacker] = gBattleStruct->moveDamage[gBattlerTarget];
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_AftermathDmg;
@ -5308,7 +5279,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
gDisableStructs[battler].terrainAbilityDone = TRUE;
ChangeTypeBasedOnTerrain(battler);
gBattlerAbility = gBattleScripting.battler = battler;
BattleScriptPushCursorAndCallback(BattleScript_MimicryActivates_End3);
BattleScriptPushCursorAndCallback(BattleScript_MimicryActivates);
effect++;
}
break;
@ -5371,8 +5342,11 @@ bool32 IsMoldBreakerTypeAbility(u32 battler, u32 ability)
|| (ability == ABILITY_MYCELIUM_MIGHT && IsBattleMoveStatus(gCurrentMove)));
}
static inline bool32 CanBreakThroughAbility(u32 battlerAtk, u32 battlerDef, u32 ability)
static inline bool32 CanBreakThroughAbility(u32 battlerAtk, u32 battlerDef, u32 ability, u32 hasAbilityShield)
{
if (hasAbilityShield || gBattleStruct->bypassMoldBreakerChecks)
return FALSE;
return ((IsMoldBreakerTypeAbility(battlerAtk, ability) || MoveIgnoresTargetAbility(gCurrentMove))
&& battlerDef != battlerAtk
&& gAbilitiesInfo[gBattleMons[battlerDef].ability].breakable
@ -5383,7 +5357,7 @@ static inline bool32 CanBreakThroughAbility(u32 battlerAtk, u32 battlerDef, u32
u32 GetBattlerAbility(u32 battler)
{
bool32 noAbilityShield = GetBattlerHoldEffectIgnoreAbility(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD;
bool32 hasAbilityShield = GetBattlerHoldEffectIgnoreAbility(battler, TRUE) == HOLD_EFFECT_ABILITY_SHIELD;
bool32 abilityCantBeSuppressed = gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed;
if (abilityCantBeSuppressed)
@ -5394,9 +5368,7 @@ u32 GetBattlerAbility(u32 battler)
&& gBattleMons[battler].ability == ABILITY_COMATOSE)
return ABILITY_NONE;
if (!gBattleStruct->bypassMoldBreakerChecks
&& noAbilityShield
&& CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability))
if (CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability, hasAbilityShield))
return ABILITY_NONE;
return gBattleMons[battler].ability;
@ -5405,14 +5377,12 @@ u32 GetBattlerAbility(u32 battler)
if (gStatuses3[battler] & STATUS3_GASTRO_ACID)
return ABILITY_NONE;
if (IsNeutralizingGasOnField()
&& gBattleMons[battler].ability != ABILITY_NEUTRALIZING_GAS
&& noAbilityShield)
if (!hasAbilityShield
&& IsNeutralizingGasOnField()
&& gBattleMons[battler].ability != ABILITY_NEUTRALIZING_GAS)
return ABILITY_NONE;
if (!gBattleStruct->bypassMoldBreakerChecks
&& noAbilityShield
&& CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability))
if (CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability, hasAbilityShield))
return ABILITY_NONE;
return gBattleMons[battler].ability;
@ -5461,16 +5431,25 @@ u32 IsAbilityOnFieldExcept(u32 battler, u32 ability)
u32 IsAbilityPreventingEscape(u32 battler)
{
u32 id;
if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST))
return 0;
if ((id = IsAbilityOnOpposingSide(battler, ABILITY_SHADOW_TAG))
&& (B_SHADOW_TAG_ESCAPE >= GEN_4 && GetBattlerAbility(battler) != ABILITY_SHADOW_TAG))
return id;
if ((id = IsAbilityOnOpposingSide(battler, ABILITY_ARENA_TRAP)) && IsBattlerGrounded(battler))
return id;
if ((id = IsAbilityOnOpposingSide(battler, ABILITY_MAGNET_PULL)) && IS_BATTLER_OF_TYPE(battler, TYPE_STEEL))
return id;
for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++)
{
if (battler == battlerDef || IsBattlerAlly(battler, battlerDef))
continue;
u32 ability = GetBattlerAbility(battlerDef);
if (ability == ABILITY_SHADOW_TAG && (B_SHADOW_TAG_ESCAPE <= GEN_3 || GetBattlerAbility(battler) != ABILITY_SHADOW_TAG))
return battlerDef + 1;
if (ability == ABILITY_ARENA_TRAP && IsBattlerGrounded(battler))
return battlerDef + 1;
if (ability == ABILITY_MAGNET_PULL && IS_BATTLER_OF_TYPE(battler, TYPE_STEEL))
return battlerDef + 1;
}
return 0;
}
@ -5955,8 +5934,6 @@ static u32 ItemHealHp(u32 battler, u32 itemId, enum ItemCaseId caseID, bool32 pe
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_ItemHealHP_RemoveItemRet;
}
if (gDisableStructs[battler].startEmergencyExit && GetNonDynamaxHP(battler) >= GetNonDynamaxMaxHP(battler) / 2)
gDisableStructs[battler].startEmergencyExit = FALSE;
return ITEM_HP_CHANGE;
}
@ -6077,7 +6054,7 @@ static inline u32 TryBoosterEnergy(u32 battler, enum ItemCaseId caseID)
return ITEM_NO_EFFECT;
}
static u32 RestoreWhiteHerbStats(u32 battler)
u32 RestoreWhiteHerbStats(u32 battler)
{
u32 i, effect = 0;
@ -6928,7 +6905,6 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn)
case HOLD_EFFECT_LIFE_ORB:
if (IsBattlerAlive(gBattlerAttacker)
&& (IsBattlerTurnDamaged(gBattlerTarget) || gBattleStruct->moveDamage[gBattlerTarget]) // Needs the second check in case of Substitute
&& !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove))
&& GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& !gSpecialStatuses[gBattlerAttacker].preventLifeOrbDamage)
@ -9169,9 +9145,24 @@ static inline s32 DoMoveDamageCalcVars(struct DamageCalculationData *damageCalcD
dmg *= DMG_ROLL_PERCENT_HI - RandomUniform(RNG_DAMAGE_MODIFIER, 0, DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO);
dmg /= 100;
}
else // Apply rest of modifiers in the ai function
{
if (dmg == 0)
dmg = 1;
return dmg;
}
if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA)
DAMAGE_APPLY_MODIFIER(GetTeraMultiplier(battlerAtk, damageCalcData->moveType));
dmg = ApplyModifiersAfterDmgRoll(dmg, damageCalcData, typeEffectivenessModifier, abilityAtk, abilityDef, holdEffectAtk, holdEffectDef);
if (dmg == 0)
dmg = 1;
return dmg;
}
s32 ApplyModifiersAfterDmgRoll(s32 dmg, struct DamageCalculationData *damageCalcData, uq4_12_t typeEffectivenessModifier, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk, u32 holdEffectDef)
{
if (GetActiveGimmick(damageCalcData->battlerAtk) == GIMMICK_TERA)
DAMAGE_APPLY_MODIFIER(GetTeraMultiplier(damageCalcData->battlerAtk, damageCalcData->moveType));
else
DAMAGE_APPLY_MODIFIER(GetSameTypeAttackBonusModifier(damageCalcData, abilityAtk));
DAMAGE_APPLY_MODIFIER(typeEffectivenessModifier);
@ -9179,8 +9170,6 @@ static inline s32 DoMoveDamageCalcVars(struct DamageCalculationData *damageCalcD
DAMAGE_APPLY_MODIFIER(GetZMaxMoveAgainstProtectionModifier(damageCalcData));
DAMAGE_APPLY_MODIFIER(GetOtherModifiers(damageCalcData, typeEffectivenessModifier, abilityAtk, abilityDef, holdEffectAtk, holdEffectDef));
if (dmg == 0)
dmg = 1;
return dmg;
}
@ -9598,11 +9587,11 @@ s32 GetStealthHazardDamageByTypesAndHP(enum TypeSideHazard hazardType, u8 type1,
s32 GetStealthHazardDamage(enum TypeSideHazard hazardType, u32 battler)
{
u8 type1 = gBattleMons[battler].types[0];
u8 type2 = gBattleMons[battler].types[1];
u32 types[3];
GetBattlerTypes(battler, FALSE, types);
u32 maxHp = gBattleMons[battler].maxHP;
return GetStealthHazardDamageByTypesAndHP(hazardType, type1, type2, maxHp);
return GetStealthHazardDamageByTypesAndHP(hazardType, types[0], types[1], maxHp);
}
bool32 IsPartnerMonFromSameTrainer(u32 battler)
@ -10076,18 +10065,52 @@ static u32 SwapMoveDamageCategory(u32 move)
return DAMAGE_CATEGORY_PHYSICAL;
}
u8 GetBattleMoveCategory(u32 moveId)
/*
The Global States gBattleStruct->categoryOverride and gBattleStruct->swapDamageCategory
can be removed but a lot of function arguments (battlerAtk and battlerDef) have to be added for this, about 50+.
This is potentially a good change because it is less likely to cause bugs in the future.
*/
u32 GetBattleMoveCategory(u32 move)
{
if (gBattleStruct != NULL && gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky, Tera Blast
return SwapMoveDamageCategory(moveId);
if (gBattleStruct != NULL && (IsZMove(moveId) || IsMaxMove(moveId))) // TODO: Might be buggy depending on when this is called.
return gBattleStruct->categoryOverride;
if (B_PHYSICAL_SPECIAL_SPLIT >= GEN_4)
return GetMoveCategory(moveId);
if (gMain.inBattle)
{
if (gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky, Tera Blast
return SwapMoveDamageCategory(move);
if (IsZMove(move) || IsMaxMove(move)) // TODO: Might be buggy depending on when this is called.
return gBattleStruct->categoryOverride;
if (IsBattleMoveStatus(move))
return DAMAGE_CATEGORY_STATUS;
}
if (IsBattleMoveStatus(moveId))
return DAMAGE_CATEGORY_STATUS;
return gTypesInfo[GetBattleMoveType(moveId)].damageCategory;
if (B_PHYSICAL_SPECIAL_SPLIT <= GEN_4)
return gTypesInfo[GetBattleMoveType(move)].damageCategory;
return GetMoveCategory(move);
}
void SetDynamicMoveCategory(u32 battlerAtk, u32 battlerDef, u32 move)
{
switch (GetMoveEffect(move))
{
case EFFECT_PHOTON_GEYSER:
gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL);
break;
case EFFECT_SHELL_SIDE_ARM:
if (gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL)
gBattleStruct->swapDamageCategory = TRUE;
break;
case EFFECT_TERA_BLAST:
if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA)
gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL;
break;
case EFFECT_TERA_STARSTORM:
if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && GET_BASE_SPECIES_ID(GetMonData(GetPartyBattlerData(battlerAtk), MON_DATA_SPECIES)) == SPECIES_TERAPAGOS)
gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL;
break;
default:
gBattleStruct->swapDamageCategory = FALSE;
break;
}
}
static bool32 TryRemoveScreens(u32 battler)
@ -10115,10 +10138,24 @@ static bool32 TryRemoveScreens(u32 battler)
static bool32 IsUnnerveAbilityOnOpposingSide(u32 battler)
{
if (IsAbilityOnOpposingSide(battler, ABILITY_UNNERVE)
|| IsAbilityOnOpposingSide(battler, ABILITY_AS_ONE_ICE_RIDER)
|| IsAbilityOnOpposingSide(battler, ABILITY_AS_ONE_SHADOW_RIDER))
return TRUE;
for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++)
{
if (battler == battlerDef || IsBattlerAlly(battler, battlerDef))
continue;
if (!IsBattlerAlive(battlerDef))
continue;
u32 ability = GetBattlerAbility(battlerDef);
switch (ability)
{
case ABILITY_UNNERVE:
case ABILITY_AS_ONE_ICE_RIDER:
case ABILITY_AS_ONE_SHADOW_RIDER:
return TRUE;
}
}
return FALSE;
}
@ -10999,7 +11036,65 @@ void ClearPursuitValuesIfSet(u32 battler)
bool32 HasWeatherEffect(void)
{
if (IsAbilityOnField(ABILITY_CLOUD_NINE) || IsAbilityOnField(ABILITY_AIR_LOCK))
return FALSE;
for (u32 battler = 0; battler < gBattlersCount; battler++)
{
if (!IsBattlerAlive(battler))
continue;
u32 ability = GetBattlerAbility(battler);
switch (ability)
{
case ABILITY_CLOUD_NINE:
case ABILITY_AIR_LOCK:
return FALSE;
}
}
return TRUE;
}
bool32 IsMovePowderBlocked(u32 battlerAtk, u32 battlerDef, u32 move)
{
bool32 effect = FALSE;
if (IsPowderMove(move) && (battlerAtk != battlerDef))
{
if (B_POWDER_GRASS >= GEN_6
&& (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) || GetBattlerAbility(battlerDef) == ABILITY_OVERCOAT))
{
gBattlerAbility = battlerDef;
RecordAbilityBattle(gBattlerTarget, ABILITY_OVERCOAT);
effect = TRUE;
}
else if (GetBattlerHoldEffect(battlerDef, TRUE) == HOLD_EFFECT_SAFETY_GOGGLES)
{
RecordItemEffectBattle(battlerDef, HOLD_EFFECT_SAFETY_GOGGLES);
gLastUsedItem = gBattleMons[battlerDef].item;
effect = TRUE;
}
if (effect)
gBattlescriptCurrInstr = BattleScript_PowderMoveNoEffect;
}
return effect;
}
bool32 EmergencyExitCanBeTriggered(u32 battler)
{
u32 ability = GetBattlerAbility(battler);
if (ability != ABILITY_EMERGENCY_EXIT && ability != ABILITY_WIMP_OUT)
return FALSE;
if (IsBattlerTurnDamaged(battler)
&& IsBattlerAlive(battler)
&& HadMoreThanHalfHpNowDoesnt(battler)
&& (CanBattlerSwitch(battler) || !(gBattleTypeFlags & BATTLE_TYPE_TRAINER))
&& !(gBattleTypeFlags & BATTLE_TYPE_ARENA)
&& CountUsablePartyMons(battler) > 0
&& !(gStatuses3[battler] & STATUS3_SKY_DROPPED))
return TRUE;
return FALSE;
}

View File

@ -18,6 +18,7 @@ void AllocateBattleResources(void)
InitTrainerHillBattleStruct();
gBattleStruct = AllocZeroed(sizeof(*gBattleStruct));
gAiBattleData = AllocZeroed(sizeof(*gAiBattleData));
#if B_FLAG_SKY_BATTLE
gBattleStruct->isSkyBattle = FlagGet(B_FLAG_SKY_BATTLE);
@ -55,6 +56,7 @@ void FreeBattleResources(void)
if (gBattleResources != NULL)
{
FREE_AND_SET_NULL(gBattleStruct);
FREE_AND_SET_NULL(gAiBattleData);
FREE_AND_SET_NULL(gBattleResources->secretBase);
FREE_AND_SET_NULL(gBattleResources->battleScriptsStack);

View File

@ -103,6 +103,7 @@ static const u8 sText_FollowMe[] = _("Follow Me");
static const u8 sText_RecoverHP[] = _("Recover HP");
static const u8 sText_HealAllyHP[] = _("Heal Replacement HP");
static const u8 sText_PowerColon[] = _("Power: ");
static const u8 sText_NoAdditionalEffect[] = _("No Additional Effect");
// Functions
bool32 IsZMove(u32 move)
@ -352,6 +353,10 @@ bool32 MoveSelectionDisplayZMove(u16 zmove, u32 battler)
PREPARE_STAT_BUFFER(gBattleTextBuff1, zEffect - Z_EFFECT_ATK_UP_3 + 1);
ExpandBattleTextBuffPlaceholders(gBattleTextBuff1, gDisplayedStringBattle + 4);
break;
default:
if (B_SHOW_USELESS_Z_MOVE_INFO == TRUE)
StringCopy(gDisplayedStringBattle, sText_NoAdditionalEffect);
break;
}
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_NAME_3);

View File

@ -2174,6 +2174,11 @@ void ObjectEventInteractionGetBerryCountString(void)
u8 berry = GetBerryTypeByBerryTreeId(treeId);
u8 count = GetBerryCountByBerryTreeId(treeId);
// The strings for growing Berries all refer to a singular berry plant.
// This ensures that text about planting a Berry and the growing Berry reads correctly.
if (GetStageByBerryTreeId(treeId) != BERRY_STAGE_BERRIES)
count = 1;
gSpecialVar_0x8006 = BerryTypeToItemId(berry);
CopyItemNameHandlePlural(BerryTypeToItemId(berry), gStringVar1, count);
berry = GetTreeMutationValue(treeId);

View File

@ -237,9 +237,6 @@ static void PrintMadePokeblockString(struct Pokeblock *, u8 *);
static bool32 TryAddContestLinkTvShow(struct Pokeblock *, struct TvBlenderStruct *);
EWRAM_DATA static struct BerryBlender *sBerryBlender = NULL;
EWRAM_DATA static s32 sDebug_PokeblockFactorFlavors[FLAVOR_COUNT] = {0};
EWRAM_DATA static s32 sDebug_PokeblockFactorFlavorsAfterRPM[FLAVOR_COUNT] = {0};
EWRAM_DATA static u32 sDebug_PokeblockFactorRPM = 0;
static s16 sPokeblockFlavors[FLAVOR_COUNT + 1]; // + 1 for feel
static s16 sPokeblockPresentFlavors[FLAVOR_COUNT + 1];
@ -2434,11 +2431,7 @@ static void CalculatePokeblock(struct BlenderBerry *berries, struct Pokeblock *p
}
}
for (i = 0; i < FLAVOR_COUNT; i++)
sDebug_PokeblockFactorFlavors[i] = sPokeblockFlavors[i];
// Factor in max RPM and round
sDebug_PokeblockFactorRPM = multiuseVar = maxRPM / 333 + 100;
for (i = 0; i < FLAVOR_COUNT; i++)
{
s32 remainder;
@ -2451,9 +2444,6 @@ static void CalculatePokeblock(struct BlenderBerry *berries, struct Pokeblock *p
sPokeblockFlavors[i] = flavor;
}
for (i = 0; i < FLAVOR_COUNT; i++)
sDebug_PokeblockFactorFlavorsAfterRPM[i] = sPokeblockFlavors[i];
// Calculate color and feel of pokeblock
pokeblock->color = CalculatePokeblockColor(berries, &sPokeblockFlavors[0], numPlayers, numNegatives);
sPokeblockFlavors[FLAVOR_COUNT] = (sPokeblockFlavors[FLAVOR_COUNT] / numPlayers) - numPlayers;

View File

@ -340,7 +340,7 @@ static bool8 LoadBerryTagGfx(void)
}
break;
case 2:
LZDecompressWram(gBerryTag_Pal, sBerryTag->tilemapBuffers[2]);
LZDecompressWram(gBerryTag_Tilemap, sBerryTag->tilemapBuffers[2]);
sBerryTag->gfxState++;
break;
case 3:

View File

@ -298,7 +298,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
{
{
.name = {_("サダヒロ"), _("ALANN"), _("ALAIN"), _("ADELFO"), _("CLAUS"), _("TEO")},
.otId = 0xBDC9,
.otId = 48585,
.facilityClass = FACILITY_CLASS_BUG_CATCHER,
.species = {SPECIES_BEAUTIFLY, SPECIES_DUSTOX, SPECIES_ILLUMISE, SPECIES_SHIFTRY, SPECIES_BRELOOM, SPECIES_NINJASK, SPECIES_SHEDINJA, SPECIES_PINSIR, SPECIES_HERACROSS, SPECIES_VOLBEAT},
.id = 0,
@ -306,7 +306,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
},
{
.name = {_("ヒロオ"), _("LIONEL"), _("LIONEL"), _("CAIO"), _("LUDWIG"), _("LEO")},
.otId = 0xCF09,
.otId = 53001,
.facilityClass = FACILITY_CLASS_YOUNGSTER,
.species = {SPECIES_SWELLOW, SPECIES_SWALOT, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_TORKOAL, SPECIES_HARIYAMA, SPECIES_MIGHTYENA, SPECIES_LUDICOLO, SPECIES_CRAWDAUNT, SPECIES_WHISCASH},
.id = 1,
@ -314,7 +314,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
},
{
.name = {_("ケイジ"), _("SONNY"), _("HERVE"), _("FEDRO"), _("WENZEL"), _("SANTI")},
.otId = 0x2E34,
.otId = 11828,
.facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
.species = {SPECIES_LINOONE, SPECIES_MIGHTYENA, SPECIES_WHISCASH, SPECIES_ZANGOOSE, SPECIES_SEVIPER, SPECIES_NINETALES, SPECIES_KECLEON, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_MACHAMP},
.id = 2,
@ -322,7 +322,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
},
{
.name = {_("ユラ"), _("LAYLA"), _("LAYLA"), _("ASTRID"), _("SONJA"), _("LOLA")},
.otId = 0x84EF,
.otId = 34031,
.facilityClass = FACILITY_CLASS_LASS,
.species = {SPECIES_SWALOT, SPECIES_XATU, SPECIES_ALTARIA, SPECIES_GOLDUCK, SPECIES_FLYGON, SPECIES_ALAKAZAM, SPECIES_GARDEVOIR, SPECIES_WAILORD, SPECIES_GRUMPIG, SPECIES_MIGHTYENA},
.id = 3,
@ -330,7 +330,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
},
{
.name = {_("ヨウカ"), _("MACY"), _("AMELIE"), _("CLEO"), _("MARIA"), _("ELISA")},
.otId = 0x1E43,
.otId = 7747,
.facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
.species = {SPECIES_WIGGLYTUFF, SPECIES_LINOONE, SPECIES_KINGDRA, SPECIES_DELCATTY, SPECIES_RAICHU, SPECIES_FEAROW, SPECIES_STARMIE, SPECIES_MEDICHAM, SPECIES_SHIFTRY, SPECIES_BEAUTIFLY},
.id = 4,
@ -338,7 +338,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
},
{
.name = {_("ヤスシ"), _("DONTE"), _("BRAHIM"), _("GLAUCO"), _("JOSEF"), _("ROQUE")},
.otId = 0x379F,
.otId = 14239,
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
.species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_AGGRON, SPECIES_MAGNETON, SPECIES_MACHAMP, SPECIES_ARMALDO, SPECIES_HERACROSS, SPECIES_NOSEPASS, SPECIES_EXPLOUD, SPECIES_MIGHTYENA},
.id = 5,
@ -346,7 +346,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
},
{
.name = {_("ミサオ"), _("AMIRA"), _("LAURE"), _("DAFNE"), _("AMELIE"), _("LARA")},
.otId = 0xF555,
.otId = 62805,
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F,
.species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_MAGNETON, SPECIES_MEDICHAM, SPECIES_MIGHTYENA, SPECIES_GLALIE, SPECIES_GOLEM, SPECIES_ELECTRODE, SPECIES_PELIPPER, SPECIES_SHARPEDO},
.id = 6,
@ -354,7 +354,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
},
{
.name = {_("カズサ"), _("KALI"), _("JODIE"), _("ILENIA"), _("KARO"), _("ELSA")},
.otId = 0x8D26,
.otId = 36134,
.facilityClass = FACILITY_CLASS_BEAUTY,
.species = {SPECIES_NINETALES, SPECIES_ALAKAZAM, SPECIES_SCEPTILE, SPECIES_SALAMENCE, SPECIES_GOLDUCK, SPECIES_MAWILE, SPECIES_WEEZING, SPECIES_LANTURN, SPECIES_GARDEVOIR, SPECIES_MILOTIC},
.id = 7,
@ -362,7 +362,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
},
{
.name = {_("スミレ"), _("ANNIE"), _("ANNIE"), _("IMELDA"), _("INES"), _("ROSA")},
.otId = 0x800C,
.otId = 32780,
.facilityClass = FACILITY_CLASS_AROMA_LADY,
.species = {SPECIES_SCEPTILE, SPECIES_VILEPLUME, SPECIES_BELLOSSOM, SPECIES_ROSELIA, SPECIES_CORSOLA, SPECIES_FLYGON, SPECIES_BRELOOM, SPECIES_MILOTIC, SPECIES_ALTARIA, SPECIES_CRADILY},
.id = 8,
@ -370,7 +370,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
},
{
.name = {_("アキノリ"), _("DILLEN"), _("RENE"), _("INDRO"), _("DETLEF"), _("PEDRO")},
.otId = 0x469f,
.otId = 18079,
.facilityClass = FACILITY_CLASS_HIKER,
.species = {SPECIES_SKARMORY, SPECIES_GOLEM, SPECIES_BLAZIKEN, SPECIES_CAMERUPT, SPECIES_DONPHAN, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_TROPIUS, SPECIES_SOLROCK, SPECIES_RHYDON},
.id = 9,
@ -378,7 +378,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
},
{
.name = {_("トウゾウ"), _("DALLAS"), _("BRUNO"), _("LEARCO"), _("ANSGAR"), _("MANOLO")},
.otId = 0x71FC,
.otId = 29180,
.facilityClass = FACILITY_CLASS_FISHERMAN,
.species = {SPECIES_SEAKING, SPECIES_STARMIE, SPECIES_GOLDUCK, SPECIES_TENTACRUEL, SPECIES_OCTILLERY, SPECIES_GOREBYSS, SPECIES_GLALIE, SPECIES_WAILORD, SPECIES_SHARPEDO, SPECIES_KINGDRA},
.id = 10,
@ -386,7 +386,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
},
{
.name = {_("セイヤ"), _("FRANK"), _("FRANK"), _("OLINDO"), _("FRANK"), _("MAURO")},
.otId = 0xA39E,
.otId = 41886,
.facilityClass = FACILITY_CLASS_SAILOR,
.species = {SPECIES_QUAGSIRE, SPECIES_STARMIE, SPECIES_PELIPPER, SPECIES_CRAWDAUNT, SPECIES_WAILORD, SPECIES_GYARADOS, SPECIES_SWAMPERT, SPECIES_LANTURN, SPECIES_WHISCASH, SPECIES_SHUCKLE},
.id = 11,
@ -394,7 +394,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
},
{
.name = {_("リュウジ"), _("LAMONT"), _("XAV"), _("ORFEO"), _("JÜRGEN"), _("JORGE")},
.otId = 0xE590,
.otId = 58768,
.facilityClass = FACILITY_CLASS_GUITARIST,
.species = {SPECIES_ABSOL, SPECIES_CROBAT, SPECIES_EXPLOUD, SPECIES_MAGNETON, SPECIES_SHARPEDO, SPECIES_MANECTRIC, SPECIES_METAGROSS, SPECIES_ELECTRODE, SPECIES_NOSEPASS, SPECIES_WEEZING},
.id = 12,
@ -402,7 +402,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
},
{
.name = {_("カツアキ"), _("TYRESE"), _("ANDY"), _("PARIDE"), _("DAVID"), _("CHICHO")},
.otId = 0xD018,
.otId = 53272,
.facilityClass = FACILITY_CLASS_BLACK_BELT,
.species = {SPECIES_BLAZIKEN, SPECIES_GOLEM, SPECIES_MACHAMP, SPECIES_RHYDON, SPECIES_HARIYAMA, SPECIES_AGGRON, SPECIES_MEDICHAM, SPECIES_ZANGOOSE, SPECIES_VIGOROTH, SPECIES_SLAKING},
.id = 13,
@ -410,7 +410,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
},
{
.name = {_("トシミツ"), _("DANTE"), _("DANTE"), _("RAOUL"), _("LOTHAR"), _("PABLO")},
.otId = 0xBC75,
.otId = 48245,
.facilityClass = FACILITY_CLASS_RUIN_MANIAC,
.species = {SPECIES_SCEPTILE, SPECIES_SANDSLASH, SPECIES_FLYGON, SPECIES_CLAYDOL, SPECIES_ARMALDO, SPECIES_CROBAT, SPECIES_CRADILY, SPECIES_SOLROCK, SPECIES_LUNATONE, SPECIES_GOLEM},
.id = 14,
@ -418,7 +418,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
},
{
.name = {_("ローウェン"), _("ARTURO"), _("ARTURO"), _("ROMOLO"), _("BRIAN"), _("ARTURO")},
.otId = 0xFA02,
.otId = 64002,
.facilityClass = FACILITY_CLASS_GENTLEMAN,
.species = {SPECIES_ABSOL, SPECIES_MIGHTYENA, SPECIES_ALAKAZAM, SPECIES_BANETTE, SPECIES_NINETALES, SPECIES_CLAYDOL, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_WALREIN, SPECIES_DUSCLOPS},
.id = 15,

View File

@ -238,7 +238,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_RECOIL_IF_MISS] =
{
.battleScript = BattleScript_EffectRecoilIfMiss,
.battleScript = BattleScript_EffectHit,
.battleTvScore = 1,
},
@ -1909,7 +1909,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_PHOTON_GEYSER] =
{
.battleScript = BattleScript_EffectDynamicCategory,
.battleScript = BattleScript_EffectHit,
.battleTvScore = 0, // TODO: Assign points
},
@ -2201,13 +2201,13 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_TERA_BLAST] =
{
.battleScript = BattleScript_EffectDynamicCategory,
.battleScript = BattleScript_EffectHit,
.battleTvScore = 0, // TODO: Assign points
},
[EFFECT_TERA_STARSTORM] =
{
.battleScript = BattleScript_EffectDynamicCategory,
.battleScript = BattleScript_EffectHit,
.battleTvScore = 0, // TODO: Assign points
},
@ -2246,4 +2246,10 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] =
.battleScript = BattleScript_EffectSpectralThief,
.battleTvScore = 0, // TODO: Assign points
},
[EFFECT_RECOIL] =
{
.battleScript = BattleScript_EffectHit,
.battleTvScore = 0, // TODO: Assign points
},
};

View File

@ -2,7 +2,7 @@ const u32 gBerryCheck_Gfx[] = INCBIN_U32("graphics/bag/check_berry.4bpp.lz");
const u32 gBerryCheck_Pal[] = INCBIN_U32("graphics/bag/check_berry.gbapal.lz");
const u32 gBerryTag_Gfx[] = INCBIN_U32("graphics/bag/berry_tag.bin.lz");
const u32 gBerryTag_Pal[] = INCBIN_U32("graphics/bag/berry_tag_title.bin.lz");
const u32 gBerryTag_Tilemap[] = INCBIN_U32("graphics/bag/berry_tag_title.bin.lz");
const u32 gBerryCheckCircle_Gfx[] = INCBIN_U32("graphics/bag/check_berry_circle.4bpp.lz");

View File

@ -8008,10 +8008,22 @@ const struct Item gItemsInfo[] =
.name = _("Icy Rock"),
.price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
.holdEffect = HOLD_EFFECT_ICY_ROCK,
#if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL
.description = COMPOUND_STRING(
"Extends the length\n"
"of the move Hail\n"
"used by the holder."),
#elif B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_SNOW
.description = COMPOUND_STRING(
"Extends the length\n"
"of Snowscape if\n"
"used by the holder."),
#else
.description = COMPOUND_STRING(
"Extends the length\n"
"of cold weathers\n"
"used by the holder."),
#endif
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
@ -10502,10 +10514,17 @@ const struct Item gItemsInfo[] =
{
.name = _("TM07"),
.price = 3000,
#if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_SNOW
.description = COMPOUND_STRING(
"Raises the Defense\n"
"of Ice type {PKMN}\n"
"for 5 turns."),
#else
.description = COMPOUND_STRING(
"Creates a hailstorm\n"
"that damages all\n"
"types except Ice."),
#endif
.importance = I_REUSABLE_TMS,
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,

View File

@ -1019,15 +1019,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"A reckless charge attack\n"
"that also hurts the user."),
.effect = EFFECT_HIT,
.effect = EFFECT_RECOIL,
.power = 90,
.type = TYPE_NORMAL,
.accuracy = 85,
.recoil = 25,
.pp = 20,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = { .recoilPercentage = 25 },
.makesContact = TRUE,
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_TOUGH,
@ -1071,15 +1071,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"A life-risking tackle that\n"
"also hurts the user."),
.effect = EFFECT_HIT,
.effect = EFFECT_RECOIL,
.power = 120,
.type = TYPE_NORMAL,
.accuracy = 100,
.recoil = 33,
.pp = 15,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = { .recoilPercentage = 33 },
.makesContact = TRUE,
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_TOUGH,
@ -1785,16 +1785,16 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"A reckless body slam that\n"
"also hurts the user."),
.effect = EFFECT_HIT,
.effect = EFFECT_RECOIL,
.power = 80,
.type = TYPE_FIGHTING,
.accuracy = 80,
.pp = B_UPDATED_MOVE_DATA >= GEN_6 ? 20 : 25,
.recoil = 25,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.makesContact = TRUE,
.argument = { .recoilPercentage = 25 },
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
@ -4333,9 +4333,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.self = TRUE,
}),
#else
.effect = EFFECT_HIT,
.effect = EFFECT_RECOIL,
.accuracy = 100,
.recoil = 25,
.argument = { .recoilPercentage = 25 },
#endif
.power = 50,
.type = TYPE_NORMAL,
@ -6757,10 +6757,17 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
[MOVE_HAIL] =
{
.name = COMPOUND_STRING("Hail"),
.description = COMPOUND_STRING(
"Summons a hailstorm that\n"
"strikes every turn."),
.effect = EFFECT_HAIL,
#if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_SNOW
.description = COMPOUND_STRING(
"Summons a snowstorm that\n"
"lasts for five turns."),
.effect = EFFECT_SNOWSCAPE,
#else
.description = COMPOUND_STRING(
"Summons a hailstorm that\n"
"strikes every turn."),
.effect = EFFECT_HAIL,
#endif
.power = 0,
.type = TYPE_ICE,
.accuracy = 0,
@ -6775,7 +6782,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = COMBO_STARTER_HAIL,
.contestComboMoves = {0},
.battleAnimScript = gBattleAnimMove_Hail,
.battleAnimScript = (B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_SNOW) ? gBattleAnimMove_Snowscape : gBattleAnimMove_Hail,
.validApprenticeMove = TRUE,
},
@ -8982,11 +8989,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.power = 120,
.type = TYPE_ELECTRIC,
.accuracy = 100,
.recoil = 33,
.pp = 15,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = { .recoilPercentage = 33 },
.makesContact = TRUE,
#if B_UPDATED_MOVE_DATA >= GEN_4
.additionalEffects = ADDITIONAL_EFFECTS({
@ -10184,15 +10191,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"A charge that may burn the\n"
"foe. Also hurts the user."),
.effect = EFFECT_HIT,
.effect = EFFECT_RECOIL,
.power = 120,
.type = TYPE_FIRE,
.accuracy = 100,
.recoil = 33,
.pp = 15,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = { .recoilPercentage = 33 },
.makesContact = TRUE,
.thawsUser = TRUE,
.additionalEffects = ADDITIONAL_EFFECTS({
@ -10648,15 +10655,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"A low altitude charge that\n"
"also hurts the user."),
.effect = EFFECT_HIT,
.effect = EFFECT_RECOIL,
.power = 120,
.type = TYPE_FLYING,
.accuracy = 100,
.recoil = 33,
.pp = 15,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = { .recoilPercentage = 33 },
.makesContact = TRUE,
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_CUTE,
@ -11625,15 +11632,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"Slams the body into a foe.\n"
"The user gets hurt too."),
.effect = EFFECT_HIT,
.effect = EFFECT_RECOIL,
.power = 120,
.type = TYPE_GRASS,
.accuracy = 100,
.recoil = 33,
.pp = 15,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = { .recoilPercentage = 33 },
.makesContact = TRUE,
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_TOUGH,
@ -11743,15 +11750,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"A life-risking headbutt that\n"
"seriously hurts the user."),
.effect = EFFECT_HIT,
.effect = EFFECT_RECOIL,
.power = 150,
.type = TYPE_ROCK,
.accuracy = 80,
.recoil = 50,
.pp = 5,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = { .recoilPercentage = 50 },
.makesContact = TRUE,
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_TOUGH,
@ -13438,15 +13445,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"An electrical tackle that\n"
"also hurts the user."),
.effect = EFFECT_HIT,
.effect = EFFECT_RECOIL,
.power = 90,
.type = TYPE_ELECTRIC,
.accuracy = 100,
.recoil = 25,
.pp = 15,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = { .recoilPercentage = 25 },
.makesContact = TRUE,
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_COOL,
@ -13795,15 +13802,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"A charge using guard hair.\n"
"It hurts the user a little."),
.effect = EFFECT_HIT,
.effect = EFFECT_RECOIL,
.power = 120,
.type = TYPE_NORMAL,
.accuracy = 100,
.recoil = 25,
.pp = 15,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = { .recoilPercentage = 25 },
.makesContact = TRUE,
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_TOUGH,
@ -15648,15 +15655,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"Fires a great beam of light\n"
"that also hurts the user."),
.effect = EFFECT_HIT,
.effect = EFFECT_RECOIL,
.power = 140,
.type = TYPE_FAIRY,
.accuracy = 90,
.recoil = 50,
.pp = 5,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
.argument = { .recoilPercentage = 50 },
.metronomeBanned = TRUE,
.battleAnimScript = gBattleAnimMove_LightOfRuin,
},
@ -16629,9 +16636,19 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
[MOVE_AURORA_VEIL] =
{
.name = COMPOUND_STRING("Aurora Veil"),
#if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_SNOW
.description = COMPOUND_STRING(
"Weakens all attacks, but\n"
"only usable with snow."),
#elif B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_BOTH
.description = COMPOUND_STRING(
"Weakens all attacks if\n"
"used in hail or snow."),
#else
.description = COMPOUND_STRING(
"Weakens all attacks, but\n"
"only usable with hail."),
#endif
.effect = EFFECT_AURORA_VEIL,
.power = 0,
.type = TYPE_ICE,
@ -19185,15 +19202,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.description = COMPOUND_STRING(
"A slam shrouded in water.\n"
"It also hurts the user."),
.effect = EFFECT_HIT,
.effect = EFFECT_RECOIL,
.power = B_UPDATED_MOVE_DATA >= GEN_9 ? 120 : 75,
.type = TYPE_WATER,
.accuracy = 100,
.recoil = 33,
.pp = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = { .recoilPercentage = 33 },
.makesContact = TRUE,
.skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS,
.battleAnimScript = gBattleAnimMove_WaveCrash,
@ -20130,9 +20147,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
[MOVE_CHILLY_RECEPTION] =
{
.name = COMPOUND_STRING("Chilly Reception"),
#if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL
.description = COMPOUND_STRING(
"Bad joke summons hailstorm.\n"
"The user also switches out."),
#else
.description = COMPOUND_STRING(
"Bad joke summons snowstorm.\n"
"The user also switches out."),
#endif
.effect = EFFECT_CHILLY_RECEPTION,
.power = 0,
.type = TYPE_ICE,
@ -20171,10 +20194,17 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
[MOVE_SNOWSCAPE] =
{
.name = COMPOUND_STRING("Snowscape"),
.description = COMPOUND_STRING(
"Summons a snowstorm that\n"
"lasts for five turns."),
.effect = EFFECT_SNOWSCAPE,
#if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL
.description = COMPOUND_STRING(
"Summons a hailstorm that\n"
"strikes every turn."),
.effect = EFFECT_HAIL,
#else
.description = COMPOUND_STRING(
"Summons a snowstorm that\n"
"lasts for five turns."),
.effect = EFFECT_SNOWSCAPE,
#endif
.power = 0,
.type = TYPE_ICE,
.accuracy = 0,
@ -20186,7 +20216,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.ignoresProtect = TRUE,
.mirrorMoveBanned = TRUE,
.metronomeBanned = TRUE,
.battleAnimScript = gBattleAnimMove_Snowscape,
.battleAnimScript = (B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL) ? gBattleAnimMove_Hail : gBattleAnimMove_Snowscape,
},
[MOVE_POUNCE] =

View File

@ -271,6 +271,14 @@ u8 MovementActionFunc_RunSlowUp_Step0(struct ObjectEvent *objectEvent, struct Sp
u8 MovementActionFunc_RunSlowLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite);
u8 MovementActionFunc_RunSlowRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite);
u8 MovementActionFunc_RunSlow_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite);
u8 MovementAction_WalkSlowStairsUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite);
u8 MovementAction_WalkSlowStairsUp_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite);
u8 MovementAction_WalkSlowStairsDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite);
u8 MovementAction_WalkSlowStairsDown_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite);
u8 MovementAction_WalkSlowStairsLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite);
u8 MovementAction_WalkSlowStairsLeft_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite);
u8 MovementAction_WalkSlowStairsRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite);
u8 MovementAction_WalkSlowStairsRight_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite);
u8 (*const gMovementActionFuncs_FaceDown[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_FaceUp[])(struct ObjectEvent *, struct Sprite *);
@ -438,6 +446,10 @@ u8 (*const gMovementActionFuncs_RunDownSlow[])(struct ObjectEvent *, struct Spri
u8 (*const gMovementActionFuncs_RunUpSlow[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_RunLeftSlow[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_RunRightSlow[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_WalkSlowStairsDown[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_WalkSlowStairsUp[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_WalkSlowStairsLeft[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_WalkSlowStairsRight[])(struct ObjectEvent *, struct Sprite *);
u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *) = {
[MOVEMENT_ACTION_FACE_DOWN] = gMovementActionFuncs_FaceDown,
@ -606,6 +618,10 @@ u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *)
[MOVEMENT_ACTION_RUN_UP_SLOW] = gMovementActionFuncs_RunUpSlow,
[MOVEMENT_ACTION_RUN_LEFT_SLOW] = gMovementActionFuncs_RunLeftSlow,
[MOVEMENT_ACTION_RUN_RIGHT_SLOW] = gMovementActionFuncs_RunRightSlow,
[MOVEMENT_ACTION_WALK_SLOW_STAIRS_DOWN] = gMovementActionFuncs_WalkSlowStairsDown,
[MOVEMENT_ACTION_WALK_SLOW_STAIRS_UP] = gMovementActionFuncs_WalkSlowStairsUp,
[MOVEMENT_ACTION_WALK_SLOW_STAIRS_LEFT] = gMovementActionFuncs_WalkSlowStairsLeft,
[MOVEMENT_ACTION_WALK_SLOW_STAIRS_RIGHT] = gMovementActionFuncs_WalkSlowStairsRight,
};
u8 (*const gMovementActionFuncs_FaceDown[])(struct ObjectEvent *, struct Sprite *) = {
@ -1591,3 +1607,27 @@ u8 (*const gMovementActionFuncs_RunRightSlow[])(struct ObjectEvent *, struct Spr
MovementActionFunc_RunSlow_Step1,
MovementAction_PauseSpriteAnim,
};
bool8 (*const gMovementActionFuncs_WalkSlowStairsUp[])(struct ObjectEvent *, struct Sprite *) = {
MovementAction_WalkSlowStairsUp_Step0,
MovementAction_WalkSlowStairsUp_Step1,
MovementAction_PauseSpriteAnim,
};
bool8 (*const gMovementActionFuncs_WalkSlowStairsDown[])(struct ObjectEvent *, struct Sprite *) = {
MovementAction_WalkSlowStairsDown_Step0,
MovementAction_WalkSlowStairsDown_Step1,
MovementAction_PauseSpriteAnim,
};
bool8 (*const gMovementActionFuncs_WalkSlowStairsLeft[])(struct ObjectEvent *, struct Sprite *) = {
MovementAction_WalkSlowStairsLeft_Step0,
MovementAction_WalkSlowStairsLeft_Step1,
MovementAction_PauseSpriteAnim,
};
bool8 (*const gMovementActionFuncs_WalkSlowStairsRight[])(struct ObjectEvent *, struct Sprite *) = {
MovementAction_WalkSlowStairsRight_Step0,
MovementAction_WalkSlowStairsRight_Step1,
MovementAction_PauseSpriteAnim,
};

View File

@ -18,11 +18,13 @@ static const struct SpriteFrameImage sPicTable_VenusaurF[] = {
overworld_ascending_frames(gObjectEventPic_VenusaurF, 4, 4),
};
#endif //P_GENDER_DIFFERENCES
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_VenusaurMega[] = {
overworld_ascending_frames(gObjectEventPic_VenusaurMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#if P_GIGANTAMAX_FORMS
/*static const struct SpriteFrameImage sPicTable_VenusaurGmax[] = {
overworld_ascending_frames(gObjectEventPic_VenusaurGmax, 4, 4),
@ -40,6 +42,7 @@ static const struct SpriteFrameImage sPicTable_Charmeleon[] = {
static const struct SpriteFrameImage sPicTable_Charizard[] = {
overworld_ascending_frames(gObjectEventPic_Charizard, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_CharizardMegaX[] = {
overworld_ascending_frames(gObjectEventPic_CharizardMegaX, 4, 4),
@ -47,7 +50,8 @@ static const struct SpriteFrameImage sPicTable_CharizardMegaX[] = {
static const struct SpriteFrameImage sPicTable_CharizardMegaY[] = {
overworld_ascending_frames(gObjectEventPic_CharizardMegaY, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#if P_GIGANTAMAX_FORMS
/*static const struct SpriteFrameImage sPicTable_CharizardGmax[] = {
overworld_ascending_frames(gObjectEventPic_CharizardGmax, 4, 4),
@ -65,11 +69,13 @@ static const struct SpriteFrameImage sPicTable_Wartortle[] = {
static const struct SpriteFrameImage sPicTable_Blastoise[] = {
overworld_ascending_frames(gObjectEventPic_Blastoise, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_BlastoiseMega[] = {
overworld_ascending_frames(gObjectEventPic_BlastoiseMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#if P_GIGANTAMAX_FORMS
/*static const struct SpriteFrameImage sPicTable_BlastoiseGmax[] = {
overworld_ascending_frames(gObjectEventPic_BlastoiseGmax, 4, 4),
@ -109,11 +115,13 @@ static const struct SpriteFrameImage sPicTable_Kakuna[] = {
static const struct SpriteFrameImage sPicTable_Beedrill[] = {
overworld_ascending_frames(gObjectEventPic_Beedrill, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_BeedrillMega[] = {
overworld_ascending_frames(gObjectEventPic_BeedrillMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_WEEDLE
#if P_FAMILY_PIDGEY
@ -126,11 +134,13 @@ static const struct SpriteFrameImage sPicTable_Pidgeotto[] = {
static const struct SpriteFrameImage sPicTable_Pidgeot[] = {
overworld_ascending_frames(gObjectEventPic_Pidgeot, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_PidgeotMega[] = {
overworld_ascending_frames(gObjectEventPic_PidgeotMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_PIDGEY
#if P_FAMILY_RATTATA
@ -547,11 +557,13 @@ static const struct SpriteFrameImage sPicTable_AlakazamF[] = {
overworld_ascending_frames(gObjectEventPic_AlakazamF, 4, 4),
};
#endif //P_GENDER_DIFFERENCES
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_AlakazamMega[] = {
overworld_ascending_frames(gObjectEventPic_AlakazamMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_ABRA
#if P_FAMILY_MACHOP
@ -645,11 +657,13 @@ static const struct SpriteFrameImage sPicTable_Slowking[] = {
};
#endif //P_GEN_2_CROSS_EVOS
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_SlowbroMega[] = {
overworld_ascending_frames(gObjectEventPic_SlowbroMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#if P_GALARIAN_FORMS
static const struct SpriteFrameImage sPicTable_SlowpokeGalar[] = {
@ -758,11 +772,13 @@ static const struct SpriteFrameImage sPicTable_Haunter[] = {
static const struct SpriteFrameImage sPicTable_Gengar[] = {
overworld_ascending_frames(gObjectEventPic_Gengar, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_GengarMega[] = {
overworld_ascending_frames(gObjectEventPic_GengarMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#if P_GIGANTAMAX_FORMS
/*static const struct SpriteFrameImage sPicTable_GengarGmax[] = {
overworld_ascending_frames(gObjectEventPic_GengarGmax, 4, 4),
@ -783,11 +799,13 @@ static const struct SpriteFrameImage sPicTable_SteelixF[] = {
overworld_ascending_frames(gObjectEventPic_SteelixF, 4, 4),
};
#endif //P_GENDER_DIFFERENCES
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_SteelixMega[] = {
overworld_ascending_frames(gObjectEventPic_SteelixMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_ONIX
@ -973,11 +991,13 @@ static const struct SpriteFrameImage sPicTable_TangrowthF[] = {
static const struct SpriteFrameImage sPicTable_Kangaskhan[] = {
overworld_ascending_frames(gObjectEventPic_Kangaskhan, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_KangaskhanMega[] = {
overworld_ascending_frames(gObjectEventPic_KangaskhanMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_KANGASKHAN
#if P_FAMILY_HORSEA
@ -1059,11 +1079,13 @@ static const struct SpriteFrameImage sPicTable_ScizorF[] = {
overworld_ascending_frames(gObjectEventPic_ScizorF, 4, 4),
};
#endif //P_GENDER_DIFFERENCES
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_ScizorMega[] = {
overworld_ascending_frames(gObjectEventPic_ScizorMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_GEN_2_CROSS_EVOS
#if P_GEN_8_CROSS_EVOS
@ -1120,11 +1142,13 @@ static const struct SpriteFrameImage sPicTable_Magmortar[] = {
static const struct SpriteFrameImage sPicTable_Pinsir[] = {
overworld_ascending_frames(gObjectEventPic_Pinsir, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_PinsirMega[] = {
overworld_ascending_frames(gObjectEventPic_PinsirMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_PINSIR
#if P_FAMILY_TAUROS
@ -1161,11 +1185,13 @@ static const struct SpriteFrameImage sPicTable_GyaradosF[] = {
overworld_ascending_frames(gObjectEventPic_GyaradosF, 4, 4),
};
#endif //P_GENDER_DIFFERENCES
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_GyaradosMega[] = {
overworld_ascending_frames(gObjectEventPic_GyaradosMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_MAGIKARP
#if P_FAMILY_LAPRAS
@ -1272,11 +1298,13 @@ static const struct SpriteFrameImage sPicTable_Kabutops[] = {
static const struct SpriteFrameImage sPicTable_Aerodactyl[] = {
overworld_ascending_frames(gObjectEventPic_Aerodactyl, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_AerodactylMega[] = {
overworld_ascending_frames(gObjectEventPic_AerodactylMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_AERODACTYL
#if P_FAMILY_SNORLAX
@ -1344,6 +1372,7 @@ static const struct SpriteFrameImage sPicTable_Dragonite[] = {
static const struct SpriteFrameImage sPicTable_Mewtwo[] = {
overworld_ascending_frames(gObjectEventPic_Mewtwo, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_MewtwoMegaX[] = {
overworld_ascending_frames(gObjectEventPic_MewtwoMegaX, 4, 4),
@ -1351,7 +1380,8 @@ static const struct SpriteFrameImage sPicTable_MewtwoMegaX[] = {
static const struct SpriteFrameImage sPicTable_MewtwoMegaY[] = {
overworld_ascending_frames(gObjectEventPic_MewtwoMegaY, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_MEWTWO
#if P_FAMILY_MEW
@ -1499,11 +1529,13 @@ static const struct SpriteFrameImage sPicTable_Flaaffy[] = {
static const struct SpriteFrameImage sPicTable_Ampharos[] = {
overworld_ascending_frames(gObjectEventPic_Ampharos, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_AmpharosMega[] = {
overworld_ascending_frames(gObjectEventPic_AmpharosMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_MAREEP
#if P_FAMILY_MARILL
@ -1841,11 +1873,13 @@ static const struct SpriteFrameImage sPicTable_HeracrossF[] = {
overworld_ascending_frames(gObjectEventPic_HeracrossF, 4, 4),
};
#endif //P_GENDER_DIFFERENCES
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_HeracrossMega[] = {
overworld_ascending_frames(gObjectEventPic_HeracrossMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_HERACROSS
#if P_FAMILY_SNEASEL
@ -2001,11 +2035,13 @@ static const struct SpriteFrameImage sPicTable_HoundoomF[] = {
overworld_ascending_frames(gObjectEventPic_HoundoomF, 4, 4),
};
#endif //P_GENDER_DIFFERENCES
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_HoundoomMega[] = {
overworld_ascending_frames(gObjectEventPic_HoundoomMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_HOUNDOUR
#if P_FAMILY_PHANPY
@ -2073,11 +2109,13 @@ static const struct SpriteFrameImage sPicTable_Pupitar[] = {
static const struct SpriteFrameImage sPicTable_Tyranitar[] = {
overworld_ascending_frames(gObjectEventPic_Tyranitar, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_TyranitarMega[] = {
overworld_ascending_frames(gObjectEventPic_TyranitarMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_LARVITAR
#if P_FAMILY_LUGIA
@ -2108,11 +2146,13 @@ static const struct SpriteFrameImage sPicTable_Grovyle[] = {
static const struct SpriteFrameImage sPicTable_Sceptile[] = {
overworld_ascending_frames(gObjectEventPic_Sceptile, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_SceptileMega[] = {
overworld_ascending_frames(gObjectEventPic_SceptileMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_TREECKO
#if P_FAMILY_TORCHIC
@ -2140,11 +2180,13 @@ static const struct SpriteFrameImage sPicTable_BlazikenF[] = {
overworld_ascending_frames(gObjectEventPic_BlazikenF, 4, 4),
};
#endif //P_GENDER_DIFFERENCES
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_BlazikenMega[] = {
overworld_ascending_frames(gObjectEventPic_BlazikenMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_TORCHIC
#if P_FAMILY_MUDKIP
@ -2157,11 +2199,13 @@ static const struct SpriteFrameImage sPicTable_Marshtomp[] = {
static const struct SpriteFrameImage sPicTable_Swampert[] = {
overworld_ascending_frames(gObjectEventPic_Swampert, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_SwampertMega[] = {
overworld_ascending_frames(gObjectEventPic_SwampertMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_MUDKIP
#if P_FAMILY_POOCHYENA
@ -2288,21 +2332,25 @@ static const struct SpriteFrameImage sPicTable_Kirlia[] = {
static const struct SpriteFrameImage sPicTable_Gardevoir[] = {
overworld_ascending_frames(gObjectEventPic_Gardevoir, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_GardevoirMega[] = {
overworld_ascending_frames(gObjectEventPic_GardevoirMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#if P_GEN_4_CROSS_EVOS
static const struct SpriteFrameImage sPicTable_Gallade[] = {
overworld_ascending_frames(gObjectEventPic_Gallade, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_GalladeMega[] = {
overworld_ascending_frames(gObjectEventPic_GalladeMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_GEN_4_CROSS_EVOS
#endif //P_FAMILY_RALTS
@ -2393,22 +2441,26 @@ static const struct SpriteFrameImage sPicTable_Delcatty[] = {
static const struct SpriteFrameImage sPicTable_Sableye[] = {
overworld_ascending_frames(gObjectEventPic_Sableye, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_SableyeMega[] = {
overworld_ascending_frames(gObjectEventPic_SableyeMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_SABLEYE
#if P_FAMILY_MAWILE
static const struct SpriteFrameImage sPicTable_Mawile[] = {
overworld_ascending_frames(gObjectEventPic_Mawile, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_MawileMega[] = {
overworld_ascending_frames(gObjectEventPic_MawileMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_MAWILE
#if P_FAMILY_ARON
@ -2421,11 +2473,13 @@ static const struct SpriteFrameImage sPicTable_Lairon[] = {
static const struct SpriteFrameImage sPicTable_Aggron[] = {
overworld_ascending_frames(gObjectEventPic_Aggron, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_AggronMega[] = {
overworld_ascending_frames(gObjectEventPic_AggronMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_ARON
#if P_FAMILY_MEDITITE
@ -2445,11 +2499,13 @@ static const struct SpriteFrameImage sPicTable_MedichamF[] = {
overworld_ascending_frames(gObjectEventPic_MedichamF, 4, 4),
};
#endif //P_GENDER_DIFFERENCES
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_MedichamMega[] = {
overworld_ascending_frames(gObjectEventPic_MedichamMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_MEDITITE
#if P_FAMILY_ELECTRIKE
@ -2459,11 +2515,13 @@ static const struct SpriteFrameImage sPicTable_Electrike[] = {
static const struct SpriteFrameImage sPicTable_Manectric[] = {
overworld_ascending_frames(gObjectEventPic_Manectric, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_ManectricMega[] = {
overworld_ascending_frames(gObjectEventPic_ManectricMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_ELECTRIKE
#if P_FAMILY_PLUSLE
@ -2539,11 +2597,13 @@ static const struct SpriteFrameImage sPicTable_Carvanha[] = {
static const struct SpriteFrameImage sPicTable_Sharpedo[] = {
overworld_ascending_frames(gObjectEventPic_Sharpedo, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_SharpedoMega[] = {
overworld_ascending_frames(gObjectEventPic_SharpedoMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_CARVANHA
#if P_FAMILY_WAILMER
@ -2572,11 +2632,13 @@ static const struct SpriteFrameImage sPicTable_CameruptF[] = {
overworld_ascending_frames(gObjectEventPic_CameruptF, 4, 4),
};
#endif //P_GENDER_DIFFERENCES
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_CameruptMega[] = {
overworld_ascending_frames(gObjectEventPic_CameruptMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_NUMEL
#if P_FAMILY_TORKOAL
@ -2633,11 +2695,13 @@ static const struct SpriteFrameImage sPicTable_Swablu[] = {
static const struct SpriteFrameImage sPicTable_Altaria[] = {
overworld_ascending_frames(gObjectEventPic_Altaria, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_AltariaMega[] = {
overworld_ascending_frames(gObjectEventPic_AltariaMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_SWABLU
#if P_FAMILY_ZANGOOSE
@ -2751,11 +2815,13 @@ static const struct SpriteFrameImage sPicTable_Shuppet[] = {
static const struct SpriteFrameImage sPicTable_Banette[] = {
overworld_ascending_frames(gObjectEventPic_Banette, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_BanetteMega[] = {
overworld_ascending_frames(gObjectEventPic_BanetteMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_SHUPPET
#if P_FAMILY_DUSKULL
@ -2793,11 +2859,13 @@ static const struct SpriteFrameImage sPicTable_Chimecho[] = {
static const struct SpriteFrameImage sPicTable_Absol[] = {
overworld_ascending_frames(gObjectEventPic_Absol, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_AbsolMega[] = {
overworld_ascending_frames(gObjectEventPic_AbsolMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_ABSOL
#if P_FAMILY_SNORUNT
@ -2807,11 +2875,13 @@ static const struct SpriteFrameImage sPicTable_Snorunt[] = {
static const struct SpriteFrameImage sPicTable_Glalie[] = {
overworld_ascending_frames(gObjectEventPic_Glalie, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_GlalieMega[] = {
overworld_ascending_frames(gObjectEventPic_GlalieMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#if P_GEN_4_CROSS_EVOS
static const struct SpriteFrameImage sPicTable_Froslass[] = {
@ -2871,11 +2941,13 @@ static const struct SpriteFrameImage sPicTable_Shelgon[] = {
static const struct SpriteFrameImage sPicTable_Salamence[] = {
overworld_ascending_frames(gObjectEventPic_Salamence, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_SalamenceMega[] = {
overworld_ascending_frames(gObjectEventPic_SalamenceMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_BAGON
#if P_FAMILY_BELDUM
@ -2888,11 +2960,13 @@ static const struct SpriteFrameImage sPicTable_Metang[] = {
static const struct SpriteFrameImage sPicTable_Metagross[] = {
overworld_ascending_frames(gObjectEventPic_Metagross, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_MetagrossMega[] = {
overworld_ascending_frames(gObjectEventPic_MetagrossMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_BELDUM
#if P_FAMILY_REGIROCK
@ -2917,55 +2991,65 @@ static const struct SpriteFrameImage sPicTable_Registeel[] = {
static const struct SpriteFrameImage sPicTable_Latias[] = {
overworld_ascending_frames(gObjectEventPic_Latias, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_LatiasMega[] = {
overworld_ascending_frames(gObjectEventPic_LatiasMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_LATIAS
#if P_FAMILY_LATIOS
static const struct SpriteFrameImage sPicTable_Latios[] = {
overworld_ascending_frames(gObjectEventPic_Latios, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_LatiosMega[] = {
overworld_ascending_frames(gObjectEventPic_LatiosMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_LATIOS
#if P_FAMILY_KYOGRE
static const struct SpriteFrameImage sPicTable_Kyogre[] = {
overworld_ascending_frames(gObjectEventPic_Kyogre, 8, 8),
};
#if OW_BATTLE_ONLY_FORMS
#if P_PRIMAL_REVERSIONS
static const struct SpriteFrameImage sPicTable_KyogrePrimal[] = {
overworld_ascending_frames(gObjectEventPic_KyogrePrimal, 4, 4),
};
#endif //P_PRIMAL_REVERSIONS
#endif // P_PRIMAL_REVERSIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_KYOGRE
#if P_FAMILY_GROUDON
static const struct SpriteFrameImage sPicTable_Groudon[] = {
overworld_ascending_frames(gObjectEventPic_Groudon, 8, 8),
};
#if OW_BATTLE_ONLY_FORMS
#if P_PRIMAL_REVERSIONS
static const struct SpriteFrameImage sPicTable_GroudonPrimal[] = {
overworld_ascending_frames(gObjectEventPic_GroudonPrimal, 4, 4),
};
#endif //P_PRIMAL_REVERSIONS
#endif // P_PRIMAL_REVERSIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_GROUDON
#if P_FAMILY_RAYQUAZA
static const struct SpriteFrameImage sPicTable_Rayquaza[] = {
overworld_ascending_frames(gObjectEventPic_Rayquaza, 8, 8),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_RayquazaMega[] = {
overworld_ascending_frames(gObjectEventPic_RayquazaMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_RAYQUAZA
#if P_FAMILY_JIRACHI
@ -3246,11 +3330,13 @@ static const struct SpriteFrameImage sPicTable_Buneary[] = {
static const struct SpriteFrameImage sPicTable_Lopunny[] = {
overworld_ascending_frames(gObjectEventPic_Lopunny, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_LopunnyMega[] = {
overworld_ascending_frames(gObjectEventPic_LopunnyMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_BUNEARY
#if P_FAMILY_GLAMEOW
@ -3317,11 +3403,13 @@ static const struct SpriteFrameImage sPicTable_GarchompF[] = {
overworld_ascending_frames(gObjectEventPic_GarchompF, 4, 4),
};
#endif //P_GENDER_DIFFERENCES
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_GarchompMega[] = {
overworld_ascending_frames(gObjectEventPic_GarchompMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_GIBLE
#if P_FAMILY_RIOLU
@ -3331,11 +3419,13 @@ static const struct SpriteFrameImage sPicTable_Riolu[] = {
static const struct SpriteFrameImage sPicTable_Lucario[] = {
overworld_ascending_frames(gObjectEventPic_Lucario, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_LucarioMega[] = {
overworld_ascending_frames(gObjectEventPic_LucarioMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_RIOLU
#if P_FAMILY_HIPPOPOTAS
@ -3422,11 +3512,13 @@ static const struct SpriteFrameImage sPicTable_AbomasnowF[] = {
overworld_ascending_frames(gObjectEventPic_AbomasnowF, 4, 4),
};
#endif //P_GENDER_DIFFERENCES
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_AbomasnowMega[] = {
overworld_ascending_frames(gObjectEventPic_AbomasnowMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_SNOVER
#if P_FAMILY_ROTOM
@ -3769,11 +3861,13 @@ static const struct SpriteFrameImage sPicTable_Excadrill[] = {
static const struct SpriteFrameImage sPicTable_Audino[] = {
overworld_ascending_frames(gObjectEventPic_Audino, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_AudinoMega[] = {
overworld_ascending_frames(gObjectEventPic_AudinoMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_AUDINO
#if P_FAMILY_TIMBURR
@ -4959,11 +5053,13 @@ static const struct SpriteFrameImage sPicTable_ZygardeComplete[] = {
static const struct SpriteFrameImage sPicTable_Diancie[] = {
overworld_ascending_frames(gObjectEventPic_Diancie, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_MEGA_EVOLUTIONS
static const struct SpriteFrameImage sPicTable_DiancieMega[] = {
overworld_ascending_frames(gObjectEventPic_DiancieMega, 4, 4),
};
#endif //P_MEGA_EVOLUTIONS
#endif // P_MEGA_EVOLUTIONS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FAMILY_DIANCIE
#if P_FAMILY_HOOPA
@ -5417,11 +5513,13 @@ static const struct SpriteFrameImage sPicTable_NecrozmaDuskMane[] = {
static const struct SpriteFrameImage sPicTable_NecrozmaDawnWings[] = {
overworld_ascending_frames(gObjectEventPic_NecrozmaDawnWings, 4, 4),
};
#if OW_BATTLE_ONLY_FORMS
#if P_ULTRA_BURST_FORMS
static const struct SpriteFrameImage sPicTable_NecrozmaUltra[] = {
overworld_ascending_frames(gObjectEventPic_NecrozmaUltra, 4, 4),
};
#endif //P_ULTRA_BURST_FORMS
#endif // P_ULTRA_BURST_FORMS
#endif // OW_BATTLE_ONLY_FORMS
#endif //P_FUSION_FORMS
#endif //P_FAMILY_NECROZMA

View File

@ -122,7 +122,9 @@ const struct SpeciesInfo gSpeciesInfo[] =
.shinyPalette = gMonShinyPalette_CircledQuestionMark,
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
FOOTPRINT(QuestionMark)
SHADOW(-1, 0, SHADOW_SIZE_M)
#if OW_POKEMON_OBJECT_EVENTS
.overworldData = {
.tileTag = TAG_NONE,

File diff suppressed because it is too large Load Diff

View File

@ -55,6 +55,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Chikorita,
.iconSprite = gMonIcon_Chikorita,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-1, 2, SHADOW_SIZE_S)
FOOTPRINT(Chikorita)
OVERWORLD(
@ -123,6 +124,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Bayleef,
.iconSprite = gMonIcon_Bayleef,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 10, SHADOW_SIZE_M)
FOOTPRINT(Bayleef)
OVERWORLD(
@ -202,6 +204,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_MeganiumF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_M)
FOOTPRINT(Meganium)
OVERWORLD(
@ -278,6 +281,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Cyndaquil,
.iconSprite = gMonIcon_Cyndaquil,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 3,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(0, -1, SHADOW_SIZE_S)
FOOTPRINT(Cyndaquil)
OVERWORLD(
@ -346,6 +350,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Quilava,
.iconSprite = gMonIcon_Quilava,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 3,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 2, SHADOW_SIZE_M)
FOOTPRINT(Quilava)
OVERWORLD(
@ -422,6 +427,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Typhlosion,
.iconSprite = gMonIcon_Typhlosion,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 3,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 14, SHADOW_SIZE_L)
FOOTPRINT(Typhlosion)
OVERWORLD(
@ -486,6 +492,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_TyphlosionHisui,
.iconSprite = gMonIcon_TyphlosionHisui,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 14, SHADOW_SIZE_L)
FOOTPRINT(Typhlosion)
OVERWORLD(
@ -560,6 +567,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Totodile,
.iconSprite = gMonIcon_Totodile,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(2, 0, SHADOW_SIZE_S)
FOOTPRINT(Totodile)
OVERWORLD(
@ -629,6 +637,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Croconaw,
.iconSprite = gMonIcon_Croconaw,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 8, SHADOW_SIZE_M)
FOOTPRINT(Croconaw)
OVERWORLD(
@ -705,6 +714,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Feraligatr,
.iconSprite = gMonIcon_Feraligatr,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 11, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Feraligatr)
OVERWORLD(
@ -774,6 +784,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Sentret,
.iconSprite = gMonIcon_Sentret,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 11, SHADOW_SIZE_S)
FOOTPRINT(Sentret)
OVERWORLD(
@ -841,6 +852,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Furret,
.iconSprite = gMonIcon_Furret,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 9, SHADOW_SIZE_M)
FOOTPRINT(Furret)
OVERWORLD(
@ -918,6 +930,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Hoothoot,
.iconSprite = gMonIcon_Hoothoot,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 2, SHADOW_SIZE_S)
FOOTPRINT(Hoothoot)
OVERWORLD(
@ -991,6 +1004,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Noctowl,
.iconSprite = gMonIcon_Noctowl,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 10, SHADOW_SIZE_S)
FOOTPRINT(Noctowl)
OVERWORLD(
@ -1066,6 +1080,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_LedybaF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 48),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 4, SHADOW_SIZE_M)
FOOTPRINT(Ledyba)
OVERWORLD(
@ -1149,6 +1164,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_LedianF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 15, SHADOW_SIZE_S)
FOOTPRINT(Ledian)
OVERWORLD(
@ -1229,6 +1245,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Spinarak,
.iconSprite = gMonIcon_Spinarak,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(0, -8, SHADOW_SIZE_M)
FOOTPRINT(Spinarak)
OVERWORLD(
@ -1304,6 +1321,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Ariados,
.iconSprite = gMonIcon_Ariados,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 3, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Ariados)
OVERWORLD(
@ -1375,6 +1393,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Chinchou,
.iconSprite = gMonIcon_Chinchou,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 1, SHADOW_SIZE_M)
FOOTPRINT(Chinchou)
OVERWORLD(
@ -1446,6 +1465,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Lanturn,
.iconSprite = gMonIcon_Lanturn,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 4, SHADOW_SIZE_M)
FOOTPRINT(Lanturn)
OVERWORLD(
@ -1516,6 +1536,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Togepi,
.iconSprite = gMonIcon_Togepi,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-1, -3, SHADOW_SIZE_S)
FOOTPRINT(Togepi)
OVERWORLD(
@ -1584,6 +1605,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Togetic,
.iconSprite = gMonIcon_Togetic,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 6, SHADOW_SIZE_S)
FOOTPRINT(Togetic)
OVERWORLD(
@ -1665,6 +1687,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Togekiss,
.iconSprite = gMonIcon_Togekiss,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 15, SHADOW_SIZE_M)
FOOTPRINT(Togekiss)
OVERWORLD(
@ -1737,6 +1760,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Natu,
.iconSprite = gMonIcon_Natu,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, -4, SHADOW_SIZE_S)
FOOTPRINT(Natu)
OVERWORLD(
@ -1814,6 +1838,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.frontPicFemale = gMonFrontPic_XatuF,
.frontPicSizeFemale = MON_COORDS_SIZE(40, 56),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 9, SHADOW_SIZE_S)
FOOTPRINT(Xatu)
OVERWORLD(
@ -1893,6 +1918,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Mareep,
.iconSprite = gMonIcon_Mareep,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(1, 1, SHADOW_SIZE_M)
FOOTPRINT(Mareep)
OVERWORLD(
@ -1963,6 +1989,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Flaaffy,
.iconSprite = gMonIcon_Flaaffy,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 4, SHADOW_SIZE_S)
FOOTPRINT(Flaaffy)
OVERWORLD(
@ -2041,6 +2068,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Ampharos,
.iconSprite = gMonIcon_Ampharos,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 11, SHADOW_SIZE_M)
FOOTPRINT(Ampharos)
OVERWORLD(
@ -2106,6 +2134,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_AmpharosMega,
.iconSprite = gMonIcon_AmpharosMega,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-7, 13, SHADOW_SIZE_M)
FOOTPRINT(Ampharos)
#if OW_BATTLE_ONLY_FORMS
@ -2189,6 +2218,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Azurill,
.iconSprite = gMonIcon_Azurill,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-4, 3, SHADOW_SIZE_S)
FOOTPRINT(Azurill)
OVERWORLD(
@ -2262,6 +2292,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Marill,
.iconSprite = gMonIcon_Marill,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-2, 0, SHADOW_SIZE_S)
FOOTPRINT(Marill)
OVERWORLD(
@ -2344,6 +2375,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Azumarill,
.iconSprite = gMonIcon_Azumarill,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 8, SHADOW_SIZE_S)
FOOTPRINT(Azumarill)
OVERWORLD(
@ -2415,6 +2447,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Bonsly,
.iconSprite = gMonIcon_Bonsly,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-3, 4, SHADOW_SIZE_S)
FOOTPRINT(Bonsly)
OVERWORLD(
@ -2493,6 +2526,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_SudowoodoF,
.backPicSizeFemale = MON_COORDS_SIZE(48, 56),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 7, SHADOW_SIZE_S)
FOOTPRINT(Sudowoodo)
OVERWORLD(
@ -2575,6 +2609,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Hoppip,
.iconSprite = gMonIcon_Hoppip,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 12, SHADOW_SIZE_S)
FOOTPRINT(Hoppip)
OVERWORLD(
@ -2653,6 +2688,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Skiploom,
.iconSprite = gMonIcon_Skiploom,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 10, SHADOW_SIZE_S)
FOOTPRINT(Skiploom)
OVERWORLD(
@ -2736,6 +2772,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Jumpluff,
.iconSprite = gMonIcon_Jumpluff,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 11, SHADOW_SIZE_S)
FOOTPRINT(Jumpluff)
OVERWORLD(
@ -2809,6 +2846,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_AipomF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 12, SHADOW_SIZE_S)
FOOTPRINT(Aipom)
OVERWORLD(
@ -2891,6 +2929,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_AmbipomF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 13, SHADOW_SIZE_S)
FOOTPRINT(Ambipom)
OVERWORLD(
@ -2974,6 +3013,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Sunkern,
.iconSprite = gMonIcon_Sunkern,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-1, -4, SHADOW_SIZE_S)
FOOTPRINT(Sunkern)
OVERWORLD(
@ -3046,6 +3086,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Sunflora,
.iconSprite = gMonIcon_Sunflora,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 6, SHADOW_SIZE_S)
FOOTPRINT(Sunflora)
OVERWORLD(
@ -3135,6 +3176,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Yanma,
.iconSprite = gMonIcon_Yanma,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 10, SHADOW_SIZE_S)
FOOTPRINT(Yanma)
OVERWORLD(
@ -3229,6 +3271,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Yanmega,
.iconSprite = gMonIcon_Yanmega,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 12, SHADOW_SIZE_M)
FOOTPRINT(Yanmega)
OVERWORLD(
@ -3304,6 +3347,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_WooperF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 40),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(1, -2, SHADOW_SIZE_S)
FOOTPRINT(Wooper)
OVERWORLD(
@ -3385,6 +3429,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_QuagsireF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 8, SHADOW_SIZE_M)
FOOTPRINT(Quagsire)
OVERWORLD(
@ -3455,6 +3500,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_WooperPaldea,
.iconSprite = gMonIcon_WooperPaldea,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-1, -2, SHADOW_SIZE_S)
FOOTPRINT(Wooper)
OVERWORLD(
@ -3521,6 +3567,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Clodsire,
.iconSprite = gMonIcon_Clodsire,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 3, SHADOW_SIZE_L)
FOOTPRINT(Clodsire)
OVERWORLD(
@ -3600,6 +3647,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_MurkrowF,
.backPicSizeFemale = MON_COORDS_SIZE(40, 56),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 8, SHADOW_SIZE_S)
FOOTPRINT(Murkrow)
OVERWORLD(
@ -3677,6 +3725,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Honchkrow,
.iconSprite = gMonIcon_Honchkrow,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 7, SHADOW_SIZE_M)
FOOTPRINT(Honchkrow)
OVERWORLD(
@ -3755,6 +3804,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Misdreavus,
.iconSprite = gMonIcon_Misdreavus,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 10, SHADOW_SIZE_S)
FOOTPRINT(Misdreavus)
OVERWORLD(
@ -3833,6 +3883,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Mismagius,
.iconSprite = gMonIcon_Mismagius,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 11, SHADOW_SIZE_M)
FOOTPRINT(Mismagius)
OVERWORLD(
@ -3897,6 +3948,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Unown, \
.iconSprite = gMonIcon_Unown ##letter, \
.iconPalIndex = 0, \
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, \
SHADOW(0, 3, SHADOW_SIZE_S) \
FOOTPRINT(Unown) \
OVERWORLD( \
@ -4000,6 +4052,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Wynaut,
.iconSprite = gMonIcon_Wynaut,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-1, 2, SHADOW_SIZE_S)
FOOTPRINT(Wynaut)
OVERWORLD(
@ -4081,6 +4134,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconPalIndexFemale = 0,
#endif
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 8, SHADOW_SIZE_M)
FOOTPRINT(Wobbuffet)
OVERWORLD(
@ -4163,6 +4217,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_GirafarigF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 13, SHADOW_SIZE_M)
FOOTPRINT(Girafarig)
OVERWORLD(
@ -4235,6 +4290,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Farigiraf,
.iconSprite = gMonIcon_Farigiraf,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(11, 13, SHADOW_SIZE_L)
FOOTPRINT(Farigiraf)
OVERWORLD(
@ -4309,6 +4365,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Pineco,
.iconSprite = gMonIcon_Pineco,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, 2, SHADOW_SIZE_S)
FOOTPRINT(Pineco)
OVERWORLD(
@ -4378,6 +4435,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Forretress,
.iconSprite = gMonIcon_Forretress,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 6, SHADOW_SIZE_L)
FOOTPRINT(Forretress)
OVERWORLD(
@ -4454,6 +4512,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Dunsparce,
.iconSprite = gMonIcon_Dunsparce,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, -4, SHADOW_SIZE_M)
FOOTPRINT(Dunsparce)
OVERWORLD(
@ -4520,6 +4579,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Dudunsparce,
.iconSprite = gMonIcon_Dudunsparce,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 5, SHADOW_SIZE_L)
FOOTPRINT(Dudunsparce)
OVERWORLD(
@ -4583,6 +4643,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Dudunsparce,
.iconSprite = gMonIcon_Dudunsparce,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 4, SHADOW_SIZE_L)
FOOTPRINT(Dudunsparce)
OVERWORLD(
@ -4659,6 +4720,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_GligarF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 15, SHADOW_SIZE_S)
FOOTPRINT(Gligar)
OVERWORLD(
@ -4738,6 +4800,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Gliscor,
.iconSprite = gMonIcon_Gliscor,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 13, SHADOW_SIZE_M)
FOOTPRINT(Gliscor)
OVERWORLD(
@ -4810,6 +4873,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Snubbull,
.iconSprite = gMonIcon_Snubbull,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-1, 1, SHADOW_SIZE_S)
FOOTPRINT(Snubbull)
OVERWORLD(
@ -4885,6 +4949,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Granbull,
.iconSprite = gMonIcon_Granbull,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 10, SHADOW_SIZE_L)
FOOTPRINT(Granbull)
OVERWORLD(
@ -4968,6 +5033,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Qwilfish,
.iconSprite = gMonIcon_Qwilfish,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 3, SHADOW_SIZE_S)
FOOTPRINT(Qwilfish)
OVERWORLD(
@ -5035,6 +5101,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_QwilfishHisui,
.iconSprite = gMonIcon_QwilfishHisui,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 4, SHADOW_SIZE_S)
FOOTPRINT(Qwilfish)
OVERWORLD(
@ -5100,6 +5167,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Overqwil,
.iconSprite = gMonIcon_Overqwil,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 11, SHADOW_SIZE_M)
FOOTPRINT(Overqwil)
OVERWORLD(
@ -5176,6 +5244,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Shuckle,
.iconSprite = gMonIcon_Shuckle,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(1, 3, SHADOW_SIZE_M)
FOOTPRINT(Shuckle)
OVERWORLD(
@ -5253,6 +5322,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_HeracrossF,
.backPicSizeFemale = MON_COORDS_SIZE(48, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 10, SHADOW_SIZE_M)
FOOTPRINT(Heracross)
OVERWORLD(
@ -5326,6 +5396,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_HeracrossMega,
.iconSprite = gMonIcon_HeracrossMega,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 13, SHADOW_SIZE_M)
FOOTPRINT(Heracross)
#if OW_BATTLE_ONLY_FORMS
@ -5412,6 +5483,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_SneaselF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 5, SHADOW_SIZE_S)
FOOTPRINT(Sneasel)
OVERWORLD(
@ -5497,6 +5569,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_WeavileF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 10, SHADOW_SIZE_M)
FOOTPRINT(Weavile)
OVERWORLD(
@ -5576,6 +5649,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_SneaselHisuiF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 5, SHADOW_SIZE_S)
FOOTPRINT(Sneasel)
OVERWORLD(
@ -5649,6 +5723,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Sneasler,
.iconSprite = gMonIcon_Sneasler,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 11, SHADOW_SIZE_M)
FOOTPRINT(Sneasler)
OVERWORLD(
@ -5723,6 +5798,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Teddiursa,
.iconSprite = gMonIcon_Teddiursa,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-2, 1, SHADOW_SIZE_S)
FOOTPRINT(Teddiursa)
OVERWORLD(
@ -5800,6 +5876,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_UrsaringF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 14, SHADOW_SIZE_L)
FOOTPRINT(Ursaring)
OVERWORLD(
@ -5871,6 +5948,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Ursaluna,
.iconSprite = gMonIcon_Ursaluna,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 4, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Ursaluna)
OVERWORLD(
@ -5934,6 +6012,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_UrsalunaBloodmoon,
.iconSprite = gMonIcon_UrsalunaBloodmoon,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(6, 11, SHADOW_SIZE_L)
FOOTPRINT(Ursaluna)
.levelUpLearnset = sUrsalunaBloodmoonLevelUpLearnset,
@ -5997,6 +6076,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Slugma,
.iconSprite = gMonIcon_Slugma,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, 0, SHADOW_SIZE_S)
FOOTPRINT(Slugma)
OVERWORLD(
@ -6074,6 +6154,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Magcargo,
.iconSprite = gMonIcon_Magcargo,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 5, SHADOW_SIZE_M)
FOOTPRINT(Magcargo)
OVERWORLD(
@ -6147,6 +6228,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Swinub,
.iconSprite = gMonIcon_Swinub,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-3, -6, SHADOW_SIZE_S)
FOOTPRINT(Swinub)
OVERWORLD(
@ -6227,6 +6309,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_PiloswineF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 48),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 3, SHADOW_SIZE_M)
FOOTPRINT(Piloswine)
OVERWORLD(
@ -6312,6 +6395,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.frontPicFemale = gMonFrontPic_MamoswineF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(7, 7, SHADOW_SIZE_L)
FOOTPRINT(Mamoswine)
OVERWORLD(
@ -6402,6 +6486,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Corsola,
.iconSprite = gMonIcon_Corsola,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 1, SHADOW_SIZE_M)
FOOTPRINT(Corsola)
OVERWORLD(
@ -6467,6 +6552,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_CorsolaGalar,
.iconSprite = gMonIcon_CorsolaGalar,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 2, SHADOW_SIZE_M)
FOOTPRINT(Corsola)
OVERWORLD(
@ -6533,6 +6619,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Cursola,
.iconSprite = gMonIcon_Cursola,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 13, SHADOW_SIZE_S)
FOOTPRINT(Cursola)
OVERWORLD(
@ -6606,6 +6693,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Remoraid,
.iconSprite = gMonIcon_Remoraid,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 0, SHADOW_SIZE_S)
FOOTPRINT(Remoraid)
OVERWORLD(
@ -6687,6 +6775,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_OctilleryF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 4, SHADOW_SIZE_M)
FOOTPRINT(Octillery)
OVERWORLD(
@ -6761,6 +6850,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Delibird,
.iconSprite = gMonIcon_Delibird,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 7, SHADOW_SIZE_M)
FOOTPRINT(Delibird)
OVERWORLD(
@ -6832,6 +6922,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Mantyke,
.iconSprite = gMonIcon_Mantyke,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 3, SHADOW_SIZE_S)
FOOTPRINT(Mantyke)
OVERWORLD(
@ -6909,6 +7000,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Mantine,
.iconSprite = gMonIcon_Mantine,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 8, SHADOW_SIZE_M)
FOOTPRINT(Mantine)
OVERWORLD(
@ -6978,6 +7070,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Skarmory,
.iconSprite = gMonIcon_Skarmory,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 9, SHADOW_SIZE_M)
FOOTPRINT(Skarmory)
OVERWORLD(
@ -7046,6 +7139,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Houndour,
.iconSprite = gMonIcon_Houndour,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(0, 4, SHADOW_SIZE_M)
FOOTPRINT(Houndour)
OVERWORLD(
@ -7119,6 +7213,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_HoundoomF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 13, SHADOW_SIZE_L)
FOOTPRINT(Houndoom)
OVERWORLD(
@ -7190,6 +7285,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_HoundoomMega,
.iconSprite = gMonIcon_HoundoomMega,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 13, SHADOW_SIZE_L)
FOOTPRINT(Houndoom)
#if OW_BATTLE_ONLY_FORMS
@ -7268,6 +7364,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Phanpy,
.iconSprite = gMonIcon_Phanpy,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(3, -2, SHADOW_SIZE_M)
FOOTPRINT(Phanpy)
OVERWORLD(
@ -7343,6 +7440,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.backPicFemale = gMonBackPic_DonphanF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 48),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(7, 2, SHADOW_SIZE_L)
FOOTPRINT(Donphan)
OVERWORLD(
@ -7421,6 +7519,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Stantler,
.iconSprite = gMonIcon_Stantler,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 13, SHADOW_SIZE_M)
FOOTPRINT(Stantler)
OVERWORLD(
@ -7487,6 +7586,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Wyrdeer,
.iconSprite = gMonIcon_Wyrdeer,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 13, SHADOW_SIZE_M)
FOOTPRINT(Wyrdeer)
OVERWORLD(
@ -7561,6 +7661,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Smeargle,
.iconSprite = gMonIcon_Smeargle,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(6, 7, SHADOW_SIZE_S)
FOOTPRINT(Smeargle)
OVERWORLD(
@ -7635,6 +7736,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Miltank,
.iconSprite = gMonIcon_Miltank,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 4, SHADOW_SIZE_M)
FOOTPRINT(Miltank)
OVERWORLD(
@ -7715,6 +7817,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Raikou,
.iconSprite = gMonIcon_Raikou,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 7, SHADOW_SIZE_L)
FOOTPRINT(Raikou)
OVERWORLD(
@ -7795,6 +7898,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Entei,
.iconSprite = gMonIcon_Entei,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 8, SHADOW_SIZE_L)
FOOTPRINT(Entei)
OVERWORLD(
@ -7875,6 +7979,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Suicune,
.iconSprite = gMonIcon_Suicune,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Suicune)
OVERWORLD(
@ -7946,6 +8051,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Larvitar,
.iconSprite = gMonIcon_Larvitar,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(0, 3, SHADOW_SIZE_S)
FOOTPRINT(Larvitar)
OVERWORLD(
@ -8013,6 +8119,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Pupitar,
.iconSprite = gMonIcon_Pupitar,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 3, SHADOW_SIZE_S)
FOOTPRINT(Pupitar)
OVERWORLD(
@ -8087,6 +8194,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Tyranitar,
.iconSprite = gMonIcon_Tyranitar,
.iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 4,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 11, SHADOW_SIZE_L)
FOOTPRINT(Tyranitar)
OVERWORLD(
@ -8152,6 +8260,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_TyranitarMega,
.iconSprite = gMonIcon_TyranitarMega,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 13, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Tyranitar)
#if OW_BATTLE_ONLY_FORMS
@ -8243,6 +8352,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Lugia,
.iconSprite = gMonIcon_Lugia,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 17, SHADOW_SIZE_L)
FOOTPRINT(Lugia)
OVERWORLD(
@ -8322,6 +8432,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_HoOh,
.iconSprite = gMonIcon_HoOh,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 17, SHADOW_SIZE_L)
FOOTPRINT(HoOh)
OVERWORLD(
@ -8403,6 +8514,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.shinyPalette = gMonShinyPalette_Celebi,
.iconSprite = gMonIcon_Celebi,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 14, SHADOW_SIZE_S)
FOOTPRINT(Celebi)
OVERWORLD(

File diff suppressed because it is too large Load Diff

View File

@ -55,6 +55,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Turtwig,
.iconSprite = gMonIcon_Turtwig,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(1, 2, SHADOW_SIZE_S)
FOOTPRINT(Turtwig)
OVERWORLD(
@ -124,6 +125,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Grotle,
.iconSprite = gMonIcon_Grotle,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 2, SHADOW_SIZE_L)
FOOTPRINT(Grotle)
OVERWORLD(
@ -198,6 +200,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Torterra,
.iconSprite = gMonIcon_Torterra,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 10, SHADOW_SIZE_L)
FOOTPRINT(Torterra)
OVERWORLD(
@ -270,6 +273,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Chimchar,
.iconSprite = gMonIcon_Chimchar,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(4, 3, SHADOW_SIZE_S)
FOOTPRINT(Chimchar)
OVERWORLD(
@ -342,6 +346,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Monferno,
.iconSprite = gMonIcon_Monferno,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-7, 6, SHADOW_SIZE_S)
FOOTPRINT(Monferno)
OVERWORLD(
@ -417,6 +422,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Infernape,
.iconSprite = gMonIcon_Infernape,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 9, SHADOW_SIZE_L)
FOOTPRINT(Infernape)
OVERWORLD(
@ -489,6 +495,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Piplup,
.iconSprite = gMonIcon_Piplup,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(0, -1, SHADOW_SIZE_S)
FOOTPRINT(Piplup)
OVERWORLD(
@ -567,6 +574,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Prinplup,
.iconSprite = gMonIcon_Prinplup,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 7, SHADOW_SIZE_M)
FOOTPRINT(Prinplup)
OVERWORLD(
@ -644,6 +652,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Empoleon,
.iconSprite = gMonIcon_Empoleon,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 12, SHADOW_SIZE_M)
FOOTPRINT(Empoleon)
OVERWORLD(
@ -724,6 +733,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_StarlyF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 48),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 1, SHADOW_SIZE_S)
FOOTPRINT(Starly)
OVERWORLD(
@ -804,6 +814,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_StaraviaF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 5, SHADOW_SIZE_S)
FOOTPRINT(Staravia)
OVERWORLD(
@ -889,6 +900,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.frontPicFemale = gMonFrontPic_StaraptorF,
.frontPicSizeFemale = MON_COORDS_SIZE(56, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 10, SHADOW_SIZE_M)
FOOTPRINT(Staraptor)
OVERWORLD(
@ -974,6 +986,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_BidoofF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 40),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(1, 1, SHADOW_SIZE_M)
FOOTPRINT(Bidoof)
OVERWORLD(
@ -1055,6 +1068,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.frontPicFemale = gMonFrontPic_BibarelF,
.frontPicSizeFemale = MON_COORDS_SIZE(56, 48),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 5, SHADOW_SIZE_M)
FOOTPRINT(Bibarel)
OVERWORLD(
@ -1150,6 +1164,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_KricketotF,
.backPicSizeFemale = MON_COORDS_SIZE(48, 56),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-5, 2, SHADOW_SIZE_S)
FOOTPRINT(Kricketot)
OVERWORLD(
@ -1236,6 +1251,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_KricketuneF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 6, SHADOW_SIZE_S)
FOOTPRINT(Kricketune)
OVERWORLD(
@ -1317,6 +1333,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_ShinxF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 48),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-1, 1, SHADOW_SIZE_S)
FOOTPRINT(Shinx)
OVERWORLD(
@ -1397,6 +1414,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_LuxioF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 2, SHADOW_SIZE_M)
FOOTPRINT(Luxio)
OVERWORLD(
@ -1485,6 +1503,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_LuxrayF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 10, SHADOW_SIZE_L)
FOOTPRINT(Luxray)
OVERWORLD(
@ -1559,6 +1578,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Cranidos,
.iconSprite = gMonIcon_Cranidos,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 4, SHADOW_SIZE_S)
FOOTPRINT(Cranidos)
OVERWORLD(
@ -1629,6 +1649,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Rampardos,
.iconSprite = gMonIcon_Rampardos,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(7, 11, SHADOW_SIZE_L)
FOOTPRINT(Rampardos)
OVERWORLD(
@ -1697,6 +1718,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Shieldon,
.iconSprite = gMonIcon_Shieldon,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(3, -1, SHADOW_SIZE_S)
FOOTPRINT(Shieldon)
OVERWORLD(
@ -1765,6 +1787,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Bastiodon,
.iconSprite = gMonIcon_Bastiodon,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 6, SHADOW_SIZE_L)
FOOTPRINT(Bastiodon)
OVERWORLD(
@ -1830,6 +1853,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_BurmyPlant,
.iconSprite = gMonIcon_BurmyPlant,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 8, SHADOW_SIZE_S)
FOOTPRINT(Burmy)
OVERWORLD(
@ -1898,6 +1922,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_BurmySandy,
.iconSprite = gMonIcon_BurmySandy,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 9, SHADOW_SIZE_S)
FOOTPRINT(Burmy)
OVERWORLD(
@ -1966,6 +1991,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_BurmyTrash,
.iconSprite = gMonIcon_BurmyTrash,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 13, SHADOW_SIZE_S)
FOOTPRINT(Burmy)
OVERWORLD(
@ -2035,6 +2061,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_WormadamPlant,
.iconSprite = gMonIcon_WormadamPlant,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 9, SHADOW_SIZE_S)
FOOTPRINT(Wormadam)
OVERWORLD(
@ -2100,6 +2127,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_WormadamSandy,
.iconSprite = gMonIcon_WormadamSandy,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 9, SHADOW_SIZE_S)
FOOTPRINT(Wormadam)
OVERWORLD(
@ -2166,6 +2194,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_WormadamTrash,
.iconSprite = gMonIcon_WormadamTrash,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 9, SHADOW_SIZE_S)
FOOTPRINT(Wormadam)
OVERWORLD(
@ -2228,6 +2257,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Mothim, \
.iconSprite = gMonIcon_Mothim, \
.iconPalIndex = 0, \
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, \
SHADOW(-1, 9, SHADOW_SIZE_S) \
FOOTPRINT(Mothim) \
OVERWORLD( \
@ -2311,6 +2341,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.paletteFemale = gMonPalette_CombeeF,
.shinyPaletteFemale = gMonShinyPalette_CombeeF,
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 10, SHADOW_SIZE_S)
FOOTPRINT(Combee)
OVERWORLD(
@ -2395,6 +2426,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Vespiquen,
.iconSprite = gMonIcon_Vespiquen,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 11, SHADOW_SIZE_L)
FOOTPRINT(Vespiquen)
OVERWORLD(
@ -2473,6 +2505,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.frontPicFemale = gMonFrontPic_PachirisuF,
.frontPicSizeFemale = MON_COORDS_SIZE(48, 56),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-2, 1, SHADOW_SIZE_S)
FOOTPRINT(Pachirisu)
OVERWORLD(
@ -2553,6 +2586,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_BuizelF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 48),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(1, 4, SHADOW_SIZE_S)
FOOTPRINT(Buizel)
OVERWORLD(
@ -2635,6 +2669,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_FloatzelF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 10, SHADOW_SIZE_M)
FOOTPRINT(Floatzel)
OVERWORLD(
@ -2717,6 +2752,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Cherubi,
.iconSprite = gMonIcon_Cherubi,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-4, -2, SHADOW_SIZE_S)
FOOTPRINT(Cherubi)
OVERWORLD(
@ -2788,6 +2824,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_CherrimOvercast,
.iconSprite = gMonIcon_CherrimOvercast,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(0, 6, SHADOW_SIZE_S)
FOOTPRINT(Cherrim)
OVERWORLD(
@ -2860,6 +2897,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_CherrimSunshine,
.iconSprite = gMonIcon_CherrimSunshine,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(1, 2, SHADOW_SIZE_S)
FOOTPRINT(Cherrim)
.levelUpLearnset = sCherrimLevelUpLearnset,
@ -2917,6 +2955,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_ShellosWestSea,
.iconSprite = gMonIcon_ShellosWestSea,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(1, 0, SHADOW_SIZE_S)
FOOTPRINT(Shellos)
OVERWORLD(
@ -2982,6 +3021,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_ShellosEast,
.iconSprite = gMonIcon_ShellosEast,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(2, -1, SHADOW_SIZE_S)
FOOTPRINT(Shellos)
OVERWORLD(
@ -3047,6 +3087,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_GastrodonWestSea,
.iconSprite = gMonIcon_GastrodonWestSea,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 3, SHADOW_SIZE_M)
FOOTPRINT(Gastrodon)
OVERWORLD(
@ -3110,6 +3151,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_GastrodonEast,
.iconSprite = gMonIcon_GastrodonEast,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 4, SHADOW_SIZE_M)
FOOTPRINT(Gastrodon)
OVERWORLD(
@ -3181,6 +3223,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Drifloon,
.iconSprite = gMonIcon_Drifloon,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 9, SHADOW_SIZE_S)
FOOTPRINT(Drifloon)
OVERWORLD(
@ -3253,6 +3296,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Drifblim,
.iconSprite = gMonIcon_Drifblim,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 11, SHADOW_SIZE_M)
FOOTPRINT(Drifblim)
OVERWORLD(
@ -3320,6 +3364,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Buneary,
.iconSprite = gMonIcon_Buneary,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(3, 5, SHADOW_SIZE_S)
FOOTPRINT(Buneary)
OVERWORLD(
@ -3388,6 +3433,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Lopunny,
.iconSprite = gMonIcon_Lopunny,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 10, SHADOW_SIZE_S)
FOOTPRINT(Lopunny)
OVERWORLD(
@ -3453,6 +3499,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_LopunnyMega,
.iconSprite = gMonIcon_LopunnyMega,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_S)
FOOTPRINT(Lopunny)
#if OW_BATTLE_ONLY_FORMS
@ -3527,6 +3574,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Glameow,
.iconSprite = gMonIcon_Glameow,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-3, 6, SHADOW_SIZE_S)
FOOTPRINT(Glameow)
OVERWORLD(
@ -3599,6 +3647,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Purugly,
.iconSprite = gMonIcon_Purugly,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 8, SHADOW_SIZE_L)
FOOTPRINT(Purugly)
OVERWORLD(
@ -3669,6 +3718,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Stunky,
.iconSprite = gMonIcon_Stunky,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-1, 0, SHADOW_SIZE_M)
FOOTPRINT(Stunky)
OVERWORLD(
@ -3737,6 +3787,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Skuntank,
.iconSprite = gMonIcon_Skuntank,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 6, SHADOW_SIZE_L)
FOOTPRINT(Skuntank)
OVERWORLD(
@ -3814,6 +3865,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Bronzor,
.iconSprite = gMonIcon_Bronzor,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 6, SHADOW_SIZE_S)
FOOTPRINT(Bronzor)
OVERWORLD(
@ -3886,6 +3938,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Bronzong,
.iconSprite = gMonIcon_Bronzong,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 12, SHADOW_SIZE_M)
FOOTPRINT(Bronzong)
OVERWORLD(
@ -3968,6 +4021,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Chatot,
.iconSprite = gMonIcon_Chatot,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 3, SHADOW_SIZE_S)
FOOTPRINT(Chatot)
OVERWORLD(
@ -4037,6 +4091,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Spiritomb,
.iconSprite = gMonIcon_Spiritomb,
.iconPalIndex = 5,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 7, SHADOW_SIZE_L)
FOOTPRINT(Spiritomb)
OVERWORLD(
@ -4112,6 +4167,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_GibleF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 48),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(1, 5, SHADOW_SIZE_M)
FOOTPRINT(Gible)
OVERWORLD(
@ -4192,6 +4248,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_GabiteF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 8, SHADOW_SIZE_M)
FOOTPRINT(Gabite)
OVERWORLD(
@ -4279,6 +4336,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.frontPicFemale = gMonFrontPic_GarchompF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 11, SHADOW_SIZE_L)
FOOTPRINT(Garchomp)
OVERWORLD(
@ -4351,6 +4409,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_GarchompMega,
.iconSprite = gMonIcon_GarchompMega,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 12, SHADOW_SIZE_L)
FOOTPRINT(Garchomp)
#if OW_BATTLE_ONLY_FORMS
@ -4426,6 +4485,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Riolu,
.iconSprite = gMonIcon_Riolu,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(3, 3, SHADOW_SIZE_S)
FOOTPRINT(Riolu)
OVERWORLD(
@ -4494,6 +4554,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Lucario,
.iconSprite = gMonIcon_Lucario,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 7, SHADOW_SIZE_M)
FOOTPRINT(Lucario)
OVERWORLD(
@ -4560,6 +4621,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_LucarioMega,
.iconSprite = gMonIcon_LucarioMega,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 11, SHADOW_SIZE_M)
FOOTPRINT(Lucario)
#if OW_BATTLE_ONLY_FORMS
@ -4642,6 +4704,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconPalIndexFemale = 1,
#endif
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, -1, SHADOW_SIZE_L)
FOOTPRINT(Hippopotas)
OVERWORLD(
@ -4724,6 +4787,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconPalIndexFemale = 1,
#endif
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
NO_SHADOW
FOOTPRINT(Hippowdon)
OVERWORLD(
@ -4810,6 +4874,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Skorupi,
.iconSprite = gMonIcon_Skorupi,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 3, SHADOW_SIZE_S)
FOOTPRINT(Skorupi)
OVERWORLD(
@ -4885,6 +4950,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Drapion,
.iconSprite = gMonIcon_Drapion,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 6, SHADOW_SIZE_L)
FOOTPRINT(Drapion)
OVERWORLD(
@ -4961,6 +5027,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_CroagunkF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 56),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(2, 4, SHADOW_SIZE_S)
FOOTPRINT(Croagunk)
OVERWORLD(
@ -5045,6 +5112,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_ToxicroakF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 56),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 7, SHADOW_SIZE_M)
FOOTPRINT(Toxicroak)
OVERWORLD(
@ -5130,6 +5198,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Carnivine,
.iconSprite = gMonIcon_Carnivine,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Carnivine)
OVERWORLD(
@ -5210,6 +5279,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_FinneonF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 40),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 1, SHADOW_SIZE_S)
FOOTPRINT(Finneon)
OVERWORLD(
@ -5294,6 +5364,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_LumineonF,
.backPicSizeFemale = MON_COORDS_SIZE(56, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 8, SHADOW_SIZE_M)
FOOTPRINT(Lumineon)
OVERWORLD(
@ -5376,6 +5447,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.backPicFemale = gMonBackPic_SnoverF,
.backPicSizeFemale = MON_COORDS_SIZE(64, 56),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 4, SHADOW_SIZE_M)
FOOTPRINT(Snover)
OVERWORLD(
@ -5457,6 +5529,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.frontPicFemale = gMonFrontPic_AbomasnowF,
.frontPicSizeFemale = MON_COORDS_SIZE(64, 64),
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 11, SHADOW_SIZE_L)
FOOTPRINT(Abomasnow)
OVERWORLD(
@ -5531,6 +5604,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_AbomasnowMega,
.iconSprite = gMonIcon_AbomasnowMega,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Abomasnow)
#if OW_BATTLE_ONLY_FORMS
@ -5609,6 +5683,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Rotom,
.iconSprite = gMonIcon_Rotom,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 10, SHADOW_SIZE_S)
FOOTPRINT(Rotom)
OVERWORLD(
@ -5687,6 +5762,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_RotomHeat,
.iconSprite = gMonIcon_RotomHeat,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 7, SHADOW_SIZE_M)
FOOTPRINT(Rotom)
OVERWORLD(
@ -5758,6 +5834,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_RotomWash,
.iconSprite = gMonIcon_RotomWash,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 10, SHADOW_SIZE_M)
FOOTPRINT(Rotom)
OVERWORLD(
@ -5827,6 +5904,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_RotomFrost,
.iconSprite = gMonIcon_RotomFrost,
.iconPalIndex = 5,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_M)
FOOTPRINT(Rotom)
OVERWORLD(
@ -5921,6 +5999,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_RotomFan,
.iconSprite = gMonIcon_RotomFan,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 9, SHADOW_SIZE_S)
FOOTPRINT(Rotom)
OVERWORLD(
@ -5993,6 +6072,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_RotomMow,
.iconSprite = gMonIcon_RotomMow,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 14, SHADOW_SIZE_M)
FOOTPRINT(Rotom)
OVERWORLD(
@ -6071,6 +6151,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Uxie,
.iconSprite = gMonIcon_Uxie,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 11, SHADOW_SIZE_S)
FOOTPRINT(Uxie)
OVERWORLD(
@ -6155,6 +6236,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Mesprit,
.iconSprite = gMonIcon_Mesprit,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_S)
FOOTPRINT(Mesprit)
OVERWORLD(
@ -6233,6 +6315,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Azelf,
.iconSprite = gMonIcon_Azelf,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 17, SHADOW_SIZE_S)
FOOTPRINT(Azelf)
OVERWORLD(
@ -6310,6 +6393,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Dialga,
.iconSprite = gMonIcon_Dialga,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 12, SHADOW_SIZE_L)
FOOTPRINT(Dialga)
OVERWORLD(
@ -6377,6 +6461,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_DialgaOrigin,
.iconSprite = gMonIcon_DialgaOrigin,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 11, SHADOW_SIZE_L)
FOOTPRINT(Dialga)
OVERWORLD(
@ -6457,6 +6542,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Palkia,
.iconSprite = gMonIcon_Palkia,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 10, SHADOW_SIZE_L)
FOOTPRINT(Palkia)
OVERWORLD(
@ -6524,6 +6610,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_PalkiaOrigin,
.iconSprite = gMonIcon_PalkiaOrigin,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 14, SHADOW_SIZE_L)
FOOTPRINT(Palkia)
OVERWORLD(
@ -6603,6 +6690,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Heatran,
.iconSprite = gMonIcon_Heatran,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 2, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Heatran)
OVERWORLD(
@ -6678,6 +6766,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Regigigas,
.iconSprite = gMonIcon_Regigigas,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Regigigas)
OVERWORLD(
@ -6756,6 +6845,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_GiratinaAltered,
.iconSprite = gMonIcon_GiratinaAltered,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 11, SHADOW_SIZE_L)
FOOTPRINT(GiratinaAltered)
OVERWORLD(
@ -6830,6 +6920,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_GiratinaOrigin,
.iconSprite = gMonIcon_GiratinaOrigin,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 18, SHADOW_SIZE_L)
FOOTPRINT(GiratinaOrigin)
OVERWORLD(
@ -6913,6 +7004,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Cresselia,
.iconSprite = gMonIcon_Cresselia,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 12, SHADOW_SIZE_M)
FOOTPRINT(Cresselia)
OVERWORLD(
@ -6990,6 +7082,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Phione,
.iconSprite = gMonIcon_Phione,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 7, SHADOW_SIZE_S)
FOOTPRINT(Phione)
OVERWORLD(
@ -7066,6 +7159,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Manaphy,
.iconSprite = gMonIcon_Manaphy,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 8, SHADOW_SIZE_S)
FOOTPRINT(Manaphy)
OVERWORLD(
@ -7145,6 +7239,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_Darkrai,
.iconSprite = gMonIcon_Darkrai,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 12, SHADOW_SIZE_M)
FOOTPRINT(Darkrai)
OVERWORLD(
@ -7226,6 +7321,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_ShayminLand,
.iconSprite = gMonIcon_ShayminLand,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(1, -3, SHADOW_SIZE_S)
FOOTPRINT(Shaymin)
OVERWORLD(
@ -7304,6 +7400,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.shinyPalette = gMonShinyPalette_ShayminSky,
.iconSprite = gMonIcon_ShayminSky,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 7, SHADOW_SIZE_M)
FOOTPRINT(Shaymin)
OVERWORLD(
@ -7385,6 +7482,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.palette = gMonPalette_Arceus ##typeName, \
.shinyPalette = gMonShinyPalette_Arceus ##typeName, \
ARCEUS_ICON(typeName, iconPal) \
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, \
SHADOW(-1, 15, SHADOW_SIZE_XL_BATTLE_ONLY) \
FOOTPRINT(Arceus) \
OVERWORLD( \

File diff suppressed because it is too large Load Diff

View File

@ -57,6 +57,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Chespin,
.iconSprite = gMonIcon_Chespin,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-2, 3, SHADOW_SIZE_S)
FOOTPRINT(Chespin)
OVERWORLD(
@ -127,6 +128,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Quilladin,
.iconSprite = gMonIcon_Quilladin,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(2, 4, SHADOW_SIZE_M)
FOOTPRINT(Quilladin)
OVERWORLD(
@ -194,6 +196,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Chesnaught,
.iconSprite = gMonIcon_Chesnaught,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 10, SHADOW_SIZE_L)
FOOTPRINT(Chesnaught)
OVERWORLD(
@ -266,6 +269,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Fennekin,
.iconSprite = gMonIcon_Fennekin,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(0, 4, SHADOW_SIZE_S)
FOOTPRINT(Fennekin)
OVERWORLD(
@ -334,6 +338,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Braixen,
.iconSprite = gMonIcon_Braixen,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 10, SHADOW_SIZE_M)
FOOTPRINT(Braixen)
OVERWORLD(
@ -405,6 +410,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Delphox,
.iconSprite = gMonIcon_Delphox,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(7, 14, SHADOW_SIZE_M)
FOOTPRINT(Delphox)
OVERWORLD(
@ -477,6 +483,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Froakie,
.iconSprite = gMonIcon_Froakie,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(2, 0, SHADOW_SIZE_S)
FOOTPRINT(Froakie)
OVERWORLD(
@ -544,6 +551,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Frogadier,
.iconSprite = gMonIcon_Frogadier,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(0, 5, SHADOW_SIZE_M)
FOOTPRINT(Frogadier)
OVERWORLD(
@ -604,6 +612,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Greninja,
.iconSprite = gMonIcon_Greninja,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 6, SHADOW_SIZE_L)
FOOTPRINT(Greninja)
OVERWORLD(
@ -664,6 +673,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Greninja,
.iconSprite = gMonIcon_Greninja,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 6, SHADOW_SIZE_L)
FOOTPRINT(Greninja)
OVERWORLD(
@ -731,6 +741,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_GreninjaAsh,
.iconSprite = gMonIcon_GreninjaAsh,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 10, SHADOW_SIZE_L)
FOOTPRINT(Greninja)
.levelUpLearnset = sGreninjaLevelUpLearnset,
@ -791,6 +802,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Bunnelby,
.iconSprite = gMonIcon_Bunnelby,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(3, 9, SHADOW_SIZE_S)
FOOTPRINT(Bunnelby)
OVERWORLD(
@ -858,6 +870,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Diggersby,
.iconSprite = gMonIcon_Diggersby,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(8, 10, SHADOW_SIZE_M)
FOOTPRINT(Diggersby)
OVERWORLD(
@ -929,6 +942,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Fletchling,
.iconSprite = gMonIcon_Fletchling,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 0, SHADOW_SIZE_S)
FOOTPRINT(Fletchling)
OVERWORLD(
@ -1003,6 +1017,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Fletchinder,
.iconSprite = gMonIcon_Fletchinder,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 12, SHADOW_SIZE_S)
FOOTPRINT(Fletchinder)
OVERWORLD(
@ -1070,6 +1085,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Talonflame,
.iconSprite = gMonIcon_Talonflame,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 17, SHADOW_SIZE_M)
FOOTPRINT(Talonflame)
OVERWORLD(
@ -1130,6 +1146,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Scatterbug, \
.iconSprite = gMonIcon_Scatterbug, \
.iconPalIndex = 1, \
.pokemonJumpType = PKMN_JUMP_TYPE_FAST, \
SHADOW(1, 1, SHADOW_SIZE_S) \
FOOTPRINT(Scatterbug) \
OVERWORLD( \
@ -1213,6 +1230,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Spewpa, \
.iconSprite = gMonIcon_Spewpa, \
.iconPalIndex = 1, \
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, \
SHADOW(0, 2, SHADOW_SIZE_M) \
FOOTPRINT(Spewpa) \
OVERWORLD( \
@ -1296,6 +1314,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Vivillon ##form, \
.iconSprite = gMonIcon_Vivillon ##form, \
.iconPalIndex = iconPal, \
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, \
SHADOW(0, 20, SHADOW_SIZE_M) \
FOOTPRINT(Vivillon) \
OVERWORLD( \
@ -1545,6 +1564,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Litleo,
.iconSprite = gMonIcon_Litleo,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(2, 3, SHADOW_SIZE_S)
FOOTPRINT(Litleo)
OVERWORLD(
@ -1620,6 +1640,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSpriteFemale = gMonIcon_PyroarF,
.iconPalIndexFemale = 2,
#endif //P_GENDER_DIFFERENCES
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 11, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Pyroar)
OVERWORLD(
@ -1686,6 +1707,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Flabebe##Form, \
.iconSprite = gMonIcon_Flabebe##Form, \
.iconPalIndex = iconPal, \
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, \
SHADOW(0, 11, SHADOW_SIZE_S) \
FOOTPRINT(Flabebe) \
OVERWORLD( \
@ -1775,6 +1797,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Floette ##form, \
.iconSprite = gMonIcon_Floette##form, \
.iconPalIndex = iconPal, \
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, \
SHADOW(-3, 12, SHADOW_SIZE_S) \
FOOTPRINT(Floette) \
OVERWORLD( \
@ -1924,6 +1947,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Florges##Form, \
.iconSprite = gMonIcon_Florges##Form, \
.iconPalIndex = iconPal, \
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, \
SHADOW(-5, 15, SHADOW_SIZE_M) \
FOOTPRINT(Florges) \
OVERWORLD( \
@ -2036,6 +2060,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Skiddo,
.iconSprite = gMonIcon_Skiddo,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 7, SHADOW_SIZE_M)
FOOTPRINT(Skiddo)
OVERWORLD(
@ -2104,6 +2129,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Gogoat,
.iconSprite = gMonIcon_Gogoat,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 9, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Gogoat)
OVERWORLD(
@ -2176,6 +2202,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Pancham,
.iconSprite = gMonIcon_Pancham,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-2, 2, SHADOW_SIZE_S)
FOOTPRINT(Pancham)
OVERWORLD(
@ -2248,6 +2275,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Pangoro,
.iconSprite = gMonIcon_Pangoro,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 13, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Pangoro)
OVERWORLD(
@ -2309,6 +2337,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Furfrou##_form, \
.iconSprite = gMonIcon_Furfrou##_form, \
.iconPalIndex = _iconIdx, \
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, \
SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) \
FOOTPRINT(Furfrou) \
OVERWORLD( \
@ -2395,6 +2424,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Espurr,
.iconSprite = gMonIcon_Espurr,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-1, 4, SHADOW_SIZE_S)
FOOTPRINT(Espurr)
OVERWORLD(
@ -2460,6 +2490,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_MeowsticM,
.iconSprite = gMonIcon_MeowsticM,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-2, 11, SHADOW_SIZE_S)
FOOTPRINT(Meowstic)
OVERWORLD(
@ -2523,6 +2554,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_MeowsticF,
.iconSprite = gMonIcon_MeowsticF,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-2, 12, SHADOW_SIZE_S)
FOOTPRINT(Meowstic)
OVERWORLD(
@ -2593,6 +2625,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Honedge,
.iconSprite = gMonIcon_Honedge,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-10, 11, SHADOW_SIZE_S)
FOOTPRINT(Honedge)
OVERWORLD(
@ -2664,6 +2697,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Doublade,
.iconSprite = gMonIcon_Doublade,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(8, 11, SHADOW_SIZE_M)
FOOTPRINT(Doublade)
OVERWORLD(
@ -2737,6 +2771,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_AegislashShield,
.iconSprite = gMonIcon_AegislashShield,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 14, SHADOW_SIZE_M)
FOOTPRINT(Aegislash)
OVERWORLD(
@ -2814,6 +2849,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_AegislashBlade,
.iconSprite = gMonIcon_AegislashBlade,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 14, SHADOW_SIZE_M)
FOOTPRINT(Aegislash)
.levelUpLearnset = sAegislashLevelUpLearnset,
@ -2879,6 +2915,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Spritzee,
.iconSprite = gMonIcon_Spritzee,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 13, SHADOW_SIZE_S)
FOOTPRINT(Spritzee)
OVERWORLD(
@ -2947,6 +2984,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Aromatisse,
.iconSprite = gMonIcon_Aromatisse,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 10, SHADOW_SIZE_M)
FOOTPRINT(Aromatisse)
OVERWORLD(
@ -3019,6 +3057,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Swirlix,
.iconSprite = gMonIcon_Swirlix,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, -1, SHADOW_SIZE_S)
FOOTPRINT(Swirlix)
OVERWORLD(
@ -3090,6 +3129,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Slurpuff,
.iconSprite = gMonIcon_Slurpuff,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 6, SHADOW_SIZE_M)
FOOTPRINT(Slurpuff)
OVERWORLD(
@ -3160,6 +3200,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Inkay,
.iconSprite = gMonIcon_Inkay,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 11, SHADOW_SIZE_S)
FOOTPRINT(Inkay)
OVERWORLD(
@ -3229,6 +3270,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Malamar,
.iconSprite = gMonIcon_Malamar,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 14, SHADOW_SIZE_M)
FOOTPRINT(Malamar)
OVERWORLD(
@ -3300,6 +3342,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Binacle,
.iconSprite = gMonIcon_Binacle,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-3, 5, SHADOW_SIZE_M)
FOOTPRINT(Binacle)
OVERWORLD(
@ -3368,6 +3411,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Barbaracle,
.iconSprite = gMonIcon_Barbaracle,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 14, SHADOW_SIZE_L)
FOOTPRINT(Barbaracle)
OVERWORLD(
@ -3441,6 +3485,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Skrelp,
.iconSprite = gMonIcon_Skrelp,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 5, SHADOW_SIZE_S)
FOOTPRINT(Skrelp)
OVERWORLD(
@ -3510,6 +3555,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Dragalge,
.iconSprite = gMonIcon_Dragalge,
.iconPalIndex = 5,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 14, SHADOW_SIZE_M)
FOOTPRINT(Dragalge)
OVERWORLD(
@ -3581,6 +3627,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Clauncher,
.iconSprite = gMonIcon_Clauncher,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(4, -6, SHADOW_SIZE_M)
FOOTPRINT(Clauncher)
OVERWORLD(
@ -3655,6 +3702,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Clawitzer,
.iconSprite = gMonIcon_Clawitzer,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(6, 1, SHADOW_SIZE_L)
FOOTPRINT(Clawitzer)
OVERWORLD(
@ -3723,6 +3771,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Helioptile,
.iconSprite = gMonIcon_Helioptile,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-1, 1, SHADOW_SIZE_S)
FOOTPRINT(Helioptile)
OVERWORLD(
@ -3792,6 +3841,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Heliolisk,
.iconSprite = gMonIcon_Heliolisk,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 10, SHADOW_SIZE_M)
FOOTPRINT(Heliolisk)
OVERWORLD(
@ -3861,6 +3911,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Tyrunt,
.iconSprite = gMonIcon_Tyrunt,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 2, SHADOW_SIZE_M)
FOOTPRINT(Tyrunt)
OVERWORLD(
@ -3928,6 +3979,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Tyrantrum,
.iconSprite = gMonIcon_Tyrantrum,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 14, SHADOW_SIZE_L)
FOOTPRINT(Tyrantrum)
OVERWORLD(
@ -4003,6 +4055,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Amaura,
.iconSprite = gMonIcon_Amaura,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 8, SHADOW_SIZE_S)
FOOTPRINT(Amaura)
OVERWORLD(
@ -4070,6 +4123,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Aurorus,
.iconSprite = gMonIcon_Aurorus,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-6, 14, SHADOW_SIZE_L)
FOOTPRINT(Aurorus)
OVERWORLD(
@ -4143,6 +4197,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Hawlucha,
.iconSprite = gMonIcon_Hawlucha,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 6, SHADOW_SIZE_S)
FOOTPRINT(Hawlucha)
OVERWORLD(
@ -4212,6 +4267,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Dedenne,
.iconSprite = gMonIcon_Dedenne,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-2, 1, SHADOW_SIZE_S)
FOOTPRINT(Dedenne)
OVERWORLD(
@ -4289,6 +4345,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Carbink,
.iconSprite = gMonIcon_Carbink,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 5, SHADOW_SIZE_S)
FOOTPRINT(Carbink)
OVERWORLD(
@ -4358,6 +4415,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Goomy,
.iconSprite = gMonIcon_Goomy,
.iconPalIndex = 5,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-1, -1, SHADOW_SIZE_S)
FOOTPRINT(Goomy)
OVERWORLD(
@ -4428,6 +4486,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Sliggoo,
.iconSprite = gMonIcon_Sliggoo,
.iconPalIndex = 5,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 6, SHADOW_SIZE_S)
FOOTPRINT(Sliggoo)
OVERWORLD(
@ -4499,6 +4558,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Goodra,
.iconSprite = gMonIcon_Goodra,
.iconPalIndex = 5,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 14, SHADOW_SIZE_M)
FOOTPRINT(Goodra)
OVERWORLD(
@ -4564,6 +4624,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_SliggooHisui,
.iconSprite = gMonIcon_SliggooHisui,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(2, 6, SHADOW_SIZE_M)
FOOTPRINT(Sliggoo)
OVERWORLD(
@ -4630,6 +4691,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_GoodraHisui,
.iconSprite = gMonIcon_GoodraHisui,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 12, SHADOW_SIZE_M)
FOOTPRINT(Goodra)
OVERWORLD(
@ -4709,6 +4771,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Klefki,
.iconSprite = gMonIcon_Klefki,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 12, SHADOW_SIZE_S)
FOOTPRINT(Klefki)
OVERWORLD(
@ -4779,6 +4842,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Phantump,
.iconSprite = gMonIcon_Phantump,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 5, SHADOW_SIZE_S)
FOOTPRINT(Phantump)
OVERWORLD(
@ -4851,6 +4915,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Trevenant,
.iconSprite = gMonIcon_Trevenant,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 13, SHADOW_SIZE_M)
FOOTPRINT(Trevenant)
OVERWORLD(
@ -4915,6 +4980,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Pumpkaboo,
.iconSprite = gMonIcon_Pumpkaboo,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 1, SHADOW_SIZE_S)
FOOTPRINT(Pumpkaboo)
OVERWORLD(
@ -4980,6 +5046,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Pumpkaboo,
.iconSprite = gMonIcon_Pumpkaboo,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, -1, SHADOW_SIZE_S)
FOOTPRINT(Pumpkaboo)
OVERWORLD(
@ -5045,6 +5112,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Pumpkaboo,
.iconSprite = gMonIcon_Pumpkaboo,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 2, SHADOW_SIZE_S)
FOOTPRINT(Pumpkaboo)
OVERWORLD(
@ -5112,6 +5180,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Pumpkaboo,
.iconSprite = gMonIcon_Pumpkaboo,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 4, SHADOW_SIZE_S)
FOOTPRINT(Pumpkaboo)
OVERWORLD(
@ -5178,6 +5247,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Gourgeist,
.iconSprite = gMonIcon_Gourgeist,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 10, SHADOW_SIZE_M)
FOOTPRINT(Gourgeist)
OVERWORLD(
@ -5241,6 +5311,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Gourgeist,
.iconSprite = gMonIcon_Gourgeist,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 9, SHADOW_SIZE_S)
FOOTPRINT(Gourgeist)
OVERWORLD(
@ -5304,6 +5375,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Gourgeist,
.iconSprite = gMonIcon_Gourgeist,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 12, SHADOW_SIZE_M)
FOOTPRINT(Gourgeist)
OVERWORLD(
@ -5369,6 +5441,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Gourgeist,
.iconSprite = gMonIcon_Gourgeist,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 14, SHADOW_SIZE_M)
FOOTPRINT(Gourgeist)
OVERWORLD(
@ -5446,6 +5519,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Bergmite,
.iconSprite = gMonIcon_Bergmite,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, -1, SHADOW_SIZE_S)
FOOTPRINT(Bergmite)
OVERWORLD(
@ -5516,6 +5590,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Avalugg,
.iconSprite = gMonIcon_Avalugg,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, -1, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Avalugg)
OVERWORLD(
@ -5579,6 +5654,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_AvaluggHisui,
.iconSprite = gMonIcon_AvaluggHisui,
.iconPalIndex = 5,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, -2, SHADOW_SIZE_L)
FOOTPRINT(Avalugg)
OVERWORLD(
@ -5660,6 +5736,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Noibat,
.iconSprite = gMonIcon_Noibat,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 11, SHADOW_SIZE_L)
FOOTPRINT(Noibat)
OVERWORLD(
@ -5731,6 +5808,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Noivern,
.iconSprite = gMonIcon_Noivern,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 10, SHADOW_SIZE_L)
FOOTPRINT(Noivern)
OVERWORLD(
@ -5791,6 +5869,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_XerneasNeutral,
.iconSprite = gMonIcon_XerneasNeutral,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 14, SHADOW_SIZE_M)
FOOTPRINT(Xerneas)
OVERWORLD(
@ -5854,6 +5933,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_XerneasActive,
.iconSprite = gMonIcon_XerneasActive,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 14, SHADOW_SIZE_M)
FOOTPRINT(Xerneas)
OVERWORLD(
@ -5929,6 +6009,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Yveltal,
.iconSprite = gMonIcon_Yveltal,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 16, SHADOW_SIZE_L)
FOOTPRINT(Yveltal)
OVERWORLD(
@ -5993,6 +6074,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Zygarde50,
.iconSprite = gMonIcon_Zygarde50,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_L)
FOOTPRINT(Zygarde)
OVERWORLD(
@ -6056,6 +6138,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Zygarde50,
.iconSprite = gMonIcon_Zygarde50,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_L)
FOOTPRINT(Zygarde)
OVERWORLD(
@ -6119,6 +6202,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Zygarde10,
.iconSprite = gMonIcon_Zygarde10,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 11, SHADOW_SIZE_L)
FOOTPRINT(Zygarde)
OVERWORLD(
@ -6183,6 +6267,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Zygarde10,
.iconSprite = gMonIcon_Zygarde10,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 11, SHADOW_SIZE_L)
FOOTPRINT(Zygarde)
OVERWORLD(
@ -6255,6 +6340,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_ZygardeComplete,
.iconSprite = gMonIcon_ZygardeComplete,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 13, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Zygarde)
OVERWORLD(
@ -6329,6 +6415,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Diancie,
.iconSprite = gMonIcon_Diancie,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_S)
FOOTPRINT(Diancie)
OVERWORLD(
@ -6398,6 +6485,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_DiancieMega,
.iconSprite = gMonIcon_DiancieMega,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 12, SHADOW_SIZE_M)
FOOTPRINT(Diancie)
#if OW_BATTLE_ONLY_FORMS
@ -6482,6 +6570,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_HoopaConfined,
.iconSprite = gMonIcon_HoopaConfined,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_S)
FOOTPRINT(Hoopa)
OVERWORLD(
@ -6553,6 +6642,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_HoopaUnbound,
.iconSprite = gMonIcon_HoopaUnbound,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 14, SHADOW_SIZE_L)
FOOTPRINT(Hoopa)
OVERWORLD(
@ -6625,6 +6715,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.shinyPalette = gMonShinyPalette_Volcanion,
.iconSprite = gMonIcon_Volcanion,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Volcanion)
OVERWORLD(

View File

@ -54,6 +54,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Rowlet,
.iconSprite = gMonIcon_Rowlet,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-1, 1, SHADOW_SIZE_S)
FOOTPRINT(Rowlet)
OVERWORLD(
@ -122,6 +123,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Dartrix,
.iconSprite = gMonIcon_Dartrix,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(0, 5, SHADOW_SIZE_S)
FOOTPRINT(Dartrix)
OVERWORLD(
@ -189,6 +191,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Decidueye,
.iconSprite = gMonIcon_Decidueye,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 13, SHADOW_SIZE_S)
FOOTPRINT(Decidueye)
OVERWORLD(
@ -253,6 +256,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_DecidueyeHisui,
.iconSprite = gMonIcon_DecidueyeHisui,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 14, SHADOW_SIZE_L)
FOOTPRINT(Decidueye)
OVERWORLD(
@ -320,6 +324,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Litten,
.iconSprite = gMonIcon_Litten,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(1, 1, SHADOW_SIZE_S)
FOOTPRINT(Litten)
OVERWORLD(
@ -384,6 +389,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Torracat,
.iconSprite = gMonIcon_Torracat,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(5, 7, SHADOW_SIZE_M)
FOOTPRINT(Torracat)
OVERWORLD(
@ -447,6 +453,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Incineroar,
.iconSprite = gMonIcon_Incineroar,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 14, SHADOW_SIZE_L)
FOOTPRINT(Incineroar)
OVERWORLD(
@ -511,6 +518,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Popplio,
.iconSprite = gMonIcon_Popplio,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, 1, SHADOW_SIZE_S)
FOOTPRINT(Popplio)
OVERWORLD(
@ -575,6 +583,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Brionne,
.iconSprite = gMonIcon_Brionne,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-5, 6, SHADOW_SIZE_M)
FOOTPRINT(Brionne)
OVERWORLD(
@ -638,6 +647,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Primarina,
.iconSprite = gMonIcon_Primarina,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-6, 11, SHADOW_SIZE_L)
FOOTPRINT(Primarina)
OVERWORLD(
@ -707,6 +717,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Pikipek,
.iconSprite = gMonIcon_Pikipek,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 3, SHADOW_SIZE_S)
FOOTPRINT(Pikipek)
OVERWORLD(
@ -777,6 +788,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Trumbeak,
.iconSprite = gMonIcon_Trumbeak,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 8, SHADOW_SIZE_S)
FOOTPRINT(Trumbeak)
OVERWORLD(
@ -844,6 +856,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Toucannon,
.iconSprite = gMonIcon_Toucannon,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(9, 12, SHADOW_SIZE_M)
FOOTPRINT(Toucannon)
OVERWORLD(
@ -909,6 +922,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Yungoos,
.iconSprite = gMonIcon_Yungoos,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-9, 1, SHADOW_SIZE_M)
FOOTPRINT(Yungoos)
OVERWORLD(
@ -970,6 +984,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Gumshoos,
.iconSprite = gMonIcon_Gumshoos,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-2, 8, SHADOW_SIZE_M)
FOOTPRINT(Gumshoos)
OVERWORLD(
@ -1030,6 +1045,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Gumshoos,
.iconSprite = gMonIcon_Gumshoos,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 8, SHADOW_SIZE_M)
FOOTPRINT(Gumshoos)
OVERWORLD(
@ -1097,6 +1113,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Grubbin,
.iconSprite = gMonIcon_Grubbin,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, -4, SHADOW_SIZE_M)
FOOTPRINT(Grubbin)
OVERWORLD(
@ -1166,6 +1183,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Charjabug,
.iconSprite = gMonIcon_Charjabug,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
NO_SHADOW
FOOTPRINT(Charjabug)
OVERWORLD(
@ -1228,6 +1246,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Vikavolt,
.iconSprite = gMonIcon_Vikavolt,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 16, SHADOW_SIZE_S)
FOOTPRINT(Vikavolt)
OVERWORLD(
@ -1296,6 +1315,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Vikavolt,
.iconSprite = gMonIcon_Vikavolt,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 16, SHADOW_SIZE_S)
FOOTPRINT(Vikavolt)
OVERWORLD(
@ -1364,6 +1384,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Crabrawler,
.iconSprite = gMonIcon_Crabrawler,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(7, 6, SHADOW_SIZE_M)
FOOTPRINT(Crabrawler)
OVERWORLD(
@ -1430,6 +1451,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Crabominable,
.iconSprite = gMonIcon_Crabominable,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 14, SHADOW_SIZE_L)
FOOTPRINT(Crabominable)
OVERWORLD(
@ -1495,6 +1517,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_OricorioBaile,
.iconSprite = gMonIcon_OricorioBaile,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 9, SHADOW_SIZE_S)
FOOTPRINT(Oricorio)
OVERWORLD(
@ -1561,6 +1584,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_OricorioPomPom,
.iconSprite = gMonIcon_OricorioPomPom,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 8, SHADOW_SIZE_S)
FOOTPRINT(Oricorio)
OVERWORLD(
@ -1627,6 +1651,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_OricorioPau,
.iconSprite = gMonIcon_OricorioPau,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 11, SHADOW_SIZE_S)
FOOTPRINT(Oricorio)
OVERWORLD(
@ -1693,6 +1718,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_OricorioSensu,
.iconSprite = gMonIcon_OricorioSensu,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(7, 10, SHADOW_SIZE_S)
FOOTPRINT(Oricorio)
OVERWORLD(
@ -1795,6 +1821,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Cutiefly,
.iconSprite = gMonIcon_Cutiefly,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 5, SHADOW_SIZE_S)
FOOTPRINT(Cutiefly)
OVERWORLD(
@ -1858,6 +1885,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Ribombee,
.iconSprite = gMonIcon_Ribombee,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 12, SHADOW_SIZE_S)
FOOTPRINT(Ribombee)
OVERWORLD(
@ -1919,6 +1947,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Ribombee,
.iconSprite = gMonIcon_Ribombee,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 12, SHADOW_SIZE_S)
FOOTPRINT(Ribombee)
OVERWORLD(
@ -1982,6 +2011,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Rockruff,
.iconSprite = gMonIcon_Rockruff,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-2, 2, SHADOW_SIZE_S)
FOOTPRINT(Rockruff)
OVERWORLD(
@ -2044,6 +2074,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Rockruff,
.iconSprite = gMonIcon_Rockruff,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-2, 2, SHADOW_SIZE_S)
FOOTPRINT(Rockruff)
OVERWORLD(
@ -2112,6 +2143,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_LycanrocMidday,
.iconSprite = gMonIcon_LycanrocMidday,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 7, SHADOW_SIZE_L)
FOOTPRINT(Lycanroc)
OVERWORLD(
@ -2178,6 +2210,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_LycanrocMidnight,
.iconSprite = gMonIcon_LycanrocMidnight,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 13, SHADOW_SIZE_L)
FOOTPRINT(Lycanroc)
OVERWORLD(
@ -2244,6 +2277,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_LycanrocDusk,
.iconSprite = gMonIcon_LycanrocDusk,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 7, SHADOW_SIZE_L)
FOOTPRINT(Lycanroc)
OVERWORLD(
@ -2310,6 +2344,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_WishiwashiSolo,
.iconSprite = gMonIcon_WishiwashiSolo,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 3, SHADOW_SIZE_S)
FOOTPRINT(Wishiwashi)
OVERWORLD(
@ -2375,6 +2410,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_WishiwashiSchool,
.iconSprite = gMonIcon_WishiwashiSchool,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 7, SHADOW_SIZE_L)
FOOTPRINT(Wishiwashi)
.levelUpLearnset = sWishiwashiLevelUpLearnset,
@ -2434,6 +2470,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Mareanie,
.iconSprite = gMonIcon_Mareanie,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, -1, SHADOW_SIZE_M)
FOOTPRINT(Mareanie)
OVERWORLD(
@ -2499,6 +2536,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Toxapex,
.iconSprite = gMonIcon_Toxapex,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 6, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Toxapex)
OVERWORLD(
@ -2564,6 +2602,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Mudbray,
.iconSprite = gMonIcon_Mudbray,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 6, SHADOW_SIZE_M)
FOOTPRINT(Mudbray)
OVERWORLD(
@ -2629,6 +2668,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Mudsdale,
.iconSprite = gMonIcon_Mudsdale,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 13, SHADOW_SIZE_L)
FOOTPRINT(Mudsdale)
OVERWORLD(
@ -2701,6 +2741,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Dewpider,
.iconSprite = gMonIcon_Dewpider,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(1, 2, SHADOW_SIZE_S)
FOOTPRINT(Dewpider)
OVERWORLD(
@ -2763,6 +2804,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Araquanid,
.iconSprite = gMonIcon_Araquanid,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-6, 9, SHADOW_SIZE_M)
FOOTPRINT(Araquanid)
OVERWORLD(
@ -2823,6 +2865,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Araquanid,
.iconSprite = gMonIcon_Araquanid,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-6, 9, SHADOW_SIZE_S)
FOOTPRINT(Araquanid)
OVERWORLD(
@ -2891,6 +2934,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Fomantis,
.iconSprite = gMonIcon_Fomantis,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, 3, SHADOW_SIZE_S)
FOOTPRINT(Fomantis)
OVERWORLD(
@ -2953,6 +2997,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Lurantis,
.iconSprite = gMonIcon_Lurantis,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 12, SHADOW_SIZE_S)
FOOTPRINT(Lurantis)
OVERWORLD(
@ -3013,6 +3058,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Lurantis,
.iconSprite = gMonIcon_Lurantis,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 12, SHADOW_SIZE_S)
FOOTPRINT(Lurantis)
OVERWORLD(
@ -3082,6 +3128,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Morelull,
.iconSprite = gMonIcon_Morelull,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-1, 4, SHADOW_SIZE_S)
FOOTPRINT(Morelull)
OVERWORLD(
@ -3148,6 +3195,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Shiinotic,
.iconSprite = gMonIcon_Shiinotic,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 10, SHADOW_SIZE_S)
FOOTPRINT(Shiinotic)
OVERWORLD(
@ -3217,6 +3265,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Salandit,
.iconSprite = gMonIcon_Salandit,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(3, 1, SHADOW_SIZE_M)
FOOTPRINT(Salandit)
OVERWORLD(
@ -3279,6 +3328,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Salazzle,
.iconSprite = gMonIcon_Salazzle,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 9, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Salazzle)
OVERWORLD(
@ -3339,6 +3389,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Salazzle,
.iconSprite = gMonIcon_Salazzle,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 9, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Salazzle)
OVERWORLD(
@ -3410,6 +3461,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Stufful,
.iconSprite = gMonIcon_Stufful,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(0, 3, SHADOW_SIZE_M)
FOOTPRINT(Stufful)
OVERWORLD(
@ -3478,6 +3530,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Bewear,
.iconSprite = gMonIcon_Bewear,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 13, SHADOW_SIZE_M)
FOOTPRINT(Bewear)
OVERWORLD(
@ -3543,6 +3596,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Bounsweet,
.iconSprite = gMonIcon_Bounsweet,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-2, -3, SHADOW_SIZE_S)
FOOTPRINT(Bounsweet)
OVERWORLD(
@ -3609,6 +3663,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Steenee,
.iconSprite = gMonIcon_Steenee,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-2, 7, SHADOW_SIZE_S)
FOOTPRINT(Steenee)
OVERWORLD(
@ -3674,6 +3729,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Tsareena,
.iconSprite = gMonIcon_Tsareena,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 13, SHADOW_SIZE_M)
FOOTPRINT(Tsareena)
OVERWORLD(
@ -3741,6 +3797,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Comfey,
.iconSprite = gMonIcon_Comfey,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 10, SHADOW_SIZE_M)
FOOTPRINT(Comfey)
OVERWORLD(
@ -3809,6 +3866,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Oranguru,
.iconSprite = gMonIcon_Oranguru,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 6, SHADOW_SIZE_M)
FOOTPRINT(Oranguru)
OVERWORLD(
@ -3877,6 +3935,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Passimian,
.iconSprite = gMonIcon_Passimian,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 12, SHADOW_SIZE_L)
FOOTPRINT(Passimian)
OVERWORLD(
@ -3946,6 +4005,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Wimpod,
.iconSprite = gMonIcon_Wimpod,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-4, -3, SHADOW_SIZE_S)
FOOTPRINT(Wimpod)
OVERWORLD(
@ -4014,6 +4074,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Golisopod,
.iconSprite = gMonIcon_Golisopod,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 13, SHADOW_SIZE_L)
FOOTPRINT(Golisopod)
OVERWORLD(
@ -4079,6 +4140,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Sandygast,
.iconSprite = gMonIcon_Sandygast,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
NO_SHADOW
FOOTPRINT(Sandygast)
OVERWORLD(
@ -4144,6 +4206,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Palossand,
.iconSprite = gMonIcon_Palossand,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
NO_SHADOW
FOOTPRINT(Palossand)
OVERWORLD(
@ -4212,6 +4275,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Pyukumuku,
.iconSprite = gMonIcon_Pyukumuku,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-3, -3, SHADOW_SIZE_S)
FOOTPRINT(Pyukumuku)
OVERWORLD(
@ -4277,6 +4341,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_TypeNull,
.iconSprite = gMonIcon_TypeNull,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 11, SHADOW_SIZE_L)
FOOTPRINT(Type_Null)
OVERWORLD(
@ -4340,6 +4405,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Silvally##_palette, \
.iconSprite = gMonIcon_Silvally, \
.iconPalIndex = 0, \
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, \
SHADOW(1, 13, SHADOW_SIZE_L) \
FOOTPRINT(Silvally) \
OVERWORLD( \
@ -4433,6 +4499,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_MiniorMeteor, \
.iconSprite = gMonIcon_MiniorMeteor, \
.iconPalIndex = 0, \
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, \
SHADOW(0, 14, SHADOW_SIZE_S) \
OVERWORLD( \
sPicTable_MiniorMeteor, \
@ -4471,6 +4538,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_MiniorCore, \
.iconSprite = gMonIcon_MiniorCore##Form, \
.iconPalIndex = iconPal, \
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, \
SHADOW(-2, 12, SHADOW_SIZE_S) \
.formChangeTable = sMinior ##Form##FormChangeTable, \
MINIOR_MISC_INFO(color), \
@ -4540,6 +4608,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Komala,
.iconSprite = gMonIcon_Komala,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-4, 0, SHADOW_SIZE_S)
FOOTPRINT(Komala)
OVERWORLD(
@ -4610,6 +4679,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Turtonator,
.iconSprite = gMonIcon_Turtonator,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 12, SHADOW_SIZE_L)
FOOTPRINT(Turtonator)
OVERWORLD(
@ -4672,6 +4742,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Togedemaru,
.iconSprite = gMonIcon_Togedemaru,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-1, 4, SHADOW_SIZE_S)
FOOTPRINT(Togedemaru)
OVERWORLD(
@ -4733,6 +4804,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Togedemaru,
.iconSprite = gMonIcon_Togedemaru,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-1, 4, SHADOW_SIZE_S)
FOOTPRINT(Togedemaru)
OVERWORLD(
@ -4798,6 +4870,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_MimikyuDisguised,
.iconSprite = gMonIcon_MimikyuDisguised,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-3, 1, SHADOW_SIZE_S)
FOOTPRINT(Mimikyu)
OVERWORLD(
@ -4860,6 +4933,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_MimikyuBusted,
.iconSprite = gMonIcon_MimikyuBusted,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-3, 1, SHADOW_SIZE_S)
FOOTPRINT(Mimikyu)
.levelUpLearnset = sMimikyuLevelUpLearnset,
@ -4913,6 +4987,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_MimikyuDisguised,
.iconSprite = gMonIcon_MimikyuDisguised,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 1, SHADOW_SIZE_S)
FOOTPRINT(Mimikyu)
OVERWORLD(
@ -4977,6 +5052,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_MimikyuBusted,
.iconSprite = gMonIcon_MimikyuBusted,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 1, SHADOW_SIZE_S)
FOOTPRINT(Mimikyu)
.isTotem = TRUE,
@ -5038,6 +5114,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Bruxish,
.iconSprite = gMonIcon_Bruxish,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, -1, SHADOW_SIZE_M)
FOOTPRINT(Bruxish)
OVERWORLD(
@ -5107,6 +5184,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Drampa,
.iconSprite = gMonIcon_Drampa,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 13, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Drampa)
OVERWORLD(
@ -5174,6 +5252,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Dhelmise,
.iconSprite = gMonIcon_Dhelmise,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 12, SHADOW_SIZE_M)
FOOTPRINT(Dhelmise)
OVERWORLD(
@ -5242,6 +5321,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_JangmoO,
.iconSprite = gMonIcon_JangmoO,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(0, 5, SHADOW_SIZE_S)
FOOTPRINT(JangmoO)
OVERWORLD(
@ -5310,6 +5390,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_HakamoO,
.iconSprite = gMonIcon_HakamoO,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 12, SHADOW_SIZE_M)
FOOTPRINT(HakamoO)
OVERWORLD(
@ -5371,6 +5452,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_KommoO,
.iconSprite = gMonIcon_KommoO,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_L)
FOOTPRINT(KommoO)
OVERWORLD(
@ -5437,6 +5519,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_KommoO,
.iconSprite = gMonIcon_KommoO,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_L)
FOOTPRINT(KommoO)
OVERWORLD(
@ -5513,6 +5596,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_TapuKoko,
.iconSprite = gMonIcon_TapuKoko,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 19, SHADOW_SIZE_M)
FOOTPRINT(TapuKoko)
OVERWORLD(
@ -5584,6 +5668,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_TapuLele,
.iconSprite = gMonIcon_TapuLele,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_S)
FOOTPRINT(TapuLele)
OVERWORLD(
@ -5657,6 +5742,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_TapuBulu,
.iconSprite = gMonIcon_TapuBulu,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 16, SHADOW_SIZE_M)
FOOTPRINT(TapuBulu)
OVERWORLD(
@ -5729,6 +5815,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_TapuFini,
.iconSprite = gMonIcon_TapuFini,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 15, SHADOW_SIZE_M)
FOOTPRINT(TapuFini)
OVERWORLD(
@ -5796,6 +5883,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Cosmog,
.iconSprite = gMonIcon_Cosmog,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 8, SHADOW_SIZE_S)
FOOTPRINT(Cosmog)
OVERWORLD(
@ -5865,6 +5953,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Cosmoem,
.iconSprite = gMonIcon_Cosmoem,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 5, SHADOW_SIZE_M)
FOOTPRINT(Cosmoem)
OVERWORLD(
@ -5933,6 +6022,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Solgaleo,
.iconSprite = gMonIcon_Solgaleo,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Solgaleo)
OVERWORLD(
@ -5999,6 +6089,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Lunala,
.iconSprite = gMonIcon_Lunala,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 17, SHADOW_SIZE_L)
FOOTPRINT(Lunala)
OVERWORLD(
@ -6067,6 +6158,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Nihilego,
.iconSprite = gMonIcon_Nihilego,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 14, SHADOW_SIZE_S)
FOOTPRINT(Nihilego)
OVERWORLD(
@ -6134,6 +6226,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Buzzwole,
.iconSprite = gMonIcon_Buzzwole,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 12, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Buzzwole)
OVERWORLD(
@ -6200,6 +6293,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Pheromosa,
.iconSprite = gMonIcon_Pheromosa,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_S)
FOOTPRINT(Pheromosa)
OVERWORLD(
@ -6266,6 +6360,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Xurkitree,
.iconSprite = gMonIcon_Xurkitree,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_L)
FOOTPRINT(Xurkitree)
OVERWORLD(
@ -6334,6 +6429,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Celesteela,
.iconSprite = gMonIcon_Celesteela,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 13, SHADOW_SIZE_M)
FOOTPRINT(Celesteela)
OVERWORLD(
@ -6401,6 +6497,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Kartana,
.iconSprite = gMonIcon_Kartana,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 14, SHADOW_SIZE_M)
FOOTPRINT(Kartana)
OVERWORLD(
@ -6467,6 +6564,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Guzzlord,
.iconSprite = gMonIcon_Guzzlord,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 10, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Guzzlord)
OVERWORLD(
@ -6536,6 +6634,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Necrozma,
.iconSprite = gMonIcon_Necrozma,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 15, SHADOW_SIZE_M)
FOOTPRINT(Necrozma)
OVERWORLD(
@ -6604,6 +6703,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_NecrozmaDuskMane,
.iconSprite = gMonIcon_NecrozmaDuskMane,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 11, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Necrozma)
OVERWORLD(
@ -6674,6 +6774,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_NecrozmaDawnWings,
.iconSprite = gMonIcon_NecrozmaDawnWings,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 17, SHADOW_SIZE_L)
FOOTPRINT(Necrozma)
OVERWORLD(
@ -6747,6 +6848,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_NecrozmaUltra,
.iconSprite = gMonIcon_NecrozmaUltra,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 16, SHADOW_SIZE_L)
FOOTPRINT(Necrozma)
#if OW_BATTLE_ONLY_FORMS
@ -6821,6 +6923,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Magearna,
.iconSprite = gMonIcon_Magearna,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 14, SHADOW_SIZE_M)
FOOTPRINT(Magearna)
OVERWORLD(
@ -6886,6 +6989,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_MagearnaOriginal,
.iconSprite = gMonIcon_MagearnaOriginal,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 14, SHADOW_SIZE_M)
FOOTPRINT(Magearna)
OVERWORLD(
@ -6960,6 +7064,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Marshadow,
.iconSprite = gMonIcon_Marshadow,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, 5, SHADOW_SIZE_S)
FOOTPRINT(Marshadow)
OVERWORLD(
@ -7027,6 +7132,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Poipole,
.iconSprite = gMonIcon_Poipole,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 12, SHADOW_SIZE_S)
FOOTPRINT(Poipole)
OVERWORLD(
@ -7092,6 +7198,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Naganadel,
.iconSprite = gMonIcon_Naganadel,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(7, 17, SHADOW_SIZE_M)
FOOTPRINT(Naganadel)
OVERWORLD(
@ -7158,6 +7265,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Stakataka,
.iconSprite = gMonIcon_Stakataka,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 15, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Stakataka)
OVERWORLD(
@ -7224,6 +7332,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Blacephalon,
.iconSprite = gMonIcon_Blacephalon,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_M)
FOOTPRINT(Blacephalon)
OVERWORLD(
@ -7289,6 +7398,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Zeraora,
.iconSprite = gMonIcon_Zeraora,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Zeraora)
OVERWORLD(
@ -7355,6 +7465,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Meltan,
.iconSprite = gMonIcon_Meltan,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-1, 2, SHADOW_SIZE_S)
FOOTPRINT(Meltan)
OVERWORLD(
@ -7397,7 +7508,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.natDexNum = NATIONAL_DEX_MELMETAL,
.categoryName = _("Hex Nut"),
.height = 25,
.weight = 800,
.weight = 8000,
.description = COMPOUND_STRING(
"Revered long ago for its capacity to\n"
"create iron from nothing, for some reason\n"
@ -7419,6 +7530,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_Melmetal,
.iconSprite = gMonIcon_Melmetal,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 10, SHADOW_SIZE_L)
FOOTPRINT(Melmetal)
OVERWORLD(
@ -7487,6 +7599,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_MelmetalGmax,
.iconSprite = gMonIcon_MelmetalGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 13, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Melmetal)
.isMythical = TRUE,

View File

@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Grookey,
.iconSprite = gMonIcon_Grookey,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(1, 1, SHADOW_SIZE_S)
FOOTPRINT(Grookey)
OVERWORLD(
@ -114,6 +115,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Thwackey,
.iconSprite = gMonIcon_Thwackey,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(5, 6, SHADOW_SIZE_M)
FOOTPRINT(Thwackey)
OVERWORLD(
@ -176,6 +178,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Rillaboom,
.iconSprite = gMonIcon_Rillaboom,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 8, SHADOW_SIZE_L)
FOOTPRINT(Rillaboom)
OVERWORLD(
@ -240,6 +243,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_RillaboomGmax,
.iconSprite = gMonIcon_RillaboomGmax,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Rillaboom)
.isGigantamax = TRUE,
@ -299,6 +303,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Scorbunny,
.iconSprite = gMonIcon_Scorbunny,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-1, 6, SHADOW_SIZE_S)
FOOTPRINT(Scorbunny)
OVERWORLD(
@ -362,6 +367,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Raboot,
.iconSprite = gMonIcon_Raboot,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-4, 5, SHADOW_SIZE_S)
FOOTPRINT(Raboot)
OVERWORLD(
@ -425,6 +431,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Cinderace,
.iconSprite = gMonIcon_Cinderace,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 14, SHADOW_SIZE_M)
FOOTPRINT(Cinderace)
OVERWORLD(
@ -490,6 +497,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_CinderaceGmax,
.iconSprite = gMonIcon_CinderaceGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 13, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Cinderace)
.isGigantamax = TRUE,
@ -550,6 +558,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Sobble,
.iconSprite = gMonIcon_Sobble,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-3, 3, SHADOW_SIZE_S)
FOOTPRINT(Sobble)
OVERWORLD(
@ -613,6 +622,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Drizzile,
.iconSprite = gMonIcon_Drizzile,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(2, 5, SHADOW_SIZE_M)
FOOTPRINT(Drizzile)
OVERWORLD(
@ -676,6 +686,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Inteleon,
.iconSprite = gMonIcon_Inteleon,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 12, SHADOW_SIZE_S)
FOOTPRINT(Inteleon)
OVERWORLD(
@ -741,6 +752,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_InteleonGmax,
.iconSprite = gMonIcon_InteleonGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 12, SHADOW_SIZE_L)
FOOTPRINT(Inteleon)
.isGigantamax = TRUE,
@ -800,6 +812,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Skwovet,
.iconSprite = gMonIcon_Skwovet,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-7, 5, SHADOW_SIZE_S)
FOOTPRINT(Skwovet)
OVERWORLD(
@ -865,6 +878,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Greedent,
.iconSprite = gMonIcon_Greedent,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-11, 10, SHADOW_SIZE_M)
FOOTPRINT(Greedent)
OVERWORLD(
@ -937,6 +951,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Rookidee,
.iconSprite = gMonIcon_Rookidee,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, -3, SHADOW_SIZE_S)
FOOTPRINT(Rookidee)
OVERWORLD(
@ -1010,6 +1025,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Corvisquire,
.iconSprite = gMonIcon_Corvisquire,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 16, SHADOW_SIZE_S)
FOOTPRINT(Corvisquire)
OVERWORLD(
@ -1077,6 +1093,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Corviknight,
.iconSprite = gMonIcon_Corviknight,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 9, SHADOW_SIZE_L)
FOOTPRINT(Corviknight)
OVERWORLD(
@ -1142,6 +1159,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_CorviknightGmax,
.iconSprite = gMonIcon_CorviknightGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 8, SHADOW_SIZE_L)
FOOTPRINT(Corviknight)
.isGigantamax = TRUE,
@ -1200,6 +1218,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Blipbug,
.iconSprite = gMonIcon_Blipbug,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(2, 1, SHADOW_SIZE_S)
FOOTPRINT(Blipbug)
OVERWORLD(
@ -1266,6 +1285,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Dottler,
.iconSprite = gMonIcon_Dottler,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-1, 0, SHADOW_SIZE_M)
FOOTPRINT(Dottler)
OVERWORLD(
@ -1331,6 +1351,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Orbeetle,
.iconSprite = gMonIcon_Orbeetle,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 15, SHADOW_SIZE_M)
FOOTPRINT(Orbeetle)
OVERWORLD(
@ -1397,6 +1418,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_OrbeetleGmax,
.iconSprite = gMonIcon_OrbeetleGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Orbeetle)
.isGigantamax = TRUE,
@ -1456,6 +1478,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Nickit,
.iconSprite = gMonIcon_Nickit,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(0, 4, SHADOW_SIZE_M)
FOOTPRINT(Nickit)
OVERWORLD(
@ -1520,6 +1543,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Thievul,
.iconSprite = gMonIcon_Thievul,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-9, 7, SHADOW_SIZE_M)
FOOTPRINT(Thievul)
OVERWORLD(
@ -1584,6 +1608,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Gossifleur,
.iconSprite = gMonIcon_Gossifleur,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, 2, SHADOW_SIZE_S)
FOOTPRINT(Gossifleur)
OVERWORLD(
@ -1648,6 +1673,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Eldegoss,
.iconSprite = gMonIcon_Eldegoss,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-2, 8, SHADOW_SIZE_S)
FOOTPRINT(Eldegoss)
OVERWORLD(
@ -1712,6 +1738,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Wooloo,
.iconSprite = gMonIcon_Wooloo,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(1, 1, SHADOW_SIZE_S)
FOOTPRINT(Wooloo)
OVERWORLD(
@ -1776,6 +1803,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Dubwool,
.iconSprite = gMonIcon_Dubwool,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 8, SHADOW_SIZE_M)
FOOTPRINT(Dubwool)
OVERWORLD(
@ -1843,6 +1871,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Chewtle,
.iconSprite = gMonIcon_Chewtle,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(3, 1, SHADOW_SIZE_S)
FOOTPRINT(Chewtle)
OVERWORLD(
@ -1910,6 +1939,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Drednaw,
.iconSprite = gMonIcon_Drednaw,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 4, SHADOW_SIZE_L)
FOOTPRINT(Drednaw)
OVERWORLD(
@ -1975,6 +2005,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_DrednawGmax,
.iconSprite = gMonIcon_DrednawGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Drednaw)
.isGigantamax = TRUE,
@ -2034,6 +2065,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Yamper,
.iconSprite = gMonIcon_Yamper,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-1, 2, SHADOW_SIZE_M)
FOOTPRINT(Yamper)
OVERWORLD(
@ -2098,6 +2130,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Boltund,
.iconSprite = gMonIcon_Boltund,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 7, SHADOW_SIZE_M)
FOOTPRINT(Boltund)
OVERWORLD(
@ -2162,6 +2195,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Rolycoly,
.iconSprite = gMonIcon_Rolycoly,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(0, -3, SHADOW_SIZE_S)
FOOTPRINT(Rolycoly)
OVERWORLD(
@ -2225,6 +2259,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Carkol,
.iconSprite = gMonIcon_Carkol,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 3, SHADOW_SIZE_M)
FOOTPRINT(Carkol)
OVERWORLD(
@ -2288,6 +2323,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Coalossal,
.iconSprite = gMonIcon_Coalossal,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 12, SHADOW_SIZE_L)
FOOTPRINT(Coalossal)
OVERWORLD(
@ -2353,6 +2389,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_CoalossalGmax,
.iconSprite = gMonIcon_CoalossalGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 12, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Coalossal)
.isGigantamax = TRUE,
@ -2412,6 +2449,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Applin,
.iconSprite = gMonIcon_Applin,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-1, -3, SHADOW_SIZE_S)
FOOTPRINT(Applin)
OVERWORLD(
@ -2479,6 +2517,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Flapple,
.iconSprite = gMonIcon_Flapple,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-6, 11, SHADOW_SIZE_S)
FOOTPRINT(Flapple)
OVERWORLD(
@ -2544,6 +2583,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_FlappleGmax,
.iconSprite = gMonIcon_FlappleGmax,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Flapple)
.isGigantamax = TRUE,
@ -2600,6 +2640,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Appletun,
.iconSprite = gMonIcon_Appletun,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(5, 6, SHADOW_SIZE_L)
FOOTPRINT(Appletun)
OVERWORLD(
@ -2665,6 +2706,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_AppletunGmax,
.iconSprite = gMonIcon_AppletunGmax,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Appletun)
.isGigantamax = TRUE,
@ -2722,6 +2764,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Dipplin,
.iconSprite = gMonIcon_Dipplin,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-4, 8, SHADOW_SIZE_S)
FOOTPRINT(Dipplin)
OVERWORLD(
@ -2785,6 +2828,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Hydrapple,
.iconSprite = gMonIcon_Hydrapple,
.iconPalIndex = 5,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 12, SHADOW_SIZE_L)
FOOTPRINT(Hydrapple)
OVERWORLD(
@ -2849,6 +2893,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Silicobra,
.iconSprite = gMonIcon_Silicobra,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 1, SHADOW_SIZE_M)
FOOTPRINT(Silicobra)
OVERWORLD(
@ -2913,6 +2958,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Sandaconda,
.iconSprite = gMonIcon_Sandaconda,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, -1, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Sandaconda)
OVERWORLD(
@ -2978,6 +3024,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_SandacondaGmax,
.iconSprite = gMonIcon_SandacondaGmax,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 14, SHADOW_SIZE_M)
FOOTPRINT(Sandaconda)
.isGigantamax = TRUE,
@ -3036,6 +3083,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Cramorant,
.iconSprite = gMonIcon_Cramorant,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 14, SHADOW_SIZE_M)
FOOTPRINT(Cramorant)
OVERWORLD(
@ -3101,6 +3149,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_CramorantGulping,
.iconSprite = gMonIcon_CramorantGulping,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 14, SHADOW_SIZE_M)
FOOTPRINT(Cramorant)
.levelUpLearnset = sCramorantLevelUpLearnset,
@ -3157,6 +3206,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_CramorantGorging,
.iconSprite = gMonIcon_CramorantGorging,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 14, SHADOW_SIZE_M)
FOOTPRINT(Cramorant)
.levelUpLearnset = sCramorantLevelUpLearnset,
@ -3215,6 +3265,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Arrokuda,
.iconSprite = gMonIcon_Arrokuda,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, -5, SHADOW_SIZE_S)
FOOTPRINT(Arrokuda)
OVERWORLD(
@ -3279,6 +3330,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Barraskewda,
.iconSprite = gMonIcon_Barraskewda,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 5, SHADOW_SIZE_M)
FOOTPRINT(Barraskewda)
OVERWORLD(
@ -3343,6 +3395,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Toxel,
.iconSprite = gMonIcon_Toxel,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-2, 1, SHADOW_SIZE_M)
FOOTPRINT(Toxel)
OVERWORLD(
@ -3408,6 +3461,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_ToxtricityAmped,
.iconSprite = gMonIcon_ToxtricityAmped,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-6, 13, SHADOW_SIZE_M)
FOOTPRINT(Toxtricity)
OVERWORLD(
@ -3469,6 +3523,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_ToxtricityGmax,
.iconSprite = gMonIcon_ToxtricityGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 10, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Toxtricity)
.isGigantamax = TRUE,
@ -3525,6 +3580,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_ToxtricityLowKey,
.iconSprite = gMonIcon_ToxtricityLowKey,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 12, SHADOW_SIZE_M)
FOOTPRINT(Toxtricity)
OVERWORLD(
@ -3586,6 +3642,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_ToxtricityGmax,
.iconSprite = gMonIcon_ToxtricityGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 10, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Toxtricity)
.isGigantamax = TRUE,
@ -3648,6 +3705,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Sizzlipede,
.iconSprite = gMonIcon_Sizzlipede,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(6, -4, SHADOW_SIZE_S)
FOOTPRINT(Sizzlipede)
OVERWORLD(
@ -3716,6 +3774,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Centiskorch,
.iconSprite = gMonIcon_Centiskorch,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 7, SHADOW_SIZE_M)
FOOTPRINT(Centiskorch)
OVERWORLD(
@ -3781,6 +3840,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_CentiskorchGmax,
.iconSprite = gMonIcon_CentiskorchGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(6, 9, SHADOW_SIZE_L)
FOOTPRINT(Centiskorch)
.isGigantamax = TRUE,
@ -3840,6 +3900,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Clobbopus,
.iconSprite = gMonIcon_Clobbopus,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(1, -2, SHADOW_SIZE_S)
FOOTPRINT(Clobbopus)
OVERWORLD(
@ -3903,6 +3964,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Grapploct,
.iconSprite = gMonIcon_Grapploct,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 9, SHADOW_SIZE_M)
FOOTPRINT(Grapploct)
OVERWORLD(
@ -3967,6 +4029,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Sinistea,
.iconSprite = gMonIcon_Sinistea,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 3, SHADOW_SIZE_S)
FOOTPRINT(Sinistea)
OVERWORLD(
@ -4032,6 +4095,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Sinistea,
.iconSprite = gMonIcon_Sinistea,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 4, SHADOW_SIZE_S)
FOOTPRINT(Sinistea)
OVERWORLD(
@ -4096,6 +4160,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Polteageist,
.iconSprite = gMonIcon_Polteageist,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 12, SHADOW_SIZE_S)
FOOTPRINT(Polteageist)
OVERWORLD(
@ -4160,6 +4225,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Polteageist,
.iconSprite = gMonIcon_Polteageist,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 11, SHADOW_SIZE_S)
FOOTPRINT(Polteageist)
OVERWORLD(
@ -4225,6 +4291,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Hatenna,
.iconSprite = gMonIcon_Hatenna,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(0, 1, SHADOW_SIZE_M)
FOOTPRINT(Hatenna)
OVERWORLD(
@ -4288,6 +4355,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Hattrem,
.iconSprite = gMonIcon_Hattrem,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(0, 5, SHADOW_SIZE_M)
FOOTPRINT(Hattrem)
OVERWORLD(
@ -4350,6 +4418,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Hatterene,
.iconSprite = gMonIcon_Hatterene,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(6, 13, SHADOW_SIZE_S)
FOOTPRINT(Hatterene)
OVERWORLD(
@ -4415,6 +4484,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_HattereneGmax,
.iconSprite = gMonIcon_HattereneGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 13, SHADOW_SIZE_S)
FOOTPRINT(Hatterene)
.isGigantamax = TRUE,
@ -4474,6 +4544,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Impidimp,
.iconSprite = gMonIcon_Impidimp,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(0, 2, SHADOW_SIZE_S)
FOOTPRINT(Impidimp)
OVERWORLD(
@ -4537,6 +4608,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Morgrem,
.iconSprite = gMonIcon_Morgrem,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 7, SHADOW_SIZE_M)
FOOTPRINT(Morgrem)
OVERWORLD(
@ -4600,6 +4672,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Grimmsnarl,
.iconSprite = gMonIcon_Grimmsnarl,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 11, SHADOW_SIZE_L)
FOOTPRINT(Grimmsnarl)
OVERWORLD(
@ -4665,6 +4738,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_GrimmsnarlGmax,
.iconSprite = gMonIcon_GrimmsnarlGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 14, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Grimmsnarl)
.isGigantamax = TRUE,
@ -4724,6 +4798,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Milcery,
.iconSprite = gMonIcon_Milcery,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 6, SHADOW_SIZE_S)
FOOTPRINT(Milcery)
OVERWORLD(
@ -4795,6 +4870,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Alcremie ##sweet, \
.iconSprite = gMonIcon_AlcremieStrawberryVanillaCream, /*AlcremieStrawberry##cream##*/ \
.iconPalIndex = 1, \
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW, \
SHADOW(0, 5, SHADOW_SIZE_S) \
FOOTPRINT(Alcremie) \
OVERWORLD( \
@ -4907,6 +4983,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_AlcremieGmax,
.iconSprite = gMonIcon_AlcremieGmax,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 10, SHADOW_SIZE_L)
FOOTPRINT(Alcremie)
.isGigantamax = TRUE,
@ -4965,6 +5042,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Falinks,
.iconSprite = gMonIcon_Falinks,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-7, 5, SHADOW_SIZE_S)
FOOTPRINT(Falinks)
OVERWORLD(
@ -5028,6 +5106,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Pincurchin,
.iconSprite = gMonIcon_Pincurchin,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-1, -4, SHADOW_SIZE_S)
FOOTPRINT(Pincurchin)
OVERWORLD(
@ -5094,6 +5173,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Snom,
.iconSprite = gMonIcon_Snom,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-2, -7, SHADOW_SIZE_S)
FOOTPRINT(Snom)
OVERWORLD(
@ -5159,6 +5239,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Frosmoth,
.iconSprite = gMonIcon_Frosmoth,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-7, 13, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Frosmoth)
OVERWORLD(
@ -5223,6 +5304,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Stonjourner,
.iconSprite = gMonIcon_Stonjourner,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 10, SHADOW_SIZE_L)
FOOTPRINT(Stonjourner)
OVERWORLD(
@ -5288,6 +5370,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_EiscueIce,
.iconSprite = gMonIcon_EiscueIce,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 13, SHADOW_SIZE_S)
FOOTPRINT(Eiscue)
OVERWORLD(
@ -5353,6 +5436,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_EiscueNoice,
.iconSprite = gMonIcon_EiscueNoice,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 13, SHADOW_SIZE_S)
FOOTPRINT(Eiscue)
.levelUpLearnset = sEiscueLevelUpLearnset,
@ -5411,6 +5495,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_IndeedeeM,
.iconSprite = gMonIcon_IndeedeeM,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 4, SHADOW_SIZE_S)
FOOTPRINT(Indeedee)
OVERWORLD(
@ -5474,6 +5559,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_IndeedeeF,
.iconSprite = gMonIcon_IndeedeeF,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 4, SHADOW_SIZE_S)
FOOTPRINT(Indeedee)
OVERWORLD(
@ -5540,6 +5626,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_MorpekoFullBelly,
.iconSprite = gMonIcon_MorpekoFullBelly,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(0, 0, SHADOW_SIZE_S)
FOOTPRINT(Morpeko)
OVERWORLD(
@ -5605,6 +5692,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_MorpekoHangry,
.iconSprite = gMonIcon_MorpekoHangry,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(0, 0, SHADOW_SIZE_S)
FOOTPRINT(Morpeko)
.levelUpLearnset = sMorpekoLevelUpLearnset,
@ -5664,6 +5752,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Cufant,
.iconSprite = gMonIcon_Cufant,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 2, SHADOW_SIZE_M)
FOOTPRINT(Cufant)
OVERWORLD(
@ -5728,6 +5817,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Copperajah,
.iconSprite = gMonIcon_Copperajah,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(6, 7, SHADOW_SIZE_L)
FOOTPRINT(Copperajah)
OVERWORLD(
@ -5794,6 +5884,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_CopperajahGmax,
.iconSprite = gMonIcon_CopperajahGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 11, SHADOW_SIZE_L)
FOOTPRINT(Copperajah)
.isGigantamax = TRUE,
@ -5853,6 +5944,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Dracozolt,
.iconSprite = gMonIcon_Dracozolt,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 10, SHADOW_SIZE_L)
FOOTPRINT(Dracozolt)
OVERWORLD(
@ -5916,6 +6008,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Arctozolt,
.iconSprite = gMonIcon_Arctozolt,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 11, SHADOW_SIZE_M)
FOOTPRINT(Arctozolt)
OVERWORLD(
@ -5980,6 +6073,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Dracovish,
.iconSprite = gMonIcon_Dracovish,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 11, SHADOW_SIZE_M)
FOOTPRINT(Dracovish)
OVERWORLD(
@ -6044,6 +6138,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Arctovish,
.iconSprite = gMonIcon_Arctovish,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 11, SHADOW_SIZE_L)
FOOTPRINT(Arctovish)
OVERWORLD(
@ -6111,6 +6206,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Duraludon,
.iconSprite = gMonIcon_Duraludon,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 11, SHADOW_SIZE_L)
FOOTPRINT(Duraludon)
OVERWORLD(
@ -6178,6 +6274,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_DuraludonGmax,
.iconSprite = gMonIcon_DuraludonGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 12, SHADOW_SIZE_L)
FOOTPRINT(Duraludon)
.isGigantamax = TRUE,
@ -6237,6 +6334,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Archaludon,
.iconSprite = gMonIcon_Archaludon,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 14, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Archaludon)
OVERWORLD(
@ -6303,6 +6401,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Dreepy,
.iconSprite = gMonIcon_Dreepy,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 2, SHADOW_SIZE_S)
FOOTPRINT(Dreepy)
OVERWORLD(
@ -6367,6 +6466,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Drakloak,
.iconSprite = gMonIcon_Drakloak,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 9, SHADOW_SIZE_M)
FOOTPRINT(Drakloak)
OVERWORLD(
@ -6431,6 +6531,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Dragapult,
.iconSprite = gMonIcon_Dragapult,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 12, SHADOW_SIZE_M)
FOOTPRINT(Dragapult)
OVERWORLD(
@ -6494,6 +6595,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_ZacianHero,
.iconSprite = gMonIcon_ZacianHero,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 9, SHADOW_SIZE_L)
FOOTPRINT(Zacian)
OVERWORLD(
@ -6561,6 +6663,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_ZacianCrowned,
.iconSprite = gMonIcon_ZacianCrowned,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 12, SHADOW_SIZE_L)
FOOTPRINT(Zacian)
OVERWORLD(
@ -6630,6 +6733,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_ZamazentaHero,
.iconSprite = gMonIcon_ZamazentaHero,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 12, SHADOW_SIZE_L)
FOOTPRINT(Zamazenta)
OVERWORLD(
@ -6697,6 +6801,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_ZamazentaCrowned,
.iconSprite = gMonIcon_ZamazentaCrowned,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 12, SHADOW_SIZE_L)
FOOTPRINT(Zamazenta)
OVERWORLD(
@ -6767,6 +6872,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Eternatus,
.iconSprite = gMonIcon_Eternatus,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 14, SHADOW_SIZE_L)
FOOTPRINT(Eternatus)
OVERWORLD(
@ -6834,6 +6940,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_EternatusEternamax,
.iconSprite = gMonIcon_EternatusEternamax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 20, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Eternatus)
.isLegendary = TRUE,
@ -6892,6 +6999,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Kubfu,
.iconSprite = gMonIcon_Kubfu,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-2, 5, SHADOW_SIZE_S)
FOOTPRINT(Kubfu)
OVERWORLD(
@ -6960,6 +7068,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_UrshifuSingleStrike,
.iconSprite = gMonIcon_Urshifu,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 14, SHADOW_SIZE_L)
FOOTPRINT(Urshifu)
OVERWORLD(
@ -7027,6 +7136,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_UrshifuSingleStrikeGmax,
.iconSprite = gMonIcon_UrshifuSingleStrikeGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 13, SHADOW_SIZE_L)
FOOTPRINT(Urshifu)
.isLegendary = TRUE,
@ -7085,6 +7195,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_UrshifuRapidStrike,
.iconSprite = gMonIcon_Urshifu,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 14, SHADOW_SIZE_M)
FOOTPRINT(Urshifu)
OVERWORLD(
@ -7152,6 +7263,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_UrshifuRapidStrikeGmax,
.iconSprite = gMonIcon_UrshifuRapidStrikeGmax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 13, SHADOW_SIZE_M)
FOOTPRINT(Urshifu)
.isLegendary = TRUE,
@ -7213,6 +7325,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Zarude,
.iconSprite = gMonIcon_Zarude,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 11, SHADOW_SIZE_L)
FOOTPRINT(Zarude)
OVERWORLD(
@ -7278,6 +7391,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_ZarudeDada,
.iconSprite = gMonIcon_ZarudeDada,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 11, SHADOW_SIZE_L)
FOOTPRINT(Zarude)
.isMythical = TRUE,
@ -7338,6 +7452,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Regieleki,
.iconSprite = gMonIcon_Regieleki,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 14, SHADOW_SIZE_S)
FOOTPRINT(Regieleki)
OVERWORLD(
@ -7405,6 +7520,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Regidrago,
.iconSprite = gMonIcon_Regidrago,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_M)
FOOTPRINT(Regidrago)
OVERWORLD(
@ -7470,6 +7586,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Glastrier,
.iconSprite = gMonIcon_Glastrier,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 11, SHADOW_SIZE_L)
FOOTPRINT(Glastrier)
OVERWORLD(
@ -7536,6 +7653,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Spectrier,
.iconSprite = gMonIcon_Spectrier,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-6, 12, SHADOW_SIZE_L)
FOOTPRINT(Spectrier)
OVERWORLD(
@ -7602,6 +7720,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_Calyrex,
.iconSprite = gMonIcon_Calyrex,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 12, SHADOW_SIZE_S)
FOOTPRINT(Calyrex)
OVERWORLD(
@ -7669,6 +7788,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_CalyrexIce,
.iconSprite = gMonIcon_CalyrexIce,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 11, SHADOW_SIZE_L)
FOOTPRINT(Calyrex)
OVERWORLD(
@ -7736,6 +7856,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_CalyrexShadow,
.iconSprite = gMonIcon_CalyrexShadow,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 12, SHADOW_SIZE_L)
FOOTPRINT(Calyrex)
OVERWORLD(
@ -7807,6 +7928,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_EnamorusIncarnate,
.iconSprite = gMonIcon_EnamorusIncarnate,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 19, SHADOW_SIZE_M)
FOOTPRINT(Enamorus)
OVERWORLD(
@ -7873,6 +7995,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.shinyPalette = gMonShinyPalette_EnamorusTherian,
.iconSprite = gMonIcon_EnamorusTherian,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 8, SHADOW_SIZE_L)
FOOTPRINT(Enamorus)
OVERWORLD(

View File

@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Sprigatito,
.iconSprite = gMonIcon_Sprigatito,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-2, 5, SHADOW_SIZE_S)
FOOTPRINT(Sprigatito)
OVERWORLD(
@ -115,6 +116,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Floragato,
.iconSprite = gMonIcon_Floragato,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 11, SHADOW_SIZE_M)
FOOTPRINT(Floragato)
OVERWORLD(
@ -178,6 +180,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Meowscarada,
.iconSprite = gMonIcon_Meowscarada,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 14, SHADOW_SIZE_S)
FOOTPRINT(Meowscarada)
OVERWORLD(
@ -242,6 +245,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Fuecoco,
.iconSprite = gMonIcon_Fuecoco,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-3, 5, SHADOW_SIZE_S)
FOOTPRINT(Fuecoco)
OVERWORLD(
@ -306,6 +310,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Crocalor,
.iconSprite = gMonIcon_Crocalor,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 8, SHADOW_SIZE_M)
FOOTPRINT(Crocalor)
OVERWORLD(
@ -369,6 +374,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Skeledirge,
.iconSprite = gMonIcon_Skeledirge,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(6, 7, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Skeledirge)
OVERWORLD(
@ -433,6 +439,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Quaxly,
.iconSprite = gMonIcon_Quaxly,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(0, 5, SHADOW_SIZE_S)
FOOTPRINT(Quaxly)
OVERWORLD(
@ -497,6 +504,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Quaxwell,
.iconSprite = gMonIcon_Quaxwell,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 10, SHADOW_SIZE_S)
FOOTPRINT(Quaxwell)
OVERWORLD(
@ -560,6 +568,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Quaquaval,
.iconSprite = gMonIcon_Quaquaval,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-7, 13, SHADOW_SIZE_M)
FOOTPRINT(Quaquaval)
OVERWORLD(
@ -624,6 +633,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Lechonk,
.iconSprite = gMonIcon_Lechonk,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, 1, SHADOW_SIZE_S)
FOOTPRINT(Lechonk)
OVERWORLD(
@ -688,6 +698,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_OinkologneM,
.iconSprite = gMonIcon_OinkologneM,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 6, SHADOW_SIZE_M)
FOOTPRINT(Oinkologne)
OVERWORLD(
@ -751,6 +762,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_OinkologneF,
.iconSprite = gMonIcon_OinkologneF,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 7, SHADOW_SIZE_M)
FOOTPRINT(Oinkologne)
OVERWORLD(
@ -816,6 +828,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Tarountula,
.iconSprite = gMonIcon_Tarountula,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 2, SHADOW_SIZE_M)
FOOTPRINT(Tarountula)
OVERWORLD(
@ -880,6 +893,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Spidops,
.iconSprite = gMonIcon_Spidops,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(6, 8, SHADOW_SIZE_L)
FOOTPRINT(Spidops)
OVERWORLD(
@ -944,6 +958,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Nymble,
.iconSprite = gMonIcon_Nymble,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(1, 3, SHADOW_SIZE_M)
FOOTPRINT(Nymble)
OVERWORLD(
@ -1008,6 +1023,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Lokix,
.iconSprite = gMonIcon_Lokix,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 11, SHADOW_SIZE_M)
FOOTPRINT(Lokix)
OVERWORLD(
@ -1072,6 +1088,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Pawmi,
.iconSprite = gMonIcon_Pawmi,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(1, 4, SHADOW_SIZE_M)
FOOTPRINT(Pawmi)
OVERWORLD(
@ -1136,6 +1153,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Pawmo,
.iconSprite = gMonIcon_Pawmo,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-3, 10, SHADOW_SIZE_S)
FOOTPRINT(Pawmo)
OVERWORLD(
@ -1199,6 +1217,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Pawmot,
.iconSprite = gMonIcon_Pawmot,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 11, SHADOW_SIZE_M)
FOOTPRINT(Pawmot)
OVERWORLD(
@ -1263,6 +1282,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Tandemaus,
.iconSprite = gMonIcon_Tandemaus,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(0, -1, SHADOW_SIZE_M)
FOOTPRINT(Tandemaus)
OVERWORLD(
@ -1328,6 +1348,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Maushold,
.iconSprite = gMonIcon_MausholdThree,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(4, -1, SHADOW_SIZE_L)
FOOTPRINT(MausholdThree)
OVERWORLD(
@ -1390,6 +1411,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Maushold,
.iconSprite = gMonIcon_MausholdFour,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(0, -1, SHADOW_SIZE_L)
FOOTPRINT(MausholdFour)
OVERWORLD(
@ -1455,6 +1477,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Fidough,
.iconSprite = gMonIcon_Fidough,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(4, 0, SHADOW_SIZE_S)
FOOTPRINT(Fidough)
OVERWORLD(
@ -1519,6 +1542,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Dachsbun,
.iconSprite = gMonIcon_Dachsbun,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-1, 7, SHADOW_SIZE_L)
FOOTPRINT(Dachsbun)
OVERWORLD(
@ -1583,6 +1607,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Smoliv,
.iconSprite = gMonIcon_Smoliv,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-1, -2, SHADOW_SIZE_S)
FOOTPRINT(Smoliv)
OVERWORLD(
@ -1647,6 +1672,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Dolliv,
.iconSprite = gMonIcon_Dolliv,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(1, 9, SHADOW_SIZE_M)
FOOTPRINT(Dolliv)
OVERWORLD(
@ -1710,6 +1736,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Arboliva,
.iconSprite = gMonIcon_Arboliva,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 13, SHADOW_SIZE_L)
FOOTPRINT(Arboliva)
OVERWORLD(
@ -1774,6 +1801,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_SquawkabillyGreen,
.iconSprite = gMonIcon_SquawkabillyGreen,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-6, 9, SHADOW_SIZE_M)
FOOTPRINT(Squawkabilly)
OVERWORLD(
@ -1838,6 +1866,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_SquawkabillyBlue,
.iconSprite = gMonIcon_SquawkabillyBlue,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-6, 9, SHADOW_SIZE_M)
FOOTPRINT(Squawkabilly)
OVERWORLD(
@ -1902,6 +1931,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_SquawkabillyYellow,
.iconSprite = gMonIcon_SquawkabillyYellow,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-6, 9, SHADOW_SIZE_M)
FOOTPRINT(Squawkabilly)
OVERWORLD(
@ -1966,6 +1996,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_SquawkabillyWhite,
.iconSprite = gMonIcon_SquawkabillyWhite,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-6, 9, SHADOW_SIZE_M)
FOOTPRINT(Squawkabilly)
OVERWORLD(
@ -2032,6 +2063,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Nacli,
.iconSprite = gMonIcon_Nacli,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-1, 5, SHADOW_SIZE_S)
FOOTPRINT(Nacli)
OVERWORLD(
@ -2096,6 +2128,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Naclstack,
.iconSprite = gMonIcon_Naclstack,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, 5, SHADOW_SIZE_L)
FOOTPRINT(Naclstack)
OVERWORLD(
@ -2159,6 +2192,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Garganacl,
.iconSprite = gMonIcon_Garganacl,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 13, SHADOW_SIZE_L)
FOOTPRINT(Garganacl)
OVERWORLD(
@ -2223,6 +2257,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Charcadet,
.iconSprite = gMonIcon_Charcadet,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-1, 5, SHADOW_SIZE_S)
FOOTPRINT(Charcadet)
OVERWORLD(
@ -2288,6 +2323,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Armarouge,
.iconSprite = gMonIcon_Armarouge,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 14, SHADOW_SIZE_L)
FOOTPRINT(Armarouge)
OVERWORLD(
@ -2350,6 +2386,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Ceruledge,
.iconSprite = gMonIcon_Ceruledge,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(9, 14, SHADOW_SIZE_L)
FOOTPRINT(Ceruledge)
OVERWORLD(
@ -2415,6 +2452,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Tadbulb,
.iconSprite = gMonIcon_Tadbulb,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 19, SHADOW_SIZE_S)
FOOTPRINT(Tadbulb)
OVERWORLD(
@ -2479,6 +2517,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Bellibolt,
.iconSprite = gMonIcon_Bellibolt,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 7, SHADOW_SIZE_M)
FOOTPRINT(Bellibolt)
OVERWORLD(
@ -2543,6 +2582,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Wattrel,
.iconSprite = gMonIcon_Wattrel,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 0, SHADOW_SIZE_S)
FOOTPRINT(Wattrel)
OVERWORLD(
@ -2607,6 +2647,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Kilowattrel,
.iconSprite = gMonIcon_Kilowattrel,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-6, 6, SHADOW_SIZE_M)
FOOTPRINT(Kilowattrel)
OVERWORLD(
@ -2671,6 +2712,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Maschiff,
.iconSprite = gMonIcon_Maschiff,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(2, 5, SHADOW_SIZE_L)
FOOTPRINT(Maschiff)
OVERWORLD(
@ -2735,6 +2777,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Mabosstiff,
.iconSprite = gMonIcon_Mabosstiff,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 5, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Mabosstiff)
OVERWORLD(
@ -2799,6 +2842,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Shroodle,
.iconSprite = gMonIcon_Shroodle,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, -6, SHADOW_SIZE_S)
FOOTPRINT(Shroodle)
OVERWORLD(
@ -2863,6 +2907,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Grafaiai,
.iconSprite = gMonIcon_Grafaiai,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(-2, 5, SHADOW_SIZE_S)
FOOTPRINT(Grafaiai)
OVERWORLD(
@ -2927,6 +2972,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Bramblin,
.iconSprite = gMonIcon_Bramblin,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(2, 0, SHADOW_SIZE_S)
FOOTPRINT(Bramblin)
OVERWORLD(
@ -2991,6 +3037,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Brambleghast,
.iconSprite = gMonIcon_Brambleghast,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 6, SHADOW_SIZE_M)
FOOTPRINT(Brambleghast)
OVERWORLD(
@ -3057,6 +3104,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Toedscool,
.iconSprite = gMonIcon_Toedscool,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 10, SHADOW_SIZE_M)
FOOTPRINT(Toedscool)
OVERWORLD(
@ -3123,6 +3171,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Toedscruel,
.iconSprite = gMonIcon_Toedscruel,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 8, SHADOW_SIZE_L)
FOOTPRINT(Toedscruel)
OVERWORLD(
@ -3187,6 +3236,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Klawf,
.iconSprite = gMonIcon_Klawf,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 0, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Klawf)
OVERWORLD(
@ -3252,6 +3302,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Capsakid,
.iconSprite = gMonIcon_Capsakid,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(2, 0, SHADOW_SIZE_S)
FOOTPRINT(Capsakid)
OVERWORLD(
@ -3316,6 +3367,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Scovillain,
.iconSprite = gMonIcon_Scovillain,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(6, 11, SHADOW_SIZE_M)
FOOTPRINT(Scovillain)
OVERWORLD(
@ -3380,6 +3432,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Rellor,
.iconSprite = gMonIcon_Rellor,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(4, -3, SHADOW_SIZE_L)
FOOTPRINT(Rellor)
OVERWORLD(
@ -3444,6 +3497,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Rabsca,
.iconSprite = gMonIcon_Rabsca,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 14, SHADOW_SIZE_M)
FOOTPRINT(Rabsca)
OVERWORLD(
@ -3508,6 +3562,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Flittle,
.iconSprite = gMonIcon_Flittle,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 2, SHADOW_SIZE_S)
FOOTPRINT(Flittle)
OVERWORLD(
@ -3572,6 +3627,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Espathra,
.iconSprite = gMonIcon_Espathra,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 10, SHADOW_SIZE_M)
FOOTPRINT(Espathra)
OVERWORLD(
@ -3636,6 +3692,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Tinkatink,
.iconSprite = gMonIcon_Tinkatink,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-3, 1, SHADOW_SIZE_S)
FOOTPRINT(Tinkatink)
OVERWORLD(
@ -3700,6 +3757,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Tinkatuff,
.iconSprite = gMonIcon_Tinkatuff,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-4, 5, SHADOW_SIZE_L)
FOOTPRINT(Tinkatuff)
OVERWORLD(
@ -3763,6 +3821,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Tinkaton,
.iconSprite = gMonIcon_Tinkaton,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-5, 15, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Tinkaton)
OVERWORLD(
@ -3826,6 +3885,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Wiglett,
.iconSprite = gMonIcon_Wiglett,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
NO_SHADOW
FOOTPRINT(Wiglett)
OVERWORLD(
@ -3889,6 +3949,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Wugtrio,
.iconSprite = gMonIcon_Wugtrio,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
NO_SHADOW
FOOTPRINT(Wugtrio)
OVERWORLD(
@ -3954,6 +4015,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Bombirdier,
.iconSprite = gMonIcon_Bombirdier,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 18, SHADOW_SIZE_M)
FOOTPRINT(Bombirdier)
OVERWORLD(
@ -4018,6 +4080,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Finizen,
.iconSprite = gMonIcon_Finizen,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 7, SHADOW_SIZE_S)
FOOTPRINT(Finizen)
OVERWORLD(
@ -4082,6 +4145,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_PalafinZero,
.iconSprite = gMonIcon_PalafinZero,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 7, SHADOW_SIZE_S)
FOOTPRINT(Palafin)
OVERWORLD(
@ -4146,6 +4210,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_PalafinHero,
.iconSprite = gMonIcon_PalafinHero,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 13, SHADOW_SIZE_M)
FOOTPRINT(Palafin)
OVERWORLD(
@ -4212,6 +4277,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Varoom,
.iconSprite = gMonIcon_Varoom,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 0, SHADOW_SIZE_M)
FOOTPRINT(Varoom)
OVERWORLD(
@ -4276,6 +4342,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Revavroom,
.iconSprite = gMonIcon_Revavroom,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 7, SHADOW_SIZE_L)
FOOTPRINT(Revavroom)
OVERWORLD(
@ -4340,6 +4407,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Cyclizar,
.iconSprite = gMonIcon_Cyclizar,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 9, SHADOW_SIZE_M)
FOOTPRINT(Cyclizar)
OVERWORLD(
@ -4405,6 +4473,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Orthworm,
.iconSprite = gMonIcon_Orthworm,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(6, 10, SHADOW_SIZE_L)
FOOTPRINT(Orthworm)
OVERWORLD(
@ -4471,6 +4540,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Glimmet,
.iconSprite = gMonIcon_Glimmet,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 6, SHADOW_SIZE_S)
FOOTPRINT(Glimmet)
OVERWORLD(
@ -4536,6 +4606,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Glimmora,
.iconSprite = gMonIcon_Glimmora,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 17, SHADOW_SIZE_M)
FOOTPRINT(Glimmora)
OVERWORLD(
@ -4600,6 +4671,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Greavard,
.iconSprite = gMonIcon_Greavard,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(3, 2, SHADOW_SIZE_M)
FOOTPRINT(Greavard)
OVERWORLD(
@ -4664,6 +4736,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Houndstone,
.iconSprite = gMonIcon_Houndstone,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 6, SHADOW_SIZE_L)
FOOTPRINT(Houndstone)
OVERWORLD(
@ -4728,6 +4801,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Flamigo,
.iconSprite = gMonIcon_Flamigo,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 12, SHADOW_SIZE_S)
FOOTPRINT(Flamigo)
OVERWORLD(
@ -4793,6 +4867,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Cetoddle,
.iconSprite = gMonIcon_Cetoddle,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 0, SHADOW_SIZE_M)
FOOTPRINT(Cetoddle)
OVERWORLD(
@ -4857,6 +4932,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Cetitan,
.iconSprite = gMonIcon_Cetitan,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 10, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Cetitan)
OVERWORLD(
@ -4922,6 +4998,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Veluza,
.iconSprite = gMonIcon_Veluza,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 5, SHADOW_SIZE_M)
FOOTPRINT(Veluza)
OVERWORLD(
@ -4988,6 +5065,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Dondozo,
.iconSprite = gMonIcon_Dondozo,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 8, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Dondozo)
OVERWORLD(
@ -5053,6 +5131,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_TatsugiriCurly,
.iconSprite = gMonIcon_TatsugiriCurly,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-2, -1, SHADOW_SIZE_S)
FOOTPRINT(Tatsugiri)
OVERWORLD(
@ -5116,6 +5195,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_TatsugiriDroopy,
.iconSprite = gMonIcon_TatsugiriDroopy,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-2, -1, SHADOW_SIZE_S)
FOOTPRINT(Tatsugiri)
OVERWORLD(
@ -5179,6 +5259,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_TatsugiriStretchy,
.iconSprite = gMonIcon_TatsugiriStretchy,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-2, -1, SHADOW_SIZE_S)
FOOTPRINT(Tatsugiri)
OVERWORLD(
@ -5246,6 +5327,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_GreatTusk,
.iconSprite = gMonIcon_GreatTusk,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 6, SHADOW_SIZE_L)
FOOTPRINT(GreatTusk)
OVERWORLD(
@ -5312,6 +5394,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_ScreamTail,
.iconSprite = gMonIcon_ScreamTail,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 3, SHADOW_SIZE_L)
FOOTPRINT(ScreamTail)
OVERWORLD(
@ -5378,6 +5461,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_BruteBonnet,
.iconSprite = gMonIcon_BruteBonnet,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 7, SHADOW_SIZE_L)
FOOTPRINT(BruteBonnet)
OVERWORLD(
@ -5447,6 +5531,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_FlutterMane,
.iconSprite = gMonIcon_FlutterMane,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 20, SHADOW_SIZE_S)
FOOTPRINT(FlutterMane)
OVERWORLD(
@ -5512,6 +5597,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_SlitherWing,
.iconSprite = gMonIcon_SlitherWing,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-5, 13, SHADOW_SIZE_M)
FOOTPRINT(SlitherWing)
OVERWORLD(
@ -5578,6 +5664,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_SandyShocks,
.iconSprite = gMonIcon_SandyShocks,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 13, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(SandyShocks)
OVERWORLD(
@ -5644,6 +5731,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_IronTreads,
.iconSprite = gMonIcon_IronTreads,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 3, SHADOW_SIZE_L)
FOOTPRINT(IronTreads)
OVERWORLD(
@ -5710,6 +5798,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_IronBundle,
.iconSprite = gMonIcon_IronBundle,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(-1, 6, SHADOW_SIZE_M)
FOOTPRINT(IronBundle)
OVERWORLD(
@ -5776,6 +5865,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_IronHands,
.iconSprite = gMonIcon_IronHands,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-2, 8, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(IronHands)
OVERWORLD(
@ -5843,6 +5933,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_IronJugulis,
.iconSprite = gMonIcon_IronJugulis,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 15, SHADOW_SIZE_M)
FOOTPRINT(IronJugulis)
OVERWORLD(
@ -5910,6 +6001,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_IronMoth,
.iconSprite = gMonIcon_IronMoth,
.iconPalIndex = 3,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 14, SHADOW_SIZE_M)
FOOTPRINT(IronMoth)
OVERWORLD(
@ -5976,6 +6068,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_IronThorns,
.iconSprite = gMonIcon_IronThorns,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-9, 12, SHADOW_SIZE_L)
FOOTPRINT(IronThorns)
OVERWORLD(
@ -6041,6 +6134,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Frigibax,
.iconSprite = gMonIcon_Frigibax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, 7, SHADOW_SIZE_S)
FOOTPRINT(Frigibax)
OVERWORLD(
@ -6105,6 +6199,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Arctibax,
.iconSprite = gMonIcon_Arctibax,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 8, SHADOW_SIZE_M)
FOOTPRINT(Arctibax)
OVERWORLD(
@ -6168,6 +6263,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Baxcalibur,
.iconSprite = gMonIcon_Baxcalibur,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(5, 12, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Baxcalibur)
OVERWORLD(
@ -6232,6 +6328,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_GimmighoulChest,
.iconSprite = gMonIcon_GimmighoulChest,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_SLOW,
SHADOW(0, 7, SHADOW_SIZE_M)
FOOTPRINT(GimmighoulChest)
OVERWORLD(
@ -6296,6 +6393,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_GimmighoulRoaming,
.iconSprite = gMonIcon_GimmighoulRoaming,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_FAST,
SHADOW(-1, -4, SHADOW_SIZE_S)
FOOTPRINT(GimmighoulRoaming)
.levelUpLearnset = sGimmighoulLevelUpLearnset,
@ -6351,6 +6449,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Gholdengo,
.iconSprite = gMonIcon_Gholdengo,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 13, SHADOW_SIZE_M)
FOOTPRINT(Gholdengo)
OVERWORLD(
@ -6415,6 +6514,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_WoChien,
.iconSprite = gMonIcon_WoChien,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(WoChien)
OVERWORLD(
@ -6481,6 +6581,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_ChienPao,
.iconSprite = gMonIcon_ChienPao,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 8, SHADOW_SIZE_L)
FOOTPRINT(ChienPao)
OVERWORLD(
@ -6547,6 +6648,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_TingLu,
.iconSprite = gMonIcon_TingLu,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(12, 13, SHADOW_SIZE_L)
FOOTPRINT(TingLu)
OVERWORLD(
@ -6614,6 +6716,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_ChiYu,
.iconSprite = gMonIcon_ChiYu,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 16, SHADOW_SIZE_S)
FOOTPRINT(ChiYu)
OVERWORLD(
@ -6682,6 +6785,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_RoaringMoon,
.iconSprite = gMonIcon_RoaringMoon,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(RoaringMoon)
OVERWORLD(
@ -6747,6 +6851,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_IronValiant,
.iconSprite = gMonIcon_IronValiant,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 14, SHADOW_SIZE_L)
FOOTPRINT(IronValiant)
OVERWORLD(
@ -6812,6 +6917,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Koraidon,
.iconSprite = gMonIcon_Koraidon,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 13, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(Koraidon)
OVERWORLD(
@ -6879,6 +6985,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Miraidon,
.iconSprite = gMonIcon_Miraidon,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(10, 14, SHADOW_SIZE_L)
FOOTPRINT(Miraidon)
OVERWORLD(
@ -6946,6 +7053,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_WalkingWake,
.iconSprite = gMonIcon_WalkingWake,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 13, SHADOW_SIZE_L)
FOOTPRINT(WalkingWake)
OVERWORLD(
@ -7011,6 +7119,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_IronLeaves,
.iconSprite = gMonIcon_IronLeaves,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 11, SHADOW_SIZE_M)
FOOTPRINT(IronLeaves)
OVERWORLD(
@ -7077,6 +7186,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Poltchageist,
.iconSprite = gMonIcon_Poltchageist,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 14, SHADOW_SIZE_S)
FOOTPRINT(Poltchageist)
OVERWORLD(
@ -7141,6 +7251,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Poltchageist,
.iconSprite = gMonIcon_Poltchageist,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 14, SHADOW_SIZE_S)
FOOTPRINT(Poltchageist)
OVERWORLD(
@ -7206,6 +7317,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Sinistcha,
.iconSprite = gMonIcon_Sinistcha,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 11, SHADOW_SIZE_M)
FOOTPRINT(Sinistcha)
OVERWORLD(
@ -7269,6 +7381,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Sinistcha,
.iconSprite = gMonIcon_Sinistcha,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 11, SHADOW_SIZE_M)
FOOTPRINT(Sinistcha)
OVERWORLD(
@ -7334,6 +7447,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Okidogi,
.iconSprite = gMonIcon_Okidogi,
.iconPalIndex = 1,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 11, SHADOW_SIZE_L)
FOOTPRINT(Okidogi)
OVERWORLD(
@ -7400,6 +7514,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Munkidori,
.iconSprite = gMonIcon_Munkidori,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(1, 8, SHADOW_SIZE_S)
FOOTPRINT(Munkidori)
OVERWORLD(
@ -7466,6 +7581,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Fezandipiti,
.iconSprite = gMonIcon_Fezandipiti,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-3, 10, SHADOW_SIZE_M)
FOOTPRINT(Fezandipiti)
OVERWORLD(
@ -7529,6 +7645,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Ogerpon##Form2, \
.iconSprite = gMonIcon_Ogerpon##Form1, \
.iconPalIndex = iconpalette, \
.pokemonJumpType = PKMN_JUMP_TYPE_NONE, \
SHADOW(7, 13, SHADOW_SIZE_L) \
FOOTPRINT(Ogerpon) \
OVERWORLD( \
@ -7611,6 +7728,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_GougingFire,
.iconSprite = gMonIcon_GougingFire,
.iconPalIndex = 5,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-1, 6, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(GougingFire)
OVERWORLD(
@ -7677,6 +7795,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_RagingBolt,
.iconSprite = gMonIcon_RagingBolt,
.iconPalIndex = 2,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 14, SHADOW_SIZE_L)
FOOTPRINT(RagingBolt)
OVERWORLD(
@ -7742,6 +7861,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_IronBoulder,
.iconSprite = gMonIcon_IronBoulder,
.iconPalIndex = 5,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(4, 7, SHADOW_SIZE_XL_BATTLE_ONLY)
FOOTPRINT(IronBoulder)
OVERWORLD(
@ -7808,6 +7928,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_IronCrown,
.iconSprite = gMonIcon_IronCrown,
.iconPalIndex = 3,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 14, SHADOW_SIZE_L)
FOOTPRINT(IronCrown)
OVERWORLD(
@ -7875,6 +7996,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_TerapagosNormal,
.iconSprite = gMonIcon_TerapagosNormal,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NORMAL,
SHADOW(3, 13, SHADOW_SIZE_L)
FOOTPRINT(TerapagosNormal)
OVERWORLD(
@ -7945,6 +8067,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_TerapagosTerastal,
.iconSprite = gMonIcon_TerapagosTerastal,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(-4, 4, SHADOW_SIZE_L)
FOOTPRINT(TerapagosTerastal)
OVERWORLD(
@ -8013,6 +8136,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_TerapagosStellar,
.iconSprite = gMonIcon_TerapagosStellar,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(0, 12, SHADOW_SIZE_L)
FOOTPRINT(TerapagosStellar)
.isLegendary = TRUE,
@ -8074,6 +8198,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.shinyPalette = gMonShinyPalette_Pecharunt,
.iconSprite = gMonIcon_Pecharunt,
.iconPalIndex = 0,
.pokemonJumpType = PKMN_JUMP_TYPE_NONE,
SHADOW(2, 1, SHADOW_SIZE_L)
FOOTPRINT(Pecharunt)
OVERWORLD(

File diff suppressed because it is too large Load Diff

View File

@ -46,7 +46,7 @@ Optional fields for Pokemon:
(Order does not matter)
- EVs (252 HP / 128 Spe / 48 Def, defaults to all 0, is not capped at 512 total)
(Order does not matter)
- Ball (Poke Ball or ITEM_POKE_BALL, defaults to Poke Ball
- Ball (Poke Ball or ITEM_POKE_BALL, defaults to Poke Ball)
- Happiness (Number between 1 and 255)
- Nature (Rash or NATURE_RASH, defaults to Hardy)
- Shiny (Yes/No, defaults to No)

View File

@ -451,7 +451,7 @@ ALIGNED(4) static const u8 sText_NobodyHasRegistered[] = _("Nobody has registere
ALIGNED(4) static const u8 sText_ChooseRequestedMonType[] = _("Please choose the type of POKéMON\nthat you would like in the trade.\n");
ALIGNED(4) static const u8 sText_WhichMonWillYouOffer[] = _("Which of your party POKéMON will\nyou offer in trade?\p");
ALIGNED(4) static const u8 sText_RegistrationCanceled[] = _("Registration has been canceled.\p");
ALIGNED(4) static const u8 sText_RegistraionCompleted[] = _("Registration has been completed.\p");
ALIGNED(4) static const u8 sText_RegistrationCompleted[] = _("Registration has been completed.\p");
ALIGNED(4) static const u8 sText_TradeCanceled[] = _("The trade has been canceled.\p");
ALIGNED(4) static const u8 sText_CancelRegistrationOfMon[] = _("Cancel the registration of your\nLv. {STR_VAR_2} {STR_VAR_1}?");
ALIGNED(4) static const u8 sText_CancelRegistrationOfEgg[] = _("Cancel the registration of your\nEGG?");
@ -867,7 +867,8 @@ static const struct WindowTemplate sWindowTemplate_TradingBoardRequestType = {
.baseBlock = 0x0001
};
static const struct ListMenuItem sTradingBoardTypes[NUMBER_OF_MON_TYPES] = {
// Subtract two from the total type count to handle in-battle types not for display
static const struct ListMenuItem sTradingBoardTypes[NUMBER_OF_MON_TYPES - 2] = {
{ gTypesInfo[TYPE_NORMAL].name, TYPE_NORMAL },
{ gTypesInfo[TYPE_FIRE].name, TYPE_FIRE },
{ gTypesInfo[TYPE_WATER].name, TYPE_WATER },

View File

@ -1932,7 +1932,7 @@ static void ClearPlaceDecorationGraphicsDataBuffer(struct PlaceDecorationGraphic
static void CopyPalette(u16 *dest, u16 pal)
{
CpuFastCopy(&((u16 *)gTilesetPointer_SecretBase->palettes)[pal * 16], dest, sizeof(u16) * 16);
CpuFastCopy(&gTilesetPointer_SecretBase->palettes[pal], dest, PLTT_SIZE_4BPP);
}
static void CopyTile(u8 *dest, u16 tile)
@ -1945,7 +1945,7 @@ static void CopyTile(u8 *dest, u16 tile)
if (tile != 0)
tile &= 0x03FF;
CpuFastCopy(&((u8 *)gTilesetPointer_SecretBase->tiles)[tile * TILE_SIZE_4BPP], buffer, TILE_SIZE_4BPP);
CpuFastCopy(&gTilesetPointer_SecretBase->tiles[tile * TILE_SIZE_4BPP / sizeof(u32)], buffer, TILE_SIZE_4BPP);
switch (mode)
{
case 0:
@ -1987,7 +1987,7 @@ static void SetDecorSelectionBoxTiles(struct PlaceDecorationGraphicsDataBuffer *
static u16 GetMetatile(u16 tile)
{
return ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[tile] & 0xFFF;
return gTilesetPointer_SecretBaseRedCave->metatiles[tile] & 0xFFF;
}
static void SetDecorSelectionMetatiles(struct PlaceDecorationGraphicsDataBuffer *data)
@ -2058,7 +2058,7 @@ static u8 gpu_pal_decompress_alloc_tag_and_upload(struct PlaceDecorationGraphics
SetDecorSelectionMetatiles(data);
SetDecorSelectionBoxOamAttributes(data->decoration->shape);
SetDecorSelectionBoxTiles(data);
CopyPalette(data->palette, ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[(data->decoration->tiles[0] * NUM_TILES_PER_METATILE) + 7] >> 12);
CopyPalette(data->palette, gTilesetPointer_SecretBaseRedCave->metatiles[(data->decoration->tiles[0] * NUM_TILES_PER_METATILE) + 7] >> 12);
LoadSpritePalette(&sSpritePal_PlaceDecoration);
return CreateSprite(&sDecorationSelectorSpriteTemplate, 0, 0, 0);
}
@ -2114,7 +2114,7 @@ static u8 AddDecorationIconObjectFromObjectEvent(u16 tilesTag, u16 paletteTag, u
SetDecorSelectionMetatiles(&sPlaceDecorationGraphicsDataBuffer);
SetDecorSelectionBoxOamAttributes(sPlaceDecorationGraphicsDataBuffer.decoration->shape);
SetDecorSelectionBoxTiles(&sPlaceDecorationGraphicsDataBuffer);
CopyPalette(sPlaceDecorationGraphicsDataBuffer.palette, ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0] * NUM_TILES_PER_METATILE) + 7] >> 12);
CopyPalette(sPlaceDecorationGraphicsDataBuffer.palette, gTilesetPointer_SecretBaseRedCave->metatiles[(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0] * NUM_TILES_PER_METATILE) + 7] >> 12);
sheet.data = sPlaceDecorationGraphicsDataBuffer.image;
sheet.size = sDecorShapeSizes[sPlaceDecorationGraphicsDataBuffer.decoration->shape] * TILE_SIZE_4BPP;
sheet.tag = tilesTag;

View File

@ -134,7 +134,7 @@ struct DexNavGUI
EWRAM_DATA static struct DexNavSearch *sDexNavSearchDataPtr = NULL;
EWRAM_DATA static struct DexNavGUI *sDexNavUiDataPtr = NULL;
EWRAM_DATA static u8 *sBg1TilemapBuffer = NULL;
EWRAM_DATA bool8 gDexNavBattle = FALSE;
EWRAM_DATA u16 gDexNavSpecies = SPECIES_NONE;
//// Function Declarations
//GUI
@ -807,11 +807,11 @@ static void LoadSearchIconData(void)
LoadCompressedSpriteSheetUsingHeap(&sHiddenMonIconSpriteSheet);
}
static u8 GetSearchLevel(u16 dexNum)
static u8 GetSearchLevel(u16 species)
{
u8 searchLevel;
#if USE_DEXNAV_SEARCH_LEVELS == TRUE
searchLevel = gSaveBlock3Ptr->dexNavSearchLevels[dexNum];
searchLevel = gSaveBlock3Ptr->dexNavSearchLevels[species];
#else
searchLevel = 0;
#endif
@ -829,7 +829,7 @@ static void Task_SetUpDexNavSearch(u8 taskId)
struct Task *task = &gTasks[taskId];
u16 species = sDexNavSearchDataPtr->species;
u8 searchLevel = GetSearchLevel(SpeciesToNationalPokedexNum(species));
u8 searchLevel = GetSearchLevel(species);
// init sprites
sDexNavSearchDataPtr->iconSpriteId = MAX_SPRITES;
@ -1110,7 +1110,7 @@ static void Task_DexNavSearch(u8 taskId)
if (sDexNavSearchDataPtr->proximity < 1)
{
gDexNavBattle = TRUE;
gDexNavSpecies = sDexNavSearchDataPtr->species;
CreateDexNavWildMon(sDexNavSearchDataPtr->species, sDexNavSearchDataPtr->potential, sDexNavSearchDataPtr->monLevel,
sDexNavSearchDataPtr->abilityNum, sDexNavSearchDataPtr->heldItem, sDexNavSearchDataPtr->moves);
@ -2143,7 +2143,7 @@ static void PrintCurrentSpeciesInfo(void)
}
else
{
ConvertIntToDecimalStringN(gStringVar4, GetSearchLevel(dexNum), 0, 4);
ConvertIntToDecimalStringN(gStringVar4, GetSearchLevel(species), 0, 4);
AddTextPrinterParameterized3(WINDOW_INFO, 0, 0, SEARCH_LEVEL_Y, sFontColor_Black, 0, gStringVar4);
}
@ -2666,11 +2666,11 @@ u32 CalculateDexNavShinyRolls(void)
return chainBonus + rndBonus;
}
void TryIncrementSpeciesSearchLevel(u16 dexNum)
void TryIncrementSpeciesSearchLevel()
{
#if USE_DEXNAV_SEARCH_LEVELS == TRUE
if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER && gSaveBlock3Ptr->dexNavSearchLevels[dexNum] < 255)
gSaveBlock3Ptr->dexNavSearchLevels[dexNum]++;
if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER && gSaveBlock3Ptr->dexNavSearchLevels[gDexNavSpecies] < 255)
gSaveBlock3Ptr->dexNavSearchLevels[gDexNavSpecies]++;
#endif
}

View File

@ -193,6 +193,7 @@ static void DoShadowFieldEffect(struct ObjectEvent *);
static void SetJumpSpriteData(struct Sprite *, u8, u8, u8);
static void SetWalkSlowSpriteData(struct Sprite *, u8);
static bool8 UpdateWalkSlowAnim(struct Sprite *);
static bool8 UpdateWalkSlowStairs(struct ObjectEvent *objectEvent, struct Sprite *sprite);
static u8 DoJumpSpriteMovement(struct Sprite *);
static u8 DoJumpSpecialSpriteMovement(struct Sprite *);
static void CreateLevitateMovementTask(struct ObjectEvent *);
@ -962,6 +963,13 @@ const u8 gFaceDirectionMovementActions[] = {
[DIR_NORTHWEST] = MOVEMENT_ACTION_FACE_LEFT,
[DIR_NORTHEAST] = MOVEMENT_ACTION_FACE_RIGHT
};
static const u8 gWalkSlowStairsMovementActions[] = {
[DIR_NONE] = MOVEMENT_ACTION_WALK_SLOW_STAIRS_DOWN,
[DIR_SOUTH] = MOVEMENT_ACTION_WALK_SLOW_STAIRS_DOWN,
[DIR_NORTH] = MOVEMENT_ACTION_WALK_SLOW_STAIRS_UP,
[DIR_WEST] = MOVEMENT_ACTION_WALK_SLOW_STAIRS_LEFT,
[DIR_EAST] = MOVEMENT_ACTION_WALK_SLOW_STAIRS_RIGHT,
};
const u8 gWalkSlowMovementActions[] = {
[DIR_NONE] = MOVEMENT_ACTION_WALK_SLOW_DOWN,
[DIR_SOUTH] = MOVEMENT_ACTION_WALK_SLOW_DOWN,
@ -5528,13 +5536,13 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri
direction = GetDirectionToFace(x, y, targetX, targetY);
// During a script, if player sidesteps or backsteps,
// mirror player's direction instead
if (ArePlayerFieldControlsLocked()
&& gObjectEvents[gPlayerAvatar.objectEventId].facingDirection != gObjectEvents[gPlayerAvatar.objectEventId].movementDirection)
if (ArePlayerFieldControlsLocked() &&
gObjectEvents[gPlayerAvatar.objectEventId].facingDirection != gObjectEvents[gPlayerAvatar.objectEventId].movementDirection)
{
direction = gObjectEvents[gPlayerAvatar.objectEventId].movementDirection;
objectEvent->facingDirectionLocked = TRUE;
}
MoveCoords(direction, &x, &y);
GetCollisionAtCoords(objectEvent, x, y, direction); // Sets directionOverwrite for stairs
if (GetLedgeJumpDirection(x, y, direction) != DIR_NONE)
@ -5542,12 +5550,12 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri
// InitJumpRegular will set the proper speed
ObjectEventSetSingleMovement(objectEvent, sprite, GetJump2MovementAction(direction));
}
else if (playerAction >= MOVEMENT_ACTION_WALK_SLOW_DOWN && playerAction <= MOVEMENT_ACTION_WALK_SLOW_RIGHT)
else if (playerAction >= MOVEMENT_ACTION_WALK_SLOW_STAIRS_DOWN && playerAction <= MOVEMENT_ACTION_WALK_SLOW_STAIRS_RIGHT)
{
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH)) // on sideways stairs
objectEvent->movementActionId = GetWalkNormalMovementAction(direction);
else
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowMovementAction(direction));
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowStairsMovementAction(direction));
}
else if (PlayerGetCopyableMovement() == COPY_MOVE_JUMP2)
{
@ -6399,13 +6407,13 @@ static u8 TryUpdateMovementActionOnStairs(struct ObjectEvent *objectEvent, u8 mo
switch (movementActionId)
{
case MOVEMENT_ACTION_WALK_NORMAL_DOWN:
return MOVEMENT_ACTION_WALK_SLOW_DOWN;
return MOVEMENT_ACTION_WALK_SLOW_STAIRS_DOWN;
case MOVEMENT_ACTION_WALK_NORMAL_UP:
return MOVEMENT_ACTION_WALK_SLOW_UP;
return MOVEMENT_ACTION_WALK_SLOW_STAIRS_UP;
case MOVEMENT_ACTION_WALK_NORMAL_LEFT:
return MOVEMENT_ACTION_WALK_SLOW_LEFT;
return MOVEMENT_ACTION_WALK_SLOW_STAIRS_LEFT;
case MOVEMENT_ACTION_WALK_NORMAL_RIGHT:
return MOVEMENT_ACTION_WALK_SLOW_RIGHT;
return MOVEMENT_ACTION_WALK_SLOW_STAIRS_RIGHT;
default:
return movementActionId;
}
@ -6534,6 +6542,7 @@ u8 name(u32 idx)\
}
dirn_to_anim(GetFaceDirectionMovementAction, gFaceDirectionMovementActions);
dirn_to_anim(GetWalkSlowStairsMovementAction, gWalkSlowStairsMovementActions);
dirn_to_anim(GetWalkSlowMovementAction, gWalkSlowMovementActions);
dirn_to_anim(GetPlayerRunSlowMovementAction, gRunSlowMovementActions);
dirn_to_anim(GetWalkNormalMovementAction, gWalkNormalMovementActions);
@ -10318,6 +10327,22 @@ static bool8 UpdateWalkSlowAnim(struct Sprite *sprite)
return FALSE;
}
bool8 UpdateWalkSlowStairsAnim(struct Sprite *sprite)
{
if (++sprite->sTimer < 3)
{
Step1(sprite, sprite->sDirection);
sprite->sNumSteps++;
}
else
sprite->sTimer = 0;
if (sprite->sNumSteps > 15)
return TRUE;
else
return FALSE;
}
#undef sTimer
#undef sNumSteps
@ -11075,6 +11100,88 @@ bool8 MovementActionFunc_RunSlow_Step1(struct ObjectEvent *objectEvent, struct S
return FALSE;
}
static bool8 UpdateWalkSlowStairs(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (UpdateWalkSlowStairsAnim(sprite))
{
ShiftStillObjectEventCoords(objectEvent);
objectEvent->triggerGroundEffectsOnStop = TRUE;
sprite->animPaused = TRUE;
return TRUE;
}
return FALSE;
}
bool8 MovementAction_WalkSlowStairsUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitWalkSlow(objectEvent, sprite, DIR_NORTH);
return MovementAction_WalkSlowStairsUp_Step1(objectEvent, sprite);
}
bool8 MovementAction_WalkSlowStairsUp_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (UpdateWalkSlowStairs(objectEvent, sprite))
{
sprite->data[2] = 2;
return TRUE;
}
return FALSE;
}
bool8 MovementAction_WalkSlowStairsDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitWalkSlow(objectEvent, sprite, DIR_SOUTH);
return MovementAction_WalkSlowStairsDown_Step1(objectEvent, sprite);
}
bool8 MovementAction_WalkSlowStairsDown_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (UpdateWalkSlowStairs(objectEvent, sprite))
{
sprite->data[2] = 2;
return TRUE;
}
return FALSE;
}
bool8 MovementAction_WalkSlowStairsLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (objectEvent->directionOverwrite)
InitWalkSlow(objectEvent, sprite, objectEvent->directionOverwrite);
else
InitWalkSlow(objectEvent, sprite, DIR_WEST);
return MovementAction_WalkSlowStairsLeft_Step1(objectEvent, sprite);
}
bool8 MovementAction_WalkSlowStairsLeft_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (UpdateWalkSlowStairs(objectEvent, sprite))
{
sprite->data[2] = 2;
return TRUE;
}
return FALSE;
}
bool8 MovementAction_WalkSlowStairsRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (objectEvent->directionOverwrite)
InitWalkSlow(objectEvent, sprite, objectEvent->directionOverwrite);
else
InitWalkSlow(objectEvent, sprite, DIR_EAST);
return MovementAction_WalkSlowStairsRight_Step1(objectEvent, sprite);
}
bool8 MovementAction_WalkSlowStairsRight_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (UpdateWalkSlowStairs(objectEvent, sprite))
{
sprite->data[2] = 2;
return TRUE;
}
return FALSE;
}
static u16 GetGraphicsIdForMon(u32 species, bool32 shiny, bool32 female)
{
u16 graphicsId = species + OBJ_EVENT_MON;

View File

@ -497,6 +497,20 @@ static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 me
return EventScript_Questionnaire;
if (MetatileBehavior_IsTrainerHillTimer(metatileBehavior) == TRUE)
return EventScript_TrainerHillTimer;
if (MetatileBehavior_IsPokeMartSign(metatileBehavior) == TRUE)
{
if(direction != DIR_NORTH)
return NULL;
SetMsgSignPostAndVarFacing(direction);
return Common_EventScript_ShowPokemartSign;
}
if (MetatileBehavior_IsPokemonCenterSign(metatileBehavior) == TRUE)
{
if(direction != DIR_NORTH)
return NULL;
SetMsgSignPostAndVarFacing(direction);
return Common_EventScript_ShowPokemonCenterSign;
}
elevation = position->elevation;
if (elevation == MapGridGetElevationAt(position->x, position->y))

View File

@ -93,7 +93,8 @@ static bool8 PlayerAnimIsMultiFrameStationaryAndStateNotTurning(void);
static bool8 PlayerIsAnimActive(void);
static bool8 PlayerCheckIfAnimFinishedOrInactive(void);
static void PlayerWalkSlow(u8 direction);
static void PlayerWalkSlowStairs(u8 direction);
static void UNUSED PlayerWalkSlow(u8 direction);
static void PlayerRunSlow(u8 direction);
static void PlayerRun(u8);
static void PlayerNotOnBikeCollide(u8);
@ -701,7 +702,7 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys)
else
{
if (ObjectMovingOnRockStairs(&gObjectEvents[gPlayerAvatar.objectEventId], direction))
PlayerWalkSlow(direction);
PlayerWalkSlowStairs(direction);
else
PlayerWalkNormal(direction);
}
@ -1016,8 +1017,14 @@ void PlayerSetAnimId(u8 movementActionId, u8 copyableMovement)
}
}
// slow stairs (from FRLG--faster than slow)
static void PlayerWalkSlowStairs(u8 direction)
{
PlayerSetAnimId(GetWalkSlowStairsMovementAction(direction), 2);
}
// slow
static void PlayerWalkSlow(u8 direction)
static void UNUSED PlayerWalkSlow(u8 direction)
{
PlayerSetAnimId(GetWalkSlowMovementAction(direction), 2);
}

View File

@ -610,7 +610,7 @@ const u16 gBattleAnimUnused_Unknown2[] = INCBIN_U16("graphics/battle_anims/unuse
const u16 gBattleAnimUnused_Unknown3[] = INCBIN_U16("graphics/battle_anims/unused/unknown_3.bin");
const u32 gBattleAnimUnusedGfx_LineSketch2[] = INCBIN_U32("graphics/battle_anims/unused/line_sketch_2.8bpp.lz");
const u16 gBattleAnimUnusedPal_LineSketch2[] = INCBIN_U16("graphics/battle_anims/unused/line_sketch_2.gbapal.lz");
const u32 gBattleAnimUnusedPal_LineSketch2[] = INCBIN_U32("graphics/battle_anims/unused/line_sketch_2.gbapal.lz");
const u32 gBattleAnimUnusedTilemap_LineSketch2[] = INCBIN_U32("graphics/battle_anims/unused/line_sketch_2.bin.lz");
const u32 gBattleAnimSpriteGfx_BlueLines[] = INCBIN_U32("graphics/battle_anims/sprites/blue_lines.4bpp.lz");

View File

@ -735,7 +735,7 @@ static void DoMoveRelearnerMain(void)
{
u16 moveId = GetMonData(&gPlayerParty[sMoveRelearnerStruct->partyMon], MON_DATA_MOVE1 + sMoveRelearnerStruct->moveSlot);
u8 originalPP = GetMonData(&gPlayerParty[sMoveRelearnerStruct->partyMon], MON_DATA_PP1 + sMoveRelearnerStruct->moveSlot);
StringCopy(gStringVar3, GetMoveName(moveId));
RemoveMonPPBonus(&gPlayerParty[sMoveRelearnerStruct->partyMon], sMoveRelearnerStruct->moveSlot);
SetMonMoveSlot(&gPlayerParty[sMoveRelearnerStruct->partyMon], GetCurrentSelectedMove(), sMoveRelearnerStruct->moveSlot);

View File

@ -6182,6 +6182,27 @@ bool32 TryItemUseFusionChange(u8 taskId, TaskFunc task)
}
}
static void RestoreFusionMon(struct Pokemon *mon)
{
s32 i;
for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) == SPECIES_NONE)
break;
}
if (i >= PARTY_SIZE)
{
CopyMonToPC(mon);
}
else
{
CopyMon(&gPlayerParty[i], mon, sizeof(*mon));
gPlayerPartyCount = i + 1;
}
}
static void Task_TryItemUseFusionChange(u8 taskId)
{
struct Pokemon *mon = &gPlayerParty[gTasks[taskId].firstFusionSlot];
@ -6202,7 +6223,7 @@ static void Task_TryItemUseFusionChange(u8 taskId)
else
{
mon2 = &gPokemonStoragePtr->fusions[gTasks[taskId].storageIndex];
GiveMonToPlayer(mon2);
RestoreFusionMon(mon2);
ZeroMonData(&gPokemonStoragePtr->fusions[gTasks[taskId].storageIndex]);
}
targetSpecies = gTasks[taskId].tTargetSpecies;

View File

@ -5295,7 +5295,7 @@ static void PrintStatsScreen_Moves_Bottom(u8 taskId)
PrintStatsScreenTextSmall(WIN_STATS_MOVES_BOTTOM, gStringVar1, moves_x + 45, moves_y);
//Physical/Special/Status Category
DestroyCategoryIcon();
ShowCategoryIcon(GetBattleMoveCategory(move));
ShowCategoryIcon(GetMoveCategory(move));
//Accuracy
u32 accuracy = GetMoveAccuracy(move);
if (accuracy == 0)
@ -5344,7 +5344,7 @@ static void PrintStatsScreen_NameGender(u8 taskId, u32 num, u32 value)
value = NationalToHoennOrder(num);
else
value = num;
ConvertIntToDecimalStringN(StringCopy(str, gText_NumberClear01), value, STR_CONV_MODE_LEADING_ZEROS, 3);
ConvertIntToDecimalStringN(StringCopy(str, gText_NumberClear01), value, STR_CONV_MODE_LEADING_ZEROS, 4);
PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, str, base_x, base_y + 10);
//Gender ratio //MON_GENDERLESS == 0xFF
@ -6158,7 +6158,7 @@ static void Task_HandleEvolutionScreenInput(u8 taskId)
u16 dexNum = SpeciesToNationalPokedexNum(targetSpecies);
if (sPokedexView->isSearchResults && sPokedexView->originalSearchSelectionNum == 0)
sPokedexView->originalSearchSelectionNum = sPokedexListItem->dexNum;
sPokedexListItem->dexNum = dexNum;
sPokedexListItem->seen = GetSetPokedexFlag(dexNum, FLAG_GET_SEEN);
sPokedexListItem->owned = GetSetPokedexFlag(dexNum, FLAG_GET_CAUGHT);

View File

@ -1163,7 +1163,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
totalRerolls += 1;
if (I_FISHING_CHAIN && gIsFishingEncounter)
totalRerolls += CalculateChainFishingShinyRolls();
if (gDexNavBattle)
if (gDexNavSpecies)
totalRerolls += CalculateDexNavShinyRolls();
while (GET_SHINY_VALUE(value, personality) >= SHINY_ODDS && totalRerolls > 0)
@ -2002,6 +2002,19 @@ u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove)
}
}
// Handler for if Zacian or Zamazenta should learn Iron Head
// since it transforms in the Behemoth Blade/Bash move in
// battle in the Crowned forms.
if (learnset[sLearningMoveTableID].move == MOVE_IRON_HEAD && (species == SPECIES_ZAMAZENTA_CROWNED || species == SPECIES_ZACIAN_CROWNED))
{
for (u32 accessor = MON_DATA_MOVE1; accessor <= MON_DATA_MOVE4; accessor++)
{
u32 move = GetMonData(mon, accessor);
if (move == MOVE_BEHEMOTH_BLADE || move == MOVE_BEHEMOTH_BASH)
return MOVE_NONE;
}
}
if (learnset[sLearningMoveTableID].level == level)
{
gMoveToLearn = learnset[sLearningMoveTableID].move;

View File

@ -57,12 +57,6 @@ enum {
PACKET_MEMBER_STATE,
};
enum {
JUMP_TYPE_NORMAL,
JUMP_TYPE_FAST,
JUMP_TYPE_SLOW,
};
enum {
FUNC_GAME_INTRO,
FUNC_WAIT_ROUND,
@ -274,17 +268,11 @@ struct PokemonJump
struct PokemonJump_Player *player;
};
struct PokemonJumpMons
{
u16 species;
u16 jumpType;
};
static void InitGame(struct PokemonJump *);
static void ResetForNewGame(struct PokemonJump *);
static void InitPlayerAndJumpTypes(void);
static void ResetPlayersForNewGame(void);
static s16 GetPokemonJumpSpeciesIdx(u16 species);
static s16 GetSpeciesPokemonJumpType(u16 species);
static void InitJumpMonInfo(struct PokemonJump_MonInfo *, struct Pokemon *);
static void CB2_PokemonJump(void);
static void Task_StartPokemonJump(u8);
@ -420,390 +408,6 @@ static inline void TruncateToFirstWordOnly(u8 *);
EWRAM_DATA static struct PokemonJump *sPokemonJump = NULL;
EWRAM_DATA static struct PokemonJumpGfx *sPokemonJumpGfx = NULL;
/*
According to the clerk, the Pokémon allowed in
Pokémon Jump are all <= 28 inches, and do not
only swim, burrow, or fly.
*/
static const struct PokemonJumpMons sPokeJumpMons[] =
{
{ .species = SPECIES_BULBASAUR, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_CHARMANDER, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SQUIRTLE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_CATERPIE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_METAPOD, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_WEEDLE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_KAKUNA, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_RATTATA, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_RATTATA_ALOLA, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_RATICATE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_RATICATE_ALOLA, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_PIKACHU, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PIKACHU_COSPLAY, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PIKACHU_ROCK_STAR, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PIKACHU_BELLE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PIKACHU_POP_STAR, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PIKACHU_PHD, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PIKACHU_LIBRE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PIKACHU_ORIGINAL, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PIKACHU_HOENN, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PIKACHU_SINNOH, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PIKACHU_UNOVA, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PIKACHU_KALOS, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PIKACHU_ALOLA, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PIKACHU_PARTNER, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PIKACHU_WORLD, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PIKACHU_STARTER, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SANDSHREW, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SANDSHREW_ALOLA, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_NIDORAN_F, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_NIDORAN_M, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_CLEFAIRY, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_VULPIX, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_VULPIX_ALOLA, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_JIGGLYPUFF, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ODDISH, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_PARAS, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_MEOWTH, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_MEOWTH_ALOLA, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_MEOWTH_GALAR, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PSYDUCK, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_MANKEY, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_GROWLITHE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_POLIWAG, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_BELLSPROUT, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SHELLDER, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_KRABBY, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_EXEGGCUTE, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_CUBONE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_DITTO, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_EEVEE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_EEVEE_STARTER, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_OMANYTE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_KABUTO, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_CHIKORITA, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_CYNDAQUIL, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_TOTODILE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPINARAK, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_PICHU, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PICHU_SPIKY_EARED, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_CLEFFA, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_IGGLYBUFF, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_TOGEPI, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_MAREEP, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_BELLOSSOM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_MARILL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SUNKERN, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_WOOPER, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_WOOPER_PALDEA, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_PINECO, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SNUBBULL, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SHUCKLE, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_TEDDIURSA, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SLUGMA, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SWINUB, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_HOUNDOUR, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_PHANPY, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PORYGON2, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_TYROGUE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SMOOCHUM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ELEKID, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_MAGBY, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_LARVITAR, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_TREECKO, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_TORCHIC, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_MUDKIP, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_MARSHTOMP, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_POOCHYENA, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_ZIGZAGOON, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_ZIGZAGOON_GALAR, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_LINOONE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_LINOONE_GALAR, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_WURMPLE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SILCOON, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_CASCOON, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_LOTAD, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SEEDOT, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_RALTS, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_KIRLIA, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SURSKIT, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SHROOMISH, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_NINCADA, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_WHISMUR, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_AZURILL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SKITTY, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SABLEYE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SABLEYE_MEGA, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_MAWILE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_ARON, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_MEDITITE, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ELECTRIKE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_PLUSLE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_MINUN, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_VOLBEAT, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_ILLUMISE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_ROSELIA, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_GULPIN, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_NUMEL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_TORKOAL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SPOINK, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_TRAPINCH, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_CACNEA, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ANORITH, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_WYNAUT, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SNORUNT, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_CLAMPERL, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_BAGON, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_TURTWIG, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_CHIMCHAR, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_PIPLUP, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_BIDOOF, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_KRICKETOT, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SHINX, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_BUDEW, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SHIELDON, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_PACHIRISU, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_BUIZEL, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_CHERUBI, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_CHERRIM_OVERCAST, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_CHERRIM_SUNSHINE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SHELLOS_WEST, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SHELLOS_EAST, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_BUNEARY, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_GLAMEOW, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_STUNKY, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_BONSLY, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_MIME_JR, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_HAPPINY, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_GIBLE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_MUNCHLAX, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_RIOLU, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_CROAGUNK, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SHAYMIN_LAND, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SNIVY, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_TEPIG, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_OSHAWOTT, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PATRAT, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_LILLIPUP, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_PURRLOIN, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_PANSAGE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PANSEAR, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_PANPOUR, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_ROGGENROLA, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_DRILBUR, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_EXCADRILL, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_TIMBURR, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SEWADDLE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SWADLOON, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_VENIPEDE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_PETILIL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SANDILE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_DARUMAKA, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_DARUMAKA_GALAR, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_DWEBBLE, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SCRAGGY, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ARCHEN, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_TRUBBISH, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_ZORUA, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_MINCCINO, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_CINCCINO, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_GOTHITA, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_GOTHORITA, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_DEERLING_SPRING, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_DEERLING_SUMMER, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_DEERLING_AUTUMN, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_DEERLING_WINTER, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_KARRABLAST, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_FOONGUS, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_AMOONGUSS, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_JOLTIK, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_LITWICK, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_AXEW, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_CUBCHOO, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SHELMET, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_STUNFISK, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_STUNFISK_GALAR, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_PAWNIARD, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_DURANT, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_CHESPIN, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_QUILLADIN, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_FENNEKIN, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_FROAKIE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_FROGADIER, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_BUNNELBY, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_POLAR, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_TUNDRA, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_CONTINENTAL, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_GARDEN, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_ELEGANT, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_MEADOW, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_MODERN, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_MARINE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_ARCHIPELAGO, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_HIGH_PLAINS, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_SANDSTORM, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_RIVER, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_MONSOON, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_SAVANNA, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_SUN, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_OCEAN, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_JUNGLE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_FANCY, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SCATTERBUG_POKEBALL, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SPEWPA_POLAR, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_TUNDRA, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_CONTINENTAL, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_GARDEN, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_ELEGANT, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_MEADOW, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_MODERN, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_MARINE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_ARCHIPELAGO, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_HIGH_PLAINS, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_SANDSTORM, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_RIVER, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_MONSOON, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_SAVANNA, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_SUN, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_OCEAN, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_JUNGLE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_FANCY, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SPEWPA_POKEBALL, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_LITLEO, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_PANCHAM, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_ESPURR, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_MEOWSTIC_M, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_MEOWSTIC_F, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_BINACLE, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_CLAUNCHER, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_HELIOPTILE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_DEDENNE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_GOOMY, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ROWLET, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_DARTRIX, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_LITTEN, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_TORRACAT, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_POPPLIO, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_BRIONNE, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_YUNGOOS, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_GUMSHOOS, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_GRUBBIN, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_CHARJABUG, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_CRABRAWLER, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ROCKRUFF, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_ROCKRUFF_OWN_TEMPO, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_MAREANIE, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_DEWPIDER, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_FOMANTIS, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_MORELULL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SALANDIT, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_STUFFUL, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_BOUNSWEET, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_STEENEE, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_WIMPOD, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_PYUKUMUKU, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_KOMALA, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_TOGEDEMARU, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_MIMIKYU_DISGUISED, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_MIMIKYU_BUSTED, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_JANGMO_O, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_MARSHADOW, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_MELTAN, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_GROOKEY, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_THWACKEY, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_SCORBUNNY, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_RABOOT, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SOBBLE, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_DRIZZILE, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SKWOVET, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SKWOVET, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_BLIPBUG, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_DOTTLER, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_NICKIT, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_GOSSIFLEUR, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ELDEGOSS, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_WOOLOO, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_CHEWTLE, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_YAMPER, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_ROLYCOLY, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_APPLIN, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_APPLETUN, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_TOXEL, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_SIZZLIPEDE, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_CLOBBOPUS, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_HATENNA, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_HATTREM, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_IMPIDIMP, .jumpType = JUMP_TYPE_FAST, },
{ .species = SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_BERRY_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_BERRY_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_BERRY_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_BERRY_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_BERRY_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_BERRY_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_BERRY_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_LOVE_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_LOVE_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_LOVE_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_LOVE_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_LOVE_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_LOVE_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_LOVE_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STAR_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STAR_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STAR_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STAR_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STAR_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STAR_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STAR_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_CLOVER_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_CLOVER_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_CLOVER_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_CLOVER_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_FLOWER_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_FLOWER_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_FLOWER_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_FLOWER_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_RIBBON_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_RIBBON_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_RIBBON_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_RIBBON_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_PINCURCHIN, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_SNOM, .jumpType = JUMP_TYPE_SLOW, },
{ .species = SPECIES_MORPEKO_FULL_BELLY, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_MORPEKO_HANGRY, .jumpType = JUMP_TYPE_NORMAL, },
{ .species = SPECIES_KUBFU, .jumpType = JUMP_TYPE_FAST, },
};
void StartPokemonJump(u16 partyId, MainCallback exitCallback)
{
u8 taskId;
@ -890,12 +494,11 @@ static void ResetForNewGame(struct PokemonJump *jump)
static void InitPlayerAndJumpTypes(void)
{
int i, index;
int i;
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
index = GetPokemonJumpSpeciesIdx(sPokemonJump->monInfo[i].species);
sPokemonJump->players[i].monJumpType = sPokeJumpMons[index].jumpType;
sPokemonJump->players[i].monJumpType = GetSpeciesPokemonJumpType(sPokemonJump->monInfo[i].species);
}
sPokemonJump->player = &sPokemonJump->players[sPokemonJump->multiplayerId];
@ -917,16 +520,9 @@ static void ResetPlayersForNewGame(void)
}
}
static s16 GetPokemonJumpSpeciesIdx(u16 species)
static s16 GetSpeciesPokemonJumpType(u16 species)
{
u32 i;
for (i = 0; i < ARRAY_COUNT(sPokeJumpMons); i++)
{
if (sPokeJumpMons[i].species == species)
return i;
}
return -1; // species isnt allowed
return gSpeciesInfo[SanitizeSpeciesId(species)].pokemonJumpType;
}
static void InitJumpMonInfo(struct PokemonJump_MonInfo *monInfo, struct Pokemon *mon)
@ -2237,24 +1833,24 @@ static void HandleMonState(void)
static const s8 sJumpOffsets[][48] =
{
[JUMP_TYPE_NORMAL] = { -3, -6, -8, -10, -13, -15, -17, -19,
-21, -23, -25, -27, -28, -29,
JUMP_PEAK, JUMP_PEAK, JUMP_PEAK,
-28, -27, -26, -25, -23, -22, -20, -18,
-17, -15, -13, -11, -8, -6, -4, -1},
[PKMN_JUMP_TYPE_NORMAL - 1] = { -3, -6, -8, -10, -13, -15, -17, -19,
-21, -23, -25, -27, -28, -29,
JUMP_PEAK, JUMP_PEAK, JUMP_PEAK,
-28, -27, -26, -25, -23, -22, -20, -18,
-17, -15, -13, -11, -8, -6, -4, -1},
[JUMP_TYPE_FAST] = { -3, -6, -9, -11, -14, -16, -18, -20,
-22, -24, -26, -28, -29,
JUMP_PEAK, JUMP_PEAK,
-28, -26, -24, -22, -20, -18, -16, -14,
-11, -9, -6, -4, -1},
[PKMN_JUMP_TYPE_FAST - 1] = { -3, -6, -9, -11, -14, -16, -18, -20,
-22, -24, -26, -28, -29,
JUMP_PEAK, JUMP_PEAK,
-28, -26, -24, -22, -20, -18, -16, -14,
-11, -9, -6, -4, -1},
[JUMP_TYPE_SLOW] = { -3, -6, -9, -11, -13, -15, -17, -19,
-21, -23, -25, -27, -28, -29,
JUMP_PEAK, JUMP_PEAK, JUMP_PEAK, JUMP_PEAK,
-29, -29, -28, -28, -27, -27, -26, -25,
-24, -22, -20, -18, -16, -14, -12, -11,
-9, -6, -4, -1},
[PKMN_JUMP_TYPE_SLOW - 1] = { -3, -6, -9, -11, -13, -15, -17, -19,
-21, -23, -25, -27, -28, -29,
JUMP_PEAK, JUMP_PEAK, JUMP_PEAK, JUMP_PEAK,
-29, -29, -28, -28, -27, -27, -26, -25,
-24, -22, -20, -18, -16, -14, -12, -11,
-9, -6, -4, -1},
};
static void UpdateJump(int multiplayerId)
@ -2289,7 +1885,7 @@ static void UpdateJump(int multiplayerId)
jumpOffsetIdx -= 4;
if (jumpOffsetIdx < (int)ARRAY_COUNT(sJumpOffsets[0]))
jumpOffset = sJumpOffsets[player->monJumpType][jumpOffsetIdx];
jumpOffset = sJumpOffsets[player->monJumpType - 1][jumpOffsetIdx];
else
jumpOffset = 0;
@ -2620,7 +2216,7 @@ static u8 *GetPokeJumpPlayerName(u8 multiplayerId)
bool32 IsSpeciesAllowedInPokemonJump(u16 species)
{
return GetPokemonJumpSpeciesIdx(species) > -1;
return GetSpeciesPokemonJumpType(species) != PKMN_JUMP_TYPE_NONE;
}
void IsPokemonJumpSpeciesInParty(void)

View File

@ -1720,7 +1720,7 @@ static void Task_HandleInput(u8 taskId)
PlaySE(SE_SELECT);
BeginCloseSummaryScreen(taskId);
}
else if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES
else if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES
|| sMonSummaryScreen->currPageIndex == PSS_PAGE_CONTEST_MOVES)
{
PlaySE(SE_SELECT);
@ -1773,7 +1773,7 @@ static u8 IncrementSkillsStatsMode(u8 mode)
sMonSummaryScreen->skillsPageMode = SUMMARY_SKILLS_MODE_EVS;
return SUMMARY_SKILLS_MODE_EVS;
}
else
else
{
sMonSummaryScreen->skillsPageMode = SUMMARY_SKILLS_MODE_IVS;
return SUMMARY_SKILLS_MODE_IVS;
@ -1956,7 +1956,7 @@ static void Task_ChangeSummaryMon(u8 taskId)
if (P_SUMMARY_SCREEN_RENAME && sMonSummaryScreen->currPageIndex == PSS_PAGE_INFO)
ShowUtilityPrompt(SUMMARY_MODE_NORMAL);
if (ShouldShowIvEvPrompt() && sMonSummaryScreen->currPageIndex == PSS_PAGE_SKILLS)
{
{
sMonSummaryScreen->skillsPageMode = SUMMARY_SKILLS_MODE_STATS;
ChangeStatLabel(SUMMARY_SKILLS_MODE_STATS);
}
@ -2108,7 +2108,7 @@ static void ChangePage(u8 taskId, s8 delta)
CreateTextPrinterTask(sMonSummaryScreen->currPageIndex);
HidePageSpecificSprites();
if (sMonSummaryScreen->currPageIndex == PSS_PAGE_SKILLS
if (sMonSummaryScreen->currPageIndex == PSS_PAGE_SKILLS
|| (sMonSummaryScreen->currPageIndex + delta) == PSS_PAGE_SKILLS)
{
struct Pokemon *mon = &sMonSummaryScreen->currentMon;
@ -2244,7 +2244,7 @@ static void SwitchToMoveSelection(u8 taskId)
{
if (ShouldShowMoveRelearner())
ClearWindowTilemap(PSS_LABEL_WINDOW_PROMPT_RELEARN);
ShowUtilityPrompt(SUMMARY_MODE_SELECT_MOVE);
}
else
@ -3774,10 +3774,10 @@ static void BufferStat(u8 *dst, u8 statIndex, u32 stat, u32 strId, u32 n)
else
txtPtr = StringCopy(dst, sTextNatureNeutral);
if (!P_SUMMARY_SCREEN_IV_EV_VALUES
if (!P_SUMMARY_SCREEN_IV_EV_VALUES
&& sMonSummaryScreen->skillsPageMode == SUMMARY_SKILLS_MODE_IVS)
StringAppend(dst, GetLetterGrade(stat));
else
else
ConvertIntToDecimalStringN(txtPtr, stat, STR_CONV_MODE_RIGHT_ALIGN, n);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(strId, dst);
@ -3791,7 +3791,7 @@ static const u8 *GetLetterGrade(u32 stat)
static const u8 gText_GradeB[] = _("B");
static const u8 gText_GradeA[] = _("A");
static const u8 gText_GradeS[] = _("S");
if (stat > 0 && stat <= 15)
return gText_GradeD;
else if (stat > 15 && stat <= 25)
@ -3833,7 +3833,7 @@ static void BufferLeftColumnIvEvStats(void)
u8 *hpIvEvString = Alloc(20);
u8 *attackIvEvString = Alloc(20);
u8 *defenseIvEvString = Alloc(20);
DynamicPlaceholderTextUtil_Reset();
BufferStat(hpIvEvString, STAT_HP, sMonSummaryScreen->summary.currentHP, 0, 7);
@ -3850,7 +3850,7 @@ static void BufferLeftColumnIvEvStats(void)
static void PrintLeftColumnStats(void)
{
int x;
if (sMonSummaryScreen->skillsPageMode == SUMMARY_SKILLS_MODE_IVS && !P_SUMMARY_SCREEN_IV_EV_VALUES)
x = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 46);
else
@ -3873,7 +3873,7 @@ static void BufferRightColumnStats(void)
static void PrintRightColumnStats(void)
{
int x;
if (sMonSummaryScreen->skillsPageMode == SUMMARY_SKILLS_MODE_IVS && !P_SUMMARY_SCREEN_IV_EV_VALUES)
x = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 20);
else

View File

@ -35,7 +35,7 @@ EWRAM_DATA u8 gMsgBoxIsCancelable = FALSE;
extern ScrCmdFunc gScriptCmdTable[];
extern ScrCmdFunc gScriptCmdTableEnd[];
extern void *gNullScriptPtr;
extern void * const gNullScriptPtr;
void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTableEnd)
{

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