Merge remote-tracking branch 'remotes/pokered/master'

This commit is contained in:
Rangi 2022-10-02 22:42:26 -04:00
commit 7dd9d7dc80
30 changed files with 725 additions and 1023 deletions

View File

@ -16,7 +16,7 @@ jobs:
uses: actions/checkout@master uses: actions/checkout@master
with: with:
path: rgbds path: rgbds
ref: v0.5.2 ref: v0.6.0
repository: gbdev/rgbds repository: gbdev/rgbds
- name: Install rgbds - name: Install rgbds

View File

@ -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. 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 0.5.2**. Then follow the [**rgbds** install instructions](https://rgbds.gbdev.io/install#pre-built) for Windows with Cygwin to install **rgbds 0.6.0**.
**Note:** If you already have an older rgbds, you will need to update to 0.5.2. Ignore this if you have never installed rgbds before. If a version newer than 0.5.2 does not work, try downloading 0.5.2. **Note:** If you already have an older rgbds, you will need to update to 0.6.0. Ignore this if you have never installed rgbds before. If a version newer than 0.6.0 does not work, try downloading 0.6.0.
Now open the **Cygwin terminal** and enter the following commands. 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. Open **Terminal** and prepare to enter commands.
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#pre-built) for macOS to install **rgbds 0.5.2**. Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#pre-built) for macOS to install **rgbds 0.6.0**.
Now you're ready to [build **pokeyellow**](#build-pokeyellow). 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 sudo apt-get install make gcc git
``` ```
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.5.2** from source. Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.6.0** from source.
### OpenSUSE ### OpenSUSE
@ -94,7 +94,7 @@ To install the software required for **pokeyellow**:
sudo zypper install make gcc git sudo zypper install make gcc git
``` ```
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.5.2** from source. Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.6.0** from source.
### Arch Linux ### Arch Linux
@ -104,9 +104,9 @@ To install the software required for **pokeyellow**:
sudo pacman -S make gcc git sudo pacman -S make gcc git
``` ```
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#pre-built) for Arch Linux to install **rgbds 0.5.2**. Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#pre-built) for Arch Linux to install **rgbds 0.6.0**.
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 0.5.2** 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 0.6.0** from source.
### Termux ### Termux
@ -122,7 +122,7 @@ To install **rgbds**:
sudo apt install rgbds sudo apt 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 0.5.2** 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 0.6.0** from source.
### Other distros ### Other distros
@ -133,7 +133,7 @@ If your distro is not listed here, try to find the required software in its repo
- `git` - `git`
- `rgbds` - `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 0.5.2** 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 0.6.0** from source.
Now you're ready to [build **pokeyellow**](#build-pokeyellow). Now you're ready to [build **pokeyellow**](#build-pokeyellow).
@ -155,8 +155,8 @@ make
### Build with a local rgbds version ### 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 0.5.2 globally. Instead, you can put its files in a directory within pokeyellow, such as `pokeyellow/rgbds-0.5.2/`. 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 0.6.0 globally. Instead, you can put its files in a directory within pokeyellow, such as `pokeyellow/rgbds-0.6.0/`. Then specify it when you run `make`:
```bash ```bash
make RGBDS=rgbds-0.5.2/ make RGBDS=rgbds-0.6.0/
``` ```

View File

@ -81,7 +81,7 @@ tools:
$(MAKE) -C tools/ $(MAKE) -C tools/
RGBASMFLAGS = -h -L -Weverything -Wnumeric-string=2 -Wtruncation=1 RGBASMFLAGS = -hL -Q8 -P includes.asm -Weverything -Wnumeric-string=2 -Wtruncation=1
# Create a sym/map for debug purposes if `make` run with `DEBUG=1` # Create a sym/map for debug purposes if `make` run with `DEBUG=1`
ifeq ($(DEBUG),1) ifeq ($(DEBUG),1)
RGBASMFLAGS += -E RGBASMFLAGS += -E
@ -100,7 +100,7 @@ rgbdscheck.o: rgbdscheck.asm
# As a side effect, they're evaluated immediately instead of when the rule is invoked. # As a side effect, they're evaluated immediately instead of when the rule is invoked.
# It doesn't look like $(shell) can be deferred so there might not be a better way. # It doesn't look like $(shell) can be deferred so there might not be a better way.
define DEP define DEP
$1: $2 $$(shell tools/scan_includes $2) | rgbdscheck.o $1: $2 $$(shell tools/scan_includes $2) | includes.asm rgbdscheck.o
$$(RGBASM) $$(RGBASMFLAGS) -o $$@ $$< $$(RGBASM) $$(RGBASMFLAGS) -o $$@ $$<
endef endef
@ -116,8 +116,8 @@ $(foreach obj, $(pokeyellow_debug_obj), $(eval $(call DEP,$(obj),$(obj:_debug.o=
$(foreach obj, $(pokeyellow_vc_obj), $(eval $(call DEP,$(obj),$(obj:_vc.o=.asm)))) $(foreach obj, $(pokeyellow_vc_obj), $(eval $(call DEP,$(obj),$(obj:_vc.o=.asm))))
# Dependencies for VC files that need to run scan_includes # Dependencies for VC files that need to run scan_includes
%.constants.sym: %.constants.asm $(shell tools/scan_includes %.constants.asm) | rgbdscheck.o %.constants.sym: %.constants.asm $(shell tools/scan_includes %.constants.asm) | includes.asm rgbdscheck.o
$(RGBASM) $< > $@ $(RGBASM) $(RGBASMFLAGS) $< > $@
endif endif
@ -138,8 +138,8 @@ opts = -cjsv -k 01 -l 0x33 -m 0x1b -p 0 -r 03 -t "POKEMON YELLOW"
### Misc file-specific graphics rules ### Misc file-specific graphics rules
gfx/battle/attack_anim_1.2bpp: tools/gfx += --trim-whitespace gfx/battle/move_anim_0.2bpp: tools/gfx += --trim-whitespace
gfx/battle/attack_anim_2.2bpp: tools/gfx += --trim-whitespace gfx/battle/move_anim_1.2bpp: tools/gfx += --trim-whitespace
gfx/credits/the_end.2bpp: tools/gfx += --interleave --png=$< gfx/credits/the_end.2bpp: tools/gfx += --interleave --png=$<

View File

@ -1,6 +1,3 @@
INCLUDE "constants.asm"
SECTION "Sound Effect Headers 1", ROMX SECTION "Sound Effect Headers 1", ROMX
INCLUDE "audio/headers/sfxheaders1.asm" INCLUDE "audio/headers/sfxheaders1.asm"

View File

@ -45,93 +45,96 @@ DEF FIRST_SE_ID EQU const_value
; subanimations that are part of move animations ; subanimations that are part of move animations
; SubanimationPointers indexes (see data/battle_anims/subanimations.asm) ; SubanimationPointers indexes (see data/battle_anims/subanimations.asm)
; The 0 or 1 in the name of a subanim indicates whether to use tileset 0 or 1 data/moves/animations.asm.
; "Both" indicates either can be used for different images using the same animation.
const_def const_def
const SUBANIM_00 const SUBANIM_0_STAR
const SUBANIM_01 const SUBANIM_0_STAR_TWICE
const SUBANIM_02 const SUBANIM_0_STAR_THRICE
const SUBANIM_03 const SUBANIM_0_STAR_DESCENDING
const SUBANIM_04 const SUBANIM_1_STAR_BIG_MOVING
const SUBANIM_05 const SUBANIM_1_STAR_BIG
const SUBANIM_06 const SUBANIM_0_BALL_TOSS_HIGH
const SUBANIM_07 const SUBANIM_0_BALL_TOSS_MIDDLE
const SUBANIM_08 const SUBANIM_0_BALL_TOSS_LOW
const SUBANIM_09 const SUBANIM_0_BALL_SHAKE_ENEMY
const SUBANIM_0A const SUBANIM_0_BALL_POOF_ENEMY
const SUBANIM_0B const SUBANIM_0_BALL_BLOCK
const SUBANIM_0C const SUBANIM_1_FLAME_COLUMN_1
const SUBANIM_0D const SUBANIM_1_FLAME_COLUMN_2
const SUBANIM_0E const SUBANIM_1_FLAME_COLUMN_3
const SUBANIM_0F const SUBANIM_0_SCRATCHES
const SUBANIM_10 const SUBANIM_1_TORNADO
const SUBANIM_11 const SUBANIM_1_FLAMES
const SUBANIM_12 const SUBANIM_0_HEART_1_MUSIC
const SUBANIM_13 const SUBANIM_1_BLOB_TOSS
const SUBANIM_14 const SUBANIM_1_BLOB_DRIP_ENEMY
const SUBANIM_15 const SUBANIM_1_SHOUT
const SUBANIM_16 const SUBANIM_0_SLICE
const SUBANIM_17 const SUBANIM_0_BIRDIES_CIRCLING_ENEMY
const SUBANIM_18 const SUBANIM_1_SWORDS_CIRCLING
const SUBANIM_19 const SUBANIM_1_CLOUD_TOSS
const SUBANIM_1A const SUBANIM_0_WATER_COLUMNS
const SUBANIM_1B const SUBANIM_1_SEED_TOSS
const SUBANIM_1C const SUBANIM_1_SEED_LAND
const SUBANIM_1D const SUBANIM_0_ROCKS_LIFT
const SUBANIM_1E const SUBANIM_0_ROCKS_TOSS
const SUBANIM_1F const SUBANIM_1_FLAME_BEAM
const SUBANIM_20 const SUBANIM_1_FLAME_STAR
const SUBANIM_21 const SUBANIM_0_CIRCLES_1_SQUARES_CENTERING_ENEMY
const SUBANIM_22 const SUBANIM_0_CIRCLE_1_SQUARE_TOSS_BACK
const SUBANIM_23 const SUBANIM_0_BIND
const SUBANIM_24 const SUBANIM_0_STATUS_PARALYZED
const SUBANIM_25 const SUBANIM_0_STATUS_CONFUSED
const SUBANIM_26 const SUBANIM_0_STATUS_CONFUSED_ENEMY
const SUBANIM_27 const SUBANIM_0_STATUS_POISONED
const SUBANIM_28 const SUBANIM_1_SAND
const SUBANIM_29 const SUBANIM_1_LIGHTNING_BALL
const SUBANIM_2A const SUBANIM_0_SLICE_BOTH_SIDES
const SUBANIM_2B const SUBANIM_1_LIGHTNING
const SUBANIM_2C const SUBANIM_0_WATER_DROPLETS
const SUBANIM_2D const SUBANIM_0_CIRCLES_CENTERING
const SUBANIM_2E const SUBANIM_0_BEAM
const SUBANIM_2F const SUBANIM_0_ICE_RISE
const SUBANIM_30 const SUBANIM_0_ROCKS_FALL_ENEMY
const SUBANIM_31 const SUBANIM_0_SOUND_WAVE
const SUBANIM_32 const SUBANIM_0_CIRCLE_1_SQUARE_HALF_TOSS ; unused
const SUBANIM_33 const SUBANIM_1_BARRIER
const SUBANIM_34 const SUBANIM_1_SELFDESTRUCT
const SUBANIM_35 const SUBANIM_0_WATER_BUBBLES
const SUBANIM_36 const SUBANIM_0_CIRCLES_FALLING
const SUBANIM_37 const SUBANIM_0_STRING_SHOT
const SUBANIM_38 const SUBANIM_0_ICE_FALL
const SUBANIM_39 const SUBANIM_0_CIRCLE_1_SQUARE_APPEARS ; unused
const SUBANIM_3A const SUBANIM_0_STATUS_SLEEP
const SUBANIM_3B const SUBANIM_0_STATUS_SLEEP_ENEMY
const SUBANIM_3C const SUBANIM_0_WATER_1_FIRE_BARRIER ; unused
const SUBANIM_3D const SUBANIM_0_WATER_1_FIRE_GEYSER ; unused
const SUBANIM_3E const SUBANIM_1_STAR_BIG_TOSS
const SUBANIM_3F const SUBANIM_1_STARS_SMALL_TOSS
const SUBANIM_40 const SUBANIM_1_MUSIC_CIRCLING_ENEMY
const SUBANIM_41 const SUBANIM_1_CIRCLE_BLACK_TOSS
const SUBANIM_42 const SUBANIM_1_EXPLOSION_SMALL_ENEMY
const SUBANIM_43 const SUBANIM_0_CIRCLE_1_SQUARE_CLOSING
const SUBANIM_44 const SUBANIM_1_LEAVES_TOSS
const SUBANIM_45 const SUBANIM_0_HORN_JAB_TWICE
const SUBANIM_46 const SUBANIM_0_HORN_JAB_THRICE
const SUBANIM_47 const SUBANIM_0_BALL_POOF
const SUBANIM_48 const SUBANIM_2_TRADE_BALL_DROP
const SUBANIM_49 const SUBANIM_2_TRADE_BALL_SHAKE
const SUBANIM_4A const SUBANIM_2_TRADE_BALL_APPEAR
const SUBANIM_4B const SUBANIM_2_TRADE_BALL_POOF
const SUBANIM_4C const SUBANIM_0_EGG_SHAKING
const SUBANIM_4D const SUBANIM_1_TRIANGLE_TOSS
const SUBANIM_4E const SUBANIM_1_SPHERE_BIG
const SUBANIM_4F const SUBANIM_1_SPHERE_BIG_RISE
const SUBANIM_50 const SUBANIM_1_SPHERE_BIG_FALL
const SUBANIM_51 const SUBANIM_0_SHELL
const SUBANIM_52 const SUBANIM_0_COIN_BOUNCE
const SUBANIM_53 const SUBANIM_0_SAFARI_ROCK
const SUBANIM_54 const SUBANIM_0_SAFARI_BAIT
const SUBANIM_55 const SUBANIM_0_STAR_HIGH
DEF NUM_SUBANIMS EQU const_value DEF NUM_SUBANIMS EQU const_value
; types of subanimations ; types of subanimations

View File

@ -0,0 +1,41 @@
; sprite set ids
; indexes for SpriteSets (see data/maps/sprite_sets.asm)
; values for MapSpriteSets and SplitMapSpriteSets (see data/maps/sprite_sets.asm)
const_def 1
const SPRITESET_PALLET_VIRIDIAN ; 01
const SPRITESET_PEWTER_CERULEAN ; 02
const SPRITESET_LAVENDER ; 03
const SPRITESET_VERMILION ; 04
const SPRITESET_CELADON ; 05
const SPRITESET_INDIGO ; 06
const SPRITESET_SAFFRON ; 07
const SPRITESET_SILENCE_BRIDGE ; 08
const SPRITESET_CYCLING_ROAD ; 09
const SPRITESET_FUCHSIA ; 0a
DEF NUM_SPRITE_SETS EQU const_value - 1
; split sprite set ids
; indexes for SplitMapSpriteSets (see data/maps/sprite_sets.asm)
; values for MapSpriteSets (see data/maps/sprite_sets.asm)
const_next $f1
DEF FIRST_SPLIT_SET EQU const_value
const SPLITSET_ROUTE_2 ; f1
const SPLITSET_ROUTE_10 ; f2
const SPLITSET_ROUTE_11 ; f3
const SPLITSET_ROUTE_12 ; f4
const SPLITSET_ROUTE_15 ; f5
const SPLITSET_ROUTE_16 ; f6
const SPLITSET_ROUTE_18 ; f7
const SPLITSET_ROUTE_20 ; f8
const SPLITSET_ROUTE_5 ; f9
const SPLITSET_ROUTE_6 ; fa
const SPLITSET_ROUTE_7 ; fb
const SPLITSET_ROUTE_8 ; fc
DEF NUM_SPLIT_SETS EQU const_value - FIRST_SPLIT_SET
; split directions
DEF EAST_WEST EQU 1
DEF NORTH_SOUTH EQU 2
; each sprite set has 9 walking sprites and 2 still sprites
DEF SPRITE_SET_LENGTH EQU 9 + 2

View File

@ -1,91 +1,91 @@
SubanimationPointers: SubanimationPointers:
table_width 2, SubanimationPointers table_width 2, SubanimationPointers
dw Subanimation00 dw Subanim_0Star
dw Subanimation01 dw Subanim_0StarTwice
dw Subanimation02 dw Subanim_0StarThrice
dw Subanimation03 dw Subanim_0StarDescending
dw Subanimation04 dw Subanim_1StarBigMoving
dw Subanimation05 dw Subanim_1StarBig
dw Subanimation06 dw Subanim_0BallTossHigh
dw Subanimation07 dw Subanim_0BallTossMiddle
dw Subanimation08 dw Subanim_0BallTossLow
dw Subanimation09 dw Subanim_0BallShakeEnemy
dw Subanimation0a dw Subanim_0BallPoofEnemy
dw Subanimation0b dw Subanim_0BallBlock
dw Subanimation0c dw Subanim_1FlameColumn1
dw Subanimation0d dw Subanim_1FlameColumn2
dw Subanimation0e dw Subanim_1FlameColumn3
dw Subanimation0f dw Subanim_0Scratches
dw Subanimation10 dw Subanim_1Tornado
dw Subanimation11 dw Subanim_1Flames
dw Subanimation12 dw Subanim_0Heart_1Music
dw Subanimation13 dw Subanim_1BlobToss
dw Subanimation14 dw Subanim_1BlobDripEnemy
dw Subanimation15 dw Subanim_1Shout
dw Subanimation16 dw Subanim_0Slice
dw Subanimation17 dw Subanim_0BirdiesCirclingEnemy
dw Subanimation18 dw Subanim_1SwordsCircling
dw Subanimation19 dw Subanim_1CloudToss
dw Subanimation1a dw Subanim_0WaterColumns
dw Subanimation1b dw Subanim_1SeedToss
dw Subanimation1c dw Subanim_1SeedLand
dw Subanimation1d dw Subanim_0RocksLift
dw Subanimation1e dw Subanim_0RocksToss
dw Subanimation1f dw Subanim_1FlameBeam
dw Subanimation20 dw Subanim_1FlameStar
dw Subanimation21 dw Subanim_0Circles_1Squares_CenteringEnemy
dw Subanimation22 dw Subanim_0Circle_1Square_TossBack
dw Subanimation23 dw Subanim_0Bind
dw Subanimation24 dw Subanim_0StatusParalyzed
dw Subanimation25 dw Subanim_0StatusConfused
dw Subanimation26 dw Subanim_0StatusConfusedEnemy
dw Subanimation27 dw Subanim_0StatusPoisoned
dw Subanimation28 dw Subanim_1Sand
dw Subanimation29 dw Subanim_1LightningBall
dw Subanimation2a dw Subanim_0SliceBothSides
dw Subanimation2b dw Subanim_1Lightning
dw Subanimation2c dw Subanim_0WaterDroplets
dw Subanimation2d dw Subanim_0CirclesCentering
dw Subanimation2e dw Subanim_0Beam
dw Subanimation2f dw Subanim_0IceRise
dw Subanimation30 dw Subanim_0RocksFallEnemy
dw Subanimation31 dw Subanim_0SoundWave
dw Subanimation32 dw Subanim_0Circle_1Square_HalfToss ; unused
dw Subanimation33 dw Subanim_1Barrier
dw Subanimation34 dw Subanim_1Selfdestruct
dw Subanimation35 dw Subanim_0WaterBubbles
dw Subanimation36 dw Subanim_0CirclesFalling
dw Subanimation37 dw Subanim_0StringShot
dw Subanimation38 dw Subanim_0IceFall
dw Subanimation39 dw Subanim_0Circle_1Square_Appears ; unused
dw Subanimation3a dw Subanim_0StatusSleep
dw Subanimation3b dw Subanim_0StatusSleepEnemy
dw Subanimation3c dw Subanim_0Water_1Fire_Barrier ; unused
dw Subanimation3d dw Subanim_0Water_1Fire_Geyser ; unused
dw Subanimation3e dw Subanim_1StarBigToss
dw Subanimation3f dw Subanim_1StarsSmallToss
dw Subanimation40 dw Subanim_1MusicCirclingEnemy
dw Subanimation41 dw Subanim_1CircleBlackToss
dw Subanimation42 dw Subanim_1ExplosionSmallEnemy
dw Subanimation43 dw Subanim_0Circle_1Square_Closing
dw Subanimation44 dw Subanim_1LeavesToss
dw Subanimation45 dw Subanim_0HornJabTwice
dw Subanimation46 dw Subanim_0HornJabThrice
dw Subanimation47 dw Subanim_0BallPoof
dw Subanimation48 dw Subanim_2TradeBallDrop
dw Subanimation49 dw Subanim_2TradeBallShake
dw Subanimation4a dw Subanim_2TradeBallAppear
dw Subanimation4b dw Subanim_2TradeBallPoof
dw Subanimation4c dw Subanim_0EggShaking
dw Subanimation4d dw Subanim_1TriangleToss
dw Subanimation4e dw Subanim_1SphereBig
dw Subanimation4f dw Subanim_1SphereBigRise
dw Subanimation50 dw Subanim_1SphereBigFall
dw Subanimation51 dw Subanim_0Shell
dw Subanimation52 dw Subanim_0CoinBounce
dw Subanimation53 dw Subanim_0SafariRock
dw Subanimation54 dw Subanim_0SafariBait
dw Subanimation55 dw Subanim_0StarHigh
assert_table_length NUM_SUBANIMS assert_table_length NUM_SUBANIMS
; format: ; format:
@ -98,17 +98,17 @@ MACRO subanim
db (\1 << 5) | \2 db (\1 << 5) | \2
ENDM ENDM
Subanimation04: Subanim_1StarBigMoving:
subanim SUBANIMTYPE_HFLIP, 3 subanim SUBANIMTYPE_HFLIP, 3
db FRAMEBLOCK_02, BASECOORD_1A, FRAMEBLOCKMODE_00 db FRAMEBLOCK_02, BASECOORD_1A, FRAMEBLOCKMODE_00
db FRAMEBLOCK_02, BASECOORD_10, FRAMEBLOCKMODE_00 db FRAMEBLOCK_02, BASECOORD_10, FRAMEBLOCKMODE_00
db FRAMEBLOCK_02, BASECOORD_03, FRAMEBLOCKMODE_00 db FRAMEBLOCK_02, BASECOORD_03, FRAMEBLOCKMODE_00
Subanimation05: Subanim_1StarBig:
subanim SUBANIMTYPE_HFLIP, 1 subanim SUBANIMTYPE_HFLIP, 1
db FRAMEBLOCK_02, BASECOORD_10, FRAMEBLOCKMODE_00 db FRAMEBLOCK_02, BASECOORD_10, FRAMEBLOCKMODE_00
Subanimation08: Subanim_0BallTossLow:
subanim SUBANIMTYPE_NORMAL, 11 subanim SUBANIMTYPE_NORMAL, 11
db FRAMEBLOCK_03, BASECOORD_30, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_30, FRAMEBLOCKMODE_00
db FRAMEBLOCK_03, BASECOORD_44, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_44, FRAMEBLOCKMODE_00
@ -122,7 +122,7 @@ Subanimation08:
db FRAMEBLOCK_03, BASECOORD_A1, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_A1, FRAMEBLOCKMODE_00
db FRAMEBLOCK_03, BASECOORD_34, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_34, FRAMEBLOCKMODE_00
Subanimation07: Subanim_0BallTossMiddle:
subanim SUBANIMTYPE_NORMAL, 11 subanim SUBANIMTYPE_NORMAL, 11
db FRAMEBLOCK_03, BASECOORD_30, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_30, FRAMEBLOCKMODE_00
db FRAMEBLOCK_03, BASECOORD_A2, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_A2, FRAMEBLOCKMODE_00
@ -136,7 +136,7 @@ Subanimation07:
db FRAMEBLOCK_03, BASECOORD_A6, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_A6, FRAMEBLOCKMODE_00
db FRAMEBLOCK_03, BASECOORD_34, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_34, FRAMEBLOCKMODE_00
Subanimation06: Subanim_0BallTossHigh:
subanim SUBANIMTYPE_NORMAL, 11 subanim SUBANIMTYPE_NORMAL, 11
db FRAMEBLOCK_03, BASECOORD_30, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_30, FRAMEBLOCKMODE_00
db FRAMEBLOCK_03, BASECOORD_A2, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_A2, FRAMEBLOCKMODE_00
@ -150,14 +150,14 @@ Subanimation06:
db FRAMEBLOCK_03, BASECOORD_A9, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_A9, FRAMEBLOCKMODE_00
db FRAMEBLOCK_03, BASECOORD_34, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_34, FRAMEBLOCKMODE_00
Subanimation09: Subanim_0BallShakeEnemy:
subanim SUBANIMTYPE_NORMAL, 4 subanim SUBANIMTYPE_NORMAL, 4
db FRAMEBLOCK_03, BASECOORD_21, FRAMEBLOCKMODE_04 db FRAMEBLOCK_03, BASECOORD_21, FRAMEBLOCKMODE_04
db FRAMEBLOCK_04, BASECOORD_21, FRAMEBLOCKMODE_04 db FRAMEBLOCK_04, BASECOORD_21, FRAMEBLOCKMODE_04
db FRAMEBLOCK_03, BASECOORD_21, FRAMEBLOCKMODE_04 db FRAMEBLOCK_03, BASECOORD_21, FRAMEBLOCKMODE_04
db FRAMEBLOCK_05, BASECOORD_21, FRAMEBLOCKMODE_04 db FRAMEBLOCK_05, BASECOORD_21, FRAMEBLOCKMODE_04
Subanimation0a: Subanim_0BallPoofEnemy:
subanim SUBANIMTYPE_HFLIP, 6 subanim SUBANIMTYPE_HFLIP, 6
db FRAMEBLOCK_06, BASECOORD_1B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_06, BASECOORD_1B, FRAMEBLOCKMODE_00
db FRAMEBLOCK_07, BASECOORD_1B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_07, BASECOORD_1B, FRAMEBLOCKMODE_00
@ -166,18 +166,18 @@ Subanimation0a:
db FRAMEBLOCK_0A, BASECOORD_15, FRAMEBLOCKMODE_00 db FRAMEBLOCK_0A, BASECOORD_15, FRAMEBLOCKMODE_00
db FRAMEBLOCK_0A, BASECOORD_15, FRAMEBLOCKMODE_00 db FRAMEBLOCK_0A, BASECOORD_15, FRAMEBLOCKMODE_00
Subanimation0b: Subanim_0BallBlock:
subanim SUBANIMTYPE_NORMAL, 4 subanim SUBANIMTYPE_NORMAL, 4
db FRAMEBLOCK_01, BASECOORD_2D, FRAMEBLOCKMODE_00 db FRAMEBLOCK_01, BASECOORD_2D, FRAMEBLOCKMODE_00
db FRAMEBLOCK_03, BASECOORD_2F, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_2F, FRAMEBLOCKMODE_00
db FRAMEBLOCK_03, BASECOORD_35, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_35, FRAMEBLOCKMODE_00
db FRAMEBLOCK_03, BASECOORD_4D, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_4D, FRAMEBLOCKMODE_00
Subanimation55: Subanim_0StarHigh:
subanim SUBANIMTYPE_HFLIP, 1 subanim SUBANIMTYPE_HFLIP, 1
db FRAMEBLOCK_01, BASECOORD_9D, FRAMEBLOCKMODE_00 db FRAMEBLOCK_01, BASECOORD_9D, FRAMEBLOCKMODE_00
Subanimation11: Subanim_1Flames:
subanim SUBANIMTYPE_HFLIP, 12 subanim SUBANIMTYPE_HFLIP, 12
db FRAMEBLOCK_0B, BASECOORD_26, FRAMEBLOCKMODE_00 db FRAMEBLOCK_0B, BASECOORD_26, FRAMEBLOCKMODE_00
db FRAMEBLOCK_0C, BASECOORD_26, FRAMEBLOCKMODE_00 db FRAMEBLOCK_0C, BASECOORD_26, FRAMEBLOCKMODE_00
@ -192,7 +192,7 @@ Subanimation11:
db FRAMEBLOCK_0B, BASECOORD_27, FRAMEBLOCKMODE_00 db FRAMEBLOCK_0B, BASECOORD_27, FRAMEBLOCKMODE_00
db FRAMEBLOCK_0C, BASECOORD_27, FRAMEBLOCKMODE_00 db FRAMEBLOCK_0C, BASECOORD_27, FRAMEBLOCKMODE_00
Subanimation2b: Subanim_1Lightning:
subanim SUBANIMTYPE_HFLIP, 11 subanim SUBANIMTYPE_HFLIP, 11
db FRAMEBLOCK_0D, BASECOORD_03, FRAMEBLOCKMODE_03 db FRAMEBLOCK_0D, BASECOORD_03, FRAMEBLOCKMODE_03
db FRAMEBLOCK_0E, BASECOORD_03, FRAMEBLOCKMODE_03 db FRAMEBLOCK_0E, BASECOORD_03, FRAMEBLOCKMODE_03
@ -206,7 +206,7 @@ Subanimation2b:
db FRAMEBLOCK_11, BASECOORD_1B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_11, BASECOORD_1B, FRAMEBLOCKMODE_00
db FRAMEBLOCK_11, BASECOORD_1B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_11, BASECOORD_1B, FRAMEBLOCKMODE_00
Subanimation2c: Subanim_0WaterDroplets:
subanim SUBANIMTYPE_HFLIP, 12 subanim SUBANIMTYPE_HFLIP, 12
db FRAMEBLOCK_12, BASECOORD_01, FRAMEBLOCKMODE_00 db FRAMEBLOCK_12, BASECOORD_01, FRAMEBLOCKMODE_00
db FRAMEBLOCK_12, BASECOORD_0F, FRAMEBLOCKMODE_00 db FRAMEBLOCK_12, BASECOORD_0F, FRAMEBLOCKMODE_00
@ -221,7 +221,7 @@ Subanimation2c:
db FRAMEBLOCK_16, BASECOORD_38, FRAMEBLOCKMODE_00 db FRAMEBLOCK_16, BASECOORD_38, FRAMEBLOCKMODE_00
db FRAMEBLOCK_16, BASECOORD_38, FRAMEBLOCKMODE_00 db FRAMEBLOCK_16, BASECOORD_38, FRAMEBLOCKMODE_00
Subanimation12: Subanim_0Heart_1Music:
subanim SUBANIMTYPE_COORDFLIP, 9 subanim SUBANIMTYPE_COORDFLIP, 9
db FRAMEBLOCK_17, BASECOORD_30, FRAMEBLOCKMODE_00 db FRAMEBLOCK_17, BASECOORD_30, FRAMEBLOCKMODE_00
db FRAMEBLOCK_17, BASECOORD_39, FRAMEBLOCKMODE_00 db FRAMEBLOCK_17, BASECOORD_39, FRAMEBLOCKMODE_00
@ -233,35 +233,35 @@ Subanimation12:
db FRAMEBLOCK_17, BASECOORD_3F, FRAMEBLOCKMODE_00 db FRAMEBLOCK_17, BASECOORD_3F, FRAMEBLOCKMODE_00
db FRAMEBLOCK_17, BASECOORD_1F, FRAMEBLOCKMODE_00 db FRAMEBLOCK_17, BASECOORD_1F, FRAMEBLOCKMODE_00
Subanimation00: Subanim_0Star:
subanim SUBANIMTYPE_HFLIP, 1 subanim SUBANIMTYPE_HFLIP, 1
db FRAMEBLOCK_01, BASECOORD_17, FRAMEBLOCKMODE_00 db FRAMEBLOCK_01, BASECOORD_17, FRAMEBLOCKMODE_00
Subanimation01: Subanim_0StarTwice:
subanim SUBANIMTYPE_HFLIP, 2 subanim SUBANIMTYPE_HFLIP, 2
db FRAMEBLOCK_01, BASECOORD_0F, FRAMEBLOCKMODE_00 db FRAMEBLOCK_01, BASECOORD_0F, FRAMEBLOCKMODE_00
db FRAMEBLOCK_01, BASECOORD_1D, FRAMEBLOCKMODE_00 db FRAMEBLOCK_01, BASECOORD_1D, FRAMEBLOCKMODE_00
Subanimation02: Subanim_0StarThrice:
subanim SUBANIMTYPE_HFLIP, 3 subanim SUBANIMTYPE_HFLIP, 3
db FRAMEBLOCK_01, BASECOORD_12, FRAMEBLOCKMODE_00 db FRAMEBLOCK_01, BASECOORD_12, FRAMEBLOCKMODE_00
db FRAMEBLOCK_01, BASECOORD_15, FRAMEBLOCKMODE_00 db FRAMEBLOCK_01, BASECOORD_15, FRAMEBLOCKMODE_00
db FRAMEBLOCK_01, BASECOORD_1C, FRAMEBLOCKMODE_00 db FRAMEBLOCK_01, BASECOORD_1C, FRAMEBLOCKMODE_00
Subanimation03: Subanim_0StarDescending:
subanim SUBANIMTYPE_HFLIP, 4 subanim SUBANIMTYPE_HFLIP, 4
db FRAMEBLOCK_01, BASECOORD_0B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_01, BASECOORD_0B, FRAMEBLOCKMODE_00
db FRAMEBLOCK_01, BASECOORD_11, FRAMEBLOCKMODE_00 db FRAMEBLOCK_01, BASECOORD_11, FRAMEBLOCKMODE_00
db FRAMEBLOCK_01, BASECOORD_18, FRAMEBLOCKMODE_00 db FRAMEBLOCK_01, BASECOORD_18, FRAMEBLOCKMODE_00
db FRAMEBLOCK_01, BASECOORD_1D, FRAMEBLOCKMODE_00 db FRAMEBLOCK_01, BASECOORD_1D, FRAMEBLOCKMODE_00
Subanimation0c: Subanim_1FlameColumn1:
subanim SUBANIMTYPE_HFLIP, 3 subanim SUBANIMTYPE_HFLIP, 3
db FRAMEBLOCK_0C, BASECOORD_20, FRAMEBLOCKMODE_00 db FRAMEBLOCK_0C, BASECOORD_20, FRAMEBLOCKMODE_00
db FRAMEBLOCK_0C, BASECOORD_21, FRAMEBLOCKMODE_00 db FRAMEBLOCK_0C, BASECOORD_21, FRAMEBLOCKMODE_00
db FRAMEBLOCK_0C, BASECOORD_23, FRAMEBLOCKMODE_00 db FRAMEBLOCK_0C, BASECOORD_23, FRAMEBLOCKMODE_00
Subanimation0d: Subanim_1FlameColumn2:
subanim SUBANIMTYPE_HFLIP, 6 subanim SUBANIMTYPE_HFLIP, 6
db FRAMEBLOCK_0C, BASECOORD_20, FRAMEBLOCKMODE_02 db FRAMEBLOCK_0C, BASECOORD_20, FRAMEBLOCKMODE_02
db FRAMEBLOCK_0C, BASECOORD_15, FRAMEBLOCKMODE_00 db FRAMEBLOCK_0C, BASECOORD_15, FRAMEBLOCKMODE_00
@ -270,7 +270,7 @@ Subanimation0d:
db FRAMEBLOCK_0C, BASECOORD_23, FRAMEBLOCKMODE_02 db FRAMEBLOCK_0C, BASECOORD_23, FRAMEBLOCKMODE_02
db FRAMEBLOCK_0C, BASECOORD_19, FRAMEBLOCKMODE_00 db FRAMEBLOCK_0C, BASECOORD_19, FRAMEBLOCKMODE_00
Subanimation0e: Subanim_1FlameColumn3:
subanim SUBANIMTYPE_HFLIP, 9 subanim SUBANIMTYPE_HFLIP, 9
db FRAMEBLOCK_0C, BASECOORD_20, FRAMEBLOCKMODE_02 db FRAMEBLOCK_0C, BASECOORD_20, FRAMEBLOCKMODE_02
db FRAMEBLOCK_0C, BASECOORD_15, FRAMEBLOCKMODE_02 db FRAMEBLOCK_0C, BASECOORD_15, FRAMEBLOCKMODE_02
@ -282,7 +282,7 @@ Subanimation0e:
db FRAMEBLOCK_0C, BASECOORD_19, FRAMEBLOCKMODE_02 db FRAMEBLOCK_0C, BASECOORD_19, FRAMEBLOCKMODE_02
db FRAMEBLOCK_0C, BASECOORD_0C, FRAMEBLOCKMODE_00 db FRAMEBLOCK_0C, BASECOORD_0C, FRAMEBLOCKMODE_00
Subanimation1f: Subanim_1FlameBeam:
subanim SUBANIMTYPE_REVERSE, 5 subanim SUBANIMTYPE_REVERSE, 5
db FRAMEBLOCK_0C, BASECOORD_30, FRAMEBLOCKMODE_03 db FRAMEBLOCK_0C, BASECOORD_30, FRAMEBLOCKMODE_03
db FRAMEBLOCK_0C, BASECOORD_40, FRAMEBLOCKMODE_03 db FRAMEBLOCK_0C, BASECOORD_40, FRAMEBLOCKMODE_03
@ -290,7 +290,7 @@ Subanimation1f:
db FRAMEBLOCK_0C, BASECOORD_42, FRAMEBLOCKMODE_03 db FRAMEBLOCK_0C, BASECOORD_42, FRAMEBLOCKMODE_03
db FRAMEBLOCK_0C, BASECOORD_21, FRAMEBLOCKMODE_00 db FRAMEBLOCK_0C, BASECOORD_21, FRAMEBLOCKMODE_00
Subanimation2e: Subanim_0Beam:
subanim SUBANIMTYPE_HVFLIP, 14 subanim SUBANIMTYPE_HVFLIP, 14
db FRAMEBLOCK_18, BASECOORD_43, FRAMEBLOCKMODE_02 db FRAMEBLOCK_18, BASECOORD_43, FRAMEBLOCKMODE_02
db FRAMEBLOCK_75, BASECOORD_52, FRAMEBLOCKMODE_04 db FRAMEBLOCK_75, BASECOORD_52, FRAMEBLOCKMODE_04
@ -307,14 +307,14 @@ Subanimation2e:
db FRAMEBLOCK_1E, BASECOORD_43, FRAMEBLOCKMODE_02 db FRAMEBLOCK_1E, BASECOORD_43, FRAMEBLOCKMODE_02
db FRAMEBLOCK_75, BASECOORD_1B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_75, BASECOORD_1B, FRAMEBLOCKMODE_00
Subanimation2f: Subanim_0IceRise:
subanim SUBANIMTYPE_HFLIP, 4 subanim SUBANIMTYPE_HFLIP, 4
db FRAMEBLOCK_1F, BASECOORD_24, FRAMEBLOCKMODE_00 db FRAMEBLOCK_1F, BASECOORD_24, FRAMEBLOCKMODE_00
db FRAMEBLOCK_20, BASECOORD_20, FRAMEBLOCKMODE_00 db FRAMEBLOCK_20, BASECOORD_20, FRAMEBLOCKMODE_00
db FRAMEBLOCK_21, BASECOORD_1A, FRAMEBLOCKMODE_00 db FRAMEBLOCK_21, BASECOORD_1A, FRAMEBLOCKMODE_00
db FRAMEBLOCK_22, BASECOORD_15, FRAMEBLOCKMODE_00 db FRAMEBLOCK_22, BASECOORD_15, FRAMEBLOCKMODE_00
Subanimation30: Subanim_0RocksFallEnemy:
subanim SUBANIMTYPE_HFLIP, 18 subanim SUBANIMTYPE_HFLIP, 18
db FRAMEBLOCK_23, BASECOORD_00, FRAMEBLOCKMODE_02 db FRAMEBLOCK_23, BASECOORD_00, FRAMEBLOCKMODE_02
db FRAMEBLOCK_23, BASECOORD_02, FRAMEBLOCKMODE_02 db FRAMEBLOCK_23, BASECOORD_02, FRAMEBLOCKMODE_02
@ -335,7 +335,7 @@ Subanimation30:
db FRAMEBLOCK_24, BASECOORD_28, FRAMEBLOCKMODE_00 db FRAMEBLOCK_24, BASECOORD_28, FRAMEBLOCKMODE_00
db FRAMEBLOCK_24, BASECOORD_28, FRAMEBLOCKMODE_00 db FRAMEBLOCK_24, BASECOORD_28, FRAMEBLOCKMODE_00
Subanimation0f: Subanim_0Scratches:
subanim SUBANIMTYPE_HFLIP, 12 subanim SUBANIMTYPE_HFLIP, 12
db FRAMEBLOCK_26, BASECOORD_0E, FRAMEBLOCKMODE_02 db FRAMEBLOCK_26, BASECOORD_0E, FRAMEBLOCKMODE_02
db FRAMEBLOCK_26, BASECOORD_16, FRAMEBLOCKMODE_02 db FRAMEBLOCK_26, BASECOORD_16, FRAMEBLOCKMODE_02
@ -350,7 +350,7 @@ Subanimation0f:
db FRAMEBLOCK_29, BASECOORD_16, FRAMEBLOCKMODE_02 db FRAMEBLOCK_29, BASECOORD_16, FRAMEBLOCKMODE_02
db FRAMEBLOCK_29, BASECOORD_1C, FRAMEBLOCKMODE_00 db FRAMEBLOCK_29, BASECOORD_1C, FRAMEBLOCKMODE_00
Subanimation16: Subanim_0Slice:
subanim SUBANIMTYPE_HFLIP, 12 subanim SUBANIMTYPE_HFLIP, 12
db FRAMEBLOCK_2A, BASECOORD_05, FRAMEBLOCKMODE_00 db FRAMEBLOCK_2A, BASECOORD_05, FRAMEBLOCKMODE_00
db FRAMEBLOCK_2B, BASECOORD_05, FRAMEBLOCKMODE_02 db FRAMEBLOCK_2B, BASECOORD_05, FRAMEBLOCKMODE_02
@ -365,7 +365,7 @@ Subanimation16:
db FRAMEBLOCK_2C, BASECOORD_00, FRAMEBLOCKMODE_02 db FRAMEBLOCK_2C, BASECOORD_00, FRAMEBLOCKMODE_02
db FRAMEBLOCK_2C, BASECOORD_00, FRAMEBLOCKMODE_00 db FRAMEBLOCK_2C, BASECOORD_00, FRAMEBLOCKMODE_00
Subanimation10: Subanim_1Tornado:
subanim SUBANIMTYPE_REVERSE, 8 subanim SUBANIMTYPE_REVERSE, 8
db FRAMEBLOCK_2D, BASECOORD_44, FRAMEBLOCKMODE_00 db FRAMEBLOCK_2D, BASECOORD_44, FRAMEBLOCKMODE_00
db FRAMEBLOCK_2E, BASECOORD_45, FRAMEBLOCKMODE_00 db FRAMEBLOCK_2E, BASECOORD_45, FRAMEBLOCKMODE_00
@ -376,7 +376,7 @@ Subanimation10:
db FRAMEBLOCK_2D, BASECOORD_2F, FRAMEBLOCKMODE_00 db FRAMEBLOCK_2D, BASECOORD_2F, FRAMEBLOCKMODE_00
db FRAMEBLOCK_2E, BASECOORD_1A, FRAMEBLOCKMODE_00 db FRAMEBLOCK_2E, BASECOORD_1A, FRAMEBLOCKMODE_00
Subanimation31: Subanim_0SoundWave:
subanim SUBANIMTYPE_HVFLIP, 10 subanim SUBANIMTYPE_HVFLIP, 10
db FRAMEBLOCK_2F, BASECOORD_46, FRAMEBLOCKMODE_00 db FRAMEBLOCK_2F, BASECOORD_46, FRAMEBLOCKMODE_00
db FRAMEBLOCK_2F, BASECOORD_4A, FRAMEBLOCKMODE_00 db FRAMEBLOCK_2F, BASECOORD_4A, FRAMEBLOCKMODE_00
@ -389,7 +389,7 @@ Subanimation31:
db FRAMEBLOCK_2F, BASECOORD_2E, FRAMEBLOCKMODE_00 db FRAMEBLOCK_2F, BASECOORD_2E, FRAMEBLOCKMODE_00
db FRAMEBLOCK_2F, BASECOORD_51, FRAMEBLOCKMODE_00 db FRAMEBLOCK_2F, BASECOORD_51, FRAMEBLOCKMODE_00
Subanimation13: Subanim_1BlobToss:
subanim SUBANIMTYPE_REVERSE, 6 subanim SUBANIMTYPE_REVERSE, 6
db FRAMEBLOCK_30, BASECOORD_31, FRAMEBLOCKMODE_00 db FRAMEBLOCK_30, BASECOORD_31, FRAMEBLOCKMODE_00
db FRAMEBLOCK_30, BASECOORD_32, FRAMEBLOCKMODE_00 db FRAMEBLOCK_30, BASECOORD_32, FRAMEBLOCKMODE_00
@ -398,7 +398,7 @@ Subanimation13:
db FRAMEBLOCK_30, BASECOORD_0F, FRAMEBLOCKMODE_00 db FRAMEBLOCK_30, BASECOORD_0F, FRAMEBLOCKMODE_00
db FRAMEBLOCK_30, BASECOORD_10, FRAMEBLOCKMODE_00 db FRAMEBLOCK_30, BASECOORD_10, FRAMEBLOCKMODE_00
Subanimation14: Subanim_1BlobDripEnemy:
subanim SUBANIMTYPE_HFLIP, 9 subanim SUBANIMTYPE_HFLIP, 9
db FRAMEBLOCK_30, BASECOORD_10, FRAMEBLOCKMODE_00 db FRAMEBLOCK_30, BASECOORD_10, FRAMEBLOCKMODE_00
db FRAMEBLOCK_30, BASECOORD_10, FRAMEBLOCKMODE_03 db FRAMEBLOCK_30, BASECOORD_10, FRAMEBLOCKMODE_03
@ -410,7 +410,7 @@ Subanimation14:
db FRAMEBLOCK_31, BASECOORD_22, FRAMEBLOCKMODE_04 db FRAMEBLOCK_31, BASECOORD_22, FRAMEBLOCKMODE_04
db FRAMEBLOCK_31, BASECOORD_27, FRAMEBLOCKMODE_00 db FRAMEBLOCK_31, BASECOORD_27, FRAMEBLOCKMODE_00
Subanimation41: Subanim_1CircleBlackToss:
subanim SUBANIMTYPE_REVERSE, 5 subanim SUBANIMTYPE_REVERSE, 5
db FRAMEBLOCK_03, BASECOORD_31, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_31, FRAMEBLOCKMODE_00
db FRAMEBLOCK_03, BASECOORD_32, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_32, FRAMEBLOCKMODE_00
@ -418,32 +418,32 @@ Subanimation41:
db FRAMEBLOCK_03, BASECOORD_0E, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_0E, FRAMEBLOCKMODE_00
db FRAMEBLOCK_03, BASECOORD_10, FRAMEBLOCKMODE_00 db FRAMEBLOCK_03, BASECOORD_10, FRAMEBLOCKMODE_00
Subanimation42: Subanim_1ExplosionSmallEnemy:
subanim SUBANIMTYPE_HFLIP, 3 subanim SUBANIMTYPE_HFLIP, 3
db FRAMEBLOCK_SMALL_BLACK_CIRCLE, BASECOORD_08, FRAMEBLOCKMODE_00 db FRAMEBLOCK_SMALL_BLACK_CIRCLE, BASECOORD_08, FRAMEBLOCKMODE_00
db FRAMEBLOCK_LARGE_BLACK_CIRCLE, BASECOORD_08, FRAMEBLOCKMODE_00 db FRAMEBLOCK_LARGE_BLACK_CIRCLE, BASECOORD_08, FRAMEBLOCKMODE_00
db FRAMEBLOCK_5A, BASECOORD_08, FRAMEBLOCKMODE_00 db FRAMEBLOCK_5A, BASECOORD_08, FRAMEBLOCKMODE_00
Subanimation15: Subanim_1Shout:
subanim SUBANIMTYPE_HVFLIP, 2 subanim SUBANIMTYPE_HVFLIP, 2
db FRAMEBLOCK_35, BASECOORD_52, FRAMEBLOCKMODE_00 db FRAMEBLOCK_35, BASECOORD_52, FRAMEBLOCKMODE_00
db FRAMEBLOCK_35, BASECOORD_53, FRAMEBLOCKMODE_00 db FRAMEBLOCK_35, BASECOORD_53, FRAMEBLOCKMODE_00
Subanimation17: Subanim_0BirdiesCirclingEnemy:
subanim SUBANIMTYPE_HFLIP, 4 subanim SUBANIMTYPE_HFLIP, 4
db FRAMEBLOCK_36, BASECOORD_54, FRAMEBLOCKMODE_00 db FRAMEBLOCK_36, BASECOORD_54, FRAMEBLOCKMODE_00
db FRAMEBLOCK_36, BASECOORD_55, FRAMEBLOCKMODE_00 db FRAMEBLOCK_36, BASECOORD_55, FRAMEBLOCKMODE_00
db FRAMEBLOCK_37, BASECOORD_56, FRAMEBLOCKMODE_00 db FRAMEBLOCK_37, BASECOORD_56, FRAMEBLOCKMODE_00
db FRAMEBLOCK_37, BASECOORD_57, FRAMEBLOCKMODE_00 db FRAMEBLOCK_37, BASECOORD_57, FRAMEBLOCKMODE_00
Subanimation18: Subanim_1SwordsCircling:
subanim SUBANIMTYPE_ENEMY, 4 subanim SUBANIMTYPE_ENEMY, 4
db FRAMEBLOCK_36, BASECOORD_54, FRAMEBLOCKMODE_00 db FRAMEBLOCK_36, BASECOORD_54, FRAMEBLOCKMODE_00
db FRAMEBLOCK_36, BASECOORD_55, FRAMEBLOCKMODE_00 db FRAMEBLOCK_36, BASECOORD_55, FRAMEBLOCKMODE_00
db FRAMEBLOCK_37, BASECOORD_56, FRAMEBLOCKMODE_00 db FRAMEBLOCK_37, BASECOORD_56, FRAMEBLOCKMODE_00
db FRAMEBLOCK_37, BASECOORD_57, FRAMEBLOCKMODE_00 db FRAMEBLOCK_37, BASECOORD_57, FRAMEBLOCKMODE_00
Subanimation40: Subanim_1MusicCirclingEnemy:
subanim SUBANIMTYPE_HFLIP, 6 subanim SUBANIMTYPE_HFLIP, 6
db FRAMEBLOCK_17, BASECOORD_54, FRAMEBLOCKMODE_00 db FRAMEBLOCK_17, BASECOORD_54, FRAMEBLOCKMODE_00
db FRAMEBLOCK_17, BASECOORD_55, FRAMEBLOCKMODE_00 db FRAMEBLOCK_17, BASECOORD_55, FRAMEBLOCKMODE_00
@ -452,7 +452,7 @@ Subanimation40:
db FRAMEBLOCK_17, BASECOORD_57, FRAMEBLOCKMODE_00 db FRAMEBLOCK_17, BASECOORD_57, FRAMEBLOCKMODE_00
db FRAMEBLOCK_17, BASECOORD_13, FRAMEBLOCKMODE_00 db FRAMEBLOCK_17, BASECOORD_13, FRAMEBLOCKMODE_00
Subanimation19: Subanim_1CloudToss:
subanim SUBANIMTYPE_REVERSE, 12 subanim SUBANIMTYPE_REVERSE, 12
db FRAMEBLOCK_38, BASECOORD_31, FRAMEBLOCKMODE_00 db FRAMEBLOCK_38, BASECOORD_31, FRAMEBLOCKMODE_00
db FRAMEBLOCK_39, BASECOORD_31, FRAMEBLOCKMODE_00 db FRAMEBLOCK_39, BASECOORD_31, FRAMEBLOCKMODE_00
@ -467,7 +467,7 @@ Subanimation19:
db FRAMEBLOCK_38, BASECOORD_10, FRAMEBLOCKMODE_00 db FRAMEBLOCK_38, BASECOORD_10, FRAMEBLOCKMODE_00
db FRAMEBLOCK_39, BASECOORD_10, FRAMEBLOCKMODE_00 db FRAMEBLOCK_39, BASECOORD_10, FRAMEBLOCKMODE_00
Subanimation1a: Subanim_0WaterColumns:
subanim SUBANIMTYPE_HFLIP, 16 subanim SUBANIMTYPE_HFLIP, 16
db FRAMEBLOCK_3A, BASECOORD_08, FRAMEBLOCKMODE_00 db FRAMEBLOCK_3A, BASECOORD_08, FRAMEBLOCKMODE_00
db FRAMEBLOCK_3B, BASECOORD_08, FRAMEBLOCKMODE_00 db FRAMEBLOCK_3B, BASECOORD_08, FRAMEBLOCKMODE_00
@ -486,20 +486,20 @@ Subanimation1a:
db FRAMEBLOCK_3E, BASECOORD_0B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_3E, BASECOORD_0B, FRAMEBLOCKMODE_00
db FRAMEBLOCK_3F, BASECOORD_0B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_3F, BASECOORD_0B, FRAMEBLOCKMODE_00
Subanimation1b: Subanim_1SeedToss:
subanim SUBANIMTYPE_REVERSE, 4 subanim SUBANIMTYPE_REVERSE, 4
db FRAMEBLOCK_40, BASECOORD_31, FRAMEBLOCKMODE_00 db FRAMEBLOCK_40, BASECOORD_31, FRAMEBLOCKMODE_00
db FRAMEBLOCK_40, BASECOORD_32, FRAMEBLOCKMODE_00 db FRAMEBLOCK_40, BASECOORD_32, FRAMEBLOCKMODE_00
db FRAMEBLOCK_40, BASECOORD_92, FRAMEBLOCKMODE_00 db FRAMEBLOCK_40, BASECOORD_92, FRAMEBLOCKMODE_00
db FRAMEBLOCK_40, BASECOORD_15, FRAMEBLOCKMODE_00 db FRAMEBLOCK_40, BASECOORD_15, FRAMEBLOCKMODE_00
Subanimation1c: Subanim_1SeedLand:
subanim SUBANIMTYPE_HFLIP, 3 subanim SUBANIMTYPE_HFLIP, 3
db FRAMEBLOCK_41, BASECOORD_58, FRAMEBLOCKMODE_00 db FRAMEBLOCK_41, BASECOORD_58, FRAMEBLOCKMODE_00
db FRAMEBLOCK_41, BASECOORD_59, FRAMEBLOCKMODE_00 db FRAMEBLOCK_41, BASECOORD_59, FRAMEBLOCKMODE_00
db FRAMEBLOCK_41, BASECOORD_21, FRAMEBLOCKMODE_00 db FRAMEBLOCK_41, BASECOORD_21, FRAMEBLOCKMODE_00
Subanimation1d: Subanim_0RocksLift:
subanim SUBANIMTYPE_ENEMY, 15 subanim SUBANIMTYPE_ENEMY, 15
db FRAMEBLOCK_24, BASECOORD_9A, FRAMEBLOCKMODE_00 db FRAMEBLOCK_24, BASECOORD_9A, FRAMEBLOCKMODE_00
db FRAMEBLOCK_23, BASECOORD_1B, FRAMEBLOCKMODE_02 db FRAMEBLOCK_23, BASECOORD_1B, FRAMEBLOCKMODE_02
@ -517,22 +517,22 @@ Subanimation1d:
db FRAMEBLOCK_25, BASECOORD_62, FRAMEBLOCKMODE_04 db FRAMEBLOCK_25, BASECOORD_62, FRAMEBLOCKMODE_04
db FRAMEBLOCK_25, BASECOORD_99, FRAMEBLOCKMODE_03 db FRAMEBLOCK_25, BASECOORD_99, FRAMEBLOCKMODE_03
Subanimation1e: Subanim_0RocksToss:
subanim SUBANIMTYPE_NORMAL, 1 subanim SUBANIMTYPE_NORMAL, 1
db FRAMEBLOCK_25, BASECOORD_75, FRAMEBLOCKMODE_00 db FRAMEBLOCK_25, BASECOORD_75, FRAMEBLOCKMODE_00
Subanimation20: Subanim_1FlameStar:
subanim SUBANIMTYPE_HFLIP, 2 subanim SUBANIMTYPE_HFLIP, 2
db FRAMEBLOCK_42, BASECOORD_07, FRAMEBLOCKMODE_00 db FRAMEBLOCK_42, BASECOORD_07, FRAMEBLOCKMODE_00
db FRAMEBLOCK_43, BASECOORD_07, FRAMEBLOCKMODE_00 db FRAMEBLOCK_43, BASECOORD_07, FRAMEBLOCKMODE_00
Subanimation21: Subanim_0Circles_1Squares_CenteringEnemy:
subanim SUBANIMTYPE_HFLIP, 3 subanim SUBANIMTYPE_HFLIP, 3
db FRAMEBLOCK_44, BASECOORD_00, FRAMEBLOCKMODE_00 db FRAMEBLOCK_44, BASECOORD_00, FRAMEBLOCKMODE_00
db FRAMEBLOCK_45, BASECOORD_08, FRAMEBLOCKMODE_00 db FRAMEBLOCK_45, BASECOORD_08, FRAMEBLOCKMODE_00
db FRAMEBLOCK_46, BASECOORD_10, FRAMEBLOCKMODE_02 db FRAMEBLOCK_46, BASECOORD_10, FRAMEBLOCKMODE_02
Subanimation22: Subanim_0Circle_1Square_TossBack:
subanim SUBANIMTYPE_REVERSE, 11 subanim SUBANIMTYPE_REVERSE, 11
db FRAMEBLOCK_47, BASECOORD_10, FRAMEBLOCKMODE_00 db FRAMEBLOCK_47, BASECOORD_10, FRAMEBLOCKMODE_00
db FRAMEBLOCK_47, BASECOORD_56, FRAMEBLOCKMODE_00 db FRAMEBLOCK_47, BASECOORD_56, FRAMEBLOCKMODE_00
@ -546,8 +546,8 @@ Subanimation22:
db FRAMEBLOCK_47, BASECOORD_89, FRAMEBLOCKMODE_00 db FRAMEBLOCK_47, BASECOORD_89, FRAMEBLOCKMODE_00
db FRAMEBLOCK_47, BASECOORD_B0, FRAMEBLOCKMODE_00 db FRAMEBLOCK_47, BASECOORD_B0, FRAMEBLOCKMODE_00
Subanimation2d: Subanim_0CirclesCentering:
subanim SUBANIMTYPE_COORDFLIP, 6 subanim SUBANIMTYPE_COORDFLIP, 6 ; should be SUBANIMTYPE_HVFLIP
db FRAMEBLOCK_44, BASECOORD_64, FRAMEBLOCKMODE_00 db FRAMEBLOCK_44, BASECOORD_64, FRAMEBLOCKMODE_00
db FRAMEBLOCK_45, BASECOORD_65, FRAMEBLOCKMODE_00 db FRAMEBLOCK_45, BASECOORD_65, FRAMEBLOCKMODE_00
db FRAMEBLOCK_46, BASECOORD_66, FRAMEBLOCKMODE_00 db FRAMEBLOCK_46, BASECOORD_66, FRAMEBLOCKMODE_00
@ -555,15 +555,15 @@ Subanimation2d:
db FRAMEBLOCK_47, BASECOORD_66, FRAMEBLOCKMODE_00 db FRAMEBLOCK_47, BASECOORD_66, FRAMEBLOCKMODE_00
db FRAMEBLOCK_47, BASECOORD_66, FRAMEBLOCKMODE_00 db FRAMEBLOCK_47, BASECOORD_66, FRAMEBLOCKMODE_00
Subanimation39: Subanim_0Circle_1Square_Appears:
subanim SUBANIMTYPE_COORDFLIP, 1 subanim SUBANIMTYPE_COORDFLIP, 1
db FRAMEBLOCK_47, BASECOORD_67, FRAMEBLOCKMODE_00 db FRAMEBLOCK_47, BASECOORD_67, FRAMEBLOCKMODE_00
Subanimation4e: Subanim_1SphereBig:
subanim SUBANIMTYPE_HFLIP, 1 subanim SUBANIMTYPE_HFLIP, 1
db FRAMEBLOCK_71, BASECOORD_0F, FRAMEBLOCKMODE_03 db FRAMEBLOCK_71, BASECOORD_0F, FRAMEBLOCKMODE_03
Subanimation4f: Subanim_1SphereBigRise:
subanim SUBANIMTYPE_HFLIP, 7 subanim SUBANIMTYPE_HFLIP, 7
db FRAMEBLOCK_71, BASECOORD_0F, FRAMEBLOCKMODE_00 db FRAMEBLOCK_71, BASECOORD_0F, FRAMEBLOCKMODE_00
db FRAMEBLOCK_71, BASECOORD_08, FRAMEBLOCKMODE_00 db FRAMEBLOCK_71, BASECOORD_08, FRAMEBLOCKMODE_00
@ -573,7 +573,7 @@ Subanimation4f:
db FRAMEBLOCK_73, BASECOORD_95, FRAMEBLOCKMODE_00 db FRAMEBLOCK_73, BASECOORD_95, FRAMEBLOCKMODE_00
db FRAMEBLOCK_74, BASECOORD_95, FRAMEBLOCKMODE_00 db FRAMEBLOCK_74, BASECOORD_95, FRAMEBLOCKMODE_00
Subanimation50: Subanim_1SphereBigFall:
subanim SUBANIMTYPE_HFLIP, 8 subanim SUBANIMTYPE_HFLIP, 8
db FRAMEBLOCK_74, BASECOORD_95, FRAMEBLOCKMODE_00 db FRAMEBLOCK_74, BASECOORD_95, FRAMEBLOCKMODE_00
db FRAMEBLOCK_73, BASECOORD_95, FRAMEBLOCKMODE_00 db FRAMEBLOCK_73, BASECOORD_95, FRAMEBLOCKMODE_00
@ -584,7 +584,7 @@ Subanimation50:
db FRAMEBLOCK_71, BASECOORD_0F, FRAMEBLOCKMODE_00 db FRAMEBLOCK_71, BASECOORD_0F, FRAMEBLOCKMODE_00
db FRAMEBLOCK_71, BASECOORD_16, FRAMEBLOCKMODE_00 db FRAMEBLOCK_71, BASECOORD_16, FRAMEBLOCKMODE_00
Subanimation29: Subanim_1LightningBall:
subanim SUBANIMTYPE_HFLIP, 29 subanim SUBANIMTYPE_HFLIP, 29
db FRAMEBLOCK_SMALL_BLACK_CIRCLE, BASECOORD_0F, FRAMEBLOCKMODE_00 db FRAMEBLOCK_SMALL_BLACK_CIRCLE, BASECOORD_0F, FRAMEBLOCKMODE_00
db FRAMEBLOCK_4A, BASECOORD_68, FRAMEBLOCKMODE_03 db FRAMEBLOCK_4A, BASECOORD_68, FRAMEBLOCKMODE_03
@ -616,63 +616,63 @@ Subanimation29:
db FRAMEBLOCK_4D, BASECOORD_2A, FRAMEBLOCKMODE_03 db FRAMEBLOCK_4D, BASECOORD_2A, FRAMEBLOCKMODE_03
db FRAMEBLOCK_LARGE_BLACK_CIRCLE, BASECOORD_6B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_LARGE_BLACK_CIRCLE, BASECOORD_6B, FRAMEBLOCKMODE_00
Subanimation2a: Subanim_0SliceBothSides:
subanim SUBANIMTYPE_HFLIP, 4 subanim SUBANIMTYPE_HFLIP, 4
db FRAMEBLOCK_4E, BASECOORD_2B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_4E, BASECOORD_2B, FRAMEBLOCKMODE_00
db FRAMEBLOCK_4F, BASECOORD_2B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_4F, BASECOORD_2B, FRAMEBLOCKMODE_00
db FRAMEBLOCK_50, BASECOORD_2B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_50, BASECOORD_2B, FRAMEBLOCKMODE_00
db FRAMEBLOCK_50, BASECOORD_2B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_50, BASECOORD_2B, FRAMEBLOCKMODE_00
Subanimation23: Subanim_0Bind:
subanim SUBANIMTYPE_HFLIP, 2 subanim SUBANIMTYPE_HFLIP, 2
db FRAMEBLOCK_51, BASECOORD_2D, FRAMEBLOCKMODE_00 db FRAMEBLOCK_51, BASECOORD_2D, FRAMEBLOCKMODE_00
db FRAMEBLOCK_51, BASECOORD_6E, FRAMEBLOCKMODE_00 db FRAMEBLOCK_51, BASECOORD_6E, FRAMEBLOCKMODE_00
Subanimation24: Subanim_0StatusParalyzed:
subanim SUBANIMTYPE_ENEMY, 2 subanim SUBANIMTYPE_ENEMY, 2
db FRAMEBLOCK_51, BASECOORD_2D, FRAMEBLOCKMODE_00 db FRAMEBLOCK_51, BASECOORD_2D, FRAMEBLOCKMODE_00
db FRAMEBLOCK_51, BASECOORD_6E, FRAMEBLOCKMODE_00 db FRAMEBLOCK_51, BASECOORD_6E, FRAMEBLOCKMODE_00
Subanimation25: Subanim_0StatusConfused:
subanim SUBANIMTYPE_COORDFLIP, 2 subanim SUBANIMTYPE_COORDFLIP, 2
db FRAMEBLOCK_52, BASECOORD_71, FRAMEBLOCKMODE_00 db FRAMEBLOCK_52, BASECOORD_71, FRAMEBLOCKMODE_00
db FRAMEBLOCK_52, BASECOORD_72, FRAMEBLOCKMODE_00 db FRAMEBLOCK_52, BASECOORD_72, FRAMEBLOCKMODE_00
Subanimation26: Subanim_0StatusConfusedEnemy:
subanim SUBANIMTYPE_NORMAL, 2 subanim SUBANIMTYPE_NORMAL, 2
db FRAMEBLOCK_52, BASECOORD_01, FRAMEBLOCKMODE_00 db FRAMEBLOCK_52, BASECOORD_01, FRAMEBLOCKMODE_00
db FRAMEBLOCK_52, BASECOORD_2C, FRAMEBLOCKMODE_00 db FRAMEBLOCK_52, BASECOORD_2C, FRAMEBLOCKMODE_00
Subanimation3a: Subanim_0StatusSleep:
subanim SUBANIMTYPE_COORDFLIP, 3 subanim SUBANIMTYPE_COORDFLIP, 3
db FRAMEBLOCK_53, BASECOORD_71, FRAMEBLOCKMODE_00 db FRAMEBLOCK_53, BASECOORD_71, FRAMEBLOCKMODE_00
db FRAMEBLOCK_53, BASECOORD_7F, FRAMEBLOCKMODE_00 db FRAMEBLOCK_53, BASECOORD_7F, FRAMEBLOCKMODE_00
db FRAMEBLOCK_53, BASECOORD_81, FRAMEBLOCKMODE_00 db FRAMEBLOCK_53, BASECOORD_81, FRAMEBLOCKMODE_00
Subanimation3b: Subanim_0StatusSleepEnemy:
subanim SUBANIMTYPE_NORMAL, 3 subanim SUBANIMTYPE_NORMAL, 3
db FRAMEBLOCK_53, BASECOORD_01, FRAMEBLOCKMODE_00 db FRAMEBLOCK_53, BASECOORD_01, FRAMEBLOCKMODE_00
db FRAMEBLOCK_53, BASECOORD_15, FRAMEBLOCKMODE_00 db FRAMEBLOCK_53, BASECOORD_15, FRAMEBLOCKMODE_00
db FRAMEBLOCK_53, BASECOORD_2C, FRAMEBLOCKMODE_00 db FRAMEBLOCK_53, BASECOORD_2C, FRAMEBLOCKMODE_00
Subanimation27: Subanim_0StatusPoisoned:
subanim SUBANIMTYPE_ENEMY, 2 subanim SUBANIMTYPE_ENEMY, 2
db FRAMEBLOCK_54, BASECOORD_01, FRAMEBLOCKMODE_00 db FRAMEBLOCK_54, BASECOORD_01, FRAMEBLOCKMODE_00
db FRAMEBLOCK_54, BASECOORD_2C, FRAMEBLOCKMODE_00 db FRAMEBLOCK_54, BASECOORD_2C, FRAMEBLOCKMODE_00
Subanimation28: Subanim_1Sand:
subanim SUBANIMTYPE_HVFLIP, 3 subanim SUBANIMTYPE_HVFLIP, 3
db FRAMEBLOCK_55, BASECOORD_73, FRAMEBLOCKMODE_03 db FRAMEBLOCK_55, BASECOORD_73, FRAMEBLOCKMODE_03
db FRAMEBLOCK_56, BASECOORD_73, FRAMEBLOCKMODE_03 db FRAMEBLOCK_56, BASECOORD_73, FRAMEBLOCKMODE_03
db FRAMEBLOCK_57, BASECOORD_73, FRAMEBLOCKMODE_00 db FRAMEBLOCK_57, BASECOORD_73, FRAMEBLOCKMODE_00
Subanimation32: Subanim_0Circle_1Square_HalfToss:
subanim SUBANIMTYPE_COORDFLIP, 3 subanim SUBANIMTYPE_COORDFLIP, 3
db FRAMEBLOCK_47, BASECOORD_74, FRAMEBLOCKMODE_00 db FRAMEBLOCK_47, BASECOORD_74, FRAMEBLOCKMODE_00
db FRAMEBLOCK_47, BASECOORD_43, FRAMEBLOCKMODE_00 db FRAMEBLOCK_47, BASECOORD_43, FRAMEBLOCKMODE_00
db FRAMEBLOCK_47, BASECOORD_75, FRAMEBLOCKMODE_00 db FRAMEBLOCK_47, BASECOORD_75, FRAMEBLOCKMODE_00
Subanimation33: Subanim_1Barrier:
subanim SUBANIMTYPE_HVFLIP, 6 subanim SUBANIMTYPE_HVFLIP, 6
db FRAMEBLOCK_58, BASECOORD_76, FRAMEBLOCKMODE_00 db FRAMEBLOCK_58, BASECOORD_76, FRAMEBLOCKMODE_00
db FRAMEBLOCK_34, BASECOORD_76, FRAMEBLOCKMODE_00 db FRAMEBLOCK_34, BASECOORD_76, FRAMEBLOCKMODE_00
@ -681,7 +681,7 @@ Subanimation33:
db FRAMEBLOCK_58, BASECOORD_76, FRAMEBLOCKMODE_00 db FRAMEBLOCK_58, BASECOORD_76, FRAMEBLOCKMODE_00
db FRAMEBLOCK_34, BASECOORD_76, FRAMEBLOCKMODE_00 db FRAMEBLOCK_34, BASECOORD_76, FRAMEBLOCKMODE_00
Subanimation3c: Subanim_0Water_1Fire_Barrier:
subanim SUBANIMTYPE_COORDFLIP, 7 subanim SUBANIMTYPE_COORDFLIP, 7
db FRAMEBLOCK_59, BASECOORD_79, FRAMEBLOCKMODE_03 db FRAMEBLOCK_59, BASECOORD_79, FRAMEBLOCKMODE_03
db FRAMEBLOCK_59, BASECOORD_7B, FRAMEBLOCKMODE_03 db FRAMEBLOCK_59, BASECOORD_7B, FRAMEBLOCKMODE_03
@ -691,7 +691,7 @@ Subanimation3c:
db FRAMEBLOCK_59, BASECOORD_7C, FRAMEBLOCKMODE_03 db FRAMEBLOCK_59, BASECOORD_7C, FRAMEBLOCKMODE_03
db FRAMEBLOCK_59, BASECOORD_76, FRAMEBLOCKMODE_00 db FRAMEBLOCK_59, BASECOORD_76, FRAMEBLOCKMODE_00
Subanimation3d: Subanim_0Water_1Fire_Geyser:
subanim SUBANIMTYPE_NORMAL, 8 subanim SUBANIMTYPE_NORMAL, 8
db FRAMEBLOCK_3A, BASECOORD_4D, FRAMEBLOCKMODE_00 db FRAMEBLOCK_3A, BASECOORD_4D, FRAMEBLOCKMODE_00
db FRAMEBLOCK_3B, BASECOORD_4D, FRAMEBLOCKMODE_00 db FRAMEBLOCK_3B, BASECOORD_4D, FRAMEBLOCKMODE_00
@ -702,7 +702,7 @@ Subanimation3d:
db FRAMEBLOCK_3E, BASECOORD_4D, FRAMEBLOCKMODE_00 db FRAMEBLOCK_3E, BASECOORD_4D, FRAMEBLOCKMODE_00
db FRAMEBLOCK_3F, BASECOORD_4D, FRAMEBLOCKMODE_00 db FRAMEBLOCK_3F, BASECOORD_4D, FRAMEBLOCKMODE_00
Subanimation34: Subanim_1Selfdestruct:
subanim SUBANIMTYPE_HVFLIP, 21 subanim SUBANIMTYPE_HVFLIP, 21
db FRAMEBLOCK_SMALL_BLACK_CIRCLE, BASECOORD_7D, FRAMEBLOCKMODE_00 db FRAMEBLOCK_SMALL_BLACK_CIRCLE, BASECOORD_7D, FRAMEBLOCKMODE_00
db FRAMEBLOCK_LARGE_BLACK_CIRCLE, BASECOORD_7D, FRAMEBLOCKMODE_00 db FRAMEBLOCK_LARGE_BLACK_CIRCLE, BASECOORD_7D, FRAMEBLOCKMODE_00
@ -726,14 +726,14 @@ Subanimation34:
db FRAMEBLOCK_LARGE_BLACK_CIRCLE, BASECOORD_82, FRAMEBLOCKMODE_00 db FRAMEBLOCK_LARGE_BLACK_CIRCLE, BASECOORD_82, FRAMEBLOCKMODE_00
db FRAMEBLOCK_5A, BASECOORD_82, FRAMEBLOCKMODE_00 db FRAMEBLOCK_5A, BASECOORD_82, FRAMEBLOCKMODE_00
Subanimation35: Subanim_0WaterBubbles:
subanim SUBANIMTYPE_HVFLIP, 4 subanim SUBANIMTYPE_HVFLIP, 4
db FRAMEBLOCK_5B, BASECOORD_83, FRAMEBLOCKMODE_03 db FRAMEBLOCK_5B, BASECOORD_83, FRAMEBLOCKMODE_03
db FRAMEBLOCK_5C, BASECOORD_84, FRAMEBLOCKMODE_03 db FRAMEBLOCK_5C, BASECOORD_84, FRAMEBLOCKMODE_03
db FRAMEBLOCK_5D, BASECOORD_85, FRAMEBLOCKMODE_03 db FRAMEBLOCK_5D, BASECOORD_85, FRAMEBLOCKMODE_03
db FRAMEBLOCK_5E, BASECOORD_09, FRAMEBLOCKMODE_00 db FRAMEBLOCK_5E, BASECOORD_09, FRAMEBLOCKMODE_00
Subanimation36: Subanim_0CirclesFalling:
subanim SUBANIMTYPE_HFLIP, 8 subanim SUBANIMTYPE_HFLIP, 8
db FRAMEBLOCK_5F, BASECOORD_2A, FRAMEBLOCKMODE_00 db FRAMEBLOCK_5F, BASECOORD_2A, FRAMEBLOCKMODE_00
db FRAMEBLOCK_5F, BASECOORD_00, FRAMEBLOCKMODE_00 db FRAMEBLOCK_5F, BASECOORD_00, FRAMEBLOCKMODE_00
@ -744,7 +744,7 @@ Subanimation36:
db FRAMEBLOCK_62, BASECOORD_2A, FRAMEBLOCKMODE_00 db FRAMEBLOCK_62, BASECOORD_2A, FRAMEBLOCKMODE_00
db FRAMEBLOCK_62, BASECOORD_00, FRAMEBLOCKMODE_00 db FRAMEBLOCK_62, BASECOORD_00, FRAMEBLOCKMODE_00
Subanimation37: Subanim_0StringShot:
subanim SUBANIMTYPE_HVFLIP, 10 subanim SUBANIMTYPE_HVFLIP, 10
db FRAMEBLOCK_63, BASECOORD_89, FRAMEBLOCKMODE_00 db FRAMEBLOCK_63, BASECOORD_89, FRAMEBLOCKMODE_00
db FRAMEBLOCK_64, BASECOORD_75, FRAMEBLOCKMODE_00 db FRAMEBLOCK_64, BASECOORD_75, FRAMEBLOCKMODE_00
@ -757,7 +757,7 @@ Subanimation37:
db FRAMEBLOCK_65, BASECOORD_88, FRAMEBLOCKMODE_00 db FRAMEBLOCK_65, BASECOORD_88, FRAMEBLOCKMODE_00
db FRAMEBLOCK_65, BASECOORD_1A, FRAMEBLOCKMODE_00 db FRAMEBLOCK_65, BASECOORD_1A, FRAMEBLOCKMODE_00
Subanimation38: Subanim_0IceFall:
subanim SUBANIMTYPE_HFLIP, 16 subanim SUBANIMTYPE_HFLIP, 16
db FRAMEBLOCK_66, BASECOORD_8A, FRAMEBLOCKMODE_00 db FRAMEBLOCK_66, BASECOORD_8A, FRAMEBLOCKMODE_00
db FRAMEBLOCK_66, BASECOORD_33, FRAMEBLOCKMODE_00 db FRAMEBLOCK_66, BASECOORD_33, FRAMEBLOCKMODE_00
@ -776,7 +776,7 @@ Subanimation38:
db FRAMEBLOCK_66, BASECOORD_1E, FRAMEBLOCKMODE_04 db FRAMEBLOCK_66, BASECOORD_1E, FRAMEBLOCKMODE_04
db FRAMEBLOCK_67, BASECOORD_29, FRAMEBLOCKMODE_00 db FRAMEBLOCK_67, BASECOORD_29, FRAMEBLOCKMODE_00
Subanimation3e: Subanim_1StarBigToss:
subanim SUBANIMTYPE_REVERSE, 18 subanim SUBANIMTYPE_REVERSE, 18
db FRAMEBLOCK_02, BASECOORD_31, FRAMEBLOCKMODE_00 db FRAMEBLOCK_02, BASECOORD_31, FRAMEBLOCKMODE_00
db FRAMEBLOCK_34, BASECOORD_31, FRAMEBLOCKMODE_00 db FRAMEBLOCK_34, BASECOORD_31, FRAMEBLOCKMODE_00
@ -797,7 +797,7 @@ Subanimation3e:
db FRAMEBLOCK_34, BASECOORD_10, FRAMEBLOCKMODE_00 db FRAMEBLOCK_34, BASECOORD_10, FRAMEBLOCKMODE_00
db FRAMEBLOCK_02, BASECOORD_10, FRAMEBLOCKMODE_00 db FRAMEBLOCK_02, BASECOORD_10, FRAMEBLOCKMODE_00
Subanimation3f: Subanim_1StarsSmallToss:
subanim SUBANIMTYPE_COORDFLIP, 18 subanim SUBANIMTYPE_COORDFLIP, 18
db FRAMEBLOCK_68, BASECOORD_4B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_68, BASECOORD_4B, FRAMEBLOCKMODE_00
db FRAMEBLOCK_68, BASECOORD_8C, FRAMEBLOCKMODE_00 db FRAMEBLOCK_68, BASECOORD_8C, FRAMEBLOCKMODE_00
@ -818,7 +818,7 @@ Subanimation3f:
db FRAMEBLOCK_68, BASECOORD_23, FRAMEBLOCKMODE_00 db FRAMEBLOCK_68, BASECOORD_23, FRAMEBLOCKMODE_00
db FRAMEBLOCK_68, BASECOORD_1F, FRAMEBLOCKMODE_00 db FRAMEBLOCK_68, BASECOORD_1F, FRAMEBLOCKMODE_00
Subanimation44: Subanim_1LeavesToss:
subanim SUBANIMTYPE_HVFLIP, 12 subanim SUBANIMTYPE_HVFLIP, 12
db FRAMEBLOCK_69, BASECOORD_4B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_69, BASECOORD_4B, FRAMEBLOCKMODE_00
db FRAMEBLOCK_69, BASECOORD_8C, FRAMEBLOCKMODE_00 db FRAMEBLOCK_69, BASECOORD_8C, FRAMEBLOCKMODE_00
@ -833,20 +833,20 @@ Subanimation44:
db FRAMEBLOCK_69, BASECOORD_0C, FRAMEBLOCKMODE_00 db FRAMEBLOCK_69, BASECOORD_0C, FRAMEBLOCKMODE_00
db FRAMEBLOCK_69, BASECOORD_06, FRAMEBLOCKMODE_00 db FRAMEBLOCK_69, BASECOORD_06, FRAMEBLOCKMODE_00
Subanimation43: Subanim_0Circle_1Square_Closing:
subanim SUBANIMTYPE_ENEMY, 3 subanim SUBANIMTYPE_ENEMY, 3
db FRAMEBLOCK_6A, BASECOORD_07, FRAMEBLOCKMODE_00 db FRAMEBLOCK_6A, BASECOORD_07, FRAMEBLOCKMODE_00
db FRAMEBLOCK_6B, BASECOORD_0F, FRAMEBLOCKMODE_00 db FRAMEBLOCK_6B, BASECOORD_0F, FRAMEBLOCKMODE_00
db FRAMEBLOCK_6C, BASECOORD_17, FRAMEBLOCKMODE_00 db FRAMEBLOCK_6C, BASECOORD_17, FRAMEBLOCKMODE_00
Subanimation45: Subanim_0HornJabTwice:
subanim SUBANIMTYPE_HVFLIP, 4 subanim SUBANIMTYPE_HVFLIP, 4
db FRAMEBLOCK_6D, BASECOORD_8B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_6D, BASECOORD_8B, FRAMEBLOCKMODE_00
db FRAMEBLOCK_6D, BASECOORD_84, FRAMEBLOCKMODE_00 db FRAMEBLOCK_6D, BASECOORD_84, FRAMEBLOCKMODE_00
db FRAMEBLOCK_6D, BASECOORD_63, FRAMEBLOCKMODE_00 db FRAMEBLOCK_6D, BASECOORD_63, FRAMEBLOCKMODE_00
db FRAMEBLOCK_6D, BASECOORD_8C, FRAMEBLOCKMODE_00 db FRAMEBLOCK_6D, BASECOORD_8C, FRAMEBLOCKMODE_00
Subanimation46: Subanim_0HornJabThrice:
subanim SUBANIMTYPE_HVFLIP, 6 subanim SUBANIMTYPE_HVFLIP, 6
db FRAMEBLOCK_6D, BASECOORD_8B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_6D, BASECOORD_8B, FRAMEBLOCKMODE_00
db FRAMEBLOCK_6D, BASECOORD_84, FRAMEBLOCKMODE_00 db FRAMEBLOCK_6D, BASECOORD_84, FRAMEBLOCKMODE_00
@ -855,13 +855,13 @@ Subanimation46:
db FRAMEBLOCK_6D, BASECOORD_0A, FRAMEBLOCKMODE_00 db FRAMEBLOCK_6D, BASECOORD_0A, FRAMEBLOCKMODE_00
db FRAMEBLOCK_6D, BASECOORD_89, FRAMEBLOCKMODE_00 db FRAMEBLOCK_6D, BASECOORD_89, FRAMEBLOCKMODE_00
Subanimation47: Subanim_0BallPoof:
subanim SUBANIMTYPE_HVFLIP, 3 subanim SUBANIMTYPE_HVFLIP, 3
db FRAMEBLOCK_06, BASECOORD_82, FRAMEBLOCKMODE_00 db FRAMEBLOCK_06, BASECOORD_82, FRAMEBLOCKMODE_00
db FRAMEBLOCK_07, BASECOORD_82, FRAMEBLOCKMODE_00 db FRAMEBLOCK_07, BASECOORD_82, FRAMEBLOCKMODE_00
db FRAMEBLOCK_08, BASECOORD_96, FRAMEBLOCKMODE_00 db FRAMEBLOCK_08, BASECOORD_96, FRAMEBLOCKMODE_00
Subanimation48: Subanim_2TradeBallDrop:
subanim SUBANIMTYPE_NORMAL, 6 subanim SUBANIMTYPE_NORMAL, 6
db FRAMEBLOCK_03, BASECOORD_41, FRAMEBLOCKMODE_04 db FRAMEBLOCK_03, BASECOORD_41, FRAMEBLOCKMODE_04
db FRAMEBLOCK_03, BASECOORD_48, FRAMEBLOCKMODE_04 db FRAMEBLOCK_03, BASECOORD_48, FRAMEBLOCKMODE_04
@ -870,24 +870,24 @@ Subanimation48:
db FRAMEBLOCK_05, BASECOORD_48, FRAMEBLOCKMODE_04 db FRAMEBLOCK_05, BASECOORD_48, FRAMEBLOCKMODE_04
db FRAMEBLOCK_03, BASECOORD_48, FRAMEBLOCKMODE_03 db FRAMEBLOCK_03, BASECOORD_48, FRAMEBLOCKMODE_03
Subanimation49: Subanim_2TradeBallShake:
subanim SUBANIMTYPE_NORMAL, 4 subanim SUBANIMTYPE_NORMAL, 4
db FRAMEBLOCK_04, BASECOORD_48, FRAMEBLOCKMODE_04 db FRAMEBLOCK_04, BASECOORD_48, FRAMEBLOCKMODE_04
db FRAMEBLOCK_03, BASECOORD_48, FRAMEBLOCKMODE_04 db FRAMEBLOCK_03, BASECOORD_48, FRAMEBLOCKMODE_04
db FRAMEBLOCK_05, BASECOORD_48, FRAMEBLOCKMODE_04 db FRAMEBLOCK_05, BASECOORD_48, FRAMEBLOCKMODE_04
db FRAMEBLOCK_03, BASECOORD_48, FRAMEBLOCKMODE_03 db FRAMEBLOCK_03, BASECOORD_48, FRAMEBLOCKMODE_03
Subanimation4a: Subanim_2TradeBallAppear:
subanim SUBANIMTYPE_NORMAL, 1 subanim SUBANIMTYPE_NORMAL, 1
db FRAMEBLOCK_04, BASECOORD_84, FRAMEBLOCKMODE_03 db FRAMEBLOCK_04, BASECOORD_84, FRAMEBLOCKMODE_03
Subanimation4b: Subanim_2TradeBallPoof:
subanim SUBANIMTYPE_NORMAL, 3 subanim SUBANIMTYPE_NORMAL, 3
db FRAMEBLOCK_06, BASECOORD_72, FRAMEBLOCKMODE_00 db FRAMEBLOCK_06, BASECOORD_72, FRAMEBLOCKMODE_00
db FRAMEBLOCK_07, BASECOORD_72, FRAMEBLOCKMODE_00 db FRAMEBLOCK_07, BASECOORD_72, FRAMEBLOCKMODE_00
db FRAMEBLOCK_08, BASECOORD_72, FRAMEBLOCKMODE_00 db FRAMEBLOCK_08, BASECOORD_72, FRAMEBLOCKMODE_00
Subanimation4c: Subanim_0EggShaking:
subanim SUBANIMTYPE_COORDFLIP, 8 subanim SUBANIMTYPE_COORDFLIP, 8
db FRAMEBLOCK_6F, BASECOORD_30, FRAMEBLOCKMODE_00 db FRAMEBLOCK_6F, BASECOORD_30, FRAMEBLOCKMODE_00
db FRAMEBLOCK_6E, BASECOORD_30, FRAMEBLOCKMODE_00 db FRAMEBLOCK_6E, BASECOORD_30, FRAMEBLOCKMODE_00
@ -898,7 +898,7 @@ Subanimation4c:
db FRAMEBLOCK_70, BASECOORD_30, FRAMEBLOCKMODE_00 db FRAMEBLOCK_70, BASECOORD_30, FRAMEBLOCKMODE_00
db FRAMEBLOCK_6E, BASECOORD_30, FRAMEBLOCKMODE_00 db FRAMEBLOCK_6E, BASECOORD_30, FRAMEBLOCKMODE_00
Subanimation4d: Subanim_1TriangleToss:
subanim SUBANIMTYPE_HVFLIP, 6 subanim SUBANIMTYPE_HVFLIP, 6
db FRAMEBLOCK_32, BASECOORD_4B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_32, BASECOORD_4B, FRAMEBLOCKMODE_00
db FRAMEBLOCK_33, BASECOORD_4F, FRAMEBLOCKMODE_00 db FRAMEBLOCK_33, BASECOORD_4F, FRAMEBLOCKMODE_00
@ -907,7 +907,7 @@ Subanimation4d:
db FRAMEBLOCK_32, BASECOORD_19, FRAMEBLOCKMODE_00 db FRAMEBLOCK_32, BASECOORD_19, FRAMEBLOCKMODE_00
db FRAMEBLOCK_33, BASECOORD_0D, FRAMEBLOCKMODE_00 db FRAMEBLOCK_33, BASECOORD_0D, FRAMEBLOCKMODE_00
Subanimation51: Subanim_0Shell:
subanim SUBANIMTYPE_ENEMY, 6 subanim SUBANIMTYPE_ENEMY, 6
db FRAMEBLOCK_76, BASECOORD_1B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_76, BASECOORD_1B, FRAMEBLOCKMODE_00
db FRAMEBLOCK_34, BASECOORD_1B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_34, BASECOORD_1B, FRAMEBLOCKMODE_00
@ -916,7 +916,7 @@ Subanimation51:
db FRAMEBLOCK_76, BASECOORD_1B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_76, BASECOORD_1B, FRAMEBLOCKMODE_00
db FRAMEBLOCK_34, BASECOORD_1B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_34, BASECOORD_1B, FRAMEBLOCKMODE_00
Subanimation52: Subanim_0CoinBounce:
subanim SUBANIMTYPE_HFLIP, 7 subanim SUBANIMTYPE_HFLIP, 7
db FRAMEBLOCK_77, BASECOORD_25, FRAMEBLOCKMODE_00 db FRAMEBLOCK_77, BASECOORD_25, FRAMEBLOCKMODE_00
db FRAMEBLOCK_77, BASECOORD_9B, FRAMEBLOCKMODE_00 db FRAMEBLOCK_77, BASECOORD_9B, FRAMEBLOCKMODE_00
@ -926,7 +926,7 @@ Subanimation52:
db FRAMEBLOCK_77, BASECOORD_50, FRAMEBLOCKMODE_00 db FRAMEBLOCK_77, BASECOORD_50, FRAMEBLOCKMODE_00
db FRAMEBLOCK_77, BASECOORD_8C, FRAMEBLOCKMODE_00 db FRAMEBLOCK_77, BASECOORD_8C, FRAMEBLOCKMODE_00
Subanimation53: Subanim_0SafariRock:
subanim SUBANIMTYPE_NORMAL, 12 subanim SUBANIMTYPE_NORMAL, 12
db FRAMEBLOCK_78, BASECOORD_30, FRAMEBLOCKMODE_00 db FRAMEBLOCK_78, BASECOORD_30, FRAMEBLOCKMODE_00
db FRAMEBLOCK_78, BASECOORD_A2, FRAMEBLOCKMODE_00 db FRAMEBLOCK_78, BASECOORD_A2, FRAMEBLOCKMODE_00
@ -941,7 +941,7 @@ Subanimation53:
db FRAMEBLOCK_78, BASECOORD_34, FRAMEBLOCKMODE_00 db FRAMEBLOCK_78, BASECOORD_34, FRAMEBLOCKMODE_00
db FRAMEBLOCK_01, BASECOORD_9E, FRAMEBLOCKMODE_00 db FRAMEBLOCK_01, BASECOORD_9E, FRAMEBLOCKMODE_00
Subanimation54: Subanim_0SafariBait:
subanim SUBANIMTYPE_NORMAL, 11 subanim SUBANIMTYPE_NORMAL, 11
db FRAMEBLOCK_79, BASECOORD_30, FRAMEBLOCKMODE_00 db FRAMEBLOCK_79, BASECOORD_30, FRAMEBLOCKMODE_00
db FRAMEBLOCK_79, BASECOORD_A2, FRAMEBLOCKMODE_00 db FRAMEBLOCK_79, BASECOORD_A2, FRAMEBLOCKMODE_00

View File

@ -1,73 +1,71 @@
; Valid sprite IDs for each outdoor map.
MapSpriteSets: MapSpriteSets:
table_width 1, MapSpriteSets table_width 1, MapSpriteSets
db $01 ; PALLET_TOWN db SPRITESET_PALLET_VIRIDIAN ; PALLET_TOWN
db $01 ; VIRIDIAN_CITY db SPRITESET_PALLET_VIRIDIAN ; VIRIDIAN_CITY
db $02 ; PEWTER_CITY db SPRITESET_PEWTER_CERULEAN ; PEWTER_CITY
db $02 ; CERULEAN_CITY db SPRITESET_PEWTER_CERULEAN ; CERULEAN_CITY
db $03 ; LAVENDER_TOWN db SPRITESET_LAVENDER ; LAVENDER_TOWN
db $04 ; VERMILION_CITY db SPRITESET_VERMILION ; VERMILION_CITY
db $05 ; CELADON_CITY db SPRITESET_CELADON ; CELADON_CITY
db $0a ; FUCHSIA_CITY db SPRITESET_FUCHSIA ; FUCHSIA_CITY
db $01 ; CINNABAR_ISLAND db SPRITESET_PALLET_VIRIDIAN ; CINNABAR_ISLAND
db $06 ; INDIGO_PLATEAU db SPRITESET_INDIGO ; INDIGO_PLATEAU
db $07 ; SAFFRON_CITY db SPRITESET_SAFFRON ; SAFFRON_CITY
db $01 ; unused map ID db SPRITESET_PALLET_VIRIDIAN ; UNUSED_MAP_0B
db $01 ; ROUTE_1 db SPRITESET_PALLET_VIRIDIAN ; ROUTE_1
db $f1 ; ROUTE_2 db SPLITSET_ROUTE_2 ; ROUTE_2
db $02 ; ROUTE_3 db SPRITESET_PEWTER_CERULEAN ; ROUTE_3
db $02 ; ROUTE_4 db SPRITESET_PEWTER_CERULEAN ; ROUTE_4
db $f9 ; ROUTE_5 db SPLITSET_ROUTE_5 ; ROUTE_5
db $fa ; ROUTE_6 db SPLITSET_ROUTE_6 ; ROUTE_6
db $fb ; ROUTE_7 db SPLITSET_ROUTE_7 ; ROUTE_7
db $fc ; ROUTE_8 db SPLITSET_ROUTE_8 ; ROUTE_8
db $02 ; ROUTE_9 db SPRITESET_PEWTER_CERULEAN ; ROUTE_9
db $f2 ; ROUTE_10 db SPLITSET_ROUTE_10 ; ROUTE_10
db $f3 ; ROUTE_11 db SPLITSET_ROUTE_11 ; ROUTE_11
db $f4 ; ROUTE_12 db SPLITSET_ROUTE_12 ; ROUTE_12
db $08 ; ROUTE_13 db SPRITESET_SILENCE_BRIDGE ; ROUTE_13
db $08 ; ROUTE_14 db SPRITESET_SILENCE_BRIDGE ; ROUTE_14
db $f5 ; ROUTE_15 db SPLITSET_ROUTE_15 ; ROUTE_15
db $f6 ; ROUTE_16 db SPLITSET_ROUTE_16 ; ROUTE_16
db $09 ; ROUTE_17 db SPRITESET_CYCLING_ROAD ; ROUTE_17
db $f7 ; ROUTE_18 db SPLITSET_ROUTE_18 ; ROUTE_18
db $0a ; ROUTE_19 db SPRITESET_FUCHSIA ; ROUTE_19
db $f8 ; ROUTE_20 db SPLITSET_ROUTE_20 ; ROUTE_20
db $01 ; ROUTE_21 db SPRITESET_PALLET_VIRIDIAN ; ROUTE_21
db $01 ; ROUTE_22 db SPRITESET_PALLET_VIRIDIAN ; ROUTE_22
db $06 ; ROUTE_23 db SPRITESET_INDIGO ; ROUTE_23
db $02 ; ROUTE_24 db SPRITESET_PEWTER_CERULEAN ; ROUTE_24
db $02 ; ROUTE_25 db SPRITESET_PEWTER_CERULEAN ; ROUTE_25
assert_table_length FIRST_INDOOR_MAP assert_table_length FIRST_INDOOR_MAP
DEF EAST_WEST EQU 1
DEF NORTH_SOUTH EQU 2
; Format: ; Format:
; 00: determines whether the map is split EAST_WEST or NORTH_SOUTH ; #1: whether the map is split EAST_WEST or NORTH_SOUTH
; 01: coordinate of dividing line ; #2: coordinate of dividing line
; 02: sprite set ID if in the West or North side ; #3: sprite set ID if on the west or north side
; 03: sprite set ID if in the East or South side ; #4: sprite set ID if on the east or south side
SplitMapSpriteSets: SplitMapSpriteSets:
db NORTH_SOUTH, 37, $02, $01 ; $f1 table_width 4, SplitMapSpriteSets
db NORTH_SOUTH, 50, $02, $03 ; $f2 db NORTH_SOUTH, 37, SPRITESET_PEWTER_CERULEAN, SPRITESET_PALLET_VIRIDIAN ; SPLITSET_ROUTE_2
db EAST_WEST, 57, $04, $08 ; $f3 db NORTH_SOUTH, 50, SPRITESET_PEWTER_CERULEAN, SPRITESET_LAVENDER ; SPLITSET_ROUTE_10
db NORTH_SOUTH, 21, $03, $08 ; $f4 db EAST_WEST, 57, SPRITESET_VERMILION, SPRITESET_SILENCE_BRIDGE ; SPLITSET_ROUTE_11
db EAST_WEST, 8, $0A, $08 ; $f5 db NORTH_SOUTH, 21, SPRITESET_LAVENDER, SPRITESET_SILENCE_BRIDGE ; SPLITSET_ROUTE_12
db EAST_WEST, 24, $09, $05 ; $f6 db EAST_WEST, 8, SPRITESET_FUCHSIA, SPRITESET_SILENCE_BRIDGE ; SPLITSET_ROUTE_15
db EAST_WEST, 34, $09, $0A ; $f7 db EAST_WEST, 24, SPRITESET_CYCLING_ROAD, SPRITESET_CELADON ; SPLITSET_ROUTE_16
db EAST_WEST, 53, $01, $0A ; $f8 db EAST_WEST, 34, SPRITESET_CYCLING_ROAD, SPRITESET_FUCHSIA ; SPLITSET_ROUTE_18
db NORTH_SOUTH, 33, $02, $07 ; $f9 db EAST_WEST, 53, SPRITESET_PALLET_VIRIDIAN, SPRITESET_FUCHSIA ; SPLITSET_ROUTE_20
db NORTH_SOUTH, 2, $07, $04 ; $fa db NORTH_SOUTH, 33, SPRITESET_PEWTER_CERULEAN, SPRITESET_SAFFRON ; SPLITSET_ROUTE_5
db EAST_WEST, 17, $05, $07 ; $fb db NORTH_SOUTH, 2, SPRITESET_SAFFRON, SPRITESET_VERMILION ; SPLITSET_ROUTE_6
db EAST_WEST, 3, $07, $03 ; $fc db EAST_WEST, 17, SPRITESET_CELADON, SPRITESET_SAFFRON ; SPLITSET_ROUTE_7
db EAST_WEST, 3, SPRITESET_SAFFRON, SPRITESET_LAVENDER ; SPLITSET_ROUTE_8
assert_table_length NUM_SPLIT_SETS
SpriteSets: SpriteSets:
table_width SPRITE_SET_LENGTH, SpriteSets
; each sprite set has 9 walking sprites and 2 still sprites ; SPRITESET_PALLET_VIRIDIAN
DEF SPRITE_SET_LENGTH EQU 9 + 2
; sprite set $01
table_width 1
db SPRITE_PIKACHU db SPRITE_PIKACHU
db SPRITE_BLUE db SPRITE_BLUE
db SPRITE_YOUNGSTER db SPRITE_YOUNGSTER
@ -79,10 +77,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_SWIMMER db SPRITE_SWIMMER
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_GAMBLER_ASLEEP db SPRITE_GAMBLER_ASLEEP
assert_table_length SPRITE_SET_LENGTH
; sprite set $02 ; SPRITESET_PEWTER_CERULEAN
table_width 1
db SPRITE_PIKACHU db SPRITE_PIKACHU
db SPRITE_YOUNGSTER db SPRITE_YOUNGSTER
db SPRITE_ROCKET db SPRITE_ROCKET
@ -94,10 +90,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_COOLTRAINER_M db SPRITE_COOLTRAINER_M
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_UNUSED_GAMBLER_ASLEEP_2 db SPRITE_UNUSED_GAMBLER_ASLEEP_2
assert_table_length SPRITE_SET_LENGTH
; sprite set $03 ; SPRITESET_LAVENDER
table_width 1
db SPRITE_PIKACHU db SPRITE_PIKACHU
db SPRITE_LITTLE_GIRL db SPRITE_LITTLE_GIRL
db SPRITE_GIRL db SPRITE_GIRL
@ -109,10 +103,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_COOLTRAINER_M db SPRITE_COOLTRAINER_M
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_UNUSED_GAMBLER_ASLEEP_2 db SPRITE_UNUSED_GAMBLER_ASLEEP_2
assert_table_length SPRITE_SET_LENGTH
; sprite set $04 ; SPRITESET_VERMILION
table_width 1
db SPRITE_PIKACHU db SPRITE_PIKACHU
db SPRITE_OFFICER_JENNY db SPRITE_OFFICER_JENNY
db SPRITE_SUPER_NERD db SPRITE_SUPER_NERD
@ -124,10 +116,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_COOLTRAINER_M db SPRITE_COOLTRAINER_M
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_UNUSED_GAMBLER_ASLEEP_2 db SPRITE_UNUSED_GAMBLER_ASLEEP_2
assert_table_length SPRITE_SET_LENGTH
; sprite set $05 ; SPRITESET_CELADON
table_width 1
db SPRITE_PIKACHU db SPRITE_PIKACHU
db SPRITE_LITTLE_GIRL db SPRITE_LITTLE_GIRL
db SPRITE_LITTLE_BOY db SPRITE_LITTLE_BOY
@ -139,10 +129,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_ROCKET db SPRITE_ROCKET
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_SNORLAX db SPRITE_SNORLAX
assert_table_length SPRITE_SET_LENGTH
; sprite set $06 ; SPRITESET_INDIGO
table_width 1
db SPRITE_PIKACHU db SPRITE_PIKACHU
db SPRITE_GYM_GUIDE db SPRITE_GYM_GUIDE
db SPRITE_MONSTER db SPRITE_MONSTER
@ -154,10 +142,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_GAMBLER db SPRITE_GAMBLER
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_UNUSED_GAMBLER_ASLEEP_2 db SPRITE_UNUSED_GAMBLER_ASLEEP_2
assert_table_length SPRITE_SET_LENGTH
; sprite set $07 ; SPRITESET_SAFFRON
table_width 1
db SPRITE_PIKACHU db SPRITE_PIKACHU
db SPRITE_ROCKET db SPRITE_ROCKET
db SPRITE_SCIENTIST db SPRITE_SCIENTIST
@ -169,10 +155,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_COOLTRAINER_M db SPRITE_COOLTRAINER_M
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_UNUSED_GAMBLER_ASLEEP_2 db SPRITE_UNUSED_GAMBLER_ASLEEP_2
assert_table_length SPRITE_SET_LENGTH
; sprite set $08 ; SPRITESET_SILENCE_BRIDGE
table_width 1
db SPRITE_PIKACHU db SPRITE_PIKACHU
db SPRITE_BIKER db SPRITE_BIKER
db SPRITE_SUPER_NERD db SPRITE_SUPER_NERD
@ -184,10 +168,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_ROCKER db SPRITE_ROCKER
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_SNORLAX db SPRITE_SNORLAX
assert_table_length SPRITE_SET_LENGTH
; sprite set $09 ; SPRITESET_CYCLING_ROAD
table_width 1
db SPRITE_PIKACHU db SPRITE_PIKACHU
db SPRITE_BIKER db SPRITE_BIKER
db SPRITE_COOLTRAINER_M db SPRITE_COOLTRAINER_M
@ -199,10 +181,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_MIDDLE_AGED_MAN db SPRITE_MIDDLE_AGED_MAN
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_SNORLAX db SPRITE_SNORLAX
assert_table_length SPRITE_SET_LENGTH
; sprite set $0a ; SPRITESET_FUCHSIA
table_width 1
db SPRITE_PIKACHU db SPRITE_PIKACHU
db SPRITE_COOLTRAINER_M db SPRITE_COOLTRAINER_M
db SPRITE_CHANSEY db SPRITE_CHANSEY
@ -214,4 +194,5 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_YOUNGSTER db SPRITE_YOUNGSTER
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_FOSSIL db SPRITE_FOSSIL
assert_table_length SPRITE_SET_LENGTH
assert_table_length NUM_SPRITE_SETS

File diff suppressed because it is too large Load Diff

View File

@ -275,7 +275,7 @@ PlayAnimation:
ld a, [wAnimPalette] ld a, [wAnimPalette]
ldh [rOBP0], a ldh [rOBP0], a
call UpdateGBCPal_OBP0 call UpdateGBCPal_OBP0
call LoadAnimationTileset call LoadMoveAnimationTiles
call LoadSubanimation call LoadSubanimation
call PlaySubanimation call PlaySubanimation
pop af pop af
@ -372,11 +372,11 @@ GetSubanimationTransform2:
ret ret
; loads tile patterns for battle animations ; loads tile patterns for battle animations
LoadAnimationTileset: LoadMoveAnimationTiles:
ld a, [wWhichBattleAnimTileset] ld a, [wWhichBattleAnimTileset]
add a add a
add a add a
ld hl, AnimationTilesetPointers ld hl, MoveAnimationTilesPointers
ld e, a ld e, a
ld d, 0 ld d, 0
add hl, de add hl, de
@ -387,7 +387,7 @@ LoadAnimationTileset:
ld a, [hl] ld a, [hl]
ld d, a ; de = address of tileset ld d, a ; de = address of tileset
ld hl, vSprites tile $31 ld hl, vSprites tile $31
ld b, BANK(AnimationTileset1) ; ROM bank ld b, BANK(MoveAnimationTiles0) ; ROM bank
ld a, [wTempTilesetNumTiles] ld a, [wTempTilesetNumTiles]
ld c, a ; number of tiles ld c, a ; number of tiles
jp CopyVideoData ; load tileset jp CopyVideoData ; load tileset
@ -398,17 +398,18 @@ MACRO anim_tileset
db -1 ; padding db -1 ; padding
ENDM ENDM
AnimationTilesetPointers: MoveAnimationTilesPointers:
; number of tiles, gfx pointer ; number of tiles, gfx pointer
anim_tileset 79, AnimationTileset1 anim_tileset 79, MoveAnimationTiles0
anim_tileset 79, AnimationTileset2 anim_tileset 79, MoveAnimationTiles1
anim_tileset 64, AnimationTileset1 anim_tileset 64, MoveAnimationTiles2
AnimationTileset1: MoveAnimationTiles0:
INCBIN "gfx/battle/attack_anim_1.2bpp" MoveAnimationTiles2:
INCBIN "gfx/battle/move_anim_0.2bpp"
AnimationTileset2: MoveAnimationTiles1:
INCBIN "gfx/battle/attack_anim_2.2bpp" INCBIN "gfx/battle/move_anim_1.2bpp"
SlotMachineTiles2: SlotMachineTiles2:
INCBIN "gfx/slots/slots_2.2bpp" INCBIN "gfx/slots/slots_2.2bpp"
@ -1158,7 +1159,7 @@ AnimationWaterDropletsEverywhere:
; in Surf/Mist/Toxic. ; in Surf/Mist/Toxic.
xor a xor a
ld [wWhichBattleAnimTileset], a ld [wWhichBattleAnimTileset], a
call LoadAnimationTileset call LoadMoveAnimationTiles
ld d, 32 ld d, 32
ld a, -16 ld a, -16
ld [wBaseCoordX], a ld [wBaseCoordX], a
@ -1720,7 +1721,7 @@ _AnimationShootBallsUpward:
push bc push bc
xor a xor a
ld [wWhichBattleAnimTileset], a ld [wWhichBattleAnimTileset], a
call LoadAnimationTileset call LoadMoveAnimationTiles
pop bc pop bc
ld d, $7a ; ball tile ld d, $7a ; ball tile
ld hl, wShadowOAM ld hl, wShadowOAM
@ -2234,7 +2235,7 @@ InitMultipleObjectsOAM:
push bc push bc
push de push de
ld [wWhichBattleAnimTileset], a ld [wWhichBattleAnimTileset], a
call LoadAnimationTileset call LoadMoveAnimationTiles
pop de pop de
pop bc pop bc
xor a xor a

View File

@ -5,13 +5,13 @@ LoadShootingStarGraphics:
ldh [rOBP1], a ldh [rOBP1], a
call UpdateGBCPal_OBP0 call UpdateGBCPal_OBP0
call UpdateGBCPal_OBP1 call UpdateGBCPal_OBP1
ld de, AnimationTileset2 tile 3 ; star tile (top left quadrant) ld de, MoveAnimationTiles1 tile 3 ; star tile (top left quadrant)
ld hl, vChars1 tile $20 ld hl, vChars1 tile $20
lb bc, BANK(AnimationTileset2), 1 lb bc, BANK(MoveAnimationTiles1), 1
call CopyVideoData call CopyVideoData
ld de, AnimationTileset2 tile 19 ; star tile (bottom left quadrant) ld de, MoveAnimationTiles1 tile 19 ; star tile (bottom left quadrant)
ld hl, vChars1 tile $21 ld hl, vChars1 tile $21
lb bc, BANK(AnimationTileset2), 1 lb bc, BANK(MoveAnimationTiles1), 1
call CopyVideoData call CopyVideoData
ld de, FallingStar ld de, FallingStar
ld hl, vChars1 tile $22 ld hl, vChars1 tile $22

View File

@ -113,8 +113,8 @@ InitCutAnimOAM:
ret ret
LoadCutGrassAnimationTilePattern: LoadCutGrassAnimationTilePattern:
ld de, AnimationTileset2 tile 6 ; tile depicting a leaf ld de, MoveAnimationTiles1 tile 6 ; tile depicting a leaf
lb bc, BANK(AnimationTileset2), 1 lb bc, BANK(MoveAnimationTiles1), 1
jp CopyVideoData jp CopyVideoData
WriteCutOrBoulderDustAnimationOAMBlock: WriteCutOrBoulderDustAnimationOAMBlock:

View File

@ -11,7 +11,7 @@
_InitMapSprites:: _InitMapSprites::
call InitOutsideMapSprites call InitOutsideMapSprites
ret c ; return if the map is an outside map (already handled by above call) ret c ; return if the map is an outside map (already handled by above call)
; if the map is an inside map (i.e. mapID >= $25) ; if the map is an inside map (i.e. mapID >= FIRST_INDOOR_MAP)
call LoadSpriteSetFromMapHeader call LoadSpriteSetFromMapHeader
call LoadMapSpriteTilePatterns call LoadMapSpriteTilePatterns
call Func_14150 call Func_14150
@ -38,11 +38,11 @@ InitOutsideMapSprites:
dec a dec a
ld c, a ld c, a
ld b, 0 ld b, 0
ld a, (wSpriteSetID - wSpriteSet) ld a, wSpriteSetID - wSpriteSet
ld hl, SpriteSets ld hl, SpriteSets
call AddNTimes ; get sprite set offset call AddNTimes ; get sprite set offset
ld de, wSpriteSet ld de, wSpriteSet
ld bc, (wSpriteSetID - wSpriteSet) ld bc, wSpriteSetID - wSpriteSet
call CopyData ; copy it to wSpriteSet call CopyData ; copy it to wSpriteSet
call LoadMapSpriteTilePatterns call LoadMapSpriteTilePatterns
.skipLoadingSpriteSet .skipLoadingSpriteSet
@ -186,7 +186,7 @@ LoadWalkingTilePattern:
ld d, h ld d, h
ld e, l ld e, l
call GetSpriteVRAMAddress call GetSpriteVRAMAddress
set 3, h ; add $800 to hl set 3, h ; add $80 tiles to hl
call CopyVideoDataAlternate call CopyVideoDataAlternate
ret ret
@ -205,19 +205,17 @@ GetSpriteVRAMAddress:
ret ret
SpriteVRAMAddresses: SpriteVRAMAddresses:
; Equivalent to multiplying $C0 (number of bytes in 12 tiles) times the VRAM dw vChars0 + (1 * 12) tiles
; slot and adding the result to $8000 (the VRAM base address). dw vChars0 + (2 * 12) tiles
dw vChars0 + $0c0 dw vChars0 + (3 * 12) tiles
dw vChars0 + $180 dw vChars0 + (4 * 12) tiles
dw vChars0 + $240 dw vChars0 + (5 * 12) tiles
dw vChars0 + $300 dw vChars0 + (6 * 12) tiles
dw vChars0 + $3c0 dw vChars0 + (7 * 12) tiles
dw vChars0 + $480 dw vChars0 + (8 * 12) tiles
dw vChars0 + $540 dw vChars0 + (9 * 12) tiles
dw vChars0 + $600 dw vChars0 + (10 * 12) tiles ; 4-tile sprites
dw vChars0 + $6c0 dw vChars0 + (10 * 12 + 4) tiles ; 4-tile sprites
dw vChars0 + $780 ; 4-tile sprites
dw vChars0 + $7c0 ; 4-tile sprites
ReadSpriteSheetData: ReadSpriteSheetData:
ldh a, [hVRAMSlot] ldh a, [hVRAMSlot]
@ -263,7 +261,7 @@ Func_14150:
jr z, .spriteUnused jr z, .spriteUnused
call Func_14179 call Func_14179
push hl push hl
ld de, (wSpritePlayerStateData2ImageBaseOffset) - (wSpriteStateData1) ; $10e ld de, wSpritePlayerStateData2ImageBaseOffset - wSpriteStateData1
add hl, de ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] add hl, de ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET]
ld [hl], a ; write offset ld [hl], a ; write offset
pop hl pop hl
@ -304,11 +302,11 @@ GetSplitMapSpriteSetID:
ld hl, MapSpriteSets ld hl, MapSpriteSets
add hl, de add hl, de
ld a, [hl] ; a = spriteSetID ld a, [hl] ; a = spriteSetID
cp $f0 ; does the map have 2 sprite sets? cp FIRST_SPLIT_SET - 1 ; does the map have 2 sprite sets?
ret c ret c
; Chooses the correct sprite set ID depending on the player's position within ; Chooses the correct sprite set ID depending on the player's position within
; the map for maps with two sprite sets. ; the map for maps with two sprite sets.
cp $f8 cp SPLITSET_ROUTE_20
jr z, .route20 jr z, .route20
ld hl, SplitMapSpriteSets ld hl, SplitMapSpriteSets
and $0f and $0f
@ -320,8 +318,8 @@ GetSplitMapSpriteSetID:
jr nc, .noCarry jr nc, .noCarry
inc h inc h
.noCarry .noCarry
ld a, [hli] ; determines whether the map is split East/West or North/South ld a, [hli] ; whether the map is split EAST_WEST or NORTH_SOUTH
cp $01 cp EAST_WEST
ld a, [hli] ; position of dividing line ld a, [hli] ; position of dividing line
ld b, a ld b, a
jr z, .eastWestDivide jr z, .eastWestDivide
@ -333,35 +331,39 @@ GetSplitMapSpriteSetID:
.compareCoord .compareCoord
cp b cp b
jr c, .loadSpriteSetID jr c, .loadSpriteSetID
; if in the East side or South side ; if in the east side or south side
inc hl inc hl
.loadSpriteSetID .loadSpriteSetID
ld a, [hl] ld a, [hl]
ret ret
; Uses sprite set $01 for West side and $0A for East side. ; Uses sprite set SPRITESET_PALLET_VIRIDIAN for west side and SPRITESET_FUCHSIA for east side.
; Route 20 is a special case because the two map sections have a more complex ; Route 20 is a special case because the two map sections have a more complex
; shape instead of the map simply being split horizontally or vertically. ; shape instead of the map simply being split horizontally or vertically.
.route20 .route20
ld hl, wXCoord ld hl, wXCoord
; Use SPRITESET_PALLET_VIRIDIAN if X < 43
ld a, [hl] ld a, [hl]
cp $2b cp 43
ld a, $01 ld a, SPRITESET_PALLET_VIRIDIAN
ret c ret c
; Use SPRITESET_FUCHSIA if X >= 62.
ld a, [hl] ld a, [hl]
cp $3e cp 62
ld a, $0a ld a, SPRITESET_FUCHSIA
ret nc ret nc
; If 55 <= X < 62, split Y at 8; else 43 <= X < 55, so split Y at 13
ld a, [hl] ld a, [hl]
cp $37 cp 55
ld b, $08 ld b, 8
jr nc, .next jr nc, .next
ld b, $0d ld b, 13
.next .next
; Use SPRITESET_FUCHSIA if Y < split; else use SPRITESET_PALLET_VIRIDIAN
ld a, [wYCoord] ld a, [wYCoord]
cp b cp b
ld a, $0a ld a, SPRITESET_FUCHSIA
ret c ret c
ld a, $01 ld a, SPRITESET_PALLET_VIRIDIAN
ret ret
INCLUDE "data/maps/sprite_sets.asm" INCLUDE "data/maps/sprite_sets.asm"

View File

Before

Width:  |  Height:  |  Size: 977 B

After

Width:  |  Height:  |  Size: 977 B

View File

Before

Width:  |  Height:  |  Size: 936 B

After

Width:  |  Height:  |  Size: 936 B

View File

@ -1,6 +1,3 @@
INCLUDE "constants.asm"
SECTION "NULL", ROM0 SECTION "NULL", ROM0
NULL:: NULL::

View File

@ -1,6 +1,20 @@
INCLUDE "charmap.asm" INCLUDE "charmap.asm"
INCLUDE "macros.asm" INCLUDE "macros/asserts.asm"
INCLUDE "macros/const.asm"
INCLUDE "macros/predef.asm"
INCLUDE "macros/farcall.asm"
INCLUDE "macros/data.asm"
INCLUDE "macros/code.asm"
INCLUDE "macros/gfx.asm"
INCLUDE "macros/coords.asm"
INCLUDE "macros/vc.asm"
INCLUDE "macros/scripts/audio.asm"
INCLUDE "macros/scripts/maps.asm"
INCLUDE "macros/scripts/events.asm"
INCLUDE "macros/scripts/text.asm"
INCLUDE "macros/scripts/gfx_anims.asm"
INCLUDE "constants/hardware_constants.asm" INCLUDE "constants/hardware_constants.asm"
INCLUDE "constants/oam_constants.asm" INCLUDE "constants/oam_constants.asm"
@ -28,6 +42,7 @@ INCLUDE "constants/map_constants.asm"
INCLUDE "constants/map_data_constants.asm" INCLUDE "constants/map_data_constants.asm"
INCLUDE "constants/map_object_constants.asm" INCLUDE "constants/map_object_constants.asm"
INCLUDE "constants/hide_show_constants.asm" INCLUDE "constants/hide_show_constants.asm"
INCLUDE "constants/sprite_set_constants.asm"
INCLUDE "constants/credits_constants.asm" INCLUDE "constants/credits_constants.asm"
INCLUDE "constants/audio_constants.asm" INCLUDE "constants/audio_constants.asm"
INCLUDE "constants/music_constants.asm" INCLUDE "constants/music_constants.asm"

View File

@ -1,15 +0,0 @@
INCLUDE "macros/asserts.asm"
INCLUDE "macros/const.asm"
INCLUDE "macros/predef.asm"
INCLUDE "macros/farcall.asm"
INCLUDE "macros/data.asm"
INCLUDE "macros/code.asm"
INCLUDE "macros/gfx.asm"
INCLUDE "macros/coords.asm"
INCLUDE "macros/vc.asm"
INCLUDE "macros/scripts/audio.asm"
INCLUDE "macros/scripts/maps.asm"
INCLUDE "macros/scripts/events.asm"
INCLUDE "macros/scripts/text.asm"
INCLUDE "macros/scripts/gfx_anims.asm"

View File

@ -71,10 +71,8 @@ MACRO dab ; dwb address, bank
ENDM ENDM
MACRO sine_table MACRO sine_table
; \1 samples of sin(x) from x=0 to x<32768 (pi radians) ; \1 samples of sin(x) from x=0 to x<0.5 turns (pi radians)
DEF x = 0 for x, \1
REPT \1 dw sin(x * 0.5 / (\1))
dw (sin(x) + (sin(x) & $ff)) >> 8 ; round up endr
DEF x += DIV(32768, \1) ; a circle has 65536 "degrees"
ENDR
ENDM ENDM

View File

@ -1,6 +1,3 @@
INCLUDE "constants.asm"
SECTION "bank1", ROMX SECTION "bank1", ROMX
INCLUDE "data/sprites/facings.asm" INCLUDE "data/sprites/facings.asm"

View File

@ -1,6 +1,3 @@
INCLUDE "constants.asm"
SECTION "Maps 1", ROMX SECTION "Maps 1", ROMX
INCLUDE "data/maps/headers/CeladonCity.asm" INCLUDE "data/maps/headers/CeladonCity.asm"

View File

@ -1,5 +1,3 @@
INCLUDE "constants.asm"
INCLUDE "macros/ram.asm" INCLUDE "macros/ram.asm"

View File

@ -103,7 +103,7 @@ wSpriteStateData1::
; - E ; - E
; - F ; - F
wSpritePlayerStateData1:: spritestatedata1 wSpritePlayerStateData1 ; player is struct 0 wSpritePlayerStateData1:: spritestatedata1 wSpritePlayerStateData1 ; player is struct 0
; wSprite02StateData1 - wSprite15StateData1 ; wSprite01StateData1 - wSprite14StateData1
FOR n, 1, NUM_SPRITESTATEDATA_STRUCTS - 1 FOR n, 1, NUM_SPRITESTATEDATA_STRUCTS - 1
wSprite{02d:n}StateData1:: spritestatedata1 wSprite{02d:n}StateData1 wSprite{02d:n}StateData1:: spritestatedata1 wSprite{02d:n}StateData1
ENDR ENDR
@ -130,7 +130,7 @@ wSpriteStateData2::
; - E: sprite image base offset (in video ram, player always has value 1, used to compute sprite image index) ; - E: sprite image base offset (in video ram, player always has value 1, used to compute sprite image index)
; - F ; - F
wSpritePlayerStateData2:: spritestatedata2 wSpritePlayerStateData2 ; player is struct 0 wSpritePlayerStateData2:: spritestatedata2 wSpritePlayerStateData2 ; player is struct 0
; wSprite02StateData2 - wSprite15StateData2 ; wSprite01StateData2 - wSprite14StateData2
FOR n, 1, NUM_SPRITESTATEDATA_STRUCTS - 1 FOR n, 1, NUM_SPRITESTATEDATA_STRUCTS - 1
wSprite{02d:n}StateData2:: spritestatedata2 wSprite{02d:n}StateData2 wSprite{02d:n}StateData2:: spritestatedata2 wSprite{02d:n}StateData2
ENDR ENDR

View File

@ -1,18 +1,16 @@
MAJOR EQU 0 MAJOR EQU 0
MINOR EQU 5 MINOR EQU 6
PATCH EQU 2 PATCH EQU 0
MACRO wrong_rgbds WRONG_RGBDS EQUS "fail \"pokeyellow requires rgbds v0.6.0 or newer.\""
fail "pokeyellow requires rgbds v0.5.2 or newer."
ENDM
IF !DEF(__RGBDS_MAJOR__) || !DEF(__RGBDS_MINOR__) || !DEF(__RGBDS_PATCH__) IF !DEF(__RGBDS_MAJOR__) || !DEF(__RGBDS_MINOR__) || !DEF(__RGBDS_PATCH__)
wrong_rgbds WRONG_RGBDS
ELSE ELSE
IF (__RGBDS_MAJOR__ < MAJOR) || \ IF (__RGBDS_MAJOR__ < MAJOR) || \
(__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ < MINOR) || \ (__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ < MINOR) || \
(__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ == MINOR && __RGBDS_PATCH__ < PATCH) || \ (__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ == MINOR && __RGBDS_PATCH__ < PATCH) || \
(__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ == MINOR && __RGBDS_PATCH__ == PATCH && DEF(__RGBDS_RC__)) (__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ == MINOR && __RGBDS_PATCH__ == PATCH && DEF(__RGBDS_RC__))
wrong_rgbds WRONG_RGBDS
ENDC ENDC
ENDC ENDC

View File

@ -1,6 +1,3 @@
INCLUDE "constants.asm"
SECTION "Text 1", ROMX SECTION "Text 1", ROMX
INCLUDE "data/text/text_1.asm" INCLUDE "data/text/text_1.asm"

View File

@ -39,7 +39,7 @@ function register_bank(amount) {
} }
} }
rom_bank && toupper($0) ~ /^[ \t]*EMPTY/ { rom_bank && toupper($0) ~ /^[ \t]*EMPTY$/ {
# Empty bank # Empty bank
register_bank(16384) register_bank(16384)
} }

View File

@ -1,69 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Usage: python3 free_space.py [BANK=none] [pokeyellow.map]
Calculate the free space in the ROM or its individual banks.
The BANK argument allows printing free space in one, all, or none of the ROM's banks.
Valid arguments are numbers (in decimal "42" or hexadecimal "0x2A"), "all" or "none".
If not specified, defaults to "none".
"""
import sys
from mapreader import MapReader
def main():
print_bank = 'none'
filename = 'pokeyellow.map'
for arg in sys.argv[1:]:
if arg.startswith('BANK='):
print_bank = arg.split('=', 1)[-1]
else:
filename = arg
if print_bank not in {'all', 'none'}:
try:
print_bank = (int(print_bank[2:], 16)
if print_bank.startswith('0x') or print_bank.startswith('0X')
else int(print_bank))
except ValueError:
error = f'Error: invalid BANK: {print_bank}'
if print_bank.isalnum():
error += f' (did you mean: 0x{print_bank}?)'
print(error, file=sys.stderr)
sys.exit(1)
num_banks = 0x80
bank_size = 0x4000 # bytes
total_size = num_banks * bank_size
reader = MapReader()
with open(filename, 'r', encoding='utf-8') as file:
reader.read_map_data(file.readlines())
free_space = 0
per_bank = []
default_bank_data = {'sections': [], 'used': 0, 'slack': bank_size}
for bank in range(num_banks):
bank_data = reader.bank_data['ROM0 bank' if bank == 0 else 'ROMX bank']
data = bank_data.get(bank, default_bank_data)
used, slack = data['used'], data['slack']
per_bank.append((used, slack))
free_space += slack
free_percent = 100 * free_space / total_size
print(f'Free space: {free_space}/{total_size} ({free_percent:.2f}%)')
if print_bank != 'none':
print()
print('bank, used, free')
for bank in range(num_banks):
used, slack = per_bank[bank]
if print_bank in {'all', bank}:
print(f'${bank:02X}, {used}, {slack}')
if __name__ == '__main__':
main()

View File

@ -1,173 +0,0 @@
# -*- coding: utf-8 -*-
# A library for parsing the pokeyellow.map file output by rgbds.
import re
class MapReader:
# {'ROM Bank': { 0: { 'sections': [ { 'beg': 1234,
# 'end': 5678,
# 'name': 'Section001',
# 'symbols': [ { 'symbol': 'Function1234',
# 'address: 1234,
# },
# ]
# },
# ],
# 'used': 1234,
# 'slack': 4567,
# },
# },
# 'OAM': { 'sections': [ { 'beg': 1234,
# 'end': 5678,
# 'name': 'Section002',
# 'symbols': [ { 'symbol': 'Data1234',
# 'address: 1234,
# },
# ]
# },
# ],
# 'used': 1234,
# 'slack': 4567,
# },
# }
#
bank_data = {}
bank_types = {
'HRAM' : { 'size': 0x80, 'banked': False, },
'OAM' : { 'size': 0xA0, 'banked': False, },
'ROM0 bank': { 'size': 0x4000, 'banked': True, },
'ROMX bank': { 'size': 0x4000, 'banked': True, },
'SRAM bank': { 'size': 0x2000, 'banked': True, },
'VRAM bank': { 'size': 0x1000, 'banked': True, },
'WRAM bank': { 'size': 0x2000, 'banked': True, },
}
# FSM states
INIT, BANK, SECTION = range(3)
# $506D-$519A ($012E bytes) ["Type Matchups"]
section_header_regex = re.compile('\$([0-9A-Fa-f]{4})-\$([0-9A-Fa-f]{4}) \(.*\) \["(.*)"\]')
# $506D = TypeMatchups
section_data_regex = re.compile('\$([0-9A-Fa-f]{4}) = (.*)')
# $3ED2 bytes
slack_regex = re.compile('\$([0-9A-Fa-f]{4}) bytes?')
def __init__(self, *args, **kwargs):
self.__dict__.update(kwargs)
def _parse_init(self, line):
line = line.split(':', 1)[0]
parts = line.split(' #', 1)
if (parts[0] in self.bank_types):
self._cur_bank_name = parts[0]
self._cur_bank_type = self.bank_types[self._cur_bank_name]
if (self._cur_bank_type['banked'] and len(parts) > 1):
parts[1] = parts[1].split(':', 1)[0]
parts[1] = parts[1].split(' ', 1)[0]
self._cur_bank = int(parts[1], 10)
if self._cur_bank_name not in self.bank_data:
self.bank_data[self._cur_bank_name] = {}
if self._cur_bank_type['banked']:
if self._cur_bank not in self.bank_data[self._cur_bank_name]:
self.bank_data[self._cur_bank_name][self._cur_bank] = {}
self._cur_data = self.bank_data[self._cur_bank_name][self._cur_bank]
else:
self._cur_data = self.bank_data[self._cur_bank_name]
if ({} == self._cur_data):
self._cur_data['sections'] = []
self._cur_data['used'] = 0
self._cur_data['slack'] = self._cur_bank_type['size']
return True
return False
def _parse_section_header(self, header):
section_data = self.section_header_regex.match(header)
if section_data is not None:
beg = int(section_data.group(1), 16)
end = int(section_data.group(2), 16)
name = section_data.group(3)
self._cur_section = {'beg': beg, 'end': end, 'name': name, 'symbols': []}
self._cur_data['sections'].append(self._cur_section)
return True
return False
def _parse_slack(self, data):
slack_data = self.slack_regex.match(data)
slack_bytes = int(slack_data.group(1), 16)
self._cur_data['slack'] = slack_bytes
used_bytes = 0
for s in self._cur_data['sections']:
used_bytes += s['end'] - s['beg'] + 1
self._cur_data['used'] = used_bytes
def read_map_data(self, map):
if type(map) is str:
map = map.split('\n')
self._state = MapReader.INIT
self._cur_bank_name = ''
self._cur_bank_type = {}
self._cur_bank = 0
self._cur_data = {}
for line in map:
line = line.rstrip()
if (MapReader.INIT == self._state):
if (self._parse_init(line)):
self._state = MapReader.BANK
elif (MapReader.BANK == self._state or MapReader.SECTION == self._state):
if ('' == line):
self._state = MapReader.INIT
else:
line = line.lstrip()
parts = line.split(': ', 1)
if (MapReader.SECTION == self._state):
section_data = self.section_data_regex.match(parts[0])
if section_data is not None:
address = int(section_data.group(1), 16)
name = section_data.group(2)
self._cur_section['symbols'].append({'name': name, 'address': address})
continue
if ('SECTION' == parts[0]):
if (self._parse_section_header(parts[1])):
self._state = MapReader.SECTION
elif ('SLACK' == parts[0]):
self._parse_slack(parts[1])
self._state = MapReader.INIT
elif ('EMPTY' == parts[0]):
self._cur_data = {'sections': [], 'used': 0, 'slack': self._cur_bank_type['size']}
self._state = MapReader.INIT
else:
pass
for k, v in self.bank_data.items():
if (self.bank_types[k]['banked']):
for _, vv in v.items():
vv['sections'].sort(key=lambda x: x['beg'])
for vvv in vv['sections']:
vvv['symbols'].sort(key=lambda x: x['address'])
else:
v['sections'].sort(key=lambda x: x['beg'])
for vv in v['sections']:
vv['symbols'].sort(key=lambda x: x['address'])

View File

@ -1,64 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Usage: python used_space.py [pokeyellow.map] [used_space.png]
Generate a PNG visualizing the space used by each bank in the ROM.
"""
import sys
from colorsys import hls_to_rgb
import png
from mapreader import MapReader
def main():
mapfile = sys.argv[1] if len(sys.argv) >= 2 else 'pokeyellow.map'
outfile = sys.argv[2] if len(sys.argv) >= 3 else 'used_space.png'
num_banks = 0x80
bank_mask = 0x3FFF
bank_size = 0x4000 # bytes
bpp = 8 # bytes per pixel
height = 256 # pixels
assert bank_size % bpp == 0 and (bank_size // bpp) % height == 0
pixels_per_bank = bank_size // bpp # 2048 pixels
bank_width = pixels_per_bank // height # 8 pixels
width = bank_width * num_banks # 1024 pixels
reader = MapReader()
with open(mapfile, 'r', encoding='utf-8') as file:
reader.read_map_data(file.readlines())
hit_data = []
default_bank_data = {'sections': [], 'used': 0, 'slack': bank_size}
for bank in range(num_banks):
hits = [0] * pixels_per_bank
bank_data = reader.bank_data['ROM0 bank' if bank == 0 else 'ROMX bank']
data = bank_data.get(bank, default_bank_data)
for s in data['sections']:
beg = s['beg'] & bank_mask
end = s['end'] & bank_mask
for i in range(beg, end + 1):
hits[i // bpp] += 1
hit_data.append(hits)
pixels = [[(0xFF, 0xFF, 0xFF)] * width for _ in range(height)]
for bank, hits in enumerate(hit_data):
hue = 0 if bank == 0 else 210 if bank % 2 else 270
for i, hit in enumerate(hits):
x, y = i % bank_width + bank * bank_width, i // bank_width
hls = (hue / 360, 1 - (85 * hit / bpp) / 100, 1)
rgb = tuple(int(c * 0xFF) for c in hls_to_rgb(*hls))
pixels[y][x] = rgb
png_data = [tuple(c for pixel in row for c in pixel) for row in pixels]
with open(outfile, 'wb') as file:
writer = png.Writer(width, height, greyscale=False, bitdepth=8, compression=9)
writer.write(file, png_data)
if __name__ == '__main__':
main()

View File

@ -1,6 +1,4 @@
INCLUDE "constants.asm" ; These are all the asm constants needed to make the yellow_vc patch.
; These are all the asm constants needed to make the blue_vc patch.
MACRO vc_const MACRO vc_const
DEF x = \1 DEF x = \1