diff --git a/.github/checkdiff.sh b/.github/checkdiff.sh new file mode 100755 index 000000000..430aba4d5 --- /dev/null +++ b/.github/checkdiff.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -e + +if ! git diff-index --quiet HEAD --; then + echo 'Uncommitted changes detected:' + git diff-index HEAD -- + return 1 +fi diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 51c2eab39..47b44da96 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,25 +5,29 @@ on: branches: [ master ] pull_request: +env: + rgbds_version: v1.0.1 + jobs: build: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@master + uses: actions/checkout@v6 - name: Checkout rgbds - uses: actions/checkout@master + uses: actions/checkout@v6 with: path: rgbds - ref: v1.0.0 + ref: ${{ env.rgbds_version }} repository: gbdev/rgbds - name: Install rgbds working-directory: rgbds run: | - sudo apt-get install -yq libpng-dev - sudo make install + sudo apt-get update + sudo apt-get install -yq bison libpng-dev pkg-config + sudo make -j$(nproc) install - name: Remove rgbds run: | @@ -33,21 +37,13 @@ jobs: if: ${{ github.repository_owner == 'pret' }} run: | make DEBUG=1 -j$(nproc) compare - if ! git diff-index --quiet HEAD --; then - echo 'Uncommitted changes detected:' - git diff-index HEAD -- - return 1 - fi + .github/checkdiff.sh - name: Make if: ${{ github.repository_owner != 'pret' }} run: | make -j$(nproc) - if ! git diff-index --quiet HEAD --; then - echo 'Uncommitted changes detected:' - git diff-index HEAD -- - return 1 - fi + .github/checkdiff.sh - name: Discord webhook if: ${{ github.event_name == 'push' && github.repository_owner == 'pret' }} @@ -57,22 +53,57 @@ jobs: .github/webhook.sh - name: Checkout symbols - if: ${{ github.event_name == 'push' && github.repository_owner == 'pret' }} + if: ${{ github.repository_owner == 'pret' && github.event_name == 'push' }} uses: actions/checkout@master with: path: symbols ref: symbols - name: Move symbols - if: ${{ github.event_name == 'push' && github.repository_owner == 'pret' }} + if: ${{ github.repository_owner == 'pret' && github.event_name == 'push' }} run: | - cp -v *.sym symbols/ - cp -v *.map symbols/ + cp -v *.sym *.map symbols/ - name: Update symbols - if: ${{ github.event_name == 'push' && github.repository_owner == 'pret' }} + if: ${{ github.repository_owner == 'pret' && github.event_name == 'push' }} uses: EndBug/add-and-commit@v9 with: cwd: "./symbols" add: "*.sym *.map" message: ${{ github.event.commits[0].message }} + + build-macos: + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Checkout rgbds + uses: actions/checkout@v6 + with: + path: rgbds + ref: ${{ env.rgbds_version }} + repository: gbdev/rgbds + + - name: Install rgbds + working-directory: rgbds + run: | + brew install bison libpng pkg-config + export PATH="$(brew --prefix bison)/bin:$PATH" + sudo make -j$(sysctl -n hw.ncpu) install + + - name: Remove rgbds + run: | + rm -rf rgbds + + - name: Compare + if: ${{ github.repository_owner == 'pret' }} + run: | + make DEBUG=1 -j$(sysctl -n hw.ncpu) compare + .github/checkdiff.sh + + - name: Make + if: ${{ github.repository_owner != 'pret' }} + run: | + make -j$(sysctl -n hw.ncpu) + .github/checkdiff.sh diff --git a/.rgbds-version b/.rgbds-version index 3eefcb9dd..7dea76edb 100644 --- a/.rgbds-version +++ b/.rgbds-version @@ -1 +1 @@ -1.0.0 +1.0.1 diff --git a/INSTALL.md b/INSTALL.md index 6cb77fd1c..fbcfd4714 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -42,9 +42,9 @@ Run setup and leave the default settings. At the "**Select Packages**" step, cho Double click on the text that says "**Skip**" next to each package to select the most recent version to install. -Then follow the [**rgbds** install instructions](https://rgbds.gbdev.io/install#pre-built) for Windows with Cygwin to install **rgbds 1.0.0**. +Then follow the [**rgbds** install instructions](https://rgbds.gbdev.io/install#pre-built) for Windows with Cygwin to install **rgbds 1.0.1**. -**Note:** If you already have an installed rgbds older than 1.0.0, you will need to update to 1.0.0. Ignore this if you have never installed rgbds before. If a version newer than 1.0.0 does not work, try downloading 1.0.0. +**Note:** If you already have an installed rgbds older than 1.0.0, you will need to update to 1.0.1. Ignore this if you have never installed rgbds before. If a version newer than 1.0.1 does not work, try downloading 1.0.1. Now open the **Cygwin terminal** and enter the following commands. @@ -67,7 +67,7 @@ Install [**Homebrew**](https://brew.sh/). Follow the official instructions. Open **Terminal** and prepare to enter commands. -Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#pre-built) for macOS to install **rgbds 1.0.0**. +Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#pre-built) for macOS to install **rgbds 1.0.1**. Now you're ready to [build **pokeyellow**](#build-pokeyellow). @@ -84,7 +84,7 @@ To install the software required for **pokeyellow**: sudo apt-get install make gcc git ``` -Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 1.0.0** from source. +Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 1.0.1** from source. ### OpenSUSE @@ -94,7 +94,7 @@ To install the software required for **pokeyellow**: sudo zypper install make gcc git ``` -Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 1.0.0** from source. +Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 1.0.1** from source. ### Arch Linux @@ -104,7 +104,7 @@ To install the software required for **pokeyellow**: sudo pacman -S make gcc git rgbds ``` -If you want to compile and install **rgbds** yourself instead, then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 1.0.0** from source. +If you want to compile and install **rgbds** yourself instead, then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 1.0.1** from source. ### Termux @@ -120,7 +120,7 @@ To install **rgbds**: pkg install rgbds ``` -If you want to compile and install **rgbds** yourself instead, then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 1.0.0** from source. +If you want to compile and install **rgbds** yourself instead, then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 1.0.1** from source. ### Other distros @@ -131,7 +131,7 @@ If your distro is not listed here, try to find the required software in its repo - `git` - `rgbds` -If `rgbds` is not available, you'll need to follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 1.0.0** from source. +If `rgbds` is not available, you'll need to follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 1.0.1** from source. Now you're ready to [build **pokeyellow**](#build-pokeyellow). @@ -153,8 +153,8 @@ make ### Build with a local rgbds version -If you have different projects that require different versions of `rgbds`, it might not be convenient to install rgbds 1.0.0 globally. Instead, you can put its files in a directory within pokeyellow, such as `pokeyellow/rgbds-1.0.0/`. Then specify it when you run `make`: +If you have different projects that require different versions of `rgbds`, it might not be convenient to install rgbds 1.0.1 globally. Instead, you can put its files in a directory within pokeyellow, such as `pokeyellow/rgbds-1.0.1/`. Then specify it when you run `make`: ```bash -make RGBDS=rgbds-1.0.0/ +make RGBDS=rgbds-1.0.1/ ``` diff --git a/Makefile b/Makefile index 8e15a00e2..d05541b02 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,15 @@ RGBGFXFLAGS ?= -Weverything .SECONDEXPANSION: .PRECIOUS: .SECONDARY: -.PHONY: all yellow yellow_debug clean tidy compare tools +.PHONY: \ + all \ + yellow \ + yellow_debug \ + yellow_vc \ + clean \ + tidy \ + compare \ + tools all: $(roms) yellow: pokeyellow.gbc diff --git a/constants/event_constants.asm b/constants/event_constants.asm index 82fb10181..dfb913f3a 100644 --- a/constants/event_constants.asm +++ b/constants/event_constants.asm @@ -610,7 +610,7 @@ const EVENT_BEAT_ROCKET_HIDEOUT_1_TRAINER_3 const EVENT_BEAT_ROCKET_HIDEOUT_1_TRAINER_4 const_skip - const EVENT_677 ; ??? + const EVENT_ENTERED_ROCKET_HIDEOUT const_skip 7 const EVENT_67F ; ??? const_skip diff --git a/constants/gfx_constants.asm b/constants/gfx_constants.asm index 3418eee47..f440acc08 100644 --- a/constants/gfx_constants.asm +++ b/constants/gfx_constants.asm @@ -7,7 +7,11 @@ DEF SCREEN_BLOCK_HEIGHT EQU 5 ; blocks DEF SURROUNDING_WIDTH EQU SCREEN_BLOCK_WIDTH * BLOCK_WIDTH ; tiles DEF SURROUNDING_HEIGHT EQU SCREEN_BLOCK_HEIGHT * BLOCK_HEIGHT ; tiles -DEF SPRITEBUFFERSIZE EQU 7 * 7 * TILE_1BPP_SIZE +DEF PIC_WIDTH EQU 7 ; tiles +DEF PIC_HEIGHT EQU PIC_WIDTH ; tiles +DEF PIC_SIZE EQU PIC_WIDTH * PIC_HEIGHT ; tiles + +DEF SPRITEBUFFERSIZE EQU PIC_WIDTH * PIC_HEIGHT * TILE_1BPP_SIZE ; DMGPalToCGBPal DEF CONVERT_BGP EQU 0 diff --git a/constants/hide_show_constants.asm b/constants/hide_show_constants.asm deleted file mode 100644 index 50d9fa065..000000000 --- a/constants/hide_show_constants.asm +++ /dev/null @@ -1,248 +0,0 @@ -DEF HIDE EQU $11 -DEF SHOW EQU $15 - -; MissableObjects indexes (see data/maps/hide_show_data.asm) -; this is a list of the sprites that can be enabled/disabled during the game -; TODO: mark sprite constants with an X that are never used - - const_def - const HS_PALLET_TOWN_OAK ; 00 - const HS_LYING_OLD_MAN ; 01 - const HS_OLD_MAN_1 ; 02 - const HS_OLD_MAN_2 ; 03 - const HS_MUSEUM_GUY ; 04 - const HS_GYM_GUY ; 05 - const HS_CERULEAN_RIVAL ; 06 - const HS_CERULEAN_ROCKET ; 07 - const HS_CERULEAN_GUARD_1 ; 08 - const HS_CERULEAN_CAVE_GUY ; 09 - const HS_CERULEAN_GUARD_2 ; 0A - const HS_SAFFRON_CITY_1 ; 0B - const HS_SAFFRON_CITY_2 ; 0C - const HS_SAFFRON_CITY_3 ; 0D - const HS_SAFFRON_CITY_4 ; 0E - const HS_SAFFRON_CITY_5 ; 0F - const HS_SAFFRON_CITY_6 ; 10 - const HS_SAFFRON_CITY_7 ; 11 - const HS_SAFFRON_CITY_8 ; 12 - const HS_SAFFRON_CITY_9 ; 13 - const HS_SAFFRON_CITY_A ; 14 - const HS_SAFFRON_CITY_B ; 15 - const HS_SAFFRON_CITY_C ; 16 - const HS_SAFFRON_CITY_D ; 17 - const HS_SAFFRON_CITY_E ; 18 - const HS_SAFFRON_CITY_F ; 19 - const HS_ROUTE_2_ITEM_1 ; 1A - const HS_ROUTE_2_ITEM_2 ; 1B - const HS_ROUTE_4_ITEM ; 1C - const HS_ROUTE_9_ITEM ; 1D - const HS_ROUTE_12_SNORLAX ; 1E - const HS_ROUTE_12_ITEM_1 ; 1F - const HS_ROUTE_12_ITEM_2 ; 20 - const HS_ROUTE_15_ITEM ; 21 - const HS_ROUTE_16_SNORLAX ; 22 - const HS_ROUTE_22_RIVAL_1 ; 23 - const HS_ROUTE_22_RIVAL_2 ; 24 - const HS_NUGGET_BRIDGE_GUY ; 25 - const HS_ROUTE_24_ITEM ; 26 - const HS_ROUTE_25_ITEM ; 27 - const HS_DAISY_SITTING ; 28 - const HS_DAISY_WALKING ; 29 - const HS_TOWN_MAP ; 2A - const HS_OAKS_LAB_RIVAL ; 2B - const HS_STARTER_BALL_1 ; 2C - const HS_OAKS_LAB_OAK_1 ; 2D - const HS_POKEDEX_1 ; 2E - const HS_POKEDEX_2 ; 2F - const HS_OAKS_LAB_OAK_2 ; 30 - const HS_VIRIDIAN_GYM_GIOVANNI ; 31 - const HS_VIRIDIAN_GYM_ITEM ; 32 - const HS_OLD_AMBER ; 33 - const HS_CERULEAN_BULBASAUR ; 34 - const HS_CERULEAN_CAVE_1F_ITEM_1 ; 35 - const HS_CERULEAN_CAVE_1F_ITEM_2 ; 36 - const HS_CERULEAN_CAVE_1F_ITEM_3 ; 37 - const HS_CERULEAN_CAVE_1F_ITEM_4 ; 38 - const HS_POKEMON_TOWER_2F_RIVAL ; 39 - const HS_POKEMON_TOWER_3F_ITEM ; 3A - const HS_POKEMON_TOWER_4F_ITEM_1 ; 3B - const HS_POKEMON_TOWER_4F_ITEM_2 ; 3C - const HS_POKEMON_TOWER_4F_ITEM_3 ; 3D - const HS_POKEMON_TOWER_5F_ITEM ; 3E - const HS_POKEMON_TOWER_6F_ITEM_1 ; 3F - const HS_POKEMON_TOWER_6F_ITEM_2 ; 40 - const HS_POKEMON_TOWER_7F_JESSIE ; 41 - const HS_POKEMON_TOWER_7F_JAMES ; 42 - const HS_POKEMON_TOWER_7F_MR_FUJI ; 43 - const HS_MR_FUJIS_HOUSE_MR_FUJI ; 44 - const HS_CELADON_MANSION_EEVEE_GIFT ; 45 - const HS_GAME_CORNER_ROCKET ; 46 - const HS_WARDENS_HOUSE_ITEM ; 47 - const HS_POKEMON_MANSION_1F_ITEM_1 ; 48 - const HS_POKEMON_MANSION_1F_ITEM_2 ; 49 - const HS_FIGHTING_DOJO_GIFT_1 ; 4A - const HS_FIGHTING_DOJO_GIFT_2 ; 4B - const HS_SILPH_CO_1F_RECEPTIONIST ; 4C - const HS_VOLTORB_1 ; 4D - const HS_VOLTORB_2 ; 4E - const HS_VOLTORB_3 ; 4F - const HS_ELECTRODE_1 ; 50 - const HS_VOLTORB_4 ; 51 - const HS_VOLTORB_5 ; 52 - const HS_ELECTRODE_2 ; 53 - const HS_VOLTORB_6 ; 54 - const HS_ZAPDOS ; 55 - const HS_POWER_PLANT_ITEM_1 ; 56 - const HS_POWER_PLANT_ITEM_2 ; 57 - const HS_POWER_PLANT_ITEM_3 ; 58 - const HS_POWER_PLANT_ITEM_4 ; 59 - const HS_POWER_PLANT_ITEM_5 ; 5A - const HS_MOLTRES ; 5B - const HS_VICTORY_ROAD_2F_ITEM_1 ; 5C - const HS_VICTORY_ROAD_2F_ITEM_2 ; 5D - const HS_VICTORY_ROAD_2F_ITEM_3 ; 5E - const HS_VICTORY_ROAD_2F_ITEM_4 ; 5F - const HS_VICTORY_ROAD_2F_BOULDER ; 60 - const HS_BILL_POKEMON ; 61 - const HS_BILL_1 ; 62 - const HS_BILL_2 ; 63 - const HS_VIRIDIAN_FOREST_ITEM_1 ; 64 - const HS_VIRIDIAN_FOREST_ITEM_2 ; 65 - const HS_VIRIDIAN_FOREST_ITEM_3 ; 66 - const HS_MT_MOON_1F_ITEM_1 ; 67 - const HS_MT_MOON_1F_ITEM_2 ; 68 - const HS_MT_MOON_1F_ITEM_3 ; 69 - const HS_MT_MOON_1F_ITEM_4 ; 6A - const HS_MT_MOON_1F_ITEM_5 ; 6B - const HS_MT_MOON_1F_ITEM_6 ; 6C - const HS_MT_MOON_B2F_JESSIE ; 6D - const HS_MT_MOON_B2F_JAMES ; 6E - const HS_MT_MOON_B2F_FOSSIL_1 ; 6F - const HS_MT_MOON_B2F_FOSSIL_2 ; 70 - const HS_MT_MOON_B2F_ITEM_1 ; 71 - const HS_MT_MOON_B2F_ITEM_2 ; 72 - const HS_SS_ANNE_2F_RIVAL ; 73 - const HS_SS_ANNE_1F_ROOMS_ITEM ; 74 - const HS_SS_ANNE_2F_ROOMS_ITEM_1 ; 75 - const HS_SS_ANNE_2F_ROOMS_ITEM_2 ; 76 - const HS_SS_ANNE_B1F_ROOMS_ITEM_1 ; 77 - const HS_SS_ANNE_B1F_ROOMS_ITEM_2 ; 78 - const HS_SS_ANNE_B1F_ROOMS_ITEM_3 ; 79 - const HS_VICTORY_ROAD_3F_ITEM_1 ; 7A - const HS_VICTORY_ROAD_3F_ITEM_2 ; 7B - const HS_VICTORY_ROAD_3F_BOULDER ; 7C - const HS_ROCKET_HIDEOUT_B1F_ITEM_1 ; 7D - const HS_ROCKET_HIDEOUT_B1F_ITEM_2 ; 7E - const HS_ROCKET_HIDEOUT_B2F_ITEM_1 ; 7F - const HS_ROCKET_HIDEOUT_B2F_ITEM_2 ; 80 - const HS_ROCKET_HIDEOUT_B2F_ITEM_3 ; 81 - const HS_ROCKET_HIDEOUT_B2F_ITEM_4 ; 82 - const HS_ROCKET_HIDEOUT_B3F_ITEM_1 ; 83 - const HS_ROCKET_HIDEOUT_B3F_ITEM_2 ; 84 - const HS_ROCKET_HIDEOUT_B4F_GIOVANNI ; 85 - const HS_ROCKET_HIDEOUT_B4F_JAMES ; 86 - const HS_ROCKET_HIDEOUT_B4F_JESSIE ; 87 - const HS_ROCKET_HIDEOUT_B4F_ITEM_1 ; 88 - const HS_ROCKET_HIDEOUT_B4F_ITEM_2 ; 89 - const HS_ROCKET_HIDEOUT_B4F_ITEM_3 ; 8A - const HS_ROCKET_HIDEOUT_B4F_ITEM_4 ; 8B - const HS_ROCKET_HIDEOUT_B4F_ITEM_5 ; 8C - const HS_SILPH_CO_2F_1 ; 8D XXX never (de)activated? - const HS_SILPH_CO_2F_2 ; 8E - const HS_SILPH_CO_2F_3 ; 8F - const HS_SILPH_CO_2F_4 ; 90 - const HS_SILPH_CO_2F_5 ; 91 - const HS_SILPH_CO_3F_1 ; 92 - const HS_SILPH_CO_3F_2 ; 93 - const HS_SILPH_CO_3F_ITEM ; 94 - const HS_SILPH_CO_4F_1 ; 95 - const HS_SILPH_CO_4F_2 ; 96 - const HS_SILPH_CO_4F_3 ; 97 - const HS_SILPH_CO_4F_ITEM_1 ; 98 - const HS_SILPH_CO_4F_ITEM_2 ; 99 - const HS_SILPH_CO_4F_ITEM_3 ; 9A - const HS_SILPH_CO_5F_1 ; 9B - const HS_SILPH_CO_5F_2 ; 9C - const HS_SILPH_CO_5F_3 ; 9D - const HS_SILPH_CO_5F_4 ; 9E - const HS_SILPH_CO_5F_ITEM_1 ; 9F - const HS_SILPH_CO_5F_ITEM_2 ; A0 - const HS_SILPH_CO_5F_ITEM_3 ; A1 - const HS_SILPH_CO_6F_1 ; A2 - const HS_SILPH_CO_6F_2 ; A3 - const HS_SILPH_CO_6F_3 ; A4 - const HS_SILPH_CO_6F_ITEM_1 ; A5 - const HS_SILPH_CO_6F_ITEM_2 ; A6 - const HS_SILPH_CO_7F_1 ; A7 - const HS_SILPH_CO_7F_2 ; A8 - const HS_SILPH_CO_7F_3 ; A9 - const HS_SILPH_CO_7F_4 ; AA - const HS_SILPH_CO_7F_RIVAL ; AB - const HS_SILPH_CO_7F_ITEM_1 ; AC - const HS_SILPH_CO_7F_ITEM_2 ; AD - const HS_SILPH_CO_7F_8 ; AE XXX sprite doesn't exist - const HS_SILPH_CO_8F_1 ; AF - const HS_SILPH_CO_8F_2 ; B0 - const HS_SILPH_CO_8F_3 ; B1 - const HS_SILPH_CO_9F_1 ; B2 - const HS_SILPH_CO_9F_2 ; B3 - const HS_SILPH_CO_9F_3 ; B4 - const HS_SILPH_CO_10F_1 ; B5 - const HS_SILPH_CO_10F_2 ; B6 - const HS_SILPH_CO_10F_3 ; B7 XXX never (de)activated? - const HS_SILPH_CO_10F_ITEM_1 ; B8 - const HS_SILPH_CO_10F_ITEM_2 ; B9 - const HS_SILPH_CO_10F_ITEM_3 ; BA - const HS_SILPH_CO_11F_1 ; BB - const HS_SILPH_CO_11F_JAMES ; BC - const HS_SILPH_CO_11F_2 ; BD - const HS_SILPH_CO_11F_JESSIE ; BE - const HS_UNUSED_MAP_F4_1 ; BF XXX sprite doesn't exist - const HS_POKEMON_MANSION_2F_ITEM ; C0 - const HS_POKEMON_MANSION_3F_ITEM_1 ; C1 - const HS_POKEMON_MANSION_3F_ITEM_2 ; C2 - const HS_POKEMON_MANSION_B1F_ITEM_1 ; C3 - const HS_POKEMON_MANSION_B1F_ITEM_2 ; C4 - const HS_POKEMON_MANSION_B1F_ITEM_3 ; C5 - const HS_POKEMON_MANSION_B1F_ITEM_4 ; C6 - const HS_POKEMON_MANSION_B1F_ITEM_5 ; C7 - const HS_SAFARI_ZONE_EAST_ITEM_1 ; C8 - const HS_SAFARI_ZONE_EAST_ITEM_2 ; C9 - const HS_SAFARI_ZONE_EAST_ITEM_3 ; CA - const HS_SAFARI_ZONE_EAST_ITEM_4 ; CB - const HS_SAFARI_ZONE_NORTH_ITEM_1 ; CC - const HS_SAFARI_ZONE_NORTH_ITEM_2 ; CD - const HS_SAFARI_ZONE_WEST_ITEM_1 ; CE - const HS_SAFARI_ZONE_WEST_ITEM_2 ; CF - const HS_SAFARI_ZONE_WEST_ITEM_3 ; D0 - const HS_SAFARI_ZONE_WEST_ITEM_4 ; D1 - const HS_SAFARI_ZONE_CENTER_ITEM ; D2 - const HS_CERULEAN_CAVE_2F_ITEM_1 ; D3 - const HS_CERULEAN_CAVE_2F_ITEM_2 ; D4 - const HS_CERULEAN_CAVE_2F_ITEM_3 ; D5 - const HS_CERULEAN_CAVE_2F_ITEM_4 ; D6 - const HS_MEWTWO ; D7 - const HS_CERULEAN_CAVE_B1F_ITEM_1 ; D8 - const HS_CERULEAN_CAVE_B1F_ITEM_2 ; D9 - const HS_CERULEAN_CAVE_B1F_ITEM_3 ; DA - const HS_CERULEAN_CAVE_B1F_ITEM_4 ; DB - const HS_VICTORY_ROAD_1F_ITEM_1 ; DC - const HS_VICTORY_ROAD_1F_ITEM_2 ; DD - const HS_CHAMPIONS_ROOM_OAK ; DE - const HS_SEAFOAM_ISLANDS_1F_BOULDER_1 ; DF - const HS_SEAFOAM_ISLANDS_1F_BOULDER_2 ; E0 - const HS_SEAFOAM_ISLANDS_B1F_BOULDER_1 ; E1 - const HS_SEAFOAM_ISLANDS_B1F_BOULDER_2 ; E2 - const HS_SEAFOAM_ISLANDS_B2F_BOULDER_1 ; E3 - const HS_SEAFOAM_ISLANDS_B2F_BOULDER_2 ; E4 - const HS_SEAFOAM_ISLANDS_B3F_BOULDER_1 ; E5 - const HS_SEAFOAM_ISLANDS_B3F_BOULDER_2 ; E6 - const HS_SEAFOAM_ISLANDS_B3F_BOULDER_3 ; E7 - const HS_SEAFOAM_ISLANDS_B3F_BOULDER_4 ; E8 - const HS_SEAFOAM_ISLANDS_B4F_BOULDER_1 ; E9 - const HS_SEAFOAM_ISLANDS_B4F_BOULDER_2 ; EA - const HS_ARTICUNO ; EB - const HS_DAISY_SITTING_COPY ; EC - const HS_DAISY_WALKING_COPY ; ED - const HS_TOWN_MAP_COPY ; EE -DEF NUM_HS_OBJECTS EQU const_value diff --git a/constants/map_constants.asm b/constants/map_constants.asm index cf23caa71..7f1f21d30 100644 --- a/constants/map_constants.asm +++ b/constants/map_constants.asm @@ -4,12 +4,19 @@ MACRO map_const DEF \1_HEIGHT EQU \3 ENDM +; "Indoor" maps are grouped sequentially (see data/maps/town_map_entries.asm) +DEF NUM_INDOOR_MAP_GROUPS EQU 0 +MACRO end_indoor_group + DEF INDOORGROUP_\1 EQU const_value + REDEF NUM_INDOOR_MAP_GROUPS EQU NUM_INDOOR_MAP_GROUPS + 1 +ENDM + ; map ids ; indexes for: ; - MapHeaderBanks (see data/maps/map_header_banks.asm) ; - MapHeaderPointers (see data/maps/map_header_pointers.asm) ; - MapSongBanks (see data/maps/songs.asm) -; - MapHSPointers (see data/maps/hide_show_data.asm) +; - ToggleableObjectMapPointers (see data/maps/toggleable_objects.asm) ; - MapSpriteSets (see data/maps/sprite_sets.asm) ; - ExternalMapEntries (see data/maps/town_map_entries.asm) ; - WildDataPointers (see data/wild/grass_water.asm) @@ -28,7 +35,9 @@ ENDM map_const INDIGO_PLATEAU, 10, 9 ; $09 map_const SAFFRON_CITY, 20, 18 ; $0A DEF NUM_CITY_MAPS EQU const_value + map_const UNUSED_MAP_0B, 0, 0 ; $0B + DEF FIRST_ROUTE_MAP EQU const_value map_const ROUTE_1, 10, 18 ; $0C map_const ROUTE_2, 10, 36 ; $0D @@ -55,22 +64,31 @@ DEF FIRST_ROUTE_MAP EQU const_value map_const ROUTE_23, 10, 72 ; $22 map_const ROUTE_24, 10, 18 ; $23 map_const ROUTE_25, 30, 9 ; $24 + DEF FIRST_INDOOR_MAP EQU const_value map_const REDS_HOUSE_1F, 4, 4 ; $25 map_const REDS_HOUSE_2F, 4, 4 ; $26 map_const BLUES_HOUSE, 4, 4 ; $27 map_const OAKS_LAB, 5, 6 ; $28 + end_indoor_group PALLET_TOWN + map_const VIRIDIAN_POKECENTER, 7, 4 ; $29 map_const VIRIDIAN_MART, 4, 4 ; $2A map_const VIRIDIAN_SCHOOL_HOUSE, 4, 4 ; $2B map_const VIRIDIAN_NICKNAME_HOUSE, 4, 4 ; $2C map_const VIRIDIAN_GYM, 10, 9 ; $2D + end_indoor_group VIRIDIAN_CITY + map_const DIGLETTS_CAVE_ROUTE_2, 4, 4 ; $2E map_const VIRIDIAN_FOREST_NORTH_GATE, 5, 4 ; $2F map_const ROUTE_2_TRADE_HOUSE, 4, 4 ; $30 map_const ROUTE_2_GATE, 5, 4 ; $31 map_const VIRIDIAN_FOREST_SOUTH_GATE, 5, 4 ; $32 + end_indoor_group ROUTE_2 + map_const VIRIDIAN_FOREST, 17, 24 ; $33 + end_indoor_group VIRIDIAN_FOREST + map_const MUSEUM_1F, 10, 4 ; $34 map_const MUSEUM_2F, 7, 4 ; $35 map_const PEWTER_GYM, 5, 7 ; $36 @@ -78,42 +96,72 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const PEWTER_MART, 4, 4 ; $38 map_const PEWTER_SPEECH_HOUSE, 4, 4 ; $39 map_const PEWTER_POKECENTER, 7, 4 ; $3A + end_indoor_group PEWTER_CITY + map_const MT_MOON_1F, 20, 18 ; $3B map_const MT_MOON_B1F, 14, 14 ; $3C map_const MT_MOON_B2F, 20, 18 ; $3D + end_indoor_group MT_MOON + map_const CERULEAN_TRASHED_HOUSE, 4, 4 ; $3E map_const CERULEAN_MELANIES_HOUSE, 4, 4 ; $3F map_const CERULEAN_POKECENTER, 7, 4 ; $40 map_const CERULEAN_GYM, 5, 7 ; $41 map_const BIKE_SHOP, 4, 4 ; $42 map_const CERULEAN_MART, 4, 4 ; $43 + end_indoor_group CERULEAN_CITY + map_const MT_MOON_POKECENTER, 7, 4 ; $44 + end_indoor_group ROUTE_4 + map_const CERULEAN_TRASHED_HOUSE_COPY, 4, 4 ; $45 + end_indoor_group CERULEAN_CITY_2 + map_const ROUTE_5_GATE, 4, 3 ; $46 map_const UNDERGROUND_PATH_ROUTE_5, 4, 4 ; $47 map_const DAYCARE, 4, 4 ; $48 + end_indoor_group ROUTE_5 + map_const ROUTE_6_GATE, 4, 3 ; $49 map_const UNDERGROUND_PATH_ROUTE_6, 4, 4 ; $4A map_const UNDERGROUND_PATH_ROUTE_6_COPY, 4, 4 ; $4B + end_indoor_group ROUTE_6 + map_const ROUTE_7_GATE, 3, 4 ; $4C map_const UNDERGROUND_PATH_ROUTE_7, 4, 4 ; $4D map_const UNDERGROUND_PATH_ROUTE_7_COPY, 4, 4 ; $4E + end_indoor_group ROUTE_7 + map_const ROUTE_8_GATE, 3, 4 ; $4F map_const UNDERGROUND_PATH_ROUTE_8, 4, 4 ; $50 + end_indoor_group ROUTE_8 + map_const ROCK_TUNNEL_POKECENTER, 7, 4 ; $51 map_const ROCK_TUNNEL_1F, 20, 18 ; $52 + end_indoor_group ROCK_TUNNEL + map_const POWER_PLANT, 20, 18 ; $53 + end_indoor_group POWER_PLANT + map_const ROUTE_11_GATE_1F, 4, 5 ; $54 map_const DIGLETTS_CAVE_ROUTE_11, 4, 4 ; $55 map_const ROUTE_11_GATE_2F, 4, 4 ; $56 + end_indoor_group ROUTE_11 + map_const ROUTE_12_GATE_1F, 5, 4 ; $57 + end_indoor_group ROUTE_12 + map_const BILLS_HOUSE, 4, 4 ; $58 + end_indoor_group SEA_COTTAGE + map_const VERMILION_POKECENTER, 7, 4 ; $59 map_const POKEMON_FAN_CLUB, 4, 4 ; $5A map_const VERMILION_MART, 4, 4 ; $5B map_const VERMILION_GYM, 5, 9 ; $5C map_const VERMILION_PIDGEY_HOUSE, 4, 4 ; $5D map_const VERMILION_DOCK, 14, 6 ; $5E + end_indoor_group VERMILION_CITY + map_const SS_ANNE_1F, 20, 9 ; $5F map_const SS_ANNE_2F, 20, 9 ; $60 map_const SS_ANNE_3F, 10, 3 ; $61 @@ -124,10 +172,14 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const SS_ANNE_1F_ROOMS, 12, 8 ; $66 map_const SS_ANNE_2F_ROOMS, 12, 8 ; $67 map_const SS_ANNE_B1F_ROOMS, 12, 8 ; $68 + end_indoor_group SS_ANNE + map_const UNUSED_MAP_69, 0, 0 ; $69 map_const UNUSED_MAP_6A, 0, 0 ; $6A map_const UNUSED_MAP_6B, 0, 0 ; $6B map_const VICTORY_ROAD_1F, 10, 9 ; $6C + end_indoor_group VICTORY_ROAD + map_const UNUSED_MAP_6D, 0, 0 ; $6D map_const UNUSED_MAP_6E, 0, 0 ; $6E map_const UNUSED_MAP_6F, 0, 0 ; $6F @@ -138,9 +190,17 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const UNUSED_MAP_74, 0, 0 ; $74 map_const UNUSED_MAP_75, 0, 0 ; $75 map_const HALL_OF_FAME, 5, 4 ; $76 + end_indoor_group POKEMON_LEAGUE + map_const UNDERGROUND_PATH_NORTH_SOUTH, 4, 24 ; $77 ; UndergroundPathNorthSouth.blk is actually 4x23 + end_indoor_group UNDERGROUND_PATH + map_const CHAMPIONS_ROOM, 4, 4 ; $78 + end_indoor_group POKEMON_LEAGUE_2 + map_const UNDERGROUND_PATH_WEST_EAST, 25, 4 ; $79 + end_indoor_group UNDERGROUND_PATH_2 + map_const CELADON_MART_1F, 10, 4 ; $7A map_const CELADON_MART_2F, 10, 4 ; $7B map_const CELADON_MART_3F, 10, 4 ; $7C @@ -160,7 +220,11 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const CELADON_DINER, 5, 4 ; $8A map_const CELADON_CHIEF_HOUSE, 4, 4 ; $8B map_const CELADON_HOTEL, 7, 4 ; $8C + end_indoor_group CELADON_CITY + map_const LAVENDER_POKECENTER, 7, 4 ; $8D + end_indoor_group LAVENDER_TOWN + map_const POKEMON_TOWER_1F, 10, 9 ; $8E map_const POKEMON_TOWER_2F, 10, 9 ; $8F map_const POKEMON_TOWER_3F, 10, 9 ; $90 @@ -168,23 +232,41 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const POKEMON_TOWER_5F, 10, 9 ; $92 map_const POKEMON_TOWER_6F, 10, 9 ; $93 map_const POKEMON_TOWER_7F, 10, 9 ; $94 + end_indoor_group POKEMON_TOWER + map_const MR_FUJIS_HOUSE, 4, 4 ; $95 map_const LAVENDER_MART, 4, 4 ; $96 map_const LAVENDER_CUBONE_HOUSE, 4, 4 ; $97 + end_indoor_group LAVENDER_TOWN_2 + map_const FUCHSIA_MART, 4, 4 ; $98 map_const FUCHSIA_BILLS_GRANDPAS_HOUSE, 4, 4 ; $99 map_const FUCHSIA_POKECENTER, 7, 4 ; $9A map_const WARDENS_HOUSE, 5, 4 ; $9B + end_indoor_group FUCHSIA_CITY + map_const SAFARI_ZONE_GATE, 4, 3 ; $9C + end_indoor_group SAFARI_ZONE + map_const FUCHSIA_GYM, 5, 9 ; $9D map_const FUCHSIA_MEETING_ROOM, 7, 4 ; $9E + end_indoor_group FUCHSIA_CITY_2 + map_const SEAFOAM_ISLANDS_B1F, 15, 9 ; $9F map_const SEAFOAM_ISLANDS_B2F, 15, 9 ; $A0 map_const SEAFOAM_ISLANDS_B3F, 15, 9 ; $A1 map_const SEAFOAM_ISLANDS_B4F, 15, 9 ; $A2 + end_indoor_group SEAFOAM_ISLANDS + map_const VERMILION_OLD_ROD_HOUSE, 4, 4 ; $A3 + end_indoor_group VERMILION_CITY_2 + map_const FUCHSIA_GOOD_ROD_HOUSE, 4, 4 ; $A4 + end_indoor_group FUCHSIA_CITY_3 + map_const POKEMON_MANSION_1F, 15, 14 ; $A5 + end_indoor_group POKEMON_MANSION + map_const CINNABAR_GYM, 10, 9 ; $A6 map_const CINNABAR_LAB, 9, 4 ; $A7 map_const CINNABAR_LAB_TRADE_ROOM, 4, 4 ; $A8 @@ -193,7 +275,11 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const CINNABAR_POKECENTER, 7, 4 ; $AB map_const CINNABAR_MART, 4, 4 ; $AC map_const CINNABAR_MART_COPY, 4, 4 ; $AD + end_indoor_group CINNABAR_ISLAND + map_const INDIGO_PLATEAU_LOBBY, 8, 6 ; $AE + end_indoor_group INDIGO_PLATEAU + map_const COPYCATS_HOUSE_1F, 4, 4 ; $AF map_const COPYCATS_HOUSE_2F, 4, 4 ; $B0 map_const FIGHTING_DOJO, 5, 6 ; $B1 @@ -203,21 +289,45 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const SILPH_CO_1F, 15, 9 ; $B5 map_const SAFFRON_POKECENTER, 7, 4 ; $B6 map_const MR_PSYCHICS_HOUSE, 4, 4 ; $B7 + end_indoor_group SAFFRON_CITY + map_const ROUTE_15_GATE_1F, 4, 5 ; $B8 map_const ROUTE_15_GATE_2F, 4, 4 ; $B9 + end_indoor_group ROUTE_15 + map_const ROUTE_16_GATE_1F, 4, 7 ; $BA map_const ROUTE_16_GATE_2F, 4, 4 ; $BB map_const ROUTE_16_FLY_HOUSE, 4, 4 ; $BC + end_indoor_group ROUTE_16 + map_const ROUTE_12_SUPER_ROD_HOUSE, 4, 4 ; $BD + end_indoor_group ROUTE_12_2 + map_const ROUTE_18_GATE_1F, 4, 5 ; $BE map_const ROUTE_18_GATE_2F, 4, 4 ; $BF + end_indoor_group ROUTE_18 + map_const SEAFOAM_ISLANDS_1F, 15, 9 ; $C0 + end_indoor_group SEAFOAM_ISLANDS_2 + map_const ROUTE_22_GATE, 5, 4 ; $C1 + end_indoor_group ROUTE_22 + map_const VICTORY_ROAD_2F, 15, 9 ; $C2 + end_indoor_group VICTORY_ROAD_2 + map_const ROUTE_12_GATE_2F, 4, 4 ; $C3 + end_indoor_group ROUTE_12_3 + map_const VERMILION_TRADE_HOUSE, 4, 4 ; $C4 + end_indoor_group VERMILION_CITY_3 + map_const DIGLETTS_CAVE, 20, 18 ; $C5 + end_indoor_group DIGLETTS_CAVE + map_const VICTORY_ROAD_3F, 15, 9 ; $C6 + end_indoor_group VICTORY_ROAD_3 + map_const ROCKET_HIDEOUT_B1F, 15, 14 ; $C7 map_const ROCKET_HIDEOUT_B2F, 15, 14 ; $C8 map_const ROCKET_HIDEOUT_B3F, 15, 14 ; $C9 @@ -226,6 +336,8 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const UNUSED_MAP_CC, 0, 0 ; $CC map_const UNUSED_MAP_CD, 0, 0 ; $CD map_const UNUSED_MAP_CE, 0, 0 ; $CE + end_indoor_group ROCKET_HQ + map_const SILPH_CO_2F, 15, 9 ; $CF map_const SILPH_CO_3F, 15, 9 ; $D0 map_const SILPH_CO_4F, 15, 9 ; $D1 @@ -233,9 +345,13 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const SILPH_CO_6F, 13, 9 ; $D3 map_const SILPH_CO_7F, 13, 9 ; $D4 map_const SILPH_CO_8F, 13, 9 ; $D5 + end_indoor_group SILPH_CO + map_const POKEMON_MANSION_2F, 15, 14 ; $D6 map_const POKEMON_MANSION_3F, 15, 9 ; $D7 map_const POKEMON_MANSION_B1F, 15, 14 ; $D8 + end_indoor_group POKEMON_MANSION_2 + map_const SAFARI_ZONE_EAST, 15, 13 ; $D9 map_const SAFARI_ZONE_NORTH, 20, 18 ; $DA map_const SAFARI_ZONE_WEST, 15, 13 ; $DB @@ -245,17 +361,29 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const SAFARI_ZONE_WEST_REST_HOUSE, 4, 4 ; $DF map_const SAFARI_ZONE_EAST_REST_HOUSE, 4, 4 ; $E0 map_const SAFARI_ZONE_NORTH_REST_HOUSE, 4, 4 ; $E1 + end_indoor_group SAFARI_ZONE_2 + map_const CERULEAN_CAVE_2F, 15, 9 ; $E2 map_const CERULEAN_CAVE_B1F, 15, 9 ; $E3 map_const CERULEAN_CAVE_1F, 15, 9 ; $E4 + end_indoor_group CERULEAN_CAVE + map_const NAME_RATERS_HOUSE, 4, 4 ; $E5 + end_indoor_group LAVENDER_TOWN_3 + map_const CERULEAN_BADGE_HOUSE, 4, 4 ; $E6 + end_indoor_group CERULEAN_CITY_3 + map_const UNUSED_MAP_E7, 0, 0 ; $E7 map_const ROCK_TUNNEL_B1F, 20, 18 ; $E8 + end_indoor_group ROCK_TUNNEL_2 + map_const SILPH_CO_9F, 13, 9 ; $E9 map_const SILPH_CO_10F, 8, 9 ; $EA map_const SILPH_CO_11F, 9, 9 ; $EB map_const SILPH_CO_ELEVATOR, 2, 2 ; $EC + end_indoor_group SILPH_CO_2 + map_const UNUSED_MAP_ED, 0, 0 ; $ED map_const UNUSED_MAP_EE, 0, 0 ; $EE map_const TRADE_CENTER, 5, 4 ; $EF @@ -267,9 +395,14 @@ DEF FIRST_INDOOR_MAP EQU const_value map_const LORELEIS_ROOM, 5, 6 ; $F5 map_const BRUNOS_ROOM, 5, 6 ; $F6 map_const AGATHAS_ROOM, 5, 6 ; $F7 + end_indoor_group POKEMON_LEAGUE_3 + map_const SUMMER_BEACH_HOUSE, 7, 4 ; $F8 + end_indoor_group ROUTE_19 DEF NUM_MAPS EQU const_value ; Indoor maps, such as houses, use this as the Map ID in their exit warps ; This map ID takes the player back to the last outdoor map they were on, stored in wLastMap -DEF LAST_MAP EQU -1 +DEF LAST_MAP EQU $ff + +ASSERT NUM_MAPS <= LAST_MAP, "map IDs overlap LAST_MAP" diff --git a/constants/menu_constants.asm b/constants/menu_constants.asm index a6e035e70..c4476e032 100644 --- a/constants/menu_constants.asm +++ b/constants/menu_constants.asm @@ -90,3 +90,8 @@ DEF FIRST_PARTY_MENU_TEXT_ID EQU const_value const NAME_PLAYER_SCREEN ; 0 const NAME_RIVAL_SCREEN ; 1 const NAME_MON_SCREEN ; 2 + +; Stats box layout (see engine/pokemon/status_screen.asm) + const_def + const STATUS_SCREEN_STATS_BOX ; 0 + const LEVEL_UP_STATS_BOX ; 1 diff --git a/constants/player_constants.asm b/constants/player_constants.asm new file mode 100644 index 000000000..26a640ec3 --- /dev/null +++ b/constants/player_constants.asm @@ -0,0 +1,9 @@ +DEF NUM_PLAYER_NAMES EQU 3 + +DEF PLAYERNAME1 EQUS "YELLOW" +DEF PLAYERNAME2 EQUS "ASH" +DEF PLAYERNAME3 EQUS "JACK" + +DEF RIVALNAME1 EQUS "BLUE" +DEF RIVALNAME2 EQUS "GARY" +DEF RIVALNAME3 EQUS "JOHN" diff --git a/constants/pokemon_data_constants.asm b/constants/pokemon_data_constants.asm index 1234acab4..16d21f540 100644 --- a/constants/pokemon_data_constants.asm +++ b/constants/pokemon_data_constants.asm @@ -44,7 +44,7 @@ DEF MON_SPD_EXP rw DEF MON_SPC_EXP rw DEF MON_DVS rw DEF MON_PP rb NUM_MOVES -DEF BOXMON_STRUCT_LENGTH EQU _RS +DEF BOXMON_STRUCT_LENGTH EQU _RS ; $21 DEF MON_LEVEL rb DEF MON_STATS rw NUM_STATS rsset MON_STATS @@ -53,7 +53,7 @@ DEF MON_ATK rw DEF MON_DEF rw DEF MON_SPD rw DEF MON_SPC rw -DEF PARTYMON_STRUCT_LENGTH EQU _RS +DEF PARTYMON_STRUCT_LENGTH EQU _RS ; $2c DEF PARTY_LENGTH EQU 6 diff --git a/constants/text_constants.asm b/constants/text_constants.asm index 1b5157822..0670f4050 100644 --- a/constants/text_constants.asm +++ b/constants/text_constants.asm @@ -1,7 +1,12 @@ -DEF NAME_LENGTH EQU 11 -DEF ITEM_NAME_LENGTH EQU 13 -DEF NAME_BUFFER_LENGTH EQU 20 -DEF NAME_LENGTH_JP EQU 6 +DEF PLAYER_NAME_LENGTH EQU 8 +DEF STAT_NAME_LENGTH EQU 10 +DEF NAME_LENGTH EQU 11 +DEF ITEM_NAME_LENGTH EQU 13 +DEF TRAINER_NAME_LENGTH EQU 13 +DEF MOVE_NAME_LENGTH EQU 14 +DEF GYM_CITY_LENGTH EQU 17 +DEF NAME_BUFFER_LENGTH EQU 20 +DEF NAME_LENGTH_JP EQU 6 ; PrintNumber, PrintBCDNumber const_def 5 diff --git a/constants/toggle_constants.asm b/constants/toggle_constants.asm new file mode 100644 index 000000000..c44dde500 --- /dev/null +++ b/constants/toggle_constants.asm @@ -0,0 +1,408 @@ +DEF OFF EQU $11 +DEF ON EQU $15 + +MACRO toggle_consts_for + DEF TOGGLEMAP{\1}_ID EQU const_value + DEF TOGGLEMAP{\1}_NAME EQUS "\1" +ENDM + +; ToggleableObjectStates indexes (see data/maps/toggleable_objects.asm) +; This lists the object_events that can be toggled by ShowObject/HideObject. +; The constants marked with an X are never used, because those object_events +; are not toggled on/off in any map's script. +; (The X-ed ones are either items or static Pokemon encounters that deactivate +; after battle and are detected in wToggleableObjectList.) + + const_def + + toggle_consts_for PALLET_TOWN + const TOGGLE_PALLET_TOWN_OAK ; 00 + + toggle_consts_for VIRIDIAN_CITY + const TOGGLE_LYING_OLD_MAN ; 01 + const TOGGLE_OLD_MAN_1 ; 02 + const TOGGLE_OLD_MAN_2 ; 03 + + toggle_consts_for PEWTER_CITY + const TOGGLE_MUSEUM_GUY ; 04 + const TOGGLE_GYM_GUY ; 05 + + toggle_consts_for CERULEAN_CITY + const TOGGLE_CERULEAN_RIVAL ; 06 + const TOGGLE_CERULEAN_ROCKET ; 07 + const TOGGLE_CERULEAN_GUARD_1 ; 08 + const TOGGLE_CERULEAN_CAVE_GUY ; 09 + const TOGGLE_CERULEAN_GUARD_2 ; 0A + + toggle_consts_for SAFFRON_CITY + const TOGGLE_SAFFRON_CITY_1 ; 0B + const TOGGLE_SAFFRON_CITY_2 ; 0C + const TOGGLE_SAFFRON_CITY_3 ; 0D + const TOGGLE_SAFFRON_CITY_4 ; 0E + const TOGGLE_SAFFRON_CITY_5 ; 0F + const TOGGLE_SAFFRON_CITY_6 ; 10 + const TOGGLE_SAFFRON_CITY_7 ; 11 + const TOGGLE_SAFFRON_CITY_8 ; 12 + const TOGGLE_SAFFRON_CITY_9 ; 13 + const TOGGLE_SAFFRON_CITY_A ; 14 + const TOGGLE_SAFFRON_CITY_B ; 15 + const TOGGLE_SAFFRON_CITY_C ; 16 + const TOGGLE_SAFFRON_CITY_D ; 17 + const TOGGLE_SAFFRON_CITY_E ; 18 + const TOGGLE_SAFFRON_CITY_F ; 19 + + toggle_consts_for ROUTE_2 + const TOGGLE_ROUTE_2_ITEM_1 ; 1A X + const TOGGLE_ROUTE_2_ITEM_2 ; 1B X + + toggle_consts_for ROUTE_4 + const TOGGLE_ROUTE_4_ITEM ; 1C X + + toggle_consts_for ROUTE_9 + const TOGGLE_ROUTE_9_ITEM ; 1D X + + toggle_consts_for ROUTE_12 + const TOGGLE_ROUTE_12_SNORLAX ; 1E + const TOGGLE_ROUTE_12_ITEM_1 ; 1F X + const TOGGLE_ROUTE_12_ITEM_2 ; 20 X + + toggle_consts_for ROUTE_15 + const TOGGLE_ROUTE_15_ITEM ; 21 X + + toggle_consts_for ROUTE_16 + const TOGGLE_ROUTE_16_SNORLAX ; 22 + + toggle_consts_for ROUTE_22 + const TOGGLE_ROUTE_22_RIVAL_1 ; 23 + const TOGGLE_ROUTE_22_RIVAL_2 ; 24 + + toggle_consts_for ROUTE_24 + const TOGGLE_NUGGET_BRIDGE_GUY ; 25 + const TOGGLE_ROUTE_24_ITEM ; 26 X + + toggle_consts_for ROUTE_25 + const TOGGLE_ROUTE_25_ITEM ; 27 X + + toggle_consts_for BLUES_HOUSE + const TOGGLE_DAISY_SITTING ; 28 + const TOGGLE_DAISY_WALKING ; 29 + const TOGGLE_TOWN_MAP ; 2A + + toggle_consts_for OAKS_LAB + const TOGGLE_OAKS_LAB_RIVAL ; 2B + const TOGGLE_STARTER_BALL_1 ; 2C + const TOGGLE_OAKS_LAB_OAK_1 ; 2D + const TOGGLE_POKEDEX_1 ; 2E + const TOGGLE_POKEDEX_2 ; 2F + const TOGGLE_OAKS_LAB_OAK_2 ; 30 + + toggle_consts_for VIRIDIAN_GYM + const TOGGLE_VIRIDIAN_GYM_GIOVANNI ; 31 + const TOGGLE_VIRIDIAN_GYM_ITEM ; 32 X + + toggle_consts_for MUSEUM_1F + const TOGGLE_OLD_AMBER ; 33 + + toggle_consts_for CERULEAN_MELANIES_HOUSE + const TOGGLE_CERULEAN_BULBASAUR ; 34 + + toggle_consts_for CERULEAN_CAVE_1F + const TOGGLE_CERULEAN_CAVE_1F_ITEM_1 ; 35 X + const TOGGLE_CERULEAN_CAVE_1F_ITEM_2 ; 36 X + const TOGGLE_CERULEAN_CAVE_1F_ITEM_3 ; 37 X + const TOGGLE_CERULEAN_CAVE_1F_ITEM_4 ; 38 X + + toggle_consts_for POKEMON_TOWER_2F + const TOGGLE_POKEMON_TOWER_2F_RIVAL ; 39 + + toggle_consts_for POKEMON_TOWER_3F + const TOGGLE_POKEMON_TOWER_3F_ITEM ; 3A X + + toggle_consts_for POKEMON_TOWER_4F + const TOGGLE_POKEMON_TOWER_4F_ITEM_1 ; 3B X + const TOGGLE_POKEMON_TOWER_4F_ITEM_2 ; 3C X + const TOGGLE_POKEMON_TOWER_4F_ITEM_3 ; 3D X + + toggle_consts_for POKEMON_TOWER_5F + const TOGGLE_POKEMON_TOWER_5F_ITEM ; 3E X + + toggle_consts_for POKEMON_TOWER_6F + const TOGGLE_POKEMON_TOWER_6F_ITEM_1 ; 3F X + const TOGGLE_POKEMON_TOWER_6F_ITEM_2 ; 40 X + + toggle_consts_for POKEMON_TOWER_7F + const TOGGLE_POKEMON_TOWER_7F_JESSIE ; 41 + const TOGGLE_POKEMON_TOWER_7F_JAMES ; 42 + const TOGGLE_POKEMON_TOWER_7F_MR_FUJI ; 43 + + toggle_consts_for MR_FUJIS_HOUSE + const TOGGLE_MR_FUJIS_HOUSE_MR_FUJI ; 44 + + toggle_consts_for CELADON_MANSION_ROOF_HOUSE + const TOGGLE_CELADON_MANSION_EEVEE_GIFT ; 45 + + toggle_consts_for GAME_CORNER + const TOGGLE_GAME_CORNER_ROCKET ; 46 + + toggle_consts_for WARDENS_HOUSE + const TOGGLE_WARDENS_HOUSE_ITEM ; 47 X + + toggle_consts_for POKEMON_MANSION_1F + const TOGGLE_POKEMON_MANSION_1F_ITEM_1 ; 48 X + const TOGGLE_POKEMON_MANSION_1F_ITEM_2 ; 49 X + + toggle_consts_for FIGHTING_DOJO + const TOGGLE_FIGHTING_DOJO_GIFT_1 ; 4A + const TOGGLE_FIGHTING_DOJO_GIFT_2 ; 4B + + toggle_consts_for SILPH_CO_1F + const TOGGLE_SILPH_CO_1F_RECEPTIONIST ; 4C + + toggle_consts_for POWER_PLANT + const TOGGLE_VOLTORB_1 ; 4D X + const TOGGLE_VOLTORB_2 ; 4E X + const TOGGLE_VOLTORB_3 ; 4F X + const TOGGLE_ELECTRODE_1 ; 50 X + const TOGGLE_VOLTORB_4 ; 51 X + const TOGGLE_VOLTORB_5 ; 52 X + const TOGGLE_ELECTRODE_2 ; 53 X + const TOGGLE_VOLTORB_6 ; 54 X + const TOGGLE_ZAPDOS ; 55 X + const TOGGLE_POWER_PLANT_ITEM_1 ; 56 X + const TOGGLE_POWER_PLANT_ITEM_2 ; 57 X + const TOGGLE_POWER_PLANT_ITEM_3 ; 58 X + const TOGGLE_POWER_PLANT_ITEM_4 ; 59 X + const TOGGLE_POWER_PLANT_ITEM_5 ; 5A X + + toggle_consts_for VICTORY_ROAD_2F + const TOGGLE_MOLTRES ; 5B X + const TOGGLE_VICTORY_ROAD_2F_ITEM_1 ; 5C X + const TOGGLE_VICTORY_ROAD_2F_ITEM_2 ; 5D X + const TOGGLE_VICTORY_ROAD_2F_ITEM_3 ; 5E X + const TOGGLE_VICTORY_ROAD_2F_ITEM_4 ; 5F X + const TOGGLE_VICTORY_ROAD_2F_BOULDER ; 60 + + toggle_consts_for BILLS_HOUSE + const TOGGLE_BILL_POKEMON ; 61 + const TOGGLE_BILL_1 ; 62 + const TOGGLE_BILL_2 ; 63 + + toggle_consts_for VIRIDIAN_FOREST + const TOGGLE_VIRIDIAN_FOREST_ITEM_1 ; 64 X + const TOGGLE_VIRIDIAN_FOREST_ITEM_2 ; 65 X + const TOGGLE_VIRIDIAN_FOREST_ITEM_3 ; 66 X + + toggle_consts_for MT_MOON_1F + const TOGGLE_MT_MOON_1F_ITEM_1 ; 67 X + const TOGGLE_MT_MOON_1F_ITEM_2 ; 68 X + const TOGGLE_MT_MOON_1F_ITEM_3 ; 69 X + const TOGGLE_MT_MOON_1F_ITEM_4 ; 6A X + const TOGGLE_MT_MOON_1F_ITEM_5 ; 6B X + const TOGGLE_MT_MOON_1F_ITEM_6 ; 6C X + + toggle_consts_for MT_MOON_B2F + const TOGGLE_MT_MOON_B2F_JESSIE ; 6D + const TOGGLE_MT_MOON_B2F_JAMES ; 6E + const TOGGLE_MT_MOON_B2F_FOSSIL_1 ; 6F + const TOGGLE_MT_MOON_B2F_FOSSIL_2 ; 70 + const TOGGLE_MT_MOON_B2F_ITEM_1 ; 71 X + const TOGGLE_MT_MOON_B2F_ITEM_2 ; 72 X + + toggle_consts_for SS_ANNE_2F + const TOGGLE_SS_ANNE_2F_RIVAL ; 73 + + toggle_consts_for SS_ANNE_1F_ROOMS + const TOGGLE_SS_ANNE_1F_ROOMS_ITEM ; 74 X + + toggle_consts_for SS_ANNE_2F_ROOMS + const TOGGLE_SS_ANNE_2F_ROOMS_ITEM_1 ; 75 X + const TOGGLE_SS_ANNE_2F_ROOMS_ITEM_2 ; 76 X + + toggle_consts_for SS_ANNE_B1F_ROOMS + const TOGGLE_SS_ANNE_B1F_ROOMS_ITEM_1 ; 77 X + const TOGGLE_SS_ANNE_B1F_ROOMS_ITEM_2 ; 78 X + const TOGGLE_SS_ANNE_B1F_ROOMS_ITEM_3 ; 79 X + + toggle_consts_for VICTORY_ROAD_3F + const TOGGLE_VICTORY_ROAD_3F_ITEM_1 ; 7A X + const TOGGLE_VICTORY_ROAD_3F_ITEM_2 ; 7B X + const TOGGLE_VICTORY_ROAD_3F_BOULDER ; 7C + + toggle_consts_for ROCKET_HIDEOUT_B1F + const TOGGLE_ROCKET_HIDEOUT_B1F_ITEM_1 ; 7D X + const TOGGLE_ROCKET_HIDEOUT_B1F_ITEM_2 ; 7E X + + toggle_consts_for ROCKET_HIDEOUT_B2F + const TOGGLE_ROCKET_HIDEOUT_B2F_ITEM_1 ; 7F X + const TOGGLE_ROCKET_HIDEOUT_B2F_ITEM_2 ; 80 X + const TOGGLE_ROCKET_HIDEOUT_B2F_ITEM_3 ; 81 X + const TOGGLE_ROCKET_HIDEOUT_B2F_ITEM_4 ; 82 X + + toggle_consts_for ROCKET_HIDEOUT_B3F + const TOGGLE_ROCKET_HIDEOUT_B3F_ITEM_1 ; 83 X + const TOGGLE_ROCKET_HIDEOUT_B3F_ITEM_2 ; 84 X + + toggle_consts_for ROCKET_HIDEOUT_B4F + const TOGGLE_ROCKET_HIDEOUT_B4F_GIOVANNI ; 85 + const TOGGLE_ROCKET_HIDEOUT_B4F_JAMES ; 86 + const TOGGLE_ROCKET_HIDEOUT_B4F_JESSIE ; 87 + const TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_1 ; 88 X + const TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_2 ; 89 X + const TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_3 ; 8A X + const TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_4 ; 8B + const TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_5 ; 8C + + toggle_consts_for SILPH_CO_2F + const TOGGLE_SILPH_CO_2F_1 ; 8D XXX never (de)activated? + const TOGGLE_SILPH_CO_2F_2 ; 8E + const TOGGLE_SILPH_CO_2F_3 ; 8F + const TOGGLE_SILPH_CO_2F_4 ; 90 + const TOGGLE_SILPH_CO_2F_5 ; 91 + + toggle_consts_for SILPH_CO_3F + const TOGGLE_SILPH_CO_3F_1 ; 92 + const TOGGLE_SILPH_CO_3F_2 ; 93 + const TOGGLE_SILPH_CO_3F_ITEM ; 94 X + + toggle_consts_for SILPH_CO_4F + const TOGGLE_SILPH_CO_4F_1 ; 95 + const TOGGLE_SILPH_CO_4F_2 ; 96 + const TOGGLE_SILPH_CO_4F_3 ; 97 + const TOGGLE_SILPH_CO_4F_ITEM_1 ; 98 X + const TOGGLE_SILPH_CO_4F_ITEM_2 ; 99 X + const TOGGLE_SILPH_CO_4F_ITEM_3 ; 9A X + + toggle_consts_for SILPH_CO_5F + const TOGGLE_SILPH_CO_5F_1 ; 9B + const TOGGLE_SILPH_CO_5F_2 ; 9C + const TOGGLE_SILPH_CO_5F_3 ; 9D + const TOGGLE_SILPH_CO_5F_4 ; 9E + const TOGGLE_SILPH_CO_5F_ITEM_1 ; 9F X + const TOGGLE_SILPH_CO_5F_ITEM_2 ; A0 X + const TOGGLE_SILPH_CO_5F_ITEM_3 ; A1 X + + toggle_consts_for SILPH_CO_6F + const TOGGLE_SILPH_CO_6F_1 ; A2 + const TOGGLE_SILPH_CO_6F_2 ; A3 + const TOGGLE_SILPH_CO_6F_3 ; A4 + const TOGGLE_SILPH_CO_6F_ITEM_1 ; A5 X + const TOGGLE_SILPH_CO_6F_ITEM_2 ; A6 X + + toggle_consts_for SILPH_CO_7F + const TOGGLE_SILPH_CO_7F_1 ; A7 + const TOGGLE_SILPH_CO_7F_2 ; A8 + const TOGGLE_SILPH_CO_7F_3 ; A9 + const TOGGLE_SILPH_CO_7F_4 ; AA + const TOGGLE_SILPH_CO_7F_RIVAL ; AB + const TOGGLE_SILPH_CO_7F_ITEM_1 ; AC X + const TOGGLE_SILPH_CO_7F_ITEM_2 ; AD X + const TOGGLE_SILPH_CO_7F_8 ; AE XXX sprite doesn't exist + + toggle_consts_for SILPH_CO_8F + const TOGGLE_SILPH_CO_8F_1 ; AF + const TOGGLE_SILPH_CO_8F_2 ; B0 + const TOGGLE_SILPH_CO_8F_3 ; B1 + + toggle_consts_for SILPH_CO_9F + const TOGGLE_SILPH_CO_9F_1 ; B2 + const TOGGLE_SILPH_CO_9F_2 ; B3 + const TOGGLE_SILPH_CO_9F_3 ; B4 + + toggle_consts_for SILPH_CO_10F + const TOGGLE_SILPH_CO_10F_1 ; B5 + const TOGGLE_SILPH_CO_10F_2 ; B6 + const TOGGLE_SILPH_CO_10F_3 ; B7 XXX never (de)activated? + const TOGGLE_SILPH_CO_10F_ITEM_1 ; B8 X + const TOGGLE_SILPH_CO_10F_ITEM_2 ; B9 X + const TOGGLE_SILPH_CO_10F_ITEM_3 ; BA X + + toggle_consts_for SILPH_CO_11F + const TOGGLE_SILPH_CO_11F_1 ; BB + const TOGGLE_SILPH_CO_11F_JAMES ; BC + const TOGGLE_SILPH_CO_11F_2 ; BD + const TOGGLE_SILPH_CO_11F_JESSIE ; BE + + toggle_consts_for UNUSED_MAP_F4 + const TOGGLE_UNUSED_MAP_F4_1 ; BF XXX sprite doesn't exist + + toggle_consts_for POKEMON_MANSION_2F + const TOGGLE_POKEMON_MANSION_2F_ITEM ; C0 X + + toggle_consts_for POKEMON_MANSION_3F + const TOGGLE_POKEMON_MANSION_3F_ITEM_1 ; C1 X + const TOGGLE_POKEMON_MANSION_3F_ITEM_2 ; C2 X + + toggle_consts_for POKEMON_MANSION_B1F + const TOGGLE_POKEMON_MANSION_B1F_ITEM_1 ; C3 X + const TOGGLE_POKEMON_MANSION_B1F_ITEM_2 ; C4 X + const TOGGLE_POKEMON_MANSION_B1F_ITEM_3 ; C5 X + const TOGGLE_POKEMON_MANSION_B1F_ITEM_4 ; C6 X + const TOGGLE_POKEMON_MANSION_B1F_ITEM_5 ; C7 X + + toggle_consts_for SAFARI_ZONE_EAST + const TOGGLE_SAFARI_ZONE_EAST_ITEM_1 ; C8 X + const TOGGLE_SAFARI_ZONE_EAST_ITEM_2 ; C9 X + const TOGGLE_SAFARI_ZONE_EAST_ITEM_3 ; CA X + const TOGGLE_SAFARI_ZONE_EAST_ITEM_4 ; CB X + + toggle_consts_for SAFARI_ZONE_NORTH + const TOGGLE_SAFARI_ZONE_NORTH_ITEM_1 ; CC X + const TOGGLE_SAFARI_ZONE_NORTH_ITEM_2 ; CD X + + toggle_consts_for SAFARI_ZONE_WEST + const TOGGLE_SAFARI_ZONE_WEST_ITEM_1 ; CE X + const TOGGLE_SAFARI_ZONE_WEST_ITEM_2 ; CF X + const TOGGLE_SAFARI_ZONE_WEST_ITEM_3 ; D0 X + const TOGGLE_SAFARI_ZONE_WEST_ITEM_4 ; D1 X + + toggle_consts_for SAFARI_ZONE_CENTER + const TOGGLE_SAFARI_ZONE_CENTER_ITEM ; D2 X + + toggle_consts_for CERULEAN_CAVE_2F + const TOGGLE_CERULEAN_CAVE_2F_ITEM_1 ; D3 X + const TOGGLE_CERULEAN_CAVE_2F_ITEM_2 ; D4 X + const TOGGLE_CERULEAN_CAVE_2F_ITEM_3 ; D5 X + const TOGGLE_CERULEAN_CAVE_2F_ITEM_4 ; D6 X + + toggle_consts_for CERULEAN_CAVE_B1F + const TOGGLE_MEWTWO ; D7 X + const TOGGLE_CERULEAN_CAVE_B1F_ITEM_1 ; D8 X + const TOGGLE_CERULEAN_CAVE_B1F_ITEM_2 ; D9 X + const TOGGLE_CERULEAN_CAVE_B1F_ITEM_3 ; DA X + const TOGGLE_CERULEAN_CAVE_B1F_ITEM_4 ; DB X + + toggle_consts_for VICTORY_ROAD_1F + const TOGGLE_VICTORY_ROAD_1F_ITEM_1 ; DC X + const TOGGLE_VICTORY_ROAD_1F_ITEM_2 ; DD X + + toggle_consts_for CHAMPIONS_ROOM + const TOGGLE_CHAMPIONS_ROOM_OAK ; DE + + toggle_consts_for SEAFOAM_ISLANDS_1F + const TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_1 ; DF + const TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_2 ; E0 + + toggle_consts_for SEAFOAM_ISLANDS_B1F + const TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_1 ; E1 + const TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_2 ; E2 + + toggle_consts_for SEAFOAM_ISLANDS_B2F + const TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_1 ; E3 + const TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_2 ; E4 + + toggle_consts_for SEAFOAM_ISLANDS_B3F + const TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_1 ; E5 + const TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_2 ; E6 + const TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_3 ; E7 + const TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_4 ; E8 + + toggle_consts_for SEAFOAM_ISLANDS_B4F + const TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_1 ; E9 + const TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_2 ; EA + const TOGGLE_ARTICUNO ; EB X + + const TOGGLE_DAISY_SITTING_COPY ; EC + const TOGGLE_DAISY_WALKING_COPY ; ED + const TOGGLE_TOWN_MAP_COPY ; EE + +DEF NUM_TOGGLEABLE_OBJECTS EQU const_value diff --git a/data/battle/stat_mod_names.asm b/data/battle/stat_mod_names.asm index 63c956d73..6c68db4ea 100644 --- a/data/battle/stat_mod_names.asm +++ b/data/battle/stat_mod_names.asm @@ -2,7 +2,7 @@ ; The relevant move effect IDs correspond to the stats StatModTextStrings: - list_start + list_start STAT_NAME_LENGTH - 1 li "ATTACK" li "DEFENSE" li "SPEED" diff --git a/data/battle/stat_names.asm b/data/battle/stat_names.asm index 30401a99b..08685e837 100644 --- a/data/battle/stat_names.asm +++ b/data/battle/stat_names.asm @@ -1,7 +1,7 @@ ; Stats that vitamins can raise or lower VitaminStats: - list_start + list_start STAT_NAME_LENGTH - 1 li "HEALTH" li "ATTACK" li "DEFENSE" diff --git a/data/events/hidden_events.asm b/data/events/hidden_events.asm new file mode 100644 index 000000000..ce43118f9 --- /dev/null +++ b/data/events/hidden_events.asm @@ -0,0 +1,570 @@ +MACRO hidden_event_map + db \1 ; map id + dw HiddenEventsFor_\1 +ENDM + +HiddenEventMaps: + hidden_event_map SILPH_CO_11F + hidden_event_map SILPH_CO_5F + hidden_event_map SILPH_CO_9F + hidden_event_map POKEMON_MANSION_2F + hidden_event_map POKEMON_MANSION_3F + hidden_event_map POKEMON_MANSION_B1F + hidden_event_map SAFARI_ZONE_WEST + hidden_event_map CERULEAN_CAVE_2F + hidden_event_map CERULEAN_CAVE_B1F + hidden_event_map UNUSED_MAP_6F + hidden_event_map SEAFOAM_ISLANDS_B2F + hidden_event_map SEAFOAM_ISLANDS_B3F + hidden_event_map SEAFOAM_ISLANDS_B4F + hidden_event_map VIRIDIAN_FOREST + hidden_event_map MT_MOON_B2F + hidden_event_map SS_ANNE_B1F_ROOMS + hidden_event_map SS_ANNE_KITCHEN + hidden_event_map UNDERGROUND_PATH_NORTH_SOUTH + hidden_event_map UNDERGROUND_PATH_WEST_EAST + hidden_event_map ROCKET_HIDEOUT_B1F + hidden_event_map ROCKET_HIDEOUT_B3F + hidden_event_map ROCKET_HIDEOUT_B4F + hidden_event_map ROUTE_10 + hidden_event_map ROCK_TUNNEL_POKECENTER + hidden_event_map POWER_PLANT + hidden_event_map ROUTE_11 + hidden_event_map ROUTE_12 + hidden_event_map ROUTE_13 + hidden_event_map ROUTE_15_GATE_2F + hidden_event_map ROUTE_17 + hidden_event_map ROUTE_23 + hidden_event_map VICTORY_ROAD_2F + hidden_event_map ROUTE_25 + hidden_event_map BILLS_HOUSE + hidden_event_map ROUTE_4 + hidden_event_map MT_MOON_POKECENTER + hidden_event_map ROUTE_9 + hidden_event_map TRADE_CENTER + hidden_event_map COLOSSEUM + hidden_event_map INDIGO_PLATEAU + hidden_event_map INDIGO_PLATEAU_LOBBY + hidden_event_map COPYCATS_HOUSE_2F + hidden_event_map FIGHTING_DOJO + hidden_event_map SAFFRON_GYM + hidden_event_map SAFFRON_POKECENTER + hidden_event_map REDS_HOUSE_2F + hidden_event_map BLUES_HOUSE + hidden_event_map OAKS_LAB + hidden_event_map VIRIDIAN_CITY + hidden_event_map VIRIDIAN_POKECENTER + hidden_event_map VIRIDIAN_SCHOOL_HOUSE + hidden_event_map VIRIDIAN_GYM + hidden_event_map MUSEUM_1F + hidden_event_map PEWTER_GYM + hidden_event_map PEWTER_POKECENTER + hidden_event_map CERULEAN_CITY + hidden_event_map CERULEAN_POKECENTER + hidden_event_map CERULEAN_GYM + hidden_event_map BIKE_SHOP + hidden_event_map CERULEAN_CAVE_1F + hidden_event_map LAVENDER_POKECENTER + hidden_event_map POKEMON_TOWER_5F + hidden_event_map MR_FUJIS_HOUSE + hidden_event_map VERMILION_CITY + hidden_event_map VERMILION_POKECENTER + hidden_event_map POKEMON_FAN_CLUB + hidden_event_map VERMILION_GYM + hidden_event_map CELADON_CITY + hidden_event_map CELADON_HOTEL + hidden_event_map CELADON_MANSION_2F + hidden_event_map CELADON_MANSION_ROOF_HOUSE + hidden_event_map CELADON_POKECENTER + hidden_event_map CELADON_GYM + hidden_event_map GAME_CORNER + hidden_event_map FUCHSIA_POKECENTER + hidden_event_map SAFARI_ZONE_GATE + hidden_event_map FUCHSIA_GYM + hidden_event_map POKEMON_MANSION_1F + hidden_event_map CINNABAR_GYM + hidden_event_map CINNABAR_LAB_FOSSIL_ROOM + hidden_event_map CINNABAR_POKECENTER + db -1 ; end + +MACRO hidden_events_for + HiddenEventsFor_\1: +ENDM + +MACRO hidden_event + db \2 ; y coord + db \1 ; x coord + db \4 ; function argument + dba \3 ; event function +ENDM + +MACRO hidden_text_predef + db \2 ; y coord + db \1 ; x coord + db_tx_pre \4 ; text id + dba \3 ; event function +ENDM + +; Some hidden events use SPRITE_FACING_* values, +; but these do not actually prevent the player +; from interacting with them in any direction. +DEF ANY_FACING EQU $d0 + + hidden_events_for SILPH_CO_11F + hidden_event 10, 12, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for SILPH_CO_5F + hidden_event 12, 3, HiddenItems, ELIXER + db -1 ; end + + hidden_events_for SILPH_CO_9F + hidden_event 2, 15, HiddenItems, MAX_POTION + db -1 ; end + + hidden_events_for POKEMON_MANSION_2F + hidden_event 2, 11, Mansion2Script_Switches, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for POKEMON_MANSION_3F + hidden_event 1, 9, HiddenItems, MAX_REVIVE + hidden_event 10, 5, Mansion3Script_Switches, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for POKEMON_MANSION_B1F + hidden_event 1, 9, HiddenItems, RARE_CANDY + hidden_event 20, 3, Mansion4Script_Switches, SPRITE_FACING_UP + hidden_event 18, 25, Mansion4Script_Switches, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for SAFARI_ZONE_WEST + hidden_event 6, 5, HiddenItems, REVIVE + db -1 ; end + + hidden_events_for CERULEAN_CAVE_2F + hidden_event 16, 13, HiddenItems, PP_UP + db -1 ; end + + hidden_events_for CERULEAN_CAVE_B1F + hidden_event 8, 14, HiddenItems, PP_UP + db -1 ; end + + hidden_events_for UNUSED_MAP_6F + hidden_event 14, 11, HiddenItems, MAX_ELIXER + db -1 ; end + + hidden_events_for SEAFOAM_ISLANDS_B2F + hidden_event 15, 15, HiddenItems, NUGGET + db -1 ; end + + hidden_events_for SEAFOAM_ISLANDS_B3F + hidden_event 9, 16, HiddenItems, MAX_ELIXER + db -1 ; end + + hidden_events_for SEAFOAM_ISLANDS_B4F + hidden_event 25, 17, HiddenItems, ULTRA_BALL + db -1 ; end + + hidden_events_for VIRIDIAN_FOREST + hidden_event 1, 18, HiddenItems, POTION + hidden_event 16, 42, HiddenItems, ANTIDOTE + db -1 ; end + + hidden_events_for MT_MOON_B2F + hidden_event 18, 12, HiddenItems, MOON_STONE + hidden_event 33, 9, HiddenItems, ETHER + db -1 ; end + + hidden_events_for SS_ANNE_B1F_ROOMS + hidden_event 3, 1, HiddenItems, HYPER_POTION + db -1 ; end + + hidden_events_for SS_ANNE_KITCHEN + hidden_event 13, 5, PrintTrashText, SPRITE_FACING_DOWN + hidden_event 13, 7, PrintTrashText, SPRITE_FACING_DOWN + hidden_event 13, 9, HiddenItems, GREAT_BALL + db -1 ; end + + hidden_events_for UNDERGROUND_PATH_NORTH_SOUTH + hidden_event 3, 4, HiddenItems, FULL_RESTORE + hidden_event 4, 34, HiddenItems, X_SPECIAL + db -1 ; end + + hidden_events_for UNDERGROUND_PATH_WEST_EAST + hidden_event 12, 2, HiddenItems, NUGGET + hidden_event 21, 5, HiddenItems, ELIXER + db -1 ; end + + hidden_events_for ROCKET_HIDEOUT_B1F + hidden_event 21, 15, HiddenItems, PP_UP + db -1 ; end + + hidden_events_for ROCKET_HIDEOUT_B3F + hidden_event 27, 17, HiddenItems, NUGGET + db -1 ; end + + hidden_events_for ROCKET_HIDEOUT_B4F + hidden_event 25, 1, HiddenItems, SUPER_POTION + db -1 ; end + + hidden_events_for ROUTE_10 + hidden_event 9, 17, HiddenItems, SUPER_POTION + hidden_event 16, 53, HiddenItems, MAX_ETHER + db -1 ; end + + hidden_events_for ROCK_TUNNEL_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for POWER_PLANT + hidden_event 17, 16, HiddenItems, MAX_ELIXER + hidden_event 12, 1, HiddenItems, PP_UP + db -1 ; end + + hidden_events_for ROUTE_11 + hidden_event 48, 5, HiddenItems, ESCAPE_ROPE + db -1 ; end + + hidden_events_for ROUTE_12 + hidden_event 2, 63, HiddenItems, HYPER_POTION + db -1 ; end + + hidden_events_for ROUTE_13 + hidden_event 1, 14, HiddenItems, PP_UP + hidden_event 16, 13, HiddenItems, CALCIUM + db -1 ; end + + hidden_events_for ROUTE_15_GATE_2F + hidden_event 1, 2, Route15GateLeftBinoculars, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for ROUTE_17 + hidden_event 15, 14, HiddenItems, RARE_CANDY + hidden_event 8, 45, HiddenItems, FULL_RESTORE + hidden_event 17, 72, HiddenItems, PP_UP + hidden_event 4, 91, HiddenItems, MAX_REVIVE + hidden_event 8, 121, HiddenItems, MAX_ELIXER + db -1 ; end + + hidden_events_for ROUTE_23 + hidden_event 9, 44, HiddenItems, FULL_RESTORE + hidden_event 19, 70, HiddenItems, ULTRA_BALL + hidden_event 8, 90, HiddenItems, MAX_ETHER + db -1 ; end + + hidden_events_for VICTORY_ROAD_2F + hidden_event 5, 2, HiddenItems, ULTRA_BALL + hidden_event 26, 7, HiddenItems, FULL_RESTORE + db -1 ; end + + hidden_events_for ROUTE_25 + hidden_event 38, 3, HiddenItems, ETHER + hidden_event 10, 1, HiddenItems, ELIXER + db -1 ; end + + hidden_events_for BILLS_HOUSE + hidden_event 1, 4, BillsHousePC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for ROUTE_4 + hidden_event 40, 3, HiddenItems, GREAT_BALL + db -1 ; end + + hidden_events_for MT_MOON_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for ROUTE_9 + hidden_event 14, 7, HiddenItems, ETHER + db -1 ; end + + hidden_events_for TRADE_CENTER + hidden_event 5, 4, CableClubRightGameboy, ANY_FACING + hidden_event 4, 4, CableClubLeftGameboy, ANY_FACING + db -1 ; end + + hidden_events_for COLOSSEUM + hidden_event 5, 4, CableClubRightGameboy, ANY_FACING + hidden_event 4, 4, CableClubLeftGameboy, ANY_FACING + db -1 ; end + + hidden_events_for INDIGO_PLATEAU + hidden_event 8, 13, PrintIndigoPlateauHQText, $ff ; inaccessible + hidden_event 11, 13, PrintIndigoPlateauHQText, SPRITE_FACING_DOWN ; inaccessible + db -1 ; end + + hidden_events_for INDIGO_PLATEAU_LOBBY + hidden_event 15, 7, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for COPYCATS_HOUSE_2F + hidden_event 1, 1, HiddenItems, NUGGET + db -1 ; end + + hidden_events_for FIGHTING_DOJO + hidden_event 3, 9, PrintFightingDojoText, SPRITE_FACING_UP + hidden_event 6, 9, PrintFightingDojoText, SPRITE_FACING_UP + hidden_event 4, 0, PrintFightingDojoText2, SPRITE_FACING_UP + hidden_event 5, 0, PrintFightingDojoText3, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for SAFFRON_GYM + hidden_event 9, 15, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for SAFFRON_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_UP + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for REDS_HOUSE_2F + hidden_event 0, 1, OpenRedsPC, SPRITE_FACING_UP + hidden_event 3, 5, PrintRedSNESText, ANY_FACING + db -1 ; end + + hidden_events_for BLUES_HOUSE + hidden_event 0, 1, PrintBookcaseText, SPRITE_FACING_UP + hidden_event 1, 1, PrintBookcaseText, SPRITE_FACING_UP + hidden_event 7, 1, PrintBookcaseText, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for OAKS_LAB + hidden_event 4, 0, DisplayOakLabLeftPoster, SPRITE_FACING_UP + hidden_event 5, 0, DisplayOakLabRightPoster, SPRITE_FACING_UP + hidden_event 0, 1, DisplayOakLabEmailText, SPRITE_FACING_UP + hidden_event 1, 1, DisplayOakLabEmailText, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for VIRIDIAN_CITY + hidden_event 14, 4, HiddenItems, POTION + db -1 ; end + + hidden_events_for VIRIDIAN_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for VIRIDIAN_SCHOOL_HOUSE + hidden_text_predef 3, 4, PrintNotebookText, ViridianSchoolNotebook + hidden_text_predef 3, 0, PrintBlackboardLinkCableText, ViridianSchoolBlackboard + db -1 ; end + + hidden_events_for VIRIDIAN_GYM + hidden_event 15, 15, GymStatues, SPRITE_FACING_UP + hidden_event 18, 15, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for MUSEUM_1F + hidden_event 2, 3, AerodactylFossil, SPRITE_FACING_UP + hidden_event 2, 6, KabutopsFossil, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for PEWTER_GYM + hidden_event 3, 10, GymStatues, SPRITE_FACING_UP + hidden_event 6, 10, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for PEWTER_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CERULEAN_CITY + hidden_event 15, 8, HiddenItems, RARE_CANDY + db -1 ; end + + hidden_events_for CERULEAN_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CERULEAN_GYM + hidden_event 3, 11, GymStatues, SPRITE_FACING_UP + hidden_event 6, 11, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for BIKE_SHOP + hidden_event 1, 0, PrintNewBikeText, ANY_FACING + hidden_event 2, 1, PrintNewBikeText, ANY_FACING + hidden_event 1, 2, PrintNewBikeText, ANY_FACING + hidden_event 3, 2, PrintNewBikeText, ANY_FACING + hidden_event 0, 4, PrintNewBikeText, ANY_FACING + hidden_event 1, 5, PrintNewBikeText, ANY_FACING + db -1 ; end + + hidden_events_for CERULEAN_CAVE_1F + hidden_event 18, 7, HiddenItems, PP_UP + db -1 ; end + + hidden_events_for LAVENDER_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for POKEMON_TOWER_5F + hidden_event 4, 12, HiddenItems, ELIXER + db -1 ; end + + hidden_events_for MR_FUJIS_HOUSE + hidden_event 0, 1, PrintMagazinesText, SPRITE_FACING_DOWN + hidden_event 1, 1, PrintMagazinesText, SPRITE_FACING_DOWN + hidden_event 7, 1, PrintMagazinesText, SPRITE_FACING_DOWN + db -1 ; end + + hidden_events_for VERMILION_CITY + hidden_event 14, 11, HiddenItems, MAX_ETHER + db -1 ; end + + hidden_events_for VERMILION_POKECENTER + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for POKEMON_FAN_CLUB + hidden_event 1, 0, FanClubPicture1, SPRITE_FACING_UP + hidden_event 6, 0, FanClubPicture2, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for VERMILION_GYM + hidden_event 3, 14, GymStatues, SPRITE_FACING_UP + hidden_event 6, 14, GymStatues, SPRITE_FACING_UP + hidden_event 6, 1, PrintTrashText, SPRITE_FACING_DOWN + ; GymTrashScript argument: [wGymTrashCanIndex] + hidden_event 1, 7, GymTrashScript, 0 + hidden_event 1, 9, GymTrashScript, 1 + hidden_event 1, 11, GymTrashScript, 2 + hidden_event 3, 7, GymTrashScript, 3 + hidden_event 3, 9, GymTrashScript, 4 + hidden_event 3, 11, GymTrashScript, 5 + hidden_event 5, 7, GymTrashScript, 6 + hidden_event 5, 9, GymTrashScript, 7 + hidden_event 5, 11, GymTrashScript, 8 + hidden_event 7, 7, GymTrashScript, 9 + hidden_event 7, 9, GymTrashScript, 10 + hidden_event 7, 11, GymTrashScript, 11 + hidden_event 9, 7, GymTrashScript, 12 + hidden_event 9, 9, GymTrashScript, 13 + hidden_event 9, 11, GymTrashScript, 14 + db -1 ; end + + hidden_events_for CELADON_CITY + hidden_event 48, 15, HiddenItems, PP_UP + db -1 ; end + + hidden_events_for CELADON_HOTEL + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + db -1 ; end + + hidden_events_for CELADON_MANSION_2F + hidden_event 0, 5, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CELADON_MANSION_ROOF_HOUSE + hidden_text_predef 3, 0, PrintBlackboardLinkCableText, LinkCableHelp + hidden_text_predef 4, 0, PrintBlackboardLinkCableText, LinkCableHelp + hidden_text_predef 3, 4, PrintNotebookText, TMNotebook + db -1 ; end + + hidden_events_for CELADON_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_LEFT + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CELADON_GYM + hidden_event 3, 15, GymStatues, SPRITE_FACING_UP + hidden_event 6, 15, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for GAME_CORNER + hidden_event 18, 15, StartSlotMachine, ANY_FACING + hidden_event 18, 14, StartSlotMachine, ANY_FACING + hidden_event 18, 13, StartSlotMachine, ANY_FACING + hidden_event 18, 12, StartSlotMachine, ANY_FACING + hidden_event 18, 11, StartSlotMachine, ANY_FACING + hidden_event 18, 10, StartSlotMachine, SLOTS_SOMEONESKEYS + hidden_event 13, 10, StartSlotMachine, ANY_FACING + hidden_event 13, 11, StartSlotMachine, ANY_FACING + hidden_event 13, 12, StartSlotMachine, SLOTS_OUTTOLUNCH + hidden_event 13, 13, StartSlotMachine, ANY_FACING + hidden_event 13, 14, StartSlotMachine, ANY_FACING + hidden_event 13, 15, StartSlotMachine, ANY_FACING + hidden_event 12, 15, StartSlotMachine, ANY_FACING + hidden_event 12, 14, StartSlotMachine, ANY_FACING + hidden_event 12, 13, StartSlotMachine, ANY_FACING + hidden_event 12, 12, StartSlotMachine, ANY_FACING + hidden_event 12, 11, StartSlotMachine, ANY_FACING + hidden_event 12, 10, StartSlotMachine, ANY_FACING + hidden_event 7, 10, StartSlotMachine, ANY_FACING + hidden_event 7, 11, StartSlotMachine, ANY_FACING + hidden_event 7, 12, StartSlotMachine, ANY_FACING + hidden_event 7, 13, StartSlotMachine, ANY_FACING + hidden_event 7, 14, StartSlotMachine, ANY_FACING + hidden_event 7, 15, StartSlotMachine, ANY_FACING + hidden_event 6, 15, StartSlotMachine, ANY_FACING + hidden_event 6, 14, StartSlotMachine, ANY_FACING + hidden_event 6, 13, StartSlotMachine, ANY_FACING + hidden_event 6, 12, StartSlotMachine, SLOTS_OUTOFORDER + hidden_event 6, 11, StartSlotMachine, ANY_FACING + hidden_event 6, 10, StartSlotMachine, ANY_FACING + hidden_event 1, 10, StartSlotMachine, ANY_FACING + hidden_event 1, 11, StartSlotMachine, ANY_FACING + hidden_event 1, 12, StartSlotMachine, ANY_FACING + hidden_event 1, 13, StartSlotMachine, ANY_FACING + hidden_event 1, 14, StartSlotMachine, ANY_FACING + hidden_event 1, 15, StartSlotMachine, ANY_FACING + ; HiddenCoins argument: COIN + + hidden_event 0, 8, HiddenCoins, COIN+10 + hidden_event 1, 16, HiddenCoins, COIN+10 + hidden_event 3, 11, HiddenCoins, COIN+20 + hidden_event 3, 14, HiddenCoins, COIN+10 + hidden_event 4, 12, HiddenCoins, COIN+10 + hidden_event 9, 12, HiddenCoins, COIN+20 + hidden_event 9, 15, HiddenCoins, COIN+10 + hidden_event 16, 14, HiddenCoins, COIN+10 + hidden_event 10, 16, HiddenCoins, COIN+10 + hidden_event 11, 7, HiddenCoins, COIN+40 + hidden_event 15, 8, HiddenCoins, COIN+100 + hidden_event 12, 15, HiddenCoins, COIN+10 + db -1 ; end + + hidden_events_for FUCHSIA_POKECENTER + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for SAFARI_ZONE_GATE + hidden_event 10, 1, HiddenItems, NUGGET ; inaccessible + db -1 ; end + + hidden_events_for FUCHSIA_GYM + hidden_event 3, 15, GymStatues, SPRITE_FACING_UP + hidden_event 6, 15, GymStatues, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for POKEMON_MANSION_1F + hidden_event 8, 16, HiddenItems, MOON_STONE + hidden_event 2, 5, Mansion1Script_Switches, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CINNABAR_GYM + hidden_event 17, 13, GymStatues, SPRITE_FACING_UP + ; PrintCinnabarQuiz argument: ([hGymGateAnswer] << 4) | [hGymGateIndex] + hidden_event 15, 7, PrintCinnabarQuiz, (FALSE << 4) | 1 + hidden_event 10, 1, PrintCinnabarQuiz, (TRUE << 4) | 2 + hidden_event 9, 7, PrintCinnabarQuiz, (TRUE << 4) | 3 + hidden_event 9, 13, PrintCinnabarQuiz, (TRUE << 4) | 4 + hidden_event 1, 13, PrintCinnabarQuiz, (FALSE << 4) | 5 + hidden_event 1, 7, PrintCinnabarQuiz, (TRUE << 4) | 6 + db -1 ; end + + hidden_events_for CINNABAR_LAB_FOSSIL_ROOM + hidden_event 0, 4, OpenPokemonCenterPC, SPRITE_FACING_UP + hidden_event 2, 4, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end + + hidden_events_for CINNABAR_POKECENTER + hidden_event 0, 4, PrintBenchGuyText, SPRITE_FACING_UP + hidden_event 13, 3, OpenPokemonCenterPC, SPRITE_FACING_UP + db -1 ; end diff --git a/data/events/hidden_objects.asm b/data/events/hidden_objects.asm deleted file mode 100644 index 3e8ea7452..000000000 --- a/data/events/hidden_objects.asm +++ /dev/null @@ -1,560 +0,0 @@ -HiddenObjectMaps: - dbw SILPH_CO_11F, SilphCo11FHiddenObjects - dbw SILPH_CO_5F, SilphCo5FHiddenObjects - dbw SILPH_CO_9F, SilphCo9FHiddenObjects - dbw POKEMON_MANSION_2F, Mansion2HiddenObjects - dbw POKEMON_MANSION_3F, Mansion3HiddenObjects - dbw POKEMON_MANSION_B1F, Mansion4HiddenObjects - dbw SAFARI_ZONE_WEST, SafariZoneWestHiddenObjects - dbw CERULEAN_CAVE_2F, CeruleanCave2HiddenObjects - dbw CERULEAN_CAVE_B1F, CeruleanCave3HiddenObjects - dbw UNUSED_MAP_6F, UnusedMap6FHiddenObjects - dbw SEAFOAM_ISLANDS_B2F, SeafoamIslands3HiddenObjects - dbw SEAFOAM_ISLANDS_B3F, SeafoamIslands4HiddenObjects - dbw SEAFOAM_ISLANDS_B4F, SeafoamIslands5HiddenObjects - dbw VIRIDIAN_FOREST, ViridianForestHiddenObjects - dbw MT_MOON_B2F, MtMoon3HiddenObjects - dbw SS_ANNE_B1F_ROOMS, SSAnne10HiddenObjects - dbw SS_ANNE_KITCHEN, SSAnne6HiddenObjects - dbw UNDERGROUND_PATH_NORTH_SOUTH, UndergroundPathNsHiddenObjects - dbw UNDERGROUND_PATH_WEST_EAST, UndergroundPathWeHiddenObjects - dbw ROCKET_HIDEOUT_B1F, RocketHideout1HiddenObjects - dbw ROCKET_HIDEOUT_B3F, RocketHideout3HiddenObjects - dbw ROCKET_HIDEOUT_B4F, RocketHideout4HiddenObjects - dbw ROUTE_10, Route10HiddenObjects - dbw ROCK_TUNNEL_POKECENTER, RockTunnelPokecenterHiddenObjects - dbw POWER_PLANT, PowerPlantHiddenObjects - dbw ROUTE_11, Route11HiddenObjects - dbw ROUTE_12, Route12HiddenObjects - dbw ROUTE_13, Route13HiddenObjects - dbw ROUTE_15_GATE_2F, Route15Gate2FHiddenObjects - dbw ROUTE_17, Route17HiddenObjects - dbw ROUTE_23, Route23HiddenObjects - dbw VICTORY_ROAD_2F, VictoryRoad2HiddenObjects - dbw ROUTE_25, Route25HiddenObjects - dbw BILLS_HOUSE, BillsHouseHiddenObjects - dbw ROUTE_4, Route4HiddenObjects - dbw MT_MOON_POKECENTER, MtMoonPokecenterHiddenObjects - dbw ROUTE_9, Route9HiddenObjects - dbw TRADE_CENTER, TradeCenterHiddenObjects - dbw COLOSSEUM, ColosseumHiddenObjects - dbw INDIGO_PLATEAU, IndigoPlateauHiddenObjects - dbw INDIGO_PLATEAU_LOBBY, IndigoPlateauLobbyHiddenObjects - dbw COPYCATS_HOUSE_2F, CopycatsHouse2FHiddenObjects - dbw FIGHTING_DOJO, FightingDojoHiddenObjects - dbw SAFFRON_GYM, SaffronGymHiddenObjects - dbw SAFFRON_POKECENTER, SaffronPokecenterHiddenObjects - dbw REDS_HOUSE_2F, RedsHouse2FHiddenObjects - dbw BLUES_HOUSE, BluesHouseHiddenObjects - dbw OAKS_LAB, OaksLabHiddenObjects - dbw VIRIDIAN_CITY, ViridianCityHiddenObjects - dbw VIRIDIAN_POKECENTER, ViridianPokecenterHiddenObjects - dbw VIRIDIAN_SCHOOL_HOUSE, ViridianSchoolHiddenObjects - dbw VIRIDIAN_GYM, ViridianGymHiddenObjects - dbw MUSEUM_1F, Museum1FHiddenObjects - dbw PEWTER_GYM, PewterGymHiddenObjects - dbw PEWTER_POKECENTER, PewterPokecenterHiddenObjects - dbw CERULEAN_CITY, CeruleanCityHiddenObjects - dbw CERULEAN_POKECENTER, CeruleanPokecenterHiddenObjects - dbw CERULEAN_GYM, CeruleanGymHiddenObjects - dbw BIKE_SHOP, BikeShopHiddenObjects - dbw CERULEAN_CAVE_1F, CeruleanCave1HiddenObjects - dbw LAVENDER_POKECENTER, LavenderPokecenterHiddenObjects - dbw POKEMON_TOWER_5F, Pokemontower5HiddenObjects - dbw MR_FUJIS_HOUSE, LavenderHouse1HiddenObjects - dbw VERMILION_CITY, VermilionCityHiddenObjects - dbw VERMILION_POKECENTER, VermilionPokecenterHiddenObjects - dbw POKEMON_FAN_CLUB, PokemonFanClubHiddenObjects - dbw VERMILION_GYM, VermilionGymHiddenObjects - dbw CELADON_CITY, CeladonCityHiddenObjects - dbw CELADON_HOTEL, CeladonHotelHiddenObjects - dbw CELADON_MANSION_2F, CeladonMansion2HiddenObjects - dbw CELADON_MANSION_ROOF_HOUSE, CeladonMansion5HiddenObjects - dbw CELADON_POKECENTER, CeladonPokecenterHiddenObjects - dbw CELADON_GYM, CeladonGymHiddenObjects - dbw GAME_CORNER, GameCornerHiddenObjects - dbw FUCHSIA_POKECENTER, FuchsiaPokecenterHiddenObjects - dbw SAFARI_ZONE_GATE, SafariZoneEntranceHiddenObjects - dbw FUCHSIA_GYM, FuchsiaGymHiddenObjects - dbw POKEMON_MANSION_1F, Mansion1HiddenObjects - dbw CINNABAR_GYM, CinnabarGymHiddenObjects - dbw CINNABAR_LAB_FOSSIL_ROOM, CinnabarLab4HiddenObjects - dbw CINNABAR_POKECENTER, CinnabarPokecenterHiddenObjects - db -1 ; end - -MACRO hidden_object - db \2 ; y coord - db \1 ; x coord - db \3 ; item id - dba \4 ; object routine -ENDM - -MACRO hidden_text_predef - db \2 ; y coord - db \1 ; x coord - db_tx_pre \3 ; text id - dba \4 ; object routine -ENDM - -; Some hidden objects use SPRITE_FACING_* values, -; but these do not actually prevent the player -; from interacting with them in any direction. -DEF ANY_FACING EQU $d0 - -SilphCo11FHiddenObjects: - hidden_object 10, 12, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -SilphCo5FHiddenObjects: - hidden_object 12, 3, ELIXER, HiddenItems - db -1 ; end - -SilphCo9FHiddenObjects: - hidden_object 2, 15, MAX_POTION, HiddenItems - db -1 ; end - -Mansion2HiddenObjects: - hidden_object 2, 11, SPRITE_FACING_UP, Mansion2Script_Switches - db -1 ; end - -Mansion3HiddenObjects: - hidden_object 1, 9, MAX_REVIVE, HiddenItems - hidden_object 10, 5, SPRITE_FACING_UP, Mansion3Script_Switches - db -1 ; end - -Mansion4HiddenObjects: - hidden_object 1, 9, RARE_CANDY, HiddenItems - hidden_object 20, 3, SPRITE_FACING_UP, Mansion4Script_Switches - hidden_object 18, 25, SPRITE_FACING_UP, Mansion4Script_Switches - db -1 ; end - -SafariZoneWestHiddenObjects: - hidden_object 6, 5, REVIVE, HiddenItems - db -1 ; end - -CeruleanCave2HiddenObjects: - hidden_object 16, 13, PP_UP, HiddenItems - db -1 ; end - -CeruleanCave3HiddenObjects: - hidden_object 8, 14, PP_UP, HiddenItems - db -1 ; end - -UnusedMap6FHiddenObjects: - hidden_object 14, 11, MAX_ELIXER, HiddenItems - db -1 ; end - -SeafoamIslands3HiddenObjects: - hidden_object 15, 15, NUGGET, HiddenItems - db -1 ; end - -SeafoamIslands4HiddenObjects: - hidden_object 9, 16, MAX_ELIXER, HiddenItems - db -1 ; end - -SeafoamIslands5HiddenObjects: - hidden_object 25, 17, ULTRA_BALL, HiddenItems - db -1 ; end - -ViridianForestHiddenObjects: - hidden_object 1, 18, POTION, HiddenItems - hidden_object 16, 42, ANTIDOTE, HiddenItems - db -1 ; end - -MtMoon3HiddenObjects: - hidden_object 18, 12, MOON_STONE, HiddenItems - hidden_object 33, 9, ETHER, HiddenItems - db -1 ; end - -SSAnne10HiddenObjects: - hidden_object 3, 1, HYPER_POTION, HiddenItems - db -1 ; end - -SSAnne6HiddenObjects: - hidden_object 13, 5, SPRITE_FACING_DOWN, PrintTrashText - hidden_object 13, 7, SPRITE_FACING_DOWN, PrintTrashText - hidden_object 13, 9, GREAT_BALL, HiddenItems - db -1 ; end - -UndergroundPathNsHiddenObjects: - hidden_object 3, 4, FULL_RESTORE, HiddenItems - hidden_object 4, 34, X_SPECIAL, HiddenItems - db -1 ; end - -UndergroundPathWeHiddenObjects: - hidden_object 12, 2, NUGGET, HiddenItems - hidden_object 21, 5, ELIXER, HiddenItems - db -1 ; end - -RocketHideout1HiddenObjects: - hidden_object 21, 15, PP_UP, HiddenItems - db -1 ; end - -RocketHideout3HiddenObjects: - hidden_object 27, 17, NUGGET, HiddenItems - db -1 ; end - -RocketHideout4HiddenObjects: - hidden_object 25, 1, SUPER_POTION, HiddenItems - db -1 ; end - -Route10HiddenObjects: - hidden_object 9, 17, SUPER_POTION, HiddenItems - hidden_object 16, 53, MAX_ETHER, HiddenItems - db -1 ; end - -RockTunnelPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -PowerPlantHiddenObjects: - hidden_object 17, 16, MAX_ELIXER, HiddenItems - hidden_object 12, 1, PP_UP, HiddenItems - db -1 ; end - -Route11HiddenObjects: - hidden_object 48, 5, ESCAPE_ROPE, HiddenItems - db -1 ; end - -Route12HiddenObjects: - hidden_object 2, 63, HYPER_POTION, HiddenItems - db -1 ; end - -Route13HiddenObjects: - hidden_object 1, 14, PP_UP, HiddenItems - hidden_object 16, 13, CALCIUM, HiddenItems - db -1 ; end - -Route15Gate2FHiddenObjects: - hidden_object 1, 2, SPRITE_FACING_UP, Route15GateLeftBinoculars - db -1 ; end - -Route17HiddenObjects: - hidden_object 15, 14, RARE_CANDY, HiddenItems - hidden_object 8, 45, FULL_RESTORE, HiddenItems - hidden_object 17, 72, PP_UP, HiddenItems - hidden_object 4, 91, MAX_REVIVE, HiddenItems - hidden_object 8, 121, MAX_ELIXER, HiddenItems - db -1 ; end - -Route23HiddenObjects: - hidden_object 9, 44, FULL_RESTORE, HiddenItems - hidden_object 19, 70, ULTRA_BALL, HiddenItems - hidden_object 8, 90, MAX_ETHER, HiddenItems - db -1 ; end - -VictoryRoad2HiddenObjects: - hidden_object 5, 2, ULTRA_BALL, HiddenItems - hidden_object 26, 7, FULL_RESTORE, HiddenItems - db -1 ; end - -Route25HiddenObjects: - hidden_object 38, 3, ETHER, HiddenItems - hidden_object 10, 1, ELIXER, HiddenItems - db -1 ; end - -BillsHouseHiddenObjects: - hidden_object 1, 4, SPRITE_FACING_UP, BillsHousePC - db -1 ; end - -Route4HiddenObjects: - hidden_object 40, 3, GREAT_BALL, HiddenItems - db -1 ; end - -MtMoonPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -Route9HiddenObjects: - hidden_object 14, 7, ETHER, HiddenItems - db -1 ; end - -TradeCenterHiddenObjects: - hidden_object 5, 4, ANY_FACING, CableClubRightGameboy - hidden_object 4, 4, ANY_FACING, CableClubLeftGameboy - db -1 ; end - -ColosseumHiddenObjects: - hidden_object 5, 4, ANY_FACING, CableClubRightGameboy - hidden_object 4, 4, ANY_FACING, CableClubLeftGameboy - db -1 ; end - -IndigoPlateauHiddenObjects: - hidden_object 8, 13, $ff, PrintIndigoPlateauHQText ; inaccessible - hidden_object 11, 13, SPRITE_FACING_DOWN, PrintIndigoPlateauHQText ; inaccessible - db -1 ; end - -IndigoPlateauLobbyHiddenObjects: - hidden_object 15, 7, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CopycatsHouse2FHiddenObjects: - hidden_object 1, 1, NUGGET, HiddenItems - db -1 ; end - -FightingDojoHiddenObjects: - hidden_object 3, 9, SPRITE_FACING_UP, PrintFightingDojoText - hidden_object 6, 9, SPRITE_FACING_UP, PrintFightingDojoText - hidden_object 4, 0, SPRITE_FACING_UP, PrintFightingDojoText2 - hidden_object 5, 0, SPRITE_FACING_UP, PrintFightingDojoText3 - db -1 ; end - -SaffronGymHiddenObjects: - hidden_object 9, 15, SPRITE_FACING_UP, GymStatues - db -1 ; end - -SaffronPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_UP, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -RedsHouse2FHiddenObjects: - hidden_object 0, 1, SPRITE_FACING_UP, OpenRedsPC - hidden_object 3, 5, ANY_FACING, PrintRedSNESText - db -1 ; end - -BluesHouseHiddenObjects: - hidden_object 0, 1, SPRITE_FACING_UP, PrintBookcaseText - hidden_object 1, 1, SPRITE_FACING_UP, PrintBookcaseText - hidden_object 7, 1, SPRITE_FACING_UP, PrintBookcaseText - db -1 ; end - -OaksLabHiddenObjects: - hidden_object 4, 0, SPRITE_FACING_UP, DisplayOakLabLeftPoster - hidden_object 5, 0, SPRITE_FACING_UP, DisplayOakLabRightPoster - hidden_object 0, 1, SPRITE_FACING_UP, DisplayOakLabEmailText - hidden_object 1, 1, SPRITE_FACING_UP, DisplayOakLabEmailText - db -1 ; end - -ViridianCityHiddenObjects: - hidden_object 14, 4, POTION, HiddenItems - db -1 ; end - -ViridianPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -ViridianSchoolHiddenObjects: - hidden_text_predef 3, 4, ViridianSchoolNotebook, PrintNotebookText - hidden_text_predef 3, 0, ViridianSchoolBlackboard, PrintBlackboardLinkCableText - db -1 ; end - -ViridianGymHiddenObjects: - hidden_object 15, 15, SPRITE_FACING_UP, GymStatues - hidden_object 18, 15, SPRITE_FACING_UP, GymStatues - db -1 ; end - -Museum1FHiddenObjects: - hidden_object 2, 3, SPRITE_FACING_UP, AerodactylFossil - hidden_object 2, 6, SPRITE_FACING_UP, KabutopsFossil - db -1 ; end - -PewterGymHiddenObjects: - hidden_object 3, 10, SPRITE_FACING_UP, GymStatues - hidden_object 6, 10, SPRITE_FACING_UP, GymStatues - db -1 ; end - -PewterPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CeruleanCityHiddenObjects: - hidden_object 15, 8, RARE_CANDY, HiddenItems - db -1 ; end - -CeruleanPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CeruleanGymHiddenObjects: - hidden_object 3, 11, SPRITE_FACING_UP, GymStatues - hidden_object 6, 11, SPRITE_FACING_UP, GymStatues - db -1 ; end - -BikeShopHiddenObjects: - hidden_object 1, 0, ANY_FACING, PrintNewBikeText - hidden_object 2, 1, ANY_FACING, PrintNewBikeText - hidden_object 1, 2, ANY_FACING, PrintNewBikeText - hidden_object 3, 2, ANY_FACING, PrintNewBikeText - hidden_object 0, 4, ANY_FACING, PrintNewBikeText - hidden_object 1, 5, ANY_FACING, PrintNewBikeText - db -1 ; end - -CeruleanCave1HiddenObjects: - hidden_object 18, 7, PP_UP, HiddenItems - db -1 ; end - -LavenderPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -Pokemontower5HiddenObjects: - hidden_object 4, 12, ELIXER, HiddenItems - db -1 ; end - -LavenderHouse1HiddenObjects: - hidden_object 0, 1, SPRITE_FACING_DOWN, PrintMagazinesText - hidden_object 1, 1, SPRITE_FACING_DOWN, PrintMagazinesText - hidden_object 7, 1, SPRITE_FACING_DOWN, PrintMagazinesText - db -1 ; end - -VermilionCityHiddenObjects: - hidden_object 14, 11, MAX_ETHER, HiddenItems - db -1 ; end - -VermilionPokecenterHiddenObjects: - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - hidden_object 0, 4, SPRITE_FACING_UP, PrintBenchGuyText - db -1 ; end - -PokemonFanClubHiddenObjects: - hidden_object 1, 0, SPRITE_FACING_UP, FanClubPicture1 - hidden_object 6, 0, SPRITE_FACING_UP, FanClubPicture2 - db -1 ; end - -VermilionGymHiddenObjects: - hidden_object 3, 14, SPRITE_FACING_UP, GymStatues - hidden_object 6, 14, SPRITE_FACING_UP, GymStatues - hidden_object 6, 1, SPRITE_FACING_DOWN, PrintTrashText - ; third param: [wGymTrashCanIndex] - hidden_object 1, 7, 0, GymTrashScript - hidden_object 1, 9, 1, GymTrashScript - hidden_object 1, 11, 2, GymTrashScript - hidden_object 3, 7, 3, GymTrashScript - hidden_object 3, 9, 4, GymTrashScript - hidden_object 3, 11, 5, GymTrashScript - hidden_object 5, 7, 6, GymTrashScript - hidden_object 5, 9, 7, GymTrashScript - hidden_object 5, 11, 8, GymTrashScript - hidden_object 7, 7, 9, GymTrashScript - hidden_object 7, 9, 10, GymTrashScript - hidden_object 7, 11, 11, GymTrashScript - hidden_object 9, 7, 12, GymTrashScript - hidden_object 9, 9, 13, GymTrashScript - hidden_object 9, 11, 14, GymTrashScript - db -1 ; end - -CeladonCityHiddenObjects: - hidden_object 48, 15, PP_UP, HiddenItems - db -1 ; end - -CeladonHotelHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - db -1 ; end - -CeladonMansion2HiddenObjects: - hidden_object 0, 5, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CeladonMansion5HiddenObjects: - hidden_text_predef 3, 0, LinkCableHelp, PrintBlackboardLinkCableText - hidden_text_predef 4, 0, LinkCableHelp, PrintBlackboardLinkCableText - hidden_text_predef 3, 4, TMNotebook, PrintNotebookText - db -1 ; end - -CeladonPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CeladonGymHiddenObjects: - hidden_object 3, 15, SPRITE_FACING_UP, GymStatues - hidden_object 6, 15, SPRITE_FACING_UP, GymStatues - db -1 ; end - -GameCornerHiddenObjects: - hidden_object 18, 15, ANY_FACING, StartSlotMachine - hidden_object 18, 14, ANY_FACING, StartSlotMachine - hidden_object 18, 13, ANY_FACING, StartSlotMachine - hidden_object 18, 12, ANY_FACING, StartSlotMachine - hidden_object 18, 11, ANY_FACING, StartSlotMachine - hidden_object 18, 10, SLOTS_SOMEONESKEYS, StartSlotMachine - hidden_object 13, 10, ANY_FACING, StartSlotMachine - hidden_object 13, 11, ANY_FACING, StartSlotMachine - hidden_object 13, 12, SLOTS_OUTTOLUNCH, StartSlotMachine - hidden_object 13, 13, ANY_FACING, StartSlotMachine - hidden_object 13, 14, ANY_FACING, StartSlotMachine - hidden_object 13, 15, ANY_FACING, StartSlotMachine - hidden_object 12, 15, ANY_FACING, StartSlotMachine - hidden_object 12, 14, ANY_FACING, StartSlotMachine - hidden_object 12, 13, ANY_FACING, StartSlotMachine - hidden_object 12, 12, ANY_FACING, StartSlotMachine - hidden_object 12, 11, ANY_FACING, StartSlotMachine - hidden_object 12, 10, ANY_FACING, StartSlotMachine - hidden_object 7, 10, ANY_FACING, StartSlotMachine - hidden_object 7, 11, ANY_FACING, StartSlotMachine - hidden_object 7, 12, ANY_FACING, StartSlotMachine - hidden_object 7, 13, ANY_FACING, StartSlotMachine - hidden_object 7, 14, ANY_FACING, StartSlotMachine - hidden_object 7, 15, ANY_FACING, StartSlotMachine - hidden_object 6, 15, ANY_FACING, StartSlotMachine - hidden_object 6, 14, ANY_FACING, StartSlotMachine - hidden_object 6, 13, ANY_FACING, StartSlotMachine - hidden_object 6, 12, SLOTS_OUTOFORDER, StartSlotMachine - hidden_object 6, 11, ANY_FACING, StartSlotMachine - hidden_object 6, 10, ANY_FACING, StartSlotMachine - hidden_object 1, 10, ANY_FACING, StartSlotMachine - hidden_object 1, 11, ANY_FACING, StartSlotMachine - hidden_object 1, 12, ANY_FACING, StartSlotMachine - hidden_object 1, 13, ANY_FACING, StartSlotMachine - hidden_object 1, 14, ANY_FACING, StartSlotMachine - hidden_object 1, 15, ANY_FACING, StartSlotMachine - hidden_object 0, 8, COIN+10, HiddenCoins - hidden_object 1, 16, COIN+10, HiddenCoins - hidden_object 3, 11, COIN+20, HiddenCoins - hidden_object 3, 14, COIN+10, HiddenCoins - hidden_object 4, 12, COIN+10, HiddenCoins - hidden_object 9, 12, COIN+20, HiddenCoins - hidden_object 9, 15, COIN+10, HiddenCoins - hidden_object 16, 14, COIN+10, HiddenCoins - hidden_object 10, 16, COIN+10, HiddenCoins - hidden_object 11, 7, COIN+40, HiddenCoins - hidden_object 15, 8, COIN+100, HiddenCoins - hidden_object 12, 15, COIN+10, HiddenCoins - db -1 ; end - -FuchsiaPokecenterHiddenObjects: - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - hidden_object 0, 4, SPRITE_FACING_UP, PrintBenchGuyText - db -1 ; end - -SafariZoneEntranceHiddenObjects: - hidden_object 10, 1, NUGGET, HiddenItems ; inaccessible - db -1 ; end - -FuchsiaGymHiddenObjects: - hidden_object 3, 15, SPRITE_FACING_UP, GymStatues - hidden_object 6, 15, SPRITE_FACING_UP, GymStatues - db -1 ; end - -Mansion1HiddenObjects: - hidden_object 8, 16, MOON_STONE, HiddenItems - hidden_object 2, 5, SPRITE_FACING_UP, Mansion1Script_Switches - db -1 ; end - -CinnabarGymHiddenObjects: - hidden_object 17, 13, SPRITE_FACING_UP, GymStatues - ; third param: ([hGymGateAnswer] << 4) | [hGymGateIndex] - hidden_object 15, 7, (FALSE << 4) | 1, PrintCinnabarQuiz - hidden_object 10, 1, (TRUE << 4) | 2, PrintCinnabarQuiz - hidden_object 9, 7, (TRUE << 4) | 3, PrintCinnabarQuiz - hidden_object 9, 13, (TRUE << 4) | 4, PrintCinnabarQuiz - hidden_object 1, 13, (FALSE << 4) | 5, PrintCinnabarQuiz - hidden_object 1, 7, (TRUE << 4) | 6, PrintCinnabarQuiz - db -1 ; end - -CinnabarLab4HiddenObjects: - hidden_object 0, 4, SPRITE_FACING_UP, OpenPokemonCenterPC - hidden_object 2, 4, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - -CinnabarPokecenterHiddenObjects: - hidden_object 0, 4, SPRITE_FACING_UP, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end diff --git a/data/items/names.asm b/data/items/names.asm index bab26efc9..f5c0f27ea 100644 --- a/data/items/names.asm +++ b/data/items/names.asm @@ -1,5 +1,5 @@ ItemNames:: - list_start + list_start ITEM_NAME_LENGTH - 1 li "MASTER BALL" li "ULTRA BALL" li "GREAT BALL" diff --git a/data/maps/hide_show_data.asm b/data/maps/hide_show_data.asm deleted file mode 100644 index de9eb9790..000000000 --- a/data/maps/hide_show_data.asm +++ /dev/null @@ -1,582 +0,0 @@ -; default hidden/shown objects for each map - -MapHSPointers: -; entries correspond to map ids - table_width 2 - dw PalletTownHS - dw ViridianCityHS - dw PewterCityHS - dw CeruleanCityHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SaffronCityHS - dw NoHS - dw NoHS - dw Route2HS - dw NoHS - dw Route4HS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw Route9HS - dw NoHS - dw NoHS - dw Route12HS - dw NoHS - dw NoHS - dw Route15HS - dw Route16HS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw Route22HS - dw NoHS - dw Route24HS - dw Route25HS - dw NoHS - dw NoHS - dw BluesHouseHS - dw OaksLabHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw ViridianGymHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw ViridianForestHS - dw Museum1FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw MtMoon1FHS - dw NoHS - dw MtMoonB2FHS - dw NoHS - dw CeruleanMelaniesHouseHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw PowerPlantHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw BillsHouseHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SSAnne2FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SSAnne1FRoomsHS - dw SSAnne2FRoomsHS - dw SSAnneB1FRoomsHS - dw NoHS - dw NoHS - dw NoHS - dw VictoryRoad1FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw ChampionsRoomHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw CeladonMansionRoofHouseHS - dw NoHS - dw NoHS - dw GameCornerHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw PokemonTower2FHS - dw PokemonTower3FHS - dw PokemonTower4FHS - dw PokemonTower5FHS - dw PokemonTower6FHS - dw PokemonTower7FHS - dw MrFujisHouseHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw WardensHouseHS - dw NoHS - dw NoHS - dw NoHS - dw SeafoamIslandsB1FHS - dw SeafoamIslandsB2FHS - dw SeafoamIslandsB3FHS - dw SeafoamIslandsB4FHS - dw NoHS - dw NoHS - dw PokemonMansion1FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw FightingDojoHS - dw NoHS - dw NoHS - dw NoHS - dw SilphCo1FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SeafoamIslands1FHS - dw NoHS - dw VictoryRoad2FHS - dw NoHS - dw NoHS - dw NoHS - dw VictoryRoad3FHS - dw RocketHideoutB1FHS - dw RocketHideoutB2FHS - dw RocketHideoutB3FHS - dw RocketHideoutB4FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SilphCo2FHS - dw SilphCo3FHS - dw SilphCo4FHS - dw SilphCo5FHS - dw SilphCo6FHS - dw SilphCo7FHS - dw SilphCo8FHS - dw PokemonMansion2FHS - dw PokemonMansion3FHS - dw PokemonMansionB1FHS - dw SafariZoneEastHS - dw SafariZoneNorthHS - dw SafariZoneWestHS - dw SafariZoneCenterHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw CeruleanCave2FHS - dw CeruleanCaveB1FHS - dw CeruleanCaveHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw SilphCo9FHS - dw SilphCo10FHS - dw SilphCo11FHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - dw UnusedMapF4HS - dw NoHS - dw NoHS - dw NoHS - dw NoHS - assert_table_length NUM_MAPS - dw -1 ; end - -NoHS: - db -1, -1, -1 ; end - -MissableObjects: -; entries correspond to HS_* constants (see constants/hide_show_constants) - table_width 3 -; format: map id, object id, HIDE/SHOW - -PalletTownHS: - db PALLET_TOWN, PALLETTOWN_OAK, HIDE -ViridianCityHS: - db VIRIDIAN_CITY, VIRIDIANCITY_OLD_MAN_SLEEPY, SHOW - db VIRIDIAN_CITY, VIRIDIANCITY_OLD_MAN, HIDE - db VIRIDIAN_CITY, VIRIDIANCITY_OLD_MAN2, HIDE -PewterCityHS: - db PEWTER_CITY, PEWTERCITY_SUPER_NERD1, SHOW - db PEWTER_CITY, PEWTERCITY_YOUNGSTER, SHOW -CeruleanCityHS: - db CERULEAN_CITY, CERULEANCITY_RIVAL, HIDE - db CERULEAN_CITY, CERULEANCITY_ROCKET, SHOW - db CERULEAN_CITY, CERULEANCITY_GUARD1, HIDE - db CERULEAN_CITY, CERULEANCITY_SUPER_NERD3, SHOW - db CERULEAN_CITY, CERULEANCITY_GUARD2, SHOW -SaffronCityHS: - db SAFFRON_CITY, SAFFRONCITY_ROCKET1, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET2, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET3, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET4, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET5, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET6, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET7, SHOW - db SAFFRON_CITY, SAFFRONCITY_SCIENTIST, HIDE - db SAFFRON_CITY, SAFFRONCITY_SILPH_WORKER_M, HIDE - db SAFFRON_CITY, SAFFRONCITY_SILPH_WORKER_F, HIDE - db SAFFRON_CITY, SAFFRONCITY_GENTLEMAN, HIDE - db SAFFRON_CITY, SAFFRONCITY_PIDGEOT, HIDE - db SAFFRON_CITY, SAFFRONCITY_ROCKER, HIDE - db SAFFRON_CITY, SAFFRONCITY_ROCKET8, SHOW - db SAFFRON_CITY, SAFFRONCITY_ROCKET9, HIDE ; removed in yellow -Route2HS: - db ROUTE_2, ROUTE2_MOON_STONE, SHOW - db ROUTE_2, ROUTE2_HP_UP, SHOW -Route4HS: - db ROUTE_4, ROUTE4_TM_WHIRLWIND, SHOW -Route9HS: - db ROUTE_9, ROUTE9_TM_TELEPORT, SHOW -Route12HS: - db ROUTE_12, ROUTE12_SNORLAX, SHOW - db ROUTE_12, ROUTE12_TM_PAY_DAY, SHOW - db ROUTE_12, ROUTE12_IRON, SHOW -Route15HS: - db ROUTE_15, ROUTE15_TM_RAGE, SHOW -Route16HS: - db ROUTE_16, ROUTE16_SNORLAX, SHOW -Route22HS: - db ROUTE_22, ROUTE22_RIVAL1, HIDE - db ROUTE_22, ROUTE22_RIVAL2, HIDE -Route24HS: - db ROUTE_24, ROUTE24_COOLTRAINER_M1, SHOW - db ROUTE_24, ROUTE24_TM_THUNDER_WAVE, SHOW -Route25HS: - db ROUTE_25, ROUTE25_TM_SEISMIC_TOSS, SHOW -BluesHouseHS: - db BLUES_HOUSE, BLUESHOUSE_DAISY1, SHOW - db BLUES_HOUSE, BLUESHOUSE_DAISY2, HIDE - db BLUES_HOUSE, BLUESHOUSE_TOWN_MAP, SHOW -OaksLabHS: - db OAKS_LAB, OAKSLAB_RIVAL, SHOW - db OAKS_LAB, OAKSLAB_EEVEE_POKE_BALL, SHOW - db OAKS_LAB, OAKSLAB_OAK1, HIDE - db OAKS_LAB, OAKSLAB_POKEDEX1, SHOW - db OAKS_LAB, OAKSLAB_POKEDEX2, SHOW - db OAKS_LAB, OAKSLAB_OAK2, HIDE -ViridianGymHS: - db VIRIDIAN_GYM, VIRIDIANGYM_GIOVANNI, SHOW - db VIRIDIAN_GYM, VIRIDIANGYM_REVIVE, SHOW -Museum1FHS: - db MUSEUM_1F, MUSEUM1F_OLD_AMBER, SHOW -CeruleanMelaniesHouseHS: - db CERULEAN_MELANIES_HOUSE, CERULEANMELANIESHOUSE_BULBASAUR, SHOW -CeruleanCaveHS: - db CERULEAN_CAVE_1F, CERULEANCAVE1F_RARE_CANDY, SHOW - db CERULEAN_CAVE_1F, CERULEANCAVE1F_MAX_ELIXER, SHOW - db CERULEAN_CAVE_1F, CERULEANCAVE1F_MAX_REVIVE, SHOW - db CERULEAN_CAVE_1F, CERULEANCAVE1F_ULTRA_BALL, SHOW -PokemonTower2FHS: - db POKEMON_TOWER_2F, POKEMONTOWER2F_RIVAL, SHOW -PokemonTower3FHS: - db POKEMON_TOWER_3F, POKEMONTOWER3F_ESCAPE_ROPE, SHOW -PokemonTower4FHS: - db POKEMON_TOWER_4F, POKEMONTOWER4F_ELIXER, SHOW - db POKEMON_TOWER_4F, POKEMONTOWER4F_AWAKENING, SHOW - db POKEMON_TOWER_4F, POKEMONTOWER4F_HP_UP, SHOW -PokemonTower5FHS: - db POKEMON_TOWER_5F, POKEMONTOWER5F_NUGGET, SHOW -PokemonTower6FHS: - db POKEMON_TOWER_6F, POKEMONTOWER6F_RARE_CANDY, SHOW - db POKEMON_TOWER_6F, POKEMONTOWER6F_X_ACCURACY, SHOW -PokemonTower7FHS: - db POKEMON_TOWER_7F, POKEMONTOWER7F_JESSIE, HIDE - db POKEMON_TOWER_7F, POKEMONTOWER7F_JAMES, HIDE - db POKEMON_TOWER_7F, POKEMONTOWER7F_MR_FUJI, SHOW -MrFujisHouseHS: - db MR_FUJIS_HOUSE, MRFUJISHOUSE_MR_FUJI, HIDE -CeladonMansionRoofHouseHS: - db CELADON_MANSION_ROOF_HOUSE, CELADONMANSION_ROOF_HOUSE_EEVEE_POKEBALL, SHOW -GameCornerHS: - db GAME_CORNER, GAMECORNER_ROCKET, SHOW -WardensHouseHS: - db WARDENS_HOUSE, WARDENSHOUSE_RARE_CANDY, SHOW -PokemonMansion1FHS: - db POKEMON_MANSION_1F, POKEMONMANSION1F_ESCAPE_ROPE, SHOW - db POKEMON_MANSION_1F, POKEMONMANSION1F_CARBOS, SHOW -FightingDojoHS: - db FIGHTING_DOJO, FIGHTINGDOJO_HITMONLEE_POKE_BALL, SHOW - db FIGHTING_DOJO, FIGHTINGDOJO_HITMONCHAN_POKE_BALL, SHOW -SilphCo1FHS: - db SILPH_CO_1F, SILPHCO1F_LINK_RECEPTIONIST, HIDE -PowerPlantHS: - db POWER_PLANT, POWERPLANT_VOLTORB1, SHOW - db POWER_PLANT, POWERPLANT_VOLTORB2, SHOW - db POWER_PLANT, POWERPLANT_VOLTORB3, SHOW - db POWER_PLANT, POWERPLANT_ELECTRODE1, SHOW - db POWER_PLANT, POWERPLANT_VOLTORB4, SHOW - db POWER_PLANT, POWERPLANT_VOLTORB5, SHOW - db POWER_PLANT, POWERPLANT_ELECTRODE2, SHOW - db POWER_PLANT, POWERPLANT_VOLTORB6, SHOW - db POWER_PLANT, POWERPLANT_ZAPDOS, SHOW - db POWER_PLANT, POWERPLANT_CARBOS, SHOW - db POWER_PLANT, POWERPLANT_HP_UP, SHOW - db POWER_PLANT, POWERPLANT_RARE_CANDY, SHOW - db POWER_PLANT, POWERPLANT_TM_THUNDER, SHOW - db POWER_PLANT, POWERPLANT_TM_REFLECT, SHOW -VictoryRoad2FHS: - db VICTORY_ROAD_2F, VICTORYROAD2F_MOLTRES, SHOW - db VICTORY_ROAD_2F, VICTORYROAD2F_TM_SUBMISSION, SHOW - db VICTORY_ROAD_2F, VICTORYROAD2F_FULL_HEAL, SHOW - db VICTORY_ROAD_2F, VICTORYROAD2F_TM_MEGA_KICK, SHOW - db VICTORY_ROAD_2F, VICTORYROAD2F_GUARD_SPEC, SHOW - db VICTORY_ROAD_2F, VICTORYROAD2F_BOULDER3, SHOW -BillsHouseHS: - db BILLS_HOUSE, BILLSHOUSE_BILL_POKEMON, SHOW - db BILLS_HOUSE, BILLSHOUSE_BILL1, HIDE - db BILLS_HOUSE, BILLSHOUSE_BILL2, HIDE -ViridianForestHS: - db VIRIDIAN_FOREST, VIRIDIANFOREST_POTION1, SHOW - db VIRIDIAN_FOREST, VIRIDIANFOREST_POTION2, SHOW - db VIRIDIAN_FOREST, VIRIDIANFOREST_POKE_BALL, SHOW -MtMoon1FHS: - db MT_MOON_1F, MTMOON1F_POTION1, SHOW - db MT_MOON_1F, MTMOON1F_MOON_STONE, SHOW - db MT_MOON_1F, MTMOON1F_RARE_CANDY, SHOW - db MT_MOON_1F, MTMOON1F_ESCAPE_ROPE, SHOW - db MT_MOON_1F, MTMOON1F_POTION2, SHOW - db MT_MOON_1F, MTMOON1F_TM_WATER_GUN, SHOW -MtMoonB2FHS: - db MT_MOON_B2F, MTMOONB2F_JESSIE, HIDE - db MT_MOON_B2F, MTMOONB2F_JAMES, HIDE - db MT_MOON_B2F, MTMOONB2F_DOME_FOSSIL, SHOW - db MT_MOON_B2F, MTMOONB2F_HELIX_FOSSIL, SHOW - db MT_MOON_B2F, MTMOONB2F_HP_UP, SHOW - db MT_MOON_B2F, MTMOONB2F_TM_MEGA_PUNCH, SHOW -SSAnne2FHS: - db SS_ANNE_2F, SSANNE2F_RIVAL, HIDE -SSAnne1FRoomsHS: - db SS_ANNE_1F_ROOMS, SSANNE1FROOMS_TM_BODY_SLAM, SHOW -SSAnne2FRoomsHS: - db SS_ANNE_2F_ROOMS, SSANNE2FROOMS_MAX_ETHER, SHOW - db SS_ANNE_2F_ROOMS, SSANNE2FROOMS_RARE_CANDY, SHOW -SSAnneB1FRoomsHS: - db SS_ANNE_B1F_ROOMS, SSANNEB1FROOMS_ETHER, SHOW - db SS_ANNE_B1F_ROOMS, SSANNEB1FROOMS_TM_REST, SHOW - db SS_ANNE_B1F_ROOMS, SSANNEB1FROOMS_MAX_POTION, SHOW -VictoryRoad3FHS: - db VICTORY_ROAD_3F, VICTORYROAD3F_MAX_REVIVE, SHOW - db VICTORY_ROAD_3F, VICTORYROAD3F_TM_EXPLOSION, SHOW - db VICTORY_ROAD_3F, VICTORYROAD3F_BOULDER4, SHOW -RocketHideoutB1FHS: - db ROCKET_HIDEOUT_B1F, ROCKETHIDEOUTB1F_ESCAPE_ROPE, SHOW - db ROCKET_HIDEOUT_B1F, ROCKETHIDEOUTB1F_HYPER_POTION, SHOW -RocketHideoutB2FHS: - db ROCKET_HIDEOUT_B2F, ROCKETHIDEOUTB2F_MOON_STONE, SHOW - db ROCKET_HIDEOUT_B2F, ROCKETHIDEOUTB2F_NUGGET, SHOW - db ROCKET_HIDEOUT_B2F, ROCKETHIDEOUTB2F_TM_HORN_DRILL, SHOW - db ROCKET_HIDEOUT_B2F, ROCKETHIDEOUTB2F_SUPER_POTION, SHOW -RocketHideoutB3FHS: - db ROCKET_HIDEOUT_B3F, ROCKETHIDEOUTB3F_TM_DOUBLE_EDGE, SHOW - db ROCKET_HIDEOUT_B3F, ROCKETHIDEOUTB3F_RARE_CANDY, SHOW -RocketHideoutB4FHS: - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_GIOVANNI, SHOW - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_JAMES, HIDE - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_JESSIE, HIDE - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_HP_UP, SHOW - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_TM_RAZOR_WIND, SHOW - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_IRON, SHOW - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_SILPH_SCOPE, HIDE - db ROCKET_HIDEOUT_B4F, ROCKETHIDEOUTB4F_LIFT_KEY, HIDE -SilphCo2FHS: - db SILPH_CO_2F, SILPHCO2F_SILPH_WORKER_F, SHOW - db SILPH_CO_2F, SILPHCO2F_SCIENTIST1, SHOW - db SILPH_CO_2F, SILPHCO2F_SCIENTIST2, SHOW - db SILPH_CO_2F, SILPHCO2F_ROCKET1, SHOW - db SILPH_CO_2F, SILPHCO2F_ROCKET2, SHOW -SilphCo3FHS: - db SILPH_CO_3F, SILPHCO3F_ROCKET, SHOW - db SILPH_CO_3F, SILPHCO3F_SCIENTIST, SHOW - db SILPH_CO_3F, SILPHCO3F_HYPER_POTION, SHOW -SilphCo4FHS: - db SILPH_CO_4F, SILPHCO4F_ROCKET1, SHOW - db SILPH_CO_4F, SILPHCO4F_SCIENTIST, SHOW - db SILPH_CO_4F, SILPHCO4F_ROCKET2, SHOW - db SILPH_CO_4F, SILPHCO4F_FULL_HEAL, SHOW - db SILPH_CO_4F, SILPHCO4F_MAX_REVIVE, SHOW - db SILPH_CO_4F, SILPHCO4F_ESCAPE_ROPE, SHOW -SilphCo5FHS: - db SILPH_CO_5F, SILPHCO5F_ROCKET1, SHOW - db SILPH_CO_5F, SILPHCO5F_SCIENTIST, SHOW - db SILPH_CO_5F, SILPHCO5F_ROCKER, SHOW - db SILPH_CO_5F, SILPHCO5F_ROCKET2, SHOW - db SILPH_CO_5F, SILPHCO5F_TM_TAKE_DOWN, SHOW - db SILPH_CO_5F, SILPHCO5F_PROTEIN, SHOW - db SILPH_CO_5F, SILPHCO5F_CARD_KEY, SHOW -SilphCo6FHS: - db SILPH_CO_6F, SILPHCO6F_ROCKET1, SHOW - db SILPH_CO_6F, SILPHCO6F_SCIENTIST, SHOW - db SILPH_CO_6F, SILPHCO6F_ROCKET2, SHOW - db SILPH_CO_6F, SILPHCO6F_HP_UP, SHOW - db SILPH_CO_6F, SILPHCO6F_X_ACCURACY, SHOW -SilphCo7FHS: - db SILPH_CO_7F, SILPHCO7F_ROCKET1, SHOW - db SILPH_CO_7F, SILPHCO7F_SCIENTIST, SHOW - db SILPH_CO_7F, SILPHCO7F_ROCKET2, SHOW - db SILPH_CO_7F, SILPHCO7F_ROCKET3, SHOW - db SILPH_CO_7F, SILPHCO7F_RIVAL, SHOW - db SILPH_CO_7F, SILPHCO7F_CALCIUM, SHOW - db SILPH_CO_7F, SILPHCO7F_TM_SWORDS_DANCE, SHOW - db SILPH_CO_7F, SILPHCO7F_UNUSED, SHOW -SilphCo8FHS: - db SILPH_CO_8F, SILPHCO8F_ROCKET1, SHOW - db SILPH_CO_8F, SILPHCO8F_SCIENTIST, SHOW - db SILPH_CO_8F, SILPHCO8F_ROCKET2, SHOW -SilphCo9FHS: - db SILPH_CO_9F, SILPHCO9F_ROCKET1, SHOW - db SILPH_CO_9F, SILPHCO9F_SCIENTIST, SHOW - db SILPH_CO_9F, SILPHCO9F_ROCKET2, SHOW -SilphCo10FHS: - db SILPH_CO_10F, SILPHCO10F_ROCKET, SHOW - db SILPH_CO_10F, SILPHCO10F_SCIENTIST, SHOW - db SILPH_CO_10F, SILPHCO10F_SILPH_WORKER_F, SHOW - db SILPH_CO_10F, SILPHCO10F_TM_EARTHQUAKE, SHOW - db SILPH_CO_10F, SILPHCO10F_RARE_CANDY, SHOW - db SILPH_CO_10F, SILPHCO10F_CARBOS, SHOW -SilphCo11FHS: - db SILPH_CO_11F, SILPHCO11F_GIOVANNI, SHOW - db SILPH_CO_11F, SILPHCO11F_JAMES, SHOW - db SILPH_CO_11F, SILPHCO11F_ROCKET, SHOW - db SILPH_CO_11F, SILPHCO11F_JESSIE, SHOW -UnusedMapF4HS: - db UNUSED_MAP_F4, $02, SHOW ; unused -PokemonMansion2FHS: - db POKEMON_MANSION_2F, POKEMONMANSION2F_CALCIUM, SHOW -PokemonMansion3FHS: - db POKEMON_MANSION_3F, POKEMONMANSION3F_MAX_POTION, SHOW - db POKEMON_MANSION_3F, POKEMONMANSION3F_IRON, SHOW -PokemonMansionB1FHS: - db POKEMON_MANSION_B1F, POKEMONMANSIONB1F_RARE_CANDY, SHOW - db POKEMON_MANSION_B1F, POKEMONMANSIONB1F_FULL_RESTORE, SHOW - db POKEMON_MANSION_B1F, POKEMONMANSIONB1F_TM_BLIZZARD, SHOW - db POKEMON_MANSION_B1F, POKEMONMANSIONB1F_TM_SOLARBEAM, SHOW - db POKEMON_MANSION_B1F, POKEMONMANSIONB1F_SECRET_KEY, SHOW -SafariZoneEastHS: - db SAFARI_ZONE_EAST, SAFARIZONEEAST_FULL_RESTORE, SHOW - db SAFARI_ZONE_EAST, SAFARIZONEEAST_MAX_RESTORE, SHOW - db SAFARI_ZONE_EAST, SAFARIZONEEAST_CARBOS, SHOW - db SAFARI_ZONE_EAST, SAFARIZONEEAST_TM_EGG_BOMB, SHOW -SafariZoneNorthHS: - db SAFARI_ZONE_NORTH, SAFARIZONENORTH_PROTEIN, SHOW - db SAFARI_ZONE_NORTH, SAFARIZONENORTH_TM_SKULL_BASH, SHOW -SafariZoneWestHS: - db SAFARI_ZONE_WEST, SAFARIZONEWEST_MAX_POTION, SHOW - db SAFARI_ZONE_WEST, SAFARIZONEWEST_TM_DOUBLE_TEAM, SHOW - db SAFARI_ZONE_WEST, SAFARIZONEWEST_MAX_REVIVE, SHOW - db SAFARI_ZONE_WEST, SAFARIZONEWEST_GOLD_TEETH, SHOW -SafariZoneCenterHS: - db SAFARI_ZONE_CENTER, SAFARIZONECENTER_NUGGET, SHOW -CeruleanCave2FHS: - db CERULEAN_CAVE_2F, CERULEANCAVE2F_RARE_CANDY, SHOW - db CERULEAN_CAVE_2F, CERULEANCAVE2F_ULTRA_BALL, SHOW - db CERULEAN_CAVE_2F, CERULEANCAVE2F_MAX_REVIVE, SHOW - db CERULEAN_CAVE_2F, CERULEANCAVE2F_FULL_RESTORE, SHOW -CeruleanCaveB1FHS: - db CERULEAN_CAVE_B1F, CERULEANCAVEB1F_MEWTWO, SHOW - db CERULEAN_CAVE_B1F, CERULEANCAVEB1F_ULTRA_BALL1, SHOW - db CERULEAN_CAVE_B1F, CERULEANCAVEB1F_ULTRA_BALL2, SHOW - db CERULEAN_CAVE_B1F, CERULEANCAVEB1F_MAX_REVIVE, SHOW - db CERULEAN_CAVE_B1F, CERULEANCAVEB1F_MAX_ELIXER, SHOW -VictoryRoad1FHS: - db VICTORY_ROAD_1F, VICTORYROAD1F_TM_SKY_ATTACK, SHOW - db VICTORY_ROAD_1F, VICTORYROAD1F_RARE_CANDY, SHOW -ChampionsRoomHS: - db CHAMPIONS_ROOM, CHAMPIONSROOM_OAK, HIDE -SeafoamIslands1FHS: - db SEAFOAM_ISLANDS_1F, SEAFOAMISLANDS1F_BOULDER1, SHOW - db SEAFOAM_ISLANDS_1F, SEAFOAMISLANDS1F_BOULDER2, SHOW -SeafoamIslandsB1FHS: - db SEAFOAM_ISLANDS_B1F, SEAFOAMISLANDSB1F_BOULDER1, HIDE - db SEAFOAM_ISLANDS_B1F, SEAFOAMISLANDSB1F_BOULDER2, HIDE -SeafoamIslandsB2FHS: - db SEAFOAM_ISLANDS_B2F, SEAFOAMISLANDSB2F_BOULDER1, HIDE - db SEAFOAM_ISLANDS_B2F, SEAFOAMISLANDSB2F_BOULDER2, HIDE -SeafoamIslandsB3FHS: - db SEAFOAM_ISLANDS_B3F, SEAFOAMISLANDSB3F_BOULDER2, SHOW - db SEAFOAM_ISLANDS_B3F, SEAFOAMISLANDSB3F_BOULDER3, SHOW - db SEAFOAM_ISLANDS_B3F, SEAFOAMISLANDSB3F_BOULDER5, HIDE - db SEAFOAM_ISLANDS_B3F, SEAFOAMISLANDSB3F_BOULDER6, HIDE -SeafoamIslandsB4FHS: - db SEAFOAM_ISLANDS_B4F, SEAFOAMISLANDSB4F_BOULDER1, HIDE - db SEAFOAM_ISLANDS_B4F, SEAFOAMISLANDSB4F_BOULDER2, HIDE - db SEAFOAM_ISLANDS_B4F, SEAFOAMISLANDSB4F_ARTICUNO, SHOW -BluesHouseHSCopy: ; unreferenced - db BLUES_HOUSE, BLUESHOUSE_DAISY1, SHOW - db BLUES_HOUSE, BLUESHOUSE_DAISY2, HIDE - db BLUES_HOUSE, BLUESHOUSE_TOWN_MAP, SHOW - assert_table_length NUM_HS_OBJECTS - db -1, 1, SHOW ; end diff --git a/data/maps/objects/SaffronCity.asm b/data/maps/objects/SaffronCity.asm index 6b09c84a3..267154804 100644 --- a/data/maps/objects/SaffronCity.asm +++ b/data/maps/objects/SaffronCity.asm @@ -13,7 +13,7 @@ const_export SAFFRONCITY_PIDGEOT const_export SAFFRONCITY_ROCKER const_export SAFFRONCITY_ROCKET8 - const_export SAFFRONCITY_ROCKET9 ; removed in yellow, but still referenced in data/maps/hide_show_data.asm + const_export SAFFRONCITY_ROCKET9 ; removed in yellow, but still referenced in data/maps/toggleable_objects.asm SaffronCity_Object: db $f ; border block diff --git a/data/maps/objects/SilphCo7F.asm b/data/maps/objects/SilphCo7F.asm index 6f2ca90d1..0dbe2c7fa 100644 --- a/data/maps/objects/SilphCo7F.asm +++ b/data/maps/objects/SilphCo7F.asm @@ -10,7 +10,7 @@ const_export SILPHCO7F_RIVAL const_export SILPHCO7F_CALCIUM const_export SILPHCO7F_TM_SWORDS_DANCE - const_export SILPHCO7F_UNUSED ; referenced in data/maps/hide_show_data.asm, no corresponding object_event + const_export SILPHCO7F_UNUSED ; referenced in data/maps/toggleable_objects.asm, no corresponding object_event SilphCo7F_Object: db $2e ; border block diff --git a/data/maps/toggleable_objects.asm b/data/maps/toggleable_objects.asm new file mode 100644 index 000000000..c628bd88d --- /dev/null +++ b/data/maps/toggleable_objects.asm @@ -0,0 +1,438 @@ +; toggleable objects for each map + +ToggleableObjectMapPointers: +; entries correspond to map ids + table_width 2 +FOR n, NUM_MAPS + IF DEF(TOGGLEMAP{n}_NAME) ; defined by `toggle_consts_for` + dw ToggleData_{TOGGLEMAP{n}_NAME} + ELSE + dw NoToggleData + ENDC +ENDR + assert_table_length NUM_MAPS + dw -1 ; end + +NoToggleData: + db -1, -1, -1 ; end + +DEF toggles_ok = 1 + +MACRO? toggleable_objects_for + DEF toggle_map_id = \1 ; map id + ToggleData_\1: + IF toggles_ok + ASSERT DEF(TOGGLEMAP{toggle_map_id}_ID), \ + "`toggleable_objects_for \1` is not defined" + DEF toggles_ok &= DEF(TOGGLEMAP{toggle_map_id}_ID) + IF toggles_ok + assert_table_length TOGGLEMAP{toggle_map_id}_ID + DEF toggles_ok &= TOGGLEMAP{toggle_map_id}_ID * 3 == @ - ToggleableObjectStates + ENDC + ENDC +ENDM + +MACRO toggle_object_state + db toggle_map_id ; from previous `toggleable_objects_for` + db \1 ; object id + db \2 ; OFF/ON +ENDM + +ToggleableObjectStates: +; entries correspond to TOGGLE_* constants (see constants/toggle_constants.asm) + table_width 3 + + toggleable_objects_for PALLET_TOWN + toggle_object_state PALLETTOWN_OAK, OFF + + toggleable_objects_for VIRIDIAN_CITY + toggle_object_state VIRIDIANCITY_OLD_MAN_SLEEPY, ON + toggle_object_state VIRIDIANCITY_OLD_MAN, OFF + toggle_object_state VIRIDIANCITY_OLD_MAN2, OFF + + toggleable_objects_for PEWTER_CITY + toggle_object_state PEWTERCITY_SUPER_NERD1, ON + toggle_object_state PEWTERCITY_YOUNGSTER, ON + + toggleable_objects_for CERULEAN_CITY + toggle_object_state CERULEANCITY_RIVAL, OFF + toggle_object_state CERULEANCITY_ROCKET, ON + toggle_object_state CERULEANCITY_GUARD1, OFF + toggle_object_state CERULEANCITY_SUPER_NERD3, ON + toggle_object_state CERULEANCITY_GUARD2, ON + + toggleable_objects_for SAFFRON_CITY + toggle_object_state SAFFRONCITY_ROCKET1, ON + toggle_object_state SAFFRONCITY_ROCKET2, ON + toggle_object_state SAFFRONCITY_ROCKET3, ON + toggle_object_state SAFFRONCITY_ROCKET4, ON + toggle_object_state SAFFRONCITY_ROCKET5, ON + toggle_object_state SAFFRONCITY_ROCKET6, ON + toggle_object_state SAFFRONCITY_ROCKET7, ON + toggle_object_state SAFFRONCITY_SCIENTIST, OFF + toggle_object_state SAFFRONCITY_SILPH_WORKER_M, OFF + toggle_object_state SAFFRONCITY_SILPH_WORKER_F, OFF + toggle_object_state SAFFRONCITY_GENTLEMAN, OFF + toggle_object_state SAFFRONCITY_PIDGEOT, OFF + toggle_object_state SAFFRONCITY_ROCKER, OFF + toggle_object_state SAFFRONCITY_ROCKET8, ON + toggle_object_state SAFFRONCITY_ROCKET9, OFF ; removed in yellow + + toggleable_objects_for ROUTE_2 + toggle_object_state ROUTE2_MOON_STONE, ON + toggle_object_state ROUTE2_HP_UP, ON + + toggleable_objects_for ROUTE_4 + toggle_object_state ROUTE4_TM_WHIRLWIND, ON + + toggleable_objects_for ROUTE_9 + toggle_object_state ROUTE9_TM_TELEPORT, ON + + toggleable_objects_for ROUTE_12 + toggle_object_state ROUTE12_SNORLAX, ON + toggle_object_state ROUTE12_TM_PAY_DAY, ON + toggle_object_state ROUTE12_IRON, ON + + toggleable_objects_for ROUTE_15 + toggle_object_state ROUTE15_TM_RAGE, ON + + toggleable_objects_for ROUTE_16 + toggle_object_state ROUTE16_SNORLAX, ON + + toggleable_objects_for ROUTE_22 + toggle_object_state ROUTE22_RIVAL1, OFF + toggle_object_state ROUTE22_RIVAL2, OFF + + toggleable_objects_for ROUTE_24 + toggle_object_state ROUTE24_COOLTRAINER_M1, ON + toggle_object_state ROUTE24_TM_THUNDER_WAVE, ON + + toggleable_objects_for ROUTE_25 + toggle_object_state ROUTE25_TM_SEISMIC_TOSS, ON + + toggleable_objects_for BLUES_HOUSE + toggle_object_state BLUESHOUSE_DAISY1, ON + toggle_object_state BLUESHOUSE_DAISY2, OFF + toggle_object_state BLUESHOUSE_TOWN_MAP, ON + + toggleable_objects_for OAKS_LAB + toggle_object_state OAKSLAB_RIVAL, ON + toggle_object_state OAKSLAB_EEVEE_POKE_BALL, ON + toggle_object_state OAKSLAB_OAK1, OFF + toggle_object_state OAKSLAB_POKEDEX1, ON + toggle_object_state OAKSLAB_POKEDEX2, ON + toggle_object_state OAKSLAB_OAK2, OFF + + toggleable_objects_for VIRIDIAN_GYM + toggle_object_state VIRIDIANGYM_GIOVANNI, ON + toggle_object_state VIRIDIANGYM_REVIVE, ON + + toggleable_objects_for MUSEUM_1F + toggle_object_state MUSEUM1F_OLD_AMBER, ON + + toggleable_objects_for CERULEAN_MELANIES_HOUSE + toggle_object_state CERULEANMELANIESHOUSE_BULBASAUR, ON + + toggleable_objects_for CERULEAN_CAVE_1F + toggle_object_state CERULEANCAVE1F_RARE_CANDY, ON + toggle_object_state CERULEANCAVE1F_MAX_ELIXER, ON + toggle_object_state CERULEANCAVE1F_MAX_REVIVE, ON + toggle_object_state CERULEANCAVE1F_ULTRA_BALL, ON + + toggleable_objects_for POKEMON_TOWER_2F + toggle_object_state POKEMONTOWER2F_RIVAL, ON + + toggleable_objects_for POKEMON_TOWER_3F + toggle_object_state POKEMONTOWER3F_ESCAPE_ROPE, ON + + toggleable_objects_for POKEMON_TOWER_4F + toggle_object_state POKEMONTOWER4F_ELIXER, ON + toggle_object_state POKEMONTOWER4F_AWAKENING, ON + toggle_object_state POKEMONTOWER4F_HP_UP, ON + + toggleable_objects_for POKEMON_TOWER_5F + toggle_object_state POKEMONTOWER5F_NUGGET, ON + + toggleable_objects_for POKEMON_TOWER_6F + toggle_object_state POKEMONTOWER6F_RARE_CANDY, ON + toggle_object_state POKEMONTOWER6F_X_ACCURACY, ON + + toggleable_objects_for POKEMON_TOWER_7F + toggle_object_state POKEMONTOWER7F_JESSIE, OFF + toggle_object_state POKEMONTOWER7F_JAMES, OFF + toggle_object_state POKEMONTOWER7F_MR_FUJI, ON + + toggleable_objects_for MR_FUJIS_HOUSE + toggle_object_state MRFUJISHOUSE_MR_FUJI, OFF + + toggleable_objects_for CELADON_MANSION_ROOF_HOUSE + toggle_object_state CELADONMANSION_ROOF_HOUSE_EEVEE_POKEBALL, ON + + toggleable_objects_for GAME_CORNER + toggle_object_state GAMECORNER_ROCKET, ON + + toggleable_objects_for WARDENS_HOUSE + toggle_object_state WARDENSHOUSE_RARE_CANDY, ON + + toggleable_objects_for POKEMON_MANSION_1F + toggle_object_state POKEMONMANSION1F_ESCAPE_ROPE, ON + toggle_object_state POKEMONMANSION1F_CARBOS, ON + + toggleable_objects_for FIGHTING_DOJO + toggle_object_state FIGHTINGDOJO_HITMONLEE_POKE_BALL, ON + toggle_object_state FIGHTINGDOJO_HITMONCHAN_POKE_BALL, ON + + toggleable_objects_for SILPH_CO_1F + toggle_object_state SILPHCO1F_LINK_RECEPTIONIST, OFF + + toggleable_objects_for POWER_PLANT + toggle_object_state POWERPLANT_VOLTORB1, ON + toggle_object_state POWERPLANT_VOLTORB2, ON + toggle_object_state POWERPLANT_VOLTORB3, ON + toggle_object_state POWERPLANT_ELECTRODE1, ON + toggle_object_state POWERPLANT_VOLTORB4, ON + toggle_object_state POWERPLANT_VOLTORB5, ON + toggle_object_state POWERPLANT_ELECTRODE2, ON + toggle_object_state POWERPLANT_VOLTORB6, ON + toggle_object_state POWERPLANT_ZAPDOS, ON + toggle_object_state POWERPLANT_CARBOS, ON + toggle_object_state POWERPLANT_HP_UP, ON + toggle_object_state POWERPLANT_RARE_CANDY, ON + toggle_object_state POWERPLANT_TM_THUNDER, ON + toggle_object_state POWERPLANT_TM_REFLECT, ON + + toggleable_objects_for VICTORY_ROAD_2F + toggle_object_state VICTORYROAD2F_MOLTRES, ON + toggle_object_state VICTORYROAD2F_TM_SUBMISSION, ON + toggle_object_state VICTORYROAD2F_FULL_HEAL, ON + toggle_object_state VICTORYROAD2F_TM_MEGA_KICK, ON + toggle_object_state VICTORYROAD2F_GUARD_SPEC, ON + toggle_object_state VICTORYROAD2F_BOULDER3, ON + + toggleable_objects_for BILLS_HOUSE + toggle_object_state BILLSHOUSE_BILL_POKEMON, ON + toggle_object_state BILLSHOUSE_BILL1, OFF + toggle_object_state BILLSHOUSE_BILL2, OFF + + toggleable_objects_for VIRIDIAN_FOREST + toggle_object_state VIRIDIANFOREST_POTION1, ON + toggle_object_state VIRIDIANFOREST_POTION2, ON + toggle_object_state VIRIDIANFOREST_POKE_BALL, ON + + toggleable_objects_for MT_MOON_1F + toggle_object_state MTMOON1F_POTION1, ON + toggle_object_state MTMOON1F_MOON_STONE, ON + toggle_object_state MTMOON1F_RARE_CANDY, ON + toggle_object_state MTMOON1F_ESCAPE_ROPE, ON + toggle_object_state MTMOON1F_POTION2, ON + toggle_object_state MTMOON1F_TM_WATER_GUN, ON + + toggleable_objects_for MT_MOON_B2F + toggle_object_state MTMOONB2F_JESSIE, OFF + toggle_object_state MTMOONB2F_JAMES, OFF + toggle_object_state MTMOONB2F_DOME_FOSSIL, ON + toggle_object_state MTMOONB2F_HELIX_FOSSIL, ON + toggle_object_state MTMOONB2F_HP_UP, ON + toggle_object_state MTMOONB2F_TM_MEGA_PUNCH, ON + + toggleable_objects_for SS_ANNE_2F + toggle_object_state SSANNE2F_RIVAL, OFF + + toggleable_objects_for SS_ANNE_1F_ROOMS + toggle_object_state SSANNE1FROOMS_TM_BODY_SLAM, ON + + toggleable_objects_for SS_ANNE_2F_ROOMS + toggle_object_state SSANNE2FROOMS_MAX_ETHER, ON + toggle_object_state SSANNE2FROOMS_RARE_CANDY, ON + + toggleable_objects_for SS_ANNE_B1F_ROOMS + toggle_object_state SSANNEB1FROOMS_ETHER, ON + toggle_object_state SSANNEB1FROOMS_TM_REST, ON + toggle_object_state SSANNEB1FROOMS_MAX_POTION, ON + + toggleable_objects_for VICTORY_ROAD_3F + toggle_object_state VICTORYROAD3F_MAX_REVIVE, ON + toggle_object_state VICTORYROAD3F_TM_EXPLOSION, ON + toggle_object_state VICTORYROAD3F_BOULDER4, ON + + toggleable_objects_for ROCKET_HIDEOUT_B1F + toggle_object_state ROCKETHIDEOUTB1F_ESCAPE_ROPE, ON + toggle_object_state ROCKETHIDEOUTB1F_HYPER_POTION, ON + + toggleable_objects_for ROCKET_HIDEOUT_B2F + toggle_object_state ROCKETHIDEOUTB2F_MOON_STONE, ON + toggle_object_state ROCKETHIDEOUTB2F_NUGGET, ON + toggle_object_state ROCKETHIDEOUTB2F_TM_HORN_DRILL, ON + toggle_object_state ROCKETHIDEOUTB2F_SUPER_POTION, ON + + toggleable_objects_for ROCKET_HIDEOUT_B3F + toggle_object_state ROCKETHIDEOUTB3F_TM_DOUBLE_EDGE, ON + toggle_object_state ROCKETHIDEOUTB3F_RARE_CANDY, ON + + toggleable_objects_for ROCKET_HIDEOUT_B4F + toggle_object_state ROCKETHIDEOUTB4F_GIOVANNI, ON + toggle_object_state ROCKETHIDEOUTB4F_JAMES, OFF + toggle_object_state ROCKETHIDEOUTB4F_JESSIE, OFF + toggle_object_state ROCKETHIDEOUTB4F_HP_UP, ON + toggle_object_state ROCKETHIDEOUTB4F_TM_RAZOR_WIND, ON + toggle_object_state ROCKETHIDEOUTB4F_IRON, ON + toggle_object_state ROCKETHIDEOUTB4F_SILPH_SCOPE, OFF + toggle_object_state ROCKETHIDEOUTB4F_LIFT_KEY, OFF + + toggleable_objects_for SILPH_CO_2F + toggle_object_state SILPHCO2F_SILPH_WORKER_F, ON + toggle_object_state SILPHCO2F_SCIENTIST1, ON + toggle_object_state SILPHCO2F_SCIENTIST2, ON + toggle_object_state SILPHCO2F_ROCKET1, ON + toggle_object_state SILPHCO2F_ROCKET2, ON + + toggleable_objects_for SILPH_CO_3F + toggle_object_state SILPHCO3F_ROCKET, ON + toggle_object_state SILPHCO3F_SCIENTIST, ON + toggle_object_state SILPHCO3F_HYPER_POTION, ON + + toggleable_objects_for SILPH_CO_4F + toggle_object_state SILPHCO4F_ROCKET1, ON + toggle_object_state SILPHCO4F_SCIENTIST, ON + toggle_object_state SILPHCO4F_ROCKET2, ON + toggle_object_state SILPHCO4F_FULL_HEAL, ON + toggle_object_state SILPHCO4F_MAX_REVIVE, ON + toggle_object_state SILPHCO4F_ESCAPE_ROPE, ON + + toggleable_objects_for SILPH_CO_5F + toggle_object_state SILPHCO5F_ROCKET1, ON + toggle_object_state SILPHCO5F_SCIENTIST, ON + toggle_object_state SILPHCO5F_ROCKER, ON + toggle_object_state SILPHCO5F_ROCKET2, ON + toggle_object_state SILPHCO5F_TM_TAKE_DOWN, ON + toggle_object_state SILPHCO5F_PROTEIN, ON + toggle_object_state SILPHCO5F_CARD_KEY, ON + + toggleable_objects_for SILPH_CO_6F + toggle_object_state SILPHCO6F_ROCKET1, ON + toggle_object_state SILPHCO6F_SCIENTIST, ON + toggle_object_state SILPHCO6F_ROCKET2, ON + toggle_object_state SILPHCO6F_HP_UP, ON + toggle_object_state SILPHCO6F_X_ACCURACY, ON + + toggleable_objects_for SILPH_CO_7F + toggle_object_state SILPHCO7F_ROCKET1, ON + toggle_object_state SILPHCO7F_SCIENTIST, ON + toggle_object_state SILPHCO7F_ROCKET2, ON + toggle_object_state SILPHCO7F_ROCKET3, ON + toggle_object_state SILPHCO7F_RIVAL, ON + toggle_object_state SILPHCO7F_CALCIUM, ON + toggle_object_state SILPHCO7F_TM_SWORDS_DANCE, ON + toggle_object_state SILPHCO7F_UNUSED, ON + + toggleable_objects_for SILPH_CO_8F + toggle_object_state SILPHCO8F_ROCKET1, ON + toggle_object_state SILPHCO8F_SCIENTIST, ON + toggle_object_state SILPHCO8F_ROCKET2, ON + + toggleable_objects_for SILPH_CO_9F + toggle_object_state SILPHCO9F_ROCKET1, ON + toggle_object_state SILPHCO9F_SCIENTIST, ON + toggle_object_state SILPHCO9F_ROCKET2, ON + + toggleable_objects_for SILPH_CO_10F + toggle_object_state SILPHCO10F_ROCKET, ON + toggle_object_state SILPHCO10F_SCIENTIST, ON + toggle_object_state SILPHCO10F_SILPH_WORKER_F, ON + toggle_object_state SILPHCO10F_TM_EARTHQUAKE, ON + toggle_object_state SILPHCO10F_RARE_CANDY, ON + toggle_object_state SILPHCO10F_CARBOS, ON + + toggleable_objects_for SILPH_CO_11F + toggle_object_state SILPHCO11F_GIOVANNI, ON + toggle_object_state SILPHCO11F_JAMES, ON + toggle_object_state SILPHCO11F_ROCKET, ON + toggle_object_state SILPHCO11F_JESSIE, ON + + toggleable_objects_for UNUSED_MAP_F4 + toggle_object_state $02, ON ; unused + + toggleable_objects_for POKEMON_MANSION_2F + toggle_object_state POKEMONMANSION2F_CALCIUM, ON + + toggleable_objects_for POKEMON_MANSION_3F + toggle_object_state POKEMONMANSION3F_MAX_POTION, ON + toggle_object_state POKEMONMANSION3F_IRON, ON + + toggleable_objects_for POKEMON_MANSION_B1F + toggle_object_state POKEMONMANSIONB1F_RARE_CANDY, ON + toggle_object_state POKEMONMANSIONB1F_FULL_RESTORE, ON + toggle_object_state POKEMONMANSIONB1F_TM_BLIZZARD, ON + toggle_object_state POKEMONMANSIONB1F_TM_SOLARBEAM, ON + toggle_object_state POKEMONMANSIONB1F_SECRET_KEY, ON + + toggleable_objects_for SAFARI_ZONE_EAST + toggle_object_state SAFARIZONEEAST_FULL_RESTORE, ON + toggle_object_state SAFARIZONEEAST_MAX_RESTORE, ON + toggle_object_state SAFARIZONEEAST_CARBOS, ON + toggle_object_state SAFARIZONEEAST_TM_EGG_BOMB, ON + + toggleable_objects_for SAFARI_ZONE_NORTH + toggle_object_state SAFARIZONENORTH_PROTEIN, ON + toggle_object_state SAFARIZONENORTH_TM_SKULL_BASH, ON + + toggleable_objects_for SAFARI_ZONE_WEST + toggle_object_state SAFARIZONEWEST_MAX_POTION, ON + toggle_object_state SAFARIZONEWEST_TM_DOUBLE_TEAM, ON + toggle_object_state SAFARIZONEWEST_MAX_REVIVE, ON + toggle_object_state SAFARIZONEWEST_GOLD_TEETH, ON + + toggleable_objects_for SAFARI_ZONE_CENTER + toggle_object_state SAFARIZONECENTER_NUGGET, ON + + toggleable_objects_for CERULEAN_CAVE_2F + toggle_object_state CERULEANCAVE2F_RARE_CANDY, ON + toggle_object_state CERULEANCAVE2F_ULTRA_BALL, ON + toggle_object_state CERULEANCAVE2F_MAX_REVIVE, ON + toggle_object_state CERULEANCAVE2F_FULL_RESTORE, ON + + toggleable_objects_for CERULEAN_CAVE_B1F + toggle_object_state CERULEANCAVEB1F_MEWTWO, ON + toggle_object_state CERULEANCAVEB1F_ULTRA_BALL1, ON + toggle_object_state CERULEANCAVEB1F_ULTRA_BALL2, ON + toggle_object_state CERULEANCAVEB1F_MAX_REVIVE, ON + toggle_object_state CERULEANCAVEB1F_MAX_ELIXER, ON + + toggleable_objects_for VICTORY_ROAD_1F + toggle_object_state VICTORYROAD1F_TM_SKY_ATTACK, ON + toggle_object_state VICTORYROAD1F_RARE_CANDY, ON + + toggleable_objects_for CHAMPIONS_ROOM + toggle_object_state CHAMPIONSROOM_OAK, OFF + + toggleable_objects_for SEAFOAM_ISLANDS_1F + toggle_object_state SEAFOAMISLANDS1F_BOULDER1, ON + toggle_object_state SEAFOAMISLANDS1F_BOULDER2, ON + + toggleable_objects_for SEAFOAM_ISLANDS_B1F + toggle_object_state SEAFOAMISLANDSB1F_BOULDER1, OFF + toggle_object_state SEAFOAMISLANDSB1F_BOULDER2, OFF + + toggleable_objects_for SEAFOAM_ISLANDS_B2F + toggle_object_state SEAFOAMISLANDSB2F_BOULDER1, OFF + toggle_object_state SEAFOAMISLANDSB2F_BOULDER2, OFF + + toggleable_objects_for SEAFOAM_ISLANDS_B3F + toggle_object_state SEAFOAMISLANDSB3F_BOULDER2, ON + toggle_object_state SEAFOAMISLANDSB3F_BOULDER3, ON + toggle_object_state SEAFOAMISLANDSB3F_BOULDER5, OFF + toggle_object_state SEAFOAMISLANDSB3F_BOULDER6, OFF + + toggleable_objects_for SEAFOAM_ISLANDS_B4F + toggle_object_state SEAFOAMISLANDSB4F_BOULDER1, OFF + toggle_object_state SEAFOAMISLANDSB4F_BOULDER2, OFF + toggle_object_state SEAFOAMISLANDSB4F_ARTICUNO, ON + +; unreferenced + db BLUES_HOUSE, BLUESHOUSE_DAISY1, ON + db BLUES_HOUSE, BLUESHOUSE_DAISY2, OFF + db BLUES_HOUSE, BLUESHOUSE_TOWN_MAP, ON + + assert_table_length NUM_TOGGLEABLE_OBJECTS + + db -1, 1, ON ; end diff --git a/data/maps/town_map_entries.asm b/data/maps/town_map_entries.asm index 0f6976ae0..d67f6f975 100644 --- a/data/maps/town_map_entries.asm +++ b/data/maps/town_map_entries.asm @@ -1,4 +1,4 @@ -MACRO external_map +MACRO outdoor_map dn \2, \1 dw \3 ENDM @@ -7,114 +7,116 @@ ENDM ExternalMapEntries: table_width 3 ; x, y, name - external_map 2, 11, PalletTownName - external_map 2, 8, ViridianCityName - external_map 2, 3, PewterCityName - external_map 10, 2, CeruleanCityName - external_map 14, 5, LavenderTownName - external_map 10, 9, VermilionCityName - external_map 7, 5, CeladonCityName - external_map 8, 13, FuchsiaCityName - external_map 2, 15, CinnabarIslandName - external_map 0, 2, IndigoPlateauName - external_map 10, 5, SaffronCityName - external_map 0, 0, PalletTownName ; unused - external_map 2, 10, Route1Name - external_map 2, 6, Route2Name - external_map 4, 3, Route3Name - external_map 8, 2, Route4Name - external_map 10, 3, Route5Name - external_map 10, 8, Route6Name - external_map 8, 5, Route7Name - external_map 13, 5, Route8Name - external_map 13, 2, Route9Name - external_map 14, 4, Route10Name - external_map 12, 9, Route11Name - external_map 14, 9, Route12Name - external_map 13, 11, Route13Name - external_map 11, 12, Route14Name - external_map 10, 13, Route15Name - external_map 5, 5, Route16Name - external_map 4, 8, Route17Name - external_map 6, 13, Route18Name - external_map 6, 15, Route19Name - external_map 4, 15, Route20Name - external_map 2, 13, Route21Name - external_map 0, 8, Route22Name - external_map 0, 6, Route23Name - external_map 10, 1, Route24Name - external_map 11, 0, Route25Name + outdoor_map 2, 11, PalletTownName + outdoor_map 2, 8, ViridianCityName + outdoor_map 2, 3, PewterCityName + outdoor_map 10, 2, CeruleanCityName + outdoor_map 14, 5, LavenderTownName + outdoor_map 10, 9, VermilionCityName + outdoor_map 7, 5, CeladonCityName + outdoor_map 8, 13, FuchsiaCityName + outdoor_map 2, 15, CinnabarIslandName + outdoor_map 0, 2, IndigoPlateauName + outdoor_map 10, 5, SaffronCityName + outdoor_map 0, 0, PalletTownName ; unused + outdoor_map 2, 10, Route1Name + outdoor_map 2, 6, Route2Name + outdoor_map 4, 3, Route3Name + outdoor_map 8, 2, Route4Name + outdoor_map 10, 3, Route5Name + outdoor_map 10, 8, Route6Name + outdoor_map 8, 5, Route7Name + outdoor_map 13, 5, Route8Name + outdoor_map 13, 2, Route9Name + outdoor_map 14, 4, Route10Name + outdoor_map 12, 9, Route11Name + outdoor_map 14, 9, Route12Name + outdoor_map 13, 11, Route13Name + outdoor_map 11, 12, Route14Name + outdoor_map 10, 13, Route15Name + outdoor_map 5, 5, Route16Name + outdoor_map 4, 8, Route17Name + outdoor_map 6, 13, Route18Name + outdoor_map 6, 15, Route19Name + outdoor_map 4, 15, Route20Name + outdoor_map 2, 13, Route21Name + outdoor_map 0, 8, Route22Name + outdoor_map 0, 6, Route23Name + outdoor_map 10, 1, Route24Name + outdoor_map 11, 0, Route25Name assert_table_length FIRST_INDOOR_MAP -MACRO internal_map - db \1 + 1 +MACRO indoor_map + db INDOORGROUP_\1 dn \3, \2 dw \4 ENDM ; the appearance of buildings and dungeons in the town map InternalMapEntries: - ; maximum map id subject to this rule, x, y, name - internal_map OAKS_LAB, 2, 11, PalletTownName - internal_map VIRIDIAN_GYM, 2, 8, ViridianCityName - internal_map VIRIDIAN_FOREST_SOUTH_GATE, 2, 6, Route2Name - internal_map VIRIDIAN_FOREST, 2, 4, ViridianForestName - internal_map PEWTER_POKECENTER, 2, 3, PewterCityName - internal_map MT_MOON_B2F, 6, 2, MountMoonName - internal_map CERULEAN_MART, 10, 2, CeruleanCityName - internal_map MT_MOON_POKECENTER, 5, 2, Route4Name - internal_map CERULEAN_TRASHED_HOUSE_COPY, 10, 2, CeruleanCityName - internal_map DAYCARE, 10, 4, Route5Name - internal_map UNDERGROUND_PATH_ROUTE_6_COPY, 10, 6, Route6Name - internal_map UNDERGROUND_PATH_ROUTE_7_COPY, 9, 5, Route7Name - internal_map UNDERGROUND_PATH_ROUTE_8, 11, 5, Route8Name - internal_map ROCK_TUNNEL_1F, 14, 3, RockTunnelName - internal_map POWER_PLANT, 15, 4, PowerPlantName - internal_map ROUTE_11_GATE_2F, 13, 9, Route11Name - internal_map ROUTE_12_GATE_1F, 14, 7, Route12Name - internal_map BILLS_HOUSE, 12, 0, SeaCottageName - internal_map VERMILION_DOCK, 10, 9, VermilionCityName - internal_map SS_ANNE_B1F_ROOMS, 9, 10, SSAnneName - internal_map VICTORY_ROAD_1F, 0, 4, VictoryRoadName - internal_map HALL_OF_FAME, 0, 2, PokemonLeagueName - internal_map UNDERGROUND_PATH_NORTH_SOUTH, 10, 5, UndergroundPathName - internal_map CHAMPIONS_ROOM, 0, 2, PokemonLeagueName - internal_map UNDERGROUND_PATH_WEST_EAST, 10, 5, UndergroundPathName - internal_map CELADON_HOTEL, 7, 5, CeladonCityName - internal_map LAVENDER_POKECENTER, 14, 5, LavenderTownName - internal_map POKEMON_TOWER_7F, 15, 5, PokemonTowerName - internal_map LAVENDER_CUBONE_HOUSE, 14, 5, LavenderTownName - internal_map WARDENS_HOUSE, 8, 13, FuchsiaCityName - internal_map SAFARI_ZONE_GATE, 8, 12, SafariZoneName - internal_map FUCHSIA_MEETING_ROOM, 8, 13, FuchsiaCityName - internal_map SEAFOAM_ISLANDS_B4F, 5, 15, SeafoamIslandsName - internal_map VERMILION_OLD_ROD_HOUSE, 10, 9, VermilionCityName - internal_map FUCHSIA_GOOD_ROD_HOUSE, 8, 13, FuchsiaCityName - internal_map POKEMON_MANSION_1F, 2, 15, PokemonMansionName - internal_map CINNABAR_MART_COPY, 2, 15, CinnabarIslandName - internal_map INDIGO_PLATEAU_LOBBY, 0, 2, IndigoPlateauName - internal_map MR_PSYCHICS_HOUSE, 10, 5, SaffronCityName - internal_map ROUTE_15_GATE_2F, 9, 13, Route15Name - internal_map ROUTE_16_FLY_HOUSE, 4, 5, Route16Name - internal_map ROUTE_12_SUPER_ROD_HOUSE, 14, 10, Route12Name - internal_map ROUTE_18_GATE_2F, 7, 13, Route18Name - internal_map SEAFOAM_ISLANDS_1F, 5, 15, SeafoamIslandsName - internal_map ROUTE_22_GATE, 0, 7, Route22Name - internal_map VICTORY_ROAD_2F, 0, 4, VictoryRoadName - internal_map ROUTE_12_GATE_2F, 14, 7, Route12Name - internal_map VERMILION_TRADE_HOUSE, 10, 9, VermilionCityName - internal_map DIGLETTS_CAVE, 3, 4, DiglettsCaveName - internal_map VICTORY_ROAD_3F, 0, 4, VictoryRoadName - internal_map UNUSED_MAP_CE, 7, 5, RocketHQName - internal_map SILPH_CO_8F, 10, 5, SilphCoName - internal_map POKEMON_MANSION_B1F, 2, 15, PokemonMansionName - internal_map SAFARI_ZONE_NORTH_REST_HOUSE, 8, 12, SafariZoneName - internal_map CERULEAN_CAVE_1F, 9, 1, CeruleanCaveName - internal_map NAME_RATERS_HOUSE, 14, 5, LavenderTownName - internal_map CERULEAN_BADGE_HOUSE, 10, 2, CeruleanCityName - internal_map ROCK_TUNNEL_B1F, 14, 3, RockTunnelName - internal_map SILPH_CO_ELEVATOR, 10, 5, SilphCoName - internal_map AGATHAS_ROOM, 0, 2, PokemonLeagueName - internal_map SUMMER_BEACH_HOUSE, 6, 15, Route19Name + table_width 4 + ; indoor map group, x, y, name + indoor_map PALLET_TOWN, 2, 11, PalletTownName + indoor_map VIRIDIAN_CITY, 2, 8, ViridianCityName + indoor_map ROUTE_2, 2, 6, Route2Name + indoor_map VIRIDIAN_FOREST, 2, 4, ViridianForestName + indoor_map PEWTER_CITY, 2, 3, PewterCityName + indoor_map MT_MOON, 6, 2, MountMoonName + indoor_map CERULEAN_CITY, 10, 2, CeruleanCityName + indoor_map ROUTE_4, 5, 2, Route4Name + indoor_map CERULEAN_CITY_2, 10, 2, CeruleanCityName + indoor_map ROUTE_5, 10, 4, Route5Name + indoor_map ROUTE_6, 10, 6, Route6Name + indoor_map ROUTE_7, 9, 5, Route7Name + indoor_map ROUTE_8, 11, 5, Route8Name + indoor_map ROCK_TUNNEL, 14, 3, RockTunnelName + indoor_map POWER_PLANT, 15, 4, PowerPlantName + indoor_map ROUTE_11, 13, 9, Route11Name + indoor_map ROUTE_12, 14, 7, Route12Name + indoor_map SEA_COTTAGE, 12, 0, SeaCottageName + indoor_map VERMILION_CITY, 10, 9, VermilionCityName + indoor_map SS_ANNE, 9, 10, SSAnneName + indoor_map VICTORY_ROAD, 0, 4, VictoryRoadName + indoor_map POKEMON_LEAGUE, 0, 2, PokemonLeagueName + indoor_map UNDERGROUND_PATH, 10, 5, UndergroundPathName + indoor_map POKEMON_LEAGUE_2, 0, 2, PokemonLeagueName + indoor_map UNDERGROUND_PATH_2, 10, 5, UndergroundPathName + indoor_map CELADON_CITY, 7, 5, CeladonCityName + indoor_map LAVENDER_TOWN, 14, 5, LavenderTownName + indoor_map POKEMON_TOWER, 15, 5, PokemonTowerName + indoor_map LAVENDER_TOWN_2, 14, 5, LavenderTownName + indoor_map FUCHSIA_CITY, 8, 13, FuchsiaCityName + indoor_map SAFARI_ZONE, 8, 12, SafariZoneName + indoor_map FUCHSIA_CITY_2, 8, 13, FuchsiaCityName + indoor_map SEAFOAM_ISLANDS, 5, 15, SeafoamIslandsName + indoor_map VERMILION_CITY_2, 10, 9, VermilionCityName + indoor_map FUCHSIA_CITY_3, 8, 13, FuchsiaCityName + indoor_map POKEMON_MANSION, 2, 15, PokemonMansionName + indoor_map CINNABAR_ISLAND, 2, 15, CinnabarIslandName + indoor_map INDIGO_PLATEAU, 0, 2, IndigoPlateauName + indoor_map SAFFRON_CITY, 10, 5, SaffronCityName + indoor_map ROUTE_15, 9, 13, Route15Name + indoor_map ROUTE_16, 4, 5, Route16Name + indoor_map ROUTE_12_2, 14, 10, Route12Name + indoor_map ROUTE_18, 7, 13, Route18Name + indoor_map SEAFOAM_ISLANDS_2, 5, 15, SeafoamIslandsName + indoor_map ROUTE_22, 0, 7, Route22Name + indoor_map VICTORY_ROAD_2, 0, 4, VictoryRoadName + indoor_map ROUTE_12_3, 14, 7, Route12Name + indoor_map VERMILION_CITY_3, 10, 9, VermilionCityName + indoor_map DIGLETTS_CAVE, 3, 4, DiglettsCaveName + indoor_map VICTORY_ROAD_3, 0, 4, VictoryRoadName + indoor_map ROCKET_HQ, 7, 5, RocketHQName + indoor_map SILPH_CO, 10, 5, SilphCoName + indoor_map POKEMON_MANSION_2, 2, 15, PokemonMansionName + indoor_map SAFARI_ZONE_2, 8, 12, SafariZoneName + indoor_map CERULEAN_CAVE, 9, 1, CeruleanCaveName + indoor_map LAVENDER_TOWN_3, 14, 5, LavenderTownName + indoor_map CERULEAN_CITY_3, 10, 2, CeruleanCityName + indoor_map ROCK_TUNNEL_2, 14, 3, RockTunnelName + indoor_map SILPH_CO_2, 10, 5, SilphCoName + indoor_map POKEMON_LEAGUE_3, 0, 2, PokemonLeagueName + indoor_map ROUTE_19, 6, 15, Route19Name + assert_table_length NUM_INDOOR_MAP_GROUPS db -1 ; end diff --git a/data/moves/grammar.asm b/data/moves/grammar.asm index e44b1abc6..884b4f2fe 100644 --- a/data/moves/grammar.asm +++ b/data/moves/grammar.asm @@ -1,16 +1,20 @@ -ExclamationPointMoveSets: -; set 0 +; Used by GetMoveGrammar (see engine/battle/core.asm) +; Each move is given an identifier for what usedmovetext to use (0-4). +; Made redundant in English localization, where all are just "[mon]used [move]!" + +MoveGrammar: +; 0: originally "[mon]は[move]を つかった!" ("[mon]used [move]!") db SWORDS_DANCE db GROWTH db 0 ; end set -; set 1 +; 1: originally "[mon]は[move]を した!" ("[mon]did [move]!") db RECOVER db SELFDESTRUCT db AMNESIA db 0 ; end set -; set 2 +; 2: originally "[mon]は[move]した!" ("[mon]did [move]!") db MEDITATE db AGILITY db TELEPORT @@ -20,7 +24,7 @@ ExclamationPointMoveSets: db BARRAGE db 0 ; end set -; set 3 +; 3: originally "[mon]の[move] こうげき!" ("[mon]'s[move] attack!") db POUND db SCRATCH db VICEGRIP @@ -69,4 +73,6 @@ ExclamationPointMoveSets: db SUBSTITUTE db 0 ; end set +; 4: originally "[mon]の[move]!" ("[mon]'s[move]!") +; Any move not listed above uses this grammar. db -1 ; end diff --git a/data/moves/names.asm b/data/moves/names.asm index 025172d5b..caecc06cf 100644 --- a/data/moves/names.asm +++ b/data/moves/names.asm @@ -1,5 +1,6 @@ MoveNames:: - list_start + ; in-battle "used !" text can only fit 12 (MOVE_NAME_LENGTH - 2) characters + list_start MOVE_NAME_LENGTH - 2 li "POUND" li "KARATE CHOP" li "DOUBLESLAP" diff --git a/data/player/names.asm b/data/player/names.asm new file mode 100644 index 000000000..67f2df36e --- /dev/null +++ b/data/player/names.asm @@ -0,0 +1,15 @@ +; see constants/player_constants.asm + +DefaultNamesPlayer: + db "NEW NAME" +FOR n, 1, NUM_PLAYER_NAMES + 1 + next #PLAYERNAME{d:n} +ENDR + db "@" + +DefaultNamesRival: + db "NEW NAME" +FOR n, 1, NUM_PLAYER_NAMES + 1 + next #RIVALNAME{d:n} +ENDR + db "@" diff --git a/data/player/names_list.asm b/data/player/names_list.asm new file mode 100644 index 000000000..44f3c7f15 --- /dev/null +++ b/data/player/names_list.asm @@ -0,0 +1,17 @@ +; see constants/player_constants.asm + +DefaultNamesPlayerList: + db "NEW NAME@" + list_start PLAYER_NAME_LENGTH - 1 +FOR n, 1, NUM_PLAYER_NAMES + 1 + li #PLAYERNAME{d:n} +ENDR + assert_list_length NUM_PLAYER_NAMES + +DefaultNamesRivalList: + db "NEW NAME@" + list_start PLAYER_NAME_LENGTH - 1 +FOR n, 1, NUM_PLAYER_NAMES + 1 + li #RIVALNAME{d:n} +ENDR + assert_list_length NUM_PLAYER_NAMES diff --git a/data/player_names.asm b/data/player_names.asm deleted file mode 100644 index cf461a7a2..000000000 --- a/data/player_names.asm +++ /dev/null @@ -1,13 +0,0 @@ -DefaultNamesPlayer: - db "NEW NAME" - next "YELLOW" - next "ASH" - next "JACK" - db "@" - -DefaultNamesRival: - db "NEW NAME" - next "BLUE" - next "GARY" - next "JOHN" - db "@" diff --git a/data/player_names_list.asm b/data/player_names_list.asm deleted file mode 100644 index a5f389190..000000000 --- a/data/player_names_list.asm +++ /dev/null @@ -1,11 +0,0 @@ -DefaultNamesPlayerList: - db "NEW NAME@" - db "YELLOW@" - db "ASH@" - db "JACK@" - -DefaultNamesRivalList: - db "NEW NAME@" - db "BLUE@" - db "GARY@" - db "JOHN@" diff --git a/data/predef_pointers.asm b/data/predef_pointers.asm index e6968c464..b3bb1643b 100644 --- a/data/predef_pointers.asm +++ b/data/predef_pointers.asm @@ -32,14 +32,14 @@ PredefPointers:: add_predef ApplyOutOfBattlePoisonDamage add_predef AnyPartyAlive add_predef ShowObject - add_predef ShowObject2 + add_predef ShowObject2 ; identical to ShowObject add_predef ReplaceTileBlock add_predef InitPlayerData2 add_predef LoadTilesetHeader add_predef LearnMoveFromLevelUp add_predef LearnMove add_predef GetQuantityOfItemInBag - add_predef CheckForHiddenObjectOrBookshelfOrCardKeyDoor, $03 ; home bank + add_predef CheckForHiddenEventOrBookshelfOrCardKeyDoor, $03 ; home bank add_predef GiveItem, $03 ; home bank add_predef ChangeBGPalColor0_4Frames add_predef FindPathToPlayer @@ -75,7 +75,7 @@ PredefPointers:: add_predef WriteMonMoves add_predef SaveMenu add_predef LoadSGB - add_predef MarkTownVisitedAndLoadMissableObjects + add_predef MarkTownVisitedAndLoadToggleableObjects add_predef SetPartyMonTypes add_predef CanLearnTM add_predef TMToMove diff --git a/data/text/text_2.asm b/data/text/text_2.asm index 31f0edb8b..fbf0b2362 100644 --- a/data/text/text_2.asm +++ b/data/text/text_2.asm @@ -1124,21 +1124,21 @@ _MoveIsDisabledText:: cont "disabled!" prompt -_MonName1Text:: +_ActorNameText:: text "@" text_end -_Used1Text:: +_UsedMove1Text:: text_start line "used @" text_end -_Used2Text:: +_UsedMove2Text:: text_start line "used @" text_end -_InsteadText:: +_UsedInsteadText:: text "instead," cont "@" text_end @@ -1147,23 +1147,23 @@ _MoveNameText:: text_ram wStringBuffer text "@" -_ExclamationPoint1Text:: +_EndUsedMove1Text:: text "!" done -_ExclamationPoint2Text:: +_EndUsedMove2Text:: text "!" done -_ExclamationPoint3Text:: +_EndUsedMove3Text:: text "!" done -_ExclamationPoint4Text:: +_EndUsedMove4Text:: text "!" done -_ExclamationPoint5Text:: +_EndUsedMove5Text:: text "!" done diff --git a/data/text/text_3.asm b/data/text/text_3.asm index bb8302b44..a4a3c8837 100644 --- a/data/text/text_3.asm +++ b/data/text/text_3.asm @@ -450,7 +450,9 @@ _OakSpeechText2A:: text_end _OakSpeechText2B:: - text $51,"For some people," + text_start + + para "For some people," line "#MON are" cont "pets. Others use" cont "them for fights." diff --git a/data/trainers/move_choices.asm b/data/trainers/move_choices.asm index eef0579dd..118e73cd4 100644 --- a/data/trainers/move_choices.asm +++ b/data/trainers/move_choices.asm @@ -1,14 +1,15 @@ +DEF __move_choices__ = 0 + MACRO move_choices IF _NARG db \# ; all args ENDC db 0 ; end - DEF list_index += 1 + DEF __move_choices__ += 1 ENDM ; move choice modification methods that are applied for each trainer class TrainerClassMoveChoiceModifications: - list_start move_choices ; YOUNGSTER move_choices 1 ; BUG CATCHER move_choices 1 ; LASS @@ -56,4 +57,5 @@ TrainerClassMoveChoiceModifications: move_choices 1 ; CHANNELER move_choices 1 ; AGATHA move_choices 1, 3 ; LANCE - assert_list_length NUM_TRAINERS + assert __move_choices__ == NUM_TRAINERS, \ + "TrainerClassMoveChoiceModifications: expected {d:NUM_TRAINERS} entries, got {d:__move_choices__}" diff --git a/data/trainers/names.asm b/data/trainers/names.asm index d7c5677c0..1b6f23823 100644 --- a/data/trainers/names.asm +++ b/data/trainers/names.asm @@ -1,5 +1,5 @@ TrainerNames:: - list_start + list_start TRAINER_NAME_LENGTH - 1 li "YOUNGSTER" li "BUG CATCHER" li "LASS" diff --git a/data/wild/probabilities.asm b/data/wild/probabilities.asm index 2c56c6b9c..6896d9370 100644 --- a/data/wild/probabilities.asm +++ b/data/wild/probabilities.asm @@ -1,15 +1,28 @@ +DEF wild_chance_slot = 0 +DEF wild_chance_total = 0 + +MACRO wild_chance + DEF wild_chance_total += \1 + db wild_chance_total - 1 + db wild_chance_slot * 2 + DEF wild_chance_slot += 1 +ENDM + WildMonEncounterSlotChances: -; There are 10 slots for wild pokemon, and this is the table that defines how common each of -; those 10 slots is. A random number is generated and then the first byte of each pair in this -; table is compared against that random number. If the random number is less than or equal -; to the first byte, then that slot is chosen. The second byte is double the slot number. - db 50, $00 ; 51/256 = 19.9% chance of slot 0 - db 101, $02 ; 51/256 = 19.9% chance of slot 1 - db 140, $04 ; 39/256 = 15.2% chance of slot 2 - db 165, $06 ; 25/256 = 9.8% chance of slot 3 - db 190, $08 ; 25/256 = 9.8% chance of slot 4 - db 215, $0A ; 25/256 = 9.8% chance of slot 5 - db 228, $0C ; 13/256 = 5.1% chance of slot 6 - db 241, $0E ; 13/256 = 5.1% chance of slot 7 - db 252, $10 ; 11/256 = 4.3% chance of slot 8 - db 255, $12 ; 3/256 = 1.2% chance of slot 9 +; There are 10 slots for wild pokemon, and this is the list that defines how common each of +; those 10 slots is. A random number is generated and then the cumulative chance value up to the current +; slot (included) is compared against that random number. If the random number is less than or equal +; to said cumulative value, then that slot is chosen. + table_width 2 + wild_chance 51 ; 51/256 = 19.9% chance of slot 0 + wild_chance 51 ; 51/256 = 19.9% chance of slot 1 + wild_chance 39 ; 39/256 = 15.2% chance of slot 2 + wild_chance 25 ; 25/256 = 9.8% chance of slot 3 + wild_chance 25 ; 25/256 = 9.8% chance of slot 4 + wild_chance 25 ; 25/256 = 9.8% chance of slot 5 + wild_chance 13 ; 13/256 = 5.1% chance of slot 6 + wild_chance 13 ; 13/256 = 5.1% chance of slot 7 + wild_chance 11 ; 11/256 = 4.3% chance of slot 8 + wild_chance 3 ; 3/256 = 1.2% chance of slot 9 + assert_table_length NUM_WILDMONS + ASSERT wild_chance_total == 256, "WildMonEncounterSlotChances sum to {d:wild_chance_total}, not 256!" diff --git a/engine/battle/animations.asm b/engine/battle/animations.asm index 5adecbd75..aafb966e9 100644 --- a/engine/battle/animations.asm +++ b/engine/battle/animations.asm @@ -24,7 +24,7 @@ DrawFrameBlock: jp z, .flipHorizontalTranslateDown ; SUBANIMTYPE_HFLIP dec a jr z, .flipBaseCoords ; SUBANIMTYPE_COORDFLIP -.noTransformation +; no transformation ld a, [wBaseCoordY] add [hl] ld [de], a ; store Y @@ -157,7 +157,7 @@ DrawFrameBlock: ld a, [wNumFBTiles] cp c jp nz, .loop ; go back up if there are more tiles to draw -.afterDrawingTiles +; after drawing tiles ld a, [wFBMode] cp FRAMEBLOCKMODE_02 jr z, .advanceFrameBlockDestAddr ; skip delay and don't clean OAM buffer @@ -210,7 +210,7 @@ PlayAnimation: jr z, .AnimationOver cp FIRST_SE_ID ; is this subanimation or a special effect? jr c, .playSubanimation -.doSpecialEffect +; do Special Effect ld c, a ld de, SpecialEffectPointers .searchSpecialEffectTableLoop @@ -315,11 +315,11 @@ LoadSubanimation: and %11100000 cp SUBANIMTYPE_ENEMY << 5 vc_hook Reduce_move_anim_flashing_Reflect - jr nz, .isNotType5 -.isType5 + jr nz, .isNotTypeEnemy +; subanim type enemy call GetSubanimationTransform2 jr .saveTransformation -.isNotType5 +.isNotTypeEnemy vc_hook Reduce_move_anim_flashing_Self_Destruct call GetSubanimationTransform1 .saveTransformation @@ -440,11 +440,11 @@ MoveAnimation: jr nz, .animationsDisabled call ShareMoveAnimations call PlayAnimation - jr .next4 + jr .next .animationsDisabled ld c, 30 call DelayFrames -.next4 +.next vc_hook Stop_reducing_move_anim_flashing_Reflect call PlayApplyingAttackAnimation ; shake the screen or flash the pic in and out (to show damage) .animationFinished @@ -968,7 +968,7 @@ BallMoveDistances2: DoGrowlSpecialEffects: ld hl, wShadowOAM ld de, wShadowOAMSprite04 - ld bc, $10 + ld bc, OBJ_SIZE * 4 call CopyData ; copy the musical note graphic ld a, [wSubAnimCounter] dec a @@ -1141,6 +1141,8 @@ SetAnimationBGPalette: call UpdateCGBPal_BGP ret +AnimationUnusedShakeScreen: ; unreferenced +; Shakes the screen for a while. ld b, $5 AnimationShakeScreenVertically: @@ -1272,12 +1274,12 @@ _AnimationSlideMonUp: push bc ; In each iteration, slide up all rows but the top one (which is overwritten). - ld b, 6 + ld b, PIC_HEIGHT - 1 .slideLoop push bc push de push hl - ld bc, 7 + ld bc, PIC_WIDTH call CopyData ; Note that de and hl are popped in the same order they are pushed, swapping ; their values. When CopyData is called, hl points to a tile 1 row below @@ -1301,10 +1303,10 @@ _AnimationSlideMonUp: ld a, [wSlideMonUpBottomRowLeftTile] inc a ld [wSlideMonUpBottomRowLeftTile], a - ld c, 7 + ld c, PIC_WIDTH .fillBottomRowLoop ld [hli], a - add 7 + add PIC_WIDTH dec c jr nz, .fillBottomRowLoop @@ -1381,7 +1383,7 @@ AdjustOAMBlockXPos: ld h, d AdjustOAMBlockXPos2: - ld de, 4 + ld de, OBJ_SIZE .loop ld a, [wCoordAdjustmentAmount] ld b, a @@ -1391,7 +1393,7 @@ AdjustOAMBlockXPos2: jr c, .skipPuttingEntryOffScreen ; put off-screen if X >= 168 dec hl - ld a, 160 + ld a, SCREEN_HEIGHT_PX + OAM_Y_OFS ld [hli], a .skipPuttingEntryOffScreen ld [hl], a @@ -1405,7 +1407,7 @@ AdjustOAMBlockYPos: ld h, d AdjustOAMBlockYPos2: - ld de, 4 + ld de, OBJ_SIZE .loop ld a, [wCoordAdjustmentAmount] ld b, a @@ -1756,7 +1758,7 @@ _AnimationShootBallsUpward: dec a ld [wNumShootingBalls], a .next - ld de, 4 + ld de, OBJ_SIZE add hl, de ; next OAM entry dec b jr nz, .innerLoop @@ -1809,10 +1811,10 @@ AnimationMinimizeMon: ld hl, wTempPic push hl xor a - ld bc, 7 * 7 * $10 + ld bc, PIC_SIZE tiles call FillMemory pop hl - ld de, 7 * 3 * $10 + 4 * $10 + 4 + ld de, (PIC_WIDTH * 3 + 4) tiles + TILE_SIZE / 4 add hl, de ld de, MinimizedMonSprite ld c, MinimizedMonSpriteEnd - MinimizedMonSprite @@ -1860,7 +1862,7 @@ AnimationSlideMonDownAndHide: jr nz, .loop call AnimationHideMonPic ld hl, wTempPic - ld bc, 7 * 7 tiles + ld bc, PIC_SIZE tiles xor a call FillMemory jp CopyTempPicToMonPic @@ -1951,7 +1953,7 @@ CopyTempPicToMonPic: ld hl, vFrontPic ; enemy turn .next ld de, wTempPic - ld bc, 7 * 7 + ld bc, PIC_SIZE jp CopyVideoData AnimationWavyScreen: @@ -2019,7 +2021,7 @@ AnimationSubstitute: ; Changes the pokemon's sprite to the mini sprite ld hl, wTempPic xor a - ld bc, 7 * 7 tiles + ld bc, PIC_SIZE tiles call FillMemory ldh a, [hWhoseTurn] and a @@ -2055,7 +2057,7 @@ AnimationSubstitute: jp AnimationShowMonPic CopyMonsterSpriteData: - ld bc, 1 tiles + ld bc, TILE_SIZE ld a, BANK(MonsterSprite) jp FarCopyData @@ -2538,7 +2540,7 @@ FallingObjects_UpdateOAMEntry: inc a cp 112 jr c, .next - ld a, 160 ; if Y >= 112, put it off-screen + ld a, SCREEN_HEIGHT_PX + OAM_Y_OFS ; if Y >= 112, put it off-screen .next ld [hli], a ; Y cp 40 @@ -2655,7 +2657,7 @@ AnimationShakeEnemyHUD: ; Make a copy of the back pic's tile patterns in sprite tile pattern VRAM. ld de, vBackPic ld hl, vSprites - ld bc, 7 * 7 + ld bc, PIC_SIZE call CopyVideoData xor a diff --git a/engine/battle/battle_transitions.asm b/engine/battle/battle_transitions.asm index 8a340bf7c..cd0af1803 100644 --- a/engine/battle/battle_transitions.asm +++ b/engine/battle/battle_transitions.asm @@ -14,7 +14,7 @@ BattleTransition: ldh a, [hSpriteIndex] ; enemy trainer sprite index (0 if wild battle) ld c, a ld b, 0 - ld de, $10 + ld de, SPRITESTATEDATA1_LENGTH .loop1 ld a, [hl] cp $ff @@ -35,13 +35,13 @@ BattleTransition: jr z, .skip2 ; skip clearing the block if the enemy trainer is using it push hl push bc - ld bc, $10 + ld bc, OBJ_SIZE * 4 xor a call FillMemory pop bc pop hl .skip2 - ld de, $10 + ld de, OBJ_SIZE * 4 add hl, de dec c jr nz, .loop2 @@ -104,11 +104,11 @@ GetBattleTransitionID_CompareLevels: ld a, [hli] or [hl] jr nz, .notFainted - ld de, wPartyMon2 - (wPartyMon1 + 1) + ld de, PARTYMON_STRUCT_LENGTH - 1 add hl, de jr .faintedLoop .notFainted - ld de, wPartyMon1Level - (wPartyMon1HP + 1) + ld de, MON_LEVEL - (MON_HP + 1) add hl, de ld a, [hl] add $3 diff --git a/engine/battle/core.asm b/engine/battle/core.asm index a1a989e41..33301e58a 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -109,8 +109,8 @@ SlidePlayerAndEnemySilhouettesOnScreen: SlidePlayerHeadLeft: push bc ld hl, wShadowOAMSprite00XCoord - ld c, $15 ; number of OAM entries - ld de, $4 ; size of OAM entry + ld c, 7 * 3 ; number of OAM entries + ld de, OBJ_SIZE .loop dec [hl] ; decrement X dec [hl] ; decrement X @@ -140,7 +140,7 @@ StartBattle: inc a ld [wFirstMonsNotOutYet], a ld hl, wEnemyMon1HP - ld bc, wEnemyMon2 - wEnemyMon1 - 1 + ld bc, PARTYMON_STRUCT_LENGTH - 1 ld d, $3 .findFirstAliveEnemyMonLoop inc d @@ -745,7 +745,7 @@ FaintEnemyPokemon: jr z, .wild ld a, [wEnemyMonPartyPos] ld hl, wEnemyMon1HP - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes xor a ld [hli], a @@ -885,7 +885,7 @@ AnyEnemyPokemonAliveCheck: ld b, a xor a ld hl, wEnemyMon1HP - ld de, wEnemyMon2 - wEnemyMon1 + ld de, PARTYMON_STRUCT_LENGTH .nextPokemon or [hl] inc hl @@ -1222,17 +1222,17 @@ SlideDownFaintedMonPic: push af set BIT_NO_TEXT_DELAY, a ld [wStatusFlags5], a - ld b, 7 ; number of times to slide + ld b, PIC_HEIGHT ; number of times to slide .slideStepLoop ; each iteration, the mon is slid down one row push bc push de push hl - ld b, 6 ; number of rows + ld b, PIC_HEIGHT - 1 ; number of rows .rowLoop push bc push hl push de - ld bc, $7 + ld bc, PIC_WIDTH call CopyData pop de pop hl @@ -1264,7 +1264,8 @@ SlideDownFaintedMonPic: ret SevenSpacesText: - db " @" + ds PIC_WIDTH, ' ' + db "@" ; slides the player or enemy trainer off screen ; a is the number of tiles to slide it horizontally (always 9 for the player trainer or 8 for the enemy trainer) @@ -1276,7 +1277,7 @@ SlideTrainerPicOffScreen: .slideStepLoop ; each iteration, the trainer pic is slid one tile left/right push bc push hl - ld b, 7 ; number of rows + ld b, PIC_HEIGHT ; number of rows .rowLoop push hl ldh a, [hSlideAmount] @@ -1285,7 +1286,7 @@ SlideTrainerPicOffScreen: ldh a, [hSlideAmount] cp 8 jr z, .slideRight -.slideLeft ; slide player sprite off screen +; slide player sprite left off screen ld a, [hld] ld [hli], a inc hl @@ -1368,7 +1369,7 @@ EnemySendOutFirstMon: ld a, b ld [wWhichPokemon], a push bc - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes pop bc inc hl @@ -1380,7 +1381,7 @@ EnemySendOutFirstMon: .next3 ld a, [wWhichPokemon] ld hl, wEnemyMon1Level - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hl] ld [wCurEnemyLevel], a @@ -1495,7 +1496,7 @@ AnyPartyAlive:: ld e, a xor a ld hl, wPartyMon1HP - ld bc, wPartyMon2 - wPartyMon1 - 1 + ld bc, PARTYMON_STRUCT_LENGTH - 1 .partyMonsLoop or [hl] inc hl @@ -1511,7 +1512,7 @@ AnyPartyAlive:: HasMonFainted: ld a, [wWhichPokemon] ld hl, wPartyMon1HP - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hli] or [hl] @@ -1665,16 +1666,16 @@ GotAwayText: ; copies from party data to battle mon data when sending out a new player mon LoadBattleMonFromParty: ld a, [wWhichPokemon] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld hl, wPartyMon1Species call AddNTimes ld de, wBattleMonSpecies ld bc, wBattleMonDVs - wBattleMonSpecies call CopyData - ld bc, wPartyMon1DVs - wPartyMon1OTID + ld bc, MON_DVS - MON_OTID add hl, bc ld de, wBattleMonDVs - ld bc, wPartyMon1PP - wPartyMon1DVs + ld bc, MON_PP - MON_DVS call CopyData ld de, wBattleMonPP ld bc, NUM_MOVES @@ -1709,16 +1710,16 @@ LoadBattleMonFromParty: ; copies from enemy party data to current enemy mon data when sending out a new enemy mon LoadEnemyMonFromParty: ld a, [wWhichPokemon] - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld hl, wEnemyMons call AddNTimes ld de, wEnemyMonSpecies ld bc, wEnemyMonDVs - wEnemyMonSpecies call CopyData - ld bc, wEnemyMon1DVs - wEnemyMon1OTID + ld bc, MON_DVS - MON_OTID add hl, bc ld de, wEnemyMonDVs - ld bc, wEnemyMon1PP - wEnemyMon1DVs + ld bc, MON_PP - MON_DVS call CopyData ld de, wEnemyMonPP ld bc, NUM_MOVES @@ -1869,17 +1870,17 @@ AnimateRetreatingPlayerMon: call ClearScreenArea ret -; Copies player's current pokemon's current HP and status into the party +; Copies player's current pokemon's current HP, party pos, and status into the party ; struct data so it stays after battle or switching ReadPlayerMonCurHPAndStatus: ld a, [wPlayerMonNumber] ld hl, wPartyMon1HP - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld d, h ld e, l ld hl, wBattleMonHP - ld bc, $4 ; 2 bytes HP, 1 byte unknown (unused?), 1 byte status + ld bc, MON_STATUS + 1 - MON_HP ; also copies party pos in-between HP and status jp CopyData DrawHUDsAndHPBars: @@ -2623,7 +2624,7 @@ MoveSelectionMenu: .relearnmenu ld a, [wWhichPokemon] ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes call .loadmoves hlcoord 4, 7 @@ -2969,12 +2970,12 @@ ENDC .swapMovesInPartyMon ld hl, wPartyMon1Moves ld a, [wPlayerMonNumber] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes push hl call .swapBytes ; swap moves pop hl - ld bc, wPartyMon1PP - wPartyMon1Moves + ld bc, MON_PP - MON_MOVES add hl, bc call .swapBytes ; swap move PP xor a @@ -3285,7 +3286,7 @@ PlayerCanExecuteChargingMove: ; resulting in the Pokemon being invulnerable for the whole battle res INVULNERABLE, [hl] PlayerCanExecuteMove: - call PrintMonName1Text + call DisplayUsedMoveText ld hl, DecrementPP ld de, wPlayerSelectedMove ; pointer to the move just used ld b, BANK(DecrementPP) @@ -3621,7 +3622,7 @@ CheckPlayerStatusConditions: bit PAR, [hl] jr z, .BideCheck call BattleRandom - cp $3F ; 25% to be fully paralyzed + cp 25 percent ; chance to be fully paralyzed jr nc, .BideCheck ld hl, FullyParalyzedText call PrintText @@ -3727,11 +3728,12 @@ CheckPlayerStatusConditions: ld hl, AttackContinuesText call PrintText ld a, [wPlayerNumAttacksLeft] - dec a ; did multi-turn move end? + dec a ld [wPlayerNumAttacksLeft], a - ld hl, GetPlayerAnimationType ; if it didn't, skip damage calculation (deal damage equal to last hit), - ; DecrementPP and MoveHitTest - jp nz, .returnToHL + ld hl, GetPlayerAnimationType ; skip damage calculation (deal damage equal to last hit), + ; DecrementPP and MoveHitTest + jp nz, .returnToHL ; redundant leftover code, the case wEnemyNumAttacksLeft == 0 + ; is handled within CheckNumAttacksLeft jp .returnToHL .RageCheck @@ -3796,7 +3798,7 @@ ConfusedNoMoreText: text_far _ConfusedNoMoreText text_end -SavingEnergyText: +SavingEnergyText: ; unreferenced text_far _SavingEnergyText text_end @@ -3882,139 +3884,7 @@ HandleSelfConfusionDamage: ldh [hWhoseTurn], a jp ApplyDamageToPlayerPokemon -PrintMonName1Text: - ld hl, MonName1Text - jp PrintText - -; this function wastes time calling DetermineExclamationPointTextNum -; and choosing between Used1Text and Used2Text, even though -; those text strings are identical and both continue at PrintInsteadText -; this likely had to do with Japanese grammar that got translated, -; but the functionality didn't get removed -MonName1Text: - text_far _MonName1Text - text_asm - ldh a, [hWhoseTurn] - and a - ld a, [wPlayerMoveNum] - ld hl, wPlayerUsedMove - jr z, .playerTurn - ld a, [wEnemyMoveNum] - ld hl, wEnemyUsedMove -.playerTurn - ld [hl], a - ld [wMoveGrammar], a - call DetermineExclamationPointTextNum - ld a, [wMonIsDisobedient] - and a - ld hl, Used2Text - ret nz - ld a, [wMoveGrammar] - cp 3 - ld hl, Used2Text - ret c - ld hl, Used1Text - ret - -Used1Text: - text_far _Used1Text - text_asm - jr PrintInsteadText - -Used2Text: - text_far _Used2Text - text_asm - ; fall through - -PrintInsteadText: - ld a, [wMonIsDisobedient] - and a - jr z, PrintMoveName - ld hl, InsteadText - ret - -InsteadText: - text_far _InsteadText - text_asm - ; fall through - -PrintMoveName: - ld hl, _PrintMoveName - ret - -_PrintMoveName: - text_far _MoveNameText - text_asm - ld hl, ExclamationPointPointerTable - ld a, [wMoveGrammar] - add a - push bc - ld b, $0 - ld c, a - add hl, bc - pop bc - ld a, [hli] - ld h, [hl] - ld l, a - ret - -ExclamationPointPointerTable: - dw ExclamationPoint1Text - dw ExclamationPoint2Text - dw ExclamationPoint3Text - dw ExclamationPoint4Text - dw ExclamationPoint5Text - -ExclamationPoint1Text: - text_far _ExclamationPoint1Text - text_end - -ExclamationPoint2Text: - text_far _ExclamationPoint2Text - text_end - -ExclamationPoint3Text: - text_far _ExclamationPoint3Text - text_end - -ExclamationPoint4Text: - text_far _ExclamationPoint4Text - text_end - -ExclamationPoint5Text: - text_far _ExclamationPoint5Text - text_end - -; this function does nothing useful -; if the move being used is in set [1-4] from ExclamationPointMoveSets, -; use ExclamationPoint[1-4]Text -; otherwise, use ExclamationPoint5Text -; but all five text strings are identical -; this likely had to do with Japanese grammar that got translated, -; but the functionality didn't get removed -DetermineExclamationPointTextNum: - push bc - ld a, [wMoveGrammar] ; move ID - ld c, a - ld b, $0 - ld hl, ExclamationPointMoveSets -.loop - ld a, [hli] - cp $ff - jr z, .done - cp c - jr z, .done - and a - jr nz, .loop - inc b - jr .loop -.done - ld a, b - ld [wMoveGrammar], a - pop bc - ret - -INCLUDE "data/moves/grammar.asm" +INCLUDE "engine/battle/used_move_text.asm" PrintMoveFailureText: ld de, wPlayerMoveEffect @@ -4140,7 +4010,7 @@ CheckForDisobedience: ; compare the mon's original trainer ID with the player's ID to see if it was traded .checkIfMonIsTraded ld hl, wPartyMon1OTID - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wPlayerMonNumber] call AddNTimes ld a, [wPlayerID] @@ -4341,7 +4211,7 @@ GetDamageVarsForPlayerAttack: ld a, [hl] ; a = [wPlayerMoveType] cp SPECIAL ; types >= SPECIAL are all special jr nc, .specialAttack -.physicalAttack +; physical attack ld hl, wEnemyMonDefense ld a, [hli] ld b, a @@ -4367,7 +4237,7 @@ GetDamageVarsForPlayerAttack: push bc ld hl, wPartyMon1Attack ld a, [wPlayerMonNumber] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes pop bc jr .scaleStats @@ -4399,7 +4269,7 @@ GetDamageVarsForPlayerAttack: push bc ld hl, wPartyMon1Special ld a, [wPlayerMonNumber] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes pop bc ; if either the offensive or defensive stat is too large to store in a byte, scale both stats by dividing them by 4 @@ -4454,7 +4324,7 @@ GetDamageVarsForEnemyAttack: ld a, [hl] ; a = [wEnemyMoveType] cp SPECIAL ; types >= SPECIAL are all special jr nc, .specialAttack -.physicalAttack +; physical attack ld hl, wBattleMonDefense ld a, [hli] ld b, a @@ -4473,7 +4343,7 @@ GetDamageVarsForEnemyAttack: ; in the case of a critical hit, reset the player's defense and the enemy's attack to their base values ld hl, wPartyMon1Defense ld a, [wPlayerMonNumber] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hli] ld b, a @@ -4505,7 +4375,7 @@ GetDamageVarsForEnemyAttack: ; in the case of a critical hit, reset the player's and enemy's specials to their base values ld hl, wPartyMon1Special ld a, [wPlayerMonNumber] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hli] ld b, a @@ -4568,7 +4438,7 @@ GetEnemyMonStat: ld b, $0 add hl, bc ld a, [wEnemyMonPartyPos] - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hli] ldh [hMultiplicand + 1], a @@ -5367,7 +5237,7 @@ IncrementMovePP: jr z, .updatePP ld a, [wEnemyMonPartyPos] ; value for enemy turn .updatePP - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes inc [hl] ; increment PP in the party memory location ret @@ -5471,7 +5341,6 @@ AdjustDamageForMoveType: ld [hl], a or b ; is damage 0? jr nz, .skipTypeImmunity -.typeImmunity ; if damage is 0, make the move miss ; this only occurs if a move that would do 2 or 3 damage is 0.25x effective against the target inc a @@ -5575,7 +5444,7 @@ MoveHitTest: ldh a, [hWhoseTurn] and a jr nz, .enemyTurn -.playerTurn +; player's turn ; this checks if the move effect is disallowed by mist ld a, [wPlayerMoveEffect] cp ATTACK_DOWN1_EFFECT @@ -5647,12 +5516,12 @@ MoveHitTest: ld [wMoveMissed], a ldh a, [hWhoseTurn] and a - jr z, .playerTurn2 -.enemyTurn2 + jr z, .playerTurn +; enemy's turn ld hl, wEnemyBattleStatus1 res USING_TRAPPING_MOVE, [hl] ; end multi-turn attack e.g. wrap ret -.playerTurn2 +.playerTurn ld hl, wPlayerBattleStatus1 res USING_TRAPPING_MOVE, [hl] ; end multi-turn attack e.g. wrap ret @@ -5823,7 +5692,7 @@ EnemyCanExecuteChargingMove: EnemyCanExecuteMove: xor a ld [wMonIsDisobedient], a - call PrintMonName1Text + call DisplayUsedMoveText ld a, [wEnemyMoveEffect] ld hl, ResidualEffects1 ld de, $1 @@ -6244,10 +6113,11 @@ CheckEnemyStatusConditions: ld hl, AttackContinuesText call PrintText ld hl, wEnemyNumAttacksLeft - dec [hl] ; did multi-turn move end? - ld hl, GetEnemyAnimationType ; if it didn't, skip damage calculation (deal damage equal to last hit), + dec [hl] + ld hl, GetEnemyAnimationType ; skip damage calculation (deal damage equal to last hit), ; DecrementPP and MoveHitTest - jp nz, .enemyReturnToHL + jp nz, .enemyReturnToHL ; redundant leftover code, the case wEnemyNumAttacksLeft == 0 + ; is handled within CheckNumAttacksLeft jp .enemyReturnToHL .checkIfUsingRage ld a, [wEnemyBattleStatus2] @@ -6387,7 +6257,7 @@ LoadEnemyMonData: ; if it's a trainer battle, copy moves from enemy party data ld hl, wEnemyMon1Moves ld a, [wWhichPokemon] - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld bc, NUM_MOVES call CopyData @@ -6538,7 +6408,7 @@ LoadPlayerBackPic: ld [hl], d ; OAM Y inc hl ld [hl], e ; OAM X - ld a, $8 ; height of tile + ld a, TILE_HEIGHT add d ; increase Y by height of tile ld d, a inc hl @@ -6554,7 +6424,7 @@ LoadPlayerBackPic: ldh a, [hOAMTile] add $4 ; increase tile number by 4 ldh [hOAMTile], a - ld a, $8 ; width of tile + ld a, TILE_WIDTH add e ; increase X by width of tile ld e, a dec b @@ -6567,7 +6437,7 @@ LoadPlayerBackPic: ld de, sSpriteBuffer1 ldh a, [hLoadedROMBank] ld b, a - ld c, 7 * 7 + ld c, PIC_SIZE call CopyVideoData call CloseSRAM ld a, $31 @@ -6599,7 +6469,7 @@ QuarterSpeedDueToParalysis: ldh a, [hWhoseTurn] and a jr z, .playerTurn -.enemyTurn ; quarter the player's speed +; enemy's turn, quarter the player's speed ld a, [wBattleMonStatus] and 1 << PAR ret z ; return if player not paralysed @@ -6642,7 +6512,7 @@ HalveAttackDueToBurn: ldh a, [hWhoseTurn] and a jr z, .playerTurn -.enemyTurn ; halve the player's attack +; enemy's turn, halve the player's attack ld a, [wBattleMonStatus] and 1 << BRN ret z ; return if player not burnt @@ -6826,7 +6696,7 @@ LoadHudTilePatterns: ldh a, [rLCDC] add a ; is LCD disabled? jr c, .lcdEnabled -.lcdDisabled +; LCD disabled ld hl, BattleHudTiles1 ld de, vChars2 tile $6d ld bc, BattleHudTiles1End - BattleHudTiles1 @@ -6840,11 +6710,11 @@ LoadHudTilePatterns: .lcdEnabled ld de, BattleHudTiles1 ld hl, vChars2 tile $6d - lb bc, BANK(BattleHudTiles1), (BattleHudTiles1End - BattleHudTiles1) / $8 + lb bc, BANK(BattleHudTiles1), (BattleHudTiles1End - BattleHudTiles1) / TILE_1BPP_SIZE call CopyVideoDataDouble ld de, BattleHudTiles2 ld hl, vChars2 tile $73 - lb bc, BANK(BattleHudTiles2), (BattleHudTiles3End - BattleHudTiles2) / $8 + lb bc, BANK(BattleHudTiles2), (BattleHudTiles3End - BattleHudTiles2) / TILE_1BPP_SIZE jp CopyVideoDataDouble PrintEmptyString: diff --git a/engine/battle/decrement_pp.asm b/engine/battle/decrement_pp.asm index 441bbb814..935152243 100644 --- a/engine/battle/decrement_pp.asm +++ b/engine/battle/decrement_pp.asm @@ -31,7 +31,7 @@ DecrementPP: ld hl, wPartyMon1PP ; PP of first move (in party) ld a, [wPlayerMonNumber] ; which mon in party is active - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ; calculate address of the mon to modify .DecrementPP: ld a, [wPlayerMoveListIndex] ; which move (0, 1, 2, 3) did we use? diff --git a/engine/battle/draw_hud_pokeball_gfx.asm b/engine/battle/draw_hud_pokeball_gfx.asm index 0b0aac7de..bf955040a 100644 --- a/engine/battle/draw_hud_pokeball_gfx.asm +++ b/engine/battle/draw_hud_pokeball_gfx.asm @@ -13,12 +13,12 @@ DrawEnemyPokeballs: LoadPartyPokeballGfx: ld de, PokeballTileGraphics ld hl, vSprites tile $31 - lb bc, BANK(PokeballTileGraphics), (PokeballTileGraphicsEnd - PokeballTileGraphics) / $10 + lb bc, BANK(PokeballTileGraphics), (PokeballTileGraphicsEnd - PokeballTileGraphics) / TILE_SIZE jp CopyVideoData SetupOwnPartyPokeballs: call PlacePlayerHUDTiles - ld hl, wPartyMon1 + ld hl, wPartyMons ld de, wPartyCount call SetupPokeballs ld a, $60 @@ -94,7 +94,7 @@ PickPokeball: .done ld a, b ld [de], a - ld bc, wPartyMon2 - wPartyMon1Status + ld bc, PARTYMON_STRUCT_LENGTH - MON_STATUS add hl, bc ; next mon struct ret @@ -123,7 +123,7 @@ WritePokeballOAMData: PlacePlayerHUDTiles: ld hl, PlayerBattleHUDGraphicsTiles ld de, wHUDGraphicsTiles - ld bc, $3 + ld bc, wHUDGraphicsTilesEnd - wHUDGraphicsTiles call CopyData hlcoord 18, 10 ld de, -1 @@ -138,7 +138,7 @@ PlayerBattleHUDGraphicsTiles: PlaceEnemyHUDTiles: ld hl, EnemyBattleHUDGraphicsTiles ld de, wHUDGraphicsTiles - ld bc, $3 + ld bc, wHUDGraphicsTilesEnd - wHUDGraphicsTiles call CopyData hlcoord 1, 2 ld de, $1 @@ -154,7 +154,7 @@ PlaceHUDTiles: ld [hl], $73 ld bc, SCREEN_WIDTH add hl, bc - ld a, [wHUDGraphicsTiles + 1] ; leftmost tile + ld a, [wHUDCornerTile] ; leftmost tile ld [hl], a ld a, 8 .loop @@ -163,7 +163,7 @@ PlaceHUDTiles: dec a jr nz, .loop add hl, de - ld a, [wHUDGraphicsTiles + 2] ; rightmost tile + ld a, [wHUDTriangleTile] ; rightmost tile ld [hl], a ret diff --git a/engine/battle/effects.asm b/engine/battle/effects.asm index 2babf7f1d..185b7dad3 100644 --- a/engine/battle/effects.asm +++ b/engine/battle/effects.asm @@ -41,7 +41,7 @@ SleepEffect: ; including the event where the target already has another status ld a, [de] ld b, a - and $7 + and SLP_MASK jr z, .notAlreadySleeping ; can't affect a mon that is already asleep ld hl, AlreadyAsleepText jp PrintText @@ -58,7 +58,7 @@ SleepEffect: .setSleepCounter ; set target's sleep counter to a random number between 1 and 7 call BattleRandom - and $7 + and SLP_MASK jr z, .setSleepCounter ld b, a ld a, [wUnknownSerialFlag_d499] @@ -250,7 +250,7 @@ FreezeBurnParalyzeEffect: jr z, .burn1 cp FREEZE_SIDE_EFFECT1 jr z, .freeze1 -; .paralyze1 +; paralyze1 ld a, 1 << PAR ld [wEnemyMonStatus], a call QuarterSpeedDueToParalysis ; quarter speed of affected mon @@ -313,7 +313,7 @@ FreezeBurnParalyzeEffect: jr z, .burn2 cp FREEZE_SIDE_EFFECT1 jr z, .freeze2 -; .paralyze2 +; paralyze2 ld a, 1 << PAR ld [wBattleMonStatus], a call QuarterSpeedDueToParalysis @@ -359,7 +359,7 @@ CheckDefrost: ld [wEnemyMonStatus], a ; set opponent status to 00 ["defrost" a frozen monster] ld hl, wEnemyMon1Status ld a, [wEnemyMonPartyPos] - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes xor a ld [hl], a ; clear status in roster @@ -372,7 +372,7 @@ CheckDefrost: ld [wBattleMonStatus], a ld hl, wPartyMon1Status ld a, [wPlayerMonNumber] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes xor a ld [hl], a @@ -629,7 +629,7 @@ StatModifierDownEffect: ld a, [de] cp ATTACK_DOWN2_EFFECT - $16 ; $24 jr c, .ok - cp EVASION_DOWN2_EFFECT + $5 ; $44 + cp ATTACK_DOWN_SIDE_EFFECT ; move side effects, stat mod decrease is always 1 jr nc, .ok dec b ; stat down 2 effects only (dec mod again) jr nz, .ok @@ -722,7 +722,7 @@ UpdateLoweredStatDone: .ApplyBadgeBoostsAndStatusPenalties ldh a, [hWhoseTurn] and a - call nz, ApplyBadgeStatBoosts ; whenever the player uses a stat-down move, badge boosts get reapplied again to every stat, + call nz, ApplyBadgeStatBoosts ; whenever the opponent uses a stat-down move, badge boosts get reapplied again to every stat, ; even to those not affected by the stat-down move (will be boosted further) ld hl, MonsStatsFellText call PrintText @@ -747,7 +747,7 @@ CantLowerAnymore: MoveMissed: ld a, [de] - cp $44 + cp ATTACK_DOWN_SIDE_EFFECT ret nc jp ConditionalPrintButItFailed @@ -790,7 +790,7 @@ PrintStatText: jr .findStatName_inner .foundStatName ld de, wStringBuffer - ld bc, $a + ld bc, STAT_NAME_LENGTH jp CopyData INCLUDE "data/battle/stat_mod_names.asm" @@ -1377,7 +1377,7 @@ DisableEffect: cp LINK_STATE_BATTLING pop hl ; wEnemyMonMoves jr nz, .playerTurnNotLinkBattle -; .playerTurnLinkBattle +; player's turn, Link Battle push hl ld hl, wEnemyMonPP .enemyTurn @@ -1512,6 +1512,7 @@ PlayCurrentMoveAnimation2: .notEnemyTurn and a ret z +; fallthrough PlayBattleAnimation2: ; play animation ID at a and animation type 6 or 3 @@ -1538,6 +1539,7 @@ PlayCurrentMoveAnimation: .notEnemyTurn and a ret z +; fallthrough PlayBattleAnimation: ; play animation ID at a and predefined animation type diff --git a/engine/battle/end_of_battle.asm b/engine/battle/end_of_battle.asm index 539462507..2ae3f71f0 100644 --- a/engine/battle/end_of_battle.asm +++ b/engine/battle/end_of_battle.asm @@ -5,7 +5,7 @@ EndOfBattle: ; link battle ld a, [wEnemyMonPartyPos] ld hl, wEnemyMon1Status - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [wEnemyMonStatus] ld [hl], a @@ -64,8 +64,8 @@ EndOfBattle: ld [hli], a ld [hl], a ld [wListScrollOffset], a - ld hl, wPlayerStatsToDouble - ld b, $18 + ld hl, wBattleStatusData + ld b, wBattleStatusDataEnd - wBattleStatusData .loop ld [hli], a dec b diff --git a/engine/battle/experience.asm b/engine/battle/experience.asm index 32afc0177..55d8d7821 100644 --- a/engine/battle/experience.asm +++ b/engine/battle/experience.asm @@ -21,7 +21,7 @@ GainExperience: and a ; is mon's gain exp flag set? pop hl jp z, .nextMon ; if mon's gain exp flag not set, go to next mon - ld de, (wPartyMon1HPExp + 1) - (wPartyMon1HP + 1) + ld de, (MON_HP_EXP + 1) - (MON_HP + 1) add hl, de ld d, h ld e, l @@ -66,9 +66,9 @@ GainExperience: ldh [hDivisor], a ld b, 4 call Divide - ld hl, wPartyMon1OTID - (wPartyMon1DVs - 1) + ld hl, MON_OTID - (MON_DVS - 1) add hl, de - ld b, [hl] ; party mon OTID + ld b, [hl] ; wPartyMon*OTID inc hl ld a, [wPlayerID] cp b @@ -152,7 +152,7 @@ GainExperience: ld [wMonDataLocation], a call LoadMonData pop hl - ld bc, wPartyMon1Level - wPartyMon1Exp + ld bc, MON_LEVEL - MON_EXP add hl, bc push hl farcall CalcLevelFromExperience @@ -166,13 +166,13 @@ GainExperience: ld a, d ld [wCurEnemyLevel], a ld [hl], a - ld bc, wPartyMon1Species - wPartyMon1Level + ld bc, MON_SPECIES - MON_LEVEL add hl, bc ld a, [hl] ld [wCurSpecies], a ld [wPokedexNum], a call GetMonHeader - ld bc, (wPartyMon1MaxHP + 1) - wPartyMon1Species + ld bc, (MON_MAXHP + 1) - MON_SPECIES add hl, bc push hl ld a, [hld] @@ -181,7 +181,7 @@ GainExperience: push bc ; push max HP (from before levelling up) ld d, h ld e, l - ld bc, (wPartyMon1HPExp - 1) - wPartyMon1MaxHP + ld bc, (MON_HP_EXP - 1) - MON_MAXHP add hl, bc ld b, $1 ; consider stat exp when calculating stats call CalcStats @@ -193,15 +193,15 @@ GainExperience: ld a, [hl] sbc b ld b, a ; bc = difference between old max HP and new max HP after levelling - ld de, (wPartyMon1HP + 1) - wPartyMon1MaxHP + ld de, (MON_HP + 1) - MON_MAXHP add hl, de ; add to the current HP the amount of max HP gained when levelling - ld a, [hl] ; wPartyMon1HP + 1 + ld a, [hl] ; wPartyMon*HP + 1 add c ld [hld], a - ld a, [hl] ; wPartyMon1HP + 1 + ld a, [hl] ; wPartyMon*HP + 1 adc b - ld [hl], a ; wPartyMon1HP + ld [hl], a ; wPartyMon*HP ld a, [wPlayerMonNumber] ld b, a ld a, [wWhichPokemon] @@ -216,7 +216,7 @@ GainExperience: ld a, [hl] ld [de], a ; copy other stats from party mon to battle mon - ld bc, wPartyMon1Level - (wPartyMon1HP + 1) + ld bc, MON_LEVEL - (MON_HP + 1) add hl, bc push hl ld de, wBattleMonLevel @@ -251,7 +251,7 @@ GainExperience: xor a ; PLAYER_PARTY_DATA ld [wMonDataLocation], a call LoadMonData - ld d, $1 + ld d, LEVEL_UP_STATS_BOX callfar PrintStatsBox call WaitForTextScrollButtonPress call LoadScreenTilesFromBuffer1 @@ -277,7 +277,7 @@ GainExperience: cp b jr z, .done ld [wWhichPokemon], a - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld hl, wPartyMon1 call AddNTimes jp .partyMonLoop diff --git a/engine/battle/get_trainer_name.asm b/engine/battle/get_trainer_name.asm index a0e869fce..1983b08a3 100644 --- a/engine/battle/get_trainer_name.asm +++ b/engine/battle/get_trainer_name.asm @@ -20,5 +20,5 @@ GetTrainerName_:: ld hl, wNameBuffer .foundName ld de, wTrainerName - ld bc, ITEM_NAME_LENGTH + ld bc, TRAINER_NAME_LENGTH jp CopyData diff --git a/engine/battle/ghost_marowak_anim.asm b/engine/battle/ghost_marowak_anim.asm index 6514ccaa8..ab5f90178 100644 --- a/engine/battle/ghost_marowak_anim.asm +++ b/engine/battle/ghost_marowak_anim.asm @@ -51,11 +51,11 @@ MarowakAnim: call Delay3 jp ClearSprites -; copies a mon pic's from background VRAM to sprite VRAM and sets up OAM +; copies a mon pic's from background VRAM to sprite VRAM and sets up OAM CopyMonPicFromBGToSpriteVRAM: ld de, vFrontPic ld hl, vSprites - ld bc, 7 * 7 + ld bc, PIC_SIZE call CopyVideoData ld a, $10 ld [wBaseCoordY], a diff --git a/engine/battle/init_battle.asm b/engine/battle/init_battle.asm index a291880c0..15dbb3d10 100644 --- a/engine/battle/init_battle.asm +++ b/engine/battle/init_battle.asm @@ -76,17 +76,7 @@ InitWildBattle: ld [hli], a ; write front sprite pointer ld [hl], b ld hl, wEnemyMonNick ; set name to "GHOST" - ld a, 'G' - ld [hli], a - ld a, 'H' - ld [hli], a - ld a, 'O' - ld [hli], a - ld a, 'S' - ld [hli], a - ld a, 'T' - ld [hli], a - ld [hl], '@' + ld_hli_a_string "GHOST@" ld a, [wCurPartySpecies] push af ld a, MON_GHOST diff --git a/engine/battle/link_battle_versus_text.asm b/engine/battle/link_battle_versus_text.asm index e5dd42ea1..40c1aad91 100644 --- a/engine/battle/link_battle_versus_text.asm +++ b/engine/battle/link_battle_versus_text.asm @@ -12,9 +12,7 @@ DisplayLinkBattleVersusTextBox: call PlaceString ; place bold "VS" tiles between the names hlcoord 9, 8 - ld a, '' - ld [hli], a - ld [hl], '' + ld_hli_a_string "" xor a ld [wUpdateSpritesEnabled], a callfar SetupPlayerAndEnemyPokeballs diff --git a/engine/battle/move_effects/haze.asm b/engine/battle/move_effects/haze.asm index 76722d0e9..0f89ad192 100644 --- a/engine/battle/move_effects/haze.asm +++ b/engine/battle/move_effects/haze.asm @@ -59,7 +59,7 @@ CureVolatileStatuses: ret ResetStatMods: - ld b, $8 + ld b, NUM_STAT_MODS .loop ld [hli], a dec b @@ -67,7 +67,7 @@ ResetStatMods: ret ResetStats: - ld b, $8 + ld b, (NUM_STATS - 1) * 2 ; doesn't reset STAT_HEALTH .loop ld a, [hli] ld [de], a diff --git a/engine/battle/move_effects/substitute.asm b/engine/battle/move_effects/substitute.asm index e43112097..01d5a8a3e 100644 --- a/engine/battle/move_effects/substitute.asm +++ b/engine/battle/move_effects/substitute.asm @@ -37,8 +37,8 @@ SubstituteEffect_: sbc 0 pop bc jr c, .notEnoughHP ; underflow means user would be left with negative health - ; bug: since it only branches on carry, it will possibly leave user with 0 HP -.userHasZeroOrMoreHP + ; bug: since it only branches on carry, it will possibly leave user with 0 HP +; user has 0 or more HP ld [hli], a ; save resulting HP after subtraction into current HP ld [hl], d ld h, b diff --git a/engine/battle/move_effects/transform.asm b/engine/battle/move_effects/transform.asm index 775816c78..e8bafe04c 100644 --- a/engine/battle/move_effects/transform.asm +++ b/engine/battle/move_effects/transform.asm @@ -2,17 +2,22 @@ TransformEffect_: ld hl, wBattleMonSpecies ld de, wEnemyMonSpecies ld bc, wEnemyBattleStatus3 + ; bug: on enemy's turn, a is overloaded with hWhoseTurn, + ; before the check for INVULNERABLE ld a, [wEnemyBattleStatus1] ldh a, [hWhoseTurn] and a jr nz, .hitTest +; player's turn ld hl, wEnemyMonSpecies ld de, wBattleMonSpecies ld bc, wPlayerBattleStatus3 ld [wPlayerMoveListIndex], a + ; bug: this should be target's BattleStatus1 (i.e. wEnemyBattleStatus1) ld a, [wPlayerBattleStatus1] .hitTest bit INVULNERABLE, a ; is mon invulnerable to typical attacks? (fly/dig) + ; this check doesn't work due to above bugs jp nz, .failed push hl push de @@ -82,14 +87,15 @@ TransformEffect_: ld a, [hli] ld [de], a inc de -; Attack, Defense, Speed, and Special stats +; Skip level and max HP inc hl inc hl inc hl inc de inc de inc de - ld bc, $8 +; Attack, Defense, Speed, and Special stats + ld bc, (NUM_STATS - 1) * 2 call CopyData ld bc, wBattleMonMoves - wBattleMonPP add hl, bc ; ld hl, wBattleMonMoves @@ -99,7 +105,7 @@ TransformEffect_: ld a, [hli] and a jr z, .lessThanFourMoves - ld a, $5 + ld a, 5 .lessThanFourMoves ld [de], a inc de @@ -129,7 +135,7 @@ TransformEffect_: ld l, e pop de .gotStatsOrModsToCopy - ld bc, $8 + ld bc, (NUM_STATS - 1) * 2 jp CopyData .failed diff --git a/engine/battle/read_trainer_party.asm b/engine/battle/read_trainer_party.asm index c8ee8fda3..f4a2bef9b 100644 --- a/engine/battle/read_trainer_party.asm +++ b/engine/battle/read_trainer_party.asm @@ -103,7 +103,7 @@ ReadTrainer: jp z, .FinishUp dec a ld hl, wEnemyMon1Moves - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [de] inc de diff --git a/engine/battle/trainer_ai.asm b/engine/battle/trainer_ai.asm index 7081fdfdb..d97ee0762 100644 --- a/engine/battle/trainer_ai.asm +++ b/engine/battle/trainer_ai.asm @@ -578,7 +578,7 @@ AISwitchIfEnoughMons: inc d .Fainted push bc - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH add hl, bc pop bc dec c @@ -592,16 +592,16 @@ AISwitchIfEnoughMons: SwitchEnemyMon: -; prepare to withdraw the active monster: copy hp, number, and status to roster +; prepare to withdraw the active monster: copy HP, party pos, and status to roster ld a, [wEnemyMonPartyPos] ld hl, wEnemyMon1HP - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld d, h ld e, l ld hl, wEnemyMonHP - ld bc, 4 + ld bc, MON_STATUS + 1 - MON_HP ; also copies party pos in-between HP and status call CopyData ld hl, AIBattleWithdrawText @@ -635,7 +635,7 @@ AICureStatus: ; cures the status of enemy's active pokemon ld a, [wEnemyMonPartyPos] ld hl, wEnemyMon1Status - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes xor a ld [hl], a ; clear status in enemy team roster diff --git a/engine/battle/used_move_text.asm b/engine/battle/used_move_text.asm new file mode 100644 index 000000000..abb35e67b --- /dev/null +++ b/engine/battle/used_move_text.asm @@ -0,0 +1,139 @@ +DisplayUsedMoveText: + ld hl, UsedMoveText + jp PrintText + +UsedMoveText: + text_far _ActorNameText + text_asm + + ldh a, [hWhoseTurn] + and a + ld a, [wPlayerMoveNum] + ld hl, wPlayerUsedMove + jr z, .playerTurn + + ld a, [wEnemyMoveNum] + ld hl, wEnemyUsedMove + +.playerTurn + ld [hl], a + ld [wMoveGrammar], a + call GetMoveGrammar + ld a, [wMonIsDisobedient] + and a + ld hl, UsedMove2Text + ret nz + + ; check move grammar + ld a, [wMoveGrammar] + cp $3 + ld hl, UsedMove2Text + ret c + ld hl, UsedMove1Text + ret + +UsedMove1Text: + text_far _UsedMove1Text + text_asm + jr UsedMoveText_CheckObedience + +UsedMove2Text: + text_far _UsedMove2Text + text_asm + ; fall through + +UsedMoveText_CheckObedience: +; check obedience + ld a, [wMonIsDisobedient] + and a + jr z, .GetMoveNameText +; print "instead," + ld hl, .UsedInsteadText + ret + +.UsedInsteadText: + text_far _UsedInsteadText + text_asm + ; fall through + +.GetMoveNameText: + ld hl, MoveNameText + ret + +MoveNameText: + text_far _MoveNameText + text_asm + ld hl, .endusedmovetexts + ld a, [wMoveGrammar] + add a + push bc + ld b, $0 + ld c, a + add hl, bc + pop bc + ld a, [hli] + ld h, [hl] + ld l, a + ret + +.endusedmovetexts: +; entries correspond to MoveGrammar sets + dw EndUsedMove1Text + dw EndUsedMove2Text + dw EndUsedMove3Text + dw EndUsedMove4Text + dw EndUsedMove5Text + +EndUsedMove1Text: + text_far _EndUsedMove1Text + text_end + +EndUsedMove2Text: + text_far _EndUsedMove2Text + text_end + +EndUsedMove3Text: + text_far _EndUsedMove3Text + text_end + +EndUsedMove4Text: + text_far _EndUsedMove4Text + text_end + +EndUsedMove5Text: + text_far _EndUsedMove5Text + text_end + +; This function is redundant in the English localization. +; In Japanese, it selects one of 5 distinct sentence structures. +; In English, all of these sentences have the exact same structure, +; so this serves no purpose. +GetMoveGrammar: + push bc + ld a, [wMoveGrammar] ; move ID + ld c, a + ld b, $0 + ld hl, MoveGrammar +.loop + ld a, [hli] +; end of table? + cp -1 + jr z, .end +; match? + cp c + jr z, .end +; advance grammar type at 0 + and a + jr nz, .loop +; next grammar type + inc b + jr .loop + +.end +; wMoveGrammar now contains move grammar + ld a, b + ld [wMoveGrammar], a + pop bc + ret + +INCLUDE "data/moves/grammar.asm" diff --git a/engine/events/heal_party.asm b/engine/events/heal_party.asm index e6551bcdd..5532fd920 100644 --- a/engine/events/heal_party.asm +++ b/engine/events/heal_party.asm @@ -11,7 +11,7 @@ HealParty: push hl push de - ld hl, wPartyMon1Status - wPartyMon1HP + ld hl, MON_STATUS - MON_HP add hl, de xor a ld [hl], a @@ -19,7 +19,7 @@ HealParty: push de ld b, NUM_MOVES ; A Pokémon has 4 moves .pp - ld hl, wPartyMon1Moves - wPartyMon1HP + ld hl, MON_MOVES - MON_HP add hl, de ld a, [hl] @@ -27,7 +27,7 @@ HealParty: jr z, .nextmove dec a - ld hl, wPartyMon1PP - wPartyMon1HP + ld hl, MON_PP - MON_HP add hl, de push hl @@ -60,7 +60,7 @@ HealParty: jr nz, .pp pop de - ld hl, wPartyMon1MaxHP - wPartyMon1HP + ld hl, MON_MAXHP - MON_HP add hl, de ld a, [hli] ld [de], a @@ -72,7 +72,7 @@ HealParty: pop hl push hl - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld h, d ld l, e add hl, bc diff --git a/engine/events/hidden_objects/bench_guys.asm b/engine/events/hidden_events/bench_guys.asm similarity index 100% rename from engine/events/hidden_objects/bench_guys.asm rename to engine/events/hidden_events/bench_guys.asm diff --git a/engine/events/hidden_objects/bills_house_pc.asm b/engine/events/hidden_events/bills_house_pc.asm similarity index 100% rename from engine/events/hidden_objects/bills_house_pc.asm rename to engine/events/hidden_events/bills_house_pc.asm diff --git a/engine/events/hidden_objects/blues_room.asm b/engine/events/hidden_events/blues_room.asm similarity index 100% rename from engine/events/hidden_objects/blues_room.asm rename to engine/events/hidden_events/blues_room.asm diff --git a/engine/events/hidden_objects/book_or_sculpture.asm b/engine/events/hidden_events/book_or_sculpture.asm similarity index 100% rename from engine/events/hidden_objects/book_or_sculpture.asm rename to engine/events/hidden_events/book_or_sculpture.asm diff --git a/engine/events/hidden_objects/bookshelves.asm b/engine/events/hidden_events/bookshelves.asm similarity index 100% rename from engine/events/hidden_objects/bookshelves.asm rename to engine/events/hidden_events/bookshelves.asm diff --git a/engine/events/hidden_objects/cinnabar_gym_quiz.asm b/engine/events/hidden_events/cinnabar_gym_quiz.asm similarity index 99% rename from engine/events/hidden_objects/cinnabar_gym_quiz.asm rename to engine/events/hidden_events/cinnabar_gym_quiz.asm index da280345e..c76a97c8b 100644 --- a/engine/events/hidden_objects/cinnabar_gym_quiz.asm +++ b/engine/events/hidden_events/cinnabar_gym_quiz.asm @@ -11,7 +11,7 @@ CinnabarGymQuiz:: ld [wOpponentAfterWrongAnswer], a ld hl, wd474 res 7, [hl] - ld a, [wHiddenObjectFunctionArgument] + ld a, [wHiddenEventFunctionArgument] push af and $f ldh [hGymGateIndex], a diff --git a/engine/events/hidden_objects/elevator.asm b/engine/events/hidden_events/elevator.asm similarity index 100% rename from engine/events/hidden_objects/elevator.asm rename to engine/events/hidden_events/elevator.asm diff --git a/engine/events/hidden_objects/fanclub_pictures.asm b/engine/events/hidden_events/fanclub_pictures.asm similarity index 100% rename from engine/events/hidden_objects/fanclub_pictures.asm rename to engine/events/hidden_events/fanclub_pictures.asm diff --git a/engine/events/hidden_objects/fighting_dojo.asm b/engine/events/hidden_events/fighting_dojo.asm similarity index 100% rename from engine/events/hidden_objects/fighting_dojo.asm rename to engine/events/hidden_events/fighting_dojo.asm diff --git a/engine/events/hidden_objects/gym_statues.asm b/engine/events/hidden_events/gym_statues.asm similarity index 100% rename from engine/events/hidden_objects/gym_statues.asm rename to engine/events/hidden_events/gym_statues.asm diff --git a/engine/events/hidden_objects/indigo_plateau_hq.asm b/engine/events/hidden_events/indigo_plateau_hq.asm similarity index 100% rename from engine/events/hidden_objects/indigo_plateau_hq.asm rename to engine/events/hidden_events/indigo_plateau_hq.asm diff --git a/engine/events/hidden_objects/indigo_plateau_statues.asm b/engine/events/hidden_events/indigo_plateau_statues.asm similarity index 100% rename from engine/events/hidden_objects/indigo_plateau_statues.asm rename to engine/events/hidden_events/indigo_plateau_statues.asm diff --git a/engine/events/hidden_objects/magazines.asm b/engine/events/hidden_events/magazines.asm similarity index 100% rename from engine/events/hidden_objects/magazines.asm rename to engine/events/hidden_events/magazines.asm diff --git a/engine/events/hidden_objects/museum_fossils.asm b/engine/events/hidden_events/museum_fossils.asm similarity index 100% rename from engine/events/hidden_objects/museum_fossils.asm rename to engine/events/hidden_events/museum_fossils.asm diff --git a/engine/events/hidden_objects/museum_fossils2.asm b/engine/events/hidden_events/museum_fossils2.asm similarity index 100% rename from engine/events/hidden_objects/museum_fossils2.asm rename to engine/events/hidden_events/museum_fossils2.asm diff --git a/engine/events/hidden_objects/new_bike.asm b/engine/events/hidden_events/new_bike.asm similarity index 100% rename from engine/events/hidden_objects/new_bike.asm rename to engine/events/hidden_events/new_bike.asm diff --git a/engine/events/hidden_objects/oaks_lab_email.asm b/engine/events/hidden_events/oaks_lab_email.asm similarity index 100% rename from engine/events/hidden_objects/oaks_lab_email.asm rename to engine/events/hidden_events/oaks_lab_email.asm diff --git a/engine/events/hidden_objects/oaks_lab_posters.asm b/engine/events/hidden_events/oaks_lab_posters.asm similarity index 100% rename from engine/events/hidden_objects/oaks_lab_posters.asm rename to engine/events/hidden_events/oaks_lab_posters.asm diff --git a/engine/events/hidden_objects/pokecenter_pc.asm b/engine/events/hidden_events/pokecenter_pc.asm similarity index 100% rename from engine/events/hidden_objects/pokecenter_pc.asm rename to engine/events/hidden_events/pokecenter_pc.asm diff --git a/engine/events/hidden_objects/pokemon_stuff.asm b/engine/events/hidden_events/pokemon_stuff.asm similarity index 100% rename from engine/events/hidden_objects/pokemon_stuff.asm rename to engine/events/hidden_events/pokemon_stuff.asm diff --git a/engine/events/hidden_objects/reds_room.asm b/engine/events/hidden_events/reds_room.asm similarity index 100% rename from engine/events/hidden_objects/reds_room.asm rename to engine/events/hidden_events/reds_room.asm diff --git a/engine/events/hidden_objects/route_15_binoculars.asm b/engine/events/hidden_events/route_15_binoculars.asm similarity index 100% rename from engine/events/hidden_objects/route_15_binoculars.asm rename to engine/events/hidden_events/route_15_binoculars.asm diff --git a/engine/events/hidden_objects/safari_game.asm b/engine/events/hidden_events/safari_game.asm similarity index 100% rename from engine/events/hidden_objects/safari_game.asm rename to engine/events/hidden_events/safari_game.asm diff --git a/engine/events/hidden_objects/school_blackboard.asm b/engine/events/hidden_events/school_blackboard.asm similarity index 99% rename from engine/events/hidden_objects/school_blackboard.asm rename to engine/events/hidden_events/school_blackboard.asm index 75811035b..23022398c 100644 --- a/engine/events/hidden_objects/school_blackboard.asm +++ b/engine/events/hidden_events/school_blackboard.asm @@ -2,7 +2,7 @@ PrintBlackboardLinkCableText: call EnableAutoTextBoxDrawing ld a, $1 ld [wDoNotWaitForButtonPressAfterDisplayingText], a - ld a, [wHiddenObjectFunctionArgument] + ld a, [wHiddenEventFunctionArgument] call PrintPredefTextID ret diff --git a/engine/events/hidden_objects/school_notebooks.asm b/engine/events/hidden_events/school_notebooks.asm similarity index 96% rename from engine/events/hidden_objects/school_notebooks.asm rename to engine/events/hidden_events/school_notebooks.asm index 96a44ab5a..2387c0897 100644 --- a/engine/events/hidden_objects/school_notebooks.asm +++ b/engine/events/hidden_events/school_notebooks.asm @@ -2,7 +2,7 @@ PrintNotebookText: call EnableAutoTextBoxDrawing ld a, $1 ld [wDoNotWaitForButtonPressAfterDisplayingText], a - ld a, [wHiddenObjectFunctionArgument] + ld a, [wHiddenEventFunctionArgument] jp PrintPredefTextID TMNotebook:: diff --git a/engine/events/hidden_objects/town_map.asm b/engine/events/hidden_events/town_map.asm similarity index 100% rename from engine/events/hidden_objects/town_map.asm rename to engine/events/hidden_events/town_map.asm diff --git a/engine/events/hidden_objects/vermilion_gym_trash.asm b/engine/events/hidden_events/vermilion_gym_trash.asm similarity index 98% rename from engine/events/hidden_objects/vermilion_gym_trash.asm rename to engine/events/hidden_events/vermilion_gym_trash.asm index 5f13a0e4e..e83bef51a 100644 --- a/engine/events/hidden_objects/vermilion_gym_trash.asm +++ b/engine/events/hidden_events/vermilion_gym_trash.asm @@ -8,7 +8,7 @@ VermilionGymTrashText:: GymTrashScript: call EnableAutoTextBoxDrawing - ld a, [wHiddenObjectFunctionArgument] + ld a, [wHiddenEventFunctionArgument] ld [wGymTrashCanIndex], a ; Don't do the trash can puzzle if it's already been done. diff --git a/engine/events/hidden_objects/vermilion_gym_trash2.asm b/engine/events/hidden_events/vermilion_gym_trash2.asm similarity index 100% rename from engine/events/hidden_objects/vermilion_gym_trash2.asm rename to engine/events/hidden_events/vermilion_gym_trash2.asm diff --git a/engine/events/hidden_items.asm b/engine/events/hidden_items.asm index 62c40ce44..3ce8b7166 100644 --- a/engine/events/hidden_items.asm +++ b/engine/events/hidden_items.asm @@ -13,7 +13,7 @@ HiddenItems: call EnableAutoTextBoxDrawing ld a, 1 ld [wDoNotWaitForButtonPressAfterDisplayingText], a - ld a, [wHiddenObjectFunctionArgument] ; item ID + ld a, [wHiddenEventFunctionArgument] ; item ID ld [wNamedObjectIndex], a call GetItemName tx_pre_jump FoundHiddenItemText @@ -28,7 +28,7 @@ INCLUDE "data/events/hidden_item_coords.asm" FoundHiddenItemText:: text_far _FoundHiddenItemText text_asm - ld a, [wHiddenObjectFunctionArgument] ; item ID + ld a, [wHiddenEventFunctionArgument] ; item ID ld b, a ld c, 1 call GiveItem @@ -75,7 +75,7 @@ HiddenCoins: ldh [hUnusedCoinsByte], a ldh [hCoins], a ldh [hCoins + 1], a - ld a, [wHiddenObjectFunctionArgument] + ld a, [wHiddenEventFunctionArgument] sub COIN cp 10 jr z, .bcd10 @@ -143,9 +143,9 @@ DroppedHiddenCoinsText:: text_end FindHiddenItemOrCoinsIndex: - ld a, [wHiddenObjectY] + ld a, [wHiddenEventY] ld d, a - ld a, [wHiddenObjectX] + ld a, [wHiddenEventX] ld e, a ld a, [wCurMap] ld b, a diff --git a/engine/events/in_game_trades.asm b/engine/events/in_game_trades.asm index 8c5f4e5cb..fab80adad 100644 --- a/engine/events/in_game_trades.asm +++ b/engine/events/in_game_trades.asm @@ -106,7 +106,7 @@ InGameTrade_DoTrade: jr nz, .tradeFailed ; jump if the selected mon's species is not the required one ld a, [wWhichPokemon] ld hl, wPartyMon1Level - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hl] ld [wCurEnemyLevel], a @@ -178,7 +178,7 @@ InGameTrade_PrepareTradeData: ld de, wLinkEnemyTrainerName call InGameTrade_CopyData ld hl, wPartyMon1OTID - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wWhichPokemon] call AddNTimes ld de, wTradedPlayerMonOTID @@ -211,10 +211,10 @@ InGameTrade_CopyDataToReceivedMon: ld bc, NAME_LENGTH call CopyData ld hl, wPartyMon1OTID - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call InGameTrade_GetReceivedMonPointer ld hl, wTradedEnemyMonOTID - ld bc, $2 + ld bc, 2 jp CopyData ; the received mon's index is (partyCount - 1), diff --git a/engine/events/pick_up_item.asm b/engine/events/pick_up_item.asm index 8fbdcfa23..a55c604a3 100644 --- a/engine/events/pick_up_item.asm +++ b/engine/events/pick_up_item.asm @@ -3,19 +3,19 @@ PickUpItem: ldh a, [hSpriteIndex] ld b, a - ld hl, wMissableObjectList -.missableObjectsListLoop + ld hl, wToggleableObjectList +.toggleableObjectsListLoop ld a, [hli] cp $ff ret z cp b - jr z, .isMissable + jr z, .isToggleable inc hl - jr .missableObjectsListLoop + jr .toggleableObjectsListLoop -.isMissable +.isToggleable ld a, [hl] - ldh [hMissableObjectIndex], a + ldh [hToggleableObjectIndex], a ld hl, wMapSpriteExtraData ldh a, [hSpriteIndex] @@ -30,8 +30,8 @@ PickUpItem: call GiveItem jr nc, .BagFull - ldh a, [hMissableObjectIndex] - ld [wMissableObjectIndex], a + ldh a, [hToggleableObjectIndex] + ld [wToggleableObjectIndex], a predef HideObject ld a, 1 ld [wDoNotWaitForButtonPressAfterDisplayingText], a diff --git a/engine/events/poison.asm b/engine/events/poison.asm index 6dfe1376c..3a26df8fc 100644 --- a/engine/events/poison.asm +++ b/engine/events/poison.asm @@ -78,7 +78,7 @@ ApplyOutOfBattlePoisonDamage: ld a, [de] inc a jr z, .applyDamageLoopDone - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH add hl, bc push hl ld hl, wWhichPokemon @@ -95,7 +95,7 @@ ApplyOutOfBattlePoisonDamage: and 1 << PSN or e ld e, a - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH add hl, bc dec d jr nz, .countPoisonedLoop diff --git a/engine/events/pokemart.asm b/engine/events/pokemart.asm index b280c7117..cb25ab4ce 100644 --- a/engine/events/pokemart.asm +++ b/engine/events/pokemart.asm @@ -99,7 +99,7 @@ DisplayPokemartDialogue_:: dec a jr z, .sellMenuLoop -.sellItem +; sell item ld a, [wBoughtOrSoldItemInMart] and a jr nz, .skipSettingFlag1 @@ -177,7 +177,7 @@ DisplayPokemartDialogue_:: dec a jr z, .buyMenuLoop -.buyItem +; buy item call .isThereEnoughMoney jr c, .notEnoughMoney ld hl, wNumBagItems diff --git a/engine/events/prize_menu.asm b/engine/events/prize_menu.asm index 16ada2160..8f25f2727 100644 --- a/engine/events/prize_menu.asm +++ b/engine/events/prize_menu.asm @@ -196,7 +196,7 @@ HandlePrizeChoice: .getMonName call GetMonName .givePrize - ld hl, SoYouWantPrizeTextPtr + ld hl, SoYouWantPrizeText call PrintText call YesNoChoice ld a, [wCurrentMenuItem] ; yes/no answer (Y=0, N=1) @@ -244,25 +244,25 @@ HandlePrizeChoice: predef SubBCDPredef jp PrintPrizePrice .bagFull - ld hl, PrizeRoomBagIsFullTextPtr + ld hl, PrizeRoomBagIsFullText jp PrintText .notEnoughCoins ld hl, SorryNeedMoreCoinsText jp PrintText .printOhFineThen - ld hl, OhFineThenTextPtr + ld hl, OhFineThenText jp PrintText UnknownPrizeData: ; XXX what's this? db $00,$01,$00,$01,$00,$01,$00,$00,$01 -HereYouGoTextPtr: +HereYouGoText: ; unreferenced text_far _HereYouGoText text_waitbutton text_end -SoYouWantPrizeTextPtr: +SoYouWantPrizeText: text_far _SoYouWantPrizeText text_end @@ -271,12 +271,12 @@ SorryNeedMoreCoinsText: text_waitbutton text_end -PrizeRoomBagIsFullTextPtr: +PrizeRoomBagIsFullText: text_far _OopsYouDontHaveEnoughRoomText text_waitbutton text_end -OhFineThenTextPtr: +OhFineThenText: text_far _OhFineThenText text_waitbutton text_end diff --git a/engine/flag_action.asm b/engine/flag_action.asm index dc516887c..150bebabb 100644 --- a/engine/flag_action.asm +++ b/engine/flag_action.asm @@ -43,10 +43,10 @@ FlagAction: ld a, b and a jr z, .reset - cp 2 + cp FLAG_TEST jr z, .read -.set +; set ld b, [hl] ld a, d or b diff --git a/engine/gfx/load_pokedex_tiles.asm b/engine/gfx/load_pokedex_tiles.asm index a3f691714..b0857137f 100644 --- a/engine/gfx/load_pokedex_tiles.asm +++ b/engine/gfx/load_pokedex_tiles.asm @@ -3,7 +3,7 @@ LoadPokedexTilePatterns: call LoadHpBarAndStatusTilePatterns ld de, PokedexTileGraphics ld hl, vChars2 tile $60 - lb bc, BANK(PokedexTileGraphics), (PokedexTileGraphicsEnd - PokedexTileGraphics) / $10 + lb bc, BANK(PokedexTileGraphics), (PokedexTileGraphicsEnd - PokedexTileGraphics) / TILE_SIZE call CopyVideoData ld de, PokeballTileGraphics ld hl, vChars2 tile $72 diff --git a/engine/gfx/mon_icons.asm b/engine/gfx/mon_icons.asm index 4cc112841..4775084f0 100644 --- a/engine/gfx/mon_icons.asm +++ b/engine/gfx/mon_icons.asm @@ -44,7 +44,7 @@ GetAnimationSpeed: push bc ld hl, wMonPartySpritesSavedOAM ld de, wShadowOAM - ld bc, $60 + ld bc, OBJ_SIZE * 4 * PARTY_LENGTH call CopyData pop bc xor a @@ -52,7 +52,7 @@ GetAnimationSpeed: .animateSprite push bc ld hl, wShadowOAMSprite00TileID - ld bc, $10 + ld bc, OBJ_SIZE * 4 ld a, [wCurrentMenuItem] call AddNTimes ld c, ICONOFFSET @@ -68,8 +68,8 @@ GetAnimationSpeed: ld c, $1 ; amount to increase the y coord by ; otherwise, load a second sprite frame .editTileIDS - ld b, $4 - ld de, $4 + ld b, 4 + ld de, OBJ_SIZE .loop ld a, [hl] add c @@ -266,7 +266,7 @@ WriteMonPartySpriteOAM: .makeCopy ld hl, wShadowOAM ld de, wMonPartySpritesSavedOAM - ld bc, $60 + ld bc, OBJ_SIZE * 4 * PARTY_LENGTH jp CopyData GetPartyMonSpriteID: diff --git a/engine/gfx/palettes.asm b/engine/gfx/palettes.asm index e46c6715f..359f235c5 100644 --- a/engine/gfx/palettes.asm +++ b/engine/gfx/palettes.asm @@ -1071,7 +1071,7 @@ CopySGBBorderTiles: ld b, 128 .tileLoop ; Copy bit planes 1 and 2 of the tile data. - ld c, 16 + ld c, TILE_SIZE .copyLoop ld a, [hli] ld [de], a diff --git a/engine/gfx/sprite_oam.asm b/engine/gfx/sprite_oam.asm index a1549c6cc..3b869394e 100644 --- a/engine/gfx/sprite_oam.asm +++ b/engine/gfx/sprite_oam.asm @@ -141,12 +141,12 @@ PrepareOAMData:: .asm_4a41 ld a, [wMovementFlags] bit BIT_LEDGE_OR_FISHING, a - ld c, $a0 + ld c, LOW(wShadowOAMEnd) jr z, .clear ; Don't clear the last 4 entries because they are used for the shadow in the ; jumping down ledge animation and the rod in the fishing animation. - ld c, $90 + ld c, LOW(wShadowOAMSprite36) .clear ldh a, [hOAMBufferOffset] diff --git a/engine/items/inventory.asm b/engine/items/inventory.asm index 758c81d70..caa9dd22e 100644 --- a/engine/items/inventory.asm +++ b/engine/items/inventory.asm @@ -119,7 +119,6 @@ RemoveItemFromInventory_:: jr nz, .skipMovingUpSlots ; if the remaining quantity is 0, ; remove the emptied item slot and move up all the following item slots -.moveSlotsUp ld e, l ld d, h inc de diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm index 31684719c..0cbb0c48d 100644 --- a/engine/items/item_effects.asm +++ b/engine/items/item_effects.asm @@ -669,7 +669,7 @@ ItemUseBicycle: jp z, ItemUseNotTime dec a ; is player already bicycling? jr nz, .tryToGetOnBike -.getOffBike +; get off bike call ItemUseReloadOverworldData xor a ld [wWalkBikeSurfState], a ; change player state to walking @@ -702,13 +702,13 @@ ItemUseSurfboard: ld [wWalkBikeSurfStateCopy], a cp 2 ; is the player already surfing? jr z, .tryToStopSurfing -.tryToSurf +; try to Surf call IsNextTileShoreOrWater jp nc, SurfingAttemptFailed ld hl, TilePairCollisionsWater call CheckForTilePairCollisions jp c, SurfingAttemptFailed -.surf +; surfing call .makePlayerMoveForward ld hl, wStatusFlags5 set BIT_SCRIPTED_MOVEMENT_STATE, [hl] @@ -923,7 +923,7 @@ ItemUseMedicine: .getPartyMonDataAddress jp c, .canceledItemUse ld hl, wPartyMons - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wWhichPokemon] call AddNTimes ld a, [wWhichPokemon] @@ -965,7 +965,7 @@ ItemUseMedicine: jr nc, .healHP ; if it's a Full Restore or one of the potions ; fall through if it's one of the status-specific healing items .cureStatusAilment - ld bc, wPartyMon1Status - wPartyMon1 + ld bc, MON_STATUS add hl, bc ; hl now points to status ld a, [wCurItem] lb bc, ANTIDOTE_MSG, 1 << PSN @@ -1003,7 +1003,7 @@ ItemUseMedicine: ld hl, wPlayerBattleStatus3 res BADLY_POISONED, [hl] ; heal Toxic status pop hl - ld bc, wPartyMon1Stats - wPartyMon1Status + ld bc, MON_STATS - MON_STATUS add hl, bc ; hl now points to party stats ld de, wBattleMonStats ld bc, NUM_STATS * 2 @@ -1021,7 +1021,7 @@ ItemUseMedicine: ld [wHPBarOldHP], a ; current HP stored at wHPBarOldHP (2 bytes, big-endian) or b jr nz, .notFainted -.fainted +; fainted ld a, [wCurItem] cp REVIVE jr z, .updateInBattleFaintedData @@ -1078,7 +1078,7 @@ ItemUseMedicine: .compareCurrentHPToMaxHP push hl push bc - ld bc, wPartyMon1MaxHP - (wPartyMon1HP + 1) + ld bc, MON_MAXHP - (MON_HP + 1) add hl, bc ; hl now points to max HP pop bc ld a, [hli] @@ -1089,7 +1089,7 @@ ItemUseMedicine: .skipComparingLSB pop hl jr nz, .notFullHP -.fullHP ; if the pokemon's current HP equals its max HP +; if the pokemon's current HP equals its max HP ld a, [wCurItem] cp FULL_RESTORE jp nz, .healingItemNoEffect @@ -1111,7 +1111,7 @@ ItemUseMedicine: ld [wChannelSoundIDs + CHAN5], a push hl push de - ld bc, wPartyMon1MaxHP - (wPartyMon1HP + 1) + ld bc, MON_MAXHP - (MON_HP + 1) add hl, bc ; hl now points to max HP ld a, [hli] ld [wHPBarMaxHP+1], a @@ -1132,7 +1132,7 @@ ItemUseMedicine: push af ld hl, wPartyMon1MaxHP ld a, [wWhichPokemon] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hli] ld [wHPBarMaxHP + 1], a @@ -1144,7 +1144,7 @@ ItemUseMedicine: ldh [hDivisor], a ld b, 2 ; number of bytes call Divide ; get 1/5 of max HP of pokemon that used Softboiled - ld bc, (wPartyMon1HP + 1) - (wPartyMon1MaxHP + 1) + ld bc, (MON_HP + 1) - (MON_MAXHP + 1) add hl, bc ; hl now points to LSB of current HP of pokemon that used Softboiled ; subtract 1/5 of max HP from current HP of pokemon that used Softboiled ldh a, [hQuotient + 3] @@ -1224,7 +1224,7 @@ ItemUseMedicine: inc hl ld d, h ld e, l ; de now points to current HP - ld hl, (wPartyMon1MaxHP + 1) - (wPartyMon1HP + 1) + ld hl, (MON_MAXHP + 1) - (MON_HP + 1) add hl, de ; hl now points to max HP ld a, [wCurItem] cp REVIVE @@ -1273,7 +1273,7 @@ ItemUseMedicine: ld a, [wCurItem] cp FULL_RESTORE jr nz, .updateInBattleData - ld bc, wPartyMon1Status - (wPartyMon1MaxHP + 1) + ld bc, MON_STATUS - (MON_MAXHP + 1) add hl, bc xor a ld [hl], a ; remove the status ailment in the party data @@ -1381,7 +1381,7 @@ ItemUseMedicine: ld a, [hl] ld [wCurSpecies], a ld [wPokedexNum], a - ld bc, wPartyMon1Level - wPartyMon1 + ld bc, MON_LEVEL add hl, bc ; hl now points to level ld a, [hl] ; a = level ld [wCurEnemyLevel], a ; store level @@ -1398,7 +1398,7 @@ ItemUseMedicine: push hl sub HP_UP add a - ld bc, wPartyMon1HPExp - wPartyMon1 + ld bc, MON_HP_EXP add hl, bc add l ld l, a @@ -1427,14 +1427,14 @@ ItemUseMedicine: .statNameInnerLoop ld a, [hli] ld b, a - ld a, $50 + ld a, '@' cp b jr nz, .statNameInnerLoop jr .statNameLoop .gotStatName ld de, wStringBuffer - ld bc, 10 + ld bc, STAT_NAME_LENGTH call CopyData ; copy the stat's name to wStringBuffer ld a, SFX_HEAL_AILMENT call PlaySound @@ -1449,17 +1449,17 @@ ItemUseMedicine: jp GBPalWhiteOut .recalculateStats - ld bc, wPartyMon1Stats - wPartyMon1 + ld bc, MON_STATS add hl, bc ld d, h ld e, l ; de now points to stats - ld bc, (wPartyMon1Exp + 2) - wPartyMon1Stats + ld bc, (MON_EXP + 2) - MON_STATS add hl, bc ; hl now points to LSB of experience ld b, 1 jp CalcStats ; recalculate stats .useRareCandy push hl - ld bc, wPartyMon1Level - wPartyMon1 + ld bc, MON_LEVEL add hl, bc ; hl now points to level ld a, [hl] ; a = level cp MAX_LEVEL @@ -1473,7 +1473,7 @@ ItemUseMedicine: callfar CalcExperience ; calculate experience for next level and store it at hExperience pop de pop hl - ld bc, wPartyMon1Exp - wPartyMon1Level + ld bc, MON_EXP - MON_LEVEL add hl, bc ; hl now points to MSB of experience ; update experience to minimum for new level ldh a, [hExperience] @@ -1489,7 +1489,7 @@ ItemUseMedicine: push af push de push hl - ld bc, wPartyMon1MaxHP - wPartyMon1 + ld bc, MON_MAXHP add hl, bc ; hl now points to MSB of max HP ld a, [hli] ld b, a @@ -1499,7 +1499,7 @@ ItemUseMedicine: push hl call .recalculateStats pop hl - ld bc, (wPartyMon1MaxHP + 1) - wPartyMon1 + ld bc, (MON_MAXHP + 1) add hl, bc ; hl now points to LSB of max HP pop bc ld a, [hld] @@ -1509,7 +1509,7 @@ ItemUseMedicine: sbc b ld b, a ; bc = the amount of max HP gained from leveling up ; add the amount gained to the current HP - ld de, (wPartyMon1HP + 1) - wPartyMon1MaxHP + ld de, (MON_HP + 1) - MON_MAXHP add hl, de ; hl now points to LSB of current HP ld a, [hl] add c @@ -1528,12 +1528,12 @@ ItemUseMedicine: xor a ; PLAYER_PARTY_DATA ld [wMonDataLocation], a call LoadMonData - ld d, $01 - callfar PrintStatsBox ; display new stats text box - call WaitForTextScrollButtonPress ; wait for button press + ld d, LEVEL_UP_STATS_BOX + callfar PrintStatsBox + call WaitForTextScrollButtonPress xor a ; PLAYER_PARTY_DATA ld [wMonDataLocation], a - predef LearnMoveFromLevelUp ; learn level up move, if any + predef LearnMoveFromLevelUp xor a ld [wForceEvolution], a @@ -1542,7 +1542,7 @@ ItemUseMedicine: push af ld a, [wUsedItemOnWhichPokemon] ld [wWhichPokemon], a - callfar RespawnOverworldPikachu ; evolve pokemon, if appropriate + callfar RespawnOverworldPikachu pop af ld [wWhichPokemon], a @@ -1571,11 +1571,11 @@ INCLUDE "data/battle/stat_names.asm" ItemUseBait: ld hl, ThrewBaitText call PrintText - ld hl, wEnemyMonActualCatchRate ; catch rate + ld hl, wEnemyMonActualCatchRate srl [hl] ; halve catch rate ld a, BAIT_ANIM - ld hl, wSafariBaitFactor ; bait factor - ld de, wSafariEscapeFactor ; escape factor + ld hl, wSafariBaitFactor + ld de, wSafariEscapeFactor jr BaitRockCommon ; for CASCADEBADGE when used from the @@ -1584,7 +1584,7 @@ ItemUseBait: ItemUseRock: ld hl, ThrewRockText call PrintText - ld hl, wEnemyMonActualCatchRate ; catch rate + ld hl, wEnemyMonActualCatchRate ld a, [hl] add a ; double catch rate jr nc, .noCarry @@ -1592,8 +1592,8 @@ ItemUseRock: .noCarry ld [hl], a ld a, ROCK_ANIM - ld hl, wSafariEscapeFactor ; escape factor - ld de, wSafariBaitFactor ; bait factor + ld hl, wSafariEscapeFactor + ld de, wSafariBaitFactor BaitRockCommon: ld [wAnimationID], a @@ -1954,8 +1954,8 @@ ItemUsePokeFlute: ; OUTPUT: ; [wWereAnyMonsAsleep]: set to 1 if any pokemon were asleep WakeUpEntireParty: - ld de, 44 - ld c, 6 + ld de, PARTYMON_STRUCT_LENGTH + ld c, PARTY_LENGTH .loop ld a, [hl] push af @@ -2221,7 +2221,7 @@ ItemUsePPRestore: ld [wPlayerMoveListIndex], a jr nz, .chooseMon ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call GetSelectedMoveOffset push hl ld a, [hl] @@ -2232,8 +2232,8 @@ ItemUsePPRestore: ld a, [wPPRestoreItem] cp ETHER jr nc, .useEther ; if Ether or Max Ether -.usePPUp - ld bc, wPartyMon1PP - wPartyMon1Moves +; use PP Up + ld bc, MON_PP - MON_MOVES add hl, bc ld a, [hl] ; move PP cp 3 << 6 ; have 3 PP Ups already been used? @@ -2267,10 +2267,10 @@ ItemUsePPRestore: cp b ; is the pokemon whose PP was restored active in battle? jr nz, .skipUpdatingInBattleData ld hl, wPartyMon1PP - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld de, wBattleMonPP - ld bc, 4 + ld bc, NUM_MOVES call CopyData ; copy party data to in-battle data .skipUpdatingInBattleData ld a, SFX_HEAL_AILMENT @@ -2291,9 +2291,9 @@ ItemUsePPRestore: ld [wMonDataLocation], a call GetMaxPP ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call GetSelectedMoveOffset - ld bc, wPartyMon1PP - wPartyMon1Moves + ld bc, MON_PP - MON_MOVES add hl, bc ; hl now points to move's PP ld a, [wMaxPP] ld b, a @@ -2343,7 +2343,7 @@ ItemUsePPRestore: .elixirLoop push bc ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call GetSelectedMoveOffset ld a, [hl] and a ; does the current slot have a move? @@ -2441,7 +2441,7 @@ ItemUseTMHM: .chooseMon ld hl, wStringBuffer ld de, wTempMoveNameBuffer - ld bc, ITEM_NAME_LENGTH + 1 + ld bc, MOVE_NAME_LENGTH call CopyData ; save the move name because DisplayPartyMenu will overwrite it ld a, $ff ld [wUpdateSpritesEnabled], a @@ -2451,7 +2451,7 @@ ItemUseTMHM: push af ld hl, wTempMoveNameBuffer ld de, wStringBuffer - ld bc, ITEM_NAME_LENGTH + 1 + ld bc, MOVE_NAME_LENGTH call CopyData pop af jr nc, .checkIfAbleToLearnMove @@ -2656,14 +2656,14 @@ GotOffBicycleText: ; [wCurrentMenuItem] = index of move (when using a PP Up) RestoreBonusPP: ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wWhichPokemon] call AddNTimes push hl ld de, wNormalMaxPPList - 1 predef LoadMovePPs ; loads the normal max PP of each of the pokemon's moves to wNormalMaxPPList pop hl - ld c, wPartyMon1PP - wPartyMon1Moves + ld c, MON_PP - MON_MOVES ld b, 0 add hl, bc ; hl now points to move 1 PP ld de, wNormalMaxPPList @@ -2749,13 +2749,13 @@ GetMaxPP: ld a, [wMonDataLocation] and a ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH jr z, .sourceWithMultipleMon ld hl, wEnemyMon1Moves dec a jr z, .sourceWithMultipleMon ld hl, wBoxMon1Moves - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH dec a jr z, .sourceWithMultipleMon ld hl, wDayCareMonMoves @@ -2783,7 +2783,7 @@ GetMaxPP: ld b, a ; b = normal max PP pop hl push bc - ld bc, wPartyMon1PP - wPartyMon1Moves ; PP offset if not player's in-battle pokemon data + ld bc, MON_PP - MON_MOVES ; PP offset if not player's in-battle pokemon data ld a, [wMonDataLocation] cp 4 ; player's in-battle pokemon? jr nz, .addPPOffset @@ -2928,29 +2928,33 @@ IsKeyItem_:: INCLUDE "data/items/key_items.asm" +; store the new mon in the first slot, shifting all existing box data down SendNewMonToBox: ld de, wBoxCount ld a, [de] inc a ld [de], a + ld a, [wCurPartySpecies] ld [wCurSpecies], a ld c, a -.loop +.shiftSpeciesLoop inc de ld a, [de] ld b, a ld a, c ld c, b ld [de], a - cp $ff - jr nz, .loop + cp -1 + jr nz, .shiftSpeciesLoop + call GetMonHeader ld hl, wBoxMonOT ld bc, NAME_LENGTH ld a, [wBoxCount] dec a - jr z, .skip + jr z, .skipOTshift ; if the box was empty, there is nothing to shift + dec a call AddNTimes push hl @@ -2962,7 +2966,7 @@ SendNewMonToBox: ld a, [wBoxCount] dec a ld b, a -.loop2 +.shiftMonOTLoop push bc push hl ld bc, NAME_LENGTH @@ -2974,15 +2978,18 @@ SendNewMonToBox: add hl, bc pop bc dec b - jr nz, .loop2 -.skip + jr nz, .shiftMonOTLoop + +.skipOTshift ld hl, wPlayerName - ld de, wBoxMonOT + ld de, wBoxMon1OT ld bc, NAME_LENGTH call CopyData + ld a, [wBoxCount] dec a - jr z, .skip2 + jr z, .skipNickShift + ld hl, wBoxMonNicks ld bc, NAME_LENGTH dec a @@ -2996,7 +3003,7 @@ SendNewMonToBox: ld a, [wBoxCount] dec a ld b, a -.loop3 +.shiftNickLoop push bc push hl ld bc, NAME_LENGTH @@ -3008,21 +3015,24 @@ SendNewMonToBox: add hl, bc pop bc dec b - jr nz, .loop3 -.skip2 - ld hl, wBoxMonNicks + jr nz, .shiftNickLoop + +.skipNickShift + ld hl, wBoxMon1Nick ld a, NAME_MON_SCREEN ld [wNamingScreenType], a predef AskName + ld a, [wBoxCount] dec a - jr z, .skip3 + jr z, .skipMonDataShift + ld hl, wBoxMons - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH dec a call AddNTimes push hl - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH add hl, bc ld d, h ld e, l @@ -3030,20 +3040,21 @@ SendNewMonToBox: ld a, [wBoxCount] dec a ld b, a -.loop4 +.shiftMonDataLoop push bc push hl - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH call CopyData pop hl ld d, h ld e, l - ld bc, wBoxMon1 - wBoxMon2 + ld bc, -BOXMON_STRUCT_LENGTH add hl, bc pop bc dec b - jr nz, .loop4 -.skip3 + jr nz, .shiftMonDataLoop + +.skipMonDataShift ld a, [wEnemyMonLevel] ld [wEnemyMonBoxLevel], a ld hl, wEnemyMon @@ -3073,11 +3084,12 @@ SendNewMonToBox: inc de xor a ld b, NUM_STATS * 2 -.loop5 +.statLoop ld [de], a inc de dec b - jr nz, .loop5 + jr nz, .statLoop + ld hl, wEnemyMonDVs ld a, [hli] ld [de], a @@ -3086,12 +3098,12 @@ SendNewMonToBox: ld [de], a ld hl, wEnemyMonPP ld b, NUM_MOVES -.loop6 +.movePPLoop ld a, [hli] inc de ld [de], a dec b - jr nz, .loop6 + jr nz, .movePPLoop ld a, [wCurPartySpecies] cp KADABRA jr nz, .notKadabra diff --git a/engine/items/tmhm.asm b/engine/items/tmhm.asm index a11cd7361..bac92f5d5 100644 --- a/engine/items/tmhm.asm +++ b/engine/items/tmhm.asm @@ -2,7 +2,7 @@ CheckIfMoveIsKnown: ld a, [wWhichPokemon] ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [wMoveNum] ld b, a diff --git a/engine/items/town_map.asm b/engine/items/town_map.asm index a7093cfc9..fe2745799 100644 --- a/engine/items/town_map.asm +++ b/engine/items/town_map.asm @@ -20,11 +20,11 @@ DisplayTownMap: call PlaceString ld hl, wShadowOAMSprite00 ld de, wShadowOAMBackupSprite00 - ld bc, 4 * 4 + ld bc, OBJ_SIZE * 4 call CopyData ld hl, vSprites tile BIRD_BASE_TILE ld de, TownMapCursor - lb bc, BANK(TownMapCursor), (TownMapCursorEnd - TownMapCursor) / $8 + lb bc, BANK(TownMapCursor), (TownMapCursorEnd - TownMapCursor) / TILE_1BPP_SIZE call CopyVideoDataDouble xor a ld [wWhichTownMapLocation], a @@ -64,7 +64,7 @@ DisplayTownMap: call PlaceString ld hl, wShadowOAMSprite04 ld de, wShadowOAMBackupSprite04 - ld bc, 4 * 4 + ld bc, OBJ_SIZE * 4 call CopyData .inputLoop call TownMapSpriteBlinkingAnimation @@ -159,7 +159,7 @@ LoadTownMap_Fly:: call CopyVideoData ld de, TownMapUpArrow ld hl, vChars1 tile $6d - lb bc, BANK(TownMapUpArrow), (TownMapUpArrowEnd - TownMapUpArrow) / $8 + lb bc, BANK(TownMapUpArrow), (TownMapUpArrowEnd - TownMapUpArrow) / TILE_1BPP_SIZE call CopyVideoDataDouble call BuildFlyLocationsList ld hl, wUpdateSpritesEnabled @@ -618,11 +618,11 @@ TownMapSpriteBlinkingAnimation:: xor a jr .done .hideSprites - ld hl, wShadowOAM + ld hl, wShadowOAMSprite00YCoord ld b, OAM_COUNT - 4 - ld de, $4 + ld de, OBJ_SIZE .hideSpritesLoop - ld [hl], $a0 + ld [hl], SCREEN_HEIGHT_PX + OAM_Y_OFS add hl, de dec b jr nz, .hideSpritesLoop diff --git a/engine/link/cable_club.asm b/engine/link/cable_club.asm index d66dc608b..716b14412 100644 --- a/engine/link/cable_club.asm +++ b/engine/link/cable_club.asm @@ -679,7 +679,7 @@ TradeCenter_PrintPartyListNames: pop de inc de pop hl - ld bc, 20 + ld bc, SCREEN_WIDTH add hl, bc pop bc inc c @@ -766,9 +766,9 @@ TradeCenter_Trade: call CopyData ld hl, wPartyMon1Species ld a, [wTradingWhichPlayerMon] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes - ld bc, wPartyMon1OTID - wPartyMon1 + ld bc, MON_OTID add hl, bc ld a, [hli] ld [wTradedPlayerMonOTID], a @@ -782,9 +782,9 @@ TradeCenter_Trade: call CopyData ld hl, wEnemyMons ld a, [wTradingWhichEnemyMon] - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes - ld bc, wEnemyMon1OTID - wEnemyMon1 + ld bc, MON_OTID add hl, bc ld a, [hli] ld [wTradedEnemyMonOTID], a @@ -813,10 +813,10 @@ TradeCenter_Trade: ld [wCurPartySpecies], a ld hl, wEnemyMons ld a, c - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld de, wLoadedMon - ld bc, wEnemyMon2 - wEnemyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call CopyData call AddEnemyMonToPlayerParty ld a, [wPartyCount] @@ -983,5 +983,5 @@ CableClub_DrawHorizontalLine: LoadTrainerInfoTextBoxTiles: ld de, TrainerInfoTextBoxTileGraphics ld hl, vChars2 tile $76 - lb bc, BANK(TrainerInfoTextBoxTileGraphics), (TrainerInfoTextBoxTileGraphicsEnd - TrainerInfoTextBoxTileGraphics) / $10 + lb bc, BANK(TrainerInfoTextBoxTileGraphics), (TrainerInfoTextBoxTileGraphicsEnd - TrainerInfoTextBoxTileGraphics) / TILE_SIZE jp CopyVideoData diff --git a/engine/menus/display_text_id_init.asm b/engine/menus/display_text_id_init.asm index ca8280062..1dda338d9 100644 --- a/engine/menus/display_text_id_init.asm +++ b/engine/menus/display_text_id_init.asm @@ -40,8 +40,8 @@ DisplayTextIDInit:: ; this is done because when you talk to an NPC, they turn to look your way ; the original direction they were facing must be restored after the dialogue is over ld hl, wSprite01StateData1FacingDirection - ld c, $0f - ld de, $10 + ld c, NUM_SPRITESTATEDATA_STRUCTS - 1 + ld de, SPRITESTATEDATA1_LENGTH .spriteFacingDirectionCopyLoop ld a, [hl] ; x#SPRITESTATEDATA1_FACINGDIRECTION inc h @@ -53,7 +53,8 @@ DisplayTextIDInit:: ; loop to force all the sprites in the middle of animation to stand still ; (so that they don't like they're frozen mid-step during the dialogue) ld hl, wSpritePlayerStateData1ImageIndex - ld de, $10 + ld de, SPRITESTATEDATA1_LENGTH + ASSERT NUM_SPRITESTATEDATA_STRUCTS == SPRITESTATEDATA1_LENGTH ld c, e .spriteStandStillLoop ld a, [hl] diff --git a/engine/menus/naming_screen.asm b/engine/menus/naming_screen.asm index 38da8afeb..5b4b2415f 100644 --- a/engine/menus/naming_screen.asm +++ b/engine/menus/naming_screen.asm @@ -239,11 +239,11 @@ DisplayNamingScreen: cp NAME_MON_SCREEN jr nc, .checkMonNameLength ld a, [wNamingScreenNameLength] - cp $7 ; max length of player/rival names + cp PLAYER_NAME_LENGTH - 1 jr .checkNameLength .checkMonNameLength ld a, [wNamingScreenNameLength] - cp $a ; max length of pokemon nicknames + cp NAME_LENGTH - 1 .checkNameLength jr c, .addLetter ret @@ -394,12 +394,13 @@ PrintNicknameAndUnderscores: hlcoord 10, 3 ld a, [wNamingScreenType] cp NAME_MON_SCREEN - jr nc, .pokemon1 - ld b, 7 ; player or rival max name length - jr .playerOrRival1 -.pokemon1 - ld b, 10 ; pokemon max name length -.playerOrRival1 + jr nc, .pokemon +; player or rival + ld b, PLAYER_NAME_LENGTH - 1 + jr .gotUnderscoreCount +.pokemon + ld b, NAME_LENGTH - 1 +.gotUnderscoreCount ld a, $76 ; underscore tile id .placeUnderscoreLoop ld [hli], a @@ -409,13 +410,15 @@ PrintNicknameAndUnderscores: cp NAME_MON_SCREEN ld a, [wNamingScreenNameLength] jr nc, .pokemon2 - cp 7 ; player or rival max name length - jr .playerOrRival2 +; player or rival + cp PLAYER_NAME_LENGTH - 1 + jr .checkEmptySpaces .pokemon2 - cp 10 ; pokemon max name length -.playerOrRival2 - jr nz, .emptySpacesRemaining - ; when all spaces are filled, force the cursor onto the ED tile + cp NAME_LENGTH - 1 +.checkEmptySpaces + jr nz, .placeRaisedUnderscore ; jump if empty spaces remain + ; when all spaces are filled, force the cursor onto the ED tile, + ; and keep the last underscore raised call EraseMenuCursor ld a, $11 ; "ED" x coord ld [wTopMenuItemX], a @@ -423,11 +426,10 @@ PrintNicknameAndUnderscores: ld [wCurrentMenuItem], a ld a, [wNamingScreenType] cp NAME_MON_SCREEN - ld a, 9 ; keep the last underscore raised - jr nc, .pokemon3 - ld a, 6 ; keep the last underscore raised -.pokemon3 -.emptySpacesRemaining + ld a, NAME_LENGTH - 2 + jr nc, .placeRaisedUnderscore + ld a, PLAYER_NAME_LENGTH - 2 +.placeRaisedUnderscore ld c, a ld b, $0 hlcoord 10, 3 diff --git a/engine/menus/party_menu.asm b/engine/menus/party_menu.asm index d994c15f1..24d2aa13b 100644 --- a/engine/menus/party_menu.asm +++ b/engine/menus/party_menu.asm @@ -110,7 +110,7 @@ RedrawPartyMenu_:: pop hl pop de inc de - ld bc, 2 * 20 + ld bc, 2 * SCREEN_WIDTH add hl, bc pop bc inc c diff --git a/engine/menus/pokedex.asm b/engine/menus/pokedex.asm index 48c5ab017..dcf558203 100644 --- a/engine/menus/pokedex.asm +++ b/engine/menus/pokedex.asm @@ -118,7 +118,7 @@ ELSE jr z, .chosePrint ENDC vc_patch_end -.choseQuit +; chose Quit ld b, 1 .exitSideMenu pop af @@ -484,8 +484,8 @@ HeightWeightText: db "HT ?′??″" next "WT ???lb@" -; XXX does anything point to this? -PokeText: +; leftover from JPN Pokedex, where species have the suffix "Pokemon" +PokeText: ; unreferenced db "#@" ; horizontal line that divides the pokedex text description from the rest of the data diff --git a/engine/menus/save.asm b/engine/menus/save.asm index 768b6e8b0..bc427936a 100644 --- a/engine/menus/save.asm +++ b/engine/menus/save.asm @@ -214,15 +214,15 @@ SaveMainData: ld de, sSpriteData ld bc, wSpriteDataEnd - wSpriteDataStart call CopyData - ld hl, wBoxDataStart ; this part is redundant, SaveCurrentBoxData is always called next + ld hl, wBoxDataStart ld de, sCurBoxData ld bc, wBoxDataEnd - wBoxDataStart call CopyData + ldh a, [hTileAnimations] ld [sTileAnimations], a - ld hl, sGameData ld bc, sGameDataEnd - sGameData call CalcCheckSum diff --git a/engine/menus/start_sub_menus.asm b/engine/menus/start_sub_menus.asm index 7e8010681..dfbb0f134 100644 --- a/engine/menus/start_sub_menus.asm +++ b/engine/menus/start_sub_menus.asm @@ -253,7 +253,7 @@ StartMenu_Pokemon:: .softboiled ld hl, wPartyMon1MaxHP ld a, [wWhichPokemon] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hli] ldh [hDividend], a @@ -263,7 +263,7 @@ StartMenu_Pokemon:: ldh [hDivisor], a ld b, 2 ; number of bytes call Divide - ld bc, wPartyMon1HP - wPartyMon1MaxHP + ld bc, MON_HP - MON_MAXHP add hl, bc ld a, [hld] ld b, a @@ -357,7 +357,7 @@ StartMenu_Item:: ld a, [wCurItem] cp BICYCLE jp z, .useOrTossItem -.notBicycle1 +; not Bicycle ld a, USE_TOSS_MENU_TEMPLATE ld [wTextBoxID], a call DisplayTextBoxID @@ -387,14 +387,14 @@ StartMenu_Item:: call CopyToStringBuffer ld a, [wCurItem] cp BICYCLE - jr nz, .notBicycle2 + jr nz, .notBicycle ld a, [wStatusFlags6] bit BIT_ALWAYS_ON_BIKE, a jr z, .useItem_closeMenu ld hl, CannotGetOffHereText call PrintText jp ItemMenuLoop -.notBicycle2 +.notBicycle ld a, [wCurrentMenuItem] and a jr nz, .tossItem @@ -529,7 +529,7 @@ DrawTrainerInfo: ld de, 13 tiles add hl, de ; hl = colon tile pattern ld de, vChars1 tile $56 - ld bc, 1 tiles + ld bc, TILE_SIZE ld a, BANK(TextBoxGraphics) push bc call FarCopyData @@ -695,13 +695,13 @@ SwitchPartyMon_ClearGfx: dec c jr nz, .clearMonBGLoop pop af - ld hl, wShadowOAM - ld bc, $10 + ld hl, wShadowOAMSprite00YCoord + ld bc, OBJ_SIZE * 4 call AddNTimes - ld de, $4 + ld de, OBJ_SIZE ld c, e .clearMonOAMLoop - ld [hl], $a0 + ld [hl], SCREEN_HEIGHT_PX + OAM_Y_OFS add hl, de dec c jr nz, .clearMonOAMLoop @@ -761,24 +761,24 @@ SwitchPartyMon_InitVarOrSwapData: ldh a, [hSwapTemp] ld [de], a ld hl, wPartyMons - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wCurrentMenuItem] call AddNTimes push hl ld de, wSwitchPartyMonTempBuffer - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call CopyData ld hl, wPartyMons - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wMenuItemToSwap] call AddNTimes pop de push hl - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call CopyData pop de ld hl, wSwitchPartyMonTempBuffer - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call CopyData ld hl, wPartyMonOT ld a, [wCurrentMenuItem] diff --git a/engine/menus/swap_items.asm b/engine/menus/swap_items.asm index 2d506ce28..dc54b6456 100644 --- a/engine/menus/swap_items.asm +++ b/engine/menus/swap_items.asm @@ -76,7 +76,7 @@ HandleItemListSwapping:: ld a, [hli] cp b jr z, .swapSameItemType -.swapDifferentItems +; swap different items ldh [hSwapItemID], a ; save second item ID ld a, [hld] ldh [hSwapItemQuantity], a ; save second item quantity diff --git a/engine/menus/text_box.asm b/engine/menus/text_box.asm index a9d5b4c9e..d31443864 100644 --- a/engine/menus/text_box.asm +++ b/engine/menus/text_box.asm @@ -481,7 +481,7 @@ PokemonMenuEntries: GetMonFieldMoves: ld a, [wWhichPokemon] ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld d, h ld e, l diff --git a/engine/movie/credits.asm b/engine/movie/credits.asm index 149f51a7d..dd8050bf9 100644 --- a/engine/movie/credits.asm +++ b/engine/movie/credits.asm @@ -38,7 +38,7 @@ HallOfFamePC: ld [wNumCreditsMonsDisplayed], a jp Credits -FadeInCreditsText: +FadeInCredits: ld a, 1 ldh [hAutoBGTransferEnabled], a ld hl, HoFGBPalettes @@ -137,30 +137,33 @@ CreditsCopyTileMapToVRAM: CreditsLoadFont: call LoadFontTilePatterns - ld hl, vChars1 + ld hl, vFont ld bc, ($80 tiles) / 2 - call ZeroMemory + call ShiftFontColorIndex call LoadTextBoxTilePatterns ld hl, vChars2 tile $60 ld bc, ($20 tiles) / 2 - call ZeroMemory + call ShiftFontColorIndex ld hl, vChars2 tile $7e - ld bc, 1 tiles + ld bc, TILE_SIZE ld a, $ff ; solid black call FillMemory ret -ZeroMemory: -; zero bc bytes at hl +ShiftFontColorIndex: +; Zero every second byte at hl, writing a total of bc bytes. +; When used on VRAM font characters that contain only black and white shades, +; it shifts the color index: black -> light gray, allowing palette-controlled +; text fade-in during the Credits roll, while the black bars remain solid. ld [hl], 0 inc hl inc hl dec bc ld a, b or c - jr nz, ZeroMemory + jr nz, ShiftFontColorIndex ret FillFourRowsWithBlack: @@ -243,7 +246,7 @@ Credits: ; Roll credits .fadeInTextAndShowMon - call FadeInCreditsText + call FadeInCredits ld c, 102 jr .next1 @@ -255,7 +258,7 @@ Credits: ; Roll credits jr .nextCreditsScreen .fadeInText - call FadeInCreditsText + call FadeInCredits ld c, 132 jr .next2 @@ -275,7 +278,7 @@ ShowTheEndGFX: call FillMiddleOfScreenWithWhite ld de, TheEndGfx ld hl, vChars2 tile $60 - lb bc, BANK(TheEndGfx), (TheEndGfxEnd - TheEndGfx) / $10 + lb bc, BANK(TheEndGfx), (TheEndGfxEnd - TheEndGfx) / TILE_SIZE call CopyVideoData hlcoord 4, 8 ld de, TheEndTextString @@ -283,7 +286,7 @@ ShowTheEndGFX: hlcoord 4, 9 inc de call PlaceString - jp FadeInCreditsText + jp FadeInCredits TheEndTextString: ; "T H E E N D" diff --git a/engine/movie/evolution.asm b/engine/movie/evolution.asm index 9d24c0d5e..d3b91b4fe 100644 --- a/engine/movie/evolution.asm +++ b/engine/movie/evolution.asm @@ -28,7 +28,7 @@ EvolveMon: call Evolution_LoadPic ld de, vFrontPic ld hl, vBackPic - ld bc, 7 * 7 + ld bc, PIC_SIZE call CopyVideoData ld a, [wEvoOldSpecies] ld [wCurPartySpecies], a diff --git a/engine/movie/hall_of_fame.asm b/engine/movie/hall_of_fame.asm index 4afb23d3a..7e0a419aa 100644 --- a/engine/movie/hall_of_fame.asm +++ b/engine/movie/hall_of_fame.asm @@ -49,7 +49,7 @@ AnimateHallOfFame: ld a, c ld [wHoFPartyMonIndex], a ld hl, wPartyMon1Level - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hl] ld [wHoFMonLevel], a diff --git a/engine/movie/intro.asm b/engine/movie/intro.asm index f018d860c..1381d396a 100644 --- a/engine/movie/intro.asm +++ b/engine/movie/intro.asm @@ -158,5 +158,5 @@ LoadPresentsGraphic: ; unreferenced GameFreakIntro: INCBIN "gfx/splash/gamefreak_presents.2bpp" INCBIN "gfx/splash/gamefreak_logo.2bpp" - ds 16, $00 ; blank tile + ds TILE_SIZE, $00 ; blank tile GameFreakIntroEnd: diff --git a/engine/movie/oak_speech/init_player_data.asm b/engine/movie/oak_speech/init_player_data.asm index 9994be51a..90fb8f0e2 100644 --- a/engine/movie/oak_speech/init_player_data.asm +++ b/engine/movie/oak_speech/init_player_data.asm @@ -50,7 +50,7 @@ DEF START_MONEY EQU $3000 ld bc, wGameProgressFlagsEnd - wGameProgressFlags call FillMemory ; clear all game progress flags - jp InitializeMissableObjectsFlags + jp InitializeToggleableObjectsFlags InitializeEmptyList: xor a ; count diff --git a/engine/movie/oak_speech/oak_speech.asm b/engine/movie/oak_speech/oak_speech.asm index 5cc807455..4d615126a 100644 --- a/engine/movie/oak_speech/oak_speech.asm +++ b/engine/movie/oak_speech/oak_speech.asm @@ -125,6 +125,9 @@ OakSpeech: ld a, SFX_SHRINK call PlaySound pop af +; bug: switching ROM Bank should not happen outside of Home Bank +; This code does nothing, as PlaySound does all necessary Bank switch +; It looks like a leftover from an early development stage call BankswitchCommon ld c, 4 call DelayFrames @@ -151,6 +154,7 @@ OakSpeech: ld [wAudioFadeOutControl], a call StopAllMusic pop af +; bug: switching ROM Bank should not happen outside of Home Bank call BankswitchCommon ld c, 20 call DelayFrames @@ -163,23 +167,27 @@ OakSpeech: ld c, 50 call DelayFrames call GBFadeOutToWhite - call ClearScreen ; rip more tail-end optimizations + call ClearScreen ret OakSpeechText1: text_far _OakSpeechText1 text_end + OakSpeechText2: text_far _OakSpeechText2A sound_cry_pikachu text_far _OakSpeechText2B text_end + IntroducePlayerText: text_far _IntroducePlayerText text_end + IntroduceRivalText: text_far _IntroduceRivalText text_end + OakSpeechText3: text_far _OakSpeechText3 text_end diff --git a/engine/movie/oak_speech/oak_speech2.asm b/engine/movie/oak_speech/oak_speech2.asm index cedc8be7c..9beb49451 100644 --- a/engine/movie/oak_speech/oak_speech2.asm +++ b/engine/movie/oak_speech/oak_speech2.asm @@ -187,7 +187,7 @@ DisplayIntroNameTextBox: .namestring db "NAME@" -INCLUDE "data/player_names.asm" +INCLUDE "data/player/names.asm" GetDefaultName: ; a = name index @@ -213,7 +213,7 @@ GetDefaultName: ld bc, NAME_BUFFER_LENGTH jp CopyData -INCLUDE "data/player_names_list.asm" +INCLUDE "data/player/names_list.asm" LinkMenuEmptyText: text_end diff --git a/engine/movie/splash.asm b/engine/movie/splash.asm index 5b8375916..8ac0c26eb 100644 --- a/engine/movie/splash.asm +++ b/engine/movie/splash.asm @@ -15,7 +15,7 @@ LoadShootingStarGraphics: call CopyVideoData ld de, FallingStar ld hl, vChars1 tile $22 - lb bc, BANK(FallingStar), (FallingStarEnd - FallingStar) / $10 + lb bc, BANK(FallingStar), (FallingStarEnd - FallingStar) / TILE_SIZE call CopyVideoData ld hl, GameFreakLogoOAMData ld de, wShadowOAMSprite24 @@ -62,11 +62,11 @@ AnimateShootingStar: jr nz, .bigStarLoop ; Clear big star OAM. - ld hl, wShadowOAM + ld hl, wShadowOAMSprite00YCoord ld c, 4 - ld de, 4 + ld de, OBJ_SIZE .clearOAMLoop - ld [hl], 160 + ld [hl], SCREEN_HEIGHT_PX + OAM_Y_OFS add hl, de dec c jr nz, .clearOAMLoop @@ -145,7 +145,7 @@ AnimateShootingStar: ; shift the existing OAM entries down to make room for the next wave ld hl, wShadowOAMSprite04 ld de, wShadowOAM - ld bc, $50 + ld bc, OBJ_SIZE * 20 call CopyData pop af diff --git a/engine/movie/title.asm b/engine/movie/title.asm index 0e9b651e7..4ff22800e 100644 --- a/engine/movie/title.asm +++ b/engine/movie/title.asm @@ -253,7 +253,7 @@ LoadCopyrightAndTextBoxTiles: LoadCopyrightTiles: ld de, NintendoCopyrightLogoGraphics ld hl, vChars2 tile $60 - lb bc, BANK(NintendoCopyrightLogoGraphics), (TextBoxGraphics + $10 - NintendoCopyrightLogoGraphics) / $10 ; bug: overflows into text box graphics and copies the "A" tile + lb bc, BANK(NintendoCopyrightLogoGraphics), (TextBoxGraphics + $10 - NintendoCopyrightLogoGraphics) / TILE_SIZE ; bug: overflows into text box graphics and copies the "A" tile call CopyVideoData hlcoord 2, 7 ld de, CopyrightTextString diff --git a/engine/movie/trade.asm b/engine/movie/trade.asm index 1af97969b..f0c813bcb 100644 --- a/engine/movie/trade.asm +++ b/engine/movie/trade.asm @@ -319,7 +319,7 @@ Trade_AnimateBallEnteringLinkCable: ld [wLinkCableAnimBulgeToggle], a add $7e ld hl, wShadowOAMSprite00TileID - ld de, 4 + ld de, OBJ_SIZE ld c, e .cycleLinkCableBulgeTile ld [hl], a @@ -606,7 +606,7 @@ Trade_AnimCircledMon: ldh [rBGP], a call UpdateCGBPal_BGP ld hl, wShadowOAMSprite00TileID - ld de, $4 + ld de, OBJ_SIZE ld c, $14 .loop ld a, [hl] diff --git a/engine/overworld/advance_player_sprite.asm b/engine/overworld/advance_player_sprite.asm index 4ebdac84d..314883dd4 100644 --- a/engine/overworld/advance_player_sprite.asm +++ b/engine/overworld/advance_player_sprite.asm @@ -3,7 +3,7 @@ _AdvancePlayerSprite:: ld b, a ld a, [wSpritePlayerStateData1XStepVector] ld c, a - ld hl, wWalkCounter ; walking animation counter + ld hl, wWalkCounter dec [hl] jr nz, .afterUpdateMapCoords ; if it's the end of the animation, update the player's map coordinates @@ -16,7 +16,7 @@ _AdvancePlayerSprite:: add c ld [wXCoord], a .afterUpdateMapCoords - ld a, [wWalkCounter] ; walking animation counter + ld a, [wWalkCounter] cp $07 jp nz, .scrollBackgroundAndSprites ; if this is the first iteration of the animation diff --git a/engine/overworld/auto_movement.asm b/engine/overworld/auto_movement.asm index cdc7e28ae..2266e866f 100644 --- a/engine/overworld/auto_movement.asm +++ b/engine/overworld/auto_movement.asm @@ -1,6 +1,6 @@ PlayerStepOutFromDoor:: - ld hl, wStatusFlags5 ; should this be wMovementFlags? - res BIT_EXITING_DOOR, [hl] + ld hl, wStatusFlags5 + res BIT_UNKNOWN_5_1, [hl] call IsPlayerStandingOnDoorTile jr nc, .notStandingOnDoor ld a, PAD_SELECT | PAD_START | PAD_CTRL_PAD @@ -153,8 +153,8 @@ PalletMovementScript_Done: ld a, [wSimulatedJoypadStatesIndex] and a ret nz - ld a, HS_PALLET_TOWN_OAK - ld [wMissableObjectIndex], a + ld a, TOGGLE_PALLET_TOWN_OAK + ld [wToggleableObjectIndex], a predef HideObject ld hl, wStatusFlags5 res BIT_SCRIPTED_MOVEMENT_STATE, [hl] diff --git a/engine/overworld/cut.asm b/engine/overworld/cut.asm index 1b5b85bdc..dea23cc51 100644 --- a/engine/overworld/cut.asm +++ b/engine/overworld/cut.asm @@ -101,13 +101,13 @@ InitCutAnimOAM: call LoadCutGrassAnimationTilePattern call WriteCutOrBoulderDustAnimationOAMBlock ld hl, wShadowOAMSprite36Attributes - ld de, 4 - ld a, $30 + ld de, OBJ_SIZE + ld a, OAM_XFLIP | OAM_PAL1 ld c, e .loop ld [hl], a add hl, de - xor $60 + xor OAM_YFLIP | OAM_XFLIP dec c jr nz, .loop ret diff --git a/engine/overworld/cut2.asm b/engine/overworld/cut2.asm index a6effff56..9d6124e42 100644 --- a/engine/overworld/cut2.asm +++ b/engine/overworld/cut2.asm @@ -79,13 +79,13 @@ AnimCutGrass_UpdateOAMEntries: AnimCutGrass_SwapOAMEntries: ld hl, wShadowOAMSprite36 ld de, wBuffer - ld bc, $8 + ld bc, 2 * OBJ_SIZE call CopyData ld hl, wShadowOAMSprite38 ld de, wShadowOAMSprite36 - ld bc, $8 + ld bc, 2 * OBJ_SIZE call CopyData ld hl, wBuffer ld de, wShadowOAMSprite38 - ld bc, $8 + ld bc, 2 * OBJ_SIZE jp CopyData diff --git a/engine/overworld/dust_smoke.asm b/engine/overworld/dust_smoke.asm index 669e11668..2e6576a80 100644 --- a/engine/overworld/dust_smoke.asm +++ b/engine/overworld/dust_smoke.asm @@ -72,7 +72,7 @@ LoadSmokeTileFourTimes:: push hl call LoadSmokeTile pop hl - ld bc, 1 tiles + ld bc, TILE_SIZE add hl, bc pop bc dec c @@ -81,7 +81,7 @@ LoadSmokeTileFourTimes:: LoadSmokeTile: ld de, SSAnneSmokePuffTile - lb bc, BANK(SSAnneSmokePuffTile), (SSAnneSmokePuffTileEnd - SSAnneSmokePuffTile) / $10 + lb bc, BANK(SSAnneSmokePuffTile), (SSAnneSmokePuffTileEnd - SSAnneSmokePuffTile) / TILE_SIZE jp CopyVideoData SSAnneSmokePuffTile: diff --git a/engine/overworld/hidden_objects.asm b/engine/overworld/hidden_events.asm similarity index 72% rename from engine/overworld/hidden_objects.asm rename to engine/overworld/hidden_events.asm index 841089862..b7c803e5f 100644 --- a/engine/overworld/hidden_objects.asm +++ b/engine/overworld/hidden_events.asm @@ -1,12 +1,12 @@ -; if a hidden object was found, stores $00 in [hDidntFindAnyHiddenObject], else stores $ff -CheckForHiddenObject:: +; if a hidden event was found, stores $00 in [hDidntFindAnyHiddenEvent], else stores $ff +CheckForHiddenEvent:: ld hl, hItemAlreadyFound xor a ld [hli], a ; [hItemAlreadyFound] ld [hli], a ; [hSavedMapTextPtr] ld [hli], a ; [hSavedMapTextPtr + 1] - ld [hl], a ; [hDidntFindAnyHiddenObject] - ld hl, HiddenObjectMaps + ld [hl], a ; [hDidntFindAnyHiddenEvent] + ld hl, HiddenEventMaps ld de, 3 ld a, [wCurMap] call IsInArray @@ -16,46 +16,46 @@ CheckForHiddenObject:: ld h, [hl] ld l, a push hl - ld hl, wHiddenObjectFunctionArgument + ld hl, wHiddenEventFunctionArgument xor a ld [hli], a ld [hli], a ld [hl], a pop hl -.hiddenObjectLoop +.hiddenEventLoop ld a, [hli] cp $ff jr z, .noMatch - ld [wHiddenObjectY], a + ld [wHiddenEventY], a ld b, a ld a, [hli] - ld [wHiddenObjectX], a + ld [wHiddenEventX], a ld c, a call CheckIfCoordsInFrontOfPlayerMatch ldh a, [hCoordsInFrontOfPlayerMatch] and a - jr z, .foundMatchingObject + jr z, .foundMatchingEvent inc hl inc hl inc hl inc hl push hl - ld hl, wHiddenObjectIndex + ld hl, wHiddenEventIndex inc [hl] pop hl - jr .hiddenObjectLoop -.foundMatchingObject + jr .hiddenEventLoop +.foundMatchingEvent ld a, [hli] - ld [wHiddenObjectFunctionArgument], a + ld [wHiddenEventFunctionArgument], a ld a, [hli] - ld [wHiddenObjectFunctionRomBank], a + ld [wHiddenEventFunctionRomBank], a ld a, [hli] ld h, [hl] ld l, a ret .noMatch ld a, $ff - ldh [hDidntFindAnyHiddenObject], a + ldh [hDidntFindAnyHiddenEvent], a ret ; checks if the coordinates in front of the player's sprite match Y in b and X in c @@ -104,4 +104,4 @@ CheckIfCoordsInFrontOfPlayerMatch: ldh [hCoordsInFrontOfPlayerMatch], a ret -INCLUDE "data/events/hidden_objects.asm" +INCLUDE "data/events/hidden_events.asm" diff --git a/engine/overworld/ledges.asm b/engine/overworld/ledges.asm index 9f8de983c..5cb2d5fcc 100644 --- a/engine/overworld/ledges.asm +++ b/engine/overworld/ledges.asm @@ -59,7 +59,7 @@ INCLUDE "data/tilesets/ledge_tiles.asm" LoadHoppingShadowOAM: ld hl, vChars1 tile $7f ld de, LedgeHoppingShadow - lb bc, BANK(LedgeHoppingShadow), (LedgeHoppingShadowEnd - LedgeHoppingShadow) / $8 + lb bc, BANK(LedgeHoppingShadow), (LedgeHoppingShadowEnd - LedgeHoppingShadow) / TILE_1BPP_SIZE call CopyVideoDataDouble ld hl, LedgeHoppingShadowOAM ld de, wShadowOAMSprite36 diff --git a/engine/overworld/movement.asm b/engine/overworld/movement.asm index fbe8e5dfc..165208eb4 100644 --- a/engine/overworld/movement.asm +++ b/engine/overworld/movement.asm @@ -125,7 +125,7 @@ UpdateNPCSprite: ld b, a ld a, [wFontLoaded] bit BIT_FONT_LOADED, a - jp nz, notYetMoving + jp nz, NotYetMoving ld a, b cp $2 jp z, UpdateSpriteMovementDelay ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] == 2 @@ -347,14 +347,15 @@ UpdateSpriteMovementDelay: jr .moving .tickMoveCounter dec [hl] ; x#SPRITESTATEDATA2_MOVEMENTDELAY - jr nz, notYetMoving + jr nz, NotYetMoving .moving dec h ldh a, [hCurrentSpriteOffset] inc a ld l, a ld [hl], $1 ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] = 1 (mark as ready to move) -notYetMoving: + ; fallthrough +NotYetMoving: ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] add SPRITESTATEDATA1_ANIMFRAMECOUNTER @@ -369,7 +370,7 @@ MakeNPCFacePlayer: ; disabled. This is only done when rubbing the S.S. Anne captain's back. ld a, [wStatusFlags3] bit BIT_NO_NPC_FACE_PLAYER, a - jr nz, notYetMoving + jr nz, NotYetMoving res BIT_FACE_PLAYER, [hl] ld a, [wPlayerDirection] bit PLAYER_DIR_BIT_UP, a @@ -393,7 +394,7 @@ MakeNPCFacePlayer: add $9 ld l, a ld [hl], c ; [x#SPRITESTATEDATA1_FACINGDIRECTION]: set facing direction - jr notYetMoving + jr NotYetMoving InitializeSpriteStatus: ld [hl], $1 ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] = ready @@ -448,7 +449,7 @@ Func_5033: ; tests if sprite is off screen or otherwise unable to do anything CheckSpriteAvailability: predef IsObjectHidden - ldh a, [hIsHiddenMissableObject] + ldh a, [hIsToggleableObjectOff] and a jp nz, .spriteInvisible ld h, HIGH(wSpriteStateData2) diff --git a/engine/overworld/pathfinding.asm b/engine/overworld/pathfinding.asm index 878ca07d8..d6e0d009c 100644 --- a/engine/overworld/pathfinding.asm +++ b/engine/overworld/pathfinding.asm @@ -94,7 +94,7 @@ CalcPositionOfPlayerRelativeToNPC: ld a, [hli] ; NPC sprite screen Y position in pixels call CalcDifference jr nc, .NPCSouthOfOrAlignedWithPlayer -.NPCNorthOfPlayer +; NPC north of player push hl ld hl, hNPCPlayerRelativePosFlags bit BIT_PLAYER_LOWER_Y, [hl] @@ -122,7 +122,7 @@ CalcPositionOfPlayerRelativeToNPC: ld a, [hl] ; NPC sprite screen X position in pixels call CalcDifference jr nc, .NPCEastOfOrAlignedWithPlayer -.NPCWestOfPlayer +; NPC west of player push hl ld hl, hNPCPlayerRelativePosFlags bit BIT_PLAYER_LOWER_X, [hl] diff --git a/engine/overworld/player_animations.asm b/engine/overworld/player_animations.asm index b63b12cc2..1948f68d6 100644 --- a/engine/overworld/player_animations.asm +++ b/engine/overworld/player_animations.asm @@ -213,13 +213,13 @@ LeaveMapThroughHoleAnim: ld [wShadowOAMSprite02TileID], a ld a, [wShadowOAMSprite01TileID] ld [wShadowOAMSprite03TileID], a - ld a, $a0 + ld a, SCREEN_HEIGHT_PX + OAM_Y_OFS ld [wShadowOAMSprite00YCoord], a ld [wShadowOAMSprite01YCoord], a ld c, 2 call DelayFrames ; hide upper half of player's sprite - ld a, $a0 + ld a, SCREEN_HEIGHT_PX + OAM_Y_OFS ld [wShadowOAMSprite02YCoord], a ld [wShadowOAMSprite03YCoord], a call GBFadeOutToWhite @@ -270,7 +270,7 @@ InitFacingDirectionList: ld [wSavedPlayerScreenY], a ld hl, PlayerSpinningFacingOrder ld de, wFacingDirectionList - ld bc, 4 + ld bc, OBJ_SIZE call CopyData ld a, [wSpritePlayerStateData1ImageIndex] ; (image index is locked to standing images) ld hl, wFacingDirectionList @@ -294,7 +294,7 @@ SpinPlayerSprite: push hl ld hl, wFacingDirectionList ld de, wFacingDirectionList - 1 - ld bc, 4 + ld bc, OBJ_SIZE call CopyData ld a, [wFacingDirectionList - 1] ld [wFacingDirectionList + 3], a @@ -400,7 +400,7 @@ FishingAnim: ld hl, FishingRodOAM add hl, bc ld de, wShadowOAMSprite39 - ld bc, $4 + ld bc, OBJ_SIZE call CopyData ld c, 100 call DelayFrames @@ -430,7 +430,7 @@ FishingAnim: ld a, [wSpritePlayerStateData1ImageIndex] ; (image index is locked to standing images) cp SPRITE_FACING_UP jr nz, .skipHidingFishingRod - ld a, $a0 + ld a, SCREEN_HEIGHT_PX + OAM_Y_OFS ld [wShadowOAMSprite39YCoord], a .skipHidingFishingRod diff --git a/engine/overworld/push_boulder.asm b/engine/overworld/push_boulder.asm index 2328b07a0..5e7393d24 100644 --- a/engine/overworld/push_boulder.asm +++ b/engine/overworld/push_boulder.asm @@ -43,7 +43,7 @@ TryPushingBoulder:: jr z, .pushBoulderLeft cp SPRITE_FACING_RIGHT jr z, .pushBoulderRight -.pushBoulderDown +; push boulder down bit B_PAD_DOWN, b ret z ld de, PushBoulderDownMovementData diff --git a/engine/overworld/missable_objects.asm b/engine/overworld/toggleable_objects.asm similarity index 50% rename from engine/overworld/missable_objects.asm rename to engine/overworld/toggleable_objects.asm index bcaa731b8..a97f2bd22 100644 --- a/engine/overworld/missable_objects.asm +++ b/engine/overworld/toggleable_objects.asm @@ -1,4 +1,4 @@ -MarkTownVisitedAndLoadMissableObjects:: +MarkTownVisitedAndLoadToggleableObjects:: ld a, [wCurMap] cp FIRST_ROUTE_MAP jr nc, .notInTown @@ -7,22 +7,23 @@ MarkTownVisitedAndLoadMissableObjects:: ld hl, wTownVisitedFlag ; mark town as visited (for flying) predef FlagActionPredef .notInTown - ld hl, MapHSPointers + ld hl, ToggleableObjectMapPointers ld a, [wCurMap] ld b, $0 ld c, a add hl, bc add hl, bc - ld a, [hli] ; load missable objects pointer in hl + ld a, [hli] ; load toggleable objects pointer in hl ld h, [hl] ld l, a push hl ld a, l - sub LOW(MissableObjects) ; calculate difference between out pointer and the base pointer + sub LOW(ToggleableObjectStates) ; calculate difference between out pointer and the base pointer ld l, a ld a, h - sbc HIGH(MissableObjects) + sbc HIGH(ToggleableObjectStates) ld h, a + ; divide difference by 3, resulting in the global offset (number of toggleable items before ours) ld a, h ldh [hDividend], a ld a, l @@ -33,14 +34,14 @@ MarkTownVisitedAndLoadMissableObjects:: ld a, $3 ldh [hDivisor], a ld b, $2 - call Divide ; divide difference by 3, resulting in the global offset (number of missable items before ours) + call Divide ld a, [wCurMap] ld b, a ldh a, [hDividend+3] ld c, a ; store global offset in c - ld de, wMissableObjectList + ld de, wToggleableObjectList pop hl -.writeMissableObjectsListLoop +.writeToggleableObjectsListLoop ld a, [hli] cp -1 jr z, .done ; end of list @@ -52,92 +53,92 @@ MarkTownVisitedAndLoadMissableObjects:: inc de ld a, c inc c - ld [de], a ; write (global) missable object index + ld [de], a ; write (global) toggleable object index inc de - jr .writeMissableObjectsListLoop + jr .writeToggleableObjectsListLoop .done ld a, -1 ld [de], a ; write sentinel ret -InitializeMissableObjectsFlags: - ld hl, wMissableObjectFlags - ld bc, wMissableObjectFlagsEnd - wMissableObjectFlags +InitializeToggleableObjectsFlags: + ld hl, wToggleableObjectFlags + ld bc, wToggleableObjectFlagsEnd - wToggleableObjectFlags xor a - call FillMemory ; clear missable objects flags - ld hl, MissableObjects + call FillMemory ; clear toggleable objects flags + ld hl, ToggleableObjectStates xor a - ld [wMissableObjectCounter], a -.missableObjectsLoop + ld [wToggleableObjectCounter], a +.toggleableObjectsLoop ld a, [hli] - cp -1 ; end of list + cp -1 ; end of list ret z push hl inc hl ld a, [hl] - cp HIDE + cp OFF jr nz, .skip - ld hl, wMissableObjectFlags - ld a, [wMissableObjectCounter] + ld hl, wToggleableObjectFlags + ld a, [wToggleableObjectCounter] ld c, a ld b, FLAG_SET - call MissableObjectFlagAction ; set flag if Item is hidden + call ToggleableObjectFlagAction ; set flag if object is toggled off .skip - ld hl, wMissableObjectCounter + ld hl, wToggleableObjectCounter inc [hl] pop hl inc hl inc hl - jr .missableObjectsLoop + jr .toggleableObjectsLoop -; tests if current sprite is a missable object that is hidden/has been removed +; tests if current object is toggled off/has been hidden IsObjectHidden: ldh a, [hCurrentSpriteOffset] swap a ld b, a - ld hl, wMissableObjectList + ld hl, wToggleableObjectList .loop ld a, [hli] cp -1 - jr z, .notHidden ; not missable -> not hidden + jr z, .notHidden ; not toggleable -> not hidden cp b ld a, [hli] jr nz, .loop ld c, a ld b, FLAG_TEST - ld hl, wMissableObjectFlags - call MissableObjectFlagAction + ld hl, wToggleableObjectFlags + call ToggleableObjectFlagAction ld a, c and a jr nz, .hidden .notHidden xor a .hidden - ldh [hIsHiddenMissableObject], a + ldh [hIsToggleableObjectOff], a ret -; adds missable object (items, leg. pokemon, etc.) to the map -; [wMissableObjectIndex]: index of the missable object to be added (global index) +; adds toggleable object (items, leg. pokemon, etc.) to the map +; [wToggleableObjectIndex]: index of the toggleable object to be added (global index) ShowObject: ShowObject2: - ld hl, wMissableObjectFlags - ld a, [wMissableObjectIndex] + ld hl, wToggleableObjectFlags + ld a, [wToggleableObjectIndex] ld c, a ld b, FLAG_RESET - call MissableObjectFlagAction ; reset "removed" flag + call ToggleableObjectFlagAction ; reset "removed" flag jp UpdateSprites -; removes missable object (items, leg. pokemon, etc.) from the map -; [wMissableObjectIndex]: index of the missable object to be removed (global index) +; removes toggleable object (items, leg. pokemon, etc.) from the map +; [wToggleableObjectIndex]: index of the toggleable object to be removed (global index) HideObject: - ld hl, wMissableObjectFlags - ld a, [wMissableObjectIndex] + ld hl, wToggleableObjectFlags + ld a, [wToggleableObjectIndex] ld c, a ld b, FLAG_SET - call MissableObjectFlagAction ; set "removed" flag + call ToggleableObjectFlagAction ; set "removed" flag jp UpdateSprites -MissableObjectFlagAction: +ToggleableObjectFlagAction: ; identical to FlagAction push hl @@ -174,10 +175,10 @@ MissableObjectFlagAction: ld a, b and a jr z, .reset - cp 2 + cp FLAG_TEST jr z, .read -.set +; set ld a, [hl] ld b, a ld a, d diff --git a/engine/overworld/unused_load_missable_object_data.asm b/engine/overworld/unused_load_toggleable_object_data.asm similarity index 55% rename from engine/overworld/unused_load_missable_object_data.asm rename to engine/overworld/unused_load_toggleable_object_data.asm index 8a5193504..cf53f80a9 100644 --- a/engine/overworld/unused_load_missable_object_data.asm +++ b/engine/overworld/unused_load_toggleable_object_data.asm @@ -1,9 +1,9 @@ Func_f0a54: ; unreferenced ret -LoadMissableObjectData:: +LoadToggleableObjectData:: ; farcalled by an unreferenced function - ld hl, .MissableObjectsMaps + ld hl, .ToggleableObjectsMaps .loop ld a, [hli] cp -1 @@ -24,23 +24,23 @@ LoadMissableObjectData:: ld a, [hli] ld h, [hl] ld l, a - ld de, wMissableObjectList + ld de, wToggleableObjectList call CopyData ret -MACRO missable_object_map +MACRO toggleable_object_map db \1 db \3 - \2 dw \2 ENDM -.MissableObjectsMaps: - missable_object_map BLUES_HOUSE, .BluesHouse, .BluesHouseEnd +.ToggleableObjectsMaps: + toggleable_object_map BLUES_HOUSE, .BluesHouse, .BluesHouseEnd db -1 ; end .BluesHouse: - db 1, HS_DAISY_SITTING_COPY - db 2, HS_DAISY_WALKING_COPY - db 3, HS_TOWN_MAP_COPY + db 1, TOGGLE_DAISY_SITTING_COPY + db 2, TOGGLE_DAISY_WALKING_COPY + db 3, TOGGLE_TOWN_MAP_COPY db -1 ; end .BluesHouseEnd: diff --git a/engine/pokemon/add_mon.asm b/engine/pokemon/add_mon.asm index a0b1ef0a1..24d360b25 100644 --- a/engine/pokemon/add_mon.asm +++ b/engine/pokemon/add_mon.asm @@ -59,7 +59,7 @@ _AddPartyMon:: .next3 ldh a, [hNewPartyLength] dec a - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld e, l ld d, h @@ -117,12 +117,12 @@ _AddPartyMon:: .next4 push bc - ld bc, wPartyMon1DVs - wPartyMon1 + ld bc, MON_DVS add hl, bc pop bc ld [hli], a ld [hl], b ; write IVs - ld bc, (wPartyMon1HPExp - 1) - (wPartyMon1DVs + 1) + ld bc, (MON_HP_EXP - 1) - (MON_DVS + 1) add hl, bc ld a, 1 ld c, a @@ -142,7 +142,7 @@ _AddPartyMon:: inc de jr .copyMonTypesAndMoves .copyEnemyMonData - ld bc, wEnemyMon1DVs - wEnemyMon1 + ld bc, MON_DVS add hl, bc ld a, [wEnemyMonDVs] ; copy IVs from cur enemy mon ld [hli], a @@ -237,13 +237,13 @@ _AddPartyMon:: dec a jr nz, .calcFreshStats ld hl, wEnemyMonMaxHP - ld bc, $a + ld bc, NUM_STATS * 2 call CopyData ; copy stats of cur enemy mon pop hl jr .done .calcFreshStats pop hl - ld bc, wPartyMon1HPExp - 1 - wPartyMon1 + ld bc, MON_HP_EXP - 1 add hl, bc ld b, $0 call CalcStats ; calculate fresh set of stats @@ -300,7 +300,7 @@ _AddEnemyMonToPlayerParty:: ld hl, wPartyMons ld a, [wPartyCount] dec a - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld e, l ld d, h @@ -381,16 +381,16 @@ _MoveMon:: .copySpecies ld [hli], a ; write new mon ID ld [hl], $ff ; write new sentinel -.findMonDataDest +; find mon data dest ld a, [wMoveMonType] dec a ld hl, wPartyMons - ld bc, wPartyMon2 - wPartyMon1 ; $2c + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wPartyCount] jr nz, .addMonOffset ; if it's PARTY_TO_BOX ld hl, wBoxMons - ld bc, wBoxMon2 - wBoxMon1 ; $21 + ld bc, BOXMON_STRUCT_LENGTH ld a, [wBoxCount] .addMonOffset dec a @@ -402,20 +402,20 @@ _MoveMon:: ld a, [wMoveMonType] and a ld hl, wBoxMons - ld bc, wBoxMon2 - wBoxMon1 ; $21 + ld bc, BOXMON_STRUCT_LENGTH jr z, .addMonOffset2 cp DAYCARE_TO_PARTY ld hl, wDayCareMon jr z, .copyMonData ld hl, wPartyMons - ld bc, wPartyMon2 - wPartyMon1 ; $2c + ld bc, PARTYMON_STRUCT_LENGTH .addMonOffset2 ld a, [wWhichPokemon] call AddNTimes .copyMonData push hl push de - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH call CopyData pop de pop hl @@ -424,7 +424,7 @@ _MoveMon:: jr z, .findOTdest cp DAYCARE_TO_PARTY jr z, .findOTdest - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH add hl, bc ld a, [hl] ; hl = Level inc de @@ -463,7 +463,7 @@ _MoveMon:: ld bc, NAME_LENGTH call CopyData ld a, [wMoveMonType] -.findNickDest +; find nick dest cp PARTY_TO_DAYCARE ld de, wDayCareMonName jr z, .findNickSrc @@ -499,6 +499,7 @@ _MoveMon:: jr z, .done cp PARTY_TO_DAYCARE jr z, .done + ; returning mon to party, compute level and stats push hl srl a add $2 @@ -508,13 +509,13 @@ _MoveMon:: ld a, d ld [wCurEnemyLevel], a pop hl - ld bc, wBoxMon2 - wBoxMon1 - add hl, bc + ld bc, BOXMON_STRUCT_LENGTH + add hl, bc ; hl = wPartyMon*Level ld [hli], a ld d, h ld e, l - ld bc, -18 - add hl, bc + ld bc, (MON_HP_EXP - 1) - MON_STATS + add hl, bc ; hl = wPartyMon*HPExp - 1 ld b, $1 call CalcStats .done diff --git a/engine/pokemon/bills_pc.asm b/engine/pokemon/bills_pc.asm index e82b41b06..c8f24560b 100644 --- a/engine/pokemon/bills_pc.asm +++ b/engine/pokemon/bills_pc.asm @@ -393,11 +393,11 @@ BoxNoPCText: KnowsHMMove:: ; returns whether mon with party index [wWhichPokemon] knows an HM move ld hl, wPartyMon1Moves - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH jr .next ; unreachable ld hl, wBoxMon1Moves - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH .next ld a, [wWhichPokemon] call AddNTimes diff --git a/engine/pokemon/evos_moves.asm b/engine/pokemon/evos_moves.asm index 1f0d265f0..f4d5039a3 100644 --- a/engine/pokemon/evos_moves.asm +++ b/engine/pokemon/evos_moves.asm @@ -179,13 +179,13 @@ Evolution_PartyMonLoop: ; loop over party mons call CalcStats ld a, [wWhichPokemon] ld hl, wPartyMon1 - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld e, l ld d, h push hl push bc - ld bc, wPartyMon1MaxHP - wPartyMon1 + ld bc, MON_MAXHP add hl, bc ld a, [hli] ld b, a @@ -345,7 +345,7 @@ LearnMoveFromLevelUp: ; If it is not 0, this function will not work properly. ld hl, wPartyMon1Moves ld a, [wWhichPokemon] - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes .next ld b, NUM_MOVES @@ -559,7 +559,7 @@ WriteMonMoves: ; shift PP as well if learning moves from day care push de - ld bc, wPartyMon1PP - (wPartyMon1Moves + 3) + ld bc, MON_PP - (MON_MOVES + 3) add hl, bc ld d, h ld e, l @@ -578,7 +578,7 @@ WriteMonMoves: ; write move PP value if learning moves from day care push hl ld a, [hl] - ld hl, wPartyMon1PP - wPartyMon1Moves + ld hl, MON_PP - MON_MOVES add hl, de push hl dec a diff --git a/engine/pokemon/learn_move.asm b/engine/pokemon/learn_move.asm index e40b35738..7843cc59d 100644 --- a/engine/pokemon/learn_move.asm +++ b/engine/pokemon/learn_move.asm @@ -10,7 +10,7 @@ LearnMove: DontAbandonLearning: ld hl, wPartyMon1Moves - ld bc, wPartyMon2Moves - wPartyMon1Moves + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wWhichPokemon] call AddNTimes ld d, h @@ -38,7 +38,7 @@ DontAbandonLearning: .next ld a, [wMoveNum] ld [hl], a - ld bc, wPartyMon1PP - wPartyMon1Moves + ld bc, MON_PP - MON_MOVES add hl, bc push hl push de @@ -66,7 +66,7 @@ DontAbandonLearning: ld de, wBattleMonMoves ld bc, NUM_MOVES call CopyData - ld bc, wPartyMon1PP - wPartyMon1OTID + ld bc, MON_PP - MON_OTID add hl, bc ld de, wBattleMonPP ld bc, NUM_MOVES diff --git a/engine/pokemon/load_mon_data.asm b/engine/pokemon/load_mon_data.asm index 964db2e43..e46dc2dbc 100644 --- a/engine/pokemon/load_mon_data.asm +++ b/engine/pokemon/load_mon_data.asm @@ -23,7 +23,7 @@ LoadMonData_:: call GetMonHeader ld hl, wPartyMons - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wMonDataLocation] cp ENEMY_PARTY_DATA jr c, .getMonEntry @@ -31,9 +31,9 @@ LoadMonData_:: ld hl, wEnemyMons jr z, .getMonEntry - cp 2 + cp BOX_DATA ld hl, wBoxMons - ld bc, wBoxMon2 - wBoxMon1 + ld bc, BOXMON_STRUCT_LENGTH jr z, .getMonEntry ld hl, wDayCareMon @@ -45,7 +45,7 @@ LoadMonData_:: .copyMonData ld de, wLoadedMon - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH jp CopyData ; get species of mon e in list [wMonDataLocation] for LoadMonData diff --git a/engine/pokemon/remove_mon.asm b/engine/pokemon/remove_mon.asm index 60ec8c27e..ee47f0c8d 100644 --- a/engine/pokemon/remove_mon.asm +++ b/engine/pokemon/remove_mon.asm @@ -2,15 +2,16 @@ _RemovePokemon:: ld hl, wPartyCount ld a, [wRemoveMonFromBox] and a - jr z, .usePartyCount + jr z, .gotCount ld hl, wBoxCount -.usePartyCount +.gotCount ld a, [hl] dec a ld [hli], a + ld a, [wWhichPokemon] ld c, a - ld b, $0 + ld b, 0 add hl, bc ld e, l ld d, h @@ -21,21 +22,27 @@ _RemovePokemon:: ld [hli], a inc a ; reached terminator? jr nz, .shiftMonSpeciesLoop ; if not, continue shifting species + ld hl, wPartyMonOT ld d, PARTY_LENGTH - 1 ; max number of pokemon to shift ld a, [wRemoveMonFromBox] and a - jr z, .usePartyMonOTs + jr z, .gotOTsPointer ld hl, wBoxMonOT ld d, MONS_PER_BOX - 1 -.usePartyMonOTs +.gotOTsPointer ld a, [wWhichPokemon] call SkipFixedLengthTextEntries ld a, [wWhichPokemon] cp d ; are we removing the last pokemon? jr nz, .notRemovingLastMon ; if not, shift the pokemon below - ld [hl], $ff ; else, write the terminator and return + + ; bug: to erase a string, this should be ld [hl], '@' + ; This is not needed, as wBoxSpecies/wPartySpecies determine if a slot is used. + ; Besides, existing mon nick is left untouched + ld [hl], $ff ret + .notRemovingLastMon ld d, h ld e, l @@ -44,44 +51,49 @@ _RemovePokemon:: ld bc, wPartyMonNicks ld a, [wRemoveMonFromBox] and a - jr z, .usePartyMonNicks + jr z, .gotNicksPointer ld bc, wBoxMonNicks -.usePartyMonNicks +.gotNicksPointer call CopyDataUntil + ld hl, wPartyMons - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wRemoveMonFromBox] and a - jr z, .usePartyMonStructs + jr z, .gotMonStructs ld hl, wBoxMons - ld bc, wBoxMon2 - wBoxMon1 -.usePartyMonStructs + ld bc, BOXMON_STRUCT_LENGTH +.gotMonStructs ld a, [wWhichPokemon] call AddNTimes ; get address of the pokemon removed - ld d, h ; store in de for CopyDataUntil + + ld d, h ; de = start address for CopyDataUntil ld e, l ld a, [wRemoveMonFromBox] and a - jr z, .copyUntilPartyMonOTs - ld bc, wBoxMon2 - wBoxMon1 - add hl, bc ; get address of pokemon after the pokemon removed - ld bc, wBoxMonOT ; address of when to stop copying - jr .continue -.copyUntilPartyMonOTs - ld bc, wPartyMon2 - wPartyMon1 - add hl, bc ; get address of pokemon after the pokemon removed - ld bc, wPartyMonOT ; address of when to stop copying -.continue - call CopyDataUntil ; shift all pokemon data after the removed mon to the removed mon's location + jr z, .copyUntilPartyMonOT +; copy until wBoxMonOT + ld bc, BOXMON_STRUCT_LENGTH + add hl, bc ; get address of next slot + ld bc, wBoxMonOT + jr .shiftOTs +.copyUntilPartyMonOT + ld bc, PARTYMON_STRUCT_LENGTH + add hl, bc ; get address of next slot + ld bc, wPartyMonOT +.shiftOTs + call CopyDataUntil ; shift all pokemon data up one slot + ld hl, wPartyMonNicks ld a, [wRemoveMonFromBox] and a - jr z, .usePartyMonNicks2 + jr z, .gotNicksPointer2 ld hl, wBoxMonNicks -.usePartyMonNicks2 +.gotNicksPointer2 ld bc, NAME_LENGTH ld a, [wWhichPokemon] call AddNTimes + ld d, h ld e, l ld bc, NAME_LENGTH @@ -89,7 +101,7 @@ _RemovePokemon:: ld bc, wPartyMonNicksEnd ld a, [wRemoveMonFromBox] and a - jr z, .copyUntilPartyMonNicksEnd + jr z, .shiftMonNicks ld bc, wBoxMonNicksEnd -.copyUntilPartyMonNicksEnd - jp CopyDataUntil +.shiftMonNicks + jp CopyDataUntil ; shift all pokemon nicknames up one slot diff --git a/engine/pokemon/set_types.asm b/engine/pokemon/set_types.asm index 2cf8f14c7..d42c3cf30 100644 --- a/engine/pokemon/set_types.asm +++ b/engine/pokemon/set_types.asm @@ -1,7 +1,7 @@ ; updates the types of a party mon (pointed to in hl) to the ones of the mon specified in [wPokedexNum] SetPartyMonTypes: call GetPredefRegisters - ld bc, wPartyMon1Type - wPartyMon1 ; $5 + ld bc, MON_TYPE add hl, bc ld a, [wPokedexNum] ld [wCurSpecies], a diff --git a/engine/pokemon/status_ailments.asm b/engine/pokemon/status_ailments.asm index 2c5b3bcd3..3cc2d4903 100644 --- a/engine/pokemon/status_ailments.asm +++ b/engine/pokemon/status_ailments.asm @@ -10,37 +10,17 @@ PrintStatusAilment:: jr nz, .par and SLP_MASK ret z - ld a, 'S' - ld [hli], a - ld a, 'L' - ld [hli], a - ld [hl], 'P' + ld_hli_a_string "SLP" ret .psn - ld a, 'P' - ld [hli], a - ld a, 'S' - ld [hli], a - ld [hl], 'N' + ld_hli_a_string "PSN" ret .brn - ld a, 'B' - ld [hli], a - ld a, 'R' - ld [hli], a - ld [hl], 'N' + ld_hli_a_string "BRN" ret .frz - ld a, 'F' - ld [hli], a - ld a, 'R' - ld [hli], a - ld [hl], 'Z' + ld_hli_a_string "FRZ" ret .par - ld a, 'P' - ld [hli], a - ld a, 'A' - ld [hli], a - ld [hl], 'R' + ld_hli_a_string "PAR" ret diff --git a/engine/pokemon/status_screen.asm b/engine/pokemon/status_screen.asm index 638f4c412..7e8ad6157 100644 --- a/engine/pokemon/status_screen.asm +++ b/engine/pokemon/status_screen.asm @@ -61,8 +61,6 @@ DrawHP_: pop de ret - -; Predef 0x37 StatusScreen: call LoadMonData ld a, [wMonDataLocation] @@ -75,7 +73,7 @@ StatusScreen: ld hl, wLoadedMonHPExp - 1 ld de, wLoadedMonStats ld b, $1 - call CalcStats ; Recalculate stats + call CalcStats .DontRecalculate ld hl, wStatusFlags2 set BIT_NO_AUDIO_FADE_OUT, [hl] @@ -117,8 +115,8 @@ StatusScreen: lb bc, 8, 6 call DrawLineBox ; Draws the box around types, ID No. and OT hlcoord 10, 9 - ld de, Type1Text - call PlaceString ; "TYPE1/" + ld de, TypesIDNoOTText + call PlaceString hlcoord 11, 3 predef DrawHP ld hl, wStatusScreenHPBarColor @@ -137,7 +135,7 @@ StatusScreen: ld de, StatusText call PlaceString ; "STATUS/" hlcoord 14, 2 - call PrintLevel ; Pokémon level + call PrintLevel ld a, [wMonHIndex] ld [wPokedexNum], a ld [wCurSpecies], a @@ -164,7 +162,7 @@ StatusScreen: ld de, wLoadedMonOTID lb bc, LEADING_ZEROES | 2, 5 call PrintNumber ; ID Number - ld d, $0 + ld d, STATUS_SCREEN_STATS_BOX call PrintStatsBox call Delay3 call GBPalNormal @@ -221,20 +219,11 @@ NamePointers2: dw wBoxMonNicks dw wDayCareMonName -Type1Text: +TypesIDNoOTText: db "TYPE1/" - next "" - ; fallthrough -Type2Text: - db "TYPE2/" - next "" - ; fallthrough -IDNoText: - db "№/" - next "" - ; fallthrough -OTText: - db "OT/" + next "TYPE2/" + next "№/" + next "OT/" next "@" StatusText: @@ -265,38 +254,40 @@ PTile: INCBIN "gfx/font/P.1bpp" PrintStatsBox: ld a, d - and a ; a is 0 from the status screen - jr nz, .DifferentBox + ASSERT STATUS_SCREEN_STATS_BOX == 0 + and a + jr nz, .LevelUpStatsBox ; battle or Rare Candy hlcoord 0, 8 lb bc, 8, 8 - call TextBoxBorder ; Draws the box - hlcoord 1, 9 ; Start printing stats from here - ld bc, $19 ; Number offset + call TextBoxBorder + hlcoord 1, 9 + ld bc, SCREEN_WIDTH + 5 ; one row down and 5 columns right jr .PrintStats -.DifferentBox +.LevelUpStatsBox hlcoord 9, 2 lb bc, 8, 9 call TextBoxBorder hlcoord 11, 3 - ld bc, $18 + ld bc, SCREEN_WIDTH + 4 ; one row down and 4 columns right .PrintStats push bc push hl - ld de, StatsText + ld de, .StatsText call PlaceString pop hl pop bc add hl, bc ld de, wLoadedMonAttack lb bc, 2, 3 - call PrintStat + call .PrintStat ld de, wLoadedMonDefense - call PrintStat + call .PrintStat ld de, wLoadedMonSpeed - call PrintStat + call .PrintStat ld de, wLoadedMonSpecial jp PrintNumber -PrintStat: + +.PrintStat: push hl call PrintNumber pop hl @@ -304,7 +295,7 @@ PrintStat: add hl, de ret -StatsText: +.StatsText: db "ATTACK" next "DEFENSE" next "SPEED" @@ -337,10 +328,10 @@ StatusScreen2: call PlaceString ; Print moves ld a, [wNumMovesMinusOne] inc a - ld c, a - ld a, $4 + ld c, a ; number of known moves + ld a, NUM_MOVES sub c - ld b, a ; Number of moves ? + ld b, a ; number of blank moves hlcoord 11, 10 ld de, SCREEN_WIDTH * 2 ld a, '' @@ -375,7 +366,7 @@ StatusScreen2: pop de pop hl push hl - ld bc, wPartyMon1PP - wPartyMon1Moves - 1 + ld bc, MON_PP - MON_MOVES - 1 add hl, bc ld a, [hl] and PP_MASK @@ -400,7 +391,7 @@ StatusScreen2: pop bc inc b ld a, b - cp $4 + cp NUM_MOVES jr nz, .PrintPP .PPDone hlcoord 9, 3 @@ -429,8 +420,11 @@ StatusScreen2: hlcoord 7, 6 lb bc, 3, 7 call PrintNumber ; exp needed to level up + + ; unneeded, this clears the diacritic characters in JPN versions hlcoord 9, 0 call StatusScreen_ClearName + hlcoord 9, 1 call StatusScreen_ClearName ld a, [wMonHIndex] @@ -482,7 +476,7 @@ StatusScreenExpText: next "LEVEL UP@" StatusScreen_ClearName: - ld bc, 10 + ld bc, NAME_LENGTH - 1 ld a, ' ' jp FillMemory diff --git a/engine/printer/printer2.asm b/engine/printer/printer2.asm index 586dbbb4c..b7cabbf8c 100644 --- a/engine/printer/printer2.asm +++ b/engine/printer/printer2.asm @@ -165,7 +165,7 @@ Printer_GetMonStats: db "OT/@" .IDNo: - db $73, "№/@" + db "№/@" .Stats: db "ATTACK" diff --git a/engine/slots/game_corner_slots.asm b/engine/slots/game_corner_slots.asm index 483219743..d83d9d6ac 100644 --- a/engine/slots/game_corner_slots.asm +++ b/engine/slots/game_corner_slots.asm @@ -1,5 +1,5 @@ StartSlotMachine: - ld a, [wHiddenObjectFunctionArgument] + ld a, [wHiddenEventFunctionArgument] cp SLOTS_OUTOFORDER jr z, .printOutOfOrder cp SLOTS_OUTTOLUNCH @@ -10,9 +10,9 @@ StartSlotMachine: ld a, [wCanPlaySlots] and a ret z - ld a, [wLuckySlotHiddenObjectIndex] + ld a, [wLuckySlotHiddenEventIndex] ld b, a - ld a, [wHiddenObjectIndex] + ld a, [wHiddenEventIndex] inc a cp b jr z, .match diff --git a/engine/slots/slot_machine.asm b/engine/slots/slot_machine.asm index e3363db3b..fbbdbcb64 100644 --- a/engine/slots/slot_machine.asm +++ b/engine/slots/slot_machine.asm @@ -448,7 +448,7 @@ SlotMachine_CheckForMatches: ld h, [hl] ld l, a ld de, wStringBuffer - ld bc, 4 + ld bc, 4 ; every SlotReward*Text is at most 4 bytes call CopyData pop hl ld de, .flashScreenLoop diff --git a/home.asm b/home.asm index 2d144e7af..b6de73350 100644 --- a/home.asm +++ b/home.asm @@ -81,5 +81,5 @@ INCLUDE "home/give.asm" INCLUDE "home/random.asm" INCLUDE "home/bankswitch2.asm" INCLUDE "home/predef.asm" -INCLUDE "home/hidden_objects.asm" +INCLUDE "home/hidden_events.asm" INCLUDE "home/predef_text.asm" diff --git a/home/clear_sprites.asm b/home/clear_sprites.asm index 6d1066fae..c18b1ff3f 100644 --- a/home/clear_sprites.asm +++ b/home/clear_sprites.asm @@ -9,10 +9,10 @@ ClearSprites:: ret HideSprites:: - ld a, 160 - ld hl, wShadowOAM - ld de, 4 - ld b, 40 + ld a, SCREEN_HEIGHT_PX + OAM_Y_OFS + ld hl, wShadowOAMSprite00YCoord + ld de, OBJ_SIZE + ld b, OAM_COUNT .loop ld [hl], a add hl, de diff --git a/home/hidden_objects.asm b/home/hidden_events.asm similarity index 70% rename from home/hidden_objects.asm rename to home/hidden_events.asm index c1e1c9d30..ae8ee439d 100644 --- a/home/hidden_objects.asm +++ b/home/hidden_events.asm @@ -2,27 +2,27 @@ UpdateCinnabarGymGateTileBlocks:: farcall UpdateCinnabarGymGateTileBlocks_ ret -CheckForHiddenObjectOrBookshelfOrCardKeyDoor:: +CheckForHiddenEventOrBookshelfOrCardKeyDoor:: ldh a, [hLoadedROMBank] push af ldh a, [hJoyHeld] bit B_PAD_A, a jr z, .nothingFound ; A button is pressed - ld a, BANK(CheckForHiddenObject) + ld a, BANK(CheckForHiddenEvent) call BankswitchCommon - call CheckForHiddenObject - ldh a, [hDidntFindAnyHiddenObject] + call CheckForHiddenEvent + ldh a, [hDidntFindAnyHiddenEvent] and a - jr nz, .hiddenObjectNotFound + jr nz, .hiddenEventNotFound xor a ldh [hItemAlreadyFound], a - ld a, [wHiddenObjectFunctionRomBank] + ld a, [wHiddenEventFunctionRomBank] call BankswitchCommon call JumpToAddress ldh a, [hItemAlreadyFound] jr .done -.hiddenObjectNotFound +.hiddenEventNotFound predef GetTileAndCoordsInFrontOfPlayer farcall PrintBookshelfText ldh a, [hInteractedWithBookshelf] diff --git a/home/joypad2.asm b/home/joypad2.asm index da8247974..a2860b024 100644 --- a/home/joypad2.asm +++ b/home/joypad2.asm @@ -25,7 +25,7 @@ JoypadLowSensitivity:: ldh a, [hJoyPressed] ; newly pressed buttons and a ; have any buttons been newly pressed since last check? jr z, .noNewlyPressedButtons -.newlyPressedButtons +; newly pressed buttons ld a, 30 ; half a second delay ldh [hFrameCounter], a ret @@ -33,7 +33,7 @@ JoypadLowSensitivity:: ldh a, [hFrameCounter] and a ; is the delay over? jr z, .delayOver -.delayNotOver +; delay not over xor a ldh [hJoy5], a ; report no buttons as pressed ret diff --git a/home/list_menu.asm b/home/list_menu.asm index cae0a1d5f..4faa738f5 100644 --- a/home/list_menu.asm +++ b/home/list_menu.asm @@ -65,7 +65,7 @@ DisplayListMenuIDLoop:: ld a, [wBattleType] and a ; is it the Old Man battle? jr z, .notOldManBattle -.oldManBattle +; Old Man battle ld a, '▶' ldcoord_a 5, 4 ; place menu cursor in front of first menu entry ld c, 20 @@ -178,7 +178,7 @@ DisplayListMenuIDLoop:: bit B_PAD_DOWN, b ld hl, wListScrollOffset jr z, .upPressed -.downPressed +; Down pressed ld a, [hl] add 3 ld b, a @@ -377,7 +377,7 @@ PrintListMenuEntries:: jr z, .pokemonPCMenu cp MOVESLISTMENU jr z, .movesMenu -.itemMenu +; item menu call GetItemName jr .placeNameString .pokemonPCMenu @@ -408,7 +408,7 @@ PrintListMenuEntries:: ld a, [wPrintItemPrices] and a ; should prices be printed? jr z, .skipPrintingItemPrice -.printItemPrice +; print item price push hl ld a, [de] ld de, ItemPrices @@ -423,7 +423,7 @@ PrintListMenuEntries:: ld a, [wListMenuID] and a ; PCPOKEMONLISTMENU? jr nz, .skipPrintingPokemonLevel -.printPokemonLevel +; print Pokemon level ld a, [wNamedObjectIndex] push af push hl @@ -448,12 +448,12 @@ PrintListMenuEntries:: ld a, [wMonDataLocation] and a ; is it a list of party pokemon or box pokemon? jr z, .skipCopyingLevel -.copyLevel +; copy level ld a, [wLoadedMonBoxLevel] ld [wLoadedMonLevel], a .skipCopyingLevel pop hl - ld bc, $1c + ld bc, SCREEN_WIDTH + 8 ; 1 row down and 8 columns right add hl, bc call PrintLevel pop af @@ -465,7 +465,7 @@ PrintListMenuEntries:: ld a, [wListMenuID] cp ITEMLISTMENU jr nz, .nextListEntry -.printItemQuantity +; print item quantity ld a, [wNamedObjectIndex] ld [wCurItem], a call IsKeyItem ; check if item is unsellable diff --git a/home/load_font.asm b/home/load_font.asm index c9a009f75..bb1b14923 100644 --- a/home/load_font.asm +++ b/home/load_font.asm @@ -2,7 +2,7 @@ LoadFontTilePatterns:: ldh a, [rLCDC] bit B_LCDC_ENABLE, a jr nz, .on -.off +; off ld hl, FontGraphics ld de, vFont ld bc, FontGraphicsEnd - FontGraphics @@ -11,14 +11,14 @@ LoadFontTilePatterns:: .on ld de, FontGraphics ld hl, vFont - lb bc, BANK(FontGraphics), (FontGraphicsEnd - FontGraphics) / $8 + lb bc, BANK(FontGraphics), (FontGraphicsEnd - FontGraphics) / TILE_1BPP_SIZE jp CopyVideoDataDouble ; if LCD is on, transfer during V-blank LoadTextBoxTilePatterns:: ldh a, [rLCDC] bit B_LCDC_ENABLE, a jr nz, .on -.off +; off ld hl, TextBoxGraphics ld de, vChars2 tile $60 ld bc, TextBoxGraphicsEnd - TextBoxGraphics @@ -27,14 +27,14 @@ LoadTextBoxTilePatterns:: .on ld de, TextBoxGraphics ld hl, vChars2 tile $60 - lb bc, BANK(TextBoxGraphics), (TextBoxGraphicsEnd - TextBoxGraphics) / $10 + lb bc, BANK(TextBoxGraphics), (TextBoxGraphicsEnd - TextBoxGraphics) / TILE_SIZE jp CopyVideoData ; if LCD is on, transfer during V-blank LoadHpBarAndStatusTilePatterns:: ldh a, [rLCDC] bit B_LCDC_ENABLE, a jr nz, .on -.off +; off ld hl, HpBarAndStatusGraphics ld de, vChars2 tile $62 ld bc, HpBarAndStatusGraphicsEnd - HpBarAndStatusGraphics @@ -43,5 +43,5 @@ LoadHpBarAndStatusTilePatterns:: .on ld de, HpBarAndStatusGraphics ld hl, vChars2 tile $62 - lb bc, BANK(HpBarAndStatusGraphics), (HpBarAndStatusGraphicsEnd - HpBarAndStatusGraphics) / $10 + lb bc, BANK(HpBarAndStatusGraphics), (HpBarAndStatusGraphicsEnd - HpBarAndStatusGraphics) / TILE_SIZE jp CopyVideoData ; if LCD is on, transfer during V-blank diff --git a/home/map_objects.asm b/home/map_objects.asm index 2e5533716..3b1a1f082 100644 --- a/home/map_objects.asm +++ b/home/map_objects.asm @@ -190,7 +190,7 @@ CheckCoords:: ld hl, wCoordIndex inc [hl] pop hl -.compareYCoord +; compare Y coord cp b jr z, .compareXCoord inc hl @@ -199,7 +199,7 @@ CheckCoords:: ld a, [hli] cp c jr nz, .loop -.inArray +; in array scf ret .notInArray diff --git a/home/move_mon.asm b/home/move_mon.asm index 45b10322f..def60bc10 100644 --- a/home/move_mon.asm +++ b/home/move_mon.asm @@ -94,7 +94,7 @@ CalcStat:: srl c pop hl push bc - ld bc, wPartyMon1DVs - (wPartyMon1HPExp - 1) ; also wEnemyMonDVs - wEnemyMonHP + ld bc, MON_DVS - (MON_HP_EXP - 1) add hl, bc pop bc ld a, c @@ -106,7 +106,7 @@ CalcStat:: jr z, .getSpeedIV cp $5 jr z, .getSpecialIV -.getHpIV +; get HP IV push bc ld a, [hl] ; Atk IV swap a diff --git a/home/overworld.asm b/home/overworld.asm index b5625e9dd..6fafe7170 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -88,10 +88,10 @@ OverworldLoopLessDelay:: jp nz, .noDirectionButtonsPressed call IsPlayerCharacterBeingControlledByGame jr nz, .checkForOpponent - call CheckForHiddenObjectOrBookshelfOrCardKeyDoor + call CheckForHiddenEventOrBookshelfOrCardKeyDoor ldh a, [hItemAlreadyFound] and a - jp z, OverworldLoop ; jump if a hidden object or bookshelf was found, but not if a card key door was found + jp z, OverworldLoop ; jump if a hidden event or bookshelf was found, but not if a card key door was found xor a ld [wd435], a ; new yellow address call IsSpriteOrSignInFrontOfPlayer @@ -114,7 +114,7 @@ OverworldLoopLessDelay:: and a jr z, .checkForOpponent xor a - ld [wLinkTimeoutCounter], a + ld [wEnteringCableClub], a jp EnterMap .checkForOpponent ld a, [wCurOpponent] @@ -480,7 +480,7 @@ WarpFound2:: ; for maps that can have the 0xFF destination map, which means to return to the outside map ; not all these maps are necessarily indoors, though .indoorMaps - ldh a, [hWarpDestinationMap] ; destination map + ldh a, [hWarpDestinationMap] cp LAST_MAP jr z, .goBackOutside ; if not going back to the previous map @@ -518,7 +518,7 @@ WarpFound2:: ; if no matching warp was found CheckMapConnections:: -.checkWestMap +; check west map ld a, [wXCoord] cp $ff jr nz, .checkEastMap @@ -539,7 +539,7 @@ CheckMapConnections:: srl c jr z, .savePointer1 .pointerAdjustmentLoop1 - ld a, [wWestConnectedMapWidth] ; width of connected map + ld a, [wWestConnectedMapWidth] add MAP_BORDER * 2 ld e, a ld d, 0 @@ -556,7 +556,7 @@ CheckMapConnections:: .checkEastMap ld b, a - ld a, [wCurrentMapWidth2] ; map width + ld a, [wCurrentMapWidth2] cp b jr nz, .checkNorthMap ld a, [wEastConnectedMap] @@ -1125,7 +1125,7 @@ IsSpriteInFrontOfPlayer2:: .doneCheckingDirection ld [wPlayerDirection], a ld hl, wSprite01StateData1 -; yellow does not have the "if sprites are existant" check +; yellow does not have the "if sprites are existent" check ld e, $01 ld d, $f .spriteLoop @@ -1148,7 +1148,7 @@ IsSpriteInFrontOfPlayer2:: .nextSprite pop hl ld a, l - add $10 + add SPRITESTATEDATA1_LENGTH ld l, a inc e dec d @@ -1176,10 +1176,10 @@ IsSpriteInFrontOfPlayer2:: SignLoop:: ; search if a player is facing a sign - ld hl, wSignCoords ; start of sign coordinates - ld a, [wNumSigns] ; number of signs in the map + ld hl, wSignCoords + ld a, [wNumSigns] ld b, a - ld c, $00 + ld c, 0 .signLoop inc c ld a, [hli] ; sign Y @@ -1187,17 +1187,15 @@ SignLoop:: jr z, .yCoordMatched inc hl jr .retry - .yCoordMatched ld a, [hli] ; sign X cp e jr nz, .retry -.xCoordMatched -; found sign +; X coord matched: found sign push hl push bc - ld hl, wSignTextIDs ; start of sign text ID's - ld b, $00 + ld hl, wSignTextIDs + ld b, 0 dec c add hl, bc ld a, [hl] @@ -1206,7 +1204,6 @@ SignLoop:: pop hl scf ret - .retry dec b jr nz, .signLoop @@ -1272,8 +1269,8 @@ CollisionCheckOnLand:: ; function that checks if the tile in front of the player is passable ; clears carry if it is, sets carry if not CheckTilePassable:: - predef GetTileAndCoordsInFrontOfPlayer ; get tile in front of player - ld a, [wTileInFrontOfPlayer] ; tile in front of player + predef GetTileAndCoordsInFrontOfPlayer + ld a, [wTileInFrontOfPlayer] ld c, a call IsTilePassable ret @@ -1284,7 +1281,7 @@ CheckTilePassable:: ; sets carry if there is a collision and unsets carry if not CheckForJumpingAndTilePairCollisions:: push hl - predef GetTileAndCoordsInFrontOfPlayer ; get the tile in front of the player + predef GetTileAndCoordsInFrontOfPlayer push de push bc farcall HandleLedges ; check if the player is trying to jump a ledge @@ -1317,7 +1314,7 @@ CheckForTilePairCollisions:: inc hl jr .tilePairCollisionLoop .tilesetMatches - ld a, [wTilePlayerStandingOn] ; tile the player is on + ld a, [wTilePlayerStandingOn] ld b, a ld a, [hl] cp b @@ -1352,8 +1349,8 @@ INCLUDE "data/tilesets/pair_collision_tile_ids.asm" LoadCurrentMapView:: ldh a, [hLoadedROMBank] push af - ld a, [wTilesetBank] ; tile data ROM bank - call BankswitchCommon ; switch to ROM bank that contains tile data + ld a, [wTilesetBank] + call BankswitchCommon ld a, [wCurrentTileBlockMapViewPointer] ; address of upper left corner of current map view ld e, a ld a, [wCurrentTileBlockMapViewPointer + 1] @@ -1434,7 +1431,7 @@ LoadCurrentMapView:: dec b jr nz, .rowLoop2 pop af - call BankswitchCommon ; restore previous ROM bank + call BankswitchCommon ret AdvancePlayerSprite:: @@ -1794,11 +1791,11 @@ LoadPlayerSpriteGraphicsCommon:: ; function to load data from the map header LoadMapHeader:: - farcall MarkTownVisitedAndLoadMissableObjects + farcall MarkTownVisitedAndLoadToggleableObjects jr asm_0dbd -Func_0db5:: ; XXX - farcall LoadMissableObjectData +Func_0db5:: ; unreferenced + farcall LoadToggleableObjectData asm_0dbd: ld a, [wCurMapTileset] ld [wUnusedCurMapTilesetCopy], a @@ -1829,7 +1826,7 @@ asm_0dbd: ; copy connection data (if any) to WRAM ld a, [wCurMapConnections] ld b, a -.checkNorth +; check north bit NORTH_F, b jr z, .checkSouth ld de, wNorthConnectionHeader @@ -1862,7 +1859,7 @@ asm_0dbd: ld de, wMapBackgroundTile ld a, [hli] ld [de], a -.loadWarpData +; load warp data ld a, [hli] ld [wNumberOfWarps], a and a @@ -1978,8 +1975,8 @@ LoadMapData:: ld a, [wStatusFlags7] bit BIT_NO_MAP_MUSIC, a jr nz, .restoreRomBank - call UpdateMusic6Times ; music related - call PlayDefaultMusicFadeOutCurrent ; music related + call UpdateMusic6Times + call PlayDefaultMusicFadeOutCurrent .restoreRomBank pop af call BankswitchCommon @@ -2021,7 +2018,7 @@ FinishReloadingMap: ret ; useless ResetMapVariables:: - ld a, $98 + ld a, HIGH(vBGMap0) ld [wMapViewVRAMPointer + 1], a xor a ld [wMapViewVRAMPointer], a @@ -2150,7 +2147,7 @@ InitSprites:: pop de pop hl ld a, [wNumSprites] - and a ; are sprites existant? + and a ; are there any sprites? ret z ; don't copy sprite data if not ld b, a ld c, $0 diff --git a/home/pics.asm b/home/pics.asm index 18d86f2e6..b4e923c85 100644 --- a/home/pics.asm +++ b/home/pics.asm @@ -123,8 +123,8 @@ AlignSpriteDataCentered:: dec c jr nz, .columnInnerLoop pop hl - ld bc, 7 * 8 ; 7 tiles - add hl, bc ; advance one full column + ld bc, 7 * TILE_1BPP_SIZE + add hl, bc ; advance one full column pop af dec a jr nz, .columnLoop @@ -152,7 +152,7 @@ InterlaceMergeSpriteBuffers:: ld hl, sSpriteBuffer2 + (SPRITEBUFFERSIZE - 1) ; destination: end of buffer 2 ld de, sSpriteBuffer1 + (SPRITEBUFFERSIZE - 1) ; source 2: end of buffer 1 ld bc, sSpriteBuffer0 + (SPRITEBUFFERSIZE - 1) ; source 1: end of buffer 0 - ld a, SPRITEBUFFERSIZE / 2 ; $c4 + ld a, SPRITEBUFFERSIZE / 2 ldh [hSpriteInterlaceCounter], a .interlaceLoop ld a, [de] @@ -184,9 +184,9 @@ InterlaceMergeSpriteBuffers:: or c jr nz, .swapLoop .notFlipped - pop hl + pop hl ; hl = output address ld de, sSpriteBuffer1 - ld c, (2 * SPRITEBUFFERSIZE) / 16 ; $31, number of 16 byte chunks to be copied + ld c, PIC_SIZE ; tiles ldh a, [hLoadedROMBank] ld b, a call CopyVideoData diff --git a/home/pokemon.asm b/home/pokemon.asm index 2246e3835..4c2480643 100644 --- a/home/pokemon.asm +++ b/home/pokemon.asm @@ -349,11 +349,7 @@ PrintStatusCondition:: pop de jr nz, PrintStatusConditionNotFainted ; if the pokemon's HP is 0, print "FNT" - ld a, 'F' - ld [hli], a - ld a, 'N' - ld [hli], a - ld [hl], 'T' + ld_hli_a_string "FNT" and a ret diff --git a/home/print_bcd.asm b/home/print_bcd.asm index 2e501be55..cac6aba34 100644 --- a/home/print_bcd.asm +++ b/home/print_bcd.asm @@ -31,9 +31,9 @@ PrintBCDNumber:: inc de dec c jr nz, .loop - bit BIT_LEADING_ZEROES, b + bit BIT_LEADING_ZEROES, b ; were any non-zero digits printed? jr z, .done ; if so, we are done -.numberEqualsZero ; if every digit of the BCD number is zero +; if every digit of the BCD number is zero, print the last 0 bit BIT_LEFT_ALIGN, b jr nz, .skipRightAlignmentAdjustment dec hl ; if the string is right-aligned, it needs to be moved back one space diff --git a/home/print_num.asm b/home/print_num.asm index e0af0a4e0..0280da8d4 100644 --- a/home/print_num.asm +++ b/home/print_num.asm @@ -93,11 +93,16 @@ MACRO print_digit call .NextDigit ENDM -.millions print_digit 1000000 -.hundred_thousands print_digit 100000 -.ten_thousands print_digit 10000 -.thousands print_digit 1000 -.hundreds print_digit 100 +; millions + print_digit 1000000 +.hundred_thousands + print_digit 100000 +.ten_thousands + print_digit 10000 +.thousands + print_digit 1000 +.hundreds + print_digit 100 .tens ld c, 0 @@ -124,7 +129,7 @@ ENDM .next call .NextDigit -.ones +; ones ld a, '0' add b ld [hli], a diff --git a/home/print_text.asm b/home/print_text.asm index fe7843500..8e351ba3b 100644 --- a/home/print_text.asm +++ b/home/print_text.asm @@ -24,7 +24,7 @@ PrintLetterDelay:: .checkButtons call Joypad ldh a, [hJoyHeld] -.checkAButton +; check A button bit B_PAD_A, a jr z, .checkBButton jr .endWait diff --git a/home/reset_player_sprite.asm b/home/reset_player_sprite.asm index 2765d6132..6e3413637 100644 --- a/home/reset_player_sprite.asm +++ b/home/reset_player_sprite.asm @@ -15,7 +15,8 @@ ResetPlayerSpriteData:: ; overwrites sprite data with zeroes ResetPlayerSpriteData_ClearSpriteData:: - ld bc, $10 + ld bc, SPRITESTATEDATA1_LENGTH + ASSERT SPRITESTATEDATA2_LENGTH == SPRITESTATEDATA1_LENGTH xor a call FillMemory ret diff --git a/home/start_menu.asm b/home/start_menu.asm index b1bc05399..f2aae5dda 100644 --- a/home/start_menu.asm +++ b/home/start_menu.asm @@ -14,7 +14,7 @@ RedisplayStartMenu_DoNotDrawStartMenu:: .loop call HandleMenuInput ld b, a -.checkIfUpPressed +; check if Up pressed bit B_PAD_UP, a jr z, .checkIfDownPressed ld a, [wCurrentMenuItem] ; menu selection diff --git a/home/text_script.asm b/home/text_script.asm index 44ba45671..96a6b11df 100644 --- a/home/text_script.asm +++ b/home/text_script.asm @@ -112,8 +112,8 @@ CloseTextDisplay:: ldh [hAutoBGTransferEnabled], a ; disable continuous WRAM to VRAM transfer each V-blank ; loop to make sprites face the directions they originally faced before the dialogue ld hl, wSprite01StateData2OrigFacingDirection - ld c, $0f - ld de, $10 + ld c, NUM_SPRITESTATEDATA_STRUCTS - 1 + ld de, SPRITESTATEDATA1_LENGTH .restoreSpriteFacingDirectionLoop ld a, [hl] ; x#SPRITESTATEDATA2_ORIGFACINGDIRECTION dec h diff --git a/home/trainers.asm b/home/trainers.asm index fa9167fcd..6e007a95e 100644 --- a/home/trainers.asm +++ b/home/trainers.asm @@ -19,7 +19,7 @@ ExecuteCurMapScriptInTable:: ld hl, wStatusFlags7 bit BIT_USE_CUR_MAP_SCRIPT, [hl] res BIT_USE_CUR_MAP_SCRIPT, [hl] - jr z, .useProvidedIndex ; test if map script index was overridden manually + jr z, .useProvidedIndex ; test if map script index was overridden manually ld a, [wCurMapScript] .useProvidedIndex pop hl @@ -31,12 +31,12 @@ ExecuteCurMapScriptInTable:: LoadGymLeaderAndCityName:: push de ld de, wGymCityName - ld bc, $11 - call CopyData ; load city name + ld bc, GYM_CITY_LENGTH + call CopyData ; load city name pop hl ld de, wGymLeaderName ld bc, NAME_LENGTH - jp CopyData ; load gym leader name + jp CopyData ; load gym leader name ; reads specific information from trainer header (pointed to at wTrainerHeaderPtr) ; a: offset in header data @@ -155,7 +155,7 @@ ENDC ldh [hJoyHeld], a call TrainerWalkUpToPlayer_Bank0 ld hl, wCurMapScript - inc [hl] ; increment map script index (next script function is usually DisplayEnemyTrainerTextAndStartBattle) + inc [hl] ; increment map script index (next script function is usually DisplayEnemyTrainerTextAndStartBattle) ret ; display the before battle text after the enemy trainer has walked up to the player's sprite @@ -179,7 +179,7 @@ StartTrainerBattle:: ld hl, wStatusFlags4 set BIT_UNKNOWN_4_1, [hl] ld hl, wCurMapScript - inc [hl] ; increment map script index (next script function is usually EndTrainerBattle) + inc [hl] ; increment map script index (next script function is usually EndTrainerBattle) ret EndTrainerBattle:: @@ -201,14 +201,14 @@ EndTrainerBattle:: call TrainerFlagAction ; flag trainer as fought ld a, [wEnemyMonOrTrainerClass] cp OPP_ID_OFFSET - jr nc, .skipRemoveSprite ; test if trainer was fought (in that case skip removing the corresponding sprite) - ld hl, wMissableObjectList + jr nc, .skipRemoveSprite ; test if trainer was fought (in that case skip removing the corresponding sprite) + ld hl, wToggleableObjectList ld de, $2 ld a, [wSpriteIndex] - call IsInArray ; search for sprite ID + call IsInArray ; search for sprite ID inc hl ld a, [hl] - ld [wMissableObjectIndex], a ; load corresponding missable object index and remove it + ld [wToggleableObjectIndex], a ; load corresponding toggleable object index and remove it predef HideObject .skipRemoveSprite ld hl, wStatusFlags5 @@ -269,7 +269,7 @@ CheckForEngagingTrainers:: .trainerLoop call StoreTrainerHeaderPointer ; set trainer header pointer to current trainer ld a, [de] - ld [wSpriteIndex], a ; store trainer flag's bit + ld [wSpriteIndex], a ; store trainer flag's bit ld [wTrainerHeaderFlagBit], a cp -1 ret z @@ -278,7 +278,7 @@ CheckForEngagingTrainers:: ld b, FLAG_TEST ld a, [wTrainerHeaderFlagBit] ld c, a - call TrainerFlagAction ; read trainer flag + call TrainerFlagAction ; read trainer flag ld a, c and a ; has the trainer already been defeated? jr nz, .continue @@ -299,7 +299,7 @@ CheckForEngagingTrainers:: pop hl ld a, [wTrainerSpriteOffset] and a - ret nz ; break if the trainer is engaging + ret nz ; break if the trainer is engaging .continue ld hl, $c add hl, de @@ -364,8 +364,8 @@ PrintEndBattleText:: GetSavedEndBattleTextPointer:: ld a, [wBattleResult] and a -; won battle jr nz, .lostBattle +; won battle ld a, [wEndBattleWinTextPointer] ld h, a ld a, [wEndBattleWinTextPointer + 1] diff --git a/home/vcopy.asm b/home/vcopy.asm index 1a67cdb5a..c9fcfb34e 100644 --- a/home/vcopy.asm +++ b/home/vcopy.asm @@ -20,9 +20,14 @@ GetRowColAddressBgMap:: ; INPUT: h - high byte of background tile map address in VRAM ClearBgMap:: ld a, ' ' - jr .next + jr FillBgMapCommon + +; fills a VRAM background map with tile index in register l +; INPUT: h - high byte of background tile map address in VRAM +FillBgMap:: ; unreferenced ld a, l -.next + +FillBgMapCommon: ld de, TILEMAP_AREA ld l, e .loop @@ -69,8 +74,8 @@ RedrawRowOrColumn:: .noCarry ; the following 4 lines wrap us from bottom to top if necessary ld a, d - and $3 - or $98 + and HIGH(TILEMAP_AREA - 1) + or HIGH(vBGMap0) ld d, a dec c jr nz, .loop1 @@ -86,7 +91,7 @@ RedrawRowOrColumn:: push de call .DrawHalf ; draw upper half pop de - ld a, TILEMAP_WIDTH ; width of VRAM background map + ld a, TILEMAP_WIDTH add e ld e, a ; fall through and draw lower half @@ -102,10 +107,10 @@ RedrawRowOrColumn:: ld a, e inc a ; the following 6 lines wrap us from the right edge to the left edge if necessary - and $1f + and %11111 ld b, a ld a, e - and $e0 + and %11100000 or b ld e, a dec c @@ -130,7 +135,7 @@ AutoBgMapTransfer:: dec a jr z, .transferMiddleThird .transferBottomThird - hlcoord 0, 12 + hlcoord 0, 2 * SCREEN_HEIGHT / 3 ld sp, hl ldh a, [hAutoBGTransferDest + 1] ld h, a @@ -150,7 +155,7 @@ AutoBgMapTransfer:: ld a, TRANSFERMIDDLE jr .doTransfer .transferMiddleThird - hlcoord 0, 6 + hlcoord 0, SCREEN_HEIGHT / 3 ld sp, hl ldh a, [hAutoBGTransferDest + 1] ld h, a @@ -161,7 +166,7 @@ AutoBgMapTransfer:: ld a, TRANSFERBOTTOM .doTransfer ldh [hAutoBGTransferPortion], a ; store next portion - ld b, 6 + ld b, SCREEN_HEIGHT / 3 TransferBgRows:: ; unrolled loop and using pop for speed @@ -364,7 +369,7 @@ UpdateMovingBgTiles:: ; water ld hl, vTileset tile $14 - ld c, $10 + ld c, TILE_SIZE ld a, [wMovingBGTilesCounter2] inc a @@ -409,7 +414,7 @@ UpdateMovingBgTiles:: ld hl, FlowerTile3 .copy ld de, vTileset tile $03 - ld c, $10 + ld c, TILE_SIZE .loop ld a, [hli] ld [de], a diff --git a/home/window.asm b/home/window.asm index c34b4f69e..fcc048ec8 100644 --- a/home/window.asm +++ b/home/window.asm @@ -54,11 +54,11 @@ HandleMenuInput_:: jr nz, .checkOtherKeys bit B_PAD_UP, a jr z, .checkIfDownPressed -.upPressed +; Up pressed ld a, [wCurrentMenuItem] ; selected menu item and a ; already at the top of the menu? jr z, .alreadyAtTop -.notAtTop +; not at top dec a ld [wCurrentMenuItem], a ; move selected menu item up one space jr .checkOtherKeys @@ -72,14 +72,14 @@ HandleMenuInput_:: .checkIfDownPressed bit B_PAD_DOWN, a jr z, .checkOtherKeys -.downPressed +; Down pressed ld a, [wCurrentMenuItem] inc a ld c, a ld a, [wMaxMenuItem] cp c jr nc, .notAtBottom -.alreadyAtBottom +; already at bottom ld a, [wMenuWrappingEnabled] and a ; is wrapping around enabled? jr z, .noWrappingAround @@ -95,7 +95,7 @@ HandleMenuInput_:: ldh a, [hJoy5] and PAD_A | PAD_B jr z, .skipPlayingSound -.AButtonOrBButtonPressed +; A or B pressed push hl ld hl, wMiscFlags bit BIT_NO_MENU_BUTTON_SOUND, [hl] @@ -153,7 +153,7 @@ PlaceMenuCursor:: ld a, [hl] cp '▶' ; was an arrow next to the previously selected menu item? jr nz, .skipClearingArrow -.clearArrow +; clear arrow ld a, [wTileBehindCursor] ld [hl], a .skipClearingArrow diff --git a/includes.asm b/includes.asm index 71f4a9b84..d677df592 100644 --- a/includes.asm +++ b/includes.asm @@ -32,6 +32,7 @@ INCLUDE "constants/item_constants.asm" INCLUDE "constants/pokemon_constants.asm" INCLUDE "constants/pokedex_constants.asm" INCLUDE "constants/pokemon_data_constants.asm" +INCLUDE "constants/player_constants.asm" INCLUDE "constants/trainer_constants.asm" INCLUDE "constants/icon_constants.asm" INCLUDE "constants/sprite_constants.asm" @@ -41,7 +42,7 @@ INCLUDE "constants/list_constants.asm" INCLUDE "constants/map_constants.asm" INCLUDE "constants/map_data_constants.asm" INCLUDE "constants/map_object_constants.asm" -INCLUDE "constants/hide_show_constants.asm" +INCLUDE "constants/toggle_constants.asm" INCLUDE "constants/sprite_set_constants.asm" INCLUDE "constants/credits_constants.asm" INCLUDE "constants/audio_constants.asm" diff --git a/layout.link b/layout.link index cbef589be..a035e7446 100644 --- a/layout.link +++ b/layout.link @@ -59,7 +59,7 @@ ROMX $7 "Maps 3" "bank7" "Maps 4" - "Hidden Objects 1" + "Hidden Events 1" ROMX $8 "Sound Effect Headers 2" "Music Headers 2" @@ -101,7 +101,7 @@ ROMX $13 "Maps 9" ROMX $14 "Maps 10" - "Hidden Objects 2" + "Hidden Events 2" ROMX $15 "Maps 11" "Battle Engine 7" @@ -117,12 +117,12 @@ ROMX $17 "Maps 15" "Starter Dex" "Maps 16" - "Hidden Objects 3" + "Hidden Events 3" ROMX $18 "Maps 17" "Cinnabar Lab Fossils" "Maps 18" - "Hidden Objects 4" + "Hidden Events 4" ROMX $19 "Tilesets 1" ROMX $1A @@ -217,7 +217,7 @@ ROMX $3C "Pikachu Graphics 2" "Credits" "Maps 22" - "Hidden Objects Core" + "Hidden Events Core" ROMX $3D "Battle Engine 8" "Pics 7" diff --git a/macros/asserts.asm b/macros/asserts.asm index e2de15053..11e0ee992 100644 --- a/macros/asserts.asm +++ b/macros/asserts.asm @@ -4,8 +4,8 @@ MACRO? _redef_current_label IF DEF(\1) PURGE \1 ENDC - IF _NARG == 3 + (\3) - DEF \1 EQUS "\<_NARG>" + IF _NARG > 2 + DEF \1 EQUS "\3" ELIF STRLEN(#__SCOPE__) IF {{__SCOPE__}} - @ == 0 DEF \1 EQUS #{__SCOPE__} @@ -19,7 +19,8 @@ ENDM MACRO? table_width DEF CURRENT_TABLE_WIDTH = \1 - _redef_current_label CURRENT_TABLE_START, "._table_width\@", 2, \# + SHIFT + _redef_current_label CURRENT_TABLE_START, "._table_width\@", \# ENDM MACRO? assert_table_length @@ -40,11 +41,20 @@ ENDM MACRO? list_start DEF list_index = 0 - _redef_current_label CURRENT_LIST_START, "._list_start\@", 1, \# + DEF list_item_length = 0 + IF _NARG > 0 + DEF list_item_length = \1 + SHIFT + ENDC + _redef_current_label CURRENT_LIST_START, "._list_start\@", \# ENDM MACRO? li ASSERT STRFIND(\1, "@") == -1, "String terminator \"@\" in list entry: \1" + IF list_item_length + ASSERT CHARLEN(\1) <= list_item_length, \ + "List entry longer than {d:list_item_length} characters: \1" + ENDC db \1, "@" DEF list_index += 1 ENDM diff --git a/macros/code.asm b/macros/code.asm index c972f97e6..70ff4249c 100644 --- a/macros/code.asm +++ b/macros/code.asm @@ -10,6 +10,14 @@ ENDM ; Design patterns +MACRO ld_hli_a_string + FOR n, CHARLEN(\1) - 1 + ld a, CHARVAL(STRCHAR(\1, n)) + ld [hli], a + ENDR + ld [hl], CHARVAL(STRCHAR(\1, CHARLEN(\1) - 1)) +ENDM + MACRO dict IF \1 == 0 and a diff --git a/macros/farcall.asm b/macros/farcall.asm index e8bf8e9c3..e3e11a0fc 100644 --- a/macros/farcall.asm +++ b/macros/farcall.asm @@ -1,3 +1,10 @@ +; Far calls to another bank + +; There is no difference between `farcall` and `callfar`, except the arbitrary +; order in which they set `b` and `hl` before calling `FarCall`. +; We use the more natural name "farcall" for the more common order. +; The same goes for `farjp` and `jpfar`. + MACRO farcall ld b, BANK(\1) ld hl, \1 diff --git a/macros/ram.asm b/macros/ram.asm index a8deac760..24a3a9bdd 100644 --- a/macros/ram.asm +++ b/macros/ram.asm @@ -4,8 +4,6 @@ MACRO? flag_array ds ((\1) + 7) / 8 ENDM -DEF BOX_STRUCT_LENGTH EQU 25 + NUM_MOVES * 2 - MACRO box_struct \1Species:: db \1HP:: dw diff --git a/macros/scripts/events.asm b/macros/scripts/events.asm index c5b494ddc..ed01c0c70 100644 --- a/macros/scripts/events.asm +++ b/macros/scripts/events.asm @@ -374,7 +374,7 @@ MACRO ResetEventRange IF event_fill_count > 1 ld hl, wEventFlags + event_fill_start - ; force xor a if we just to wrote to it above + ; force xor a if we just wrote to it above IF (_NARG < 3) || (((\1) % 8) != 0) xor a ENDC diff --git a/main.asm b/main.asm index a242fcbdd..b10fc7e01 100644 --- a/main.asm +++ b/main.asm @@ -43,13 +43,13 @@ INCLUDE "engine/overworld/player_state.asm" INCLUDE "engine/events/poison.asm" INCLUDE "engine/overworld/tilesets.asm" INCLUDE "engine/overworld/daycare_exp.asm" -INCLUDE "data/maps/hide_show_data.asm" +INCLUDE "data/maps/toggleable_objects.asm" INCLUDE "engine/overworld/wild_mons.asm" INCLUDE "engine/items/item_effects.asm" INCLUDE "engine/menus/draw_badges.asm" INCLUDE "engine/overworld/update_map.asm" INCLUDE "engine/overworld/cut.asm" -INCLUDE "engine/overworld/missable_objects.asm" +INCLUDE "engine/overworld/toggleable_objects.asm" INCLUDE "engine/overworld/push_boulder.asm" INCLUDE "engine/pokemon/add_mon.asm" INCLUDE "engine/flag_action.asm" @@ -59,12 +59,12 @@ INCLUDE "engine/movie/oak_speech/init_player_data.asm" INCLUDE "engine/items/get_bag_item_quantity.asm" INCLUDE "engine/overworld/pathfinding.asm" INCLUDE "engine/gfx/hp_bar.asm" -INCLUDE "engine/events/hidden_objects/bookshelves.asm" -INCLUDE "engine/events/hidden_objects/indigo_plateau_statues.asm" -INCLUDE "engine/events/hidden_objects/book_or_sculpture.asm" -INCLUDE "engine/events/hidden_objects/elevator.asm" -INCLUDE "engine/events/hidden_objects/town_map.asm" -INCLUDE "engine/events/hidden_objects/pokemon_stuff.asm" +INCLUDE "engine/events/hidden_events/bookshelves.asm" +INCLUDE "engine/events/hidden_events/indigo_plateau_statues.asm" +INCLUDE "engine/events/hidden_events/book_or_sculpture.asm" +INCLUDE "engine/events/hidden_events/elevator.asm" +INCLUDE "engine/events/hidden_events/town_map.asm" +INCLUDE "engine/events/hidden_events/pokemon_stuff.asm" SECTION "bank4", ROMX @@ -111,16 +111,16 @@ INCLUDE "engine/movie/oak_speech/clear_save.asm" INCLUDE "engine/events/elevator.asm" -SECTION "Hidden Objects 1", ROMX +SECTION "Hidden Events 1", ROMX INCLUDE "engine/menus/oaks_pc.asm" -INCLUDE "engine/events/hidden_objects/new_bike.asm" -INCLUDE "engine/events/hidden_objects/oaks_lab_posters.asm" -INCLUDE "engine/events/hidden_objects/safari_game.asm" -INCLUDE "engine/events/hidden_objects/cinnabar_gym_quiz.asm" -INCLUDE "engine/events/hidden_objects/magazines.asm" -INCLUDE "engine/events/hidden_objects/bills_house_pc.asm" -INCLUDE "engine/events/hidden_objects/oaks_lab_email.asm" +INCLUDE "engine/events/hidden_events/new_bike.asm" +INCLUDE "engine/events/hidden_events/oaks_lab_posters.asm" +INCLUDE "engine/events/hidden_events/safari_game.asm" +INCLUDE "engine/events/hidden_events/cinnabar_gym_quiz.asm" +INCLUDE "engine/events/hidden_events/magazines.asm" +INCLUDE "engine/events/hidden_events/bills_house_pc.asm" +INCLUDE "engine/events/hidden_events/oaks_lab_email.asm" SECTION "Bill's PC", ROMX @@ -193,13 +193,13 @@ SECTION "Dungeon Warps", ROMX INCLUDE "engine/overworld/dungeon_warps.asm" -SECTION "Hidden Objects 2", ROMX +SECTION "Hidden Events 2", ROMX INCLUDE "engine/events/card_key.asm" INCLUDE "engine/events/prize_menu.asm" -INCLUDE "engine/events/hidden_objects/school_notebooks.asm" -INCLUDE "engine/events/hidden_objects/fighting_dojo.asm" -INCLUDE "engine/events/hidden_objects/indigo_plateau_hq.asm" +INCLUDE "engine/events/hidden_events/school_notebooks.asm" +INCLUDE "engine/events/hidden_events/fighting_dojo.asm" +INCLUDE "engine/events/hidden_events/indigo_plateau_hq.asm" SECTION "Battle Engine 7", ROMX @@ -234,17 +234,17 @@ SECTION "Starter Dex", ROMX INCLUDE "engine/events/starter_dex.asm" -SECTION "Hidden Objects 3", ROMX +SECTION "Hidden Events 3", ROMX INCLUDE "engine/movie/evolution.asm" INCLUDE "engine/pokemon/set_types.asm" -INCLUDE "engine/events/hidden_objects/reds_room.asm" -INCLUDE "engine/events/hidden_objects/route_15_binoculars.asm" -INCLUDE "engine/events/hidden_objects/museum_fossils.asm" -INCLUDE "engine/events/hidden_objects/fanclub_pictures.asm" -INCLUDE "engine/events/hidden_objects/museum_fossils2.asm" -INCLUDE "engine/events/hidden_objects/school_blackboard.asm" -INCLUDE "engine/events/hidden_objects/vermilion_gym_trash.asm" +INCLUDE "engine/events/hidden_events/reds_room.asm" +INCLUDE "engine/events/hidden_events/route_15_binoculars.asm" +INCLUDE "engine/events/hidden_events/museum_fossils.asm" +INCLUDE "engine/events/hidden_events/fanclub_pictures.asm" +INCLUDE "engine/events/hidden_events/museum_fossils2.asm" +INCLUDE "engine/events/hidden_events/school_blackboard.asm" +INCLUDE "engine/events/hidden_events/vermilion_gym_trash.asm" SECTION "Cinnabar Lab Fossils", ROMX @@ -252,12 +252,12 @@ SECTION "Cinnabar Lab Fossils", ROMX INCLUDE "engine/events/cinnabar_lab.asm" -SECTION "Hidden Objects 4", ROMX +SECTION "Hidden Events 4", ROMX -INCLUDE "engine/events/hidden_objects/gym_statues.asm" -INCLUDE "engine/events/hidden_objects/bench_guys.asm" -INCLUDE "engine/events/hidden_objects/blues_room.asm" -INCLUDE "engine/events/hidden_objects/pokecenter_pc.asm" +INCLUDE "engine/events/hidden_events/gym_statues.asm" +INCLUDE "engine/events/hidden_events/bench_guys.asm" +INCLUDE "engine/events/hidden_events/blues_room.asm" +INCLUDE "engine/events/hidden_events/pokecenter_pc.asm" SECTION "Version Graphics", ROMX @@ -352,7 +352,7 @@ INCLUDE "engine/overworld/specific_script_flags.asm" SECTION "Try Pikachu Movement", ROMX -INCLUDE "engine/overworld/unused_load_missable_object_data.asm" +INCLUDE "engine/overworld/unused_load_toggleable_object_data.asm" INCLUDE "engine/events/try_pikachu_movement.asm" @@ -362,10 +362,10 @@ INCLUDE "engine/events/pokecenter_chansey.asm" INCLUDE "engine/movie/credits.asm" -SECTION "Hidden Objects Core", ROMX +SECTION "Hidden Events Core", ROMX -INCLUDE "engine/overworld/hidden_objects.asm" -INCLUDE "engine/events/hidden_objects/vermilion_gym_trash2.asm" +INCLUDE "engine/overworld/hidden_events.asm" +INCLUDE "engine/events/hidden_events/vermilion_gym_trash2.asm" SECTION "Battle Engine 8", ROMX diff --git a/ram/hram.asm b/ram/hram.asm index 7c38d1383..a827e652b 100644 --- a/ram/hram.asm +++ b/ram/hram.asm @@ -325,7 +325,7 @@ hItemToRemoveIndex:: db NEXTU hItemCounter:: hSavedCoordIndex:: -hMissableObjectIndex:: +hToggleableObjectIndex:: hGymTrashCanRandNumMask:: hInteractedWithBookshelf:: db @@ -353,7 +353,7 @@ hDivisor2:: db hQuotient2:: db NEXTU -hIsHiddenMissableObject:: db +hIsToggleableObjectOff:: db ENDU hMapROMBank:: db @@ -373,7 +373,7 @@ hSpriteMapXCoord:: db NEXTU hItemAlreadyFound:: db ds 2 -hDidntFindAnyHiddenObject:: db +hDidntFindAnyHiddenEvent:: db NEXTU ds 1 diff --git a/ram/vram.asm b/ram/vram.asm index fafb5d8e7..0819fe0a5 100644 --- a/ram/vram.asm +++ b/ram/vram.asm @@ -12,8 +12,8 @@ NEXTU ; battle/menu vSprites:: ds $80 tiles vFont:: ds $80 tiles -vFrontPic:: ds 7 * 7 tiles -vBackPic:: ds 7 * 7 tiles +vFrontPic:: ds PIC_SIZE tiles +vBackPic:: ds PIC_SIZE tiles NEXTU ; overworld @@ -25,7 +25,7 @@ NEXTU ; title ds $80 tiles vTitleLogo:: ds $80 tiles - ds 7 * 7 tiles + ds PIC_SIZE tiles vTitleLogo2:: ds 30 tiles ENDU diff --git a/ram/wram.asm b/ram/wram.asm index b3d5dd5e5..817b6b28a 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -272,7 +272,7 @@ wOverworldMap:: ds 1300 wOverworldMapEnd:: NEXTU -wTempPic:: ds 7 * 7 tiles +wTempPic:: ds PIC_SIZE tiles NEXTU wPrinterData:: @@ -467,7 +467,7 @@ wCheckFor180DegreeTurn:: db ds 1 -wMissableObjectIndex:: db +wToggleableObjectIndex:: db wPredefID:: db wPredefHL:: dw @@ -506,7 +506,7 @@ wFilteredBagItems:: ds 4 NEXTU ; Saved copy of OAM for the first frame of the animation to make it easy to ; flip back from the second frame. -wMonPartySpritesSavedOAM:: ds $60 +wMonPartySpritesSavedOAM:: ds OBJ_SIZE * 4 * PARTY_LENGTH NEXTU wTrainerCardBlkPacket:: ds $40 @@ -533,7 +533,7 @@ wSlotMachineSevenAndBarModeChance:: db ; ROM back to return to when the player is done with the slot machine wSlotMachineSavedROMBank:: db ds 166 -wLuckySlotHiddenObjectIndex:: db +wLuckySlotHiddenEventIndex:: db NEXTU ; values between 0-6. Shake screen horizontally, shake screen vertically, blink Pokemon... @@ -544,7 +544,7 @@ wAnimPalette:: db NEXTU ds 60 ; temporary buffer when swapping party mon data -wSwitchPartyMonTempBuffer:: ds 44 ; party_struct size +wSwitchPartyMonTempBuffer:: ds PARTYMON_STRUCT_LENGTH NEXTU ds 120 @@ -857,7 +857,11 @@ NEXTU ds 1 ; difference in X between the next ball and the current one wHUDPokeballGfxOffsetX:: db -wHUDGraphicsTiles:: ds 3 +wHUDGraphicsTiles:: +wHUDUnusedTopTile:: db +wHUDCornerTile:: db +wHUDTriangleTile:: db +wHUDGraphicsTilesEnd:: NEXTU ; the level of the mon at the time it entered day care @@ -909,12 +913,12 @@ wTempCoins1:: dw wTempCoins2:: dw NEXTU -wHiddenObjectFunctionArgument:: db -wHiddenObjectFunctionRomBank:: db -wHiddenObjectIndex:: db -wHiddenObjectY:: db +wHiddenEventFunctionArgument:: db +wHiddenEventFunctionRomBank:: db +wHiddenEventIndex:: db +wHiddenEventY:: db wHiddenItemOrCoinsIndex:: -wHiddenObjectX:: db +wHiddenEventX:: db NEXTU wPlayerSpinInPlaceAnimFrameDelay:: db @@ -1254,7 +1258,7 @@ NEXTU wPartyHPBarAttributes:: ds PARTY_LENGTH ENDU -wGymCityName:: ds 17 +wGymCityName:: ds GYM_CITY_LENGTH wGymLeaderName:: ds NAME_LENGTH @@ -1383,7 +1387,7 @@ wTrainerPicPointer:: dw ds 1 UNION -wTempMoveNameBuffer:: ds ITEM_NAME_LENGTH + 1 +wTempMoveNameBuffer:: ds MOVE_NAME_LENGTH NEXTU ; The name of the mon that is learning a move. @@ -1395,7 +1399,7 @@ ENDU ; money received after battle = base money × level of last enemy mon wTrainerBaseMoney:: dw ; BCD -wMissableObjectCounter:: db +wToggleableObjectCounter:: db ds 1 @@ -1445,6 +1449,7 @@ wCriticalHitOrOHKO:: db wMoveMissed:: db +wBattleStatusData:: ; always 0 wPlayerStatsToDouble:: db ; always 0 @@ -1502,6 +1507,7 @@ wPlayerNumHits:: db ENDU ds 2 +wBattleStatusDataEnd:: ; non-zero when an item or move that allows escape from battle was used wEscapedFromBattle:: db @@ -1731,7 +1737,8 @@ wMoves:: ds NUM_MOVES wMoveNum:: db -wMovesString:: ds 56 +; concatenated move name list where intermediate '@' are replaced with '' +wMovesString:: ds NUM_MOVES * MOVE_NAME_LENGTH wUnusedCurMapTilesetCopy:: db @@ -1981,7 +1988,7 @@ wWestConnectionHeader:: map_connection_struct wWest wEastConnectionHeader:: map_connection_struct wEast ; sprite set for the current map (11 sprite picture ID's) -wSpriteSet:: ds 11 +wSpriteSet:: ds SPRITE_SET_LENGTH ; sprite set ID for the current map wSpriteSetID:: db @@ -2154,9 +2161,9 @@ wUnusedMapVariable:: db wPlayerCoins:: dw ; BCD -; bit array of missable objects. set = removed -wMissableObjectFlags:: flag_array $100 -wMissableObjectFlagsEnd:: +; bit array of toggleable objects; bit set = toggled off +wToggleableObjectFlags:: flag_array $100 +wToggleableObjectFlagsEnd:: ds 7 @@ -2165,9 +2172,9 @@ wSavedSpriteImageIndex:: db ; each entry consists of 2 bytes ; * the sprite ID (depending on the current map) -; * the missable object index (global, used for wMissableObjectFlags) +; * the toggleable object index (global, used for wToggleableObjectFlags) ; terminated with $FF -wMissableObjectList:: ds 16 * 2 + 1 +wToggleableObjectList:: ds 16 * 2 + 1 ds 1 diff --git a/scripts/BillsHouse.asm b/scripts/BillsHouse.asm index cb1afbddc..8582e397e 100644 --- a/scripts/BillsHouse.asm +++ b/scripts/BillsHouse.asm @@ -94,8 +94,8 @@ BillsHouseScript3: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_BILL_POKEMON - ld [wMissableObjectIndex], a + ld a, TOGGLE_BILL_POKEMON + ld [wToggleableObjectIndex], a predef HideObject call CheckPikachuFollowingPlayer jr z, .asm_1e13e @@ -153,8 +153,8 @@ BillsHouseScript5: ld a, 5 ldh [hSpriteMapXCoord], a call SetSpritePosition1 - ld a, HS_BILL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_BILL_1 + ld [wToggleableObjectIndex], a predef ShowObject ld c, 8 call DelayFrames @@ -179,13 +179,13 @@ BillsHouseScript5: .asm_1e1c6 ld a, BILLSHOUSE_BILL1 ldh [hSpriteIndex], a - ld de, MovementData_1e807 + ld de, .BillExitMachineMovement call MoveSprite ld a, SCRIPT_BILLSHOUSE_SCRIPT6 ld [wBillsHouseCurScript], a ret -MovementData_1e807: +.BillExitMachineMovement: db NPC_MOVEMENT_DOWN db NPC_MOVEMENT_RIGHT db NPC_MOVEMENT_RIGHT diff --git a/scripts/BillsHouse_2.asm b/scripts/BillsHouse_2.asm index f75ab204c..4a897d87a 100644 --- a/scripts/BillsHouse_2.asm +++ b/scripts/BillsHouse_2.asm @@ -39,11 +39,11 @@ BillsHousePrintBillSSTicketText:: ld hl, .SSTicketReceivedText call PrintText SetEvent EVENT_GOT_SS_TICKET - ld a, HS_CERULEAN_GUARD_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_GUARD_1 + ld [wToggleableObjectIndex], a predef ShowObject - ld a, HS_CERULEAN_GUARD_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_GUARD_2 + ld [wToggleableObjectIndex], a predef HideObject .got_ss_ticket ld hl, .WhyDontYouGoInsteadOfMeText diff --git a/scripts/BluesHouse.asm b/scripts/BluesHouse.asm index 834a24e4b..2d7f19dc8 100644 --- a/scripts/BluesHouse.asm +++ b/scripts/BluesHouse.asm @@ -39,8 +39,8 @@ BluesHouseDaisySittingText: lb bc, TOWN_MAP, 1 call GiveItem jr nc, .bag_full - ld a, HS_TOWN_MAP - ld [wMissableObjectIndex], a + ld a, TOGGLE_TOWN_MAP + ld [wToggleableObjectIndex], a predef HideObject ld hl, GotMapText call PrintText diff --git a/scripts/CeladonMansionRoofHouse.asm b/scripts/CeladonMansionRoofHouse.asm index e71d14d50..330efe0c7 100644 --- a/scripts/CeladonMansionRoofHouse.asm +++ b/scripts/CeladonMansionRoofHouse.asm @@ -16,8 +16,8 @@ CeladonMansionRoofHouseEeveePokeballText: lb bc, EEVEE, 25 call GivePokemon jr nc, .party_full - ld a, HS_CELADON_MANSION_EEVEE_GIFT - ld [wMissableObjectIndex], a + ld a, TOGGLE_CELADON_MANSION_EEVEE_GIFT + ld [wToggleableObjectIndex], a predef HideObject .party_full jp TextScriptEnd diff --git a/scripts/CeruleanCity.asm b/scripts/CeruleanCity.asm index 0bc77b42a..8f26cb432 100644 --- a/scripts/CeruleanCity.asm +++ b/scripts/CeruleanCity.asm @@ -8,8 +8,8 @@ CeruleanCityClearScripts: xor a ; SCRIPT_CERULEANCITY_DEFAULT ld [wJoyIgnore], a ld [wCeruleanCityCurScript], a - ld a, HS_CERULEAN_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_RIVAL + ld [wToggleableObjectIndex], a predef_jump HideObject CeruleanCity_ScriptPointers: @@ -88,8 +88,8 @@ ENDC call GetPointerWithinSpriteStateData2 ld [hl], 25 .playerOnRightSideOfBridge - ld a, HS_CERULEAN_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_RIVAL + ld [wToggleableObjectIndex], a predef ShowObject ld de, CeruleanCityMovement1 ld a, CERULEANCITY_RIVAL @@ -203,8 +203,8 @@ CeruleanCityRivalCleanupScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_CERULEAN_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_RIVAL + ld [wToggleableObjectIndex], a predef HideObject xor a ld [wJoyIgnore], a diff --git a/scripts/CeruleanCity_2.asm b/scripts/CeruleanCity_2.asm index 53ace5c8a..85986a7af 100644 --- a/scripts/CeruleanCity_2.asm +++ b/scripts/CeruleanCity_2.asm @@ -3,14 +3,14 @@ CeruleanHideRocket: ; one is called after you beat the Rocket that gives you TM28 DIG. ; the screen then fades out, he disappears, and fades back in call GBFadeOutToBlack - ld a, HS_CERULEAN_GUARD_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_GUARD_1 + ld [wToggleableObjectIndex], a predef ShowObject - ld a, HS_CERULEAN_GUARD_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_GUARD_2 + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_CERULEAN_ROCKET - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_ROCKET + ld [wToggleableObjectIndex], a predef HideObject call GBFadeInFromBlack ret diff --git a/scripts/CeruleanMelaniesHouse.asm b/scripts/CeruleanMelaniesHouse.asm index 1d2b817dd..8b8095e01 100644 --- a/scripts/CeruleanMelaniesHouse.asm +++ b/scripts/CeruleanMelaniesHouse.asm @@ -44,8 +44,8 @@ CeruleanMelanieHouseMelanieText: ld [wDoNotWaitForButtonPressAfterDisplayingText], a ld hl, CeruleanHouse1Text_1cfd3 call PrintText - ld a, HS_CERULEAN_BULBASAUR - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_BULBASAUR + ld [wToggleableObjectIndex], a predef HideObject SetEvent EVENT_GOT_BULBASAUR_IN_CERULEAN .asm_1cfb3 diff --git a/scripts/ChampionsRoom.asm b/scripts/ChampionsRoom.asm index 8db95e564..42b9e7be1 100644 --- a/scripts/ChampionsRoom.asm +++ b/scripts/ChampionsRoom.asm @@ -110,8 +110,8 @@ ChampionsRoomOakArrivesScript: ld a, CHAMPIONSROOM_OAK ldh [hSpriteIndex], a call MoveSprite - ld a, HS_CHAMPIONS_ROOM_OAK - ld [wMissableObjectIndex], a + ld a, TOGGLE_CHAMPIONS_ROOM_OAK + ld [wToggleableObjectIndex], a predef ShowObject ld a, SCRIPT_CHAMPIONSROOM_OAK_CONGRATULATES_PLAYER ld [wChampionsRoomCurScript], a @@ -187,8 +187,8 @@ ChampionsRoomOakExitsScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_CHAMPIONS_ROOM_OAK - ld [wMissableObjectIndex], a + ld a, TOGGLE_CHAMPIONS_ROOM_OAK + ld [wToggleableObjectIndex], a predef HideObject ld a, SCRIPT_CHAMPIONSROOM_PLAYER_FOLLOWS_OAK ld [wChampionsRoomCurScript], a diff --git a/scripts/Colosseum.asm b/scripts/Colosseum.asm index 4aaa42367..1489fd2c7 100644 --- a/scripts/Colosseum.asm +++ b/scripts/Colosseum.asm @@ -1,4 +1,5 @@ Colosseum_Script: + ASSERT TRADECENTER_OPPONENT == COLOSSEUM_OPPONENT jp TradeCenter_Script Colosseum_TextPointers: diff --git a/scripts/Daycare.asm b/scripts/Daycare.asm index f9c41edf3..f7544c7fd 100644 --- a/scripts/Daycare.asm +++ b/scripts/Daycare.asm @@ -183,7 +183,7 @@ DaycareGentlemanText: ld a, [wPartyCount] dec a push af - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH push bc ld hl, wPartyMon1Moves call AddNTimes @@ -200,7 +200,7 @@ DaycareGentlemanText: call AddNTimes ld d, h ld e, l - ld bc, wPartyMon1MaxHP - wPartyMon1HP + ld bc, MON_MAXHP - MON_HP add hl, bc ld a, [hli] ld [de], a diff --git a/scripts/FightingDojo.asm b/scripts/FightingDojo.asm index 04b35e82d..cf822d1fa 100644 --- a/scripts/FightingDojo.asm +++ b/scripts/FightingDojo.asm @@ -246,8 +246,8 @@ FightingDojoHitmonleePokeBallText: jr nc, .done ; once Poké Ball is taken, hide sprite - ld a, HS_FIGHTING_DOJO_GIFT_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_FIGHTING_DOJO_GIFT_1 + ld [wToggleableObjectIndex], a predef HideObject SetEvents EVENT_GOT_HITMONLEE, EVENT_DEFEATED_FIGHTING_DOJO .done @@ -281,8 +281,8 @@ FightingDojoHitmonchanPokeBallText: SetEvents EVENT_GOT_HITMONCHAN, EVENT_DEFEATED_FIGHTING_DOJO ; once Poké Ball is taken, hide sprite - ld a, HS_FIGHTING_DOJO_GIFT_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_FIGHTING_DOJO_GIFT_2 + ld [wToggleableObjectIndex], a predef HideObject .done jp TextScriptEnd diff --git a/scripts/GameCorner.asm b/scripts/GameCorner.asm index 5aaa998c2..4a4ce3ed9 100644 --- a/scripts/GameCorner.asm +++ b/scripts/GameCorner.asm @@ -20,7 +20,7 @@ GameCornerSelectLuckySlotMachine: srl a srl a srl a - ld [wLuckySlotHiddenObjectIndex], a + ld [wLuckySlotHiddenEventIndex], a ret GameCornerSetRocketHideoutDoorTile: @@ -111,8 +111,8 @@ GameCornerRocketExitScript: ret nz xor a ld [wJoyIgnore], a - ld a, HS_GAME_CORNER_ROCKET - ld [wMissableObjectIndex], a + ld a, TOGGLE_GAME_CORNER_ROCKET + ld [wToggleableObjectIndex], a predef HideObject ld hl, wCurrentMapScriptFlags set BIT_CUR_MAP_LOADED_1, [hl] diff --git a/scripts/HallOfFame.asm b/scripts/HallOfFame.asm index 31d560225..8e4f1275e 100644 --- a/scripts/HallOfFame.asm +++ b/scripts/HallOfFame.asm @@ -96,8 +96,8 @@ HallOfFameOakCongratulationsScript: call DisplayTextID ld a, PAD_BUTTONS | PAD_CTRL_PAD ld [wJoyIgnore], a - ld a, HS_CERULEAN_CAVE_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_CERULEAN_CAVE_GUY + ld [wToggleableObjectIndex], a predef HideObject ld a, SCRIPT_HALLOFFAME_RESET_EVENTS_AND_SAVE ld [wHallOfFameCurScript], a diff --git a/scripts/MtMoonB2F.asm b/scripts/MtMoonB2F.asm index 4b82ea129..7890c88ea 100644 --- a/scripts/MtMoonB2F.asm +++ b/scripts/MtMoonB2F.asm @@ -48,9 +48,9 @@ MtMoonB2FSetScript: ret MtMoonB2FScript_HideJessieJames: - ld a, HS_MT_MOON_B2F_JESSIE + ld a, TOGGLE_MT_MOON_B2F_JESSIE call MtMoonB2FScript_HideObject - ld a, HS_MT_MOON_B2F_JAMES + ld a, TOGGLE_MT_MOON_B2F_JAMES call MtMoonB2FScript_HideObject ret @@ -208,13 +208,13 @@ MtMoonB2FSuperNerdTakesOtherFossilScript: ldh [hTextID], a call DisplayTextID CheckEvent EVENT_GOT_HELIX_FOSSIL - jr z, .asm_49e1d - ld a, HS_MT_MOON_B2F_FOSSIL_1 - jr .asm_49e1f -.asm_49e1d - ld a, HS_MT_MOON_B2F_FOSSIL_2 -.asm_49e1f - ld [wMissableObjectIndex], a + jr z, .got_helix_fossil + ld a, TOGGLE_MT_MOON_B2F_FOSSIL_1 + jr .continue +.got_helix_fossil + ld a, TOGGLE_MT_MOON_B2F_FOSSIL_2 +.continue + ld [wToggleableObjectIndex], a predef HideObject xor a ld [wJoyIgnore], a @@ -237,9 +237,9 @@ MtMoonB2FScript_49e15: ldh [hJoyHeld], a ld a, PAD_SELECT | PAD_START | PAD_CTRL_PAD ld [wJoyIgnore], a - ld a, HS_MT_MOON_B2F_JESSIE + ld a, TOGGLE_MT_MOON_B2F_JESSIE call MtMoonB2FScript_ShowObject - ld a, HS_MT_MOON_B2F_JAMES + ld a, TOGGLE_MT_MOON_B2F_JAMES call MtMoonB2FScript_ShowObject ld a, $1 ld [wDoNotWaitForButtonPressAfterDisplayingText], a @@ -379,9 +379,9 @@ MtMoonB2FScript14: ld a, PAD_BUTTONS | PAD_CTRL_PAD ld [wJoyIgnore], a call GBFadeOutToBlack - ld a, HS_MT_MOON_B2F_JESSIE + ld a, TOGGLE_MT_MOON_B2F_JESSIE call MtMoonB2FScript_HideObject - ld a, HS_MT_MOON_B2F_JAMES + ld a, TOGGLE_MT_MOON_B2F_JAMES call MtMoonB2FScript_HideObject call UpdateSprites call Delay3 @@ -402,14 +402,14 @@ MtMoonB2FScript15: ret MtMoonB2FScript_ShowObject: - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef ShowObject call UpdateSprites call Delay3 ret MtMoonB2FScript_HideObject: - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ret @@ -536,8 +536,8 @@ MtMoonB2FDomeFossilText: call GiveItem jp nc, MtMoonB2FYouHaveNoRoomText call MtMoonB2FReceivedFossilText - ld a, HS_MT_MOON_B2F_FOSSIL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_MT_MOON_B2F_FOSSIL_1 + ld [wToggleableObjectIndex], a predef HideObject SetEvent EVENT_GOT_DOME_FOSSIL ld a, SCRIPT_MTMOONB2F_MOVE_SUPER_NERD @@ -563,8 +563,8 @@ MtMoonB2FHelixFossilText: call GiveItem jp nc, MtMoonB2FYouHaveNoRoomText call MtMoonB2FReceivedFossilText - ld a, HS_MT_MOON_B2F_FOSSIL_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_MT_MOON_B2F_FOSSIL_2 + ld [wToggleableObjectIndex], a predef HideObject SetEvent EVENT_GOT_HELIX_FOSSIL ld a, SCRIPT_MTMOONB2F_MOVE_SUPER_NERD diff --git a/scripts/Museum1F_2.asm b/scripts/Museum1F_2.asm index 9a848f50e..502dec5c0 100644 --- a/scripts/Museum1F_2.asm +++ b/scripts/Museum1F_2.asm @@ -152,8 +152,8 @@ Museum1FPrintScientist2Text:: call GiveItem jr nc, .bag_full SetEvent EVENT_GOT_OLD_AMBER - ld a, HS_OLD_AMBER - ld [wMissableObjectIndex], a + ld a, TOGGLE_OLD_AMBER + ld [wToggleableObjectIndex], a predef HideObject ld hl, .ReceivedOldAmberText jr .done diff --git a/scripts/NameRatersHouse.asm b/scripts/NameRatersHouse.asm index 61b10a3ed..b1e3bf95a 100644 --- a/scripts/NameRatersHouse.asm +++ b/scripts/NameRatersHouse.asm @@ -19,7 +19,7 @@ NameRatersHouseCheckMonOTScript: call .check_match_loop jr c, .no_match ld hl, wPartyMon1OTID - ld bc, wPartyMon2 - wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH ld a, [wWhichPokemon] call AddNTimes ld de, wPlayerID diff --git a/scripts/OaksLab.asm b/scripts/OaksLab.asm index c7197cb93..2fff09f69 100644 --- a/scripts/OaksLab.asm +++ b/scripts/OaksLab.asm @@ -14,7 +14,7 @@ OaksLab_ScriptPointers: def_script_pointers dw_const OaksLabDefaultScript, SCRIPT_OAKSLAB_DEFAULT dw_const OaksLabOakEntersLabScript, SCRIPT_OAKSLAB_OAK_ENTERS_LAB - dw_const OaksLabHideShowOaksScript, SCRIPT_OAKSLAB_HIDE_SHOW_OAKS + dw_const OaksLabToggleOaksScript, SCRIPT_OAKSLAB_TOGGLE_OAKS dw_const OaksLabPlayerEntersLabScript, SCRIPT_OAKSLAB_PLAYER_ENTERS_LAB dw_const OaksLabFollowedOakScript, SCRIPT_OAKSLAB_FOLLOWED_OAK dw_const OaksLabOakChooseMonSpeechScript, SCRIPT_OAKSLAB_OAK_CHOOSE_MON_SPEECH @@ -42,8 +42,8 @@ OaksLabDefaultScript: ld a, [wNPCMovementScriptFunctionNum] and a ret nz - ld a, HS_OAKS_LAB_OAK_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_OAK_2 + ld [wToggleableObjectIndex], a predef ShowObject ld hl, wStatusFlags4 res BIT_NO_BATTLES, [hl] @@ -58,7 +58,7 @@ OaksLabOakEntersLabScript: ld de, OakEntryMovement call MoveSprite - ld a, SCRIPT_OAKSLAB_HIDE_SHOW_OAKS + ld a, SCRIPT_OAKSLAB_TOGGLE_OAKS ld [wOaksLabCurScript], a ret @@ -68,15 +68,15 @@ OakEntryMovement: db NPC_MOVEMENT_UP db -1 ; end -OaksLabHideShowOaksScript: +OaksLabToggleOaksScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_OAKS_LAB_OAK_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_OAK_2 + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_OAKS_LAB_OAK_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_OAK_1 + ld [wToggleableObjectIndex], a predef ShowObject ld a, SCRIPT_OAKSLAB_PLAYER_ENTERS_LAB @@ -219,8 +219,8 @@ OaksLabRivalTakesPokeballScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a jr nz, .asm_1c564 - ld a, HS_STARTER_BALL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_STARTER_BALL_1 + ld [wToggleableObjectIndex], a predef HideObject ld a, OAKSLAB_RIVAL ldh [hSpriteIndex], a @@ -441,8 +441,8 @@ OaksLabPlayerWatchRivalExitScript: jr nz, .checkRivalPosition ld a, PAD_SELECT | PAD_START | PAD_CTRL_PAD ld [wJoyIgnore], a - ld a, HS_OAKS_LAB_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_RIVAL + ld [wToggleableObjectIndex], a predef HideObject call PlayDefaultMusic ld a, SCRIPT_OAKSLAB_PIKACHU_ESCAPES_POKEBALL @@ -505,8 +505,8 @@ OaksLabRivalArrivesAtOaksRequestScript: call DisplayTextID callfar OaksLabPikachuMovementScript call OaksLabCalcRivalMovementScript - ld a, HS_OAKS_LAB_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_RIVAL + ld [wToggleableObjectIndex], a predef ShowObject ld a, [wNPCMovementDirections2Index] ld [wSavedNPCMovementDirections2Index], a @@ -565,11 +565,11 @@ OaksLabOakGivesPokedexScript: ldh [hTextID], a call DisplayTextID call Delay3 - ld a, HS_POKEDEX_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_POKEDEX_1 + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_POKEDEX_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_POKEDEX_2 + ld [wToggleableObjectIndex], a predef HideObject call OaksLabRivalFaceUpOakFaceDownScript ld a, TEXT_OAKSLAB_OAK_THAT_WAS_MY_DREAM @@ -588,11 +588,11 @@ OaksLabOakGivesPokedexScript: ld a, SCRIPT_VIRIDIANCITY_AFTER_POKEDEX ld [wViridianCityCurScript], a SetEvent EVENT_OAK_GOT_PARCEL - ld a, HS_LYING_OLD_MAN - ld [wMissableObjectIndex], a + ld a, TOGGLE_LYING_OLD_MAN + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_OLD_MAN_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_OLD_MAN_2 + ld [wToggleableObjectIndex], a predef ShowObject ld a, [wSavedNPCMovementDirections2Index] ld b, 0 @@ -617,14 +617,14 @@ OaksLabRivalLeavesWithPokedexScript: bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz call PlayDefaultMusic - ld a, HS_OAKS_LAB_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_OAKS_LAB_RIVAL + ld [wToggleableObjectIndex], a predef HideObject SetEvent EVENT_1ST_ROUTE22_RIVAL_BATTLE ResetEventReuseHL EVENT_2ND_ROUTE22_RIVAL_BATTLE SetEventReuseHL EVENT_ROUTE22_RIVAL_WANTS_BATTLE - ld a, HS_ROUTE_22_RIVAL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_22_RIVAL_1 + ld [wToggleableObjectIndex], a predef ShowObject xor a ld [wJoyIgnore], a diff --git a/scripts/PalletTown.asm b/scripts/PalletTown.asm index 42e3ea3e2..0932ff56f 100644 --- a/scripts/PalletTown.asm +++ b/scripts/PalletTown.asm @@ -66,8 +66,8 @@ PalletTownOakHeyWaitScript: ld [hli], a ; SPRITESTATEDATA2_MAPY ld a, 14 ld [hl], a ; SPRITESTATEDATA2_MAPX - ld a, HS_PALLET_TOWN_OAK - ld [wMissableObjectIndex], a + ld a, TOGGLE_PALLET_TOWN_OAK + ld [wToggleableObjectIndex], a predef ShowObject ld a, $2 ld [wSprite01StateData1MovementStatus], a @@ -206,11 +206,11 @@ PalletTownDaisyScript: CheckBothEventsSet EVENT_GOT_TOWN_MAP, EVENT_ENTERED_BLUES_HOUSE, 1 jr nz, .next SetEvent EVENT_DAISY_WALKING - ld a, HS_DAISY_SITTING - ld [wMissableObjectIndex], a + ld a, TOGGLE_DAISY_SITTING + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_DAISY_WALKING - ld [wMissableObjectIndex], a + ld a, TOGGLE_DAISY_WALKING + ld [wToggleableObjectIndex], a predef_jump ShowObject .next CheckEvent EVENT_GOT_POKEBALLS_FROM_OAK diff --git a/scripts/PewterCity.asm b/scripts/PewterCity.asm index ffe546cad..4d4cdb1a5 100644 --- a/scripts/PewterCity.asm +++ b/scripts/PewterCity.asm @@ -95,8 +95,8 @@ PewterCityHideSuperNerd1Script: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_MUSEUM_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_MUSEUM_GUY + ld [wToggleableObjectIndex], a predef HideObject ld a, SCRIPT_PEWTERCITY_RESET_SUPER_NERD1 ld [wPewterCityCurScript], a @@ -106,8 +106,8 @@ PewterCityResetSuperNerd1Script: ld a, PEWTERCITY_SUPER_NERD1 ld [wSpriteIndex], a call SetSpritePosition2 - ld a, HS_MUSEUM_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_MUSEUM_GUY + ld [wToggleableObjectIndex], a predef ShowObject xor a ld [wJoyIgnore], a @@ -161,8 +161,8 @@ PewterCityHideYoungsterScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_GYM_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_GYM_GUY + ld [wToggleableObjectIndex], a predef HideObject ld a, SCRIPT_PEWTERCITY_RESET_YOUNGSTER ld [wPewterCityCurScript], a @@ -172,8 +172,8 @@ PewterCityResetYoungsterScript: ld a, PEWTERCITY_YOUNGSTER ld [wSpriteIndex], a call SetSpritePosition2 - ld a, HS_GYM_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_GYM_GUY + ld [wToggleableObjectIndex], a predef ShowObject xor a ld [wJoyIgnore], a diff --git a/scripts/PewterGym.asm b/scripts/PewterGym.asm index 4cb13fa4c..dcda6e161 100644 --- a/scripts/PewterGym.asm +++ b/scripts/PewterGym.asm @@ -67,11 +67,11 @@ PewterGymScriptReceiveTM34: ld hl, wBeatGymFlags set BIT_BOULDERBADGE, [hl] - ld a, HS_GYM_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_GYM_GUY + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_ROUTE_22_RIVAL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_22_RIVAL_1 + ld [wToggleableObjectIndex], a predef HideObject ResetEvents EVENT_1ST_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE diff --git a/scripts/PokemonTower2F.asm b/scripts/PokemonTower2F.asm index d5fbd9325..871c9e4df 100644 --- a/scripts/PokemonTower2F.asm +++ b/scripts/PokemonTower2F.asm @@ -113,8 +113,8 @@ PokemonTower2FRivalExitsScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_POKEMON_TOWER_2F_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_POKEMON_TOWER_2F_RIVAL + ld [wToggleableObjectIndex], a predef HideObject xor a ld [wJoyIgnore], a diff --git a/scripts/PokemonTower7F.asm b/scripts/PokemonTower7F.asm index 3e30db561..bf7ad30d1 100644 --- a/scripts/PokemonTower7F.asm +++ b/scripts/PokemonTower7F.asm @@ -57,9 +57,9 @@ PokemonTower7FScript_60d2a: ldh [hJoyHeld], a ld a, PAD_SELECT | PAD_START | PAD_CTRL_PAD ld [wJoyIgnore], a - ld a, HS_POKEMON_TOWER_7F_JESSIE + ld a, TOGGLE_POKEMON_TOWER_7F_JESSIE call PokemonTower7FScript_ShowObject - ld a, HS_POKEMON_TOWER_7F_JAMES + ld a, TOGGLE_POKEMON_TOWER_7F_JAMES call PokemonTower7FScript_ShowObject ld a, $1 ld [wDoNotWaitForButtonPressAfterDisplayingText], a @@ -201,9 +201,9 @@ PokemonTower7FScript9: ld a, PAD_BUTTONS | PAD_CTRL_PAD ld [wJoyIgnore], a call GBFadeOutToBlack - ld a, HS_POKEMON_TOWER_7F_JESSIE + ld a, TOGGLE_POKEMON_TOWER_7F_JESSIE call PokemonTower7FScript_HideObject - ld a, HS_POKEMON_TOWER_7F_JAMES + ld a, TOGGLE_POKEMON_TOWER_7F_JAMES call PokemonTower7FScript_HideObject call UpdateSprites call Delay3 @@ -223,22 +223,22 @@ PokemonTower7FScript10: ret PokemonTower7FScript_ShowObject: - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef ShowObject call UpdateSprites call Delay3 ret PokemonTower7FScript_HideObject: - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ret PokemonTower7FWarpToMrFujiHouseScript: ld a, PAD_BUTTONS | PAD_CTRL_PAD ld [wJoyIgnore], a - ld a, HS_POKEMON_TOWER_7F_MR_FUJI - ld [wMissableObjectIndex], a + ld a, TOGGLE_POKEMON_TOWER_7F_MR_FUJI + ld [wToggleableObjectIndex], a predef HideObject ld a, SPRITE_FACING_UP ld [wSpritePlayerStateData1FacingDirection], a @@ -303,14 +303,14 @@ PokemonTower7FMrFujiText: call PrintText SetEvent EVENT_RESCUED_MR_FUJI SetEvent EVENT_RESCUED_MR_FUJI_2 - ld a, HS_MR_FUJIS_HOUSE_MR_FUJI - ld [wMissableObjectIndex], a + ld a, TOGGLE_MR_FUJIS_HOUSE_MR_FUJI + ld [wToggleableObjectIndex], a predef ShowObject - ld a, HS_SAFFRON_CITY_E - ld [wMissableObjectIndex], a + ld a, TOGGLE_SAFFRON_CITY_E + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_SAFFRON_CITY_F - ld [wMissableObjectIndex], a + ld a, TOGGLE_SAFFRON_CITY_F + ld [wToggleableObjectIndex], a predef ShowObject ld a, SCRIPT_POKEMONTOWER7F_WARP_TO_MR_FUJI_HOUSE ld [wPokemonTower7FCurScript], a diff --git a/scripts/RocketHideoutB1F.asm b/scripts/RocketHideoutB1F.asm index 9354a0c72..fc1070015 100644 --- a/scripts/RocketHideoutB1F.asm +++ b/scripts/RocketHideoutB1F.asm @@ -13,7 +13,7 @@ RocketHideoutB1FDoorCallbackScript: bit BIT_CUR_MAP_LOADED_1, [hl] res BIT_CUR_MAP_LOADED_1, [hl] ret z - CheckEvent EVENT_677 + CheckEvent EVENT_ENTERED_ROCKET_HIDEOUT jr nz, .door_open CheckEventReuseA EVENT_BEAT_ROCKET_HIDEOUT_1_TRAINER_4 jr nz, .play_sound_door_open @@ -22,7 +22,8 @@ RocketHideoutB1FDoorCallbackScript: .play_sound_door_open ld a, SFX_GO_INSIDE call PlaySound - CheckEventHL EVENT_677 + ; BUG: should be SetEvent to avoid the SFX playing every time you enter the map + CheckEventHL EVENT_ENTERED_ROCKET_HIDEOUT .door_open ld a, $e ; Floor Block .set_door_block diff --git a/scripts/RocketHideoutB4F.asm b/scripts/RocketHideoutB4F.asm index 15a988538..118ebf894 100644 --- a/scripts/RocketHideoutB4F.asm +++ b/scripts/RocketHideoutB4F.asm @@ -18,9 +18,9 @@ RocketHideoutB4FSetScript: ret RocketHideoutB4FScript_HideJessieJames: - ld a, HS_ROCKET_HIDEOUT_B4F_JAMES + ld a, TOGGLE_ROCKET_HIDEOUT_B4F_JAMES call RocketHideoutB4FScript_HideObject - ld a, HS_ROCKET_HIDEOUT_B4F_JESSIE + ld a, TOGGLE_ROCKET_HIDEOUT_B4F_JESSIE call RocketHideoutB4FScript_HideObject ret @@ -52,11 +52,11 @@ RocketHideoutB4FBeatGiovanniScript: ldh [hTextID], a call DisplayTextID call GBFadeOutToBlack - ld a, HS_ROCKET_HIDEOUT_B4F_GIOVANNI - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROCKET_HIDEOUT_B4F_GIOVANNI + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_ROCKET_HIDEOUT_B4F_ITEM_4 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_4 + ld [wToggleableObjectIndex], a predef ShowObject call UpdateSprites call GBFadeInFromBlack @@ -114,9 +114,9 @@ RocketHideoutB4FScript_455a5: ld [wDoNotWaitForButtonPressAfterDisplayingText], a ld a, PAD_BUTTONS | PAD_CTRL_PAD ld [wJoyIgnore], a - ld a, HS_ROCKET_HIDEOUT_B4F_JAMES + ld a, TOGGLE_ROCKET_HIDEOUT_B4F_JAMES call RocketHideoutB4FScript_ShowObject - ld a, HS_ROCKET_HIDEOUT_B4F_JESSIE + ld a, TOGGLE_ROCKET_HIDEOUT_B4F_JESSIE call RocketHideoutB4FScript_ShowObject ld a, SCRIPT_ROCKETHIDEOUTB4F_SCRIPT4 call RocketHideoutB4FSetScript @@ -255,9 +255,9 @@ RocketHideoutB4FScript12: ld a, PAD_BUTTONS | PAD_CTRL_PAD ld [wJoyIgnore], a call GBFadeOutToBlack - ld a, HS_ROCKET_HIDEOUT_B4F_JAMES + ld a, TOGGLE_ROCKET_HIDEOUT_B4F_JAMES call RocketHideoutB4FScript_HideObject - ld a, HS_ROCKET_HIDEOUT_B4F_JESSIE + ld a, TOGGLE_ROCKET_HIDEOUT_B4F_JESSIE call RocketHideoutB4FScript_HideObject call UpdateSprites call Delay3 @@ -277,14 +277,14 @@ RocketHideoutB4FScript13: ret RocketHideoutB4FScript_ShowObject: - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef ShowObject call UpdateSprites call Delay3 ret RocketHideoutB4FScript_HideObject: - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ret @@ -399,8 +399,8 @@ RocketHideoutB4FRocketEndBattleText: text_promptbutton text_asm SetEvent EVENT_ROCKET_DROPPED_LIFT_KEY - ld a, HS_ROCKET_HIDEOUT_B4F_ITEM_5 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROCKET_HIDEOUT_B4F_ITEM_5 + ld [wToggleableObjectIndex], a predef ShowObject jp TextScriptEnd diff --git a/scripts/Route12.asm b/scripts/Route12.asm index ea9fc567a..a6984f872 100644 --- a/scripts/Route12.asm +++ b/scripts/Route12.asm @@ -34,8 +34,8 @@ Route12DefaultScript: ld [wCurOpponent], a ld a, 30 ld [wCurEnemyLevel], a - ld a, HS_ROUTE_12_SNORLAX - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_12_SNORLAX + ld [wToggleableObjectIndex], a predef HideObject ld a, SCRIPT_ROUTE12_SNORLAX_POST_BATTLE ld [wRoute12CurScript], a diff --git a/scripts/Route16.asm b/scripts/Route16.asm index 6e3da97c2..a1eb6e85f 100644 --- a/scripts/Route16.asm +++ b/scripts/Route16.asm @@ -34,8 +34,8 @@ Route16DefaultScript: ld [wCurOpponent], a ld a, 30 ld [wCurEnemyLevel], a - ld a, HS_ROUTE_16_SNORLAX - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_16_SNORLAX + ld [wToggleableObjectIndex], a predef HideObject call UpdateSprites ld a, SCRIPT_ROUTE16_SNORLAX_POST_BATTLE diff --git a/scripts/Route20.asm b/scripts/Route20.asm index 5230858e5..3c528b09f 100644 --- a/scripts/Route20.asm +++ b/scripts/Route20.asm @@ -12,48 +12,48 @@ Route20_Script: Route20BoulderScript: CheckBothEventsSet EVENT_SEAFOAM3_BOULDER1_DOWN_HOLE, EVENT_SEAFOAM3_BOULDER2_DOWN_HOLE jr z, .next_boulder_check - ld a, HS_SEAFOAM_ISLANDS_1F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_1 call Route20ShowObjectScript - ld a, HS_SEAFOAM_ISLANDS_1F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_2 call Route20ShowObjectScript - ld hl, .MissableObjectIDs -.hide_missable_objects + ld hl, .ToggleableObjectIDs +.hide_toggleable_objects ld a, [hli] cp $ff jr z, .next_boulder_check push hl call Route20HideObjectScript pop hl - jr .hide_missable_objects - -.MissableObjectIDs: - db HS_SEAFOAM_ISLANDS_B1F_BOULDER_1 - db HS_SEAFOAM_ISLANDS_B1F_BOULDER_2 - db HS_SEAFOAM_ISLANDS_B2F_BOULDER_1 - db HS_SEAFOAM_ISLANDS_B2F_BOULDER_2 - db HS_SEAFOAM_ISLANDS_B3F_BOULDER_3 - db HS_SEAFOAM_ISLANDS_B3F_BOULDER_4 + jr .hide_toggleable_objects + +.ToggleableObjectIDs: + db TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_1 + db TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_2 + db TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_1 + db TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_2 + db TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_3 + db TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_4 db -1 ; end .next_boulder_check CheckBothEventsSet EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE, EVENT_SEAFOAM4_BOULDER2_DOWN_HOLE ret z - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_1 call Route20ShowObjectScript - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_2 call Route20ShowObjectScript - ld a, HS_SEAFOAM_ISLANDS_B4F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_1 call Route20HideObjectScript - ld a, HS_SEAFOAM_ISLANDS_B4F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_2 call Route20HideObjectScript ret Route20ShowObjectScript: - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef_jump ShowObject Route20HideObjectScript: - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef_jump HideObject Route20_ScriptPointers: diff --git a/scripts/Route22.asm b/scripts/Route22.asm index 77ad1ad07..4e10f7fa3 100644 --- a/scripts/Route22.asm +++ b/scripts/Route22.asm @@ -226,8 +226,8 @@ Route22Rival1ExitScript: ret nz xor a ld [wJoyIgnore], a - ld a, HS_ROUTE_22_RIVAL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_22_RIVAL_1 + ld [wToggleableObjectIndex], a predef HideObject call PlayDefaultMusic ResetEvents EVENT_1ST_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE @@ -364,8 +364,8 @@ Route22Rival2ExitScript: ret nz xor a ld [wJoyIgnore], a - ld a, HS_ROUTE_22_RIVAL_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_22_RIVAL_2 + ld [wToggleableObjectIndex], a predef HideObject call PlayDefaultMusic ResetEvents EVENT_2ND_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE diff --git a/scripts/Route23.asm b/scripts/Route23.asm index 911a2ef3d..075589962 100644 --- a/scripts/Route23.asm +++ b/scripts/Route23.asm @@ -12,11 +12,11 @@ Route23SetVictoryRoadBoulders: ret z ResetEvents EVENT_VICTORY_ROAD_2_BOULDER_ON_SWITCH1, EVENT_VICTORY_ROAD_2_BOULDER_ON_SWITCH2 ResetEvents EVENT_VICTORY_ROAD_3_BOULDER_ON_SWITCH1, EVENT_VICTORY_ROAD_3_BOULDER_ON_SWITCH2 - ld a, HS_VICTORY_ROAD_3F_BOULDER - ld [wMissableObjectIndex], a + ld a, TOGGLE_VICTORY_ROAD_3F_BOULDER + ld [wToggleableObjectIndex], a predef ShowObject - ld a, HS_VICTORY_ROAD_2F_BOULDER - ld [wMissableObjectIndex], a + ld a, TOGGLE_VICTORY_ROAD_2F_BOULDER + ld [wToggleableObjectIndex], a predef_jump HideObject Route23_ScriptPointers: diff --git a/scripts/Route25.asm b/scripts/Route25.asm index 8cb59c303..23faa3963 100644 --- a/scripts/Route25.asm +++ b/scripts/Route25.asm @@ -5,10 +5,10 @@ Route25_Script: ld a, [wRoute25CurScript] call ExecuteCurMapScriptInTable ld [wRoute25CurScript], a - call Route25ShowHideBillScript + call Route25ToggleBillsScript ret -Route25ShowHideBillScript: +Route25ToggleBillsScript: ld hl, wd492 res 2, [hl] res 3, [hl] @@ -25,22 +25,22 @@ Route25ShowHideBillScript: CheckEventReuseHL EVENT_MET_BILL_2 jr nz, .met_bill ResetEventReuseHL EVENT_BILL_SAID_USE_CELL_SEPARATOR - ld a, HS_BILL_POKEMON - ld [wMissableObjectIndex], a + ld a, TOGGLE_BILL_POKEMON + ld [wToggleableObjectIndex], a predef ShowObject jr .done .met_bill CheckEventAfterBranchReuseHL EVENT_GOT_SS_TICKET, EVENT_MET_BILL_2 jr z, .done SetEventReuseHL EVENT_LEFT_BILLS_HOUSE_AFTER_HELPING - ld a, HS_NUGGET_BRIDGE_GUY - ld [wMissableObjectIndex], a + ld a, TOGGLE_NUGGET_BRIDGE_GUY + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_BILL_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_BILL_1 + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_BILL_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_BILL_2 + ld [wToggleableObjectIndex], a predef ShowObject .done ret diff --git a/scripts/SSAnne2F.asm b/scripts/SSAnne2F.asm index 2d98c5134..23594d489 100644 --- a/scripts/SSAnne2F.asm +++ b/scripts/SSAnne2F.asm @@ -31,8 +31,8 @@ SSAnne2FDefaultScript: call PlayMusic ld a, [wCoordIndex] ldh [hSavedCoordIndex], a - ld a, HS_SS_ANNE_2F_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_SS_ANNE_2F_RIVAL + ld [wToggleableObjectIndex], a predef ShowObject call Delay3 ld a, SSANNE2F_RIVAL @@ -150,8 +150,8 @@ SSAnne2FRivalExitScript: ret nz xor a ld [wJoyIgnore], a - ld a, HS_SS_ANNE_2F_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_SS_ANNE_2F_RIVAL + ld [wToggleableObjectIndex], a predef HideObject call PlayDefaultMusic ld a, SCRIPT_SSANNE2F_NOOP diff --git a/scripts/SafariZoneGate.asm b/scripts/SafariZoneGate.asm index 0e1a05bf2..e4830b066 100644 --- a/scripts/SafariZoneGate.asm +++ b/scripts/SafariZoneGate.asm @@ -14,7 +14,7 @@ SafariZoneGate_ScriptPointers: dw_const SafariZoneGatePlayerMovingDownScript, SCRIPT_SAFARIZONEGATE_PLAYER_MOVING_DOWN dw_const SafariZoneGateLeavingSafariScript, SCRIPT_SAFARIZONEGATE_LEAVING_SAFARI dw_const SafariZoneGateSetScriptAfterMoveScript, SCRIPT_SAFARIZONEGATE_SET_SCRIPT_AFTER_MOVE - EXPORT SCRIPT_SAFARIZONEGATE_LEAVING_SAFARI ; used by engine/events/hidden_objects/safari_game.asm + EXPORT SCRIPT_SAFARIZONEGATE_LEAVING_SAFARI ; used by engine/events/hidden_events/safari_game.asm SafariZoneGateDefaultScript: ld hl, .PlayerNextToSafariZoneWorker1CoordsArray diff --git a/scripts/SeafoamIslands1F.asm b/scripts/SeafoamIslands1F.asm index a3ec3c995..1e099f76d 100644 --- a/scripts/SeafoamIslands1F.asm +++ b/scripts/SeafoamIslands1F.asm @@ -13,23 +13,23 @@ SeafoamIslands1F_Script: cp $1 jr nz, .boulder2FellDownHole SetEventReuseHL EVENT_SEAFOAM1_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_1F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_1 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B1F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_1 ld [wObjectToShow], a jr .hideAndShowBoulderObjects .boulder2FellDownHole SetEventAfterBranchReuseHL EVENT_SEAFOAM1_BOULDER2_DOWN_HOLE, EVENT_SEAFOAM1_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_1F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_1F_BOULDER_2 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B1F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_2 ld [wObjectToShow], a .hideAndShowBoulderObjects ld a, [wObjectToHide] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ld a, [wObjectToShow] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef_jump ShowObject .noBoulderWasPushed ld a, SEAFOAM_ISLANDS_B1F diff --git a/scripts/SeafoamIslandsB1F.asm b/scripts/SeafoamIslandsB1F.asm index 0bc2ee181..7558e95bc 100644 --- a/scripts/SeafoamIslandsB1F.asm +++ b/scripts/SeafoamIslandsB1F.asm @@ -12,23 +12,23 @@ SeafoamIslandsB1F_Script: cp $1 jr nz, .boulder2FellDownHole SetEventReuseHL EVENT_SEAFOAM2_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B1F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_1 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B2F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_1 ld [wObjectToShow], a jr .hideAndShowBoulderObjects .boulder2FellDownHole SetEventAfterBranchReuseHL EVENT_SEAFOAM2_BOULDER2_DOWN_HOLE, EVENT_SEAFOAM2_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B1F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B1F_BOULDER_2 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B2F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_2 ld [wObjectToShow], a .hideAndShowBoulderObjects ld a, [wObjectToHide] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ld a, [wObjectToShow] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef_jump ShowObject .noBoulderWasPushed ld a, SEAFOAM_ISLANDS_B2F diff --git a/scripts/SeafoamIslandsB2F.asm b/scripts/SeafoamIslandsB2F.asm index 48b7979d4..2cdb705e6 100644 --- a/scripts/SeafoamIslandsB2F.asm +++ b/scripts/SeafoamIslandsB2F.asm @@ -12,23 +12,23 @@ SeafoamIslandsB2F_Script: cp $1 jr nz, .boulder2FellDownHole SetEventReuseHL EVENT_SEAFOAM3_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B2F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_1 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_3 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_3 ld [wObjectToShow], a jr .hideAndShowBoulderObjects .boulder2FellDownHole SetEventAfterBranchReuseHL EVENT_SEAFOAM3_BOULDER2_DOWN_HOLE, EVENT_SEAFOAM3_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B2F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B2F_BOULDER_2 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_4 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_4 ld [wObjectToShow], a .hideAndShowBoulderObjects ld a, [wObjectToHide] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ld a, [wObjectToShow] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef_jump ShowObject .noBoulderWasPushed ld a, SEAFOAM_ISLANDS_B3F diff --git a/scripts/SeafoamIslandsB3F.asm b/scripts/SeafoamIslandsB3F.asm index 671d77198..d8e253b66 100644 --- a/scripts/SeafoamIslandsB3F.asm +++ b/scripts/SeafoamIslandsB3F.asm @@ -12,23 +12,23 @@ SeafoamIslandsB3F_Script: cp $1 jr nz, .boulder2FellDownHole SetEventReuseHL EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_1 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B4F_BOULDER_1 + ld a, TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_1 ld [wObjectToShow], a jr .hideAndShowBoulderObjects .boulder2FellDownHole SetEventAfterBranchReuseHL EVENT_SEAFOAM4_BOULDER2_DOWN_HOLE, EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE - ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_2 ld [wObjectToHide], a - ld a, HS_SEAFOAM_ISLANDS_B4F_BOULDER_2 + ld a, TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_2 ld [wObjectToShow], a .hideAndShowBoulderObjects ld a, [wObjectToHide] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ld a, [wObjectToShow] - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef ShowObject jr .runCurrentMapScript .noBoulderWasPushed diff --git a/scripts/SilphCo11F.asm b/scripts/SilphCo11F.asm index 5b72e3f85..38c674f49 100644 --- a/scripts/SilphCo11F.asm +++ b/scripts/SilphCo11F.asm @@ -435,9 +435,9 @@ SilphCo11FScript13: ld a, PAD_BUTTONS | PAD_CTRL_PAD ld [wJoyIgnore], a call GBFadeOutToBlack - ld a, HS_SILPH_CO_11F_JAMES + ld a, TOGGLE_SILPH_CO_11F_JAMES call SilphCo11FScript_HideObject - ld a, HS_SILPH_CO_11F_JESSIE + ld a, TOGGLE_SILPH_CO_11F_JESSIE call SilphCo11FScript_HideObject call UpdateSprites call Delay3 @@ -458,14 +458,14 @@ SilphCo11FScript14: ret SilphCo11FScript_ShowObject: - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef ShowObject call UpdateSprites call Delay3 ret SilphCo11FScript_HideObject: - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject ret diff --git a/scripts/SilphCo11F_2.asm b/scripts/SilphCo11F_2.asm index fbc5bb1b1..94ea2c5b3 100644 --- a/scripts/SilphCo11F_2.asm +++ b/scripts/SilphCo11F_2.asm @@ -1,75 +1,75 @@ SilphCo11FTeamRocketLeavesScript:: - ld hl, .HideMissableObjectIDs + ld hl, .HideToggleableObjectIDs .hide_loop ld a, [hli] cp $ff jr z, .done_hiding push hl - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef HideObject pop hl jr .hide_loop .done_hiding - ld hl, .ShowMissableObjectIDs + ld hl, .ShowToggleableObjectIDs .show_loop ld a, [hli] cp -1 ret z push hl - ld [wMissableObjectIndex], a + ld [wToggleableObjectIndex], a predef ShowObject pop hl jr .show_loop -.ShowMissableObjectIDs: - db HS_SAFFRON_CITY_8 - db HS_SAFFRON_CITY_9 - db HS_SAFFRON_CITY_A - db HS_SAFFRON_CITY_B - db HS_SAFFRON_CITY_C - db HS_SAFFRON_CITY_D +.ShowToggleableObjectIDs: + db TOGGLE_SAFFRON_CITY_8 + db TOGGLE_SAFFRON_CITY_9 + db TOGGLE_SAFFRON_CITY_A + db TOGGLE_SAFFRON_CITY_B + db TOGGLE_SAFFRON_CITY_C + db TOGGLE_SAFFRON_CITY_D db -1 ; end -.HideMissableObjectIDs: - db HS_SAFFRON_CITY_1 - db HS_SAFFRON_CITY_2 - db HS_SAFFRON_CITY_3 - db HS_SAFFRON_CITY_4 - db HS_SAFFRON_CITY_5 - db HS_SAFFRON_CITY_6 - db HS_SAFFRON_CITY_7 - db HS_SAFFRON_CITY_E - db HS_SAFFRON_CITY_F - db HS_SILPH_CO_2F_2 - db HS_SILPH_CO_2F_3 - db HS_SILPH_CO_2F_4 - db HS_SILPH_CO_2F_5 - db HS_SILPH_CO_3F_1 - db HS_SILPH_CO_3F_2 - db HS_SILPH_CO_4F_1 - db HS_SILPH_CO_4F_2 - db HS_SILPH_CO_4F_3 - db HS_SILPH_CO_5F_1 - db HS_SILPH_CO_5F_2 - db HS_SILPH_CO_5F_3 - db HS_SILPH_CO_5F_4 - db HS_SILPH_CO_6F_1 - db HS_SILPH_CO_6F_2 - db HS_SILPH_CO_6F_3 - db HS_SILPH_CO_7F_1 - db HS_SILPH_CO_7F_2 - db HS_SILPH_CO_7F_3 - db HS_SILPH_CO_7F_4 - db HS_SILPH_CO_8F_1 - db HS_SILPH_CO_8F_2 - db HS_SILPH_CO_8F_3 - db HS_SILPH_CO_9F_1 - db HS_SILPH_CO_9F_2 - db HS_SILPH_CO_9F_3 - db HS_SILPH_CO_10F_1 - db HS_SILPH_CO_10F_2 - db HS_SILPH_CO_11F_1 - db HS_SILPH_CO_11F_JAMES - db HS_SILPH_CO_11F_2 - db HS_SILPH_CO_11F_JESSIE +.HideToggleableObjectIDs: + db TOGGLE_SAFFRON_CITY_1 + db TOGGLE_SAFFRON_CITY_2 + db TOGGLE_SAFFRON_CITY_3 + db TOGGLE_SAFFRON_CITY_4 + db TOGGLE_SAFFRON_CITY_5 + db TOGGLE_SAFFRON_CITY_6 + db TOGGLE_SAFFRON_CITY_7 + db TOGGLE_SAFFRON_CITY_E + db TOGGLE_SAFFRON_CITY_F + db TOGGLE_SILPH_CO_2F_2 + db TOGGLE_SILPH_CO_2F_3 + db TOGGLE_SILPH_CO_2F_4 + db TOGGLE_SILPH_CO_2F_5 + db TOGGLE_SILPH_CO_3F_1 + db TOGGLE_SILPH_CO_3F_2 + db TOGGLE_SILPH_CO_4F_1 + db TOGGLE_SILPH_CO_4F_2 + db TOGGLE_SILPH_CO_4F_3 + db TOGGLE_SILPH_CO_5F_1 + db TOGGLE_SILPH_CO_5F_2 + db TOGGLE_SILPH_CO_5F_3 + db TOGGLE_SILPH_CO_5F_4 + db TOGGLE_SILPH_CO_6F_1 + db TOGGLE_SILPH_CO_6F_2 + db TOGGLE_SILPH_CO_6F_3 + db TOGGLE_SILPH_CO_7F_1 + db TOGGLE_SILPH_CO_7F_2 + db TOGGLE_SILPH_CO_7F_3 + db TOGGLE_SILPH_CO_7F_4 + db TOGGLE_SILPH_CO_8F_1 + db TOGGLE_SILPH_CO_8F_2 + db TOGGLE_SILPH_CO_8F_3 + db TOGGLE_SILPH_CO_9F_1 + db TOGGLE_SILPH_CO_9F_2 + db TOGGLE_SILPH_CO_9F_3 + db TOGGLE_SILPH_CO_10F_1 + db TOGGLE_SILPH_CO_10F_2 + db TOGGLE_SILPH_CO_11F_1 + db TOGGLE_SILPH_CO_11F_JAMES + db TOGGLE_SILPH_CO_11F_2 + db TOGGLE_SILPH_CO_11F_JESSIE db -1 ; end diff --git a/scripts/SilphCo1F.asm b/scripts/SilphCo1F.asm index fbc70d77d..acb506fc3 100644 --- a/scripts/SilphCo1F.asm +++ b/scripts/SilphCo1F.asm @@ -4,8 +4,8 @@ SilphCo1F_Script: ret z CheckAndSetEvent EVENT_SILPH_CO_RECEPTIONIST_AT_DESK ret nz - ld a, HS_SILPH_CO_1F_RECEPTIONIST - ld [wMissableObjectIndex], a + ld a, TOGGLE_SILPH_CO_1F_RECEPTIONIST + ld [wToggleableObjectIndex], a predef_jump ShowObject SilphCo1F_TextPointers: diff --git a/scripts/SilphCo7F.asm b/scripts/SilphCo7F.asm index dd67a6a26..5e917f05c 100644 --- a/scripts/SilphCo7F.asm +++ b/scripts/SilphCo7F.asm @@ -241,8 +241,8 @@ SilphCo7FRivalExitScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_SILPH_CO_7F_RIVAL - ld [wMissableObjectIndex], a + ld a, TOGGLE_SILPH_CO_7F_RIVAL + ld [wToggleableObjectIndex], a predef HideObject call PlayDefaultMusic xor a diff --git a/scripts/VermilionDock.asm b/scripts/VermilionDock.asm index 3cd26619e..66688c42e 100644 --- a/scripts/VermilionDock.asm +++ b/scripts/VermilionDock.asm @@ -128,7 +128,7 @@ VermilionDock_AnimSmokePuffDriftRight: ld a, [wSSAnneSmokeDriftAmount] swap a ld c, a - ld de, 4 + ld de, OBJ_SIZE .drift_loop inc [hl] inc [hl] diff --git a/scripts/VictoryRoad3F.asm b/scripts/VictoryRoad3F.asm index fc148c0d8..ec0816424 100644 --- a/scripts/VictoryRoad3F.asm +++ b/scripts/VictoryRoad3F.asm @@ -47,11 +47,11 @@ VictoryRoad3FDefaultScript: .handle_hole CheckAndSetEvent EVENT_VICTORY_ROAD_3_BOULDER_ON_SWITCH2 jr nz, .check_switch_hole - ld a, HS_VICTORY_ROAD_3F_BOULDER - ld [wMissableObjectIndex], a + ld a, TOGGLE_VICTORY_ROAD_3F_BOULDER + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_VICTORY_ROAD_2F_BOULDER - ld [wMissableObjectIndex], a + ld a, TOGGLE_VICTORY_ROAD_2F_BOULDER + ld [wToggleableObjectIndex], a predef_jump ShowObject .SwitchOrHoleCoords: diff --git a/scripts/ViridianCity.asm b/scripts/ViridianCity.asm index 07646f1a6..8eb020f58 100644 --- a/scripts/ViridianCity.asm +++ b/scripts/ViridianCity.asm @@ -246,8 +246,8 @@ ViridianCityOldManMovingDownScript: ld a, [wStatusFlags5] bit BIT_SCRIPTED_NPC_MOVEMENT, a ret nz - ld a, HS_OLD_MAN_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_OLD_MAN_2 + ld [wToggleableObjectIndex], a predef HideObject xor a ld [wJoyIgnore], a diff --git a/scripts/ViridianGym.asm b/scripts/ViridianGym.asm index 6f1950376..c2b8c362f 100644 --- a/scripts/ViridianGym.asm +++ b/scripts/ViridianGym.asm @@ -161,8 +161,8 @@ ViridianGymReceiveTM27: ; deactivate gym trainers SetEventRange EVENT_BEAT_VIRIDIAN_GYM_TRAINER_0, EVENT_BEAT_VIRIDIAN_GYM_TRAINER_7 - ld a, HS_ROUTE_22_RIVAL_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_ROUTE_22_RIVAL_2 + ld [wToggleableObjectIndex], a predef ShowObject SetEvents EVENT_2ND_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE jp ViridianGymResetScripts @@ -219,8 +219,8 @@ ViridianGymGiovanniText: ld hl, .PostBattleAdviceText call PrintText call GBFadeOutToBlack - ld a, HS_VIRIDIAN_GYM_GIOVANNI - ld [wMissableObjectIndex], a + ld a, TOGGLE_VIRIDIAN_GYM_GIOVANNI + ld [wToggleableObjectIndex], a predef HideObject call UpdateSprites call Delay3 diff --git a/scripts/ViridianMart.asm b/scripts/ViridianMart.asm index f118b475a..7dddd4343 100644 --- a/scripts/ViridianMart.asm +++ b/scripts/ViridianMart.asm @@ -66,11 +66,11 @@ ViridianMartScript2: ret z CheckAndSetEventReuseHL EVENT_SPAWNED_OLD_MAN_1 ret nz - ld a, HS_OLD_MAN_2 - ld [wMissableObjectIndex], a + ld a, TOGGLE_OLD_MAN_2 + ld [wToggleableObjectIndex], a predef HideObject - ld a, HS_OLD_MAN_1 - ld [wMissableObjectIndex], a + ld a, TOGGLE_OLD_MAN_1 + ld [wToggleableObjectIndex], a predef ShowObject ret diff --git a/tools/Makefile b/tools/Makefile index 8bc6ff711..b62359731 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,7 +1,7 @@ .PHONY: all clean CC := gcc -CFLAGS := -O3 -flto -std=c11 -Wall -Wextra -pedantic +CFLAGS := -O3 -std=c11 -Wall -Wextra -pedantic tools := \ gfx \