Merge pull request #2 from rh-hideout/master

Merge 1.8.4
This commit is contained in:
wiz1989
2024-07-04 16:23:13 +02:00
committed by GitHub
3141 changed files with 1536345 additions and 178846 deletions

View File

@@ -23,22 +23,26 @@ body:
label: Version
description: What version of pokeemerald-expansion are you using as a base?
options:
- 1.6.2 (Default)
- 1.8.4 (Latest release)
- master (default, unreleased bugfixes)
- upcoming (Edge)
- 1.6.1
- 1.6.0
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- pre-1.5.0
- 1.8.3
- 1.8.2
- 1.8.1
- 1.8.0
- 1.7.4
- 1.7.3
- 1.7.2
- 1.7.1
- 1.7.0
- pre-1.7.0
validations:
required: true
- type: input
id: upcomingversion
attributes:
label: Upcoming Version
description: If you're using the upcoming branch, please specify what was the commit hash you pulled from.
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.
validations:
required: false
- type: input

View File

@@ -23,22 +23,25 @@ body:
label: Version
description: What version of pokeemerald-expansion are you using as a base?
options:
- 1.6.2 (Default)
- 1.8.4 (Latest release)
- master (default, unreleased bugfixes)
- upcoming (Edge)
- 1.6.1
- 1.6.0
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- pre-1.5.0
- 1.8.3
- 1.8.1
- 1.8.0
- 1.7.4
- 1.7.3
- 1.7.2
- 1.7.1
- 1.7.0
- pre-1.7.0
validations:
required: true
- type: input
id: upcomingversion
attributes:
label: Upcoming Version
description: If you're using the upcoming branch, please specify what was the commit hash you pulled from.
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.
validations:
required: false
- type: input

View File

@@ -23,22 +23,25 @@ body:
label: Version
description: What version of pokeemerald-expansion are you using as a base?
options:
- 1.6.2 (Default)
- 1.8.4 (Latest release)
- master (default, unreleased bugfixes)
- upcoming (Edge)
- 1.6.1
- 1.6.0
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- pre-1.5.0
- 1.8.3
- 1.8.1
- 1.8.0
- 1.7.4
- 1.7.3
- 1.7.2
- 1.7.1
- 1.7.0
- pre-1.7.0
validations:
required: true
- type: input
id: upcomingversion
attributes:
label: Upcoming Version
description: If you're using the upcoming branch, please specify what was the commit hash you pulled from.
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.
validations:
required: false
- type: input

View File

@@ -11,6 +11,15 @@
<!-- Format: "Fixes #2345, fixes #4523, fixes #2222." -->
<!-- If it doesn't apply, feel free to remove this section. -->
## **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. -->
<!-- If it doesn't apply, feel free to remove this section. -->
## 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. -->
## **Discord contact info**
<!--- formatted as name#numbers, e.g. Lunos#4026 -->
<!--- Contributors must join https://discord.gg/6CzjAG6GZk -->
<!--- Contributors must join https://discord.gg/6CzjAG6GZk -->

View File

@@ -10,12 +10,14 @@ on:
jobs:
build:
runs-on: ubuntu-latest
container: devkitpro/devkitarm
env:
GAME_VERSION: EMERALD
GAME_REVISION: 0
GAME_LANGUAGE: ENGLISH
MODERN: 0
COMPARE: 0
UNUSED_ERROR: 1
steps:
- name: Checkout
uses: actions/checkout@v2
@@ -27,7 +29,9 @@ jobs:
repository: pret/agbcc
- name: Install binutils
run: sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi libelf-dev
run: |
sudo apt update
sudo apt install -y build-essential libpng-dev libelf-dev
# build-essential, git, and libpng-dev are already installed
# gcc-arm-none-eabi is only needed for the modern build
# as an alternative to dkP
@@ -39,6 +43,9 @@ jobs:
working-directory: agbcc
- name: Agbcc
env:
MODERN: 0
COMPARE: 0
run: make -j${nproc} -O all
- name: Modern
@@ -49,6 +56,7 @@ jobs:
- name: Test
env:
MODERN: 1
TEST: 1
run: |
make -j${nproc} -O pokeemerald-test.elf

48
.github/workflows/docs.yml vendored Normal file
View File

