conflicts
This commit is contained in:
commit
0c35879e02
@ -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
|
||||
|
||||
36
.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml
vendored
36
.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml
vendored
@ -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
|
||||
|
||||
23
.github/ISSUE_TEMPLATE/03_feature_requests.yaml
vendored
23
.github/ISSUE_TEMPLATE/03_feature_requests.yaml
vendored
@ -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
|
||||
|
||||
36
.github/ISSUE_TEMPLATE/04_other_errors.yaml
vendored
36
.github/ISSUE_TEMPLATE/04_other_errors.yaml
vendored
@ -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
|
||||
|
||||
49
.github/pull_request_template.md
vendored
49
.github/pull_request_template.md
vendored
@ -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
27
.github/workflows/labels.yml
vendored
Normal 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
1
.gitignore
vendored
@ -45,3 +45,4 @@ tools/trainerproc/trainerproc
|
||||
*.smol
|
||||
*.fastSmol
|
||||
*.smolTM
|
||||
__pycache__
|
||||
|
||||
142
CONTRIBUTING.md
Normal file
142
CONTRIBUTING.md
Normal 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)!
|
||||
18
Makefile
18
Makefile
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
1
docs/CONTRIBUTING.md
Normal file
@ -0,0 +1 @@
|
||||
{{#include ../CONTRIBUTING.md}}
|
||||
1
docs/CREDITS.md
Normal file
1
docs/CREDITS.md
Normal file
@ -0,0 +1 @@
|
||||
{{#include ../CREDITS.md}}
|
||||
399
docs/STYLEGUIDE.md
Normal file
399
docs/STYLEGUIDE.md
Normal 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>).
|
||||
@ -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)
|
||||
|
||||
115
docs/changelogs/1.11.x/1.11.1.md
Normal file
115
docs/changelogs/1.11.x/1.11.1.md
Normal 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.-->
|
||||
66
docs/team_procedures/merge_checklist.md
Normal file
66
docs/team_procedures/merge_checklist.md
Normal 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.
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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[];
|
||||
|
||||
@ -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[];
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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
|
||||
|
||||
@ -352,6 +352,7 @@ enum {
|
||||
EFFECT_ORDER_UP,
|
||||
EFFECT_RAPID_SPIN,
|
||||
EFFECT_SPECTRAL_THIEF,
|
||||
EFFECT_RECOIL,
|
||||
NUM_BATTLE_MOVE_EFFECTS,
|
||||
};
|
||||
|
||||
|
||||
@ -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,
|
||||
};
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
};
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 *);
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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[];
|
||||
|
||||
@ -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. */
|
||||
|
||||
@ -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];
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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
@ -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:
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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
@ -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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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
|
||||
},
|
||||
};
|
||||
|
||||
@ -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");
|
||||
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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] =
|
||||
|
||||
@ -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,
|
||||
};
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
@ -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
@ -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
@ -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(
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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
@ -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)
|
||||
|
||||
@ -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 },
|
||||
|
||||
@ -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;
|
||||
|
||||
18
src/dexnav.c
18
src/dexnav.c
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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))
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
Loading…
x
Reference in New Issue
Block a user