Merge branch 'upcoming' into merrps-dns

This commit is contained in:
Hedara 2025-04-09 10:01:51 +02:00
commit 08a2ad2c98
255 changed files with 22124 additions and 14189 deletions

View File

@ -5,49 +5,66 @@ 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.10.2 (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
- 1.10.0
- 1.9.4
- 1.9.3
- 1.9.2
- 1.9.1
- 1.9.0
- pre-1.9.0
- pre-1.10.0
validations:
required: true
- type: input
id: upcomingversion
attributes:
label: Upcoming/master Version
description: If you're using the upcoming or master branches directly, please specify what was the commit hash you pulled from.
description: If you're using the `upcoming` or `master` branches directly, please use the following command to give us the commit hash that you are on. `git log --merges RHH/upcoming -1 --format=%H` Replace `upcoming` with `master` if you're using `master`.
validations:
required: false
- type: input
id: contact
attributes:
label: Discord contact info
description: Provide your Discord tag here so we can contact you in case we need more details. Be sure to join our server ([here](https://discord.gg/6CzjAG6GZk)).
description: Provide your Discord tag here so we can contact you in case we need more details. Discussion around **`pokeemerald-expansion`** happens in our [Discord server](https://discord.gg/6CzjAG6GZk).
placeholder: ex. Lunos#4026
validations:
required: false

View File

@ -5,49 +5,66 @@ 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.10.2 (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
- 1.10.0
- 1.9.4
- 1.9.3
- 1.9.2
- 1.9.1
- 1.9.0
- pre-1.9.0
- pre-1.10.0
validations:
required: true
- type: input
id: upcomingversion
attributes:
label: Upcoming/master Version
description: If you're using the upcoming or master branches directly, please specify what was the commit hash you pulled from.
description: If you're using the `upcoming` or `master` branches directly, please use the following command to give us the commit hash that you are on. `git log --merges RHH/upcoming -1 --format=%H` Replace `upcoming` with `master` if you're using `master`.
validations:
required: false
- type: input
id: contact
attributes:
label: Discord contact info
description: Provide your Discord tag here so we can contact you in case we need more details. Be sure to join our server ([here](https://discord.gg/6CzjAG6GZk)).
description: Provide your Discord tag here so we can contact you in case we need more details. Discussion around **`pokeemerald-expansion`** happens in our [Discord server](https://discord.gg/6CzjAG6GZk).
placeholder: ex. Lunos#4026
validations:
required: false

View File

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

View File

@ -5,49 +5,66 @@ 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.10.2 (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
- 1.10.0
- 1.9.4
- 1.9.3
- 1.9.2
- 1.9.1
- 1.9.0
- pre-1.9.0
- pre-1.10.0
validations:
required: true
- type: input
id: upcomingversion
attributes:
label: Upcoming/master Version
description: If you're using the upcoming or master branches directly, please specify what was the commit hash you pulled from.
description: If you're using the `upcoming` or `master` branches directly, please use the following command to give us the commit hash that you are on. `git log --merges RHH/upcoming -1 --format=%H` Replace `upcoming` with `master` if you're using `master`.
validations:
required: false
- type: input
id: contact
attributes:
label: Discord contact info
description: Provide your Discord tag here so we can contact you in case we need more details. Be sure to join our server ([here](https://discord.gg/6CzjAG6GZk)).
description: Provide your Discord tag here so we can contact you in case we need more details. Discussion around **`pokeemerald-expansion`** happens in our [Discord server](https://discord.gg/6CzjAG6GZk).
placeholder: ex. Lunos#4026
validations:
required: false

View File

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

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

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

1
.gitignore vendored
View File

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

142
CONTRIBUTING.md Normal file
View File

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

View File

@ -165,6 +165,21 @@ 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
# wild_encounters.h is generated by a Python script
WILD_ENCOUNTERS_TOOL_DIR := $(TOOLS_DIR)/wild_encounters
AUTO_GEN_TARGETS += $(DATA_SRC_SUBDIR)/wild_encounters.h
$(DATA_SRC_SUBDIR)/wild_encounters.h: $(DATA_SRC_SUBDIR)/wild_encounters.json $(WILD_ENCOUNTERS_TOOL_DIR)/wild_encounters_to_header.py $(INCLUDE_DIRS)/config/overworld.h
python3 $(WILD_ENCOUNTERS_TOOL_DIR)/wild_encounters_to_header.py > $@
$(C_BUILDDIR)/wild_encounter.o: c_dep += $(DATA_SRC_SUBDIR)/wild_encounters.h
PERL := perl
SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c
@ -338,6 +353,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 +443,16 @@ $(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt)
$(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt
$(RAMSCRGEN) ewram_data $< ENGLISH > $@
MOVES_JSON_DIR := $(TOOLS_DIR)/learnset_helpers/porymoves_files
TEACHABLE_DEPS := $(shell find data/ -type f -name '*.inc') $(INCLUDE_DIRS)/constants/tms_hms.h $(C_SUBDIR)/pokemon.c $(wildcard $(MOVES_JSON_DIR)/*.json)
TEACHABLE_DEPS := $(ALL_LEARNABLES_JSON) $(shell find data/ -type f -name '*.inc') $(INCLUDE_DIRS)/constants/tms_hms.h $(C_SUBDIR)/pokemon.c
$(LEARNSET_HELPERS_BUILD_DIR):
@mkdir -p $@
$(ALL_LEARNABLES_JSON): $(wildcard $(LEARNSET_HELPERS_DATA_DIR)/*.json) | $(LEARNSET_HELPERS_BUILD_DIR)
python3 $(LEARNSET_HELPERS_DIR)/make_learnables.py $(LEARNSET_HELPERS_DATA_DIR) $@
$(DATA_SRC_SUBDIR)/pokemon/teachable_learnsets.h: $(TEACHABLE_DEPS)
python3 $(TOOLS_DIR)/learnset_helpers/teachable.py
python3 $(LEARNSET_HELPERS_DIR)/make_teachables.py $<
# Linker script
LD_SCRIPT := ld_script_modern.ld

View File

@ -10,7 +10,7 @@ The main advantage of using vanilla pokeemerald as a base is being able to link
If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect.
You can phrase it as the following:
```
Based off RHH's pokeemerald-expansion 1.10.2 https://github.com/rh-hideout/pokeemerald-expansion/
Based off RHH's pokeemerald-expansion 1.11.1 https://github.com/rh-hideout/pokeemerald-expansion/
```
#### Important: DO NOT use GitHub's "Download Zip" option. Using this option will not download the commit history required to update your expansion version or merge other feature branches. Instead, please read [this guide](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/wiki/The-Basics-of-GitHub) to learn how to fork the repository and clone locally from there.
@ -33,7 +33,7 @@ With this, you'll get the latest version of pokeemerald-expansion, plus a couple
- You can check in the debug menu's `Utilities -> Expansion Version` option.
- If the option is not available, you possibly have version 1.6.2 or older. In that case, please check the [changelogs](docs/CHANGELOG.md) to determine your version based on the features available on your repository.
- ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on. Check the [online documentation site](https://rh-hideout.github.io/pokeemerald-expansion/CHANGELOG.html) to see the latest versions of each step.)
- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.9.3, use `git pull RHH expansion/1.9.3`).
- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.11.1, use `git pull RHH expansion/1.11.1`).
- ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on)
- Alternatively, you can update to unreleased versions of the expansion.
- ***master (stable):*** It contains unreleased **bugfixes** that will come in the next patch version. To merge, use `git pull RHH master`.
@ -67,7 +67,7 @@ Also, *please follow the Pull Request template and feel free to discuss how the
- Fairy Type (configurable).
- Physical/Special/Status Category (configurable).
- New moves and abilities up to Scarlet and Violet.
- Custom Contest data up to SwSh, newer moves are WIP. ([source](https://pokemonurpg.com/info/contests/rse-move-list/))
- Custom Contest data up to SwSh, newer moves are WIP. ([source](https://web.archive.org/web/20240910012333/https://pokemonurpg.com/info/contests/rse-move-list/))
- Battle gimmick support:
- Mega Evolution
- Primal Reversion

View File

@ -1269,7 +1269,7 @@
.byte 0xed
.endm
.macro removelightscreenreflect
.macro removescreens
.byte 0xee
.endm
@ -1614,6 +1614,11 @@
.4byte \ptr
.endm
.macro undodynamax battler:req
callnative BS_UndoDynamax
.byte \battler
.endm
.macro trytrainerslidezmovemsg
callnative BS_TryTrainerSlideZMoveMsg
.endm
@ -1641,10 +1646,6 @@
callnative BS_TryTriggerStatusForm
.endm
.macro setdynamicmovecategory
callnative BS_SetDynamicMoveCategory
.endm
.macro tryupperhand failInstr:req
callnative BS_TryUpperHand
.4byte \failInstr
@ -1817,6 +1818,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
@ -1942,14 +1949,6 @@
various \battler, VARIOUS_RESTORE_PP
.endm
.macro tryactivatemoxie battler:req
various \battler, VARIOUS_TRY_ACTIVATE_MOXIE
.endm
.macro tryactivatebeastboost battler:req
various \battler, VARIOUS_TRY_ACTIVATE_BEAST_BOOST
.endm
.macro tryactivatereceiver battler:req
various \battler, VARIOUS_TRY_ACTIVATE_RECEIVER
.endm
@ -2233,10 +2232,6 @@
.4byte \jumpInstr
.endm
.macro tryactivategrimneigh, battler:req
various \battler, VARIOUS_TRY_ACTIVATE_GRIM_NEIGH
.endm
.macro consumeberry battler:req, fromBattler:req
various \battler, VARIOUS_CONSUME_BERRY
.byte \fromBattler
@ -2297,10 +2292,6 @@
.4byte \jumpInstr
.endm
.macro tryactivatebattlebond battler:req
various \battler, VARIOUS_TRY_ACTIVATE_BATTLE_BOND
.endm
.macro jumpifcantreverttoprimal jumpInstr:req
various BS_ATTACKER, VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL
.4byte \jumpInstr
@ -2377,6 +2368,10 @@
.byte \stat
.endm
.macro restoresavedmove
callnative BS_RestoreSavedMove
.endm
@ helpful macros
.macro setstatchanger stat:req, stages:req, down:req
setbyte sSTATCHANGER, \stat | \stages << 3 | \down << 7

View File

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

View File

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

View File

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

View File

@ -1880,7 +1880,7 @@ gBattleAnimMove_Avalanche::
loadspritegfx ANIM_TAG_ICE_CHUNK
monbg ANIM_DEF_PARTNER
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_TARGET, 2, 7, 1, 11, 1
createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 130, 4, -5, 1, -5, 1
createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 130, -5, 1, -5, 1
playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
delay 2
createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 130, 5, 0, 6, 1
@ -5623,7 +5623,6 @@ gBattleAnimMove_Bulldoze::
gBattleAnimMove_FrostBreath::
loadspritegfx ANIM_TAG_ICE_CHUNK
loadspritegfx ANIM_TAG_SMALL_EMBER
loadspritegfx ANIM_TAG_FIRE_PLUME
fadetobg BG_ICE
waitbgfadeout
createvisualtask AnimTask_StartSlidingBg, 0x5, 0x300, 0x0, 0x0, 0xffff
@ -5635,6 +5634,8 @@ gBattleAnimMove_FrostBreath::
waitforvisualfinish
createsprite gFrostBreathBlueBreathTemplate, ANIM_TARGET, 2, 0x1e, 0xf, 0x0, 0xa, 0xa
waitforvisualfinish
unloadspritegfx ANIM_TAG_SMALL_EMBER
loadspritegfx ANIM_TAG_FIRE_PLUME
loopsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET, 0xb, 0x3
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 3, 25, 1
createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 66, 0x1, 0x5, 0x0
@ -7718,7 +7719,6 @@ gBattleAnimMove_ParabolicCharge::
loadspritegfx ANIM_TAG_SPARK
loadspritegfx ANIM_TAG_LIGHTNING
loadspritegfx ANIM_TAG_ORBS
loadspritegfx ANIM_TAG_BLUE_STAR
monbg ANIM_ATTACKER
setalpha 12, 8
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 6, RGB(18, 16, 3)
@ -7741,6 +7741,11 @@ gBattleAnimMove_ParabolicCharge::
createvisualtask AnimTask_BlendBattleAnimPal, 5, 4, 0, 0, 0, RGB_BLACK
ParabolicChargeHeal:
waitforvisualfinish
unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
unloadspritegfx ANIM_TAG_ELECTRIC_ORBS
unloadspritegfx ANIM_TAG_SPARK
unloadspritegfx ANIM_TAG_LIGHTNING
loadspritegfx ANIM_TAG_BLUE_STAR
clearmonbg ANIM_ATTACKER
waitforvisualfinish
call HealingEffect
@ -12314,14 +12319,13 @@ ZingZapSparks2:
return
gBattleAnimMove_NaturesMadness::
loadspritegfx ANIM_TAG_ICE_CRYSTALS @small circles
loadspritegfx ANIM_TAG_THIN_RING @ring
loadspritegfx ANIM_TAG_SPARKLE_2 @stars
loadspritegfx ANIM_TAG_PINK_PETAL @pink
loadspritegfx ANIM_TAG_ICE_CHUNK @blue green
loadspritegfx ANIM_TAG_ICE_CRYSTALS @small circles CrystalsTemplate
loadspritegfx ANIM_TAG_THIN_RING @ring PinkRingTemplate, GrayRingTemplate
loadspritegfx ANIM_TAG_SPARKLE_2 @stars PinkStarsTemplate
loadspritegfx ANIM_TAG_PINK_PETAL @pink PinkRingTemplate, PinkStarsTemplate
loadspritegfx ANIM_TAG_ICE_CHUNK @blue green CrystalsTemplate
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
loadspritegfx ANIM_TAG_TEAL_ALERT @charge particles
loadspritegfx ANIM_TAG_ECLIPSING_ORB @blue green
monbg ANIM_ATTACKER
setalpha 14, 8
delay 0x1
@ -12357,6 +12361,8 @@ gBattleAnimMove_NaturesMadness::
delay 0x1
monbg ANIM_TARGET
waitforvisualfinish
unloadspritegfx ANIM_TAG_SPARKLE_2
loadspritegfx ANIM_TAG_ECLIPSING_ORB @blue green grayRing
createsprite gNaturesMadnessGrayRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x1, 0x0
playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER
delay 0xe
@ -13140,7 +13146,6 @@ gBattleAnimMove_StuffCheeks::
loadspritegfx ANIM_TAG_BERRY_NORMAL
loadspritegfx ANIM_TAG_SHARP_TEETH
loadspritegfx ANIM_TAG_THIN_RING
loadspritegfx ANIM_TAG_SPARKLE_2
playsewithpan SE_M_METRONOME, 0xc0
createsprite gFloatingBerryTemplate, ANIM_ATTACKER, 1, 0x0
delay 0x45
@ -16757,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
@ -29685,13 +29691,13 @@ gBattleAnimMove_ContinentalCrush::
jumpargeq 0x0 0x0 ContinentalCrushDay
jumpargeq 0x0 0x2 ContinentalCrushAfternoon
ContinentalCrushNight:
fadetobg BG_BLUE_SKY_NIGHT
fadetobg BG_ROCK_FIELD_NIGHT
goto FinishContinentalCrush
ContinentalCrushDay:
fadetobg BG_BLUE_SKY_DAY
fadetobg BG_ROCK_FIELD_DAY
goto FinishContinentalCrush
ContinentalCrushAfternoon:
fadetobg BG_BLUE_SKY_AFTERNOON
fadetobg BG_ROCK_FIELD_AFTERNOON
FinishContinentalCrush:
delay 0x18
invisible ANIM_TARGET
@ -31714,13 +31720,13 @@ gBattleAnimMove_Catastropika::
jumpargeq 0x0 0x0 CatastropikaDaytime
jumpargeq 0x0 0x2 CatastropikaAfternoon
CatastropikaNight:
fadetobg BG_BLUE_SKY_NIGHT
fadetobg BG_MAX_LIGHTNING
goto CatastropikaFinish
CatastropikaDaytime:
fadetobg BG_BLUE_SKY_DAY
fadetobg BG_MAX_LIGHTNING
goto CatastropikaFinish
CatastropikaAfternoon:
fadetobg BG_BLUE_SKY_AFTERNOON
fadetobg BG_MAX_LIGHTNING
CatastropikaFinish:
waitbgfadeout
visible ANIM_ATTACKER
@ -32156,12 +32162,12 @@ gBattleAnimMove_StokedSparksurfer::
jumpargeq 0x0 0x0 StokedSparksurferDay
jumpargeq 0x0 0x2 StokedSparksurferAfternoon
StokedSparksurferNight:
fadetobg BG_BLUE_SKY_NIGHT
fadetobg BG_MAX_LIGHTNING
goto StokedSparksurferFinish
StokedSparksurferAfternoon:
fadetobg BG_BLUE_SKY_AFTERNOON
fadetobg BG_MAX_LIGHTNING
StokedSparksurferDay:
fadetobg BG_BLUE_SKY_DAY
fadetobg BG_MAX_LIGHTNING
StokedSparksurferFinish:
waitbgfadeout
visible ANIM_ATTACKER
@ -33317,20 +33323,24 @@ OceanicOperettaExplosion:
gBattleAnimMove_SplinteredStormshards::
createvisualtask AnimTask_GetLycanrocForm, 0x2
jumpargeq 0x0 0x0 SplinteredStormshardsDayForme
jumpargeq 0x0 0x2 SplinteredStormshardsDuskForme
SplinteredStormshardsNightForme:
fadetobg BG_ROCK_FIELD_NIGHT
goto SplinteredStormshardsFinishFade
SplinteredStormshardsDayForme:
fadetobg BG_ROCK_FIELD_DAY
goto SplinteredStormshardsFinishFade
SplinteredStormshardsDuskForme:
fadetobg BG_ROCK_FIELD_AFTERNOON
SplinteredStormshardsFinishFade:
waitbgfadeout
waitforvisualfinish
loadspritegfx ANIM_TAG_ROCKS @rock
loadspritegfx ANIM_TAG_ICICLE_SPEAR @spear
createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA
waitforvisualfinish
createvisualtask AnimTask_GetLycanrocForm, 0x2
jumpargeq 0x0 0x1 SplinteredStormshardsNightForme
SplinteredStormshardsDayForme:
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xc, 0x5bff
goto SplinteredStormshardsFinishFade
SplinteredStormshardsNightForme:
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xc, 0x0000
SplinteredStormshardsFinishFade:
waitforvisualfinish
setalpha 12, 8
playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
createvisualtask AnimTask_IsTargetPlayerSide, 0x2
jumpargeq 0x7 ANIM_TARGET SplinteredStormshardsByOpponent
@ -33339,7 +33349,6 @@ SplinteredStormshardsByPlayer:
call SplinteredStormshardsPlayer_Rising1
delay 0x2
loadspritegfx ANIM_TAG_ROUND_SHADOW @fly
invisible ANIM_TARGET
playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
createsprite gSplinteredShardsFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150
call SplinteredStormshardsPlayer_Rising1
@ -33354,8 +33363,6 @@ SplinteredStormshardsByPlayer:
call SplinteredStormshardsPlayer_Rising1
delay 16
waitforvisualfinish
visible ANIM_TARGET
call SplinteredStormshardsFixBackgroundFade
waitforvisualfinish
loadspritegfx ANIM_TAG_METEOR @superpower
loadspritegfx ANIM_TAG_EXPLOSION @explosion
@ -33383,6 +33390,8 @@ SplinteredStormshardsEnd:
waitforvisualfinish
createvisualtask AnimTask_AllBattlersVisible, 0xA
waitforvisualfinish
restorebg
waitbgfadein
waitforvisualfinish
end
SplinteredStormshardsExplosionOpponent:
@ -33422,7 +33431,6 @@ SplinteredStormshardsByOpponent:
call SplinteredStormshardsOpponent_Rising1
delay 0x2
loadspritegfx ANIM_TAG_ROUND_SHADOW @fly
invisible ANIM_TARGET
createsprite gSplinteredShardsFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150
call SplinteredStormshardsOpponent_Rising1
call SplinteredStormshardsOpponent_Rising2
@ -33436,10 +33444,6 @@ SplinteredStormshardsByOpponent:
call SplinteredStormshardsOpponent_Rising1
delay 16
waitforvisualfinish
visible ANIM_TARGET
call SplinteredStormshardsFixBackgroundFade
waitforvisualfinish
visible ANIM_TARGET
loadspritegfx ANIM_TAG_METEOR @superpower
loadspritegfx ANIM_TAG_EXPLOSION @explosion
playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
@ -33563,16 +33567,6 @@ SplinteredStormshardsOpponent_Rising2:
createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xdc, 0x40, 0xdc, 0x0, 0x30
delay 0x2
return
SplinteredStormshardsFixBackgroundFade:
createvisualtask AnimTask_GetLycanrocForm, 0x2
jumpargeq 0x0 0x1 SplinteredStormshardsNightFormeReturn
SplinteredStormshardsDayFormeReturn:
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xc, 0x0, 0x5bff
goto SplinteredStormshardsFinishFadeReturn
SplinteredStormshardsNightFormeReturn:
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xc, 0x0, 0x0000
SplinteredStormshardsFinishFadeReturn:
return
gBattleAnimMove_LetsSnuggleForever::

View File

@ -272,7 +272,11 @@ BattleScript_EffectChillyReception::
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_EffectChillyReceptionBlockedByPrimalRain
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_EffectChillyReceptionBlockedByStrongWinds
call BattleScript_EffectChillyReceptionPlayAnimation
#if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL
setfieldweather BATTLE_WEATHER_HAIL
#else
setfieldweather BATTLE_WEATHER_SNOW
#endif
call BattleScript_MoveWeatherChangeRet
goto BattleScript_MoveSwitch
BattleScript_EffectChillyReceptionPlayAnimation:
@ -836,10 +840,6 @@ BattleScript_FlingMissed:
ppreduce
goto BattleScript_MoveMissedPause
BattleScript_EffectDynamicCategory::
setdynamicmovecategory
goto BattleScript_EffectHit
BattleScript_EffectAuraWheel:: @ Aura Wheel can only be used by Morpeko
jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_FULL_BELLY, BattleScript_EffectHit
jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_HANGRY, BattleScript_EffectHit
@ -1034,6 +1034,7 @@ BattleScript_EffectCoaching::
setallytonexttarget EffectCoaching_CheckAllyStats
goto BattleScript_ButItFailed
EffectCoaching_CheckAllyStats:
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_CoachingWorks
jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_DEF, MAX_STAT_STAGE, BattleScript_CoachingWorks
goto BattleScript_ButItFailed @ ally at max atk, def
@ -3428,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
@ -3776,6 +3741,7 @@ BattleScript_TwoTurnMovesSecondTurn::
BattleScript_TwoTurnMovesSecondTurnRet:
setbyte sB_ANIM_TURN, 1
setbyte sB_ANIM_TARGETS_HIT, 0
clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING
clearsemiinvulnerablebit @ only for moves with EFFECT_SEMI_INVULNERABLE/EFFECT_SKY_DROP
return
@ -3870,7 +3836,7 @@ BattleScript_EffectHoldHands::
attackcanceler
attackstring
ppreduce
jumpifsideaffecting BS_TARGET, SIDE_STATUS_CRAFTY_SHIELD, BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_ButItFailed
attackanimation
waitanimation
@ -5106,7 +5072,7 @@ BattleScript_EffectBrickBreak::
attackstring
ppreduce
typecalc
removelightscreenreflect
removescreens
critcalc
damagecalc
adjustdamage
@ -5448,10 +5414,6 @@ BattleScript_FaintTarget::
tryactivatefellstinger BS_ATTACKER
tryactivatesoulheart
tryactivatereceiver BS_TARGET
tryactivatemoxie BS_ATTACKER @ and chilling neigh, as one ice rider
tryactivatebeastboost BS_ATTACKER
tryactivategrimneigh BS_ATTACKER @ and as one shadow rider
tryactivatebattlebond BS_ATTACKER
trytrainerslidefirstdownmsg BS_TARGET
return
@ -5762,7 +5724,7 @@ BattleScript_ActionSwitch::
BattleScript_DoSwitchOut::
switchoutabilities BS_ATTACKER
updatedynamax
undodynamax BS_ATTACKER
waitstate
returnatktoball
waitstate
@ -6043,6 +6005,8 @@ BattleScript_RoarSuccessSwitch::
BattleScript_RoarSuccessSwitch_Ret:
swapattackerwithtarget @ continuation of RedCardActivates
restoretarget
restoreattacker
restoresavedmove
setbyte sSWITCH_CASE, B_SWITCH_NORMAL
return
@ -7107,7 +7071,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
@ -7589,35 +7553,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
@ -7719,13 +7685,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
@ -8019,7 +7987,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
@ -8045,16 +8013,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
@ -8472,10 +8442,9 @@ BattleScript_RaiseStatOnFaintingTarget::
statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_RaiseStatOnFaintingTarget_End
copybyte gBattlerAbility, gBattlerAttacker
call BattleScript_AbilityPopUp
setgraphicalstatchangevalues
playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
waitanimation
printstring STRINGID_LASTABILITYRAISEDSTAT
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_RaiseStatOnFaintingTarget_End:
return
@ -8642,6 +8611,29 @@ BattleScript_BattleBondActivatesOnMoveEndAttacker::
printstring STRINGID_ATTACKERBECAMEASHSPECIES
return
BattleScript_EffectBattleBondStatIncrease::
call BattleScript_AbilityPopUp
playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
setstatchanger STAT_ATK, 1, FALSE
statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectBattleBondStatIncreaseTrySpAtk
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectBattleBondStatIncreaseTrySpAtk
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_EffectBattleBondStatIncreaseTrySpAtk:
setstatchanger STAT_SPATK, 1, FALSE
statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectBattleBondStatIncreaseTrySpeed
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectBattleBondStatIncreaseTrySpeed
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_EffectBattleBondStatIncreaseTrySpeed:
setstatchanger STAT_SPEED, 1, FALSE
statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectBattleBondStatIncreaseRet
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectBattleBondStatIncreaseRet
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_EffectBattleBondStatIncreaseRet:
return
BattleScript_DancerActivates::
call BattleScript_AbilityPopUp
waitmessage B_WAIT_TIME_SHORT
@ -9517,6 +9509,8 @@ BattleScript_RedCardActivationNoSwitch::
waitmessage B_WAIT_TIME_LONG
removeitem BS_SCRIPTING
restoretarget
restoreattacker
restoresavedmove
return
BattleScript_RedCardActivates::
@ -9535,22 +9529,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
@ -9558,6 +9547,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
@ -9657,11 +9647,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
@ -10001,6 +9994,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
@ -10008,6 +10009,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::
@ -10017,6 +10027,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

View File

@ -80,6 +80,7 @@ gFieldEffectScriptPointers::
.4byte gFieldEffectScript_TracksBug @ FLDEFF_TRACKS_BUG
.4byte gFieldEffectScript_TracksSpot @ FLDEFF_TRACKS_SPOT
.4byte gFieldEffectScript_CaveDust @ FLDEFF_CAVE_DUST
.4byte gFieldEffectScript_Defog @ FLDEFF_DEFOG
gFieldEffectScript_ExclamationMarkIcon1::
field_eff_callnative FldEff_ExclamationMarkIcon
@ -379,3 +380,7 @@ gFieldEffectScript_TracksSlither::
gFieldEffectScript_CaveDust::
field_eff_loadfadedpal_callnative gSpritePalette_CaveDust FldEff_CaveDust
field_eff_end
gFieldEffectScript_Defog::
field_eff_callnative FldEff_Defog
field_eff_end

View File

@ -418,3 +418,20 @@ EventScript_FailSweetScent::
Text_FailSweetScent:
.string "Looks like there's nothing here…$"
EventScript_UseDefog::
lockall
bufferpartymonnick STR_VAR_1, VAR_RESULT
buffermovename STR_VAR_2, MOVE_DEFOG
msgbox Text_MonUsedFieldMove, MSGBOX_DEFAULT
closemessage
isfollowerfieldmoveuser VAR_0x8004
setfieldeffectargument 3, VAR_0x8004 @ skip pose if so
setflag FLAG_SAFE_FOLLOWER_MOVEMENT
call_if_eq VAR_0x8004, TRUE, EventScript_FollowerFieldMove
waitmovement 0
setfieldeffectargument 0, VAR_RESULT
dofieldeffect FLDEFF_DEFOG
waitstate
releaseall
end

1
docs/CONTRIBUTING.md Normal file
View File

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

1
docs/CREDITS.md Normal file
View File

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

399
docs/STYLEGUIDE.md Normal file
View File

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

View File

@ -5,6 +5,8 @@
- [Setting up WSL1 (Legacy Portion)](./legacy_WSL1_INSTALL.md)
- [Run documentation site locally](local_mdbook/index.md)
- [Ubuntu WSL1/WSL2](local_mdbook/ubuntu_WSL.md)
- [Contributing](./CONTRIBUTING.md)
- [Credits](./CREDITS.md)
- [Tutorials]()
- [What are AI Flags?](tutorials/ai_flags.md)
- [How to add new AI Flags](tutorials/ai_logic.md)
@ -22,7 +24,11 @@
- [How to add new Trainer Slides](tutorials/how_to_new_trainer_slide.md)
- [Day/Night System FAQ](tutorials/dns.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)
- [Version 1.10.2](changelogs/1.10.x/1.10.2.md)
- [Version 1.10.1](changelogs/1.10.x/1.10.1.md)
- [Version 1.10.0](changelogs/1.10.x/1.10.0.md)

View File

@ -0,0 +1,120 @@
```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 test
`.
```
## 🧬 General 🧬
### Fixed
* Fix Using a Safari Ball crashes the game #6206 by @ExMingYan in [#6220](https://github.com/rh-hideout/pokeemerald-expansion/pull/6220)
* Try a new solution to Fix Safari #6206 by @ExMingYan in [#6228](https://github.com/rh-hideout/pokeemerald-expansion/pull/6228)
* Remove obsolete check for steven when retrieving partner name by @u8-Salem and @hedara90 in [#6283](https://github.com/rh-hideout/pokeemerald-expansion/pull/6283)
* Fix spit up getting skipped by @cawtds in [#6295](https://github.com/rh-hideout/pokeemerald-expansion/pull/6295)
## 🗺️ Overworld 🗺️
### Changed
* Merrp merge (12th of February) by @hedara90 in [#6244](https://github.com/rh-hideout/pokeemerald-expansion/pull/6244)
### Fixed
* Follower Object Event refactor by @hedara90 and @AsparagusEduardo in [#6129](https://github.com/rh-hideout/pokeemerald-expansion/pull/6129)
- Adds `OBJ_EVENT_GFX_SPECIES_FEMALE` and `OBJ_EVENT_GFX_SPECIES_SHINY_FEMALE`
* Fixed Kecleon Shiny palette by @hedara90 in [#6298](https://github.com/rh-hideout/pokeemerald-expansion/pull/6298)
* Shifted the follower graphicsIds by @hedara90 in [#6329](https://github.com/rh-hideout/pokeemerald-expansion/pull/6329)
## 🐉 Pokémon 🐉
### Changed
* Add Poltchageist family form data by @Bassoonian and @wiz1989 in [#6163](https://github.com/rh-hideout/pokeemerald-expansion/pull/6163)
### Fixed
* Fixed non-regional forms breeding incorrectly by @AsparagusEduardo and @cawtds in [#4985](https://github.com/rh-hideout/pokeemerald-expansion/pull/4985)
* Fixed compilation error when turning P_GENDER_DIFFERENCES off by @AsparagusEduardo in [#6223](https://github.com/rh-hideout/pokeemerald-expansion/pull/6223)
## ⚔️ Battle General ⚔️
### Fixed
* Fixes battler mutation during the intim script by @AlexOn1ine in [#6151](https://github.com/rh-hideout/pokeemerald-expansion/pull/6151)
* Fixes Dynamic Moves types in SumScreen while in Battle by @AlexOn1ine in [#6145](https://github.com/rh-hideout/pokeemerald-expansion/pull/6145)
* Fixes Dragon Tail missing timing against Rocky Helmet / Iron Barbs by @AlexOn1ine in [#6154](https://github.com/rh-hideout/pokeemerald-expansion/pull/6154)
* Prevent sameMoveTurns from incrementing when unable to use move by @moostoet in [#6167](https://github.com/rh-hideout/pokeemerald-expansion/pull/6167)
* Fixes Suction Cups ability popup and Red Card + Guard Dog interaction by @PhallenTree in [#6171](https://github.com/rh-hideout/pokeemerald-expansion/pull/6171)
* Fixed Unnerve message and wrote tests by @hedara90 in [#6192](https://github.com/rh-hideout/pokeemerald-expansion/pull/6192)
* Fixes Spectral Thief stealing boost at the wrong time by @AlexOn1ine in [#6197](https://github.com/rh-hideout/pokeemerald-expansion/pull/6197)
* Fixes BATTLER_TURN_DAMAGED battler id by @AlexOn1ine in [#6236](https://github.com/rh-hideout/pokeemerald-expansion/pull/6236)
* Fixed multi battle forced switches by @hedara90 in [#6243](https://github.com/rh-hideout/pokeemerald-expansion/pull/6243)
* Fixes ability Embody Aspect triggering multiple times by @AlexOn1ine in [#6259](https://github.com/rh-hideout/pokeemerald-expansion/pull/6259)
* Fixes Called moves ignoring redirection by @PhallenTree in [#6267](https://github.com/rh-hideout/pokeemerald-expansion/pull/6267)
* Fixes Protean not restoring types after ai damage calcs by @AlexOn1ine in [#6280](https://github.com/rh-hideout/pokeemerald-expansion/pull/6280)
* Restoretarget in Rototiller script + Tests by @AlexOn1ine in [#6296](https://github.com/rh-hideout/pokeemerald-expansion/pull/6296)
* Fixes Brick Break/Psychic Fangs/Raging Bull breaking screens if target is immune by @PhallenTree in [#6308](https://github.com/rh-hideout/pokeemerald-expansion/pull/6308)
* Fixes intimidate missing timing during a mega evo / switch by @AlexOn1ine in [#6322](https://github.com/rh-hideout/pokeemerald-expansion/pull/6322)
* Fixes Coaching on semi-invulnerable ally, Air Balloon being stolen, Immunity abilities being ignored by Mold Breaker by @PhallenTree in [#6327](https://github.com/rh-hideout/pokeemerald-expansion/pull/6327)
* Fixes effect paralyze not being absorbed by absorbing abilities by @AlexOn1ine in [#6338](https://github.com/rh-hideout/pokeemerald-expansion/pull/6338)
* Added MOVE_TARGET_OPPONENT and added it to Me First, by @hedara90 in [#6336](https://github.com/rh-hideout/pokeemerald-expansion/pull/6336)
* Fixes recoil moves causing recoil when absorbed by @AlexOn1ine in [#6341](https://github.com/rh-hideout/pokeemerald-expansion/pull/6341)
* Fixed protect not resetting the counter in earlier gens by @hedara90 in [#6342](https://github.com/rh-hideout/pokeemerald-expansion/pull/6342)
## 🤹 Moves 🤹
### Added
* Added missing in-battle "Move Info" button prompt by @AsparagusEduardo and @TeamAquasHideout from who I got the source from and @BelialClover from who Archie got the source from. in [#6155](https://github.com/rh-hideout/pokeemerald-expansion/pull/6155)
### Changed
* Fixes non-Ghost type Curse animation by @PhallenTree in [#6299](https://github.com/rh-hideout/pokeemerald-expansion/pull/6299)
### Fixed
* Fixed Future Sight not being affected by Electrify by @AsparagusEduardo in [#6213](https://github.com/rh-hideout/pokeemerald-expansion/pull/6213)
* Fixes Expanding Force and Spectral Thief move animations by @PhallenTree in [#6185](https://github.com/rh-hideout/pokeemerald-expansion/pull/6185)
## 🧶 Items 🧶
### Fixed
* Fixed curing status2 with items in double battles by @hedara90 and @wiz1989 in [#6335](https://github.com/rh-hideout/pokeemerald-expansion/pull/6335)
## 🤖 Battle AI 🤖
### Fixed
* Fix AI wrongly thinking it strikes first with priority even if player is using priority themselves by @moostoet in [#6274](https://github.com/rh-hideout/pokeemerald-expansion/pull/6274)
* Big Root AI Fix by @Pawkkie in [#6309](https://github.com/rh-hideout/pokeemerald-expansion/pull/6309)
* Fix AI hold effect considerations by @Pawkkie in [#6310](https://github.com/rh-hideout/pokeemerald-expansion/pull/6310)
* fix for multi 2vs1 opponent sends out too many mons bug by @Bivurnum in [#6324](https://github.com/rh-hideout/pokeemerald-expansion/pull/6324)
## 🧹 Other Cleanup 🧹
* Cleanup some global battler ID usage by @ghoulslash in [#6181](https://github.com/rh-hideout/pokeemerald-expansion/pull/6181)
* Fix typo in Nuzzle's description by @Bassoonian in [#6209](https://github.com/rh-hideout/pokeemerald-expansion/pull/6209)
* Remove whitespace from trainers data file by @AsparagusEduardo in [#6234](https://github.com/rh-hideout/pokeemerald-expansion/pull/6234)
* Changed bit order for follower graphicsId creation by @hedara90 in [#6249](https://github.com/rh-hideout/pokeemerald-expansion/pull/6249)
* Use more accurate count in MovesInfo by @AlexOn1ine in [#6260](https://github.com/rh-hideout/pokeemerald-expansion/pull/6260)
* Fix Extra `task->tState++` and `break` in `Task_DrawFieldMessageBox` by @Deokishisu in [#6261](https://github.com/rh-hideout/pokeemerald-expansion/pull/6261)
* Resized gimmick indicators to reduce VRAM usage by @hedara90 in [#6319](https://github.com/rh-hideout/pokeemerald-expansion/pull/6319)
## 🧪 Test Runner 🧪
### Changed
* Tests for Big Pecks by @hedara90 in [#6158](https://github.com/rh-hideout/pokeemerald-expansion/pull/6158)
* Water Compaction tests by @hedara90 in [#6159](https://github.com/rh-hideout/pokeemerald-expansion/pull/6159)
* Wrote tests for Electrify by @hedara90 in [#6179](https://github.com/rh-hideout/pokeemerald-expansion/pull/6179)
* Sheer Force Test Fixes by @ghoulslash in [#6198](https://github.com/rh-hideout/pokeemerald-expansion/pull/6198)
* Minor Terrain Seed Test Improvement by @ghoulslash in [#6207](https://github.com/rh-hideout/pokeemerald-expansion/pull/6207)
* Added test support for 5 battle configs by @AsparagusEduardo in [#5914](https://github.com/rh-hideout/pokeemerald-expansion/pull/5914)
* Added missing Dream Eater and Reflect Type tests by @AsparagusEduardo in [#6245](https://github.com/rh-hideout/pokeemerald-expansion/pull/6245)
### Fixed
* Fixes Brick Break/Psychic Fangs/Raging Bull breaking screens if target is immune by @PhallenTree in [#6308](https://github.com/rh-hideout/pokeemerald-expansion/pull/6308)
## 📚 Documentation 📚
* Update how_to_testing_system.md by @hedara90 in [#6281](https://github.com/rh-hideout/pokeemerald-expansion/pull/6281)
* Update SCOPE.md with Intergenerational Feature Compatibility by @Pawkkie in [#6325](https://github.com/rh-hideout/pokeemerald-expansion/pull/6325)
## 📦 Branch Synchronisation 📦
### pret
* 11th of February in [#6231](https://github.com/rh-hideout/pokeemerald-expansion/pull/6231)
* Replace easy_chat alphabetialOrder magic numbers with EC_INDEX values by @rayrobdod in [pret#2096](https://github.com/pret/pokeemerald/pull/2096)
* Fixed switchout bug in multibattle where order of mons gets messed up by @shachar700 in [pret#2099](https://github.com/pret/pokeemerald/pull/2099)
## New Contributors
* @ExMingYan made their first contribution in [#6220](https://github.com/rh-hideout/pokeemerald-expansion/pull/6220)
* @Deokishisu made their first contribution in [#6261](https://github.com/rh-hideout/pokeemerald-expansion/pull/6261)
* @Bivurnum made their first contribution in [#6324](https://github.com/rh-hideout/pokeemerald-expansion/pull/6324)
**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.10.2...test
<!--Last PR: 6342-->
<!--Used to keep track of the last PR merged in case new ones come in before the changelog is done.-->

View File

@ -0,0 +1,385 @@
```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 test
`.
```
## 🌋 *REFACTORS* 🌋
📜 = Uses a migration script.
* Pursuit refactor by @PhallenTree in [#5707](https://github.com/rh-hideout/pokeemerald-expansion/pull/5707)
* Atk Canceller refactor / reorder / clean up by @AlexOn1ine in [#5885](https://github.com/rh-hideout/pokeemerald-expansion/pull/5885)
* Battle Weather Refactor by @AlexOn1ine in [#5833](https://github.com/rh-hideout/pokeemerald-expansion/pull/5833)
* Replace WEATHER_HAS_EFFECT with HasWeatherEffect by @AlexOn1ine in [#6069](https://github.com/rh-hideout/pokeemerald-expansion/pull/6069)
* Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide by @pkmnsnfrn and @AlexOn1ine, @hedara90, @AsparagusEduardo, @mrgriffin in [#6018](https://github.com/rh-hideout/pokeemerald-expansion/pull/6018)
* If users created new entries in sTrainerSlides, they will need to be ported to the new system.
* Introduces BattleTurnCounter to simplify timer checks by @AlexOn1ine in [#6080](https://github.com/rh-hideout/pokeemerald-expansion/pull/6080)
* Convert max effects to normal move effects by @AlexOn1ine in [#6143](https://github.com/rh-hideout/pokeemerald-expansion/pull/6143)
* Redefine IsBattlerAlive in battle.h as a static inline by @AlexOn1ine in [#6211](https://github.com/rh-hideout/pokeemerald-expansion/pull/6211)
* Consolidated Frontier teams into battle_frontier_trainers.h by @fdeblasio in [#5892](https://github.com/rh-hideout/pokeemerald-expansion/pull/5892)
## 🧬 General 🧬
### Added
* Add Script Cmd for Forcing Save Game by @ghoulslash in [#6090](https://github.com/rh-hideout/pokeemerald-expansion/pull/6090)
* Trainer Party Pools by @hedara90 in [#5731](https://github.com/rh-hideout/pokeemerald-expansion/pull/5731)
- Documentation on how to use this can be found under `docs/tutorials/how_to_trainer_party_pool.md`
* Add Code Entry functionality by @Pawkkie and @PCG06 for the Mystery Gift iteration in [#5951](https://github.com/rh-hideout/pokeemerald-expansion/pull/5951)
### Changed
* Added "Game Clear" flag toggle to debug menu by @AsparagusEduardo in [#5929](https://github.com/rh-hideout/pokeemerald-expansion/pull/5929)
* Initialize m4a and IRQ handler in a loaded section by @SBird1337 in [#5912](https://github.com/rh-hideout/pokeemerald-expansion/pull/5912)
* Debug menu and `createmon` additions/cleanup by @AsparagusEduardo in [#5994](https://github.com/rh-hideout/pokeemerald-expansion/pull/5994)
- Added Tera Type, Dynamax Level, and Gigantamax Factor to the "Give Pokémon (complex)" debug menu option.
- Added `dmaxLevel` option to `givemon` and `createmon`.
- Added `WEATHER_COUNT`.
- Cleaned up repeated code instances in debug menu.
- Fixed mislabel of `ggMaxFactor` in `givemon` and `createmon`. Now it's `gmaxFactor`.
* Introduces BattlerState struct for the Battle Engine by @AlexOn1ine and @mrgriffin provided the framework for this change in [#5954](https://github.com/rh-hideout/pokeemerald-expansion/pull/5954)
* Reorder Makefile rules so that pokeemerald-test.elf builds in build/test by @mrgriffin in [#6004](https://github.com/rh-hideout/pokeemerald-expansion/pull/6004)
* Use SET8 and SET32 consistently by @AZero13 in [#5544](https://github.com/rh-hideout/pokeemerald-expansion/pull/5544)
* Ewram and unused function cleanup sweep by @hedara90 in [#6019](https://github.com/rh-hideout/pokeemerald-expansion/pull/6019)
* Re-removed trainers.h trailing whitespace by @fdeblasio in [#6048](https://github.com/rh-hideout/pokeemerald-expansion/pull/6048)
* Add Steven Multi to debug menu by @Pawkkie in [#6064](https://github.com/rh-hideout/pokeemerald-expansion/pull/6064)
* Remove gDecompressionBuffer by @DizzyEggg in [#6029](https://github.com/rh-hideout/pokeemerald-expansion/pull/6029)
* Trainer Battle Parameter Consolidation by @u8-Salem in [#5982](https://github.com/rh-hideout/pokeemerald-expansion/pull/5982)
Breaking: raw uses of `trainerbattle` need to be adjusted to provide all possible parameter. Unused parameter musst be 0 or an alias. already parameterized macros like `trainerbattle_single` work out of the box.
* Consolidated contest opponent filters into gContestOpponents by @fdeblasio in [#6119](https://github.com/rh-hideout/pokeemerald-expansion/pull/6119)
* Don't use SeedRng some places where it isn't necessary by @tertu-m in [#6156](https://github.com/rh-hideout/pokeemerald-expansion/pull/6156)
* Removed Trainer Slides footgun by @AsparagusEduardo in [#6205](https://github.com/rh-hideout/pokeemerald-expansion/pull/6205)
* Consolidate duplicate dialogue of nature girl in Battle Frontier by @fdeblasio in [#6195](https://github.com/rh-hideout/pokeemerald-expansion/pull/6195)
* Prevented fanfares from playing in headless mode by @pkmnsnfrn and @hedara90, @AsparagusEduardo in [#6219](https://github.com/rh-hideout/pokeemerald-expansion/pull/6219)
### Fixed
* Don't write to NULL in TryFindHiddenPokemon by @DizzyEggg in [#5983](https://github.com/rh-hideout/pokeemerald-expansion/pull/5983)
* Allow Party Menu with 0 Pokemon by @DizzyEggg in [#5997](https://github.com/rh-hideout/pokeemerald-expansion/pull/5997)
* Revert map related enum conversion by @hedara90 in [#6078](https://github.com/rh-hideout/pokeemerald-expansion/pull/6078)
* Revert "Revert map related enum conversion" by @hedara90 in [#6079](https://github.com/rh-hideout/pokeemerald-expansion/pull/6079)
* Revert "Converts a bunch of defines to enums" by @Bassoonian in [#6082](https://github.com/rh-hideout/pokeemerald-expansion/pull/6082)
* Fix upcoming not working on no cash by @DizzyEggg in [#6121](https://github.com/rh-hideout/pokeemerald-expansion/pull/6121)
* Add the header required for TPP tags to work by @hedara90 in [#6162](https://github.com/rh-hideout/pokeemerald-expansion/pull/6162)
* Fixed regression from master/upcoming merge by @AsparagusEduardo and @hedara90 , for doing the original merge when I couldn't in [#6199](https://github.com/rh-hideout/pokeemerald-expansion/pull/6199)
* Fix Using a Safari Ball crashes the game #6206 by @ExMingYan in [#6220](https://github.com/rh-hideout/pokeemerald-expansion/pull/6220)
* Fixed typo in requests_effects by @hedara90 and @purrfectdoodle in [#6215](https://github.com/rh-hideout/pokeemerald-expansion/pull/6215)
* Try a new solution to Fix Safari #6206 by @ExMingYan in [#6228](https://github.com/rh-hideout/pokeemerald-expansion/pull/6228)
* Remove obsolete check for steven when retrieving partner name by @u8-Salem and @hedara90 in [#6283](https://github.com/rh-hideout/pokeemerald-expansion/pull/6283)
* Fix spit up getting skipped by @cawtds in [#6295](https://github.com/rh-hideout/pokeemerald-expansion/pull/6295)
## 🗺️ Overworld 🗺️
### Added
* Adds Dexnav by @ghoulslash in [#4818](https://github.com/rh-hideout/pokeemerald-expansion/pull/4818)
* Fly from Pokenav by @khbsd in [#5679](https://github.com/rh-hideout/pokeemerald-expansion/pull/5679)
* Expanded Pokémon Follower transformation functionality by @AsparagusEduardo in [#5048](https://github.com/rh-hideout/pokeemerald-expansion/pull/5048)
### Changed
* Arbitrary trainer scripts + on frame/trigger softlock prevention by @mrgriffin in [#5033](https://github.com/rh-hideout/pokeemerald-expansion/pull/5033)
* Removed OW_AUTO_SIGNPOST by @pkmnsnfrn in [#5974](https://github.com/rh-hideout/pokeemerald-expansion/pull/5974)
* Fix leftover test change from #5033 by @mrgriffin in [#5987](https://github.com/rh-hideout/pokeemerald-expansion/pull/5987)
* Match current gen behavior for battle environment after fishing by @kittenchilly in [#6099](https://github.com/rh-hideout/pokeemerald-expansion/pull/6099)
* Add Mega Evolution, Primal Reversion, and Ultra Necrozma overworld sprites by @khbsd in [#5874](https://github.com/rh-hideout/pokeemerald-expansion/pull/5874)
* Replaced hardcoded numbers in DexNav with variables by @fdeblasio in [#6241](https://github.com/rh-hideout/pokeemerald-expansion/pull/6241)
* Merrp merge (12th of February) by @hedara90 in [#6244](https://github.com/rh-hideout/pokeemerald-expansion/pull/6244)
* Adds a follower flag define to disable followers on the fly by @AlexOn1ine in [#6174](https://github.com/rh-hideout/pokeemerald-expansion/pull/6174)
### Fixed
* Fix Trainer Hill OOB array access by @SBird1337 in [#5930](https://github.com/rh-hideout/pokeemerald-expansion/pull/5930)
* Revert #5033 change to MapHeaderRunScriptType by @mrgriffin in [#5975](https://github.com/rh-hideout/pokeemerald-expansion/pull/5975)
* Restore lock/lockall/locktrainer/release/releaseall in triggers by @mrgriffin in [#5976](https://github.com/rh-hideout/pokeemerald-expansion/pull/5976)
* Follower Object Event refactor by @hedara90 and @AsparagusEduardo in [#6129](https://github.com/rh-hideout/pokeemerald-expansion/pull/6129)
- Fixes `OBJ_EVENT_GFX_SPECIES_SHINY`
- Adds `OBJ_EVENT_GFX_SPECIES_FEMALE` and `OBJ_EVENT_GFX_SPECIES_SHINY_FEMALE`
* Fixes Static Assert from pr #6174 by @AlexOn1ine in [#6258](https://github.com/rh-hideout/pokeemerald-expansion/pull/6258)
* Fixed Kecleon Shiny palette by @hedara90 in [#6298](https://github.com/rh-hideout/pokeemerald-expansion/pull/6298)
## 🐉 Pokémon 🐉
### Added
* IV/EV Info on Summary Screen by @khbsd in [#6027](https://github.com/rh-hideout/pokeemerald-expansion/pull/6027)
* Add caught mon to full party by sending a different mon to the Box by @fakuzatsu in [#6058](https://github.com/rh-hideout/pokeemerald-expansion/pull/6058)
### Changed
* Remove form change function footguns by @AsparagusEduardo and @AlexOn1ine for letting me know of this potential issue. in [#5995](https://github.com/rh-hideout/pokeemerald-expansion/pull/5995)
- `GetBattleFormChangeTargetSpecies`, `GetFormChangeTargetSpecies` and `GetFormChangeTargetSpeciesBoxMon` now return the current species of the Pokémon instead of `SPECIES_NONE` as a precaution to avoid accidental deletions of Pokémon when using these functions.
* Remove redundant calls to GetMonData in pokemon.c by @AZero13 in [#5545](https://github.com/rh-hideout/pokeemerald-expansion/pull/5545)
* Rename Furfrou Species tags to match Pokemon Showdown exports by @moostoet in [#6041](https://github.com/rh-hideout/pokeemerald-expansion/pull/6041)
* Add Mega Evolution, Primal Reversion, and Ultra Necrozma overworld sprites by @khbsd in [#5874](https://github.com/rh-hideout/pokeemerald-expansion/pull/5874)
* Add Poltchageist family form data by @Bassoonian and @wiz1989 in [#6163](https://github.com/rh-hideout/pokeemerald-expansion/pull/6163)
### Fixed
* Evolution level 1 learn by @hedara90 in [#5791](https://github.com/rh-hideout/pokeemerald-expansion/pull/5791)
* Fixed non-regional forms breeding incorrectly by @AsparagusEduardo and @cawtds in [#4985](https://github.com/rh-hideout/pokeemerald-expansion/pull/4985)
* Fixed compilation error when turning P_GENDER_DIFFERENCES off by @AsparagusEduardo in [#6223](https://github.com/rh-hideout/pokeemerald-expansion/pull/6223)
* Reverted compound literal OW mon pic tables by @AsparagusEduardo in [#6216](https://github.com/rh-hideout/pokeemerald-expansion/pull/6216)
## ⚔️ Battle General ⚔️
### Added
* Add B_FLAG_SLEEP_CLAUSE by @Pawkkie, @Pawkkie and @iriv24 in [#5566](https://github.com/rh-hideout/pokeemerald-expansion/pull/5566)
- Based on Smogon's sleep clause [philosophy](https://www.smogon.com/xy/articles/clauses#:~:text=Sleep%20Clause,t%20be%20put%20to%20sleep.)
- Toggleable per-battle by setting / unsetting the flag assigned to B_FLAG_SLEEP_CLAUSE
* Variadic IS_BATTLER_OF_TYPE and GetBattlerTypes by @mrgriffin in [#5708](https://github.com/rh-hideout/pokeemerald-expansion/pull/5708)
* Simultaneous HP Reduction (CFRU Port) by @AsparagusEduardo and @AlexOn1ine for the port to expansion. @Skeli789 for the CFRU implementation. in [#5770](https://github.com/rh-hideout/pokeemerald-expansion/pull/5770)
* Destiny Bond fails on repeated use in Gen 7+ by @Pawkkie in [#5652](https://github.com/rh-hideout/pokeemerald-expansion/pull/5652)
* Adds Pledge Side Statuses as Starting Statuses by @AlexOn1ine in [#5899](https://github.com/rh-hideout/pokeemerald-expansion/pull/5899)
* Adds B_VAR_DIFFICULTY and related functions READ DESC by @pkmnsnfrn in [#5337](https://github.com/rh-hideout/pokeemerald-expansion/pull/5337)
* Config for move slot rearrangement in battle by @hedara90 and @ghoulslash for pointing out the exact point in the code where move slot rearrangement is handled. in [#6017](https://github.com/rh-hideout/pokeemerald-expansion/pull/6017)
- Move slot rearrangement is disabled by default in battle, set `B_MOVE_REARRANGEMENT_IN_BATTLE` to `GEN_3` to enable rearrangement again.
### Changed
* Sleep Clause global config by @Pawkkie in [#5762](https://github.com/rh-hideout/pokeemerald-expansion/pull/5762)
* Pursuit refactor by @PhallenTree in [#5707](https://github.com/rh-hideout/pokeemerald-expansion/pull/5707)
* Changes Various defines to an Enum by @AlexOn1ine in [#5839](https://github.com/rh-hideout/pokeemerald-expansion/pull/5839)
* move overwrittenAbilities field to DisableStruct by @ghoulslash in [#5946](https://github.com/rh-hideout/pokeemerald-expansion/pull/5946)
* Battle Weather Refactor by @AlexOn1ine in [#5833](https://github.com/rh-hideout/pokeemerald-expansion/pull/5833)
* Easy customizable Hidden Move types by @AsparagusEduardo in [#5872](https://github.com/rh-hideout/pokeemerald-expansion/pull/5872)
- `gTypesInfo` now has a `isHiddenPowerType` field that inserts them into the Hidden Power type calculation.
- ***Warning:*** Changing this from the vanilla settings will change any existing Hidden Power's type, and external calculators will not work either.
* Introduces BattlerState struct for the Battle Engine by @AlexOn1ine and @mrgriffin provided the framework for this change in [#5954](https://github.com/rh-hideout/pokeemerald-expansion/pull/5954)
* Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide by @pkmnsnfrn and @AlexOn1ine, @hedara90, @AsparagusEduardo, @mrgriffin in [#6018](https://github.com/rh-hideout/pokeemerald-expansion/pull/6018)
* If users created new entries in sTrainerSlides, they will need to be ported to the new system.
* Introduces BattleTurnCounter to simplfy timer checks by @AlexOn1ine in [#6080](https://github.com/rh-hideout/pokeemerald-expansion/pull/6080)
* Replace BattleStruct members quickClawRandom/quickDrawRandom with locals by @AlexOn1ine in [#6136](https://github.com/rh-hideout/pokeemerald-expansion/pull/6136)
* Added Difficulty Fallback for Trainer Slides by @pkmnsnfrn in [#6088](https://github.com/rh-hideout/pokeemerald-expansion/pull/6088)
* CanAbilityX Function Cleanup by @ghoulslash in [#6183](https://github.com/rh-hideout/pokeemerald-expansion/pull/6183)
* Unify setreflect/setlightscreen and MOVE_EFFECT_REFLECT/LIGHT_SCREEN by @ghoulslash in [#6196](https://github.com/rh-hideout/pokeemerald-expansion/pull/6196)
### Fixed
* Fix Sleep Clause AI handling of partner sleeping moves by @Pawkkie in [#5761](https://github.com/rh-hideout/pokeemerald-expansion/pull/5761)
* Fix fixed point damage calculation off-by-1s by @SBird1337 in [#5775](https://github.com/rh-hideout/pokeemerald-expansion/pull/5775)
Fixes a bunch of rounding errors that cause wrong outputs in the damage calculation.
* Fixes simu hp reduction when no partner was on field by @AlexOn1ine in [#5799](https://github.com/rh-hideout/pokeemerald-expansion/pull/5799)
* Fixes Regenerator healing past maxHP by @PhallenTree in [#5861](https://github.com/rh-hideout/pokeemerald-expansion/pull/5861)
* Fixes Pursuit + Emergency Exit causing double switches and Pursuit user fainting causing target to not finish switch by @PhallenTree in [#5849](https://github.com/rh-hideout/pokeemerald-expansion/pull/5849)
* Fixes regression caused by argument refactor by @AlexOn1ine in [#5870](https://github.com/rh-hideout/pokeemerald-expansion/pull/5870)
* Fixes Sparkling Aria Shield Dust / Covert Cloak interaction by @AlexOn1ine in [#5911](https://github.com/rh-hideout/pokeemerald-expansion/pull/5911)
* Battle Weather Refactor oversight by @AlexOn1ine in [#5960](https://github.com/rh-hideout/pokeemerald-expansion/pull/5960)
* Shell Bell Clean up / Simplification and Tests by @AlexOn1ine in [#5924](https://github.com/rh-hideout/pokeemerald-expansion/pull/5924)
* Dynamic move type was ignored in doubles for spread moves by @AlexOn1ine in [#5984](https://github.com/rh-hideout/pokeemerald-expansion/pull/5984)
* Fixes self effect moves not procing for spread moves when battler 3 w… by @AlexOn1ine in [#6020](https://github.com/rh-hideout/pokeemerald-expansion/pull/6020)
* Fix UB when accessing move result flags by @cawtds in [#6030](https://github.com/rh-hideout/pokeemerald-expansion/pull/6030)
* Fix Powder (status) config and some terrain timers not using gBattleTurnCounter by @PhallenTree in [#6109](https://github.com/rh-hideout/pokeemerald-expansion/pull/6109)
* Fix Powder config not checking for Powder status by @PhallenTree in [#6113](https://github.com/rh-hideout/pokeemerald-expansion/pull/6113)
* Fixes battler mutation during the intim script by @AlexOn1ine in [#6151](https://github.com/rh-hideout/pokeemerald-expansion/pull/6151)
* Fixes Dynamic Moves types in SumScreen while in Battle by @AlexOn1ine in [#6145](https://github.com/rh-hideout/pokeemerald-expansion/pull/6145)
* Fixes Dragon Tail missing timing against Rocky Helmet / Iron Barbs by @AlexOn1ine in [#6154](https://github.com/rh-hideout/pokeemerald-expansion/pull/6154)
* Prevent sameMoveTurns from incrementing when unable to use move by @moostoet in [#6167](https://github.com/rh-hideout/pokeemerald-expansion/pull/6167)
* Fixes Suction Cups ability popup and Red Card + Guard Dog interaction by @PhallenTree in [#6171](https://github.com/rh-hideout/pokeemerald-expansion/pull/6171)
* Fixed Unnerve message and wrote tests by @hedara90 in [#6192](https://github.com/rh-hideout/pokeemerald-expansion/pull/6192)
* Fixes Spectral Thief stealing boost at the wrong time by @AlexOn1ine in [#6197](https://github.com/rh-hideout/pokeemerald-expansion/pull/6197)
* Fixes BATTLER_TURN_DAMAGED battler id by @AlexOn1ine in [#6236](https://github.com/rh-hideout/pokeemerald-expansion/pull/6236)
* Fixed multi battle forced switches by @hedara90 in [#6243](https://github.com/rh-hideout/pokeemerald-expansion/pull/6243)
* Fixes ability Embody Aspect triggering multiple times by @AlexOn1ine in [#6259](https://github.com/rh-hideout/pokeemerald-expansion/pull/6259)
* Fixes Called moves ignoring redirection by @PhallenTree in [#6267](https://github.com/rh-hideout/pokeemerald-expansion/pull/6267)
* Fixes Protean not restoring types after ai damage calcs by @AlexOn1ine in [#6280](https://github.com/rh-hideout/pokeemerald-expansion/pull/6280)
* Restoretarget in Rototiller script + Tests by @AlexOn1ine in [#6296](https://github.com/rh-hideout/pokeemerald-expansion/pull/6296)
* Fixes inconsistency for Kings rock. by @AlexOn1ine in [#6302](https://github.com/rh-hideout/pokeemerald-expansion/pull/6302)
* Fixes Shell Bell for Spread Moves by @AlexOn1ine in [#6303](https://github.com/rh-hideout/pokeemerald-expansion/pull/6303)
* Fixes Brick Break/Psychic Fangs/Raging Bull breaking screens if target is immune by @PhallenTree in [#6308](https://github.com/rh-hideout/pokeemerald-expansion/pull/6308)
* Fixes doesnt effect message for Thunder Wave by @AlexOn1ine in [#6304](https://github.com/rh-hideout/pokeemerald-expansion/pull/6304)
* Fixes Tera Shell activating on moves that have no effect on target by @AlexOn1ine in [#6271](https://github.com/rh-hideout/pokeemerald-expansion/pull/6271)
* Fixes fainted battler being able to select an action by @PhallenTree in [#6339](https://github.com/rh-hideout/pokeemerald-expansion/pull/6339)
## 🤹 Moves 🤹
### Added
* Added missing in-battle "Move Info" button prompt by @AsparagusEduardo and @TeamAquasHideout from who I got the source from and @BelialClover from who Archie got the source from. in [#6155](https://github.com/rh-hideout/pokeemerald-expansion/pull/6155)
### Changed
* New Volt Switch Animation by @AlexOn1ine in [#5729](https://github.com/rh-hideout/pokeemerald-expansion/pull/5729)
* Refactors argument into a union by @AlexOn1ine in [#5853](https://github.com/rh-hideout/pokeemerald-expansion/pull/5853)
* Encapsulate move data by @AsparagusEduardo in [#5852](https://github.com/rh-hideout/pokeemerald-expansion/pull/5852)
* Removes Resource Flags and moves fields to DisableStruct by @AlexOn1ine in [#5945](https://github.com/rh-hideout/pokeemerald-expansion/pull/5945)
* Tera starstorm by @hedara90 in [#6073](https://github.com/rh-hideout/pokeemerald-expansion/pull/6073)
* Tachyon Cutter and Salt Cure animations by @hedara90 in [#6182](https://github.com/rh-hideout/pokeemerald-expansion/pull/6182)
* Heal Bell/Aromatherapy/Sparkly Swirl improvements and fixes by @AsparagusEduardo in [#6210](https://github.com/rh-hideout/pokeemerald-expansion/pull/6210)
- Removed `EFFECT_SPARKLY_SWIRL` in favor of `MOVE_EFFECT_AROMATHEROPY`.
* Moved sValidApprenticeMove into gMovesInfo by @fdeblasio in [#6254](https://github.com/rh-hideout/pokeemerald-expansion/pull/6254)
* Fixes non-Ghost type Curse animation by @PhallenTree in [#6299](https://github.com/rh-hideout/pokeemerald-expansion/pull/6299)
* Remove pursuitSwitchByMove and additional if statement by @PhallenTree in [#6326](https://github.com/rh-hideout/pokeemerald-expansion/pull/6326)
### Fixed
* Fixes moves based on Dragon Darts with strikeCount > 2 always hitting the same battler from the second hit onwards by @PhallenTree in [#5830](https://github.com/rh-hideout/pokeemerald-expansion/pull/5830)
* Last fix for Sparkling Aria / Covert Cloak / Shield Dust interaction by @AlexOn1ine in [#5956](https://github.com/rh-hideout/pokeemerald-expansion/pull/5956)
* Added WEATHER_DOWNPOUR to Weather Ball's dynamic type by @fdeblasio in [#6100](https://github.com/rh-hideout/pokeemerald-expansion/pull/6100)
* Fixed Future Sight not being affected by Electrify by @AsparagusEduardo in [#6213](https://github.com/rh-hideout/pokeemerald-expansion/pull/6213)
* Fixes Expanding Force and Spectral Thief move animations by @PhallenTree in [#6185](https://github.com/rh-hideout/pokeemerald-expansion/pull/6185)
* Made some move animations fit in VRAM by @hedara90 in [#6289](https://github.com/rh-hideout/pokeemerald-expansion/pull/6289)
## 🧶 Items 🧶
### Fixed
* Adds missing Friend Ball friendship bonus upon catching by @PhallenTree in [#5795](https://github.com/rh-hideout/pokeemerald-expansion/pull/5795)
## 🤖 Battle AI 🤖
### Added
* Smart Switching handles Soundproof by @Pawkkie and @Robdeezy for the idea! in [#5703](https://github.com/rh-hideout/pokeemerald-expansion/pull/5703)
* Add Revival Blessing AI by @Pawkkie in [#5704](https://github.com/rh-hideout/pokeemerald-expansion/pull/5704)
* Add AI_FLAG_WEIGH_ABILITY_PREDICTION by @Pawkkie and @khbsd and @ghoulslash for the idea, @AlexOn1ine and @mrgriffin for getting it working :) in [#5636](https://github.com/rh-hideout/pokeemerald-expansion/pull/5636)
* Add AI_FLAG_PREFER_HIGHEST_DAMAGE_MOVE by @Pawkkie in [#6025](https://github.com/rh-hideout/pokeemerald-expansion/pull/6025)
* Add AI_FLAG_PREDICT_SWITCH by @Pawkkie and @kithr1 in [#6028](https://github.com/rh-hideout/pokeemerald-expansion/pull/6028)
* Add AI_FLAG_PREDICT_INCOMING_MON: AI will score against predicted switchin if predicting switch by @Pawkkie in [#6037](https://github.com/rh-hideout/pokeemerald-expansion/pull/6037)
* Switch trapping AI will consider Trace by @Pawkkie in [#6059](https://github.com/rh-hideout/pokeemerald-expansion/pull/6059)
* AI adds score to Pursuit if it OHKOs by @Pawkkie in [#6166](https://github.com/rh-hideout/pokeemerald-expansion/pull/6166)
* Switch chance config support by @Pawkkie in [#6187](https://github.com/rh-hideout/pokeemerald-expansion/pull/6187)
- Config can be changed in config/ai.h
* Add function to adjust AI scoring for generalized item effects by @moostoet and @AlexOn1ine and @Pawkkie for the input on slight changes to make to the logic (config, no magic numbers...) in [#6247](https://github.com/rh-hideout/pokeemerald-expansion/pull/6247)
### Changed
* Fixed AI not handling type effectiveness beyond x8 by @AsparagusEduardo and @/sshadowzkmao in [#6127](https://github.com/rh-hideout/pokeemerald-expansion/pull/6127)
- Removed the use of `AI_EFFECTIVENESS_` in favor of storing the actual type effectiveness.
- Renamed `AI_GetTypeEffectiveness` to `AI_GetMoveEffectiveness`, removing the original one.
* Remove global sBattler_AI by @AlexOn1ine in [#6128](https://github.com/rh-hideout/pokeemerald-expansion/pull/6128)
* SwitchType enum to clean up GetMostSuitableMonToSwitchInto by @Pawkkie in [#6184](https://github.com/rh-hideout/pokeemerald-expansion/pull/6184)
### Fixed
* Eject item ace flag switch AI fixes by @Pawkkie and @wiz1989 for reporting the bug in [#6098](https://github.com/rh-hideout/pokeemerald-expansion/pull/6098)
* Fix Choice'd mons referring to incorrect move when switching by @Pawkkie and @/capncrunch in [#6204](https://github.com/rh-hideout/pokeemerald-expansion/pull/6204)
* Fix AI switching in absorbing mon incorrectly by @Pawkkie in [#6227](https://github.com/rh-hideout/pokeemerald-expansion/pull/6227)
* Improve Yawn and Status Switching by @Pawkkie and @/Chape for finding this behaviour in [#6202](https://github.com/rh-hideout/pokeemerald-expansion/pull/6202)
* Fix AI wrongly thinking it strikes first with priority even if player is using priority themselves by @moostoet in [#6274](https://github.com/rh-hideout/pokeemerald-expansion/pull/6274)
* Fix AI hazard move handling, minor AI tweaks by @Pawkkie and @ShadowzLmao2 in [#6311](https://github.com/rh-hideout/pokeemerald-expansion/pull/6311)
* Fix Overzealous Absorber Switching by @Pawkkie and @iriv24 and @ravepossum for squinting at a conditional for nearly 30mins with me to find a semicolon in [#6318](https://github.com/rh-hideout/pokeemerald-expansion/pull/6318)
* Fix Substitute / Shed Tail Switch AI by @Pawkkie in [#6334](https://github.com/rh-hideout/pokeemerald-expansion/pull/6334)
## 🧹 Other Cleanup 🧹
* Split "Do nothing" move effects by @AsparagusEduardo in [#5613](https://github.com/rh-hideout/pokeemerald-expansion/pull/5613)
* Sleep Clause global config by @Pawkkie in [#5762](https://github.com/rh-hideout/pokeemerald-expansion/pull/5762)
* Converts multi-choice options to COMPOUND_STRINGs by @fdeblasio in [#5686](https://github.com/rh-hideout/pokeemerald-expansion/pull/5686)
* Converted item-related variables to COMPOUND_STRINGs by @fdeblasio in [#5714](https://github.com/rh-hideout/pokeemerald-expansion/pull/5714)
* Adds SleepClauseBlock enum to CanBeSlept by @Pawkkie and @AlexOn1ine in [#5773](https://github.com/rh-hideout/pokeemerald-expansion/pull/5773)
* Swapped DESELECT and CHECK_TAG to be in right places by @fdeblasio in [#5794](https://github.com/rh-hideout/pokeemerald-expansion/pull/5794)
* Changes target TURN_DAMAGED and MAX_HP to inlines by @AlexOn1ine in [#5822](https://github.com/rh-hideout/pokeemerald-expansion/pull/5822)
* Changes Various defines to an Enum by @AlexOn1ine in [#5839](https://github.com/rh-hideout/pokeemerald-expansion/pull/5839)
* Remove fno-toplevel-reorder by @DizzyEggg in [#5809](https://github.com/rh-hideout/pokeemerald-expansion/pull/5809)
* Refactors argument into a union by @AlexOn1ine in [#5853](https://github.com/rh-hideout/pokeemerald-expansion/pull/5853)
* Clean up redundancy for mugshots by @AlexOn1ine in [#5906](https://github.com/rh-hideout/pokeemerald-expansion/pull/5906)
* Encapsulate move data by @AsparagusEduardo in [#5852](https://github.com/rh-hideout/pokeemerald-expansion/pull/5852)
* Initialize m4a and IRQ handler in a loaded section by @SBird1337 in [#5912](https://github.com/rh-hideout/pokeemerald-expansion/pull/5912)
* Remove EWRAM gHpDealt (not needed anymore) by @AlexOn1ine in [#5925](https://github.com/rh-hideout/pokeemerald-expansion/pull/5925)
* Fix DexNav static asserts by @Bassoonian in [#5944](https://github.com/rh-hideout/pokeemerald-expansion/pull/5944)
* Move overwrittenAbilities field to DisableStruct by @ghoulslash in [#5946](https://github.com/rh-hideout/pokeemerald-expansion/pull/5946)
* Converted 2 various to callnative by @AsparagusEduardo in [#5950](https://github.com/rh-hideout/pokeemerald-expansion/pull/5950)
- Removed `VARIOUS_SWAP_SIDE_STATUSES` and `VARIOUS_SWAP_STATS`.
* Shell Bell Clean up / Simplification and Tests by @AlexOn1ine in [#5924](https://github.com/rh-hideout/pokeemerald-expansion/pull/5924)
* Removed OW_AUTO_SIGNPOST by @pkmnsnfrn, @doejohn126 discovered the issue in [#5974](https://github.com/rh-hideout/pokeemerald-expansion/pull/5974)
* Fix leftover test change from #5033 by @mrgriffin in [#5987](https://github.com/rh-hideout/pokeemerald-expansion/pull/5987)
* Multiple removals of hardcoded move IDs by @AsparagusEduardo in [#5964](https://github.com/rh-hideout/pokeemerald-expansion/pull/5964)
* Missed two uses of new hazard type enum by @Pawkkie in [#5996](https://github.com/rh-hideout/pokeemerald-expansion/pull/5996)
* Debug menu and `createmon` additions/cleanup by @AsparagusEduardo in [#5994](https://github.com/rh-hideout/pokeemerald-expansion/pull/5994)
- Added Tera Type, Dynamax Level, and Gigantamax Factor to the "Give Pokémon (complex)" debug menu option.
- Added `dmaxLevel` option to `givemon` and `createmon`.
- Added `WEATHER_COUNT`.
- Cleaned up repeated code instances in debug menu.
- Fixed mislabel of `ggMaxFactor` in `givemon` and `createmon`. Now it's `gmaxFactor`.
* Free some IWRAM by @DizzyEggg in [#6000](https://github.com/rh-hideout/pokeemerald-expansion/pull/6000)
* Removes Resource Flags and moves fields to DisableStruct by @AlexOn1ine in [#5945](https://github.com/rh-hideout/pokeemerald-expansion/pull/5945)
* Future Sight Innards Out follow up for upcoming by @AlexOn1ine in [#5998](https://github.com/rh-hideout/pokeemerald-expansion/pull/5998)
* Remove redundant calls to GetMonData in pokemon.c by @AZero13 in [#5545](https://github.com/rh-hideout/pokeemerald-expansion/pull/5545)
* Use SET8 and SET32 consistently by @AZero13 in [#5544](https://github.com/rh-hideout/pokeemerald-expansion/pull/5544)
* Rename Furfrou Species tags to match Pokemon Showdown exports by @moostoet in [#6041](https://github.com/rh-hideout/pokeemerald-expansion/pull/6041)
* Rename DexNav flags and vars by @Bassoonian in [#6044](https://github.com/rh-hideout/pokeemerald-expansion/pull/6044)
* Re-removed trainers.h trailing whitespace by @fdeblasio in [#6048](https://github.com/rh-hideout/pokeemerald-expansion/pull/6048)
* Moved front animations frames to gSpeciesInfo by @AsparagusEduardo in [#5605](https://github.com/rh-hideout/pokeemerald-expansion/pull/5605)
* Clean up array access by using index instead of dereferencing the value by @AlexOn1ine in [#6057](https://github.com/rh-hideout/pokeemerald-expansion/pull/6057)
* Add a uniquely striking pair of brackets by @Pawkkie in [#6068](https://github.com/rh-hideout/pokeemerald-expansion/pull/6068)
* Replace WEATHER_HAS_EFFECT with HasWeatherEffect by @AlexOn1ine in [#6069](https://github.com/rh-hideout/pokeemerald-expansion/pull/6069)
* Converts a bunch of defines to enums by @Bassoonian in [#6071](https://github.com/rh-hideout/pokeemerald-expansion/pull/6071)
- Replaced `BATTLE_TERRAIN` #defines with the `BattleTerrain` enum
- Replaced `MAP_TYPE` #defines with the `MapType` enum
- Replaced `MAP_BATTLE_SCENE` #defines with the `MapBattleScene` enum
- Replaced `BACK_ANIM` #defines with the `BackAnim` enum
- Replaced `ANIM` #defines with the `AnimFunctionIDs` enum
- Replaced `INGAME_TRADE` #defines with the `InGameTradeID` enum
- Replaced `TRAINER_CLASS` #defines with the `TRAINER_CLASS` enum
* Return the universe to a state of balanced quilibrium by @Pawkkie in [#6074](https://github.com/rh-hideout/pokeemerald-expansion/pull/6074)
* Cleaned up Debug Menu by @AsparagusEduardo in [#6070](https://github.com/rh-hideout/pokeemerald-expansion/pull/6070)
* Remove gDecompressionBuffer by @DizzyEggg in [#6029](https://github.com/rh-hideout/pokeemerald-expansion/pull/6029)
* Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide by @pkmnsnfrn and @AlexOn1ine, @hedara90, @AsparagusEduardo, @mrgriffin in [#6018](https://github.com/rh-hideout/pokeemerald-expansion/pull/6018)
* If users created new entries in sTrainerSlides, they will need to be ported to the new system.
* Terrain function standarization by @fdeblasio in [#6097](https://github.com/rh-hideout/pokeemerald-expansion/pull/6097)
* Updated trainer pic tutorial by @fdeblasio in [#6049](https://github.com/rh-hideout/pokeemerald-expansion/pull/6049)
* Remove UnusedBattleInit from battle_bg.c by @DizzyEggg in [#6116](https://github.com/rh-hideout/pokeemerald-expansion/pull/6116)
* Consolidated contest opponent filters into gContestOpponents by @fdeblasio in [#6119](https://github.com/rh-hideout/pokeemerald-expansion/pull/6119)
* Replace BattleStruct members quickClawRandom/quickDrawRandom with locals by @AlexOn1ine in [#6136](https://github.com/rh-hideout/pokeemerald-expansion/pull/6136)
* Updated Trainer Ids used in Trainer Slides tests by @pkmnsnfrn and @AlexOn1ine found the original bug, @AsparagusEduardo confirmed it in [#6138](https://github.com/rh-hideout/pokeemerald-expansion/pull/6138)
* Added Difficulty Fallback for Trainer Slides by @pkmnsnfrn in [#6088](https://github.com/rh-hideout/pokeemerald-expansion/pull/6088)
* Clean up follow up for Simultaneous Reduction HP by @AlexOn1ine in [#6139](https://github.com/rh-hideout/pokeemerald-expansion/pull/6139)
* Remove global sBattler_AI by @AlexOn1ine in [#6128](https://github.com/rh-hideout/pokeemerald-expansion/pull/6128)
* Clarify MOVE_EFFECT_SLEEP sleep clause handling by @Pawkkie in [#6161](https://github.com/rh-hideout/pokeemerald-expansion/pull/6161)
* Remove unused PainSplit scripting global by @AlexOn1ine in [#6164](https://github.com/rh-hideout/pokeemerald-expansion/pull/6164)
* Don't use SeedRng some places where it isn't necessary by @tertu-m in [#6156](https://github.com/rh-hideout/pokeemerald-expansion/pull/6156)
* Cleaned up party data access GetPartyBattlerData by @AsparagusEduardo in [#6172](https://github.com/rh-hideout/pokeemerald-expansion/pull/6172)
* Changed two LocalRandom calls to new LocalRandom32 by @hedara90 in [#6173](https://github.com/rh-hideout/pokeemerald-expansion/pull/6173)
* Cleanup some global battler ID usage by @ghoulslash in [#6181](https://github.com/rh-hideout/pokeemerald-expansion/pull/6181)
* Clean up - Add ability args instead of calcing the ability again by @AlexOn1ine in [#6186](https://github.com/rh-hideout/pokeemerald-expansion/pull/6186)
* CanAbilityX Function Cleanup by @ghoulslash in [#6183](https://github.com/rh-hideout/pokeemerald-expansion/pull/6183)
* SwitchType enum to clean up GetMostSuitableMonToSwitchInto by @Pawkkie in [#6184](https://github.com/rh-hideout/pokeemerald-expansion/pull/6184)
* Unify setreflect/setlightscreen and MOVE_EFFECT_REFLECT/LIGHT_SCREEN by @ghoulslash in [#6196](https://github.com/rh-hideout/pokeemerald-expansion/pull/6196)
* Removed Trainer Slides footgun by @AsparagusEduardo in [#6205](https://github.com/rh-hideout/pokeemerald-expansion/pull/6205)
* Fix typo in Nuzzle's description by @Bassoonian in [#6209](https://github.com/rh-hideout/pokeemerald-expansion/pull/6209)
* Consolidate duplicate dialogue of nature girl in Battle Frontier by @fdeblasio in [#6195](https://github.com/rh-hideout/pokeemerald-expansion/pull/6195)
* Fixed missing move encapsulation in upcoming by @AsparagusEduardo in [#6226](https://github.com/rh-hideout/pokeemerald-expansion/pull/6226)
* Consolidated Frontier teams into battle_frontier_trainers.h by @fdeblasio in [#5892](https://github.com/rh-hideout/pokeemerald-expansion/pull/5892)
* Add abstraction layer for battler positions by @AlexOn1ine in [#6212](https://github.com/rh-hideout/pokeemerald-expansion/pull/6212)
* Revert unintentional change by @AlexOn1ine in [#6239](https://github.com/rh-hideout/pokeemerald-expansion/pull/6239)
* Remove whitespace from trainers data file by @AsparagusEduardo in [#6234](https://github.com/rh-hideout/pokeemerald-expansion/pull/6234)
* Replaced hardcoded numbers in DexNav with variables by @fdeblasio in [#6241](https://github.com/rh-hideout/pokeemerald-expansion/pull/6241)
* fix for battle ui for add to party menu (#6229) by @fakuzatsu in [#6240](https://github.com/rh-hideout/pokeemerald-expansion/pull/6240)
* Changed bit order for follower graphicsId creation by @hedara90 in [#6249](https://github.com/rh-hideout/pokeemerald-expansion/pull/6249)
* Minor Clean up for CanAbilityX. Follow up for #6183 by @AlexOn1ine in [#6252](https://github.com/rh-hideout/pokeemerald-expansion/pull/6252)
* Moved sValidApprenticeMove into gMovesInfo by @fdeblasio in [#6254](https://github.com/rh-hideout/pokeemerald-expansion/pull/6254)
* Use more accurate count in MovesInfo by @AlexOn1ine in [#6260](https://github.com/rh-hideout/pokeemerald-expansion/pull/6260)
* Fix Extra `task->tState++` and `break` in `Task_DrawFieldMessageBox` by @Deokishisu in [#6261](https://github.com/rh-hideout/pokeemerald-expansion/pull/6261)
* Expand usage of IsBattlerAlly (rename from IsAlly) by @AlexOn1ine in [#6251](https://github.com/rh-hideout/pokeemerald-expansion/pull/6251)
* Rename SetPhotonGeyser to a more general use and clean up by @AlexOn1ine in [#6272](https://github.com/rh-hideout/pokeemerald-expansion/pull/6272)
* Fix padding amount in MoveInfo by @AlexOn1ine in [#6307](https://github.com/rh-hideout/pokeemerald-expansion/pull/6307)
* Refactor testing flags and vars to not conflict with user ones by @hedara90 in [#6301](https://github.com/rh-hideout/pokeemerald-expansion/pull/6301)
* Clean up leftover from simu hp reduction development by @AlexOn1ine in [#6323](https://github.com/rh-hideout/pokeemerald-expansion/pull/6323)
* Remove pursuitSwitchByMove and additional if statement by @PhallenTree in [#6326](https://github.com/rh-hideout/pokeemerald-expansion/pull/6326)
## 🧪 Test Runner 🧪
### Changed
* New Ally Switch test fails on CI by @AlexOn1ine in [#5896](https://github.com/rh-hideout/pokeemerald-expansion/pull/5896)
* Added final Sparkling Aria+Shield Dust interaction test by @hedara90 in [#5923](https://github.com/rh-hideout/pokeemerald-expansion/pull/5923)
* Converted 2 various to callnative by @AsparagusEduardo in [#5950](https://github.com/rh-hideout/pokeemerald-expansion/pull/5950)
- Removed `VARIOUS_SWAP_SIDE_STATUSES` and `VARIOUS_SWAP_STATS`.
* Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide by @pkmnsnfrn and @AlexOn1ine, @hedara90, @AsparagusEduardo, @mrgriffin in [#6018](https://github.com/rh-hideout/pokeemerald-expansion/pull/6018)
* If users created new entries in sTrainerSlides, they will need to be ported to the new system.
* Tests for Big Pecks by @hedara90 in [#6158](https://github.com/rh-hideout/pokeemerald-expansion/pull/6158)
* Water Compaction tests by @hedara90 in [#6159](https://github.com/rh-hideout/pokeemerald-expansion/pull/6159)
* Wrote tests for Electrify by @hedara90 in [#6179](https://github.com/rh-hideout/pokeemerald-expansion/pull/6179)
* Sheer Force Test Fixes by @ghoulslash in [#6198](https://github.com/rh-hideout/pokeemerald-expansion/pull/6198)
* Minor Terrain Seed Test Improvement by @ghoulslash in [#6207](https://github.com/rh-hideout/pokeemerald-expansion/pull/6207)
* Fix Liquid Ooze + Leech Seed Test by @ghoulslash in [#6217](https://github.com/rh-hideout/pokeemerald-expansion/pull/6217)
* Prevented fanfares from playing in headless mode by @pkmnsnfrn and @hedara90, @AsparagusEduardo in [#6219](https://github.com/rh-hideout/pokeemerald-expansion/pull/6219)
* Added test support for 5 battle configs by @AsparagusEduardo in [#5914](https://github.com/rh-hideout/pokeemerald-expansion/pull/5914)
* Added missing Dream Eater and Reflect Type tests by @AsparagusEduardo in [#6245](https://github.com/rh-hideout/pokeemerald-expansion/pull/6245)
* Refactor testing flags and vars to not conflict with user ones by @hedara90 in [#6301](https://github.com/rh-hideout/pokeemerald-expansion/pull/6301)
### Fixed
* Fix ASSUMPTIONS not working by @DizzyEggg in [#5869](https://github.com/rh-hideout/pokeemerald-expansion/pull/5869)
* Updated Trainer Ids used in Trainer Slides tests by @pkmnsnfrn and @AlexOn1ine found the original bug, @AsparagusEduardo confirmed it in [#6138](https://github.com/rh-hideout/pokeemerald-expansion/pull/6138)
* Adjusted G-Max Depletion test by @AsparagusEduardo and @AlexOn1ine for being a cool dude being patient with me during the PR. in [#6201](https://github.com/rh-hideout/pokeemerald-expansion/pull/6201)
* Do not add TRAINER_FLAG_DOUBLE_BATTLE to recorded battles by @mrgriffin in [#6285](https://github.com/rh-hideout/pokeemerald-expansion/pull/6285)
* Fixes Brick Break/Psychic Fangs/Raging Bull breaking screens if target is immune by @PhallenTree in [#6308](https://github.com/rh-hideout/pokeemerald-expansion/pull/6308)
## 📚 Documentation 📚
* Updating install instructions by @hedara90 in [#5610](https://github.com/rh-hideout/pokeemerald-expansion/pull/5610)
- Install instructions have been moved into individual files under `docs/install/ `
* Documentation for DisableStruct by @AlexOn1ine in [#6066](https://github.com/rh-hideout/pokeemerald-expansion/pull/6066)
* Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide by @pkmnsnfrn and @AlexOn1ine, @hedara90, @AsparagusEduardo, @mrgriffin in [#6018](https://github.com/rh-hideout/pokeemerald-expansion/pull/6018)
* If users created new entries in sTrainerSlides, they will need to be ported to the new system.
* Updated trainer pic tutorial by @fdeblasio in [#6049](https://github.com/rh-hideout/pokeemerald-expansion/pull/6049)
* Update how_to_testing_system.md by @hedara90 in [#6281](https://github.com/rh-hideout/pokeemerald-expansion/pull/6281)
## 📦 Branch Synchronisation 📦
### pret
* 11th of February in [#6231](https://github.com/rh-hideout/pokeemerald-expansion/pull/6231)
* Replace easy_chat alphabetialOrder magic numbers with EC_INDEX values by @rayrobdod in [pret#2096](https://github.com/pret/pokeemerald/pull/2096)
* Fixed switchout bug in multibattle where order of mons gets messed up by @shachar700 in [pret#2099](https://github.com/pret/pokeemerald/pull/2099)
## New Contributors
* @khbsd made their first contribution in [#5679](https://github.com/rh-hideout/pokeemerald-expansion/pull/5679)
* @ExMingYan made their first contribution in [#6220](https://github.com/rh-hideout/pokeemerald-expansion/pull/6220)
* @Deokishisu made their first contribution in [#6261](https://github.com/rh-hideout/pokeemerald-expansion/pull/6261)
**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.10.2...test
<!--Last PR: 6339-->
<!--Used to keep track of the last PR merged in case new ones come in before the changelog is done.-->

View File

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

View File

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

View File

@ -54,6 +54,7 @@ Pull Requests that fall into this category are not in scope by default and shoul
2. **Fangame Features**: Adds a popular feature from other fangames
3. **Popular Non-SS Features**: Exceptions can be made for uniquely popular or requested features (Drowsy, PLA Legend Plate, etc.)
4. **External Program**: External programs like poryscript, porymoves, etc.
5. **Intergenerational Feature Compatibility**: Addresses limitations and issues resulting from including all generational behaviours in a GBA native title, and extrapolation of features no longer supported by GameFreak
## Workflow for Proposed Feature Scope Discussion
For the contributor:

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
0 0 255
246 189 49
246 172 41
238 156 32
222 131 24
205 115 8
246 172 41
246 172 41
246 172 41
246 172 41
167 81 31
139 74 49
123 65 32
98 49 32
82 32 16
74 24 8

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
0 0 255
129 196 237
152 208 243
174 221 250
240 186 88
232 144 39
152 208 243
152 208 243
255 255 255
255 241 188
212 111 53
227 148 56
197 101 18
163 70 36
128 57 35
113 41 18

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
0 0 255
38 17 60
22 29 82
20 43 90
91 97 155
47 50 120
255 255 255
243 237 195
22 29 82
22 29 82
43 29 98
49 25 82
40 5 57
53 41 103
58 65 118
27 16 70

View File

@ -1,19 +0,0 @@
JASC-PAL
0100
16
0 0 0
246 230 180
255 222 139
255 230 123
255 222 106
255 213 98
255 197 57
255 180 32
255 172 8
255 156 8
230 131 8
222 123 8
205 106 8
205 90 8
197 74 8
189 57 8

View File

@ -1,19 +0,0 @@
JASC-PAL
0100
16
0 0 0
211 216 222
198 208 221
184 199 218
170 191 215
156 181 212
142 172 207
128 162 203
117 154 198
104 147 199
101 141 189
89 137 194
82 127 179
77 128 190
63 117 184
52 106 169

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

View File

@ -1,19 +0,0 @@
JASC-PAL
0100
16
0 0 0
139 90 222
131 65 230
106 41 230
98 32 230
98 16 255
65 8 255
49 8 205
41 8 180
24 0 172
24 0 156
32 0 148
32 0 131
32 0 115
24 0 106
24 0 98

Binary file not shown.

Before

Width:  |  Height:  |  Size: 211 B

After

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 568 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 560 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 567 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 B

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 555 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 570 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 568 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 566 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 557 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 558 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 365 B

After

Width:  |  Height:  |  Size: 218 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 559 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

After

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 566 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 555 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 560 B

View File

@ -130,20 +130,15 @@ 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
struct ProtectStruct
{
u32 protected:1;
u32 spikyShielded:1;
u32 kingsShielded:1;
u32 banefulBunkered:1;
u32 obstructed:1;
u32 protected:7; // 126 protect options
u32 endured:1;
u32 noValidMoves:1;
u32 helpingHand:1;
@ -168,9 +163,8 @@ struct ProtectStruct
u32 usedThroatChopPreventedMove:1;
u32 statRaised:1;
u32 usedCustapBerry:1; // also quick claw
u32 touchedProtectLike:1;
u32 unused:1;
// End of 32-bit bitfield
u16 touchedProtectLike:1;
u16 disableEjectPack:1;
u16 statFell:1;
u16 pranksterElevated:1;
@ -178,16 +172,13 @@ struct ProtectStruct
u16 beakBlastCharge:1;
u16 quash:1;
u16 shellTrap:1;
u16 maxGuarded:1;
u16 silkTrapped:1;
u16 burningBulwarked:1;
u16 eatMirrorHerb:1;
u16 activateOpportunist:2; // 2 - to copy stats. 1 - stats copied (do not repeat). 0 - no stats to copy
u16 usedAllySwitch:1;
u16 padding:2;
u16 padding:4;
// End of 16-bit bitfield
u32 physicalDmg;
u32 specialDmg;
u16 physicalDmg;
u16 specialDmg;
u8 physicalBattlerId;
u8 specialBattlerId;
};
@ -197,24 +188,22 @@ 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;
u8 restoredBattlerSprite: 1;
u8 faintedHasReplacement:1;
u8 focusBanded:1;
u8 focusSashed:1;
u8 emergencyExited:1;
u8 afterYou:1;
// End of byte
u8 sturdied:1;
u8 enduredDamage:1;
u8 stormDrainRedirected:1;
// End of byte
u8 switchInAbilityDone:1;
u8 switchInItemDone:1;
u8 instructedChosenTarget:3;
u8 berryReduced:1;
u8 announceNeutralizingGas:1; // See Cmd_switchineffects
u8 neutralizingGasRemoved:1; // See VARIOUS_TRY_END_NEUTRALIZING_GAS
// End of byte
u8 gemParam;
// End of byte
@ -222,19 +211,15 @@ struct SpecialStatus
u8 rototillerAffected:1; // to be affected by rototiller
u8 parentalBondState:2;
u8 multiHitOn:1;
u8 announceNeutralizingGas:1; // See Cmd_switchineffects
u8 neutralizingGasRemoved:1; // See VARIOUS_TRY_END_NEUTRALIZING_GAS
u8 affectionEndured:1;
// End of byte
u8 dancerUsedMove:1;
u8 dancerOriginalTarget:3;
u8 preventLifeOrbDamage:1; // So that Life Orb doesn't activate various effects.
u8 distortedTypeMatchups:1;
u8 teraShellAbilityDone:1;
u8 criticalHit:1;
// End of byte
u8 enduredDamage:1;
u8 padding:7;
u8 dancerUsedMove:1;
u8 dancerOriginalTarget:3;
u8 preventLifeOrbDamage:1; // So that Life Orb doesn't activate various effects.
u8 unused:3;
// End of byte
};
struct SideTimer
@ -335,8 +320,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 +613,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 +676,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;
@ -728,7 +713,7 @@ struct BattleStruct
u8 startingStatusDone:1;
u8 terrainDone:1;
u8 overworldWeatherDone:1;
u8 obedienceResult:3;
u8 unused:3;
u8 isAtkCancelerForCalledMove:1; // Certain cases in atk canceler should only be checked once, when the original move is called, however others need to be checked the twice.
u8 friskedAbility:1; // If identifies two mons, show the ability pop-up only once.
u8 fickleBeamBoosted:1;
@ -764,9 +749,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.
@ -792,7 +774,7 @@ struct BattleStruct
u8 hitSwitchTargetFailed:1;
u8 effectsBeforeUsingMoveDone:1; // Mega Evo and Focus Punch/Shell Trap effects.
u8 spriteIgnore0Hp:1;
u8 battleBondTransformed[NUM_BATTLE_SIDES]; // Bitfield for each party.
u8 battleBondBoost[NUM_BATTLE_SIDES]; // Bitfield for each party.
u8 bonusCritStages[MAX_BATTLERS_COUNT]; // G-Max Chi Strike boosts crit stages of allies.
u8 itemPartyIndex[MAX_BATTLERS_COUNT];
u8 itemMoveIndex[MAX_BATTLERS_COUNT];
@ -814,14 +796,11 @@ 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 pursuitSwitchByMove:1;
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
// Simultaneous hp reduction for spread moves
s32 moveDamage[MAX_BATTLERS_COUNT];
s32 critChance[MAX_BATTLERS_COUNT];
u16 moveResultFlags[MAX_BATTLERS_COUNT];
@ -832,10 +811,24 @@ struct BattleStruct
u8 calculatedSpreadMoveAccuracy:1;
u8 printedStrongWindsWeakenedAttack:1;
u8 numSpreadTargets:2;
u8 padding3:2;
u8 bypassMoldBreakerChecks:1; // for ABILITYEFFECT_IMMUNITY
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,
@ -905,18 +898,6 @@ static inline bool32 IsBattleMoveRecoil(u32 move)
gBattleMons[battlerId].types[2] = TYPE_MYSTERY; \
}
#define IS_BATTLER_PROTECTED(battlerId)(gProtectStructs[battlerId].protected \
|| gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_WIDE_GUARD \
|| gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_QUICK_GUARD \
|| gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_CRAFTY_SHIELD \
|| gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_MAT_BLOCK \
|| gProtectStructs[battlerId].spikyShielded \
|| gProtectStructs[battlerId].kingsShielded \
|| gProtectStructs[battlerId].banefulBunkered \
|| gProtectStructs[battlerId].burningBulwarked \
|| gProtectStructs[battlerId].obstructed \
|| gProtectStructs[battlerId].silkTrapped)
#define GET_STAT_BUFF_ID(n) ((n & 7)) // first three bits 0x1, 0x2, 0x4
#define GET_STAT_BUFF_VALUE_WITH_SIGN(n) ((n & 0xF8))
#define GET_STAT_BUFF_VALUE(n) (((n >> 3) & 0xF)) // 0x8, 0x10, 0x20, 0x40
@ -933,11 +914,11 @@ static inline bool32 IsBattleMoveRecoil(u32 move)
// in include/constants/battle_script_commands.h
struct BattleScripting
{
s32 painSplitHp;
s32 unused1;
s32 bideDmg;
u8 multihitString[6];
bool8 expOnCatch;
u8 unused;
u8 unused2;
u8 animArg1;
u8 animArg2;
u16 savedStringId;
@ -1153,6 +1134,7 @@ extern u8 gSentPokesToOpponent[2];
extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
extern struct BattleScripting gBattleScripting;
extern struct BattleStruct *gBattleStruct;
extern struct AiBattleData *gAiBattleData;
extern u8 *gLinkBattleSendBuffer;
extern u8 *gLinkBattleRecvBuffer;
extern struct BattleResources *gBattleResources;

View File

@ -15,6 +15,12 @@ enum DamageRollType
DMG_ROLL_HIGHEST,
};
enum DamageCalcContext
{
AI_DEFENDING,
AI_ATTACKING,
};
enum AIPivot
{
DONT_PIVOT,
@ -22,10 +28,17 @@ enum AIPivot
SHOULD_PIVOT,
};
static inline bool32 IsMoveUnusable(u32 moveIndex, u32 move, u32 moveLimitations)
{
return move == MOVE_NONE
|| move == MOVE_UNAVAILABLE
|| moveLimitations & 1u << moveIndex;
}
bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move);
bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 move);
bool32 AI_RandLessThan(u32 val);
u32 GetDmgRollType(u32 battlerAtk);
u32 AI_GetDamage(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcContext calcContext, struct AiLogicData *aiData);
bool32 IsAiVsAiBattle(void);
bool32 BattlerHasAi(u32 battlerId);
bool32 IsAiBattlerAware(u32 battlerId);
@ -46,12 +59,13 @@ u32 GetTotalBaseStat(u32 species);
bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler);
bool32 AI_BattlerAtMaxHp(u32 battler);
u32 GetHealthPercentage(u32 battler);
bool32 IsBattlerTrapped(u32 battler, bool32 switching);
bool32 AI_CanBattlerEscape(u32 battler);
bool32 IsBattlerTrapped(u32 battlerAtk, u32 battlerDef);
s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler2, u32 moveConsidered);
bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk);
u32 NoOfHitsForTargetToFaintAI(u32 battlerDef, u32 battlerAtk);
u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef);
u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget);
u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext);
u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget, enum DamageCalcContext calcContext);
bool32 CanTargetMoveFaintAi(u32 move, u32 battlerDef, u32 battlerAtk, u32 nHits);
bool32 CanTargetFaintAiWithMod(u32 battlerDef, u32 battlerAtk, s32 hpMod, s32 dmgMod);
s32 AI_DecideKnownAbilityForTurn(u32 battlerId);
@ -59,7 +73,8 @@ u32 AI_DecideHoldEffectForTurn(u32 battlerId);
bool32 DoesBattlerIgnoreAbilityChecks(u32 battlerAtk, u32 atkAbility, u32 move);
u32 AI_GetWeather(void);
bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits);
bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index, u32 numHits);
bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index, enum DamageCalcContext calcContext);
bool32 CanIndexMoveGuaranteeFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index);
bool32 HasDamagingMove(u32 battlerId);
bool32 HasDamagingMoveOfType(u32 battlerId, u32 type);
u32 GetBattlerSecondaryDamage(u32 battlerId);
@ -69,7 +84,7 @@ bool32 ShouldTryOHKO(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbil
bool32 ShouldUseRecoilMove(u32 battlerAtk, u32 battlerDef, u32 recoilDmg, u32 moveIndex);
u32 GetBattlerSideSpeedAverage(u32 battler);
bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage);
bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent);
bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent, enum DamageCalcContext calcContext);
bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, u32 moveEffect);
enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 moveIndex);
bool32 IsRecycleEncouragedItem(u32 item);
@ -84,7 +99,7 @@ u32 AI_GetBattlerAbility(u32 battler);
// stat stage checks
bool32 AnyStatIsRaised(u32 battlerId);
bool32 ShouldLowerStat(u32 battlerAtk, u32 battlerDef, u32 battlerAbility, u32 stat);
bool32 ShouldLowerStat(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 stat);
bool32 BattlerStatCanRise(u32 battler, u32 battlerAbility, u32 stat);
bool32 AreBattlersStatsMaxed(u32 battler);
u32 CountPositiveStatStages(u32 battlerId);
@ -101,13 +116,13 @@ bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility);
bool32 IsAffectedByPowder(u32 battler, u32 ability, u32 holdEffect);
bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category);
s32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo);
struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType);
struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType);
struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower);
struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, u32 weather);
bool32 AI_IsDamagedByRecoil(u32 battler);
u32 GetNoOfHitsToKO(u32 dmg, s32 hp);
u32 GetNoOfHitsToKOBattlerDmg(u32 dmg, u32 battlerDef);
u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex);
u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef);
u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcContext calcContext);
u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext);
uq4_12_t AI_GetMoveEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef);
u16 *GetMovesArray(u32 battler);
bool32 IsConfusionMoveEffect(u32 moveEffect);
@ -127,7 +142,7 @@ bool32 IsAromaVeilProtectedEffect(u32 moveEffect);
bool32 IsNonVolatileStatusMoveEffect(u32 moveEffect);
bool32 IsMoveRedirectionPrevented(u32 battlerAtk, u32 move, u32 atkAbility);
bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move);
bool32 IsHazardMoveEffect(u32 moveEffect);
bool32 IsHazardMove(u32 move);
bool32 IsTwoTurnNotSemiInvulnerableMove(u32 battlerAtk, u32 move);
void ProtectChecks(u32 battlerAtk, u32 battlerDef, u32 move, u32 predictedMove, s32 *score);
bool32 ShouldSetSandstorm(u32 battler, u32 ability, u32 holdEffect);
@ -154,17 +169,21 @@ bool32 HasSubstituteIgnoringMove(u32 battler);
bool32 HasHighCritRatioMove(u32 battler);
bool32 HasMagicCoatAffectedMove(u32 battler);
bool32 HasSnatchAffectedMove(u32 battler);
bool32 IsHazardClearingMove(u32 move);
bool32 IsSubstituteEffect(u32 effect);
// status checks
bool32 AI_CanGetFrostbite(u32 battler, u32 ability);
bool32 AI_CanBeConfused(u32 battlerAtk, u32 battlerDef, u32 move, u32 ability);
bool32 IsBattlerIncapacitated(u32 battler, u32 ability);
bool32 AI_CanPutToSleep(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove);
bool32 ShouldPoisonSelf(u32 battler, u32 ability);
bool32 ShouldPoison(u32 battlerAtk, u32 battlerDef);
bool32 AI_CanPoison(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove);
bool32 AI_CanParalyze(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove);
bool32 AI_CanConfuse(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove);
bool32 ShouldBurnSelf(u32 battler, u32 ability);
bool32 ShouldBurn(u32 battlerAtk, u32 battlerDef);
bool32 ShouldFreezeOrFrostbite(u32 battlerAtk, u32 battlerDef);
bool32 ShouldParalyze(u32 battlerAtk, u32 battlerDef);
bool32 AI_CanBurn(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove);
bool32 AI_CanGiveFrostbite(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove);
bool32 AI_CanBeInfatuated(u32 battlerAtk, u32 battlerDef, u32 defAbility);
@ -208,14 +227,17 @@ 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);
bool32 AI_ShouldSetUpHazards(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData);
void IncreaseTidyUpScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score);
bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, struct AiLogicData *aiData);
void IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score);
u32 IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move);
bool32 IsBattlerItemEnabled(u32 battler);
bool32 IsBattlerPredictedToSwitch(u32 battler);
bool32 HasLowAccuracyMove(u32 battlerAtk, u32 battlerDef);
bool32 HasBattlerSideAbility(u32 battlerDef, u32 ability, struct AiLogicData *aiData);
#endif //GUARD_BATTLE_AI_UTIL_H

View File

@ -71,8 +71,8 @@ void SwitchPartyOrder(u32 battlerId);
void SwapTurnOrder(u8 id1, u8 id2);
u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, u32 holdEffect);
u32 GetBattlerTotalSpeedStat(u32 battler);
s8 GetChosenMovePriority(u32 battlerId);
s8 GetBattleMovePriority(u32 battlerId, u16 move);
s32 GetChosenMovePriority(u32 battler, u32 ability);
s32 GetBattleMovePriority(u32 battler, u32 ability, u32 move);
s32 GetWhichBattlerFasterArgs(u32 battler1, u32 battler2, bool32 ignoreChosenMoves, u32 ability1, u32 ability2,
u32 holdEffectBattler1, u32 holdEffectBattler2, u32 speedBattler1, u32 speedBattler2, s32 priority1, s32 priority2);
s32 GetWhichBattlerFasterOrTies(u32 battler1, u32 battler2, bool32 ignoreChosenMoves);

View File

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

View File

@ -23,6 +23,7 @@ struct PickupItem
};
s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk);
s32 CalcCritChanceStageGen1(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk);
s32 GetCritHitOdds(s32 critChanceIndex);
u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect);
u8 GetBattlerTurnOrderNum(u8 battlerId);
@ -51,13 +52,13 @@ void StealTargetItem(u8 battlerStealer, u8 battlerItem);
u8 GetCatchingBattler(void);
u32 GetHighestStatId(u32 battlerId);
bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType);
bool32 ShouldTeraShellDistortTypeMatchups(u32 move, u32 battlerDef);
bool32 IsMoveNotAllowedInSkyBattles(u32 move);
bool32 DoSwitchInAbilities(u32 battlerId);
u8 GetFirstFaintedPartyIndex(u8 battlerId);
bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler);
void SaveBattlerTarget(u32 battler);
void SaveBattlerAttacker(u32 battler);
bool32 CanBurnHitThaw(u16 move);
extern void (* const gBattleScriptingCommandsTable[])(void);
extern const struct StatFractions gAccuracyStageRatios[];

View File

@ -384,9 +384,7 @@ extern const u8 BattleScript_FriskMsg[];
extern const u8 BattleScript_FriskMsgWithPopup[];
extern const u8 BattleScript_MoodyActivates[];
extern const u8 BattleScript_EmergencyExit[];
extern const u8 BattleScript_EmergencyExitNoPopUp[];
extern const u8 BattleScript_EmergencyExitWild[];
extern const u8 BattleScript_EmergencyExitWildNoPopUp[];
extern const u8 BattleScript_CheekPouchActivates[];
extern const u8 BattleScript_TotemVar[];
extern const u8 BattleScript_TotemFlaredToLife[];
@ -427,6 +425,7 @@ extern const u8 BattleScript_GulpMissileGorging[];
extern const u8 BattleScript_GulpMissileGulping[];
extern const u8 BattleScript_GulpMissileFormChange[];
extern const u8 BattleScript_BattleBondActivatesOnMoveEndAttacker[];
extern const u8 BattleScript_EffectBattleBondStatIncrease[];
extern const u8 BattleScript_DesolateLandActivates[];
extern const u8 BattleScript_PrimordialSeaActivates[];
extern const u8 BattleScript_PrimalWeatherBlocksMove[];
@ -443,8 +442,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[];
@ -480,7 +477,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[];
@ -560,6 +557,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
@ -597,7 +595,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[];
@ -825,7 +823,6 @@ extern const u8 BattleScript_MoveEffectHaze[];
extern const u8 BattleScript_MoveEffectIonDeluge[];
extern const u8 BattleScript_EffectHyperspaceFury[];
extern const u8 BattleScript_EffectAuraWheel[];
extern const u8 BattleScript_EffectDynamicCategory[];
extern const u8 BattleScript_EffectNoRetreat[];
extern const u8 BattleScript_EffectTarShot[];
extern const u8 BattleScript_EffectPoltergeist[];

View File

@ -25,6 +25,7 @@
enum AbilityEffectOptions
{
ABILITY_CHECK_TRIGGER,
ABILITY_CHECK_TRIGGER_AI,
ABILITY_RUN_SCRIPT,
};
@ -39,10 +40,6 @@ enum MoveAbsorbed
enum {
ABILITYEFFECT_ON_SWITCHIN,
ABILITYEFFECT_ENDTURN,
ABILITYEFFECT_MOVES_BLOCK,
ABILITYEFFECT_WOULD_BLOCK, // Checks immunity without triggering a script
ABILITYEFFECT_ABSORBING,
ABILITYEFFECT_WOULD_ABSORB, // Checks immunity without triggering a script
ABILITYEFFECT_MOVE_END_ATTACKER,
ABILITYEFFECT_MOVE_END,
ABILITYEFFECT_IMMUNITY,
@ -96,6 +93,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
{
@ -129,7 +130,6 @@ enum
CANCELLER_STANCE_CHANGE_2,
CANCELLER_WEATHER_PRIMAL,
CANCELLER_DYNAMAX_BLOCKED,
CANCELLER_POWDER_MOVE,
CANCELLER_POWDER_STATUS,
CANCELLER_PROTEAN,
CANCELLER_PSYCHIC_TERRAIN,
@ -206,6 +206,7 @@ bool32 AreAllMovesUnusable(u32 battler);
u8 GetImprisonedMovesCount(u32 battler, u16 move);
u8 DoFieldEndTurnEffects(void);
s32 GetDrainedBigRootHp(u32 battler, s32 hp);
bool32 IsMagicGuardProtected(u32 battler, u32 ability);
u8 DoBattlerEndTurnEffects(void);
bool32 HandleWishPerishSongOnTurnEnd(void);
bool32 HandleFaintedMonActions(void);
@ -214,7 +215,7 @@ u32 AtkCanceller_MoveSuccessOrder(void);
void SetAtkCancellerForCalledMove(void);
bool32 HasNoMonsToSwitch(u32 battler, u8 r1, u8 r2);
bool32 TryChangeBattleWeather(u32 battler, u32 battleWeatherId, bool32 viaAbility);
bool32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 abilityDef, enum AbilityEffectOptions option);
bool32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u32 abilityDef, u32 move, enum AbilityEffectOptions option);
bool32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 move, u32 moveType, enum AbilityEffectOptions option);
u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 moveArg);
bool32 TryPrimalReversion(u32 battler);
@ -227,6 +228,7 @@ u32 IsAbilityOnField(u32 ability);
u32 IsAbilityOnFieldExcept(u32 battler, u32 ability);
u32 IsAbilityPreventingEscape(u32 battler);
bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move);
u32 GetProtectType(enum ProtectMethod method);
bool32 CanBattlerEscape(u32 battler); // no ability check
void BattleScriptExecute(const u8 *BS_ptr);
void BattleScriptPushCursorAndCallback(const u8 *BS_ptr);
@ -249,6 +251,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);
@ -272,7 +275,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);
@ -303,7 +307,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);
@ -344,10 +347,11 @@ bool32 IsSleepClauseEnabled();
void ClearDamageCalcResults(void);
u32 DoesDestinyBondFail(u32 battler);
bool32 IsMoveEffectBlockedByTarget(u32 ability);
u32 NumAffectedSpreadMoveTargets(void);
bool32 IsPursuitTargetSet(void);
void ClearPursuitValuesIfSet(u32 battler);
void ClearPursuitValues(void);
bool32 HasWeatherEffect(void);
u32 RestoreWhiteHerbStats(u32 battler);
bool32 HadMoreThanHalfHpNowDoesnt(u32 battler);
#endif // GUARD_BATTLE_UTIL_H

View File

@ -9,6 +9,7 @@
#define SHOULD_SWITCH_WONDER_GUARD_PERCENTAGE 100
#define SHOULD_SWITCH_TRUANT_PERCENTAGE 100
#define SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE 100
#define STAY_IN_STATS_RAISED 2 // Number of stat stages that must be raised across any stats before the AI won't switch mon out in certain cases
// AI smart switching chances; if you want more complex behaviour, modify GetSwitchChance
#define SHOULD_SWITCH_ABSORBS_MOVE_PERCENTAGE 100
@ -43,8 +44,15 @@
#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 BLUNDER_POLICY_ACCURACY_THRESHOLD 75 // Moves with accuracy equal below this value are prioritized when holding Blunder Policy
#define LOW_ACCURACY_THRESHOLD 75 // Moves with accuracy equal OR below this value are considered low accuracy
// AI damage calc considerations
#define RISKY_AI_CRIT_STAGE_THRESHOLD 2 // Stat stages at which Risky will assume it gets a crit
#define RISKY_AI_CRIT_THRESHOLD_GEN_1 128 // "Stat stage" at which Risky will assume it gets a crit with gen 1 mechanics (this translates to an X / 255 % crit threshold)
// AI prediction chances
#define PREDICT_SWITCH_CHANCE 50

View File

@ -9,7 +9,6 @@
#define B_MULTI_HIT_CHANCE GEN_LATEST // In Gen5+, multi-hit moves have different %. See SetRandomMultiHitCounter for values.
#define B_WHITEOUT_MONEY GEN_LATEST // In Gen4+, the amount of money lost by losing a battle is determined by the amount of badges earned. Previously, it would cut the current money by half. (While this change was also in FRLG, for the sake of simplicity, setting this to GEN_3 will result in RSE behavior.)
#define B_LIGHT_BALL_ATTACK_BOOST GEN_LATEST // In Gen4+, Light Ball doubles the power of physical moves in addition to special moves.
#define B_SANDSTORM_SPDEF_BOOST GEN_LATEST // In Gen4+, Sandstorm weather multiplies the Sp. Defense of Rock-type Pokémon by x1.5.
// Experience settings
#define B_EXP_CATCH GEN_LATEST // In Gen6+, Pokémon get experience from catching.
@ -130,7 +129,6 @@
#define B_PURSUIT_TARGET GEN_LATEST // In Gen4+, Pursuit attacks a switching opponent even if they weren't targeting them. Before Gen4, Pursuit only attacks a switching opponent that it originally targeted.
// Ability settings
#define B_ABILITY_WEATHER GEN_LATEST // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move or a different weather-affecting ability.
#define B_GALE_WINGS GEN_LATEST // In Gen7+ requires full HP to trigger.
#define B_STANCE_CHANGE_FAIL GEN_LATEST // In Gen7+, Stance Change fails if the Pokémon is unable to use a move because of confusion, paralysis, etc. In Gen6, it doesn't.
#define B_SHADOW_TAG_ESCAPE GEN_LATEST // In Gen4+, if both sides have a Pokémon with Shadow Tag, all battlers can escape. Before, neither side could escape this situation.
@ -147,7 +145,6 @@
#define B_REDIRECT_ABILITY_IMMUNITY GEN_LATEST // In Gen5+, Pokémon with Lightning Rod/Storm Drain become immune to Electric/Water-type moves and increase their Sp. Attack by 1 stage on top of the redirecting effect.
#define B_REDIRECT_ABILITY_ALLIES GEN_LATEST // In Gen4+, Lightning Rod/Storm Drain redirect ally's moves as well.
#define B_LEAF_GUARD_PREVENTS_REST GEN_LATEST // In Gen5+, Leaf Guard prevents the use of Rest in harsh sunlight.
#define B_SNOW_WARNING GEN_LATEST // In Gen9+, Snow Warning will summon snow instead of hail.
#define B_TRANSISTOR_BOOST GEN_LATEST // In Gen9+, Transistor will only boost Electric-type moves by 1.3x as opposed to 1.5x.
#define B_ILLUMINATE_EFFECT GEN_LATEST // In Gen9+, Illuminate prevents accuracy reductions and ignores the target's evasion.
#define B_WEAK_ARMOR_SPEED GEN_LATEST // In Gen7+, Weak Armor raises Speed by 2 stages instead of 1 when hit by a physical move.
@ -160,6 +157,7 @@
// In Gen4, it's 30%. In Gen5+ it has 11% to sleep, 9% chance to poison and 10% chance to paralyze.
#define B_PICKUP_WILD GEN_LATEST // In Gen9+, Pickup allows its user to pickup its own used item at the end of the turn in wild battles.
#define B_MAGIC_GUARD GEN_LATEST // In Gen4 only, Magic Guard ignores immobilization caused by paralysis
#define B_BATTLE_BOND GEN_LATEST // In Gen9+, Battle Bond increases Atk, SpAtk and Speed by one stage, once per battle
// Item settings
#define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore HP activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn.
@ -221,6 +219,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 +257,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 +284,15 @@
#define B_TRAINER_MON_RANDOM_ABILITY FALSE // If this is set to TRUE a random legal ability will be generated for a trainer mon
#define B_OBEDIENCE_MECHANICS GEN_LATEST // In PLA+ (here Gen8+), obedience restrictions also apply to non-outsider Pokémon, albeit based on their level met rather than actual level
#define B_USE_FROSTBITE FALSE // In PLA, Frostbite replaces Freeze. Enabling this flag does the same here. Moves can still be cherry-picked to either Freeze or Frostbite. Freeze-Dry, Secret Power & Tri Attack depend on this config.
#define B_OVERWORLD_SNOW GEN_LATEST // In Gen9+, overworld Snow will summon snow instead of hail in battle.
#define B_OVERWORLD_FOG GEN_LATEST // In Gen8+, overworld Fog summons Misty Terrain in battle. In Gen4 only, overworld Fog summons the unique fog weather condition in battle.
#define B_TOXIC_REVERSAL GEN_LATEST // In Gen5+, bad poison will change to regular poison at the end of battles.
#define B_TRY_CATCH_TRAINER_BALL GEN_LATEST // In Gen4+, trying to catch a Trainer's Pokémon does not consume the Poké Ball.
#define B_SLEEP_CLAUSE FALSE // Enables Sleep Clause all the time in every case, overriding B_FLAG_SLEEP_CLAUSE. Use that for modularity.
#define NUM_BEEPS_GEN_LATEST 4 // Loops 4 times
#define NUM_BEEPS_GEN_3 -1 // Loops infinitely
#define NUM_BEEPS_OFF 0 // Doesn't play at all
#define B_NUM_LOW_HEALTH_BEEPS NUM_BEEPS_GEN_LATEST // This controls the number of times the "low health" beep will loop. Setting this value to NUM_BEEPS_OFF will disable the beep, while NUM_BEEPS_GEN_3 will loop infinitely. You can set this to any number you want, the defines listed are just for ease of use.
// Animation Settings
#define B_NEW_SWORD_PARTICLE FALSE // If set to TRUE, it updates Swords Dance's particle.
#define B_NEW_LEECH_SEED_PARTICLE FALSE // If set to TRUE, it updates Leech Seed's animation particle.

View File

@ -10,6 +10,7 @@
#define OW_DOUBLE_APPROACH_WITH_ONE_MON FALSE // If enabled, you can be spotted by two trainers at the same time even if you only have one eligible Pokémon in your party.
#define OW_HIDE_REPEAT_MAP_POPUP FALSE // If enabled, map popups will not appear if entering a map with the same Map Section Id as the last.
#define OW_FRLG_WHITEOUT FALSE // If enabled, shows an additional whiteout message and post whiteout event script with healing NPC.
#define OW_DEFOG_FIELD_MOVE FALSE // If enabled, Defog can be used as a Field Move as seen in DPPt.
// Item Obtain Description Box
#define OW_ITEM_DESCRIPTIONS_OFF 0 // never show descriptions
@ -83,10 +84,14 @@
// These generational defines only make a distinction for OW_ALTERED_TIME_RATIO
#define GEN_8_PLA GEN_LATEST + 2
// Time
#define OW_TIMES_OF_DAY GEN_LATEST // Different generations have the times of day change at different times.
#define OW_USE_FAKE_RTC FALSE // When TRUE, seconds on the in-game clock will only advance once every 60 playTimeVBlanks (every 60 frames).
#define OW_ALTERED_TIME_RATIO GEN_LATEST // In GEN_8_PLA, the time in game moves forward 60 seconds for every second in the RTC. In GEN_9, it is 20 seconds. This has no effect if OW_USE_FAKE_RTC is FALSE.
//Time
#define OW_TIMES_OF_DAY GEN_LATEST // Different generations have the times of day change at different times.
#define OW_USE_FAKE_RTC FALSE // When TRUE, seconds on the in-game clock will only advance once every 60 playTimeVBlanks (every 60 frames).
#define OW_ALTERED_TIME_RATIO GEN_LATEST // In GEN_8_PLA, the time in game moves forward 60 seconds for every second in the RTC. In GEN_9, it is 20 seconds. This has no effect if OW_USE_FAKE_RTC is FALSE.
#define OW_TIME_OF_DAY_ENCOUNTERS FALSE // If TRUE, will allow the user to define and use different encounter tables based on the time of day.
#define OW_TIME_OF_DAY_DISABLE_FALLBACK FALSE // If TRUE, if the encounter table for a specific map and time is empty, the area will have no encounters instead of falling back to the vanilla map and time.
#define OW_TIME_OF_DAY_DEFAULT TIME_MORNING // Should be set to whatever is the first value in the TimeOfDay enum in rtc.h
#define OW_TIME_OF_DAY_FALLBACK OW_TIME_OF_DAY_DEFAULT // The time of day that encounter tables fall back to. Defaults to whatever OW_TIME_OF_DAY_FALLBACK is set to.
// Lighting
#define OW_SHADOW_INTENSITY 4 // Ranges from 0 to 16, where 0 is fully transparent and 16 is black.

View File

@ -1131,10 +1131,17 @@
// Vars
#undef B_VAR_DIFFICULTY
#define B_VAR_DIFFICULTY VAR_UNUSED_0x404E
#define B_VAR_DIFFICULTY TESTING_VAR_DIFFICULTY
// Flags
#undef B_FLAG_SLEEP_CLAUSE
#define B_FLAG_SLEEP_CLAUSE FLAG_SPECIAL_FLAG_UNUSED_0x4003
#define B_FLAG_SLEEP_CLAUSE TESTING_FLAG_SLEEP_CLAUSE
// Move animation testing
#define T_SHOULD_RUN_MOVE_ANIM FALSE // If TRUE, enables the move animation tests, these are very computationally heavy and takes a long time to run.
#define ANIM_TEST_START_MOVE 1 // First move to test
#define ANIM_TEST_END_MOVE MOVES_COUNT-1 // Last move to test
#endif // GUARD_CONFIG_TEST_H

View File

@ -239,15 +239,11 @@
#define SIDE_STATUS_TOXIC_SPIKES (1 << 13)
#define SIDE_STATUS_STEALTH_ROCK (1 << 14)
// Missing flags previously were SIDE_STATUS_TOXIC_SPIKES_DAMAGED, SIDE_STATUS_STEALTH_ROCK_DAMAGED, SIDE_STATUS_STICKY_WEB_DAMAGED
#define SIDE_STATUS_QUICK_GUARD (1 << 18)
#define SIDE_STATUS_WIDE_GUARD (1 << 19)
#define SIDE_STATUS_CRAFTY_SHIELD (1 << 20)
#define SIDE_STATUS_MAT_BLOCK (1 << 21)
#define SIDE_STATUS_STEELSURGE (1 << 22)
#define SIDE_STATUS_DAMAGE_NON_TYPES (1 << 23)
#define SIDE_STATUS_RAINBOW (1 << 24)
#define SIDE_STATUS_SEA_OF_FIRE (1 << 25)
#define SIDE_STATUS_SWAMP (1 << 26)
#define SIDE_STATUS_STEELSURGE (1 << 18)
#define SIDE_STATUS_DAMAGE_NON_TYPES (1 << 19)
#define SIDE_STATUS_RAINBOW (1 << 20)
#define SIDE_STATUS_SEA_OF_FIRE (1 << 21)
#define SIDE_STATUS_SWAMP (1 << 22)
#define SIDE_STATUS_HAZARDS_ANY (SIDE_STATUS_SPIKES | SIDE_STATUS_STICKY_WEB | SIDE_STATUS_TOXIC_SPIKES | SIDE_STATUS_STEALTH_ROCK | SIDE_STATUS_STEELSURGE)
#define SIDE_STATUS_SCREEN_ANY (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL)
@ -558,7 +554,7 @@ enum MoveEffects
#define MOVE_TARGET_SELECTED 0
#define MOVE_TARGET_DEPENDS (1 << 0)
#define MOVE_TARGET_USER_OR_SELECTED (1 << 1)
#define MOVE_TARGET_OPPONENT (1 << 1)
#define MOVE_TARGET_RANDOM (1 << 2)
#define MOVE_TARGET_BOTH (1 << 3)
#define MOVE_TARGET_USER (1 << 4)

View File

@ -506,9 +506,9 @@
#define BG_BOLT_STRIKE 55
#define BG_ZMOVE_ACTIVATE 56
#define BG_TECTONIC_RAGE 57
#define BG_BLUE_SKY_DAY 58
#define BG_BLUE_SKY_AFTERNOON 59
#define BG_BLUE_SKY_NIGHT 60
#define BG_ROCK_FIELD_DAY 58
#define BG_ROCK_FIELD_AFTERNOON 59
#define BG_ROCK_FIELD_NIGHT 60
#define BG_ZMOVE_MOUNTAIN 61
#define BG_NEVERENDING_NIGHTMARE 62
#define BG_WATER_PULSE 63

View File

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

View File

@ -121,7 +121,6 @@ enum CmdVarious
VARIOUS_INSTANT_HP_DROP,
VARIOUS_CLEAR_STATUS,
VARIOUS_RESTORE_PP,
VARIOUS_TRY_ACTIVATE_MOXIE,
VARIOUS_TRY_ACTIVATE_FELL_STINGER,
VARIOUS_PLAY_MOVE_ANIMATION,
VARIOUS_SET_LUCKY_CHANT,
@ -168,7 +167,6 @@ enum CmdVarious
VARIOUS_LOSE_TYPE,
VARIOUS_TRY_ACTIVATE_SOULHEART,
VARIOUS_TRY_ACTIVATE_RECEIVER,
VARIOUS_TRY_ACTIVATE_BEAST_BOOST,
VARIOUS_TRY_FRISK,
VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED,
VARIOUS_TRY_FAIRY_LOCK,
@ -181,7 +179,6 @@ enum CmdVarious
VARIOUS_JUMP_IF_ABSENT,
VARIOUS_DESTROY_ABILITY_POPUP,
VARIOUS_TOTEM_BOOST,
VARIOUS_TRY_ACTIVATE_GRIM_NEIGH,
VARIOUS_MOVEEND_ITEM_EFFECTS,
VARIOUS_TERRAIN_SEED,
VARIOUS_MAKE_INVISIBLE,
@ -192,7 +189,6 @@ enum CmdVarious
VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER,
VARIOUS_GET_ROTOTILLER_TARGETS,
VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED,
VARIOUS_TRY_ACTIVATE_BATTLE_BOND,
VARIOUS_CONSUME_BERRY,
VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL,
VARIOUS_JUMP_IF_SPECIES,
@ -219,13 +215,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 +267,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,
@ -286,20 +280,20 @@ enum MoveEndEffects
MOVEEND_RECOIL,
MOVEEND_RAPID_SPIN,
MOVEEND_ITEM_EFFECTS_ATTACKER,
MOVEEND_MAGICIAN, // Occurs after final multi-hit strike, and after other items/abilities would activate
MOVEEND_ABILITY_BLOCK,
MOVEEND_SHEER_FORCE, // If move is Sheer Force affected, skip until Eject Pack
MOVEEND_RED_CARD, // Red Card triggers before Eject Pack
MOVEEND_EJECT_ITEMS,
MOVEEND_WHITE_HERB,
MOVEEND_EJECT_BUTTON,
MOVEEND_LIFEORB_SHELLBELL, // Includes shell bell, throat spray, etc
MOVEEND_CHANGED_ITEMS,
MOVEEND_PICKPOCKET,
MOVEEND_DANCER,
MOVEEND_EMERGENCY_EXIT,
MOVEEND_SYMBIOSIS,
MOVEEND_EJECT_PACK,
MOVEEND_OPPORTUNIST, // Occurs after other stat change items/abilities to try and copy the boosts
MOVEEND_PICKPOCKET,
MOVEEND_WHITE_HERB,
MOVEEND_CHANGED_ITEMS,
MOVEEND_SAME_MOVE_TURNS,
MOVEEND_SET_EVOLUTION_TRACKER,
MOVEEND_CLEAR_BITS,
MOVEEND_DANCER,
MOVEEND_PURSUIT_NEXT_ACTION,
MOVEEND_COUNT,
};

View File

@ -467,270 +467,273 @@
#define STRINGID_FRISKACTIVATES 465
#define STRINGID_UNNERVEENTERS 466
#define STRINGID_HARVESTBERRY 467
#define STRINGID_LASTABILITYRAISEDSTAT 468
#define STRINGID_MAGICBOUNCEACTIVATES 469
#define STRINGID_PROTEANTYPECHANGE 470
#define STRINGID_SYMBIOSISITEMPASS 471
#define STRINGID_STEALTHROCKDMG 472
#define STRINGID_TOXICSPIKESABSORBED 473
#define STRINGID_TOXICSPIKESPOISONED 474
#define STRINGID_STICKYWEBSWITCHIN 475
#define STRINGID_HEALINGWISHCAMETRUE 476
#define STRINGID_HEALINGWISHHEALED 477
#define STRINGID_LUNARDANCECAMETRUE 478
#define STRINGID_CUSEDBODYDISABLED 479
#define STRINGID_ATTACKERACQUIREDABILITY 480
#define STRINGID_TARGETABILITYSTATLOWER 481
#define STRINGID_TARGETSTATWONTGOHIGHER 482
#define STRINGID_PKMNMOVEBOUNCEDABILITY 483
#define STRINGID_IMPOSTERTRANSFORM 484
#define STRINGID_ASSAULTVESTDOESNTALLOW 485
#define STRINGID_GRAVITYPREVENTSUSAGE 486
#define STRINGID_HEALBLOCKPREVENTSUSAGE 487
#define STRINGID_NOTDONEYET 488
#define STRINGID_STICKYWEBUSED 489
#define STRINGID_QUASHSUCCESS 490
#define STRINGID_PKMNBLEWAWAYTOXICSPIKES 491
#define STRINGID_PKMNBLEWAWAYSTICKYWEB 492
#define STRINGID_PKMNBLEWAWAYSTEALTHROCK 493
#define STRINGID_IONDELUGEON 494
#define STRINGID_TOPSYTURVYSWITCHEDSTATS 495
#define STRINGID_TERRAINBECOMESMISTY 496
#define STRINGID_TERRAINBECOMESGRASSY 497
#define STRINGID_TERRAINBECOMESELECTRIC 498
#define STRINGID_TERRAINBECOMESPSYCHIC 499
#define STRINGID_TARGETELECTRIFIED 500
#define STRINGID_MEGAEVOREACTING 501
#define STRINGID_MEGAEVOEVOLVED 502
#define STRINGID_DRASTICALLY 503
#define STRINGID_SEVERELY 504
#define STRINGID_INFESTATION 505
#define STRINGID_NOEFFECTONTARGET 506
#define STRINGID_BURSTINGFLAMESHIT 507
#define STRINGID_BESTOWITEMGIVING 508
#define STRINGID_THIRDTYPEADDED 509
#define STRINGID_FELLFORFEINT 510
#define STRINGID_POKEMONCANNOTUSEMOVE 511
#define STRINGID_COVEREDINPOWDER 512
#define STRINGID_POWDEREXPLODES 513
#define STRINGID_BELCHCANTSELECT 514
#define STRINGID_SPECTRALTHIEFSTEAL 515
#define STRINGID_GRAVITYGROUNDING 516
#define STRINGID_MISTYTERRAINPREVENTS 517
#define STRINGID_GRASSYTERRAINHEALS 518
#define STRINGID_ELECTRICTERRAINPREVENTS 519
#define STRINGID_PSYCHICTERRAINPREVENTS 520
#define STRINGID_SAFETYGOGGLESPROTECTED 521
#define STRINGID_FLOWERVEILPROTECTED 522
#define STRINGID_SWEETVEILPROTECTED 523
#define STRINGID_AROMAVEILPROTECTED 524
#define STRINGID_CELEBRATEMESSAGE 525
#define STRINGID_USEDINSTRUCTEDMOVE 526
#define STRINGID_THROATCHOPENDS 527
#define STRINGID_PKMNCANTUSEMOVETHROATCHOP 528
#define STRINGID_LASERFOCUS 529
#define STRINGID_GEMACTIVATES 530
#define STRINGID_BERRYDMGREDUCES 531
#define STRINGID_AIRBALLOONFLOAT 532
#define STRINGID_AIRBALLOONPOP 533
#define STRINGID_INCINERATEBURN 534
#define STRINGID_BUGBITE 535
#define STRINGID_ILLUSIONWOREOFF 536
#define STRINGID_ATTACKERCUREDTARGETSTATUS 537
#define STRINGID_ATTACKERLOSTFIRETYPE 538
#define STRINGID_HEALERCURE 539
#define STRINGID_SCRIPTINGABILITYSTATRAISE 540
#define STRINGID_RECEIVERABILITYTAKEOVER 541
#define STRINGID_PKNMABSORBINGPOWER 542
#define STRINGID_NOONEWILLBEABLETORUNAWAY 543
#define STRINGID_DESTINYKNOTACTIVATES 544
#define STRINGID_CLOAKEDINAFREEZINGLIGHT 545
#define STRINGID_CLEARAMULETWONTLOWERSTATS 546
#define STRINGID_FERVENTWISHREACHED 547
#define STRINGID_AIRLOCKACTIVATES 548
#define STRINGID_PRESSUREENTERS 549
#define STRINGID_DARKAURAENTERS 550
#define STRINGID_FAIRYAURAENTERS 551
#define STRINGID_AURABREAKENTERS 552
#define STRINGID_COMATOSEENTERS 553
#define STRINGID_SCREENCLEANERENTERS 554
#define STRINGID_FETCHEDPOKEBALL 555
#define STRINGID_BATTLERABILITYRAISEDSTAT 556
#define STRINGID_ASANDSTORMKICKEDUP 557
#define STRINGID_PKMNSWILLPERISHIN3TURNS 558
#define STRINGID_ABILITYRAISEDSTATDRASTICALLY 559
#define STRINGID_AURAFLAREDTOLIFE 560
#define STRINGID_ASONEENTERS 561
#define STRINGID_CURIOUSMEDICINEENTERS 562
#define STRINGID_CANACTFASTERTHANKSTO 563
#define STRINGID_MICLEBERRYACTIVATES 564
#define STRINGID_PKMNSHOOKOFFTHETAUNT 565
#define STRINGID_PKMNGOTOVERITSINFATUATION 566
#define STRINGID_ITEMCANNOTBEREMOVED 567
#define STRINGID_STICKYBARBTRANSFER 568
#define STRINGID_PKMNBURNHEALED 569
#define STRINGID_REDCARDACTIVATE 570
#define STRINGID_EJECTBUTTONACTIVATE 571
#define STRINGID_ATKGOTOVERINFATUATION 572
#define STRINGID_TORMENTEDNOMORE 573
#define STRINGID_HEALBLOCKEDNOMORE 574
#define STRINGID_ATTACKERBECAMEFULLYCHARGED 575
#define STRINGID_ATTACKERBECAMEASHSPECIES 576
#define STRINGID_EXTREMELYHARSHSUNLIGHT 577
#define STRINGID_EXTREMESUNLIGHTFADED 578
#define STRINGID_MOVEEVAPORATEDINTHEHARSHSUNLIGHT 579
#define STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED 580
#define STRINGID_HEAVYRAIN 581
#define STRINGID_HEAVYRAINLIFTED 582
#define STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN 583
#define STRINGID_NORELIEFROMHEAVYRAIN 584
#define STRINGID_MYSTERIOUSAIRCURRENT 585
#define STRINGID_STRONGWINDSDISSIPATED 586
#define STRINGID_MYSTERIOUSAIRCURRENTBLOWSON 587
#define STRINGID_ATTACKWEAKENEDBSTRONGWINDS 588
#define STRINGID_STUFFCHEEKSCANTSELECT 589
#define STRINGID_PKMNREVERTEDTOPRIMAL 590
#define STRINGID_BUTPOKEMONCANTUSETHEMOVE 591
#define STRINGID_BUTHOOPACANTUSEIT 592
#define STRINGID_BROKETHROUGHPROTECTION 593
#define STRINGID_ABILITYALLOWSONLYMOVE 594
#define STRINGID_SWAPPEDABILITIES 595
#define STRINGID_PASTELVEILPROTECTED 596
#define STRINGID_PASTELVEILENTERS 597
#define STRINGID_BATTLERTYPECHANGEDTO 598
#define STRINGID_BOTHCANNOLONGERESCAPE 599
#define STRINGID_CANTESCAPEDUETOUSEDMOVE 600
#define STRINGID_PKMNBECAMEWEAKERTOFIRE 601
#define STRINGID_ABOUTTOUSEPOLTERGEIST 602
#define STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE 603
#define STRINGID_NEUTRALIZINGGASENTERS 604
#define STRINGID_NEUTRALIZINGGASOVER 605
#define STRINGID_TARGETTOOHEAVY 606
#define STRINGID_PKMNTOOKTARGETHIGH 607
#define STRINGID_PKMNINSNAPTRAP 608
#define STRINGID_METEORBEAMCHARGING 609
#define STRINGID_HEATUPBEAK 610
#define STRINGID_COURTCHANGE 611
#define STRINGID_PLAYERLOSTTOENEMYTRAINER 612
#define STRINGID_PLAYERPAIDPRIZEMONEY 613
#define STRINGID_ZPOWERSURROUNDS 614
#define STRINGID_ZMOVEUNLEASHED 615
#define STRINGID_ZMOVERESETSSTATS 616
#define STRINGID_ZMOVEALLSTATSUP 617
#define STRINGID_ZMOVEZBOOSTCRIT 618
#define STRINGID_ZMOVERESTOREHP 619
#define STRINGID_ZMOVESTATUP 620
#define STRINGID_ZMOVEHPTRAP 621
#define STRINGID_ATTACKEREXPELLEDTHEPOISON 622
#define STRINGID_ATTACKERSHOOKITSELFAWAKE 623
#define STRINGID_ATTACKERBROKETHROUGHPARALYSIS 624
#define STRINGID_ATTACKERHEALEDITSBURN 625
#define STRINGID_ATTACKERMELTEDTHEICE 626
#define STRINGID_TARGETTOUGHEDITOUT 627
#define STRINGID_ATTACKERLOSTELECTRICTYPE 628
#define STRINGID_ATTACKERSWITCHEDSTATWITHTARGET 629
#define STRINGID_BEINGHITCHARGEDPKMNWITHPOWER 630
#define STRINGID_SUNLIGHTACTIVATEDABILITY 631
#define STRINGID_STATWASHEIGHTENED 632
#define STRINGID_ELECTRICTERRAINACTIVATEDABILITY 633
#define STRINGID_ABILITYWEAKENEDSURROUNDINGMONSSTAT 634
#define STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN 635
#define STRINGID_PKMNSABILITYPREVENTSABILITY 636
#define STRINGID_PREPARESHELLTRAP 637
#define STRINGID_SHELLTRAPDIDNTWORK 638
#define STRINGID_SPIKESDISAPPEAREDFROMTEAM 639
#define STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM 640
#define STRINGID_STICKYWEBDISAPPEAREDFROMTEAM 641
#define STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM 642
#define STRINGID_COULDNTFULLYPROTECT 643
#define STRINGID_STOCKPILEDEFFECTWOREOFF 644
#define STRINGID_PKMNREVIVEDREADYTOFIGHT 645
#define STRINGID_ITEMRESTOREDSPECIESHEALTH 646
#define STRINGID_ITEMCUREDSPECIESSTATUS 647
#define STRINGID_ITEMRESTOREDSPECIESPP 648
#define STRINGID_THUNDERCAGETRAPPED 649
#define STRINGID_PKMNHURTBYFROSTBITE 650
#define STRINGID_PKMNGOTFROSTBITE 651
#define STRINGID_PKMNSITEMHEALEDFROSTBITE 652
#define STRINGID_ATTACKERHEALEDITSFROSTBITE 653
#define STRINGID_PKMNFROSTBITEHEALED 654
#define STRINGID_PKMNFROSTBITEHEALED2 655
#define STRINGID_PKMNFROSTBITEHEALEDBY 656
#define STRINGID_MIRRORHERBCOPIED 657
#define STRINGID_STARTEDSNOW 658
#define STRINGID_SNOWCONTINUES 659
#define STRINGID_SNOWSTOPPED 660
#define STRINGID_SNOWWARNINGSNOW 661
#define STRINGID_PKMNITEMMELTED 662
#define STRINGID_ULTRABURSTREACTING 663
#define STRINGID_ULTRABURSTCOMPLETED 664
#define STRINGID_TEAMGAINEDEXP 665
#define STRINGID_CURRENTMOVECANTSELECT 666
#define STRINGID_TARGETISBEINGSALTCURED 667
#define STRINGID_TARGETISHURTBYSALTCURE 668
#define STRINGID_TARGETCOVEREDINSTICKYCANDYSYRUP 669
#define STRINGID_SHARPSTEELFLOATS 670
#define STRINGID_SHARPSTEELDMG 671
#define STRINGID_PKMNBLEWAWAYSHARPSTEEL 672
#define STRINGID_SHARPSTEELDISAPPEAREDFROMTEAM 673
#define STRINGID_TEAMTRAPPEDWITHVINES 674
#define STRINGID_PKMNHURTBYVINES 675
#define STRINGID_TEAMCAUGHTINVORTEX 676
#define STRINGID_PKMNHURTBYVORTEX 677
#define STRINGID_TEAMSURROUNDEDBYFIRE 678
#define STRINGID_PKMNBURNINGUP 679
#define STRINGID_TEAMSURROUNDEDBYROCKS 680
#define STRINGID_PKMNHURTBYROCKSTHROWN 681
#define STRINGID_MOVEBLOCKEDBYDYNAMAX 682
#define STRINGID_ZEROTOHEROTRANSFORMATION 683
#define STRINGID_THETWOMOVESBECOMEONE 684
#define STRINGID_ARAINBOWAPPEAREDONSIDE 685
#define STRINGID_THERAINBOWDISAPPEARED 686
#define STRINGID_WAITINGFORPARTNERSMOVE 687
#define STRINGID_SEAOFFIREENVELOPEDSIDE 688
#define STRINGID_HURTBYTHESEAOFFIRE 689
#define STRINGID_THESEAOFFIREDISAPPEARED 690
#define STRINGID_SWAMPENVELOPEDSIDE 691
#define STRINGID_THESWAMPDISAPPEARED 692
#define STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE 693
#define STRINGID_HOSPITALITYRESTORATION 694
#define STRINGID_ELECTROSHOTCHARGING 695
#define STRINGID_ITEMWASUSEDUP 696
#define STRINGID_ATTACKERLOSTITSTYPE 697
#define STRINGID_SHEDITSTAIL 698
#define STRINGID_CLOAKEDINAHARSHLIGHT 699
#define STRINGID_SUPERSWEETAROMAWAFTS 700
#define STRINGID_DIMENSIONSWERETWISTED 701
#define STRINGID_BIZARREARENACREATED 702
#define STRINGID_BIZARREAREACREATED 703
#define STRINGID_TIDYINGUPCOMPLETE 704
#define STRINGID_PKMNTERASTALLIZEDINTO 705
#define STRINGID_BOOSTERENERGYACTIVATES 706
#define STRINGID_FOGCREPTUP 707
#define STRINGID_FOGISDEEP 708
#define STRINGID_FOGLIFTED 709
#define STRINGID_PKMNMADESHELLGLEAM 710
#define STRINGID_FICKLEBEAMDOUBLED 711
#define STRINGID_COMMANDERACTIVATES 712
#define STRINGID_POKEFLUTECATCHY 713
#define STRINGID_POKEFLUTE 714
#define STRINGID_MONHEARINGFLUTEAWOKE 715
#define STRINGID_SUNLIGHTISHARSH 716
#define STRINGID_ITISHAILING 717
#define STRINGID_ITISSNOWING 718
#define STRINGID_ISCOVEREDWITHGRASS 719
#define STRINGID_MISTSWIRLSAROUND 720
#define STRINGID_ELECTRICCURRENTISRUNNING 721
#define STRINGID_SEEMSWEIRD 722
#define STRINGID_WAGGLINGAFINGER 723
#define STRINGID_BLOCKEDBYSLEEPCLAUSE 724
#define STRINGID_SUPEREFFECTIVETWOFOES 725
#define STRINGID_NOTVERYEFFECTIVETWOFOES 726
#define STRINGID_ITDOESNTAFFECTTWOFOES 727
#define STRINGID_SENDCAUGHTMONPARTYORBOX 728
#define STRINGID_PKMNSENTTOPCAFTERCATCH 729
#define STRINGID_MAGICBOUNCEACTIVATES 468
#define STRINGID_PROTEANTYPECHANGE 469
#define STRINGID_SYMBIOSISITEMPASS 470
#define STRINGID_STEALTHROCKDMG 471
#define STRINGID_TOXICSPIKESABSORBED 472
#define STRINGID_TOXICSPIKESPOISONED 473
#define STRINGID_STICKYWEBSWITCHIN 474
#define STRINGID_HEALINGWISHCAMETRUE 475
#define STRINGID_HEALINGWISHHEALED 476
#define STRINGID_LUNARDANCECAMETRUE 477
#define STRINGID_CUSEDBODYDISABLED 478
#define STRINGID_ATTACKERACQUIREDABILITY 479
#define STRINGID_TARGETABILITYSTATLOWER 480
#define STRINGID_TARGETSTATWONTGOHIGHER 481
#define STRINGID_PKMNMOVEBOUNCEDABILITY 482
#define STRINGID_IMPOSTERTRANSFORM 483
#define STRINGID_ASSAULTVESTDOESNTALLOW 484
#define STRINGID_GRAVITYPREVENTSUSAGE 485
#define STRINGID_HEALBLOCKPREVENTSUSAGE 486
#define STRINGID_NOTDONEYET 487
#define STRINGID_STICKYWEBUSED 488
#define STRINGID_QUASHSUCCESS 489
#define STRINGID_PKMNBLEWAWAYTOXICSPIKES 490
#define STRINGID_PKMNBLEWAWAYSTICKYWEB 491
#define STRINGID_PKMNBLEWAWAYSTEALTHROCK 492
#define STRINGID_IONDELUGEON 493
#define STRINGID_TOPSYTURVYSWITCHEDSTATS 494
#define STRINGID_TERRAINBECOMESMISTY 495
#define STRINGID_TERRAINBECOMESGRASSY 496
#define STRINGID_TERRAINBECOMESELECTRIC 497
#define STRINGID_TERRAINBECOMESPSYCHIC 498
#define STRINGID_TARGETELECTRIFIED 499
#define STRINGID_MEGAEVOREACTING 500
#define STRINGID_MEGAEVOEVOLVED 501
#define STRINGID_DRASTICALLY 502
#define STRINGID_SEVERELY 503
#define STRINGID_INFESTATION 504
#define STRINGID_NOEFFECTONTARGET 505
#define STRINGID_BURSTINGFLAMESHIT 506
#define STRINGID_BESTOWITEMGIVING 507
#define STRINGID_THIRDTYPEADDED 508
#define STRINGID_FELLFORFEINT 509
#define STRINGID_POKEMONCANNOTUSEMOVE 510
#define STRINGID_COVEREDINPOWDER 511
#define STRINGID_POWDEREXPLODES 512
#define STRINGID_BELCHCANTSELECT 513
#define STRINGID_SPECTRALTHIEFSTEAL 514
#define STRINGID_GRAVITYGROUNDING 515
#define STRINGID_MISTYTERRAINPREVENTS 516
#define STRINGID_GRASSYTERRAINHEALS 517
#define STRINGID_ELECTRICTERRAINPREVENTS 518
#define STRINGID_PSYCHICTERRAINPREVENTS 519
#define STRINGID_SAFETYGOGGLESPROTECTED 520
#define STRINGID_FLOWERVEILPROTECTED 521
#define STRINGID_SWEETVEILPROTECTED 522
#define STRINGID_AROMAVEILPROTECTED 523
#define STRINGID_CELEBRATEMESSAGE 524
#define STRINGID_USEDINSTRUCTEDMOVE 525
#define STRINGID_THROATCHOPENDS 526
#define STRINGID_PKMNCANTUSEMOVETHROATCHOP 527
#define STRINGID_LASERFOCUS 528
#define STRINGID_GEMACTIVATES 529
#define STRINGID_BERRYDMGREDUCES 530
#define STRINGID_AIRBALLOONFLOAT 531
#define STRINGID_AIRBALLOONPOP 532
#define STRINGID_INCINERATEBURN 533
#define STRINGID_BUGBITE 534
#define STRINGID_ILLUSIONWOREOFF 535
#define STRINGID_ATTACKERCUREDTARGETSTATUS 536
#define STRINGID_ATTACKERLOSTFIRETYPE 537
#define STRINGID_HEALERCURE 538
#define STRINGID_SCRIPTINGABILITYSTATRAISE 539
#define STRINGID_RECEIVERABILITYTAKEOVER 540
#define STRINGID_PKNMABSORBINGPOWER 541
#define STRINGID_NOONEWILLBEABLETORUNAWAY 542
#define STRINGID_DESTINYKNOTACTIVATES 543
#define STRINGID_CLOAKEDINAFREEZINGLIGHT 544
#define STRINGID_CLEARAMULETWONTLOWERSTATS 545
#define STRINGID_FERVENTWISHREACHED 546
#define STRINGID_AIRLOCKACTIVATES 547
#define STRINGID_PRESSUREENTERS 548
#define STRINGID_DARKAURAENTERS 549
#define STRINGID_FAIRYAURAENTERS 550
#define STRINGID_AURABREAKENTERS 551
#define STRINGID_COMATOSEENTERS 552
#define STRINGID_SCREENCLEANERENTERS 553
#define STRINGID_FETCHEDPOKEBALL 554
#define STRINGID_BATTLERABILITYRAISEDSTAT 555
#define STRINGID_ASANDSTORMKICKEDUP 556
#define STRINGID_PKMNSWILLPERISHIN3TURNS 557
#define STRINGID_ABILITYRAISEDSTATDRASTICALLY 558
#define STRINGID_AURAFLAREDTOLIFE 559
#define STRINGID_ASONEENTERS 560
#define STRINGID_CURIOUSMEDICINEENTERS 561
#define STRINGID_CANACTFASTERTHANKSTO 562
#define STRINGID_MICLEBERRYACTIVATES 563
#define STRINGID_PKMNSHOOKOFFTHETAUNT 564
#define STRINGID_PKMNGOTOVERITSINFATUATION 565
#define STRINGID_ITEMCANNOTBEREMOVED 566
#define STRINGID_STICKYBARBTRANSFER 567
#define STRINGID_PKMNBURNHEALED 568
#define STRINGID_REDCARDACTIVATE 569
#define STRINGID_EJECTBUTTONACTIVATE 570
#define STRINGID_ATKGOTOVERINFATUATION 571
#define STRINGID_TORMENTEDNOMORE 572
#define STRINGID_HEALBLOCKEDNOMORE 573
#define STRINGID_ATTACKERBECAMEFULLYCHARGED 574
#define STRINGID_ATTACKERBECAMEASHSPECIES 575
#define STRINGID_EXTREMELYHARSHSUNLIGHT 576
#define STRINGID_EXTREMESUNLIGHTFADED 577
#define STRINGID_MOVEEVAPORATEDINTHEHARSHSUNLIGHT 578
#define STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED 579
#define STRINGID_HEAVYRAIN 580
#define STRINGID_HEAVYRAINLIFTED 581
#define STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN 582
#define STRINGID_NORELIEFROMHEAVYRAIN 583
#define STRINGID_MYSTERIOUSAIRCURRENT 584
#define STRINGID_STRONGWINDSDISSIPATED 585
#define STRINGID_MYSTERIOUSAIRCURRENTBLOWSON 586
#define STRINGID_ATTACKWEAKENEDBSTRONGWINDS 587
#define STRINGID_STUFFCHEEKSCANTSELECT 588
#define STRINGID_PKMNREVERTEDTOPRIMAL 589
#define STRINGID_BUTPOKEMONCANTUSETHEMOVE 590
#define STRINGID_BUTHOOPACANTUSEIT 591
#define STRINGID_BROKETHROUGHPROTECTION 592
#define STRINGID_ABILITYALLOWSONLYMOVE 593
#define STRINGID_SWAPPEDABILITIES 594
#define STRINGID_PASTELVEILPROTECTED 595
#define STRINGID_PASTELVEILENTERS 596
#define STRINGID_BATTLERTYPECHANGEDTO 597
#define STRINGID_BOTHCANNOLONGERESCAPE 598
#define STRINGID_CANTESCAPEDUETOUSEDMOVE 599
#define STRINGID_PKMNBECAMEWEAKERTOFIRE 600
#define STRINGID_ABOUTTOUSEPOLTERGEIST 601
#define STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE 602
#define STRINGID_NEUTRALIZINGGASENTERS 603
#define STRINGID_NEUTRALIZINGGASOVER 604
#define STRINGID_TARGETTOOHEAVY 605
#define STRINGID_PKMNTOOKTARGETHIGH 606
#define STRINGID_PKMNINSNAPTRAP 607
#define STRINGID_METEORBEAMCHARGING 608
#define STRINGID_HEATUPBEAK 609
#define STRINGID_COURTCHANGE 610
#define STRINGID_PLAYERLOSTTOENEMYTRAINER 611
#define STRINGID_PLAYERPAIDPRIZEMONEY 612
#define STRINGID_ZPOWERSURROUNDS 613
#define STRINGID_ZMOVEUNLEASHED 614
#define STRINGID_ZMOVERESETSSTATS 615
#define STRINGID_ZMOVEALLSTATSUP 616
#define STRINGID_ZMOVEZBOOSTCRIT 617
#define STRINGID_ZMOVERESTOREHP 618
#define STRINGID_ZMOVESTATUP 619
#define STRINGID_ZMOVEHPTRAP 620
#define STRINGID_ATTACKEREXPELLEDTHEPOISON 621
#define STRINGID_ATTACKERSHOOKITSELFAWAKE 622
#define STRINGID_ATTACKERBROKETHROUGHPARALYSIS 623
#define STRINGID_ATTACKERHEALEDITSBURN 624
#define STRINGID_ATTACKERMELTEDTHEICE 625
#define STRINGID_TARGETTOUGHEDITOUT 626
#define STRINGID_ATTACKERLOSTELECTRICTYPE 627
#define STRINGID_ATTACKERSWITCHEDSTATWITHTARGET 628
#define STRINGID_BEINGHITCHARGEDPKMNWITHPOWER 629
#define STRINGID_SUNLIGHTACTIVATEDABILITY 630
#define STRINGID_STATWASHEIGHTENED 631
#define STRINGID_ELECTRICTERRAINACTIVATEDABILITY 632
#define STRINGID_ABILITYWEAKENEDSURROUNDINGMONSSTAT 633
#define STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN 634
#define STRINGID_PKMNSABILITYPREVENTSABILITY 635
#define STRINGID_PREPARESHELLTRAP 636
#define STRINGID_SHELLTRAPDIDNTWORK 637
#define STRINGID_SPIKESDISAPPEAREDFROMTEAM 638
#define STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM 639
#define STRINGID_STICKYWEBDISAPPEAREDFROMTEAM 640
#define STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM 641
#define STRINGID_COULDNTFULLYPROTECT 642
#define STRINGID_STOCKPILEDEFFECTWOREOFF 643
#define STRINGID_PKMNREVIVEDREADYTOFIGHT 644
#define STRINGID_ITEMRESTOREDSPECIESHEALTH 645
#define STRINGID_ITEMCUREDSPECIESSTATUS 646
#define STRINGID_ITEMRESTOREDSPECIESPP 647
#define STRINGID_THUNDERCAGETRAPPED 648
#define STRINGID_PKMNHURTBYFROSTBITE 649
#define STRINGID_PKMNGOTFROSTBITE 650
#define STRINGID_PKMNSITEMHEALEDFROSTBITE 651
#define STRINGID_ATTACKERHEALEDITSFROSTBITE 652
#define STRINGID_PKMNFROSTBITEHEALED 653
#define STRINGID_PKMNFROSTBITEHEALED2 654
#define STRINGID_PKMNFROSTBITEHEALEDBY 655
#define STRINGID_MIRRORHERBCOPIED 656
#define STRINGID_STARTEDSNOW 657
#define STRINGID_SNOWCONTINUES 658
#define STRINGID_SNOWSTOPPED 659
#define STRINGID_SNOWWARNINGSNOW 660
#define STRINGID_PKMNITEMMELTED 661
#define STRINGID_ULTRABURSTREACTING 662
#define STRINGID_ULTRABURSTCOMPLETED 663
#define STRINGID_TEAMGAINEDEXP 664
#define STRINGID_CURRENTMOVECANTSELECT 665
#define STRINGID_TARGETISBEINGSALTCURED 666
#define STRINGID_TARGETISHURTBYSALTCURE 667
#define STRINGID_TARGETCOVEREDINSTICKYCANDYSYRUP 668
#define STRINGID_SHARPSTEELFLOATS 669
#define STRINGID_SHARPSTEELDMG 670
#define STRINGID_PKMNBLEWAWAYSHARPSTEEL 671
#define STRINGID_SHARPSTEELDISAPPEAREDFROMTEAM 672
#define STRINGID_TEAMTRAPPEDWITHVINES 673
#define STRINGID_PKMNHURTBYVINES 674
#define STRINGID_TEAMCAUGHTINVORTEX 675
#define STRINGID_PKMNHURTBYVORTEX 676
#define STRINGID_TEAMSURROUNDEDBYFIRE 677
#define STRINGID_PKMNBURNINGUP 678
#define STRINGID_TEAMSURROUNDEDBYROCKS 679
#define STRINGID_PKMNHURTBYROCKSTHROWN 680
#define STRINGID_MOVEBLOCKEDBYDYNAMAX 681
#define STRINGID_ZEROTOHEROTRANSFORMATION 682
#define STRINGID_THETWOMOVESBECOMEONE 683
#define STRINGID_ARAINBOWAPPEAREDONSIDE 684
#define STRINGID_THERAINBOWDISAPPEARED 685
#define STRINGID_WAITINGFORPARTNERSMOVE 686
#define STRINGID_SEAOFFIREENVELOPEDSIDE 687
#define STRINGID_HURTBYTHESEAOFFIRE 688
#define STRINGID_THESEAOFFIREDISAPPEARED 689
#define STRINGID_SWAMPENVELOPEDSIDE 690
#define STRINGID_THESWAMPDISAPPEARED 691
#define STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE 692
#define STRINGID_HOSPITALITYRESTORATION 693
#define STRINGID_ELECTROSHOTCHARGING 694
#define STRINGID_ITEMWASUSEDUP 695
#define STRINGID_ATTACKERLOSTITSTYPE 696
#define STRINGID_SHEDITSTAIL 697
#define STRINGID_CLOAKEDINAHARSHLIGHT 698
#define STRINGID_SUPERSWEETAROMAWAFTS 699
#define STRINGID_DIMENSIONSWERETWISTED 700
#define STRINGID_BIZARREARENACREATED 701
#define STRINGID_BIZARREAREACREATED 702
#define STRINGID_TIDYINGUPCOMPLETE 703
#define STRINGID_PKMNTERASTALLIZEDINTO 704
#define STRINGID_BOOSTERENERGYACTIVATES 705
#define STRINGID_FOGCREPTUP 706
#define STRINGID_FOGISDEEP 707
#define STRINGID_FOGLIFTED 708
#define STRINGID_PKMNMADESHELLGLEAM 709
#define STRINGID_FICKLEBEAMDOUBLED 710
#define STRINGID_COMMANDERACTIVATES 711
#define STRINGID_POKEFLUTECATCHY 712
#define STRINGID_POKEFLUTE 713
#define STRINGID_MONHEARINGFLUTEAWOKE 714
#define STRINGID_SUNLIGHTISHARSH 715
#define STRINGID_ITISHAILING 716
#define STRINGID_ITISSNOWING 717
#define STRINGID_ISCOVEREDWITHGRASS 718
#define STRINGID_MISTSWIRLSAROUND 719
#define STRINGID_ELECTRICCURRENTISRUNNING 720
#define STRINGID_SEEMSWEIRD 721
#define STRINGID_WAGGLINGAFINGER 722
#define STRINGID_BLOCKEDBYSLEEPCLAUSE 723
#define STRINGID_SUPEREFFECTIVETWOFOES 724
#define STRINGID_NOTVERYEFFECTIVETWOFOES 725
#define STRINGID_ITDOESNTAFFECTTWOFOES 726
#define STRINGID_SENDCAUGHTMONPARTYORBOX 727
#define STRINGID_PKMNSENTTOPCAFTERCATCH 728
#define STRINGID_PKMNDYNAMAXED 729
#define STRINGID_PKMNGIGANTAMAXED 730
#define STRINGID_TIMETODYNAMAX 731
#define STRINGID_TIMETOGIGANTAMAX 732
#define BATTLESTRINGS_COUNT 730
#define BATTLESTRINGS_COUNT 733
// This is the string id that gBattleStringsTable starts with.
// String ids before this (e.g. STRINGID_INTROMSG) are not in the table,

View File

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

View File

@ -1,9 +1,9 @@
#ifndef GUARD_CONSTANTS_EXPANSION_H
#define GUARD_CONSTANTS_EXPANSION_H
// Last version: 1.10.2
// Last version: 1.11.1
#define EXPANSION_VERSION_MAJOR 1
#define EXPANSION_VERSION_MINOR 11
#define EXPANSION_VERSION_MINOR 12
#define EXPANSION_VERSION_PATCH 0
// FALSE if this this version of Expansion is not a tagged commit, i.e.

View File

@ -76,6 +76,7 @@
#define FLDEFF_TRACKS_SPOT 71
#define FLDEFF_TRACKS_BUG 72
#define FLDEFF_CAVE_DUST 73
#define FLDEFF_DEFOG 74
#define FLDEFFOBJ_SHADOW_S 0
#define FLDEFFOBJ_SHADOW_M 1

View File

@ -1660,4 +1660,16 @@
#define FLAG_TEMP_HIDE_FOLLOWER FLAG_TEMP_E
#define FLAG_TEMP_HIDE_MIRAGE_ISLAND_BERRY_TREE FLAG_TEMP_11
#if TESTING
#define TESTING_FLAGS_START 0x5000
#define TESTING_FLAG_SLEEP_CLAUSE (TESTING_FLAGS_START + 0x0)
#define TESTING_FLAG_UNUSED_1 (TESTING_FLAGS_START + 0x1)
#define TESTING_FLAG_UNUSED_2 (TESTING_FLAGS_START + 0x2)
#define TESTING_FLAG_UNUSED_3 (TESTING_FLAGS_START + 0x3)
#define TESTING_FLAG_UNUSED_4 (TESTING_FLAGS_START + 0x4)
#define TESTING_FLAG_UNUSED_5 (TESTING_FLAGS_START + 0x5)
#define TESTING_FLAG_UNUSED_6 (TESTING_FLAGS_START + 0x6)
#define TESTING_FLAG_UNUSED_7 (TESTING_FLAGS_START + 0x7)
#endif // TESTING
#endif // GUARD_CONSTANTS_FLAGS_H

View File

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

View File

@ -300,6 +300,17 @@ enum EvolutionMethods {
EVO_ITEM_COUNT_999, // Pokémon levels up after trainer has collected 999 of a specific item
EVO_DEFEAT_THREE_WITH_ITEM, // Pokémon levels up after having defeat 3 Pokémon of the same species holding the specified item
EVO_OVERWORLD_STEPS, // Pokémon levels up after having taken a specific amount of steps in the overworld
// Alcremie evolutions methods. Different combinations of day, spin rotation and duration.
EVO_ITEM_HOLD_SPIN_DAY_LESS_THAN_5_SECS_CLOCKWISE,
EVO_ITEM_HOLD_SPIN_DAY_LESS_THAN_5_SECS_COUNTER_CLOCKWISE,
EVO_ITEM_HOLD_SPIN_NIGHT_LESS_THAN_5_SECS_CLOCKWISE,
EVO_ITEM_HOLD_SPIN_NIGHT_LESS_THAN_5_SECS_COUNTER_CLOCKWISE,
EVO_ITEM_HOLD_SPIN_DAY_MORE_THAN_5_SECS_CLOCKWISE,
EVO_ITEM_HOLD_SPIN_DAY_MORE_THAN_5_SECS_COUNTER_CLOCKWISE,
EVO_ITEM_HOLD_SPIN_NIGHT_MORE_THAN_5_SECS_CLOCKWISE,
EVO_ITEM_HOLD_SPIN_NIGHT_MORE_THAN_5_SECS_COUNTER_CLOCKWISE,
EVO_ITEM_HOLD_SPIN_DUSK_MORE_THAN_10_SECS,
};
enum EvolutionMode {
@ -313,6 +324,14 @@ enum EvolutionMode {
EVO_MODE_BATTLE_ONLY, // This mode is only used in battles to support Tandemaus' unique requirement
};
enum PokemonJumpType{
PKMN_JUMP_TYPE_NONE, // Not allowed in Pokémon Jump
PKMN_JUMP_TYPE_NORMAL,
PKMN_JUMP_TYPE_FAST,
PKMN_JUMP_TYPE_SLOW,
};
#define MON_PIC_WIDTH 64
#define MON_PIC_HEIGHT 64
#define MON_PIC_SIZE (MON_PIC_WIDTH * MON_PIC_HEIGHT / 2)

View File

@ -324,4 +324,16 @@
#define VAR_TEMP_TRANSFERRED_SPECIES VAR_TEMP_1
#if TESTING
#define TESTING_VARS_START 0x9000
#define TESTING_VAR_DIFFICULTY (TESTING_VARS_START + 0x0)
#define TESTING_VAR_UNUSED_1 (TESTING_VARS_START + 0x1)
#define TESTING_VAR_UNUSED_2 (TESTING_VARS_START + 0x2)
#define TESTING_VAR_UNUSED_3 (TESTING_VARS_START + 0x3)
#define TESTING_VAR_UNUSED_4 (TESTING_VARS_START + 0x4)
#define TESTING_VAR_UNUSED_5 (TESTING_VARS_START + 0x5)
#define TESTING_VAR_UNUSED_6 (TESTING_VARS_START + 0x6)
#define TESTING_VAR_UNUSED_7 (TESTING_VARS_START + 0x7)
#endif // TESTING
#endif // GUARD_CONSTANTS_VARS_H

View File

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

View File

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

View File

@ -407,6 +407,7 @@ extern const u8 EventScript_UseCut[];
extern const u8 EventScript_UseRockSmash[];
extern const u8 EventScript_UseDig[];
extern const u8 EventScript_UseCutGrass[];
extern const u8 EventScript_UseDefog[];
//player pc
extern const u8 LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC[];

View File

@ -68,5 +68,8 @@ bool8 ObjectMovingOnRockStairs(struct ObjectEvent *objectEvent, u8 direction);
//sideways stairs
u8 GetRightSideStairsDirection(u8 direction);
u8 GetLeftSideStairsDirection(u8 direction);
void UpdateSpinData(void);
void ResetSpinTimer(void);
bool32 CanTriggerSpinEvolution();
#endif // GUARD_FIELD_PLAYER_AVATAR_H

View File

@ -51,4 +51,8 @@ u8 CreateFieldMoveTask(void);
bool8 SetUpFieldMove_RockSmash(void);
bool8 FldEff_UseRockSmash(void);
// defog
bool8 SetUpFieldMove_Defog(void);
bool8 FldEff_Defog(void);
#endif // GUARD_FLDEFF_H

View File

@ -14,6 +14,8 @@ 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,
[GEN_CONFIG_BATTLE_BOND] = B_BATTLE_BOND,
};
#if TESTING

View File

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

View File

@ -306,7 +306,7 @@ extern const u16 gPokedexSearchMenu_Pal[];
extern const u32 gBerryCheck_Gfx[];
extern const u32 gBerryCheck_Pal[];
extern const u32 gBerryTag_Gfx[];
extern const u32 gBerryTag_Pal[];
extern const u32 gBerryTag_Tilemap[];
// rayquaza scene gfx
extern const u32 gRaySceneDuoFight_Groudon_Gfx[];
@ -3039,11 +3039,11 @@ extern const u32 gBattleAnimBgTilemap_PsychicTerrain[];
extern const u32 gBattleAnimBgImage_ShatteredPsyche[];
extern const u32 gBattleAnimBgPalette_ShatteredPsyche[];
extern const u32 gBattleAnimBgTilemap_ShatteredPsyche[];
extern const u32 gBattleAnimBgImage_SkyDay[];
extern const u32 gBattleAnimBgPalette_SkyDay[];
extern const u32 gBattleAnimBgTilemap_SkyDay[];
extern const u32 gBattleAnimBgPalette_SkyAfternoon[];
extern const u32 gBattleAnimBgPalette_SkyNight[];
extern const u32 gBattleAnimBgImage_RockField[];
extern const u32 gBattleAnimBgPalette_RockDay[];
extern const u32 gBattleAnimBgTilemap_RockField[];
extern const u32 gBattleAnimBgPalette_RockAfternoon[];
extern const u32 gBattleAnimBgPalette_RockNight[];
extern const u32 gBattleAnimBgImage_SnuggleForever[];
extern const u32 gBattleAnimBgPalette_SnuggleForever[];
extern const u32 gBattleAnimBgTilemap_SnuggleForever[];

View File

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

View File

@ -38,6 +38,30 @@ struct AdditionalEffect
u8 chance; // 0% = effect certain, primary effect
};
enum ProtectType
{
PROTECT_TYPE_NONE,
PROTECT_TYPE_SIDE,
PROTECT_TYPE_SINGLE,
};
enum ProtectMethod
{
PROTECT_NONE,
PROTECT_NORMAL,
PROTECT_SPIKY_SHIELD,
PROTECT_KINGS_SHIELD,
PROTECT_BANEFUL_BUNKER,
PROTECT_BURNING_BULWARK,
PROTECT_OBSTRUCT,
PROTECT_SILK_TRAP,
PROTECT_MAX_GUARD,
PROTECT_WIDE_GUARD,
PROTECT_QUICK_GUARD,
PROTECT_CRAFTY_SHIELD,
PROTECT_MAT_BLOCK,
};
struct MoveInfo
{
const u8 *name;
@ -56,7 +80,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 +97,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 +104,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 +129,7 @@ struct MoveInfo
bool32 sketchBanned:1;
//Other
bool32 validApprenticeMove:1;
u32 padding:3;
u32 padding:10;
// end of word
union {
@ -114,16 +137,14 @@ struct MoveInfo
u16 stringId;
u16 status;
} twoTurnAttack;
struct {
u16 side;
u16 property; // can be used to remove the hardcoded values
} protect;
u32 protectMethod;
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 +233,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;
@ -452,9 +468,9 @@ static inline u32 GetMoveTwoTurnAttackWeather(u32 moveId)
return gMovesInfo[SanitizeMoveId(moveId)].argument.twoTurnAttack.status;
}
static inline u32 GetMoveProtectSide(u32 moveId)
static inline u32 GetMoveProtectMethod(u32 moveId)
{
return gMovesInfo[SanitizeMoveId(moveId)].argument.protect.side;
return gMovesInfo[SanitizeMoveId(moveId)].argument.protectMethod;
}
static inline u32 GetMoveEffectArg_Status(u32 moveId)
@ -490,6 +506,11 @@ static inline u32 GetMoveAbsorbPercentage(u32 moveId)
return gMovesInfo[moveId].argument.absorbPercentage;
}
static inline u32 GetMoveRecoil(u32 moveId)
{
return gMovesInfo[SanitizeMoveId(moveId)].argument.recoilPercentage;
}
static inline const struct AdditionalEffect *GetMoveAdditionalEffectById(u32 moveId, u32 effect)
{
return &gMovesInfo[SanitizeMoveId(moveId)].additionalEffects[effect];

View File

@ -1,6 +1,16 @@
#ifndef GUARD_POKEDEX_AREA_SCREEN_H
#define GUARD_POKEDEX_AREA_SCREEN_H
void ShowPokedexAreaScreen(u16, u8 *);
#include "rtc.h"
extern u8 gAreaTimeOfDay;
enum PokedexAreaScreenState
{
DEX_SHOW_AREA_SCREEN,
DEX_UPDATE_AREA_SCREEN
};
void DisplayPokedexAreaScreen(u16 species, u8 *screenSwitchState, enum TimeOfDay timeOfDay, enum PokedexAreaScreenState areaState);
#endif // GUARD_POKEDEX_AREA_SCREEN_H

View File

@ -428,7 +428,7 @@ struct SpeciesInfo /*0xC4*/
#else
u8 paddingF:3;
#endif //P_GENDER_DIFFERENCES
u8 padding3:2;
u8 pokemonJumpType:2; // According to the clerk, the Pokémon allowed in Pokémon Jump are all <= 28 inches/71 cm, and do not only swim, burrow, or fly.
u8 enemyMonElevation; // This determines how much higher above the usual position the enemy Pokémon is during battle. Species that float or fly have nonzero values.
// Flags
u32 isLegendary:1;
@ -608,6 +608,9 @@ extern u8 gEnemyPartyCount;
extern struct Pokemon gEnemyParty[PARTY_SIZE];
extern struct SpriteTemplate gMultiuseSpriteTemplate;
extern u16 gFollowerSteps;
extern bool32 consumeItem;
extern u32 removeBagItem;
extern u32 removeBagItemCount;
extern const u8 gFacilityClassToPicIndex[];
extern const u8 gFacilityClassToTrainerClass[];
@ -790,6 +793,7 @@ u32 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32
bool32 DoesSpeciesHaveFormChangeMethod(u16 species, u16 method);
u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove);
void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv);
void TrySpecialOverworldEvo(void);
bool32 SpeciesHasGenderDifferences(u16 species);
bool32 TryFormChange(u32 monId, u32 side, u16 method);
void TryToSetBattleFormChangeMoves(struct Pokemon *mon, u16 method);
@ -809,5 +813,6 @@ u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler);
uq4_12_t GetDynamaxLevelHPMultiplier(u32 dynamaxLevel, bool32 inverseMultiplier);
u32 GetRegionalFormByRegion(u32 species, u32 region);
bool32 IsSpeciesForeignRegionalForm(u32 species, u32 currentRegion);
void DoRemoveItems(struct Pokemon *mon);
#endif // GUARD_POKEMON_H

View File

@ -1,7 +1,9 @@
#ifndef GUARD_RTC_UTIL_H
#define GUARD_RTC_UTIL_H
#include "global.h"
#include "siirtc.h"
#include "config/overworld.h"
#define RTC_INIT_ERROR 0x0001
#define RTC_INIT_WARNING 0x0002
@ -83,10 +85,17 @@
#define NIGHT_HOUR_END 6
#endif
#define TIME_MORNING 0
#define TIME_DAY 1
#define TIME_EVENING 2
#define TIME_NIGHT 3
// TIMES_OF_DAY_COUNT must be last
enum TimeOfDay
{
TIME_MORNING,
TIME_DAY,
TIME_EVENING,
TIME_NIGHT,
TIMES_OF_DAY_COUNT,
};
STATIC_ASSERT(OW_TIME_OF_DAY_DEFAULT == 0, TimeOfDayDefaultMustBeFirstElementInTimeOfDayEnum)
extern struct Time gLocalTime;
@ -112,12 +121,15 @@ void FormatHexDate(u8 *dest, s32 year, s32 month, s32 day);
void RtcCalcTimeDifference(struct SiiRtcInfo *rtc, struct Time *result, struct Time *t);
void RtcCalcLocalTime(void);
bool8 IsBetweenHours(s32 hours, s32 begin, s32 end);
u8 GetTimeOfDay(void);
enum TimeOfDay GetTimeOfDay(void);
enum TimeOfDay GetTimeOfDayForDex(void);
void RtcInitLocalTimeOffset(s32 hour, s32 minute);
void RtcCalcLocalTimeOffset(s32 days, s32 hours, s32 minutes, s32 seconds);
void CalcTimeDifference(struct Time *result, struct Time *t1, struct Time *t2);
u32 RtcGetMinuteCount(void);
u32 RtcGetLocalDayCount(void);
void FormatDecimalTimeWithoutSeconds(u8 *dest, s8 hour, s8 minute, bool32 is24Hour);
enum TimeOfDay TryIncrementTimeOfDay(enum TimeOfDay timeOfDay);
enum TimeOfDay TryDecrementTimeOfDay(enum TimeOfDay timeOfDay);
#endif // GUARD_RTC_UTIL_H

View File

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

View File

@ -1,8 +1,19 @@
#ifndef GUARD_WILD_ENCOUNTER_H
#define GUARD_WILD_ENCOUNTER_H
#include "rtc.h"
#include "constants/wild_encounter.h"
#define HEADER_NONE 0xFFFF
enum WildPokemonArea {
WILD_AREA_LAND,
WILD_AREA_WATER,
WILD_AREA_ROCKS,
WILD_AREA_FISHING,
WILD_AREA_HIDDEN
};
struct WildPokemon
{
u8 minLevel;
@ -16,17 +27,28 @@ struct WildPokemonInfo
const struct WildPokemon *wildPokemon;
};
struct WildEncounterTypes
{
const struct WildPokemonInfo *landMonsInfo;
const struct WildPokemonInfo *waterMonsInfo;
const struct WildPokemonInfo *rockSmashMonsInfo;
const struct WildPokemonInfo *fishingMonsInfo;
const struct WildPokemonInfo *hiddenMonsInfo;
};
struct WildPokemonHeader
{
u8 mapGroup;
u8 mapNum;
const struct WildPokemonInfo *landMonsInfo;
const struct WildPokemonInfo *waterMonsInfo;
const struct WildPokemonInfo *rockSmashMonsInfo;
const struct WildPokemonInfo *hiddenMonsInfo;
const struct WildPokemonInfo *fishingMonsInfo;
#if OW_TIME_OF_DAY_ENCOUNTERS
const struct WildEncounterTypes encounterTypes[TIMES_OF_DAY_COUNT];
#else
const struct WildEncounterTypes encounterTypes[1];
#endif
};
extern const struct WildPokemonHeader gWildMonHeaders[];
extern bool8 gIsFishingEncounter;
extern bool8 gIsSurfingEncounter;
@ -50,5 +72,6 @@ u8 ChooseWildMonIndex_Land(void);
u8 ChooseWildMonIndex_WaterRock(void);
u8 ChooseHiddenMonIndex(void);
bool32 MapHasNoEncounterData(void);
enum TimeOfDay GetTimeOfDayForEncounters(u32 headerId, enum WildPokemonArea area);
#endif // GUARD_WILD_ENCOUNTER_H

View File

@ -52,6 +52,7 @@ bool32 InitWindows(const struct WindowTemplate *templates);
u32 AddWindow(const struct WindowTemplate *template);
int AddWindowWithoutTileMap(const struct WindowTemplate *template);
void RemoveWindow(u32 windowId);
void RemoveAllWindowsOnBg(u32 bgId);
void FreeAllWindowBuffers(void);
void CopyWindowToVram(u32 windowId, u32 mode);
void CopyWindowRectToVram(u32 windowId, u32 mode, u32 x, u32 y, u32 w, u32 h);

View File

@ -1,12 +1,6 @@
# JSON files are run through jsonproc, which is a tool that converts JSON data to an output file
# based on an Inja template. https://github.com/pantor/inja
AUTO_GEN_TARGETS += $(DATA_SRC_SUBDIR)/wild_encounters.h
$(DATA_SRC_SUBDIR)/wild_encounters.h: $(DATA_SRC_SUBDIR)/wild_encounters.json $(DATA_SRC_SUBDIR)/wild_encounters.json.txt
$(JSONPROC) $^ $@
$(C_BUILDDIR)/wild_encounter.o: c_dep += $(DATA_SRC_SUBDIR)/wild_encounters.h
AUTO_GEN_TARGETS += $(DATA_SRC_SUBDIR)/region_map/region_map_entries.h
$(DATA_SRC_SUBDIR)/region_map/region_map_entries.h: $(DATA_SRC_SUBDIR)/region_map/region_map_sections.json $(DATA_SRC_SUBDIR)/region_map/region_map_sections.json.txt
$(JSONPROC) $^ $@

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