@@ -0,0 +1,48 @@
name: Docs
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
contents: write
pages: write
id-token: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install latest mdbook
run: |
tag=$(curl 'https://api.github.com/repos/rust-lang/mdbook/releases/latest' | jq -r '.tag_name')
url="https://github.com/rust-lang/mdbook/releases/download/${tag}/mdbook-${tag}-x86_64-unknown-linux-gnu.tar.gz"
mkdir mdbook
curl -sSL $url | tar -xz --directory=./mdbook
echo `pwd`/mdbook >> $GITHUB_PATH
- name: Build Book
run: |
cd docs
mdbook build
- name: Check if Pages is enabled
uses: octokit/request-action@v2.x
id: check_pages
continue-on-error: true
with:
route: GET /repos/{repo}/pages
repo: ${{ github.repository }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Pages
uses: actions/configure-pages@v4
if: steps.check_pages.outcome == 'success'
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: 'docs/book'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
if: steps.check_pages.outcome == 'success'

3
.gitignore vendored
View File

@@ -21,7 +21,6 @@ sound/**/*.bin
sound/songs/midi/*.s
tools/agbcc
*.map
*.ld
*.bat
*.dump
*.sa*
@@ -39,3 +38,5 @@ prefabs.json
*.diff
*.sym
*.js
src/data/map_group_count.h
tools/trainerproc/trainerproc

View File

@@ -1,122 +1,48 @@
# Pokeemerald-Expansion Changelog
# Pokeemerald-Expansion Changelogs
# Version 1.6.2
## 1.8.x
- ### [Version 1.8.4](docs/changelogs/1.8.x/1.8.4.md) - Bugfix Release 🧹
- ### [Version 1.8.3](docs/changelogs/1.8.x/1.8.3.md) - Bugfix Release 🧹
- ### [Version 1.8.2](docs/changelogs/1.8.x/1.8.2.md) - Bugfix Release 🧹
- ### [Version 1.8.1](docs/changelogs/1.8.x/1.8.1.md) - HOTFIX Release 🔥
- ### [Version 1.8.0](docs/changelogs/1.8.x/1.8.0.md) - Feature Release ✨
## 🌋 *IMPORTANT CHANGES* 🌋
### Battle changes
* Battler Types are now obtained via `GetBattlerType` instead of `gBattleMons[battlerId].type1/2/3` to better consider Roost. Be sure to update your custom battle effects to account for this change.
## 1.7.x
- ### [Version 1.7.4](docs/changelogs/1.7.x/1.7.4.md) - Bugfix Release 🧹
- ### [Version 1.7.3](docs/changelogs/1.7.x/1.7.3.md) - Bugfix Release 🧹
- ### [Version 1.7.2](docs/changelogs/1.7.x/1.7.2.md) - Bugfix Release 🧹
- ### [Version 1.7.1](docs/changelogs/1.7.x/1.7.1.md) - Bugfix Release 🧹
- ### [Version 1.7.0](docs/changelogs/1.7.x/1.7.0.md) - Feature Release ✨
## 🧬 General 🧬
### Fixed
* Fixed Cheat Start not initiating time-based events by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3446
## 1.6.x
- ### [Version 1.6.2](docs/changelogs/1.6.x/1.6.2.md) - Bugfix Release 🧹
- ### [Version 1.6.1](docs/changelogs/1.6.x/1.6.1.md) - HOTFIX Release 🔥
- ### [Version 1.6.0](docs/changelogs/1.6.x/1.6.0.md) - Feature Release ✨
## 🐉 Pokémon 🐉
### Changed
* Updated Cresselia's base stats to Gen 9 by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3419
* Updated Zacian/Zamazenta base stats to Gen 9 by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3421
### Fixed
* Fixed Kleavor, Hisuian Sneasel and Sneasler missing their SV abilities by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3391
* Fixed Bergmite/Avalugg old and updated egg groups being switched by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3380
## 1.5.x
- ### [Version 1.5.3](docs/changelogs/1.5.x/1.5.3.md) - HOTFIX Release 🔥
- ### [Version 1.5.2](docs/changelogs/1.5.x/1.5.2.md) - Bugfix Release 🧹
- ### [Version 1.5.1](docs/changelogs/1.5.x/1.5.1.md) - Bugfix Release 🧹
- ### [Version 1.5.0](docs/changelogs/1.5.x/1.5.0.md) - Feature Release ✨
## 🤹 Moves 🤹
### Changed
* Quick Draw now uses weighted RNG by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3399
* Added `IS_BATTLER_TYPELESS` macro that checks if the specified battler has no valid type by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3303
### Fixed
* Fixed Protect failing if the user flinched on the previous turn by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3345
* Fixed entry hazards not working properly being cleared on switch-in by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3316
* This includes Toxic Spikes not working if Pecha Berry actived on the previous turn.
* Fixed Roost overwriting other type changing at the end of the turn (Soak, Forest's Curse, Color Change, etc.) by @BLourenco in https://github.com/rh-hideout/pokeemerald-expansion/pull/3258
* Now it suppresses the user's Flying-type rather than remove and re-add it.
* Fixes Salt Cure visual bug if mon fainted by direct attack by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3388
* Fixed Purifying Salt not preventing the use of Rest by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3399
* Fixed Make it Rain lowering Sp. Attack twice if hitting 2 targets in double battles by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3441
* Fixed Reflect Type not properly handle 3rd types by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3303
* Fixed form change triggered by switching not occuring when using moves like U-Turn or Baton Pass by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3463
* Fixed Last Resort not counting Sleep Talk as used for its effect by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3378
## 1.4.x
- ### [Version 1.4.3](docs/changelogs/1.4.x/1.4.3.md) - Bugfix Release 🧹
- ### [Version 1.4.2](docs/changelogs/1.4.x/1.4.2.md) - Bugfix Release 🧹
- ### [Version 1.4.1](docs/changelogs/1.4.x/1.4.1.md) - HOTFIX Release 🔥
- ### [Version 1.4.0](docs/changelogs/1.4.x/1.4.0.md) - Feature Release ✨
## 🎭 Abilities 🎭
### Changed
* Removed unused `STATUS3_CANT_SCORE_A_CRIT` by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3377
* Moved Beads of Ruin and Sword of Ruin damage to the appropiate damage modifier functions by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3415
### Fixed
* Fixed Intimidate increasing the attack of both opponents if one of them has Contrary in double battles by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3365
* Fixed Battle/Shell Armor not preventing critical hits by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3377
* Fixed Rivalry's effect being reversed by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3381
* Fixed Rivalry lowering attack if either attacker or target were genderless by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3381
* Fixed missing Poison Heal Ability Popup by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3385
* Fixed Parental Bond not working at all by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3417
* Fixed Beads of Ruin and Sword of Ruin damage modifiers by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3415
* Fixed Sheer Force not negating effects that benefit the user (eg. Flame Charge, Power-Up Punch) by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3378
* Fixed Strength Sap not healing the user when used on a Substitute by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3486
* Fixed Substitute showing the "took damage for" message if Strength Sap was used on it by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3486
* Fixed Weak Armor interrupting Multi Hit moves by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3497
## 1.3.x
- ### [Version 1.3.0](docs/changelogs/1.3.x/1.3.0.md) - Feature Release ✨
## 🧶 Items 🧶
### Fixed
* Fixed Shiny Charm doing too many rerolls by default by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3327
* Fixed Berserk Gene activating for the wrong Pokémon double battles by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3363
* Fixed Red Card not being consumed after opponent Sticky Web activation by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3364
* Fixed implementation of Gen6 that didn't allow for the Exp Share flag to be set via script without setting the item to the Gen 6+ version by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3384
* Fixed Kee Berry raising defense by 1 stage instead of 2 by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3409
* Fixed Kee Berry incorrect stat raise message by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3409
* Fixed Razor Fang not being able to be used directly even if `I_USE_EVO_HELD_ITEMS_FROM_BAG` was set to `TRUE` by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/3456
## 1.2.x
- ### [Version 1.2.0](docs/changelogs/1.2.x/1.2.0.md) - Feature Release ✨
## 🧹 Cleanup 🧹
* `AbilityBattleEffects` uses `B_MSG_TERRAIN` constants for field terrain intro text by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3410
* Removed all trailing whitespace by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3472
## 1.1.x
- ### [Version 1.1.1](docs/changelogs/1.1.x/1.1.1.md) - Bugfix Release 🧹
- ### [Version 1.1.0](docs/changelogs/1.1.x/1.1.0.md) - Feature Release ✨
## 🧪 Test Runner 🧪
### Added
* Flinch tests by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3345
* Berserk Gene double battle tests by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3363
* More specific Toxic Spikes tests by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3316
* Red Card/Sticky Web test @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3364
* Intimidate/Contrary double battle test by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3365
* Critical Hit tests by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3377
* Roost tests by @BLourenco in https://github.com/rh-hideout/pokeemerald-expansion/pull/3258
* Rivalry tests by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3381
* Various tests by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3385
* Defeatist, Dragon's Maw, Earth Eater, Gale Wings, Poison Heal, Rocky Payload, Sap Sipper, Steelworker and Transistor.
* Various tests by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3399
* Beast Boost, Ice Scales, Neuroforce, Purifying Salt, Quick Draw and Sharpness.
* Berry tests @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3409
* Full: Apicot, Custap, Ganlon, Jaboca, Kee, Lansat, Liechi, Maranga, Micle, Petaya, Rowap and Salac Berries.
* TODO: Starf Berry.
* Weather and type-specific tests by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3260
* Full: Freezing, Hail, Moonlight, Morning Sun, Sandstorm, Snow, Solar Beam/Blade, Steel poisoning, Synthesis, Thunder and Weather Ball.
* Partial: Prankster, Safety Goggles, Aurora Veil, Hurricane, Leech Seed and OHKO moves.
* TODO: Harvest.
* Single Parental Bond test by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3417
* Several tests by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3378
* Full: Weak Armor, Last Resort, Stealth Rock.
* Completed Weak Armor tests by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3493
* Partial: Defiant, Sheer Force, White Herb, Strength Sap.
### Changed
* Red Card tests now check if the item was consumed by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3364
* Tests now cannot use `i` in their cycles to avoid messing with `PARAMETRIZE` by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3408
* Moved battle tests off the heap by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3414
* Moved Powder/Grass test to `move_flags` folder by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3260
* Continuous `NOT x; NOT y;` are now not allowed in tests due to them not acting as one would expect by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3459
* Test writers should use `NONE_OF { x; y; }` instead.
### Fixed
* Fixed CreateNPCTrainerPartyForTrainer test failing on modern by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3367
* Fixed `RNG_CRITICAL_HIT` by @mrgriffin and @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3377
* Fixed `ASSUMPTIONS` block not working by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3368
* Fixup by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3408
* Fixed Beads of Ruin and Sword of Ruin damage tests by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3415
* Fixes test RNG by @mrgriffin and @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3433
* Fixed battle test estimateCost bug by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3448
* Test cleanup and improvements by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3449
* Removed duplicated Prankster TO_DO test.
* Corrected Multi-hit test names (4 and 5 hits stated 35% instead of 15%).
* Grouped Maranga Berry's Physical vs Special tests using PARAMETRIZE.
* Improved Jaboca, Kee and Rowap tests by @AlexOn1ine
* Fixed `ModifyPersonalityForNature` by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3452
* Fixed test_runner.c modern warning by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3451
## 1.0.x
- ### [Version 1.0.0](docs/changelogs/1.0.x/1.0.0.md) - Feature Release ✨
## New Contributors
* @BLourenco made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/3258
## Full Changelog
https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.6.1...expansion/1.6.2
## Pre-1.0.x:
- ### [Version 0.9.0](docs/changelogs/0.9.x/0.9.0.md) - Retroactive Version 🦕

View File

@@ -1,6 +1,6 @@
# Instructions
These instructions explain how to set up the tools required to build **pokeemerald**, which assembles the source files into a ROM.
These instructions explain how to set up the tools required to build **pokeemerald Expansion**, which assembles the source files into a ROM (pokeemerald.gba).
These instructions come with notes which can be expanded by clicking the "<i>Note...</i>" text.
In general, you should not need to open these unless if you get an error or if you need additional clarification.
@@ -27,10 +27,10 @@ All of the Windows instructions assume that the default drive is C:\\. If this d
**A note of caution**: As Windows 7 is officially unsupported by Microsoft and Windows 8 has very little usage, some maintainers are unwilling to maintain the Windows 7/8 instructions. Thus, these instructions may break in the future with fixes taking longer than fixes to the Windows 10 instructions.
## Windows 10/11 (WSL1)
WSL1 is the preferred terminal to build **pokeemerald**. The following instructions will explain how to install WSL1 (referred to interchangeably as WSL).
WSL1 is the preferred terminal to build **pokeemerald Expansion**. The following instructions will explain how to install WSL1 (referred to interchangeably as WSL).
- If WSL (Debian or Ubuntu) is **not installed**, then go to [Installing WSL1](#Installing-WSL1).
- Otherwise, if WSL is installed, but it **hasn't previously been set up for another decompilation project**, then go to [Setting up WSL1](#Setting-up-WSL1).
- Otherwise, **open WSL** and go to [Choosing where to store pokeemerald (WSL1)](#Choosing-where-to-store-pokeemerald-WSL1).
- Otherwise, **open WSL** and go to [Choosing where to store pokeemerald Expansion (WSL1)](#Choosing-where-to-store-pokeemerald-expansion-WSL1).
### Installing WSL1
1. Open [Windows Powershell **as Administrator**](https://i.imgur.com/QKmVbP9.png), and run the following command (Right Click or Shift+Insert is paste in the Powershell).
@@ -79,21 +79,60 @@ Some tips before proceeding:
> Note: If the repository you plan to build has an **[older revision of the INSTALL.md](https://github.com/pret/pokeemerald/blob/571c598/INSTALL.md)**, then follow the [legacy WSL1 instructions](docs/legacy_WSL1_INSTALL.md) from here.
4. Certain packages are required to build pokeemerald. Install these packages by running the following command:
4. Certain packages are required to build pokeemerald Expansion. Install these packages by running the following command:
```bash
sudo apt install build-essential binutils-arm-none-eabi git libpng-dev
sudo apt install build-essential binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi git libpng-dev
```
<details>
<summary><i>Note...</i></summary>
> If the above command does not work, try the above command but replacing `apt` with `apt-get`.
</details>
This will install GCC v10 on Ubuntu 22.04. pokeemerald Expansion works with GCC v10, but remote repositories and the RHH Team use GCC v13 for stricter error-checking. If you want to upgrade from v10 to v13, also follow the devkitpro install instructions.
### Choosing where to store pokeemerald (WSL1)
WSL has its own file system that's not natively accessible from Windows, but Windows files *are* accessible from WSL. So you're going to want to store pokeemerald within Windows.
### Installing devkitARM on WSL1
For example, say you want to store pokeemerald (and agbcc) in **C:\Users\\_\<user>_\Desktop\decomps**. First, ensure that the folder already exists. Then, enter this command to **change directory** to said folder, where *\<user>* is your **Windows** username:
1. Change directory to somewhere you can download a package, such as **C:\Users\\_\<user>_\Downloads** (the Downloads location for most users). To do so, enter this command, where *\<user> is your **Windows** username:
```bash
cd /mnt/c/Users/<user>/Downloads
```
2. Once the directory has been changed, run the following commands to install devkitARM.
```bash
sudo apt install wget
wget https://apt.devkitpro.org/install-devkitpro-pacman
chmod +x ./install-devkitpro-pacman
sudo ./install-devkitpro-pacman
sudo dkp-pacman -S gba-dev
```
The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation.
3. Run the following command to set devkitPro related environment variables (alternatively, close and re-open WSL):
```bash
source /etc/profile.d/devkit-env.sh
```
devkitARM is now installed.
### Installing Python on WSL1
To install Python on WSL1, simply run the following commands:
```bash
sudo apt update && sudo apt upgrade
sudo apt install python3
```
Python is now installed.
### Choosing where to store pokeemerald Expansion (WSL1)
WSL has its own file system that's not natively accessible from Windows, but Windows files *are* accessible from WSL. So you're going to want to store pokeemerald Expansion within Windows.
For example, say you want to store pokeemerald Expansion in **C:\Users\\_\<user>_\Desktop\decomps**. First, ensure that the folder already exists. Then, enter this command to **change directory** to said folder, where *\<user>* is your **Windows** username:
```bash
cd /mnt/c/Users/<user>/Desktop/decomps
@@ -115,7 +154,7 @@ Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or conti
- If devkitARM is **not installed**, then go to [Installing devkitARM](#installing-devkitarm).
- If devkitARM is installed, but msys2 **hasn't previously been set up for another decompilation project**, then go to [Setting up msys2](#setting-up-msys2).
- Otherwise, **open msys2** and go to [Choosing where to store pokeemerald (msys2)](#choosing-where-to-store-pokeemerald-msys2).
- Otherwise, **open msys2** and go to [Choosing where to store pokeemerald Expansion (msys2)](#choosing-where-to-store-pokeemerald-expansion-msys2).
### Installing devkitARM
1. Download the devkitPro installer [here](https://github.com/devkitPro/installer/releases).
@@ -127,7 +166,7 @@ Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert.
1. Open msys2 at C:\devkitPro\msys2\msys2_shell.bat.
2. Certain packages are required to build pokeemerald. Install these by running the following two commands:
2. Certain packages are required to build pokeemerald Expansion. Install these by running the following two commands:
```bash
pacman -Sy msys2-keyring
@@ -172,10 +211,20 @@ Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert.
cd
```
### Choosing where to store pokeemerald (msys2)
At this point, you can choose a folder to store pokeemerald into. If you're okay with storing pokeemerald in the user profile folder, then proceed to [Installation](#installation). Otherwise, you'll need to account for where pokeemerald is stored when changing directory to the pokeemerald folder.
### Installing Python on msys2
For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\<user>_\Desktop\decomps** (where *\<user>* is your **Windows** username), enter this command:
To install Python on msys2, simply run the following commands:
```bash
pacman -S mingw-w64-x86_64-python3
```
Python is now installed.
### Choosing where to store pokeemerald Expansion (msys2)
At this point, you can choose a folder to store pokeemerald Expansion into. If you're okay with storing pokeemerald Expansion in the user profile folder, then proceed to [Installation](#installation). Otherwise, you'll need to account for where pokeemerald Expansion is stored when changing directory to the pokeemerald-expansion folder.
For example, if you want to store pokeemerald Expansion in **C:\Users\\_\<user>_\Desktop\decomps** (where *\<user>* is your **Windows** username), enter this command:
```bash
cd Desktop/decomps
@@ -191,7 +240,7 @@ Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or conti
2.
- If Cygwin is **not installed**, or does not have all of the required packages installed, then go to [Installing Cygwin](#installing-cygwin).
- If Cygwin is installed, but **is not configured to work with devkitARM**, then go to [Configuring devkitARM for Cygwin](#configuring-devkitarm-for-cygwin).
- Otherwise, **open Cygwin** and go to [Choosing where to store pokeemerald (Cygwin)](#choosing-where-to-store-pokeemerald-cygwin)
- Otherwise, **open Cygwin** and go to [Choosing where to store pokeemerald Expansion (Cygwin)](#choosing-where-to-store-pokeemerald-expansion-cygwin)
### Installing Cygwin
1. Download [Cygwin](https://cygwin.com/install.html): setup-x86_64.exe for 64-bit Windows, setup-x86.exe for 32-bit.
@@ -234,15 +283,15 @@ Note that in Cygwin, Copy is Ctrl+Insert and Paste is Shift+Insert.
> Replace the drive letter c with the actual drive letter if it is not c.
</details>
### Choosing where to store pokeemerald (Cygwin)
### Choosing where to store pokeemerald Expansion (Cygwin)
Cygwin has its own file system that's within Windows, at **C:\cygwin64\home\\_\<user>_**. If you don't want to store pokeemerald there, you'll need to account for where pokeemerald is stored when **changing directory** to the pokeemerald folder.
Cygwin has its own file system that's within Windows, at **C:\cygwin64\home\\_\<user>_**. If you don't want to store pokeemerald Expansion there, you'll need to account for where ppokeemerald Expansion is stored when **changing directory** to the pokeemerald-expansion folder.
For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\<user>_\Desktop\decomps**, enter this command, where *\<user>* is your **Windows** username:
For example, if you want to store pokeemerald Expansion in **C:\Users\\_\<user>_\Desktop\decomps**, enter this command, where *\<user>* is your **Windows** username:
```bash
cd c:/Users/<user>/Desktop/decomps
```
Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command.
Note that the directory **must exist** in Windows. If you want to store pokeemerald Expansion in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command.
<details>
<summary><i>Notes...</i></summary>
@@ -261,8 +310,9 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for
```
2. - If libpng is **not installed**, then go to [Installing libpng (macOS)](#installing-libpng-macos).
- If pkg-config is **not installed**, then go to [Installing pkg-config (macos)](#installing-pkg-config-macos).
- If devkitARM is **not installed**, then go to [Installing devkitARM (macOS)](#installing-devkitarm-macos).
- Otherwise, **open the Terminal** and go to [Choosing where to store pokeemerald (macOS)](#choosing-where-to-store-pokeemerald-macos)
- Otherwise, **open the Terminal** and go to [Choosing where to store pokeemerald Expansion (macOS)](#choosing-where-to-store-pokeemerald-expansion-macos)
### Installing libpng (macOS)
<details>
@@ -280,7 +330,27 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for
```
libpng is now installed.
Continue to [Installing devkitARM (macOS)](#installing-devkitarm-macos) if **devkitARM is not installed**, otherwise, go to [Choosing where to store pokeemerald (macOS)](#choosing-where-to-store-pokeemerald-macos).
Continue to [Installing pkg-config (macOS)](#installing-pkg-config-macos) if **pkg-config is not installed**. Otherwise, continue to [Installing devkitARM (macOS)](#installing-devkitarm-macos) if **devkitARM is not installed**.
If both pkg-config and devkitARM are already installed, go to [Choosing where to store pokeemerald Expansion (macOS)](#choosing-where-to-store-pokeemerald-expansion-macos).
### Installing pkg-config (macOS)
<details>
<summary><i>Note for advanced users...</i></summary>
> This guide installs pkg-config via Homebrew as it is the easiest method, however advanced users can install pkg-config through other means if they so desire.
</details>
1. Open the Terminal.
2. If Homebrew is not installed, then install [Homebrew](https://brew.sh/) by following the instructions on the website.
3. Run the following command to install libpng.
```bash
brew install pkg-config
```
pkg-config is now installed.
Continue to [Installing devkitARM (macOS)](#installing-devkitarm-macos) if **devkitARM is not installed**, otherwise, go to [Choosing where to store pokeemerald Expansion (macOS)](#choosing-where-to-store-pokeemerald-expansion-macos).
### Installing devkitARM (macOS)
1. Download the `devkitpro-pacman-installer.pkg` package from [here](https://github.com/devkitPro/pacman/releases).
@@ -297,6 +367,18 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for
4. After the tools are installed, devkitARM must now be made accessible from anywhere by the system. To do so, run the following commands:
```bash
export DEVKITPRO=/opt/devkitpro
echo "export DEVKITPRO=$DEVKITPRO" >> ~/.zshrc
export DEVKITARM=$DEVKITPRO/devkitARM
echo "export DEVKITARM=$DEVKITARM" >> ~/.zshrc
echo "if [ -f ~/.zshrc ]; then . ~/.zshrc; fi" >> ~/.zprofile
```
*Note: Starting with macOS 10.15, the default Unix shell is now zsh. If you migrated from an older version of macOS, you might still be using bash. You can check my running `echo $0` in the terminal.*
<details>
<summary><i>If your terminal is using bash instead of zsh...</i></summary>
```bash
export DEVKITPRO=/opt/devkitpro
echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc
@@ -305,15 +387,22 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for
echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile
```
</details>
### Choosing where to store pokeemerald (macOS)
At this point, you can choose a folder to store pokeemerald into. If you're okay with storing pokeemerald in the user folder, then proceed to [Installation](#installation). Otherwise, you'll need to account for where pokeemerald is stored when changing directory to the pokeemerald folder.
### Installing Python (macOS)
1. Download the latest Python package from [here](https://www.python.org/downloads/).
2. Open the package to install Python.
For example, if you want to store pokeemerald (and agbcc) in **~/Desktop/decomps**, enter this command to **change directory** to the desired folder:
Python is now installed.
### Choosing where to store pokeemerald Expansion (macOS)
At this point, you can choose a folder to store pokeemerald Expansion into. If you're okay with storing pokeemerald Expansion in the user folder, then proceed to [Installation](#installation). Otherwise, you'll need to account for where pokeemerald Expansion is stored when changing directory to the pokeemerald-expansion folder.
For example, if you want to store pokeemerald Expansion in **~/Desktop/decomps**, enter this command to **change directory** to the desired folder:
```bash
cd Desktop/decomps
```
Note that the directory **must exist** in the folder system. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Finder) before executing the `cd` command.
Note that the directory **must exist** in the folder system. If you want to store pokeemerald Expansion in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Finder) before executing the `cd` command.
<details>
<summary><i>Note..</i>.</summary>
@@ -329,30 +418,69 @@ Open Terminal and enter the following commands, depending on which distro you're
### Debian/Ubuntu-based distributions
Run the following command to install the necessary packages:
```bash
sudo apt install build-essential binutils-arm-none-eabi git libpng-dev
sudo apt install build-essential binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi git libpng-dev
```
Then proceed to [Choosing where to store pokeemerald (Linux)](#choosing-where-to-store-pokeemerald-linux).
Then proceed to [Choosing where to store pokeemerald Expansion (Linux)](#choosing-where-to-store-pokeemerald-expansion-linux).
<details>
<summary><i>Note for legacy repos...</i></summary>
> If the repository you plan to build has an **[older revision of the INSTALL.md](https://github.com/pret/pokeemerald/blob/571c598/INSTALL.md)**,
> then you will have to install devkitARM. Install all the above packages except binutils-arm-none-eabi, and follow the instructions to
> then you will have to install devkitARM. Install all the above packages except for the arm-none-eabi packages, and follow the instructions to
> [install devkitARM on Debian/Ubuntu-based distributions](#installing-devkitarm-on-debianubuntu-based-distributions).
</details>
### Installing devkitARM on Debian/Ubuntu-based distributions
1. Change directory to somewhere you can download a packages, like a Downloads folder. Then, run the following commands to install devkitARM:
```bash
wget https://apt.devkitpro.org/install-devkitpro-pacman
chmod +x ./install-devkitpro-pacman
sudo ./install-devkitpro-pacman
sudo dkp-pacman -S gba-dev
```
The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation.
4. Run the following command to set devkitPro related environment variables (alternatively, close and re-open the Terminal):
```bash
source /etc/profile.d/devkit-env.sh
```
devkitARM is now installed.
### Arch Linux
Run this command as root to install the necessary packages:
```bash
pacman -S base-devel arm-none-eabi-binutils git libpng
pacman -S base-devel arm-none-eabi-binutils arm-none-eabi-gcc arm-none-eabi-newlib git libpng
```
Then proceed to [Choosing where to store pokeemerald (Linux)](#choosing-where-to-store-pokeemerald-linux).
<details>
<summary><i>Note for legacy repos...</i></summary>
> If the repository you plan to build has an **[older revision of the INSTALL.md](https://github.com/pret/pokeemerald/blob/571c598/INSTALL.md)**,
> then you will have to install devkitARM. Install all the above packages except binutils-arm-none-eabi, and follow the instructions to
> [install devkitARM on Arch Linux](#installing-devkitarm-on-arch-linux).
</details>
### Installing devkitARM on Arch Linux
1. Follow [devkitPro's instructions](https://devkitpro.org/wiki/devkitPro_pacman#Customising_Existing_Pacman_Install) to configure `pacman` to download devkitPro packages.
2. Install `gba-dev`: run the following command as root.
```console
pacman -S gba-dev
```
This will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation.
3. Run the following command to set devkitPro related environment variables (alternatively, close and re-open the Terminal):
```bash
source /etc/profile.d/devkit-env.sh
```
devkitARM is now installed.
Then proceed to [Choosing where to store pokeemerald Expansion (Linux)](#choosing-where-to-store-pokeemerald-expansion-linux).
### NixOS
Run the following command to start an interactive shell with the necessary packages:
```bash
nix-shell -p pkgsCross.arm-embedded.stdenv.cc git pkg-config libpng
```
Then proceed to [Choosing where to store pokeemerald Expansion (Linux)](#choosing-where-to-store-pokeemerald-expansion-linux).
### Other distributions
_(Specific instructions for other distributions would be greatly appreciated!)_
@@ -374,8 +502,11 @@ _(Specific instructions for other distributions would be greatly appreciated!)_
The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation.
### Choosing where to store pokeemerald (Linux)
At this point, you can choose a folder to store pokeemerald (and agbcc) into. If so, you'll have to account for the modified folder path when changing directory to the pokeemerald folder.
### Installing Python in Linux
Installing Python depends on your distribution, please refere to the instructions [here](https://docs.python-guide.org/starting/install3/linux/).
### Choosing where to store pokeemerald Expansion (Linux)
At this point, you can choose a folder to store pokeemerald Expansion into. If so, you'll have to account for the modified folder path when changing directory to the pokeemerald-expansion folder.
If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)).
@@ -384,12 +515,12 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for
<details>
<summary><i>Note for Windows users...</i></summary>
> Consider adding an exception for the `pokeemerald` and/or `decomps` folder in Windows Security using
> Consider adding an exception for the `pokeemerald-expansion` and/or `decomps` folder in Windows Security using
> [these instructions](https://support.microsoft.com/help/4028485). This prevents Microsoft Defender from
> scanning them which might improve performance while building.
</details>
1. If pokeemerald is not already downloaded (some users may prefer to download pokeemerald via a git client like GitHub Desktop), run:
1. If pokeemerald Expansion is not already downloaded (some users may prefer to download pokeemerald Expansion via a git client like GitHub Desktop), run:
```bash
git clone https://github.com/rh-hideout/pokeemerald-expansion
@@ -403,54 +534,18 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for
> cd
> sudo umount /mnt/c
> sudo mount -t drvfs C: /mnt/c -o metadata,noatime
> cd <folder where pokeemerald is to be stored>
> cd <folder where pokeemerald-expansion is to be stored>
> ```
> Where *\<folder where pokeemerald is to be stored>* is the path of the folder [where you chose to store pokeemerald](#Choosing-where-to-store-pokeemerald-WSL1). Then run the `git clone` command again.
> Where *\<folder where pokeemerald-expansion is to be stored>* is the path of the folder [where you chose to store pokeemerald Expansion](#Choosing-where-to-store-pokeemerald-expansion-WSL1). Then run the `git clone` command again.
</details>
Now you're ready to build pokeemerald Expansion.
2. Install agbcc into pokeemerald. The commands to run depend on certain conditions. **You should only follow one of the listed instructions**:
- If agbcc has **not been built before** in the folder where you chose to store pokeemerald, run the following commands to build and install it into pokeemerald:
## Build pokeemerald Expansion
```bash
git clone https://github.com/pret/agbcc
cd agbcc
./build.sh
./install.sh ../pokeemerald
```
- **Otherwise**, if agbcc has been built before (e.g. if the git clone above fails), but was **last built on a different terminal** than the one currently used (only relevant to Windows, e.g. switching from msys2 to WSL1), then run the following commands to build and install it into pokeemerald:
```bash
cd agbcc
git clean -fX
./build.sh
./install.sh ../pokeemerald
```
- **Otherwise**, if agbcc has been built before on the same terminal, run the following commands to install agbcc into pokeemerald:
```bash
cd agbcc
./install.sh ../pokeemerald
```
<details>
<summary><i>Note...</i></summary>
> If building agbcc or pokeemerald results in an error, try deleting the agbcc folder and re-installing agbcc as if it has not been built before.
</details>
3. Once agbcc is installed, change directory back to the base directory where pokeemerald and agbcc are stored:
```bash
cd ..
```
Now you're ready to [build **pokeemerald**](#build-pokeemerald)
## Build pokeemerald
If you aren't in the pokeemerald directory already, then **change directory** to the pokeemerald folder:
If you aren't in the pokeemerald-expansion directory already, then **change directory** to the pokeemerald-expansion folder:
```bash
cd pokeemerald
cd pokeemerald-expansion
```
To build **pokeemerald.gba** (Note: to speed up builds, see [Parallel builds](#parallel-builds)):
```bash
@@ -480,116 +575,6 @@ Replace `<output of nproc>` with the number that the `nproc` command returned.
`nproc` is not available on macOS. The alternative is `sysctl -n hw.ncpu` ([relevant Stack Overflow thread](https://stackoverflow.com/questions/1715580)).
## Compare ROM to the original
For contributing, or if you'd simply like to verify that your ROM is identical to the original game, run:
```bash
make compare
```
If it matches, you will see the following at the end of the output:
```bash
pokeemerald.gba: OK
```
If there are any changes from the original game, you will instead see:
```bash
pokeemerald.gba: FAILED
shasum: WARNING: 1 computed checksum did NOT match
```
## devkitARM's C compiler
This project supports the `arm-none-eabi-gcc` compiler included with devkitARM. If devkitARM (a.k.a. gba-dev) has already been installed as part of the platform-specific instructions, simply run:
```bash
make modern
```
Otherwise, follow the instructions below to install devkitARM.
### Installing devkitARM on WSL1
1. `gdebi-core` must be installed beforehand in order to install devkitPro pacman (which facilitates the installation of devkitARM). Install this with the following command:
```bash
sudo apt install gdebi-core
```
<details>
<summary><i>Note...</i></summary>
> If the above command does not work, try the above command but replacing `apt` with `apt-get`.
</details>
2. Once `gdebi-core` is done installing, download the devkitPro pacman package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`.
3. Change directory to where the package was downloaded. For example, if the package file was saved to **C:\Users\\_\<user>_\Downloads** (the Downloads location for most users), enter this command, where *\<user> is your **Windows** username:
```bash
cd /mnt/c/Users/<user>/Downloads
```
4. Once the directory has been changed to the folder containing the devkitPro pacman package, run the following commands to install devkitARM.
```bash
sudo gdebi devkitpro-pacman.amd64.deb
sudo dkp-pacman -Sy
sudo dkp-pacman -S gba-dev
```
The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation.
<details>
<summary><i>Note...</i></summary>
> Note: `devkitpro-pacman.amd64.deb` is the expected filename of the devkitPro package downloaded (for the first command). If the downloaded package filename differs, then use that filename instead.
</details>
5. Run the following command to set devkitPro related environment variables (alternatively, close and re-open WSL):
```bash
source /etc/profile.d/devkit-env.sh
```
devkitARM is now installed.
### Installing devkitARM on Debian/Ubuntu-based distributions
1. If `gdebi-core` is not installed, run the following command:
```bash
sudo apt install gdebi-core
```
2. Download the devkitPro pacman package [here](https://github.com/devkitPro/pacman/releases). The file to download is `devkitpro-pacman.amd64.deb`.
3. Change directory to where the package was downloaded. Then, run the following commands to install devkitARM:
```bash
sudo gdebi devkitpro-pacman.amd64.deb
sudo dkp-pacman -Sy
sudo dkp-pacman -S gba-dev
```
The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation.
> Note: `devkitpro-pacman.amd64.deb` is the expected filename of the devkitPro package downloaded (for the first command). If the downloaded package filename differs, then use that filename instead.
4. Run the following command to set devkitPro related environment variables (alternatively, close and re-open the Terminal):
```bash
source /etc/profile.d/devkit-env.sh
```
devkitARM is now installed.
### Installing devkitARM on Arch Linux
1. Follow [devkitPro's instructions](https://devkitpro.org/wiki/devkitPro_pacman#Customising_Existing_Pacman_Install) to configure `pacman` to download devkitPro packages.
2. Install `gba-dev`: run the following command as root.
```console
pacman -S gba-dev
```
This will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation.
3. Run the following command to set devkitPro related environment variables (alternatively, close and re-open the Terminal):
```bash
source /etc/profile.d/devkit-env.sh
```
devkitARM is now installed.
### Other toolchains
To build using a toolchain other than devkitARM, override the `TOOLCHAIN` environment variable with the path to your toolchain, which must contain the subdirectory `bin`.
@@ -602,13 +587,64 @@ make TOOLCHAIN="/usr/local/arm-none-eabi"
```
To compile the `modern` target with this toolchain, the subdirectories `lib`, `include`, and `arm-none-eabi` must also be present.
### Building with debug info under a modern toolchain
### Building with debug info
To build **pokeemerald.elf** with debug symbols under a modern toolchain:
```bash
make modern DINFO=1
make DINFO=1
```
Note that this is not necessary for a non-modern build since those are built with debug symbols by default.
Note that this is not necessary for a non-modern (agbcc) build since those are built with debug symbols by default.
### agbcc
<details>
<summary><i>Deprecated; installing agbcc is optional since 1.7.0</i>.</summary>
1. Install agbcc into pokeemerald-expansion. The commands to run depend on certain conditions. **You should only follow one of the listed instructions**:
- If agbcc has **not been built before** in the folder where you chose to store pokeemerald Expansion, run the following commands to build and install it into pokeemerald-expansion:
```bash
git clone https://github.com/pret/agbcc
cd agbcc
./build.sh
./install.sh ../pokeemerald-expansion
```
- **Otherwise**, if agbcc has been built before (e.g. if the git clone above fails), but was **last built on a different terminal** than the one currently used (only relevant to Windows, e.g. switching from msys2 to WSL1), then run the following commands to build and install it into pokeemerald-expansion:
```bash
cd agbcc
git clean -fX
./build.sh
./install.sh ../pokeemerald-expansion
```
- **Otherwise**, if agbcc has been built before on the same terminal, run the following commands to install agbcc into pokeemerald-expansion:
```bash
cd agbcc
./install.sh ../pokeemerald-expansion
```
<details>
<summary><i>Note...</i></summary>
> If building agbcc or pokeemerald results in an error, try deleting the agbcc folder and re-installing agbcc as if it has not been built before.
</details>
2. Once agbcc is installed, change directory back to the base directory where pokeemerald-expansion and agbcc are stored:
```bash
cd ..
```
3. To compile with agbcc:
```bash
make agbcc
```
</details>
# Useful additional tools

View File

@@ -36,16 +36,17 @@ else
EXE :=
endif
TITLE := POKEMON EMER
GAME_CODE := BPEE
MAKER_CODE := 01
REVISION := 0
MODERN ?= 0
TEST ?= 0
ANALYZE ?= 0
TITLE := POKEMON EMER
GAME_CODE := BPEE
MAKER_CODE := 01
REVISION := 0
MODERN ?= 1
TEST ?= 0
ANALYZE ?= 0
UNUSED_ERROR ?= 0
ifeq (modern,$(MAKECMDGOALS))
MODERN := 1
ifeq (agbcc,$(MAKECMDGOALS))
MODERN := 0
endif
ifeq (check,$(MAKECMDGOALS))
@@ -69,26 +70,29 @@ else
CPP := $(PREFIX)cpp
endif
ROM_NAME := pokeemerald.gba
ROM_NAME := pokeemerald_agbcc.gba
ELF_NAME := $(ROM_NAME:.gba=.elf)
MAP_NAME := $(ROM_NAME:.gba=.map)
OBJ_DIR_NAME := build/emerald
MODERN_ROM_NAME := pokeemerald_modern.gba
MODERN_ROM_NAME := pokeemerald.gba
MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf)
MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map)
MODERN_OBJ_DIR_NAME := build/modern
SHELL := /bin/bash -o pipefail
SHELL := bash -o pipefail
ELF = $(ROM:.gba=.elf)
MAP = $(ROM:.gba=.map)
SYM = $(ROM:.gba=.sym)
TEST_OBJ_DIR_NAME_MODERN := build/modern-test
TEST_OBJ_DIR_NAME_AGBCC := build/test
ifeq ($(MODERN),0)
TEST_OBJ_DIR_NAME := build/test
TEST_OBJ_DIR_NAME := $(TEST_OBJ_DIR_NAME_AGBCC)
else
TEST_OBJ_DIR_NAME := build/modern-test
TEST_OBJ_DIR_NAME := $(TEST_OBJ_DIR_NAME_MODERN)
endif
TESTELF = $(ROM:.gba=-test.elf)
HEADLESSELF = $(ROM:.gba=-test-headless.elf)
@@ -123,10 +127,16 @@ LIBPATH := -L ../../tools/agbcc/lib
LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall
else
CC1 = $(shell $(PATH_MODERNCC) --print-prog-name=cc1) -quiet
override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -std=gnu17
override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init
ifeq ($(ANALYZE),1)
override CFLAGS += -fanalyzer
endif
# Only throw an error for unused elements if its RH-Hideout's repo
ifeq ($(UNUSED_ERROR),0)
ifneq ($(GITHUB_REPOSITORY_OWNER),rh-hideout)
override CFLAGS += -Wno-error=unused-variable -Wno-error=unused-const-variable -Wno-error=unused-parameter -Wno-error=unused-function -Wno-error=unused-but-set-parameter -Wno-error=unused-but-set-variable -Wno-error=unused-value -Wno-error=unused-local-typedefs
endif
endif
ROM := $(MODERN_ROM_NAME)
OBJ_DIR := $(MODERN_OBJ_DIR_NAME)
LIBPATH := -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libc.a))"
@@ -146,8 +156,6 @@ ifneq ($(MODERN),1)
CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef
endif
LDFLAGS = -Map ../../$(MAP)
SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c
GFX := tools/gbagfx/gbagfx$(EXE)
AIF := tools/aif2pcm/aif2pcm$(EXE)
@@ -182,7 +190,7 @@ MAKEFLAGS += --no-print-directory
# Secondary expansion is required for dependency variables in object rules.
.SECONDEXPANSION:
.PHONY: all rom clean compare tidy tools check-tools mostlyclean clean-tools clean-check-tools $(TOOLDIRS) $(CHECKTOOLDIRS) libagbsyscall modern tidymodern tidynonmodern check
.PHONY: all rom clean compare tidy tools check-tools mostlyclean clean-tools clean-check-tools $(TOOLDIRS) $(CHECKTOOLDIRS) libagbsyscall agbcc modern tidymodern tidynonmodern check history
infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line))))
@@ -190,7 +198,7 @@ infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst
# Disable dependency scanning for clean/tidy/tools
# Use a separate minimal makefile for speed
# Since we don't need to reload most of this makefile
ifeq (,$(filter-out all rom compare modern check libagbsyscall syms $(TESTELF),$(MAKECMDGOALS)))
ifeq (,$(filter-out all rom compare agbcc modern check libagbsyscall syms $(TESTELF),$(MAKECMDGOALS)))
$(call infoshell, $(MAKE) -f make_tools.mk)
else
NODEP ?= 1
@@ -249,7 +257,10 @@ endif
AUTO_GEN_TARGETS :=
all: rom
all: history rom
history:
@bash ./check_history.sh
tools: $(TOOLDIRS)
@@ -280,8 +291,7 @@ clean-check-tools:
@$(foreach tooldir,$(CHECKTOOLDIRS),$(MAKE) clean -C $(tooldir);)
mostlyclean: tidynonmodern tidymodern tidycheck
rm -f $(SAMPLE_SUBDIR)/*.bin
rm -f $(CRY_SUBDIR)/*.bin
find sound -iname '*.bin' -exec rm {} +
rm -f $(MID_SUBDIR)/*.s
find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} +
rm -f $(DATA_ASM_SUBDIR)/layouts/layouts.inc $(DATA_ASM_SUBDIR)/layouts/layouts_table.inc
@@ -302,7 +312,9 @@ tidymodern:
tidycheck:
rm -f $(TESTELF) $(HEADLESSELF)
rm -rf $(TEST_OBJ_DIR_NAME)
rm -rf $(TEST_OBJ_DIR_NAME_MODERN)
rm -rf $(TEST_OBJ_DIR_NAME_AGBCC)
ifneq ($(MODERN),0)
$(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member
@@ -349,6 +361,7 @@ $(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE)
$(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet
else
$(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast
$(C_BUILDDIR)/pokedex_plus_hgss.o: CFLAGS := -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init
endif
ifeq ($(DINFO),1)
@@ -456,6 +469,10 @@ $(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 > $@
# NOTE: Depending on event_scripts.o is hacky, but we want to depend on everything event_scripts.s depends on without having to alter scaninc
$(DATA_SRC_SUBDIR)/pokemon/teachable_learnsets.h: $(DATA_ASM_BUILDDIR)/event_scripts.o
python3 tools/learnset_helpers/teachable.py
# NOTE: Based on C_DEP above, but without NODEP and KEEP_TEMPS handling.
define TEST_DEP
$1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2)
@@ -465,28 +482,31 @@ endef
$(foreach src, $(TEST_SRCS), $(eval $(call TEST_DEP,$(patsubst $(TEST_SUBDIR)/%.c,$(TEST_BUILDDIR)/%.o,$(src)),$(src),$(patsubst $(TEST_SUBDIR)/%.c,%,$(src)))))
ifeq ($(MODERN),0)
LD_SCRIPT := ld_script.txt
LD_SCRIPT := ld_script.ld
LD_SCRIPT_DEPS := $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld
else
LD_SCRIPT := ld_script_modern.txt
LD_SCRIPT := ld_script_modern.ld
LD_SCRIPT_DEPS :=
endif
$(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS)
cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld
LDFLAGS = -Map ../../$(MAP)
$(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) libagbsyscall
@echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ <objects> <lib>"
@cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB)
@cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld --print-memory-usage -o ../../$@ $(OBJS_REL) $(LIB) | cat
$(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent
$(ROM): $(ELF)
$(OBJCOPY) -O binary $< $@
$(FIX) $@ -p --silent
agbcc: all
modern: all
LD_SCRIPT_TEST := ld_script_test.txt
LD_SCRIPT_TEST := ld_script_test.ld
$(OBJ_DIR)/ld_script_test.ld: $(LD_SCRIPT_TEST) $(LD_SCRIPT_DEPS)
cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT_TEST) > ld_script_test.ld
@@ -494,7 +514,7 @@ $(OBJ_DIR)/ld_script_test.ld: $(LD_SCRIPT_TEST) $(LD_SCRIPT_DEPS)
$(TESTELF): $(OBJ_DIR)/ld_script_test.ld $(OBJS) $(TEST_OBJS) libagbsyscall tools check-tools
@echo "cd $(OBJ_DIR) && $(LD) -T ld_script_test.ld -o ../../$@ <objects> <test-objects> <lib>"
@cd $(OBJ_DIR) && $(LD) $(TESTLDFLAGS) -T ld_script_test.ld -o ../../$@ $(OBJS_REL) $(TEST_OBJS_REL) $(LIB)
$(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent
$(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) -d0 --silent
$(PATCHELF) $(TESTELF) gTestRunnerArgv "$(TESTS)\0"
ifeq ($(GITHUB_REPOSITORY_OWNER),rh-hideout)

137
README.md
View File

@@ -1,38 +1,49 @@
# pokeemerald Expansion
# pokeemerald-expansion
## What is the 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.
The pokeemerald Expansion is a decomp hack base project based off pret's [pokeemerald](https://github.com/pret/pokeemerald) decompilation project. It's recommended that any new projects that plan on using it, to clone this repository instead of pret's vanilla repository, as we regurlarly incorporate pret's documentation changes. This is ***NOT*** a standalone romhack, and as such, most features will be unavailable and/or unbalanced if played as is.
## What is pokeemerald-expansion?
pokeemerald-expansion is a decomp hack base project based off pret's [pokeemerald](https://github.com/pret/pokeemerald) decompilation project. It's recommended that any new projects that plan on using it, to clone this repository instead of pret's vanilla repository, as we regurlarly incorporate pret's documentation changes. This is ***NOT*** a standalone romhack, and as such, most features will be unavailable and/or unbalanced if played as is.
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 v1.8.0 https://github.com/rh-hideout/pokeemerald-expansion/
```
## What features are included?
- ***IMPORTANT*❗❗ Read through these to learn what features you can toggle**:
- [Battle configurations](/include/config/battle.h)
- [Pokémon configurations](/include/config/pokemon.h)
- [Item configurations](/include/config/item.h)
- [Overworld configurations](/include/config/overworld.h)
- [Debug configurations](/include/config/debug.h)
- Upgraded battle engine.
- [Battle configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/battle.h)
- [Pokémon configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/pokemon.h)
- [Item configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/item.h)
- [Overworld configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/overworld.h)
- [Debug configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/debug.h)
- ***Upgraded battle engine.***
- Gen5+ damage calculation.
- 2v2 Wild battles support.
- 1v2/2v1 battles support.
- Fairy Type (configurable).
- Physical/Special/Status Category Split (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/))
- [Form change tables](/src/data/pokemon/form_change_tables.h) that allow customizing most form changes.
- Mega Evolution, Primal Reversion and Ultra Burst.
- Z-Moves
- Gen 8+ damaging moves are given power extrapolated from Gen 7.
- Gen 8+ status moves have no additional effects, like Healing Wish.
- Battle gimmick support:
- Mega Evolution
- Primal Reversion
- Ultra Burst
- Z-Moves
- Gen 8+ damaging moves are given power extrapolated from Gen 7.
- Gen 8+ status moves have no additional effects, like Healing Wish.
- Dynamax and Gigantamax
- Initial battle parameters
- Queueing stat boosts (aka, Totem Boosts)
- Setting Terrains.
- Mid-turn speed recalculation.
- Quick Poké Ball selection in Wild Battles
- Press `R` to use last selected Poké Ball.
- Hold `R` to change selection with the D-Pad.
- Faster battle intro
- Message and animation/cry happens at the same time.
- Press `R` to use last selected Poké Ball.
- Run option shortcut
- Faster battle intro - Message and animation/cry happens at the same time.
- Faster HP drain.
- Battle Debug menu.
- Accessed by pressing `Select` on the "Fight/Bag/Pokémon/Run" menu.
@@ -51,8 +62,8 @@ The pokeemerald Expansion is a decomp hack base project based off pret's [pokeem
- Recalculating stats at the end of every battle.
- Level 100 Pokémon can earn EVs.
- Inverse battle support.
- TONS of other features listed [here](/include/config/battle.h).
- Full Trainer customization
- TONS of other features listed [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/battle.h).
- ***Full Trainer customization***
- Nickname, EVs, IVs, moves, ability, ball, friendship, nature, gender, shininess.
- Custom tag battle support (teaming up an NPC in a double battle).
- Sliding trainer messages.
@@ -61,11 +72,12 @@ The pokeemerald Expansion is a decomp hack base project based off pret's [pokeem
- New flag options to let you customize the intelligence of your trainers.
- Faster calculations.
- Specify Poké Balls by Trainer class.
- Pokémon Species from Generations 1-8.
- Option to disable unwanted generations.
- ***Pokémon Species from Generations 1-9.***
- Simplified process to add new Pokémon.
- Option to disable unwanted families.
- Updated sprites to DS style.
- Updated stats, types, abilities and egg groups (configurable).
- Updated Hoenn's Regional Dex to match ORAS'.
- Updated Hoenn's Regional Dex to match ORAS' (configurable).
- Updated National Dex incorporating the new species.
- Sprite and animation visualizer.
- Accesible by pressing `Select` on a Pokémon's Summary screen.
@@ -80,40 +92,56 @@ The pokeemerald Expansion is a decomp hack base project based off pret's [pokeem
- Available via Ability Patch.
- Compatible with Ghoul's DexNav branch.
- All gender differences.
- Different icons for female Hippopotas and Hippowdon
- 3 Perfect IVs on Legendaries, Mythicals and Ultra Beasts
- Breeding
- Custom female icons for female Hippopotas Hippowdon, Pikachu and Wobbufett
- 3 Perfect IVs on Legendaries, Mythicals and Ultra Beasts.
- ***Customizable form change tables. Full list of methods [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/form_change_types.h).***
- Item holding (eg. Giratina/Arceus)
- Item using (eg. Oricorio)
- Time of day option for Shaymin
- Fainting
- Battle begin and end (eg. Xerneas)
- Move change option for Zacian/Zamazenta
- Battle end in terrains (eg. Burmy)
- Switched in battle (eg. Palafin)
- HP Threshold (eg. Darmanitan)
- Weather (eg. Castform)
- End of turn (eg. Morpeko)
- Time of day (eg. Shaymin)
- Fusions (eg. Kyurem)
- ***Breeding Improvements***
- Incense Baby Pokémon now happen automatically (configurable).
- Level 1 eggs.
- Poké Ball inheriting.
- Egg Move Transfer, including Mirror Herb.
- Nature inheriting 100% of the time with Everstone
- Gen6+ Ability inheriting.
- Items from newer Generations. Full list [here](/include/constants/items.h).
- Level 1 eggs (configurable).
- Poké Ball inheriting (configurable).
- Egg Move Transfer, including Mirror Herb (configurable).
- Nature inheriting 100% of the time with Everstone (configurable)
- Gen6+ Ability inheriting (configurable).
- ***Items from newer Generations. Full list [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/items.h).***
- ***Gen 6+ Exp. Share*** (configurable)
- Berserk Gene
- Most battle items from Gen 4+
- Existing item data but missing effects:
- Mints
- Dynamax Candy
- Mulches
- Rotom Catalog
- DNA Splicers
- Zygarde Cube
- N Solarizer/Lunarizer
- Reins of Unity
- Dynamax Band
- Gimmighoul Coin
- Booster Energy
- Tera Shards
- Tera Orb
- Feature branches incorporated:
- [RHH intro credits](https://github.com/Xhyzi/pokeemerald/tree/rhh-intro-credits) by Xhyzi.
- ***Feature branches incorporated (with permission):***
- [RHH intro credits](https://github.com/Xhyzi/pokeemerald/tree/rhh-intro-credits) by @Xhyzi.
- A small signature from all of us to show the collective effort in the project :)
- [Overworld debug]() by TheXaman
- [Overworld debug](https://github.com/TheXaman/pokeemerald/tree/tx_debug_system) by @TheXaman
- May be disabled.
- Accesible by pressing `R + Start` in the overworld by default.
- **Additional features**:
- *Clear Boxes*: cleans every Pokémon from the Boxes.
- *Hatch an Egg*: lets you choose an Egg in your party and immediatly hatch it.
- Other features
- *Hatch an Egg*: lets you choose an Egg in your party and immediately hatch it.
- [HGSS Pokédex](https://github.com/TheXaman/pokeemerald/tree/tx_pokedexPlus_hgss) by @TheXaman
- May be disabled.
- **Additional features**:
- *Support for new evolution methods*.
- *Dark Mode*.
- [Nature Colors](https://github.com/DizzyEggg/pokeemerald/tree/nature_color) in summary screen by @DizzyEggg
- [Dynamic Multichoice](https://github.com/SBird1337/pokeemerald/tree/feature/dynmulti) by @SBird1337
- [Saveblock Cleansing](https://github.com/ghoulslash/pokeemerald/tree/saveblock) by @ghoulslash
- ***Other features***
- Pressing B while holding a Pokémon drops them like in modern games (configurable).
- Running indoors (configurable).
- Configurable overworld poison damage.
@@ -130,16 +158,23 @@ There are some mechanics, moves and abilities that are missing and being develop
### [Documentation on features can be found here](https://github.com/rh-hideout/pokeemerald-expansion/wiki)
## If I already have a project based on regular pokeemerald, can I use the pokeemerald Expansion
## If I already have a project based on regular pokeemerald, can I use pokeemerald-expansion?
Yes! Keep in mind that we keep up with pret's documentation of pokeemerald, which means that if your project a bit old, you might get merge conflicts that you need to solve manually.
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH master`.
With this, you'll get the latest version of the Expansion, plus a couple of bugfixes that haven't been released into the next patch version :)
With this, you'll get the latest version of pokeemerald-expansion, plus a couple of bugfixes that haven't been released into the next patch version :)
## **How do I update my version of the pokeemerald Expansion?**
## **How do I update my version of pokeemerald-expansion?**
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.6.2`.
- Check your current version.
- You can check in the debug menu's `Utilities -> Expansion Version` option.
- If the option is not available, you possibly have version 1.6.2 or older. In that case, please check the [changelogs](CHANGELOG.md) to determine your version based on the features available on your repository.
- 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.8.4, use `git pull RHH expansion/1.8.4`).
- ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on)
- Alternatively, you can update to unreleased versions of the expansion.
- ***master (stable):*** It contains unreleased **bugfixes** that will come in the next patch version. To merge, use `git pull RHH master`.
- ***upcoming (unstable, with potential bugs):*** It contains unreleased **features** that will come in the next minor version. To merge, use `git pull RHH upcoming`.
### Please consider crediting the entire [list of contributors](https://github.com/rh-hideout/pokeemerald-expansion/wiki/Credits) in your project, as they have all worked hard to develop this project :)
@@ -156,7 +191,7 @@ The project was originally started by DizzyEgg alongside other contributors.
The project has now gotten larger and DizzyEgg is now maintaining the project as part of the ROM Hacking Hideout community. Some members of this community are taking on larger roles to help maintain the project.
## What is ROM Hacking Hideout?
## What is the ROM Hacking Hideout?
A Discord-based ROM hacking community that has many members who hack using the disassembly and decompilation projects for Pokémon. Quite a few contributors to the original feature branches by DizzyEgg were members of ROM Hacking Hideout. You can call it RHH for short!

View File

@@ -1,783 +0,0 @@
.macro if_random_less_than param0:req, param1:req
.byte 0x0
.byte \param0
.4byte \param1
.endm
.macro if_random_greater_than param0:req, param1:req
.byte 0x1
.byte \param0
.4byte \param1
.endm
.macro if_random_equal param0:req, param1:req
.byte 0x2
.byte \param0
.4byte \param1
.endm
.macro if_random_not_equal param0:req, param1:req
.byte 0x3
.byte \param0
.4byte \param1
.endm
.macro score param0:req
.byte 0x4
.byte \param0
.endm
.macro if_hp_less_than battler:req, param1:req, param2:req
.byte 0x5
.byte \battler
.byte \param1
.4byte \param2
.endm
.macro if_hp_more_than battler:req, param1:req, param2:req
.byte 0x6
.byte \battler
.byte \param1
.4byte \param2
.endm
.macro if_hp_equal battler:req, param1:req, param2:req
.byte 0x7
.byte \battler
.byte \param1
.4byte \param2
.endm
.macro if_hp_not_equal battler:req, param1:req, param2:req
.byte 0x8
.byte \battler
.byte \param1
.4byte \param2
.endm
.macro if_status battler:req, status1:req, param2:req
.byte 0x9
.byte \battler
.4byte \status1
.4byte \param2
.endm
.macro if_not_status battler:req, status1:req, param2:req
.byte 0xa
.byte \battler
.4byte \status1
.4byte \param2
.endm
.macro if_status2 battler:req, status2:req, param2:req
.byte 0xb
.byte \battler
.4byte \status2
.4byte \param2
.endm
.macro if_not_status2 battler:req, status2:req, param2:req
.byte 0xc
.byte \battler
.4byte \status2
.4byte \param2
.endm
.macro if_status3 battler:req, status3:req, param2:req
.byte 0xd
.byte \battler
.4byte \status3
.4byte \param2
.endm
.macro if_not_status3 battler:req, status3:req, param2:req
.byte 0xe
.byte \battler
.4byte \status3
.4byte \param2
.endm
.macro if_side_affecting battler:req, sidestatus:req, param2:req
.byte 0xf
.byte \battler
.4byte \sidestatus
.4byte \param2
.endm
.macro if_not_side_affecting battler:req, sidestatus:req, param2:req
.byte 0x10
.byte \battler
.4byte \sidestatus
.4byte \param2
.endm
.macro if_less_than param0:req, param1:req
.byte 0x11
.byte \param0
.4byte \param1
.endm
.macro if_more_than param0:req, param1:req
.byte 0x12
.byte \param0
.4byte \param1
.endm
.macro if_equal param0:req, param1:req
.byte 0x13
.byte \param0
.4byte \param1
.endm
.macro if_not_equal param0:req, param1:req
.byte 0x14
.byte \param0
.4byte \param1
.endm
.macro if_less_than_ptr param0:req, param1:req
.byte 0x15
.4byte \param0
.4byte \param1
.endm
.macro if_more_than_ptr param0:req, param1:req
.byte 0x16
.4byte \param0
.4byte \param1
.endm
.macro if_equal_ptr param0:req, param1:req
.byte 0x17
.4byte \param0
.4byte \param1
.endm
.macro if_not_equal_ptr param0:req, param1:req
.byte 0x18
.4byte \param0
.4byte \param1
.endm
.macro if_move param0:req, param1:req
.byte 0x19
.2byte \param0
.4byte \param1
.endm
.macro if_not_move param0:req, param1:req
.byte 0x1a
.2byte \param0
.4byte \param1
.endm
.macro if_in_bytes param0:req, param1:req
.byte 0x1b
.4byte \param0
.4byte \param1
.endm
.macro if_not_in_bytes param0:req, param1:req
.byte 0x1c
.4byte \param0
.4byte \param1
.endm
.macro if_in_hwords param0:req, param1:req
.byte 0x1d
.4byte \param0
.4byte \param1
.endm
.macro if_not_in_hwords param0:req, param1:req
.byte 0x1e
.4byte \param0
.4byte \param1
.endm
.macro if_user_has_attacking_move param0:req
.byte 0x1f
.4byte \param0
.endm
.macro if_user_has_no_attacking_moves param0:req
.byte 0x20
.4byte \param0
.endm
.macro get_turn_count
.byte 0x21
.endm
.macro get_type param0:req
.byte 0x22
.byte \param0
.endm
.macro get_considered_move_power
.byte 0x23
.endm
.macro get_how_powerful_move_is
.byte 0x24
.endm
.macro get_last_used_bank_move battler:req
.byte 0x25
.byte \battler
.endm
.macro if_equal_u32 param0:req, param1:req
.byte 0x26
.4byte \param0
.4byte \param1
.endm
.macro if_not_equal_u32 param0:req, param1:req
.byte 0x27
.4byte \param0
.4byte \param1
.endm
.macro if_user_goes param0:req, param1:req
.byte 0x28
.byte \param0
.4byte \param1
.endm
.macro if_cant_use_belch battler:req, ptr:req
.byte 0x29
.byte \battler
.4byte \ptr
.endm
.macro nop_2A
.byte 0x2a
.endm
.macro nop_2B
.byte 0x2b
.endm
.macro count_usable_party_mons battler:req
.byte 0x2c
.byte \battler
.endm
.macro get_considered_move
.byte 0x2d
.endm
.macro get_considered_move_effect
.byte 0x2e
.endm
.macro get_ability battler:req
.byte 0x2f
.byte \battler
.endm
.macro get_highest_type_effectiveness
.byte 0x30
.endm
.macro if_type_effectiveness param0:req, param1:req
.byte 0x31
.byte \param0
.4byte \param1
.endm
.macro nop_32
.byte 0x32
.endm
.macro nop_33
.byte 0x33
.endm
.macro if_status_in_party battler:req, status1:req, param2:req
.byte 0x34
.byte \battler
.4byte \status1
.4byte \param2
.endm
.macro if_status_not_in_party battler:req, status1:req, param2:req
.byte 0x35
.byte \battler
.4byte \status1
.4byte \param2
.endm
.macro get_weather
.byte 0x36
.endm
.macro if_effect param0:req, param1:req
.byte 0x37
.2byte \param0
.4byte \param1
.endm
.macro if_not_effect param0:req, param1:req
.byte 0x38
.2byte \param0
.4byte \param1
.endm
.macro if_stat_level_less_than battler:req, stat:req, param2:req, param3:req
.byte 0x39
.byte \battler
.byte \stat
.byte \param2
.4byte \param3
.endm
.macro if_stat_level_more_than battler:req, stat:req, param2:req, param3:req
.byte 0x3a
.byte \battler
.byte \stat
.byte \param2
.4byte \param3
.endm
.macro if_stat_level_equal battler:req, stat:req, param2:req, param3:req
.byte 0x3b
.byte \battler
.byte \stat
.byte \param2
.4byte \param3
.endm
.macro if_stat_level_not_equal battler:req, stat:req, param2:req, param3:req
.byte 0x3c
.byte \battler
.byte \stat
.byte \param2
.4byte \param3
.endm
.macro if_can_faint param0:req
.byte 0x3d
.4byte \param0
.endm
.macro if_cant_faint param0:req
.byte 0x3e
.4byte \param0
.endm
.macro if_has_move battler:req, param1:req, param2:req
.byte 0x3f
.byte \battler
.2byte \param1
.4byte \param2
.endm
.macro if_doesnt_have_move battler:req, param1:req, param2:req
.byte 0x40
.byte \battler
.2byte \param1
.4byte \param2
.endm
.macro if_has_move_with_effect battler:req, param1:req, param2:req
.byte 0x41
.byte \battler
.byte \param1
.4byte \param2
.endm
.macro if_doesnt_have_move_with_effect battler:req, param1:req, param2:req
.byte 0x42
.byte \battler
.byte \param1
.4byte \param2
.endm
.macro if_any_move_disabled_or_encored battler:req, param1:req, param2:req
.byte 0x43
.byte \battler
.byte \param1
.4byte \param2
.endm
.macro if_curr_move_disabled_or_encored param0:req, param1:req
.byte 0x44
.byte \param0
.4byte \param1
.endm
.macro flee
.byte 0x45
.endm
.macro if_random_safari_flee param0:req
.byte 0x46
.4byte \param0
.endm
.macro watch
.byte 0x47
.endm
.macro get_hold_effect battler:req
.byte 0x48
.byte \battler
.endm
.macro get_gender battler:req
.byte 0x49
.byte \battler
.endm
.macro is_first_turn_for battler:req
.byte 0x4a
.byte \battler
.endm
.macro get_stockpile_count battler:req
.byte 0x4b
.byte \battler
.endm
.macro is_double_battle
.byte 0x4c
.endm
.macro get_used_held_item battler:req
.byte 0x4d
.byte \battler
.endm
.macro get_move_type_from_result
.byte 0x4e
.endm
.macro get_move_power_from_result
.byte 0x4f
.endm
.macro get_move_effect_from_result
.byte 0x50
.endm
.macro get_protect_count battler:req
.byte 0x51
.byte \battler
.endm
.macro if_move_flag flag jumpptr
.byte 0x52
.4byte \flag
.4byte \jumpptr
.endm
.macro if_field_status flag jumpptr
.byte 0x53
.4byte \flag
.4byte \jumpptr
.endm
.macro get_move_accuracy
.byte 0x54
.endm
.macro call_if_eq value, ptr
.byte 0x55
.2byte \value
.4byte \ptr
.endm
.macro call_if_move_flag flag ptr
.byte 0x56
.4byte \flag
.4byte \ptr
.endm
.macro nop_57
.byte 0x57
.endm
.macro call param0:req
.byte 0x58
.4byte \param0
.endm
.macro goto param0:req
.byte 0x59
.4byte \param0
.endm
.macro end
.byte 0x5a
.endm
.macro if_level_cond param0:req, param1:req
.byte 0x5b
.byte \param0
.4byte \param1
.endm
.macro if_target_taunted param0:req
.byte 0x5c
.4byte \param0
.endm
.macro if_target_not_taunted param0:req
.byte 0x5d
.4byte \param0
.endm
.macro if_target_is_ally param0:req
.byte 0x5e
.4byte \param0
.endm
.macro is_of_type battler:req, type:req
.byte 0x5f
.byte \battler
.byte \type
.endm
.macro check_ability battler:req, ability:req
.byte 0x60
.byte \battler
.byte \ability
.endm
.macro if_flash_fired battler:req, param1:req
.byte 0x61
.byte \battler
.4byte \param1
.endm
.macro if_holds_item battler:req, param1:req, param2:req
.byte 0x62
.byte \battler
.2byte \param1
.4byte \param2
.endm
.macro get_ally_chosen_move
.byte 0x63
.endm
.macro if_has_no_attacking_moves battler:req, param1:req
.byte 0x64
.byte \battler
.4byte \param1
.endm
.macro get_hazards_count battler:req, effect:req
.byte 0x65
.byte \battler
.2byte \effect
.endm
.macro if_doesnt_hold_berry battler:req, ptr:req
.byte 0x66
.byte \battler
.4byte \ptr
.endm
.macro if_share_type battler1:req, battler2:req, ptr:req
.byte 0x67
.byte \battler1
.byte \battler2
.4byte \ptr
.endm
.macro if_cant_use_last_resort battler:req, ptr:req
.byte 0x68
.byte \battler
.4byte \ptr
.endm
.macro if_has_move_with_split battler:req, split:req, ptr:req
.byte 0x69
.byte \battler
.byte \split
.4byte \ptr
.endm
.macro if_has_no_move_with_split battler:req, split:req, ptr:req
.byte 0x6A
.byte \battler
.byte \split
.4byte \ptr
.endm
.macro if_physical_moves_unusable attacker:req, target:req, ptr:req
.byte 0x6B
.byte \attacker
.byte \target
.4byte \ptr
.endm
.macro if_ai_can_go_down ptr:req
.byte 0x6C
.4byte \ptr
.endm
.macro if_has_move_with_type battler:req, type:req, ptr:req
.byte 0x6D
.byte \battler
.byte \type
.4byte \ptr
.endm
.macro if_no_move_used battler:req, ptr:req
.byte 0x6E
.byte \battler
.4byte \ptr
.endm
.macro if_has_move_with_flag battler:req, flag:req, ptr:req
.byte 0x6F
.byte \battler
.4byte \flag
.4byte \ptr
.endm
.macro if_battler_absent battler:req, ptr:req
.byte 0x70
.byte \battler
.4byte \ptr
.endm
.macro if_grounded battler:req, ptr:req
.byte 0x71
.byte \battler
.4byte \ptr
.endm
.macro get_best_dmg_hp_percent
.byte 0x72
.endm
.macro get_curr_dmg_hp_percent
.byte 0x73
.endm
.macro get_move_split_from_result
.byte 0x74
.endm
.macro get_considered_move_split
.byte 0x75
.endm
.macro get_considered_move_target
.byte 0x76
.endm
.macro compare_speeds battler1:req, battler2:req
.byte 0x77
.byte \battler1
.byte \battler2
.endm
.macro is_wakeup_turn battler:req
.byte 0x78
.byte \battler
.endm
.macro if_has_move_with_accuracy_lt battler:req, value:req, ptr:req
.byte 0x79
.byte \battler
.byte \value
.4byte \ptr
.endm
@ useful script macros
.macro if_has_physical_move battler:req, ptr:req
if_has_move_with_split \battler, SPLIT_PHYSICAL, \ptr
.endm
.macro if_has_no_physical_move battler:req, ptr:req
if_has_no_move_with_split \battler, SPLIT_PHYSICAL, \ptr
.endm
.macro if_has_special_move battler:req, ptr:req
if_has_move_with_split \battler, SPLIT_SPECIAL, \ptr
.endm
.macro if_has_no_special_move battler:req, ptr:req
if_has_no_move_with_split \battler, SPLIT_SPECIAL, \ptr
.endm
.macro if_holds_no_item battler, ptr:req
if_holds_item \battler, 0, \ptr
.endm
.macro get_curr_move_type
get_type AI_TYPE_MOVE
.endm
.macro get_user_type1
get_type AI_TYPE1_USER
.endm
.macro get_user_type2
get_type AI_TYPE2_USER
.endm
.macro get_target_type1
get_type AI_TYPE1_TARGET
.endm
.macro get_target_type2
get_type AI_TYPE2_TARGET
.endm
.macro if_ability battler:req, ability:req, ptr:req
check_ability \battler, \ability
if_equal 1, \ptr
.endm
.macro if_no_ability battler:req, ability:req, ptr:req
check_ability \battler, \ability
if_equal 0, \ptr
.endm
.macro if_type battler:req, type:req, ptr:req
is_of_type \battler, \type
if_equal 1, \ptr
.endm
.macro if_no_type battler:req, type:req, ptr:req
is_of_type \battler, \type
if_equal 0, \ptr
.endm
.macro if_target_faster ptr:req
if_user_goes 1, \ptr
.endm
.macro if_user_faster ptr:req
if_user_goes 0, \ptr
.endm
.macro if_double_battle ptr:req
is_double_battle
if_equal 1, \ptr
.endm
.macro if_not_double_battle ptr:req
is_double_battle
if_equal 0, \ptr
.endm
.macro if_any_move_disabled battler:req, ptr:req
if_any_move_disabled_or_encored \battler, 0, \ptr
.endm
.macro if_any_move_encored battler:req, ptr:req
if_any_move_disabled_or_encored \battler, 1, \ptr
.endm
.macro call_if_always_hit ptr:req
get_move_accuracy
call_if_eq 0, \ptr
.endm

View File

@@ -98,7 +98,7 @@
waitstate
.endm
.macro multi_do type:req, partnerId:req, partnerPicId:req
.macro multi_do type:req, partnerId:req
special ReducePlayerPartyToSelectedMons
setvar VAR_0x8004, FRONTIER_UTIL_FUNC_SET_DATA
setvar VAR_0x8005, FRONTIER_DATA_SELECTED_MON_ORDER
@@ -106,7 +106,6 @@
setvar VAR_0x8004, SPECIAL_BATTLE_MULTI
setvar VAR_0x8005, \type | MULTI_BATTLE_CHOOSE_MONS
setvar VAR_0x8006, \partnerId
setvar VAR_0x8007, \partnerPicId
special DoSpecialTrainerBattle
waitstate
setvar VAR_0x8004, FRONTIER_UTIL_FUNC_SAVE_PARTY
@@ -114,30 +113,29 @@
special LoadPlayerParty
.endm
.macro multi_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req, partnerPicId:req
.macro multi_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req
special SavePlayerParty
trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons
trainerbattle TRAINER_BATTLE_SET_TRAINER_B, \trainer2Id, 0, NULL, \trainer2LoseText @ set second trainer mons
multi_do MULTI_BATTLE_2_VS_2, \partnerId, \partnerPicId
multi_do MULTI_BATTLE_2_VS_2, \partnerId
.endm
.macro multi_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req, partnerPicId:req
.macro multi_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req
special SavePlayerParty
trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons
multi_do MULTI_BATTLE_2_VS_1, \partnerId, \partnerPicId
multi_do MULTI_BATTLE_2_VS_1, \partnerId
.endm
@ Wild mons need to be assigned to gEnemyParty 0 and 3 slots, other slots need to be cleared out.
.macro multi_wild partnerId:req, partnerPicId:req
.macro multi_wild partnerId:req
special SavePlayerParty
multi_do MULTI_BATTLE_2_VS_WILD, \partnerId, \partnerPicId
multi_do MULTI_BATTLE_2_VS_WILD, \partnerId
.endm
.macro multi_do_fixed type:req, partnerId:req, partnerPicId:req
.macro multi_do_fixed type:req, partnerId:req
setvar VAR_0x8004, SPECIAL_BATTLE_MULTI
setvar VAR_0x8005, \type
setvar VAR_0x8006, \partnerId
setvar VAR_0x8007, \partnerPicId
special DoSpecialTrainerBattle
waitstate
setvar VAR_0x8004, FRONTIER_UTIL_FUNC_SAVE_PARTY
@@ -145,21 +143,21 @@
special LoadPlayerParty
.endm
.macro multi_fixed_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req, partnerPicId:req
.macro multi_fixed_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req
special SavePlayerParty
trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons
trainerbattle TRAINER_BATTLE_SET_TRAINER_B, \trainer2Id, 0, NULL, \trainer2LoseText @ set second trainer mons
multi_do_fixed MULTI_BATTLE_2_VS_2, \partnerId, \partnerPicId
multi_do_fixed MULTI_BATTLE_2_VS_2, \partnerId
.endm
.macro multi_fixed_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req, partnerPicId:req
.macro multi_fixed_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req
special SavePlayerParty
trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons
multi_do_fixed MULTI_BATTLE_2_VS_1, \partnerId, \partnerPicId
multi_do_fixed MULTI_BATTLE_2_VS_1, \partnerId
.endm
@ Wild mons need to be assigned to gEnemyParty 0 and 3 slots, other slots need to be cleared out.
.macro multi_fixed_wild partnerId:req, partnerPicId:req
.macro multi_fixed_wild partnerId:req
special SavePlayerParty
multi_do_fixed MULTI_BATTLE_2_VS_WILD, \partnerId, \partnerPicId
multi_do_fixed MULTI_BATTLE_2_VS_WILD, \partnerId
.endm

View File

@@ -72,6 +72,10 @@
.2byte \id
.endm
.macro printsavedstring
printstring 0
.endm
.macro printselectionstring id:req
.byte 0x11
.2byte \id
@@ -92,19 +96,30 @@
.4byte \ptr
.endm
.macro seteffectwithchance
.macro setadditionaleffects
1:
.byte 0x15
jumpifhalfword CMP_EQUAL, sMOVE_EFFECT, MOVE_EFFECT_CONTINUE, 1b
.endm
.macro seteffectprimary
.macro seteffectprimary moveEffect=0
.if \moveEffect != 0
setmoveeffect \moveEffect
.endif
.byte 0x16
.endm
.macro seteffectsecondary
.macro seteffectsecondary moveEffect=0
.if \moveEffect != 0
setmoveeffect \moveEffect
.endif
.byte 0x17
.endm
.macro clearstatusfromeffect battler:req
.macro clearstatusfromeffect battler:req, moveEffect=0
.if \moveEffect != 0
setmoveeffect \moveEffect
.endif
.byte 0x18
.byte \battler
.endm
@@ -362,11 +377,6 @@
.byte 0x3f
.endm
.macro jumpifaffectedbyprotect failInstr:req
.byte 0x40
.4byte \failInstr
.endm
.macro call instr:req
.byte 0x41
.4byte \instr
@@ -521,9 +531,10 @@
.byte 0x57
.endm
.macro returntoball battler:req
.macro returntoball battler:req, changingForm:req
.byte 0x58
.byte \battler
.byte \changingForm
.endm
.macro handlelearnnewmove learnedMoveInstr:req, nothingToLearnInstr:req, isFirstMove:req
@@ -769,8 +780,21 @@
.byte 0x8b
.endm
.macro confuseifrepeatingattackends
.macro twoturnmoveschargestringandanimation
.byte 0x8c
.4byte 1f @animation then attack string
@default - attack string then animation
printsavedstring
waitmessage B_WAIT_TIME_LONG
attackanimation
waitanimation
goto 2f
1:
attackanimation
waitanimation
printsavedstring
waitmessage B_WAIT_TIME_LONG
2:
.endm
.macro setmultihitcounter value:req
@@ -831,8 +855,9 @@
.byte 0x99
.endm
.macro setfocusenergy
.macro setfocusenergy battler:req
.byte 0x9a
.byte \battler
.endm
.macro transformdataexecution
@@ -985,7 +1010,7 @@
.byte 0xbb
.endm
.macro maxattackhalvehp failInstr:req
.macro halvehp failInstr:req
.byte 0xbc
.4byte \failInstr
.endm
@@ -1028,12 +1053,28 @@
.4byte \failInstr
.endm
.macro setsemiinvulnerablebit
.macro setsemiinvulnerablebit clear=FALSE
.byte 0xc5
.byte \clear
.endm
.macro clearsemiinvulnerablebit
setsemiinvulnerablebit TRUE
.endm
.macro tryfiretwoturnmovenowbyeffect battler:req, checkChargeTurnEffects:req, jumpInstr:req
.byte 0xc6
.byte \battler
.byte \checkChargeTurnEffects
.4byte \jumpInstr
.endm
.macro tryfiretwoturnmovewithoutcharging battler:req, jumpInstr:req
tryfiretwoturnmovenowbyeffect \battler, TRUE, \jumpInstr
.endm
.macro tryfiretwoturnmoveaftercharging battler:req, jumpInstr:req
tryfiretwoturnmovenowbyeffect \battler, FALSE, \jumpInstr
.endm
.macro setminimize
@@ -1092,8 +1133,9 @@
.4byte \failInstr
.endm
.macro trycopyability failInstr:req
.macro trycopyability battler:req, failInstr:req
.byte 0xd3
.byte \battler
.4byte \failInstr
.endm
@@ -1179,8 +1221,10 @@
.4byte \jumpInstr
.endm
.macro getsecretpowereffect
.macro jumpifnotcurrentmoveargtype battler:req, failInstr:req
.byte 0xe4
.byte \battler
.4byte \failInstr
.endm
.macro pickup
@@ -1318,10 +1362,17 @@
.4byte \jumpInstr
.endm
.macro jumpifholdeffect battler:req, holdEffect:req, jumpInstr:req
callnative BS_JumpIfHoldEffect
.macro itemstatchangeeffects battler:req
callnative BS_RunStatChangeItems
.byte \battler
.2byte \holdEffect
.endm
.macro allyswitchswapbattlers
callnative BS_AllySwitchSwapBattler
.endm
.macro allyswitchfailchance jumpInstr:req
callnative BS_AllySwitchFailChance
.4byte \jumpInstr
.endm
@@ -1337,12 +1388,15 @@
.4byte \jumpInstr
.endm
.macro itemrestorehp
.macro itemrestorehp jumpInstr:req, restoreBattlerInstr:req
callnative BS_ItemRestoreHP
.4byte \jumpInstr
.4byte \restoreBattlerInstr
.endm
.macro itemcurestatus
.macro itemcurestatus jumpInstr:req
callnative BS_ItemCureStatus
.4byte \jumpInstr
.endm
.macro itemincreasestat
@@ -1366,6 +1420,36 @@
.byte \battler
.endm
.macro trysetoctolock battler:req, failInstr:req
callnative BS_TrySetOctolock
.byte \battler
.4byte \failInstr
.endm
.macro setglaiverush
callnative BS_SetGlaiveRush
.endm
.macro tryrelicsong
callnative BS_TryRelicSong
.endm
.macro setpledge jumpInstr:req
callnative BS_SetPledge
.4byte \jumpInstr
.endm
.macro setpledgestatus battler:req sidestatus:req
callnative BS_SetPledgeStatus
.byte \battler
.4byte \sidestatus
.endm
.macro trycopycat failInstr:req
callnative BS_TryCopycat
.4byte \failInstr
.endm
.macro setzeffect
callnative BS_SetZEffect
.endm
@@ -1461,6 +1545,108 @@
.4byte \failInstr
.endm
@ Used to active a different Max Move effects.
.macro setmaxmoveeffect
callnative BS_SetMaxMoveEffect
.endm
.macro setsteelsurge, failInstr:req
callnative BS_SetSteelsurge
.4byte \failInstr
.endm
.macro damagenontypes
callnative BS_DamageNonTypes
.endm
.macro trysetstatus1, ptr:req
callnative BS_TrySetStatus1
.4byte \ptr
.endm
.macro trysetstatus2, ptr:req
callnative BS_TrySetStatus2
.4byte \ptr
.endm
.macro tryhealsixthhealth, ptr:req
callnative BS_HealOneSixth
.4byte \ptr
.endm
.macro tryrecycleberry, ptr:req
callnative BS_TryRecycleBerry
.4byte \ptr
.endm
.macro updatedynamax
callnative BS_UpdateDynamax
.endm
.macro jumpiftargetdynamaxed, ptr:req
callnative BS_JumpIfDynamaxed
.4byte \ptr
.endm
.macro trytrainerslidezmovemsg
callnative BS_TryTrainerSlideZMoveMsg
.endm
.macro trytrainerslidemegaevolutionmsg
callnative BS_TryTrainerSlideMegaEvolutionMsg
.endm
.macro trytrainerslidedynamaxmsg
callnative BS_TryTrainerSlideDynamaxMsg
.endm
.macro tryhealpulse failInstr:req
callnative BS_TryHealPulse
.4byte \failInstr
.endm
.macro trydefog clear:req, failInstr:req
callnative BS_TryDefog
.byte \clear
.4byte \failInstr
.endm
.macro trytriggerstatusform
callnative BS_TryTriggerStatusForm
.endm
.macro setphotongeysercategory
callnative BS_SetPhotonGeyserCategory
.endm
.macro tryupperhand failInstr:req
callnative BS_TryUpperHand
.4byte \failInstr
.endm
.macro tryupdaterecoiltracker
callnative BS_TryUpdateRecoilTracker
.endm
.macro trytidyup clear:req, jumpInstr:req
callnative BS_TryTidyUp
.byte \clear
.4byte \jumpInstr
.endm
.macro trygulpmissile
callnative BS_TryGulpMissile
.endm
.macro tryactivategulpmissile
callnative BS_TryActivateGulpMissile
.endm
.macro tryquash failInstr:req
callnative BS_TryQuash
.4byte \failInstr
.endm
@ various command changed to more readable macros
.macro cancelmultiturnmoves battler:req
various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES
@@ -1652,16 +1838,6 @@
various \battler, VARIOUS_SET_LAST_USED_ABILITY
.endm
.macro tryhealpulse battler:req, failInstr:req
various \battler, VARIOUS_TRY_HEAL_PULSE
.4byte \failInstr
.endm
.macro tryquash failInstr:req
various BS_ATTACKER, VARIOUS_TRY_QUASH
.4byte \failInstr
.endm
.macro tryafteryou failInstr:req
various BS_ATTACKER, VARIOUS_AFTER_YOU
.4byte \failInstr
@@ -1706,8 +1882,8 @@
.4byte \jumpInstr
.endm
.macro argumentstatuseffect
various BS_ATTACKER, VARIOUS_ARGUMENT_STATUS_EFFECT
.macro setargtobattledamage
various BS_ATTACKER, VARIOUS_SET_ARG_TO_BATTLE_DAMAGE
.endm
.macro tryhitswitchtarget failInstr:req
@@ -1725,11 +1901,6 @@
.4byte \jumpInstr
.endm
.macro trycopycat failInstr:req
various BS_ATTACKER, VARIOUS_TRY_COPYCAT
.4byte \failInstr
.endm
.macro showabilitypopup battler:req
various \battler, VARIOUS_ABILITY_POPUP
.endm
@@ -1738,12 +1909,6 @@
various \battler, VARIOUS_UPDATE_ABILITY_POPUP
.endm
.macro defogclear battler:req, clear:req, failInstr:req
various \battler, VARIOUS_DEFOG
.byte \clear
.4byte \failInstr
.endm
.macro jumpiftargetally jumpInstr:req
various BS_ATTACKER, VARIOUS_JUMP_IF_TARGET_ALLY
.4byte \jumpInstr
@@ -1762,10 +1927,6 @@
various \battler, VARIOUS_POWER_TRICK
.endm
.macro argumenttomoveeffect
various BS_ATTACKER, VARIOUS_ARGUMENT_TO_MOVE_EFFECT
.endm
.macro jumpifnotgrounded battler:req, jumpInstr:req
various \battler, VARIOUS_JUMP_IF_NOT_GROUNDED
.4byte \jumpInstr
@@ -1893,10 +2054,15 @@
.4byte \jumpInstr
.endm
.macro jumpifnoholdeffect battler:req, holdEffect:req, jumpInstr:req
various \battler, VARIOUS_JUMP_IF_NO_HOLD_EFFECT
.macro jumpifholdeffect battler:req, holdEffect:req, jumpInstr:req, equal=TRUE
various \battler, VARIOUS_JUMP_IF_HOLD_EFFECT
.byte \holdEffect
.4byte \jumpInstr
.byte \equal
.endm
.macro jumpifnoholdeffect battler:req, holdEffect:req, jumpInstr:req
jumpifholdeffect \battler, \holdEffect, \jumpInstr, FALSE
.endm
.macro infatuatewithbattler battler:req, infatuateWith:req
@@ -2004,10 +2170,6 @@
.4byte \jumpInstr
.endm
.macro applyplasmafists
various BS_ATTACKER, VARIOUS_APPLY_PLASMA_FISTS
.endm
.macro jumpifweatheraffected battler:req, flags:req, jumpInstr:req
various \battler, VARIOUS_JUMP_IF_WEATHER_AFFECTED
.4byte \flags
@@ -2044,24 +2206,11 @@
.4byte \failInstr
.endm
.macro setoctolock battler:req, failInstr:req
various \battler, VARIOUS_SET_OCTOLOCK
.4byte \failInstr
.endm
.macro cutonethirdhpraisestats failInstr:req
various BS_ATTACKER, VARIOUS_CUT_1_3_HP_RAISE_STATS
.4byte \failInstr
.endm
.macro photongeysercheck battler:req
various \battler, VARIOUS_PHOTON_GEYSER_CHECK
.endm
.macro shellsidearmcheck
various BS_ATTACKER, VARIOUS_SHELL_SIDE_ARM_CHECK
.endm
.macro jumpifteanoberry jumpInstr:req
various BS_ATTACKER, VARIOUS_TEATIME_TARGETS
.4byte \jumpInstr
@@ -2129,14 +2278,6 @@
various \battler, VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES
.endm
.macro trytrainerslidezmovemsg battler:req
various \battler, VARIOUS_TRY_TRAINER_SLIDE_MSG_Z_MOVE
.endm
.macro trytrainerslidemegaevolutionmsg battler:req
various \battler, VARIOUS_TRY_TRAINER_SLIDE_MSG_MEGA_EVOLUTION
.endm
@ helpful macros
.macro setstatchanger stat:req, stages:req, down:req
setbyte sSTATCHANGER, \stat | \stages << 3 | \down << 7
@@ -2236,10 +2377,6 @@
manipulatedamage DMG_CURR_ATTACKER_HP
.endm
.macro dmg_1_2_attackerhp
manipulatedamage DMG_1_2_ATTACKER_HP
.endm
.macro jumpifflowerveil jumpInstr:req
jumpifnottype BS_TARGET, TYPE_GRASS, 1f
jumpifability BS_TARGET_SIDE, ABILITY_FLOWER_VEIL, \jumpInstr
@@ -2261,6 +2398,15 @@
goto \jumpInstr
.endm
.macro setallytonextattacker jumpInstr:req
jumpifbyte CMP_GREATER_THAN, gBattlerAttacker, 0x1, 1f
addbyte gBattlerAttacker, 0x2
goto \jumpInstr
1:
subbyte gBattlerAttacker, 0x2
goto \jumpInstr
.endm
.macro jumpifleafguardprotected battler:req, jumpInstr:req
various \battler, VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED
.4byte \jumpInstr
@@ -2340,3 +2486,8 @@
getbattlerfainted \battler
jumpifbyte CMP_EQUAL, gBattleCommunication, \value, \ptr
.endm
.macro flushtextbox
printstring STRINGID_EMPTYSTRING3
waitmessage 1
.endm

View File

@@ -984,16 +984,62 @@
.byte \textTop
.endm
@ Gives the player a Pokémon of the specified species and level, holding the specified item. The trailing 0s are unused parameters.
@ Gives the player a Pokémon of the specified species and level, and allows to customize extra parameters.
@ VAR_RESULT will be set to MON_GIVEN_TO_PARTY, MON_GIVEN_TO_PC, or MON_CANT_GIVE depending on the outcome.
.macro givemon species:req, level:req, item=ITEM_NONE
.byte 0x79
.macro givemon species:req, level:req, item, ball, nature, abilityNum, gender, hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, move1, move2, move3, move4, isShiny, ggMaxFactor, teraType
callnative ScrCmd_givemon
.set givemon_flags, 0
.2byte \species
.byte \level
.2byte \item
.4byte 0
.4byte 0
.byte 0
.2byte \level
.ifnb \item; .set givemon_flags, givemon_flags | (1 << 0); .endif
.ifnb \ball; .set givemon_flags, givemon_flags | (1 << 1); .endif
.ifnb \nature; .set givemon_flags, givemon_flags | (1 << 2); .endif
.ifnb \abilityNum; .set givemon_flags, givemon_flags | (1 << 3); .endif
.ifnb \gender; .set givemon_flags, givemon_flags | (1 << 4); .endif
.ifnb \hpEv; .set givemon_flags, givemon_flags | (1 << 5); .endif
.ifnb \atkEv; .set givemon_flags, givemon_flags | (1 << 6); .endif
.ifnb \defEv; .set givemon_flags, givemon_flags | (1 << 7); .endif
.ifnb \speedEv; .set givemon_flags, givemon_flags | (1 << 8); .endif
.ifnb \spAtkEv; .set givemon_flags, givemon_flags | (1 << 9); .endif
.ifnb \spDefEv; .set givemon_flags, givemon_flags | (1 << 10); .endif
.ifnb \hpIv; .set givemon_flags, givemon_flags | (1 << 11); .endif
.ifnb \atkIv; .set givemon_flags, givemon_flags | (1 << 12); .endif
.ifnb \defIv; .set givemon_flags, givemon_flags | (1 << 13); .endif
.ifnb \speedIv; .set givemon_flags, givemon_flags | (1 << 14); .endif
.ifnb \spAtkIv; .set givemon_flags, givemon_flags | (1 << 15); .endif
.ifnb \spDefIv; .set givemon_flags, givemon_flags | (1 << 16); .endif
.ifnb \move1; .set givemon_flags, givemon_flags | (1 << 17); .endif
.ifnb \move2; .set givemon_flags, givemon_flags | (1 << 18); .endif
.ifnb \move3; .set givemon_flags, givemon_flags | (1 << 19); .endif
.ifnb \move4; .set givemon_flags, givemon_flags | (1 << 20); .endif
.ifnb \isShiny; .set givemon_flags, givemon_flags | (1 << 21); .endif
.ifnb \ggMaxFactor; .set givemon_flags, givemon_flags | (1 << 22); .endif
.ifnb \teraType; .set givemon_flags, givemon_flags | (1 << 23); .endif
.4byte givemon_flags
.ifnb \item; .2byte \item; .endif
.ifnb \ball; .2byte \ball; .endif
.ifnb \nature; .2byte \nature; .endif
.ifnb \abilityNum; .2byte \abilityNum; .endif
.ifnb \gender; .2byte \gender; .endif
.ifnb \hpEv; .2byte \hpEv; .endif
.ifnb \atkEv; .2byte \atkEv; .endif
.ifnb \defEv; .2byte \defEv; .endif
.ifnb \speedEv; .2byte \speedEv; .endif
.ifnb \spAtkEv; .2byte \spAtkEv; .endif
.ifnb \spDefEv; .2byte \spDefEv; .endif
.ifnb \hpIv; .2byte \hpIv; .endif
.ifnb \atkIv; .2byte \atkIv; .endif
.ifnb \defIv; .2byte \defIv; .endif
.ifnb \speedIv; .2byte \speedIv; .endif
.ifnb \spAtkIv; .2byte \spAtkIv; .endif
.ifnb \spDefIv; .2byte \spDefIv; .endif
.ifnb \move1; .2byte \move1; .endif
.ifnb \move2; .2byte \move2; .endif
.ifnb \move3; .2byte \move3; .endif
.ifnb \move4; .2byte \move4; .endif
.ifnb \isShiny; .2byte \isShiny; .endif
.ifnb \ggMaxFactor; .2byte \ggMaxFactor; .endif
.ifnb \teraType; .2byte \teraType; .endif
.endm
@ Gives the player an Egg of the specified species.
@@ -1735,6 +1781,38 @@
.2byte \quantity
.endm
.macro _dynmultichoice left:req, top:req, ignoreBPress:req, maxBeforeScroll:req, shouldSort:req, initialSelected:req, callbacks:req argv:vararg
.byte 0xe3
.2byte \left
.2byte \top
.byte \ignoreBPress
.byte \maxBeforeScroll
.byte \shouldSort
.2byte \initialSelected
.byte \callbacks
.byte (.Ldynmultichoice_\@_2 - .Ldynmultichoice_\@_1) / 4
.Ldynmultichoice_\@_1:
.4byte \argv
.Ldynmultichoice_\@_2:
.endm
@ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made.
@ Lists of options are provided in argv.
@ If ignoreBPress is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button.
.macro dynmultichoice left:req, top:req, ignoreBPress:req, maxBeforeScroll:req, initialSelected:req, callbacks:req argv:vararg
_dynmultichoice \left, \top, \ignoreBPress, \maxBeforeScroll, FALSE, \initialSelected, \callbacks, \argv
.endm
.macro dynmultipush name:req, id:req
.byte 0xe4
.4byte \name
.2byte \id
.endm
.macro dynmultistack left:req, top:req, ignoreBPress:req, maxBeforeScroll:req, shouldSort:req, initialSelected:req, callbacks:req
_dynmultichoice \left, \top, \ignoreBPress, \maxBeforeScroll, \shouldSort, \initialSelected, \callbacks, NULL
.endm
@ Supplementary
@@ -2025,3 +2103,72 @@
callnative CreateTrainerPartyForPlayer
trainerbattle_no_intro \trainer2, NULL
.endm
@ Sets VAR_RESULT to TRUE if stat can be hyper trained, or to
@ FALSE otherwise.
.macro canhypertrain stat:req, slot:req
callnative CanHyperTrain
.byte \stat
.2byte \slot
.endm
@ Hyper Trains a stat.
.macro hypertrain stat:req, slot:req
callnative HyperTrain
.byte \stat
.2byte \slot
.endm
@ Sets VAR_RESULT to TRUE if the Pokemon has the Gigantamax Factor,
@ or to FALSE otherwise.
.macro hasgigantamaxfactor slot:req
callnative HasGigantamaxFactor
.2byte \slot
.endm
@ Toggles the Gigantamax Factor for a Pokemon.
@ Fails for Melmetal (vanilla behavior).
@ Sets VAR_RESULT to TRUE if it succeeds, and FALSE otherwise.
.macro togglegigantamaxfactor slot:req
callnative ToggleGigantamaxFactor
.2byte \slot
.endm
@ Sets VAR_RESULT to one of the arguments (via setorcopyvar).
.macro randomelement element:req, elements:vararg
.set _randomelement_n, 0
.irp el, \element, \elements
.set _randomelement_n, _randomelement_n + 1
.endr
random _randomelement_n
.set _randomelement_n, 0
.irp el, \element, \elements
goto_if_ne VAR_RESULT, _randomelement_n, 1f
setorcopyvar VAR_RESULT, \el
goto 2f
1:
.set _randomelement_n, _randomelement_n + 1
.endr
2:
.endm
@ Sets VAR_RESULT to TRUE with probability 'percent', and FALSE
@ with probability '100% - percent'.
.macro randompercentage percent:req
random 100
goto_if_lt VAR_RESULT, \percent, 1f
setvar VAR_RESULT, FALSE
goto 2f
1:
setvar VAR_RESULT, TRUE
2:
.endm
@ Inflicts \status1 to the Pokémon in \slot.
@ If \slot is greater or equal than PARTY_SIZE, the status is inflicted on each of the Player's Pokémon.
.macro setstatus1 status1:req, slot:req
callnative Script_SetStatus1
.2byte \status1
.2byte \slot
.endm

View File

@@ -28,6 +28,10 @@
.2byte \x, \y
.byte \elevation
.byte \movement_type
.if \x_radius > 15
@ This warning is relevant for GetItemBallIdAndAmountFromTemplate
.error "movementRangeX has a bitfield of 4 bytes, so values over 15 will overflow. Use a custom script for item balls that should give the player more than 15 items."
.endif
.byte ((\y_radius << 4) | \x_radius)
.space 1 @ Padding
.2byte \trainer_type

View File

@@ -162,5 +162,7 @@
create_movement_action figure_8, MOVEMENT_ACTION_FIGURE_8
create_movement_action fly_up, MOVEMENT_ACTION_FLY_UP
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 step_end, MOVEMENT_ACTION_STEP_END

View File

@@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
if [[ -d "$DEVKITARM/bin/" ]]; then
OBJDUMP_BIN="$DEVKITARM/bin/arm-none-eabi-objdump"

View File

@@ -153,6 +153,7 @@ SUPER_RE = A0
'ä' = F4
'ö' = F5
'ü' = F6
EMOJI_DIZZYEGG = F7
TALL_PLUS = FC 0C FB
'$' = FF

35
check_history.sh Executable file
View File

@@ -0,0 +1,35 @@
#!/bin/bash
if [ -e .histignore ]
then
exit 0
fi
if [ $GITHUB_ACTION ]
then
exit 0
fi
has_hist=false
has_git=1
if which git >/dev/null
then
has_hist="$(git rev-parse --is-inside-work-tree 2>/dev/null)"
else
has_git=0
fi
if [ $has_git -ne 1 ]
then
echo -e "\033[0;31mfatal: \033[0m\033[1;33mgit was not found. You will be unable to use version control, update pokeemerald-expansion, or use feature branches. To use version control, install \`git\` and clone the repository instead of using \"Download Zip\" on GitHub. Run \`touch .histignore\` to ignore this and continue anyways.\033[0m"
exit 1
fi
if [ "$has_hist" ]
then
exit 0
else
echo -e "\033[0;31mfatal: \033[0m\033[1;33mno git history found. You will be unable to use version control, update pokeemerald-expansion, or use feature branches. To use version control, use \`git\` to clone the repository instead of using \"Download Zip\" on GitHub. Run \`touch .histignore\` to ignore this and continue anyways.\033[0m"
exit 1
fi

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -6,255 +6,269 @@
#include "constants/moves.h"
#include "constants/songs.h"
#include "constants/game_stat.h"
.include "asm/macros.inc"
.include "asm/macros/battle_script.inc"
.include "constants/constants.inc"
.include "asm/macros.inc"
.include "asm/macros/battle_script.inc"
.include "constants/constants.inc"
.section script_data, "aw", %progbits
.section script_data, "aw", %progbits
.align 2
.align 2
gBattlescriptsForUsingItem::
.4byte BattleScript_ItemRestoreHP @ EFFECT_ITEM_RESTORE_HP
.4byte BattleScript_ItemCureStatus @ EFFECT_ITEM_CURE_STATUS
.4byte BattleScript_ItemHealAndCureStatus @ EFFECT_ITEM_HEAL_AND_CURE_STATUS
.4byte BattleScript_ItemIncreaseStat @ EFFECT_ITEM_INCREASE_STAT
.4byte BattleScript_ItemSetMist @ EFFECT_ITEM_SET_MIST
.4byte BattleScript_ItemSetFocusEnergy @ EFFECT_ITEM_SET_FOCUS_ENERGY
.4byte BattleScript_RunByUsingItem @ EFFECT_ITEM_ESCAPE
.4byte BattleScript_BallThrow @ EFFECT_ITEM_THROW_BALL
.4byte BattleScript_ItemRestoreHP @ EFFECT_ITEM_REVIVE
.4byte BattleScript_ItemRestorePP @ EFFECT_ITEM_RESTORE_PP
.4byte BattleScript_ItemIncreaseAllStats @ EFFECT_ITEM_INCREASE_ALL_STATS
.4byte BattleScript_ItemRestoreHP @ EFFECT_ITEM_RESTORE_HP
.4byte BattleScript_ItemCureStatus @ EFFECT_ITEM_CURE_STATUS
.4byte BattleScript_ItemHealAndCureStatus @ EFFECT_ITEM_HEAL_AND_CURE_STATUS
.4byte BattleScript_ItemIncreaseStat @ EFFECT_ITEM_INCREASE_STAT
.4byte BattleScript_ItemSetMist @ EFFECT_ITEM_SET_MIST
.4byte BattleScript_ItemSetFocusEnergy @ EFFECT_ITEM_SET_FOCUS_ENERGY
.4byte BattleScript_RunByUsingItem @ EFFECT_ITEM_ESCAPE
.4byte BattleScript_BallThrow @ EFFECT_ITEM_THROW_BALL
.4byte BattleScript_ItemRestoreHP @ EFFECT_ITEM_REVIVE
.4byte BattleScript_ItemRestorePP @ EFFECT_ITEM_RESTORE_PP
.4byte BattleScript_ItemIncreaseAllStats @ EFFECT_ITEM_INCREASE_ALL_STATS
.align 2
.align 2
gBattlescriptsForSafariActions::
.4byte BattleScript_ActionWatchesCarefully
.4byte BattleScript_ActionGetNear
.4byte BattleScript_ActionThrowPokeblock
.4byte BattleScript_ActionWallyThrow
.4byte BattleScript_ActionWatchesCarefully
.4byte BattleScript_ActionGetNear
.4byte BattleScript_ActionThrowPokeblock
.4byte BattleScript_ActionWallyThrow
BattleScript_ItemEnd:
end
end
BattleScript_UseItemMessage:
printstring STRINGID_EMPTYSTRING3
pause B_WAIT_TIME_MED
playse SE_USE_ITEM
getbattlerside BS_ATTACKER
copybyte cMULTISTRING_CHOOSER, gBattleCommunication
printfromtable gTrainerUsedItemStringIds
waitmessage B_WAIT_TIME_LONG
return
printstring STRINGID_EMPTYSTRING3
pause B_WAIT_TIME_MED
playse SE_USE_ITEM
getbattlerside BS_ATTACKER
copybyte cMULTISTRING_CHOOSER, gBattleCommunication
printfromtable gTrainerUsedItemStringIds
waitmessage B_WAIT_TIME_LONG
return
BattleScript_ItemRestoreHPRet:
bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
healthbarupdate BS_SCRIPTING
datahpupdate BS_SCRIPTING
printstring STRINGID_ITEMRESTOREDSPECIESHEALTH
waitmessage B_WAIT_TIME_LONG
return
BattleScript_ItemRestoreHP::
call BattleScript_UseItemMessage
itemrestorehp
jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_ItemRestoreHP_SendOutRevivedBattler
bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
printstring STRINGID_ITEMRESTOREDSPECIESHEALTH
waitmessage B_WAIT_TIME_LONG
end
call BattleScript_UseItemMessage
itemrestorehp BattleScript_ItemRestoreHPEnd, BattleScript_ItemRestoreHP_Battler
call BattleScript_ItemRestoreHP_Party
goto BattleScript_ItemRestoreHPEnd
BattleScript_ItemRestoreHP_Battler::
call BattleScript_ItemRestoreHPRet
BattleScript_ItemRestoreHPEnd:
end
BattleScript_ItemRestoreHP_Party::
jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_ItemRestoreHP_SendOutRevivedBattler
bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT
printstring STRINGID_ITEMRESTOREDSPECIESHEALTH
waitmessage B_WAIT_TIME_LONG
return
BattleScript_ItemRestoreHP_SendOutRevivedBattler:
switchinanim BS_SCRIPTING, FALSE
waitstate
switchineffects BS_SCRIPTING
end
switchinanim BS_SCRIPTING, FALSE
waitstate
switchineffects BS_SCRIPTING
end
BattleScript_ItemCureStatus::
call BattleScript_UseItemMessage
itemcurestatus
updatestatusicon BS_ATTACKER
printstring STRINGID_ITEMCUREDSPECIESSTATUS
waitmessage B_WAIT_TIME_LONG
end
call BattleScript_UseItemMessage
BattleScript_ItemCureStatusAfterItemMsg:
itemcurestatus BattleScript_ItemCureStatusEnd
updatestatusicon BS_SCRIPTING
printstring STRINGID_ITEMCUREDSPECIESSTATUS
waitmessage B_WAIT_TIME_LONG
BattleScript_ItemCureStatusEnd:
end
BattleScript_ItemHealAndCureStatus::
call BattleScript_UseItemMessage
itemrestorehp
itemcurestatus
printstring STRINGID_ITEMRESTOREDSPECIESHEALTH
waitmessage B_WAIT_TIME_LONG
bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
updatestatusicon BS_ATTACKER
printstring STRINGID_ITEMRESTOREDSPECIESHEALTH
waitmessage B_WAIT_TIME_LONG
end
call BattleScript_UseItemMessage
itemrestorehp BattleScript_ItemCureStatusAfterItemMsg, BattleScript_ItemHealAndCureStatus_Battler
call BattleScript_ItemRestoreHP_Party
goto BattleScript_ItemHealAndCureStatusEnd
BattleScript_ItemHealAndCureStatus_Battler::
call BattleScript_ItemRestoreHPRet
BattleScript_ItemHealAndCureStatusEnd::
goto BattleScript_ItemCureStatusAfterItemMsg
BattleScript_ItemIncreaseStat::
call BattleScript_UseItemMessage
itemincreasestat
statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_ItemEnd
setgraphicalstatchangevalues
playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
end
call BattleScript_UseItemMessage
itemincreasestat
statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_ItemEnd
setgraphicalstatchangevalues
playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
end
BattleScript_ItemSetMist::
call BattleScript_UseItemMessage
setmist
playmoveanimation BS_ATTACKER, MOVE_MIST
waitanimation
printfromtable gMistUsedStringIds
waitmessage B_WAIT_TIME_LONG
end
call BattleScript_UseItemMessage
setmist
playmoveanimation BS_ATTACKER, MOVE_MIST
waitanimation
printfromtable gMistUsedStringIds
waitmessage B_WAIT_TIME_LONG
end
BattleScript_ItemSetFocusEnergy::
call BattleScript_UseItemMessage
jumpifstatus2 BS_ATTACKER, STATUS2_FOCUS_ENERGY, BattleScript_ButItFailed
setfocusenergy
playmoveanimation BS_ATTACKER, MOVE_FOCUS_ENERGY
waitanimation
call BattleScript_UseItemMessage
jumpifstatus2 BS_ATTACKER, STATUS2_FOCUS_ENERGY_ANY, BattleScript_ButItFailed
setfocusenergy BS_ATTACKER
playmoveanimation BS_ATTACKER, MOVE_FOCUS_ENERGY
waitanimation
copybyte sBATTLER, gBattlerAttacker
printstring STRINGID_PKMNUSEDXTOGETPUMPED
waitmessage B_WAIT_TIME_LONG
end
printstring STRINGID_PKMNUSEDXTOGETPUMPED
waitmessage B_WAIT_TIME_LONG
end
BattleScript_ItemRestorePP::
call BattleScript_UseItemMessage
itemrestorepp
printstring STRINGID_ITEMRESTOREDSPECIESPP
waitmessage B_WAIT_TIME_LONG
end
call BattleScript_UseItemMessage
itemrestorepp
printstring STRINGID_ITEMRESTOREDSPECIESPP
waitmessage B_WAIT_TIME_LONG
end
BattleScript_ItemIncreaseAllStats::
call BattleScript_UseItemMessage
call BattleScript_AllStatsUp
end
call BattleScript_UseItemMessage
call BattleScript_AllStatsUp
end
BattleScript_BallThrow::
jumpifword CMP_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_WALLY_TUTORIAL, BattleScript_BallThrowByWally
printstring STRINGID_PLAYERUSEDITEM
handleballthrow
jumpifword CMP_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_WALLY_TUTORIAL, BattleScript_BallThrowByWally
printstring STRINGID_PLAYERUSEDITEM
handleballthrow
BattleScript_BallThrowByWally::
printstring STRINGID_WALLYUSEDITEM
handleballthrow
printstring STRINGID_WALLYUSEDITEM
handleballthrow
BattleScript_SafariBallThrow::
printstring STRINGID_PLAYERUSEDITEM
updatestatusicon BS_ATTACKER
handleballthrow
printstring STRINGID_PLAYERUSEDITEM
updatestatusicon BS_ATTACKER
handleballthrow
BattleScript_SuccessBallThrow::
setbyte sMON_CAUGHT, TRUE
incrementgamestat GAME_STAT_POKEMON_CAPTURES
setbyte sMON_CAUGHT, TRUE
incrementgamestat GAME_STAT_POKEMON_CAPTURES
BattleScript_PrintCaughtMonInfo::
printstring STRINGID_GOTCHAPKMNCAUGHTPLAYER
jumpifbyte CMP_NOT_EQUAL, sEXP_CATCH, TRUE, BattleScript_TryPrintCaughtMonInfo
setbyte sGIVEEXP_STATE, 0
getexp BS_TARGET
sethword gBattle_BG2_X, 0
printstring STRINGID_GOTCHAPKMNCAUGHTPLAYER
jumpifbyte CMP_NOT_EQUAL, sEXP_CATCH, TRUE, BattleScript_TryPrintCaughtMonInfo
setbyte sGIVEEXP_STATE, 0
getexp BS_TARGET
sethword gBattle_BG2_X, 0
BattleScript_TryPrintCaughtMonInfo:
trysetcaughtmondexflags BattleScript_TryNicknameCaughtMon
printstring STRINGID_PKMNDATAADDEDTODEX
waitstate
setbyte gBattleCommunication, 0
displaydexinfo
jumpifbattletype BATTLE_TYPE_RECORDED, BattleScript_GiveCaughtMonEnd
trysetcaughtmondexflags BattleScript_TryNicknameCaughtMon
printstring STRINGID_PKMNDATAADDEDTODEX
waitstate
setbyte gBattleCommunication, 0
displaydexinfo
BattleScript_TryNicknameCaughtMon::
printstring STRINGID_GIVENICKNAMECAPTURED
waitstate
setbyte gBattleCommunication, 0
trygivecaughtmonnick BattleScript_GiveCaughtMonEnd
givecaughtmon
printfromtable gCaughtMonStringIds
waitmessage B_WAIT_TIME_LONG
goto BattleScript_SuccessBallThrowEnd
printstring STRINGID_GIVENICKNAMECAPTURED
waitstate
setbyte gBattleCommunication, 0
trygivecaughtmonnick BattleScript_GiveCaughtMonEnd
givecaughtmon
printfromtable gCaughtMonStringIds
waitmessage B_WAIT_TIME_LONG
goto BattleScript_SuccessBallThrowEnd
BattleScript_GiveCaughtMonEnd::
givecaughtmon
givecaughtmon
BattleScript_SuccessBallThrowEnd::
setbyte gBattleOutcome, B_OUTCOME_CAUGHT
finishturn
setbyte gBattleOutcome, B_OUTCOME_CAUGHT
finishturn
BattleScript_WallyBallThrow::
printstring STRINGID_GOTCHAPKMNCAUGHTWALLY
setbyte gBattleOutcome, B_OUTCOME_CAUGHT
finishturn
printstring STRINGID_GOTCHAPKMNCAUGHTWALLY
setbyte gBattleOutcome, B_OUTCOME_CAUGHT
finishturn
BattleScript_ShakeBallThrow::
printfromtable gBallEscapeStringIds
waitmessage B_WAIT_TIME_LONG
jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_SAFARI, BattleScript_ShakeBallThrowEnd
jumpifbyte CMP_NOT_EQUAL, gNumSafariBalls, 0, BattleScript_ShakeBallThrowEnd
printstring STRINGID_OUTOFSAFARIBALLS
waitmessage B_WAIT_TIME_LONG
setbyte gBattleOutcome, B_OUTCOME_NO_SAFARI_BALLS
printfromtable gBallEscapeStringIds
waitmessage B_WAIT_TIME_LONG
jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_SAFARI, BattleScript_ShakeBallThrowEnd
jumpifbyte CMP_NOT_EQUAL, gNumSafariBalls, 0, BattleScript_ShakeBallThrowEnd
printstring STRINGID_OUTOFSAFARIBALLS
waitmessage B_WAIT_TIME_LONG
setbyte gBattleOutcome, B_OUTCOME_NO_SAFARI_BALLS
BattleScript_ShakeBallThrowEnd::
finishaction
finishaction
BattleScript_TrainerBallBlock::
waitmessage B_WAIT_TIME_LONG
printstring STRINGID_TRAINERBLOCKEDBALL
waitmessage B_WAIT_TIME_LONG
printstring STRINGID_DONTBEATHIEF
waitmessage B_WAIT_TIME_LONG
finishaction
waitmessage B_WAIT_TIME_LONG
printstring STRINGID_TRAINERBLOCKEDBALL
waitmessage B_WAIT_TIME_LONG
printstring STRINGID_DONTBEATHIEF
waitmessage B_WAIT_TIME_LONG
finishaction
BattleScript_RunByUsingItem::
playse SE_FLEE
setbyte gBattleOutcome, B_OUTCOME_RAN
finishturn
playse SE_FLEE
setbyte gBattleOutcome, B_OUTCOME_RAN
finishturn
BattleScript_ActionWatchesCarefully:
printstring STRINGID_PKMNWATCHINGCAREFULLY
waitmessage B_WAIT_TIME_LONG
end2
printstring STRINGID_PKMNWATCHINGCAREFULLY
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_ActionGetNear:
printfromtable gSafariGetNearStringIds
waitmessage B_WAIT_TIME_LONG
end2
printfromtable gSafariGetNearStringIds
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_ActionThrowPokeblock:
printstring STRINGID_THREWPOKEBLOCKATPKMN
waitmessage B_WAIT_TIME_LONG
playanimation BS_ATTACKER, B_ANIM_POKEBLOCK_THROW, NULL
printfromtable gSafariPokeblockResultStringIds
waitmessage B_WAIT_TIME_LONG
end2
printstring STRINGID_THREWPOKEBLOCKATPKMN
waitmessage B_WAIT_TIME_LONG
playanimation BS_ATTACKER, B_ANIM_POKEBLOCK_THROW, NULL
printfromtable gSafariPokeblockResultStringIds
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_ActionWallyThrow:
printstring STRINGID_RETURNMON
waitmessage B_WAIT_TIME_LONG
returnatktoball
waitstate
trainerslidein BS_TARGET
waitstate
printstring STRINGID_YOUTHROWABALLNOWRIGHT
waitmessage B_WAIT_TIME_LONG
end2
printstring STRINGID_RETURNMON
waitmessage B_WAIT_TIME_LONG
returnatktoball
waitstate
trainerslidein BS_TARGET
waitstate
printstring STRINGID_YOUTHROWABALLNOWRIGHT
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_TrainerASlideMsgRet::
handletrainerslidemsg BS_SCRIPTING, 0
trainerslidein B_POSITION_OPPONENT_LEFT
handletrainerslidemsg BS_SCRIPTING, 1
waitstate
trainerslideout B_POSITION_OPPONENT_LEFT
waitstate
handletrainerslidemsg BS_SCRIPTING, 2
return
handletrainerslidemsg BS_SCRIPTING, 0
trainerslidein B_POSITION_OPPONENT_LEFT
handletrainerslidemsg BS_SCRIPTING, 1
waitstate
trainerslideout B_POSITION_OPPONENT_LEFT
waitstate
handletrainerslidemsg BS_SCRIPTING, 2
return
BattleScript_TrainerASlideMsgEnd2::
call BattleScript_TrainerASlideMsgRet
end2
call BattleScript_TrainerASlideMsgRet
end2
BattleScript_TrainerBSlideMsgRet::
handletrainerslidemsg BS_SCRIPTING, 0
trainerslidein B_POSITION_OPPONENT_RIGHT
handletrainerslidemsg BS_SCRIPTING, 1
waitstate
trainerslideout B_POSITION_OPPONENT_RIGHT
waitstate
handletrainerslidemsg BS_SCRIPTING, 2
return
handletrainerslidemsg BS_SCRIPTING, 0
trainerslidein B_POSITION_OPPONENT_RIGHT
handletrainerslidemsg BS_SCRIPTING, 1
waitstate
trainerslideout B_POSITION_OPPONENT_RIGHT
waitstate
handletrainerslidemsg BS_SCRIPTING, 2
return
BattleScript_TrainerBSlideMsgEnd2::
call BattleScript_TrainerBSlideMsgRet
end2
call BattleScript_TrainerBSlideMsgRet
end2

View File

@@ -1,3 +1,4 @@
#include "config.h"
#include "constants/global.h"
#include "constants/contest.h"
.include "asm/macros.inc"
@@ -435,11 +436,11 @@ AI_CGM_BetterWhenAudienceExcited:
AI_CGM_BetterWhenAudienceExcited_1stUp:
@ BUG: Should be if_appeal_num_eq 0
@ 1st up on 1st appeal excitement will always be 0
.ifdef BUGFIX
#ifdef BUGFIX
if_appeal_num_eq 0, AI_CGM_BetterWhenAudienceExcited_1stAppeal
.else
#else
if_appeal_num_not_eq 0, AI_CGM_BetterWhenAudienceExcited_1stAppeal
.endif
#endif
if_excitement_eq 4, AI_CGM_BetterWhenAudienceExcited_1AwayFromMax
if_excitement_eq 3, AI_CGM_BetterWhenAudienceExcited_2AwayFromMax
end
@@ -546,11 +547,11 @@ AI_CGM_TargetMonWithJudgesAttention:
end
AI_CGM_TargetMonWithJudgesAttention_CheckMon1:
if_cannot_participate MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
.ifdef BUGFIX
#ifdef BUGFIX
if_not_used_combo_starter MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
.else
#else
if_used_combo_starter MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
.endif
#endif
if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
score +2
if_not_completed_combo MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2
@@ -559,11 +560,11 @@ AI_CGM_TargetMonWithJudgesAttention_CheckMon1:
AI_CGM_TargetMonWithJudgesAttention_CheckMon2:
if_user_order_eq MON_2, AI_CGM_End
if_cannot_participate MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
.ifdef BUGFIX
#ifdef BUGFIX
if_not_used_combo_starter MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
.else
#else
if_used_combo_starter MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
.endif
#endif
if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
score +2
if_not_completed_combo MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3
@@ -572,11 +573,11 @@ AI_CGM_TargetMonWithJudgesAttention_CheckMon2:
AI_CGM_TargetMonWithJudgesAttention_CheckMon3:
if_user_order_eq MON_3, AI_CGM_End
if_cannot_participate MON_3, AI_CGM_End
.ifdef BUGFIX
#ifdef BUGFIX
if_not_used_combo_starter MON_3, AI_CGM_End
.else
#else
if_used_combo_starter MON_3, AI_CGM_End
.endif
#endif
if_random_less_than 125, AI_CGM_End
score +2
if_not_completed_combo MON_3, AI_CGM_End

View File

@@ -1,3 +1,4 @@
#include "config.h"
#include "config/battle.h"
#include "config/item.h"
#include "constants/global.h"
@@ -578,6 +579,7 @@ gStdScripts_End::
.include "data/scripts/new_game.inc"
.include "data/scripts/hall_of_fame.inc"
.include "data/scripts/config.inc"
.include "data/scripts/debug.inc"
EventScript_WhiteOut::
@@ -946,6 +948,10 @@ gText_PlayerFoundOneTMHM::
.string "{PLAYER} found one {STR_VAR_1}\n"
.string "{STR_VAR_2}!$"
gText_PlayerFoundTMHMs::
.string "{PLAYER} found {STR_VAR_3} {STR_VAR_1}\n"
.string "{STR_VAR_2}!$"
gText_Sudowoodo_Attacked::
.string "The weird tree doesn't like the\n"
.string "WAILMER PAIL!\p"
@@ -1004,6 +1010,13 @@ Common_EventScript_LegendaryFlewAway::
release
end
EventScript_VsSeekerChargingDone::
special VsSeekerFreezeObjectsAfterChargeComplete
waitstate
special VsSeekerResetObjectMovementAfterChargeComplete
releaseall
end
.include "data/scripts/pc_transfer.inc"
.include "data/scripts/questionnaire.inc"
.include "data/scripts/abnormal_weather.inc"

View File

@@ -1,3 +1,4 @@
#include "config/item.h"
.include "asm/macros.inc"
.include "constants/constants.inc"
@@ -72,6 +73,9 @@ gFieldEffectScriptPointers::
.4byte gFieldEffectScript_RayquazaSpotlight @ FLDEFF_RAYQUAZA_SPOTLIGHT
.4byte gFieldEffectScript_DestroyDeoxysRock @ FLDEFF_DESTROY_DEOXYS_ROCK
.4byte gFieldEffectScript_MoveDeoxysRock @ FLDEFF_MOVE_DEOXYS_ROCK
.4byte gFldEffScript_UseVsSeeker @ FLDEFF_USE_VS_SEEKER
.4byte gFldEffScript_XIcon @ FLDEFF_X_ICON
.4byte gFldEffScript_DoubleExclMarkIcon @ FLDEFF_DOUBLE_EXCL_MARK_ICON
gFieldEffectScript_ExclamationMarkIcon1::
field_eff_callnative FldEff_ExclamationMarkIcon
@@ -343,3 +347,15 @@ gFieldEffectScript_DestroyDeoxysRock::
gFieldEffectScript_MoveDeoxysRock::
field_eff_callnative FldEff_MoveDeoxysRock
field_eff_end
gFldEffScript_UseVsSeeker::
field_eff_callnative FldEff_UseVsSeeker
field_eff_end
gFldEffScript_XIcon::
field_eff_callnative FldEff_XIcon
field_eff_end
gFldEffScript_DoubleExclMarkIcon::
field_eff_callnative FldEff_DoubleExclMarkIcon
field_eff_end

View File

@@ -36,8 +36,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "AbandonedShip_CaptainsOffice_EventScript_ItemStorageKey",
"trainer_sight_or_berry_tree_id": "ITEM_STORAGE_KEY",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_STORAGE_KEY"
}
],

View File

@@ -23,8 +23,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "AbandonedShip_HiddenFloorRooms_EventScript_ItemLuxuryBall",
"trainer_sight_or_berry_tree_id": "ITEM_LUXURY_BALL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_6_LUXURY_BALL"
},
{
@@ -36,8 +36,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "AbandonedShip_HiddenFloorRooms_EventScript_ItemScanner",
"trainer_sight_or_berry_tree_id": "ITEM_SCANNER",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER"
},
{
@@ -49,8 +49,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "AbandonedShip_HiddenFloorRooms_EventScript_ItemTMRainDance",
"trainer_sight_or_berry_tree_id": "ITEM_TM_RAIN_DANCE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM_RAIN_DANCE"
},
{
@@ -62,8 +62,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "AbandonedShip_HiddenFloorRooms_EventScript_ItemWaterStone",
"trainer_sight_or_berry_tree_id": "ITEM_WATER_STONE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_3_WATER_STONE"
}
],

View File

@@ -23,8 +23,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "AbandonedShip_Room_B1F_EventScript_ItemTMIceBeam",
"trainer_sight_or_berry_tree_id": "ITEM_TM_ICE_BEAM",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_TM_ICE_BEAM"
}
],

View File

@@ -49,8 +49,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "AbandonedShip_Rooms2_1F_EventScript_ItemRevive",
"trainer_sight_or_berry_tree_id": "ITEM_REVIVE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_1F_REVIVE"
},
{

View File

@@ -36,8 +36,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "AbandonedShip_Rooms2_B1F_EventScript_ItemDiveBall",
"trainer_sight_or_berry_tree_id": "ITEM_DIVE_BALL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_B1F_DIVE_BALL"
}
],

View File

@@ -36,8 +36,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "AbandonedShip_Rooms_1F_EventScript_ItemHarborMail",
"trainer_sight_or_berry_tree_id": "ITEM_HARBOR_MAIL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ABANDONED_SHIP_ROOMS_1F_HARBOR_MAIL"
},
{

View File

@@ -36,8 +36,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "AbandonedShip_Rooms_B1F_EventScript_ItemEscapeRope",
"trainer_sight_or_berry_tree_id": "ITEM_ESCAPE_ROPE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_ESCAPE_ROPE"
}
],

View File

@@ -49,8 +49,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "AquaHideout_B1F_EventScript_ItemMaxElixir",
"trainer_sight_or_berry_tree_id": "ITEM_MAX_ELIXIR",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_AQUA_HIDEOUT_B1F_MAX_ELIXIR"
},
{
@@ -75,8 +75,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "AquaHideout_B1F_EventScript_ItemMasterBall",
"trainer_sight_or_berry_tree_id": "ITEM_MASTER_BALL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_AQUA_HIDEOUT_B1F_MASTER_BALL"
},
{
@@ -101,8 +101,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "AquaHideout_B1F_EventScript_ItemNugget",
"trainer_sight_or_berry_tree_id": "ITEM_NUGGET",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_AQUA_HIDEOUT_B1F_NUGGET"
},
{

View File

@@ -49,8 +49,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "AquaHideout_B2F_EventScript_ItemNestBall",
"trainer_sight_or_berry_tree_id": "ITEM_NEST_BALL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_AQUA_HIDEOUT_B2F_NEST_BALL"
},
{

View File

@@ -23,8 +23,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "ArtisanCave_1F_EventScript_ItemCarbos",
"trainer_sight_or_berry_tree_id": "ITEM_CARBOS",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ARTISAN_CAVE_1F_CARBOS"
}
],

View File

@@ -23,8 +23,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "ArtisanCave_B1F_EventScript_ItemHPUp",
"trainer_sight_or_berry_tree_id": "ITEM_HP_UP",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ARTISAN_CAVE_B1F_HP_UP"
}
],

View File

@@ -415,18 +415,18 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeLinkMultisChallenge::
@ to the flash, but not data in PokemonStorage. The SaveGame script that follows asks the player to do a full save,
@ which they can opt out of. As a result the player can save their party and quit without having saved the PC.
@ This allows players to clone pokemon and their held items by withdrawing them (or erase them by despositing).
.ifndef BUGFIX
#ifndef BUGFIX
tower_save 0
.endif
#endif
call Common_EventScript_SaveGame
setvar VAR_TEMP_CHALLENGE_STATUS, 255
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed
@ GAME_STAT_ENTERED_BATTLE_TOWER should not be incremented here, for two reasons:
@ 1. It is incremented again in BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful or BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful
@ 2. If the player tries to save, but fails, the counter will still be incremented even if the player never enters the tower.
.ifndef BUGFIX
@ 2. If the player tries to connect, but fails, the counter will still be incremented even if the player never enters the tower.
#ifndef BUGFIX
incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER
.endif
#endif
specialvar VAR_RESULT, IsWirelessAdapterConnected
goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerLobby_EventScript_TryWirelessLink
goto BattleFrontier_BattleTowerLobby_EventScript_TryCableLink

View File

@@ -81,11 +81,11 @@ BirthIsland_Exterior_EventScript_Deoxys::
applymovement LOCALID_DEOXYS, BirthIsland_Exterior_Movement_DeoxysApproach
waitmovement 0
waitse
playmoncry SPECIES_DEOXYS, CRY_MODE_ENCOUNTER
playmoncry SPECIES_DEOXYS_NORMAL, CRY_MODE_ENCOUNTER
delay 40
waitmoncry
setvar VAR_LAST_TALKED, LOCALID_DEOXYS
seteventmon SPECIES_DEOXYS, 30
seteventmon SPECIES_DEOXYS_NORMAL, 30
setflag FLAG_SYS_CTRL_OBJ_DELETE
special BattleSetup_StartLegendaryBattle
waitstate
@@ -100,12 +100,12 @@ BirthIsland_Exterior_EventScript_Deoxys::
BirthIsland_Exterior_EventScript_DefeatedDeoxys::
setflag FLAG_DEFEATED_DEOXYS
setvar VAR_0x8004, SPECIES_DEOXYS
setvar VAR_0x8004, SPECIES_DEOXYS_NORMAL
goto Common_EventScript_LegendaryFlewAway
end
BirthIsland_Exterior_EventScript_RanFromDeoxys::
setvar VAR_0x8004, SPECIES_DEOXYS
setvar VAR_0x8004, SPECIES_DEOXYS_NORMAL
goto Common_EventScript_LegendaryFlewAway
end

View File

@@ -18,12 +18,14 @@ DesertUnderpass_EventScript_Fossil::
DesertUnderpass_EventScript_GiveClawFossil::
giveitem ITEM_CLAW_FOSSIL
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
removeobject LOCALID_FOSSIL
release
end
DesertUnderpass_EventScript_GiveRootFossil::
giveitem ITEM_ROOT_FOSSIL
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
removeobject LOCALID_FOSSIL
release
end

View File

@@ -93,6 +93,7 @@ DewfordTown_EventScript_OldRodFisherman::
DewfordTown_EventScript_GiveOldRod::
msgbox DewfordTown_Text_GiveYouOneOfMyRods, MSGBOX_DEFAULT
giveitem ITEM_OLD_ROD
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
setflag FLAG_RECEIVED_OLD_ROD
msgbox DewfordTown_Text_ThrowInFishingAdvice, MSGBOX_DEFAULT
release

View File

@@ -23,8 +23,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "FieryPath_EventScript_ItemTMToxic",
"trainer_sight_or_berry_tree_id": "ITEM_TM_TOXIC",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_FIERY_PATH_TM_TOXIC"
},
{
@@ -114,8 +114,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "FieryPath_EventScript_ItemFireStone",
"trainer_sight_or_berry_tree_id": "ITEM_FIRE_STONE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_FIERY_PATH_FIRE_STONE"
}
],

View File

@@ -36,8 +36,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "GraniteCave_1F_EventScript_ItemEscapeRope",
"trainer_sight_or_berry_tree_id": "ITEM_ESCAPE_ROPE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_GRANITE_CAVE_1F_ESCAPE_ROPE"
}
],

View File

@@ -23,8 +23,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "GraniteCave_B1F_EventScript_ItemPokeBall",
"trainer_sight_or_berry_tree_id": "ITEM_POKE_BALL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_GRANITE_CAVE_B1F_POKE_BALL"
}
],

View File

@@ -23,8 +23,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "GraniteCave_B2F_EventScript_ItemRepel",
"trainer_sight_or_berry_tree_id": "ITEM_REPEL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_GRANITE_CAVE_B2F_REPEL"
},
{
@@ -36,8 +36,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "GraniteCave_B2F_EventScript_ItemRareCandy",
"trainer_sight_or_berry_tree_id": "ITEM_RARE_CANDY",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_GRANITE_CAVE_B2F_RARE_CANDY"
},
{

View File

@@ -49,8 +49,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "JaggedPass_EventScript_ItemBurnHeal",
"trainer_sight_or_berry_tree_id": "ITEM_BURN_HEAL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_JAGGED_PASS_BURN_HEAL"
},
{

View File

@@ -164,8 +164,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "LilycoveCity_EventScript_ItemMaxRepel",
"trainer_sight_or_berry_tree_id": "ITEM_MAX_REPEL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_LILYCOVE_CITY_MAX_REPEL"
},
{

View File

@@ -36,8 +36,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MagmaHideout_1F_EventScript_ItemRareCandy",
"trainer_sight_or_berry_tree_id": "ITEM_RARE_CANDY",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MAGMA_HIDEOUT_1F_RARE_CANDY"
},
{

View File

@@ -49,8 +49,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MagmaHideout_2F_2R_EventScript_ItemMaxElixir",
"trainer_sight_or_berry_tree_id": "ITEM_MAX_ELIXIR",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MAGMA_HIDEOUT_2F_2R_MAX_ELIXIR"
},
{
@@ -88,8 +88,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MagmaHideout_2F_2R_EventScript_ItemFullRestore",
"trainer_sight_or_berry_tree_id": "ITEM_FULL_RESTORE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MAGMA_HIDEOUT_2F_2R_FULL_RESTORE"
}
],

View File

@@ -49,8 +49,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MagmaHideout_3F_1R_EventScript_ItemNugget",
"trainer_sight_or_berry_tree_id": "ITEM_NUGGET",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MAGMA_HIDEOUT_3F_1R_NUGGET"
}
],

View File

@@ -36,8 +36,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MagmaHideout_3F_2R_EventScript_ItemPPMax",
"trainer_sight_or_berry_tree_id": "ITEM_PP_MAX",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MAGMA_HIDEOUT_3F_2R_PP_MAX"
}
],

View File

@@ -23,8 +23,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MagmaHideout_3F_3R_EventScript_ItemEscapeRope",
"trainer_sight_or_berry_tree_id": "ITEM_ESCAPE_ROPE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MAGMA_HIDEOUT_3F_3R_ECAPE_ROPE"
}
],

View File

@@ -114,8 +114,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MagmaHideout_4F_EventScript_ItemMaxRevive",
"trainer_sight_or_berry_tree_id": "ITEM_MAX_REVIVE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MAGMA_HIDEOUT_4F_MAX_REVIVE"
}
],

View File

@@ -148,8 +148,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MauvilleCity_EventScript_ItemXSpeed",
"trainer_sight_or_berry_tree_id": "ITEM_X_SPEED",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MAUVILLE_CITY_X_SPEED"
},
{

View File

@@ -423,6 +423,7 @@ MauvilleCity_EventScript_Wattson::
goto_if_set FLAG_GOT_BASEMENT_KEY_FROM_WATTSON, MauvilleCity_EventScript_BegunNewMauville
msgbox MauvilleCity_Text_WattsonNeedFavorTakeKey, MSGBOX_DEFAULT
giveitem ITEM_BASEMENT_KEY
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
setflag FLAG_GOT_BASEMENT_KEY_FROM_WATTSON
msgbox MauvilleCity_Text_WattsonWontBeChallenge, MSGBOX_DEFAULT
release

View File

@@ -41,12 +41,14 @@ MauvilleCity_BikeShop_EventScript_YesFar::
MauvilleCity_BikeShop_EventScript_GetMachBike::
msgbox MauvilleCity_BikeShop_Text_ChoseMachBike, MSGBOX_DEFAULT
giveitem ITEM_MACH_BIKE
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
goto MauvilleCity_BikeShop_EventScript_ComeBackToSwitchBikes
end
MauvilleCity_BikeShop_EventScript_GetAcroBike::
msgbox MauvilleCity_BikeShop_Text_ChoseAcroBike, MSGBOX_DEFAULT
giveitem ITEM_ACRO_BIKE
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
goto MauvilleCity_BikeShop_EventScript_ComeBackToSwitchBikes
end

View File

@@ -24,8 +24,9 @@ MauvilleCity_House2_EventScript_AskToTradeForHarborMail::
MauvilleCity_House2_EventScript_AcceptTrade::
msgbox MauvilleCity_House2_Text_IllTradeYouCoinCase, MSGBOX_DEFAULT
removeitem ITEM_HARBOR_MAIL
giveitem ITEM_COIN_CASE
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
removeitem ITEM_HARBOR_MAIL
setflag FLAG_RECEIVED_COIN_CASE
goto MauvilleCity_House2_EventScript_ReceivedCoinCase
end

View File

@@ -23,8 +23,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MeteorFalls_1F_1R_EventScript_ItemTMIronTail",
"trainer_sight_or_berry_tree_id": "ITEM_TM_IRON_TAIL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_METEOR_FALLS_1F_1R_TM_IRON_TAIL"
},
{
@@ -36,8 +36,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MeteorFalls_1F_1R_EventScript_ItemMoonStone",
"trainer_sight_or_berry_tree_id": "ITEM_MOON_STONE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_METEOR_FALLS_1F_1R_MOON_STONE"
},
{
@@ -49,8 +49,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MeteorFalls_1F_1R_EventScript_ItemFullHeal",
"trainer_sight_or_berry_tree_id": "ITEM_FULL_HEAL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_METEOR_FALLS_1F_1R_FULL_HEAL"
},
{
@@ -62,8 +62,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MeteorFalls_1F_1R_EventScript_ItemPPUP",
"trainer_sight_or_berry_tree_id": "ITEM_PP_UP",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_METEOR_FALLS_1F_1R_PP_UP"
},
{

View File

@@ -23,8 +23,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MeteorFalls_B1F_2R_EventScript_ItemTMDragonClaw",
"trainer_sight_or_berry_tree_id": "ITEM_TM_DRAGON_CLAW",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_METEOR_FALLS_B1F_2R_TM_DRAGON_CLAW"
}
],

View File

@@ -10,6 +10,7 @@ MirageTower_4F_EventScript_RootFossil::
msgbox MirageTower_4F_Text_TakeRootFossil, MSGBOX_YESNO
goto_if_eq VAR_RESULT, NO, MirageTower_4F_EventScript_LeaveRootFossil
giveitem ITEM_ROOT_FOSSIL
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
closemessage
setflag FLAG_HIDE_MIRAGE_TOWER_ROOT_FOSSIL
setflag FLAG_HIDE_MIRAGE_TOWER_CLAW_FOSSIL
@@ -30,6 +31,7 @@ MirageTower_4F_EventScript_ClawFossil::
msgbox MirageTower_4F_Text_TakeClawFossil, MSGBOX_YESNO
goto_if_eq VAR_RESULT, NO, MirageTower_4F_EventScript_LeaveClawFossil
giveitem ITEM_CLAW_FOSSIL
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
closemessage
setflag FLAG_HIDE_MIRAGE_TOWER_CLAW_FOSSIL
setflag FLAG_HIDE_MIRAGE_TOWER_ROOT_FOSSIL

View File

@@ -104,8 +104,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MossdeepCity_EventScript_ItemNetBall",
"trainer_sight_or_berry_tree_id": "ITEM_NET_BALL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MOSSDEEP_CITY_NET_BALL"
},
{

View File

@@ -9,6 +9,7 @@ MossdeepCity_House3_EventScript_SuperRodFisherman::
goto_if_eq VAR_RESULT, NO, MossdeepCity_House3_EventScript_DeclineSuperRod
msgbox MossdeepCity_House3_Text_SuperRodIsSuper, MSGBOX_DEFAULT
giveitem ITEM_SUPER_ROD
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
setflag FLAG_RECEIVED_SUPER_ROD
msgbox MossdeepCity_House3_Text_TryDroppingRodInWater, MSGBOX_DEFAULT
release

View File

@@ -229,11 +229,11 @@ MossdeepCity_SpaceCenter_1F_EventScript_Grunt2::
copyobjectxytoperm LOCALID_STAIR_GRUNT
switch VAR_FACING
case DIR_WEST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsWest
#ifdef BUGFIX
#ifdef BUGFIX
case DIR_EAST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsEast
#else
#else
case DIR_WEST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsEast
#endif
#endif
applymovement LOCALID_STAIR_GRUNT, MossdeepCity_SpaceCenter_1F_Movement_MoveGruntFromStairs
waitmovement 0
setvar VAR_MOSSDEEP_SPACE_CENTER_STAIR_GUARD_STATE, 2

View File

@@ -257,14 +257,7 @@ MossdeepCity_SpaceCenter_2F_EventScript_ChoosePartyForMultiBattle::
goto MossdeepCity_SpaceCenter_2F_EventScript_ReadyForBattlePrompt
MossdeepCity_SpaceCenter_2F_EventScript_DoStevenMultiBattle::
special ReducePlayerPartyToSelectedMons
frontier_set FRONTIER_DATA_SELECTED_MON_ORDER
setvar VAR_0x8004, SPECIAL_BATTLE_STEVEN
setvar VAR_0x8005, 0
special DoSpecialTrainerBattle
waitstate
frontier_saveparty
special LoadPlayerParty
multi_2_vs_2 TRAINER_MAXIE_MOSSDEEP, MossdeepCity_SpaceCenter_2F_Text_JustWantToExpandLand, TRAINER_TABITHA_MOSSDEEP, MossdeepCity_SpaceCenter_Text_TabithaDefeat, PARTNER_STEVEN
switch VAR_RESULT
case 1, MossdeepCity_SpaceCenter_2F_EventScript_DefeatedMaxieTabitha
fadescreen FADE_TO_BLACK
@@ -320,6 +313,9 @@ MossdeepCity_SpaceCenter_2F_EventScript_DefeatedMaxieTabitha::
setobjectmovementtype LOCALID_SCIENTIST, MOVEMENT_TYPE_WANDER_AROUND
addobject LOCALID_SCIENTIST
fadescreen FADE_FROM_BLACK
#ifdef BUGFIX
releaseall
#endif
end
MossdeepCity_SpaceCenter_2F_EventScript_StevenFacePlayer::
@@ -336,14 +332,6 @@ MossdeepCity_SpaceCenter_2F_EventScript_StevenFacePlayerWest::
turnobject LOCALID_STEVEN, DIR_EAST
return
MossdeepCity_SpaceCenter_2F_EventScript_MaxieTrainer::
trainerbattle TRAINER_BATTLE_SET_TRAINER_A, TRAINER_MAXIE_MOSSDEEP, 0, MossdeepCity_SpaceCenter_2F_Text_JustWantToExpandLand, MossdeepCity_SpaceCenter_2F_Text_JustWantToExpandLand
end
MossdeepCity_SpaceCenter_2F_EventScript_TabithaTrainer::
trainerbattle TRAINER_BATTLE_SET_TRAINER_B, TRAINER_TABITHA_MOSSDEEP, 0, MossdeepCity_SpaceCenter_Text_TabithaDefeat, MossdeepCity_SpaceCenter_Text_TabithaDefeat
end
MossdeepCity_SpaceCenter_2F_EventScript_RivalRayquazaCall::
lockall
checkplayergender

View File

@@ -448,6 +448,7 @@ MtChimney_EventScript_MeteoriteMachine::
goto_if_eq VAR_RESULT, NO, MtChimney_EventScript_LeaveMeteoriteAlone
msgbox MtChimney_Text_PlayerRemovedMeteorite, MSGBOX_DEFAULT
giveitem ITEM_METEORITE
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
setflag FLAG_RECEIVED_METEORITE
releaseall
end

View File

@@ -36,8 +36,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MtPyre_2F_EventScript_ItemUltraBall",
"trainer_sight_or_berry_tree_id": "ITEM_ULTRA_BALL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MT_PYRE_2F_ULTRA_BALL"
},
{

View File

@@ -49,8 +49,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MtPyre_3F_EventScript_ItemSuperRepel",
"trainer_sight_or_berry_tree_id": "ITEM_SUPER_REPEL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MT_PYRE_3F_SUPER_REPEL"
},
{

View File

@@ -36,8 +36,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MtPyre_4F_EventScript_ItemSeaIncense",
"trainer_sight_or_berry_tree_id": "ITEM_SEA_INCENSE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MT_PYRE_4F_SEA_INCENSE"
}
],

View File

@@ -36,8 +36,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MtPyre_5F_EventScript_ItemLaxIncense",
"trainer_sight_or_berry_tree_id": "ITEM_LAX_INCENSE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MT_PYRE_5F_LAX_INCENSE"
}
],

View File

@@ -36,8 +36,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MtPyre_6F_EventScript_ItemTMShadowBall",
"trainer_sight_or_berry_tree_id": "ITEM_TM_SHADOW_BALL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MT_PYRE_6F_TM_SHADOW_BALL"
},
{

View File

@@ -23,8 +23,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MtPyre_Exterior_EventScript_ItemMaxPotion",
"trainer_sight_or_berry_tree_id": "ITEM_MAX_POTION",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MT_PYRE_EXTERIOR_MAX_POTION"
},
{
@@ -36,8 +36,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "MtPyre_Exterior_EventScript_ItemTMSkillSwap",
"trainer_sight_or_berry_tree_id": "ITEM_TM_SKILL_SWAP",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_MT_PYRE_EXTERIOR_TM_SKILL_SWAP"
}
],

View File

@@ -23,8 +23,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "NewMauville_Inside_EventScript_ItemUltraBall",
"trainer_sight_or_berry_tree_id": "ITEM_ULTRA_BALL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_NEW_MAUVILLE_ULTRA_BALL"
},
{
@@ -36,8 +36,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "NewMauville_Inside_EventScript_ItemEscapeRope",
"trainer_sight_or_berry_tree_id": "ITEM_ESCAPE_ROPE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_NEW_MAUVILLE_ESCAPE_ROPE"
},
{
@@ -49,8 +49,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "NewMauville_Inside_EventScript_ItemThunderStone",
"trainer_sight_or_berry_tree_id": "ITEM_THUNDER_STONE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_NEW_MAUVILLE_THUNDER_STONE"
},
{
@@ -62,8 +62,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "NewMauville_Inside_EventScript_ItemFullHeal",
"trainer_sight_or_berry_tree_id": "ITEM_FULL_HEAL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_NEW_MAUVILLE_FULL_HEAL"
},
{
@@ -75,8 +75,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "NewMauville_Inside_EventScript_ItemParalyzeHeal",
"trainer_sight_or_berry_tree_id": "ITEM_PARALYZE_HEAL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_NEW_MAUVILLE_PARALYZE_HEAL"
},
{

View File

@@ -99,8 +99,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "PetalburgCity_EventScript_ItemMaxRevive",
"trainer_sight_or_berry_tree_id": "ITEM_MAX_REVIVE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_PETALBURG_CITY_MAX_REVIVE"
},
{
@@ -112,8 +112,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "PetalburgCity_EventScript_ItemEther",
"trainer_sight_or_berry_tree_id": "ITEM_ETHER",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_PETALBURG_CITY_ETHER"
},
{

View File

@@ -75,8 +75,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "PetalburgWoods_EventScript_ItemGreatBall",
"trainer_sight_or_berry_tree_id": "ITEM_GREAT_BALL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_PETALBURG_WOODS_GREAT_BALL"
},
{
@@ -88,8 +88,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "PetalburgWoods_EventScript_ItemXAttack",
"trainer_sight_or_berry_tree_id": "ITEM_X_ATTACK",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_PETALBURG_WOODS_X_ATTACK"
},
{
@@ -101,8 +101,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "PetalburgWoods_EventScript_ItemEther",
"trainer_sight_or_berry_tree_id": "ITEM_ETHER",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_PETALBURG_WOODS_ETHER"
},
{
@@ -166,8 +166,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "PetalburgWoods_EventScript_ItemParalyzeHeal",
"trainer_sight_or_berry_tree_id": "ITEM_PARALYZE_HEAL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_PETALBURG_WOODS_PARALYZE_HEAL"
},
{

View File

@@ -99,8 +99,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route102_EventScript_ItemPotion",
"trainer_sight_or_berry_tree_id": "ITEM_POTION",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_102_POTION"
},
{

View File

@@ -190,8 +190,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route103_EventScript_ItemGuardSpec",
"trainer_sight_or_berry_tree_id": "ITEM_GUARD_SPEC",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_103_GUARD_SPEC"
},
{
@@ -281,8 +281,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route103_EventScript_ItemPPUp",
"trainer_sight_or_berry_tree_id": "ITEM_PP_UP",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_103_PP_UP"
}
],

View File

@@ -299,8 +299,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route104_EventScript_ItemPPUp",
"trainer_sight_or_berry_tree_id": "ITEM_PP_UP",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_104_PP_UP"
},
{
@@ -377,8 +377,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route104_EventScript_ItemPokeBall",
"trainer_sight_or_berry_tree_id": "ITEM_POKE_BALL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_104_POKE_BALL"
},
{
@@ -403,8 +403,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route104_EventScript_ItemXAccuracy",
"trainer_sight_or_berry_tree_id": "ITEM_X_ACCURACY",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_104_X_ACCURACY"
},
{
@@ -429,8 +429,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route104_EventScript_ItemPotion",
"trainer_sight_or_berry_tree_id": "ITEM_POTION",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_104_POTION"
},
{

View File

@@ -74,6 +74,7 @@ Route104_PrettyPetalFlowerShop_EventScript_WailmerPailGirl::
Route104_PrettyPetalFlowerShop_EventScript_GiveWailmerPail::
msgbox Route104_PrettyPetalFlowerShop_Text_YouCanHaveThis, MSGBOX_DEFAULT
giveitem ITEM_WAILMER_PAIL
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
msgbox Route104_PrettyPetalFlowerShop_Text_WailmerPailExplanation, MSGBOX_DEFAULT
setflag FLAG_RECEIVED_WAILMER_PAIL
release

View File

@@ -91,8 +91,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route105_EventScript_ItemIron",
"trainer_sight_or_berry_tree_id": "ITEM_IRON",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_105_IRON"
},
{

View File

@@ -86,8 +86,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route106_EventScript_ItemProtein",
"trainer_sight_or_berry_tree_id": "ITEM_PROTEIN",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_106_PROTEIN"
}
],

View File

@@ -112,8 +112,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route108_EventScript_ItemStarPiece",
"trainer_sight_or_berry_tree_id": "ITEM_STAR_PIECE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_108_STAR_PIECE"
}
],

View File

@@ -151,8 +151,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route109_EventScript_ItemPPUp",
"trainer_sight_or_berry_tree_id": "ITEM_PP_UP",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_109_PP_UP"
},
{
@@ -320,8 +320,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route109_EventScript_ItemPotion",
"trainer_sight_or_berry_tree_id": "ITEM_POTION",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_109_POTION"
},
{

View File

@@ -273,8 +273,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route110_EventScript_ItemDireHit",
"trainer_sight_or_berry_tree_id": "ITEM_DIRE_HIT",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_110_DIRE_HIT"
},
{
@@ -286,8 +286,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route110_EventScript_ItemRareCandy",
"trainer_sight_or_berry_tree_id": "ITEM_RARE_CANDY",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_110_RARE_CANDY"
},
{
@@ -481,8 +481,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route110_EventScript_ItemElixir",
"trainer_sight_or_berry_tree_id": "ITEM_ELIXIR",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_110_ELIXIR"
},
{

View File

@@ -179,8 +179,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route110_TrickHousePuzzle1_EventScript_ItemOrangeMail",
"trainer_sight_or_berry_tree_id": "ITEM_ORANGE_MAIL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_TRICK_HOUSE_PUZZLE_1_ORANGE_MAIL"
},
{

View File

@@ -62,8 +62,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route110_TrickHousePuzzle2_EventScript_ItemWaveMail",
"trainer_sight_or_berry_tree_id": "ITEM_WAVE_MAIL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_TRICK_HOUSE_PUZZLE_2_WAVE_MAIL"
},
{
@@ -75,8 +75,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route110_TrickHousePuzzle2_EventScript_ItemHarborMail",
"trainer_sight_or_berry_tree_id": "ITEM_HARBOR_MAIL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_TRICK_HOUSE_PUZZLE_2_HARBOR_MAIL"
}
],

View File

@@ -62,8 +62,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route110_TrickHousePuzzle3_EventScript_ItemWoodMail",
"trainer_sight_or_berry_tree_id": "ITEM_WOOD_MAIL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_TRICK_HOUSE_PUZZLE_3_WOOD_MAIL"
},
{
@@ -75,8 +75,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route110_TrickHousePuzzle3_EventScript_ItemShadowMail",
"trainer_sight_or_berry_tree_id": "ITEM_SHADOW_MAIL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_TRICK_HOUSE_PUZZLE_3_SHADOW_MAIL"
},
{

View File

@@ -62,8 +62,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route110_TrickHousePuzzle4_EventScript_ItemMechMail",
"trainer_sight_or_berry_tree_id": "ITEM_MECH_MAIL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_TRICK_HOUSE_PUZZLE_4_MECH_MAIL"
},
{

View File

@@ -62,8 +62,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route110_TrickHousePuzzle6_EventScript_ItemGlitterMail",
"trainer_sight_or_berry_tree_id": "ITEM_GLITTER_MAIL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_TRICK_HOUSE_PUZZLE_6_GLITTER_MAIL"
}
],

View File

@@ -62,8 +62,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route110_TrickHousePuzzle7_EventScript_ItemTropicMail",
"trainer_sight_or_berry_tree_id": "ITEM_TROPIC_MAIL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_TRICK_HOUSE_PUZZLE_7_TROPIC_MAIL"
},
{

View File

@@ -62,8 +62,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route110_TrickHousePuzzle8_EventScript_ItemBeadMail",
"trainer_sight_or_berry_tree_id": "ITEM_BEAD_MAIL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_TRICK_HOUSE_PUZZLE_8_BEAD_MAIL"
}
],

View File

@@ -260,8 +260,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route111_EventScript_ItemTMSandstorm",
"trainer_sight_or_berry_tree_id": "ITEM_TM_SANDSTORM",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_111_TM_SANDSTORM"
},
{
@@ -351,8 +351,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route111_EventScript_ItemStardust",
"trainer_sight_or_berry_tree_id": "ITEM_STARDUST",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_111_STARDUST"
},
{
@@ -364,8 +364,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route111_EventScript_ItemHPUp",
"trainer_sight_or_berry_tree_id": "ITEM_HP_UP",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_111_HP_UP"
},
{
@@ -572,8 +572,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route111_EventScript_ItemElixir",
"trainer_sight_or_berry_tree_id": "ITEM_ELIXIR",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_111_ELIXIR"
},
{

View File

@@ -182,8 +182,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route112_EventScript_ItemNugget",
"trainer_sight_or_berry_tree_id": "ITEM_NUGGET",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_112_NUGGET"
},
{

View File

@@ -104,8 +104,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route113_EventScript_ItemMaxEther",
"trainer_sight_or_berry_tree_id": "ITEM_MAX_ETHER",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_113_MAX_ETHER"
},
{
@@ -117,8 +117,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route113_EventScript_ItemSuperRepel",
"trainer_sight_or_berry_tree_id": "ITEM_SUPER_REPEL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_113_SUPER_REPEL"
},
{
@@ -182,8 +182,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route113_EventScript_ItemHyperPotion",
"trainer_sight_or_berry_tree_id": "ITEM_HYPER_POTION",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_113_HYPER_POTION"
},
{

View File

@@ -28,6 +28,7 @@ Route113_GlassWorkshop_EventScript_GlassWorker::
goto_if_eq VAR_GLASS_WORKSHOP_STATE, 1, Route113_GlassWorkshop_EventScript_ExplainSootSack
msgbox Route113_GlassWorkshop_Text_GoCollectAshWithThis, MSGBOX_DEFAULT
giveitem ITEM_SOOT_SACK
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
setvar VAR_GLASS_WORKSHOP_STATE, 1
msgbox Route113_GlassWorkshop_Text_ExplainSootSack, MSGBOX_DEFAULT
release

View File

@@ -138,8 +138,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route114_EventScript_ItemRareCandy",
"trainer_sight_or_berry_tree_id": "ITEM_RARE_CANDY",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_114_RARE_CANDY"
},
{
@@ -151,8 +151,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route114_EventScript_ItemProtein",
"trainer_sight_or_berry_tree_id": "ITEM_PROTEIN",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_114_PROTEIN"
},
{
@@ -359,8 +359,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route114_EventScript_ItemEnergyPowder",
"trainer_sight_or_berry_tree_id": "ITEM_ENERGY_POWDER",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_114_ENERGY_POWDER"
},
{

View File

@@ -151,8 +151,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route115_EventScript_ItemSuperPotion",
"trainer_sight_or_berry_tree_id": "ITEM_SUPER_POTION",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_115_SUPER_POTION"
},
{
@@ -164,8 +164,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route115_EventScript_ItemTMFocusPunch",
"trainer_sight_or_berry_tree_id": "ITEM_TM_FOCUS_PUNCH",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_115_TM_FOCUS_PUNCH"
},
{
@@ -177,8 +177,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route115_EventScript_ItemIron",
"trainer_sight_or_berry_tree_id": "ITEM_IRON",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_115_IRON"
},
{
@@ -229,8 +229,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route115_EventScript_ItemGreatBall",
"trainer_sight_or_berry_tree_id": "ITEM_GREAT_BALL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_115_GREAT_BALL"
},
{
@@ -307,8 +307,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route115_EventScript_ItemPPUp",
"trainer_sight_or_berry_tree_id": "ITEM_PP_UP",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_115_PP_UP"
},
{
@@ -320,8 +320,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route115_EventScript_ItemHealPowder",
"trainer_sight_or_berry_tree_id": "ITEM_HEAL_POWDER",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_115_HEAL_POWDER"
}
],

View File

@@ -112,8 +112,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route116_EventScript_ItemEther",
"trainer_sight_or_berry_tree_id": "ITEM_ETHER",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_116_ETHER"
},
{
@@ -125,8 +125,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route116_EventScript_ItemRepel",
"trainer_sight_or_berry_tree_id": "ITEM_REPEL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_116_REPEL"
},
{
@@ -216,8 +216,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route116_EventScript_ItemHPUp",
"trainer_sight_or_berry_tree_id": "ITEM_HP_UP",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_116_HP_UP"
},
{
@@ -281,8 +281,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route116_EventScript_ItemXSpecial",
"trainer_sight_or_berry_tree_id": "ITEM_X_SPECIAL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_116_X_SPECIAL"
},
{
@@ -346,8 +346,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route116_EventScript_ItemPotion",
"trainer_sight_or_berry_tree_id": "ITEM_POTION",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_116_POTION"
},
{

View File

@@ -203,8 +203,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route117_EventScript_ItemGreatBall",
"trainer_sight_or_berry_tree_id": "ITEM_GREAT_BALL",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_117_GREAT_BALL"
},
{
@@ -229,8 +229,8 @@
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route117_EventScript_ItemRevive",
"trainer_sight_or_berry_tree_id": "ITEM_REVIVE",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_117_REVIVE"
},
{

View File

@@ -286,8 +286,8 @@
"movement_range_x": 1,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
"trainer_sight_or_berry_tree_id": "0",
"script": "Route118_EventScript_ItemHyperPotion",
"trainer_sight_or_berry_tree_id": "ITEM_HYPER_POTION",
"script": "Common_EventScript_FindItem",
"flag": "FLAG_ITEM_ROUTE_118_HYPER_POTION"
},
{

View File

@@ -34,6 +34,7 @@ Route118_EventScript_GoodRodFisherman::
Route118_EventScript_ReceiveGoodRod::
msgbox Route118_Text_IdenticalMindsTakeThis, MSGBOX_DEFAULT
giveitem ITEM_GOOD_ROD
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
setflag FLAG_RECEIVED_GOOD_ROD
msgbox Route118_Text_TryYourLuckFishing, MSGBOX_DEFAULT
release

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