From aae999f72bd81a3156c7e00da4ebf499f52da5a6 Mon Sep 17 00:00:00 2001 From: Rangi Date: Wed, 4 Nov 2020 15:16:20 -0500 Subject: Start reorganizing pokeyellow --- .gitattributes | 2 +- .gitignore | 6 +- INSTALL.md | 7 +- Makefile | 23 +- audio.asm | 14 +- audio/alternate_tempo.asm | 7 +- audio/engine_1.asm | 4 +- audio/engine_2.asm | 2 +- audio/engine_3.asm | 2 +- audio/engine_4.asm | 2 +- audio/music/dungeon1.asm | 2 - audio/pikachu_cries.asm | 30 +- audio/wave_instruments.asm | 1 - constants.asm | 1 + constants/gfx_constants.asm | 15 +- constants/hide_show_constants.asm | 239 +- constants/map_constants.asm | 2 +- constants/misc_constants.asm | 23 - constants/oam_constants.asm | 15 - constants/pikachu_emotion_constants.asm | 120 +- constants/sprite_anim_constants.asm | 17 + constants/sprite_constants.asm | 6 +- constants/tileset_constants.asm | 2 +- data/animated_objects_3e_1.asm | 383 --- data/animated_objects_3e_2.asm | 236 -- data/bg_map_attributes.asm | 506 ---- data/cgb/bg_map_attributes.asm | 506 ++++ data/credits/credits_mons.asm | 4 +- data/maps/bit_5_maps.asm | 30 + data/maps/headers/BeachHouse.asm | 8 - data/maps/headers/SummerBeachHouse.asm | 3 + data/maps/hide_show_data.asm | 7 +- data/maps/map_header_banks.asm | 2 +- data/maps/map_header_pointers.asm | 2 +- data/maps/objects/BeachHouse.asm | 18 - data/maps/objects/Route19.asm | 2 +- data/maps/objects/Route2.asm | 3 +- data/maps/objects/SummerBeachHouse.asm | 18 + data/maps/songs.asm | 2 +- data/maps/town_map_entries.asm | 2 +- data/moves/grammar.asm | 4 +- data/pikachu/pikachu_emotions.asm | 266 ++ data/pikachu/pikachu_pic_animation.asm | 402 +++ data/pikachu/pikachu_pic_objects.asm | 308 +++ data/pikachu/pikachu_pic_tilemaps.asm | 254 ++ data/pikachu_emotions.asm | 266 -- data/pikachu_pic_animation.asm | 399 --- data/pikachu_pic_objects.asm | 300 -- data/pikachu_pic_tilemaps.asm | 253 -- data/sprite_anims/intro_frames.asm | 70 + data/sprite_anims/intro_oam.asm | 165 ++ data/sprite_anims/surfing_pikachu_frames.asm | 200 ++ data/sprite_anims/surfing_pikachu_oam.asm | 182 ++ data/sprites/facings.asm | 141 +- data/sprites/sprites.asm | 6 +- data/trainers/parties.asm | 12 +- data/trainers/special_moves.asm | 8 +- data/wild/super_rod.asm | 2 +- docs/bugs_and_glitches.md | 22 +- engine/animated_objects_3e.asm | 394 --- engine/bank30.bin | Bin 16384 -> 0 bytes engine/bank3c.asm | 189 -- engine/bank3d.asm | 491 ---- engine/bank3e.asm | 5 - engine/bank3f.asm | 23 - engine/battle/animations.asm | 6 +- engine/battle/bank3d_battle.asm | 292 -- engine/battle/init_battle.asm | 282 ++ engine/battle/pikachu_entrance_anim.asm | 47 + engine/bg_map_attributes.asm | 219 -- engine/diploma_3a.asm | 168 -- engine/events/diploma2.asm | 171 ++ .../events/hidden_objects/vermilion_gym_trash2.asm | 108 + engine/events/pikachu_happiness.asm | 118 + engine/events/pokecenter_chansey.asm | 11 + engine/events/try_pikachu_movement.asm | 27 + engine/gfx/animated_objects.asm | 394 +++ engine/gfx/bg_map_attributes.asm | 219 ++ engine/gfx/palettes.asm | 34 +- engine/gfx/sprite_oam.asm | 2 +- engine/items/item_effects.asm | 4 +- engine/items/super_rod.asm | 41 + engine/menus/draw_badges.asm | 3 +- engine/menus/start_sub_menus.asm | 5 +- engine/menus/unused_input.asm | 129 + engine/minigame/surfing_pikachu.asm | 2863 ++++++++++++++++++++ engine/movie/intro_yellow.asm | 1085 ++++++++ engine/movie/title.asm | 2 +- engine/movie/title2.asm | 122 - engine/movie/title_rb.asm | 122 + engine/movie/title_yellow.asm | 109 + engine/overworld/healing_machine.asm | 2 +- engine/overworld/missable_objects.asm | 8 +- engine/overworld/specific_script_flags.asm | 25 + engine/overworld/sprite_collisions.asm | 2 +- .../overworld/unused_load_missable_object_data.asm | 40 + engine/pikachu/pikachu_emotions.asm | 422 +++ engine/pikachu/pikachu_follow.asm | 1578 +++++++++++ engine/pikachu/pikachu_movement.asm | 1048 +++++++ engine/pikachu/pikachu_pcm.asm | 154 ++ engine/pikachu/pikachu_pic_animation.asm | 855 ++++++ engine/pikachu/pikachu_status.asm | 258 ++ engine/pikachu/respawn_overworld_pikachu.asm | 6 + engine/pikachu_emotions.asm | 421 --- engine/pikachu_follow.asm | 1578 ----------- engine/pikachu_movement.asm | 1048 ------- engine/pikachu_pcm.asm | 154 -- engine/pikachu_pic_animation.asm | 851 ------ engine/pikachu_status.asm | 258 -- engine/printer.asm | 999 ------- engine/printer/printer.asm | 986 +++++++ engine/printer/printer2.asm | 973 +++++++ engine/printer/serial.asm | 15 +- engine/surfing_minigame.asm | 2862 ------------------- engine/unknown_ea3ea.asm | 973 ------- engine/vermilion_gym_trash_cans.asm | 108 - engine/yellow_intro.asm | 1081 -------- garbage/bank30.bin | Bin 0 -> 16384 bytes gfx/9_tile.png | Bin 86 -> 0 bytes gfx/blocksets/beach_house.bst | Bin 0 -> 320 bytes gfx/blocksets/beachhouse.bst | Bin 320 -> 0 bytes gfx/font.asm | 2 +- gfx/intro/clouds.png | Bin 0 -> 310 bytes gfx/intro/unknown_f9b6e.map | Bin 0 -> 120 bytes gfx/intro/unknown_f9be6.map | 1 + gfx/intro/unknown_f9bf2.map | 1 + gfx/intro/yellow_intro_1.png | Bin 0 -> 826 bytes gfx/intro/yellow_intro_2.png | Bin 0 -> 1977 bytes gfx/overworld/pikachu_ball.png | Bin 0 -> 92 bytes gfx/pics.asm | 7 + gfx/pikachu.asm | 128 + gfx/printer/01.png | Bin 0 -> 92 bytes gfx/printer/hp.png | Bin 0 -> 82 bytes gfx/printer/lv.png | Bin 0 -> 78 bytes gfx/sprites.asm | 15 + gfx/stats_screen_hp.png | Bin 82 -> 0 bytes gfx/stats_screen_lv.png | Bin 78 -> 0 bytes gfx/surfing_pikachu.asm | 3 + gfx/surfing_pikachu/surfing_pikachu_1a.png | Bin 0 -> 638 bytes gfx/surfing_pikachu/surfing_pikachu_1b.png | Bin 0 -> 2002 bytes gfx/surfing_pikachu/surfing_pikachu_1c.png | Bin 0 -> 1318 bytes gfx/surfing_pikachu/surfing_pikachu_2.png | Bin 0 -> 816 bytes gfx/surfing_pikachu/surfing_pikachu_3.png | Bin 0 -> 2783 bytes gfx/surfing_pikachu/unknown_f8946.map | 1 + gfx/surfing_pikachu/unknown_f90bc.map | Bin 0 -> 240 bytes gfx/surfing_pikachu/unknown_f91ac.map | 1 + gfx/surfing_pikachu/unknown_f91bb.map | 2 + gfx/surfing_pikachu/unknown_f91c8.map | 1 + gfx/surfing_pikachu_1a.png | Bin 638 -> 0 bytes gfx/surfing_pikachu_1b.png | Bin 2002 -> 0 bytes gfx/surfing_pikachu_1c.png | Bin 1318 -> 0 bytes gfx/surfing_pikachu_2.png | Bin 816 -> 0 bytes gfx/surfing_pikachu_3.png | Bin 2783 -> 0 bytes gfx/tilesets.asm | 7 + gfx/tilesets/beach_house.png | Bin 0 -> 566 bytes gfx/tilesets/beachhouse.png | Bin 566 -> 0 bytes gfx/title/nine.png | Bin 0 -> 86 bytes gfx/title/pika_bubble.tilemap | 1 + gfx/title/pikachu.tilemap | Bin 0 -> 108 bytes gfx/title/pikachu_bg.png | Bin 0 -> 528 bytes gfx/title/pikachu_ob.png | Bin 0 -> 144 bytes gfx/title/pokemon_logo.png | Bin 1793 -> 1253 bytes gfx/title/pokemon_logo.tilemap | 2 + gfx/title/pokemon_logo_corner.png | Bin 0 -> 97 bytes gfx/unknown_f8946.map | 1 - gfx/unknown_f90bc.map | Bin 240 -> 0 bytes gfx/unknown_f91ac.map | 1 - gfx/unknown_f91bb.map | 2 - gfx/unknown_f91c8.map | 1 - gfx/unknown_f9b6e.map | Bin 120 -> 0 bytes gfx/unknown_f9be6.map | 1 - gfx/unknown_f9bf2.map | 1 - gfx/unknown_f9c2c.png | Bin 120 -> 0 bytes gfx/unknown_f9c6c.png | Bin 117 -> 0 bytes gfx/unknown_fd86b.png | Bin 92 -> 0 bytes gfx/yellow_intro.asm | 4 + gfx/yellow_intro.png | Bin 2711 -> 0 bytes gfx/yellow_titlescreen.png | Bin 1017 -> 0 bytes gfx/zero_one_ea597.png | Bin 92 -> 0 bytes home.asm | 204 +- home/bankswitch2.asm | 39 + home/cgb_palettes.asm | 81 + home/copy2.asm | 5 + home/init.asm | 2 +- home/lcdc.asm | 2 +- home/overworld.asm | 8 +- home/palettes.asm | 3 + home/pikachu.asm | 2 +- home/pikachu_cries.asm | 46 + home/print_num.asm | 11 + home/text_script.asm | 4 + layout.link | 35 +- macros.asm | 103 +- macros/data.asm | 9 + macros/farcall.asm | 57 + macros/gfx.asm | 12 + macros/scripts/gfx_anims.asm | 37 + macros/wram.asm | 20 + main.asm | 239 +- maps.asm | 35 + maps/BeachHouse.blk | 1 - maps/SummerBeachHouse.blk | 1 + replace.sh | 3 - scripts/BeachHouse.asm | 193 -- scripts/BeachHouse2.asm | 33 - scripts/BillsHouse2.asm | 2 +- scripts/SSAnneCaptainsRoom.asm | 2 +- scripts/SummerBeachHouse.asm | 196 ++ scripts/SummerBeachHouse2.asm | 33 + text.asm | 2 +- text/BeachHouse.asm | 107 - text/SummerBeachHouse.asm | 107 + wram.asm | 23 +- 213 files changed, 15886 insertions(+), 15878 deletions(-) create mode 100644 constants/sprite_anim_constants.asm delete mode 100755 data/animated_objects_3e_1.asm delete mode 100755 data/animated_objects_3e_2.asm delete mode 100644 data/bg_map_attributes.asm create mode 100644 data/cgb/bg_map_attributes.asm create mode 100644 data/maps/bit_5_maps.asm delete mode 100644 data/maps/headers/BeachHouse.asm create mode 100644 data/maps/headers/SummerBeachHouse.asm delete mode 100644 data/maps/objects/BeachHouse.asm create mode 100644 data/maps/objects/SummerBeachHouse.asm create mode 100755 data/pikachu/pikachu_emotions.asm create mode 100755 data/pikachu/pikachu_pic_animation.asm create mode 100755 data/pikachu/pikachu_pic_objects.asm create mode 100755 data/pikachu/pikachu_pic_tilemaps.asm delete mode 100755 data/pikachu_emotions.asm delete mode 100755 data/pikachu_pic_animation.asm delete mode 100755 data/pikachu_pic_objects.asm delete mode 100755 data/pikachu_pic_tilemaps.asm create mode 100644 data/sprite_anims/intro_frames.asm create mode 100644 data/sprite_anims/intro_oam.asm create mode 100755 data/sprite_anims/surfing_pikachu_frames.asm create mode 100644 data/sprite_anims/surfing_pikachu_oam.asm delete mode 100755 engine/animated_objects_3e.asm delete mode 100644 engine/bank30.bin delete mode 100644 engine/bank3c.asm delete mode 100644 engine/bank3d.asm delete mode 100644 engine/bank3e.asm delete mode 100644 engine/bank3f.asm delete mode 100644 engine/battle/bank3d_battle.asm create mode 100644 engine/battle/init_battle.asm create mode 100644 engine/battle/pikachu_entrance_anim.asm delete mode 100644 engine/bg_map_attributes.asm delete mode 100755 engine/diploma_3a.asm create mode 100755 engine/events/diploma2.asm create mode 100644 engine/events/hidden_objects/vermilion_gym_trash2.asm create mode 100644 engine/events/pikachu_happiness.asm create mode 100644 engine/events/pokecenter_chansey.asm create mode 100644 engine/events/try_pikachu_movement.asm create mode 100755 engine/gfx/animated_objects.asm create mode 100644 engine/gfx/bg_map_attributes.asm create mode 100644 engine/items/super_rod.asm create mode 100644 engine/menus/unused_input.asm create mode 100755 engine/minigame/surfing_pikachu.asm create mode 100755 engine/movie/intro_yellow.asm delete mode 100755 engine/movie/title2.asm create mode 100755 engine/movie/title_rb.asm create mode 100644 engine/movie/title_yellow.asm create mode 100644 engine/overworld/specific_script_flags.asm create mode 100644 engine/overworld/unused_load_missable_object_data.asm create mode 100755 engine/pikachu/pikachu_emotions.asm create mode 100755 engine/pikachu/pikachu_follow.asm create mode 100755 engine/pikachu/pikachu_movement.asm create mode 100755 engine/pikachu/pikachu_pcm.asm create mode 100755 engine/pikachu/pikachu_pic_animation.asm create mode 100755 engine/pikachu/pikachu_status.asm create mode 100644 engine/pikachu/respawn_overworld_pikachu.asm delete mode 100755 engine/pikachu_emotions.asm delete mode 100755 engine/pikachu_follow.asm delete mode 100755 engine/pikachu_movement.asm delete mode 100755 engine/pikachu_pcm.asm delete mode 100755 engine/pikachu_pic_animation.asm delete mode 100755 engine/pikachu_status.asm delete mode 100644 engine/printer.asm create mode 100644 engine/printer/printer.asm create mode 100755 engine/printer/printer2.asm delete mode 100755 engine/surfing_minigame.asm delete mode 100755 engine/unknown_ea3ea.asm delete mode 100755 engine/vermilion_gym_trash_cans.asm delete mode 100755 engine/yellow_intro.asm create mode 100644 garbage/bank30.bin delete mode 100644 gfx/9_tile.png create mode 100644 gfx/blocksets/beach_house.bst delete mode 100644 gfx/blocksets/beachhouse.bst create mode 100644 gfx/intro/clouds.png create mode 100644 gfx/intro/unknown_f9b6e.map create mode 100644 gfx/intro/unknown_f9be6.map create mode 100644 gfx/intro/unknown_f9bf2.map create mode 100644 gfx/intro/yellow_intro_1.png create mode 100644 gfx/intro/yellow_intro_2.png create mode 100644 gfx/overworld/pikachu_ball.png create mode 100644 gfx/pikachu.asm create mode 100644 gfx/printer/01.png create mode 100644 gfx/printer/hp.png create mode 100644 gfx/printer/lv.png delete mode 100644 gfx/stats_screen_hp.png delete mode 100644 gfx/stats_screen_lv.png create mode 100644 gfx/surfing_pikachu.asm create mode 100644 gfx/surfing_pikachu/surfing_pikachu_1a.png create mode 100644 gfx/surfing_pikachu/surfing_pikachu_1b.png create mode 100644 gfx/surfing_pikachu/surfing_pikachu_1c.png create mode 100644 gfx/surfing_pikachu/surfing_pikachu_2.png create mode 100644 gfx/surfing_pikachu/surfing_pikachu_3.png create mode 100644 gfx/surfing_pikachu/unknown_f8946.map create mode 100644 gfx/surfing_pikachu/unknown_f90bc.map create mode 100644 gfx/surfing_pikachu/unknown_f91ac.map create mode 100644 gfx/surfing_pikachu/unknown_f91bb.map create mode 100644 gfx/surfing_pikachu/unknown_f91c8.map delete mode 100644 gfx/surfing_pikachu_1a.png delete mode 100644 gfx/surfing_pikachu_1b.png delete mode 100644 gfx/surfing_pikachu_1c.png delete mode 100644 gfx/surfing_pikachu_2.png delete mode 100644 gfx/surfing_pikachu_3.png create mode 100644 gfx/tilesets/beach_house.png delete mode 100644 gfx/tilesets/beachhouse.png create mode 100644 gfx/title/nine.png create mode 100644 gfx/title/pika_bubble.tilemap create mode 100644 gfx/title/pikachu.tilemap create mode 100644 gfx/title/pikachu_bg.png create mode 100644 gfx/title/pikachu_ob.png create mode 100644 gfx/title/pokemon_logo.tilemap create mode 100644 gfx/title/pokemon_logo_corner.png delete mode 100644 gfx/unknown_f8946.map delete mode 100644 gfx/unknown_f90bc.map delete mode 100644 gfx/unknown_f91ac.map delete mode 100644 gfx/unknown_f91bb.map delete mode 100644 gfx/unknown_f91c8.map delete mode 100644 gfx/unknown_f9b6e.map delete mode 100644 gfx/unknown_f9be6.map delete mode 100644 gfx/unknown_f9bf2.map delete mode 100644 gfx/unknown_f9c2c.png delete mode 100644 gfx/unknown_f9c6c.png delete mode 100644 gfx/unknown_fd86b.png create mode 100644 gfx/yellow_intro.asm delete mode 100644 gfx/yellow_intro.png delete mode 100644 gfx/yellow_titlescreen.png delete mode 100644 gfx/zero_one_ea597.png create mode 100644 home/bankswitch2.asm create mode 100644 home/cgb_palettes.asm create mode 100644 home/pikachu_cries.asm create mode 100644 macros/scripts/gfx_anims.asm delete mode 100644 maps/BeachHouse.blk create mode 100644 maps/SummerBeachHouse.blk delete mode 100644 replace.sh delete mode 100644 scripts/BeachHouse.asm delete mode 100755 scripts/BeachHouse2.asm create mode 100644 scripts/SummerBeachHouse.asm create mode 100755 scripts/SummerBeachHouse2.asm delete mode 100644 text/BeachHouse.asm create mode 100644 text/SummerBeachHouse.asm diff --git a/.gitattributes b/.gitattributes index dca901b7..48b1085c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -14,4 +14,4 @@ *.tilemap binary *.wav binary *.blk binary -*.pic binary \ No newline at end of file +*.pic binary diff --git a/.gitignore b/.gitignore index c5e70143..80e4aad8 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,9 @@ *.2bpp *.pic +# compiled audio +*.pcm + # compiled roms *.gbc *.gb @@ -21,9 +24,6 @@ *.pyc *$py.class -# converted audio data -*.pcm - # save game files *.sgm *.sav diff --git a/INSTALL.md b/INSTALL.md index f640e31e..0d49fedc 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -82,7 +82,7 @@ Open **Terminal** and enter the following commands, depending on which distro yo To install the software required for **pokeyellow**: ```bash -sudo apt-get install make gcc git +sudo apt-get install make gcc git python ``` Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.4.1** from source. @@ -92,7 +92,7 @@ Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) To install the software required for **pokeyellow**: ```bash -sudo zypper install make gcc git +sudo zypper install make gcc git python ``` Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.4.1** from source. @@ -102,7 +102,7 @@ Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) To install the software required for **pokeyellow**: ```bash -sudo pacman -S make gcc git +sudo pacman -S make gcc git python ``` Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/arch) for Arch Linux to install **rgbds 0.4.1**. @@ -133,6 +133,7 @@ If your distro is not listed here, try to find the required software in its repo - `gcc` (or `clang`) - `git` - `rgbds` +- `python` If `rgbds` is not available, you'll need to follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.4.1** from source. diff --git a/Makefile b/Makefile index a5366069..434a3192 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,3 @@ -PYTHON := python -pcm := $(PYTHON) tools/pokemontools/pcm.py pcm - rom := pokeyellow.gbc rom_obj := \ @@ -11,6 +8,7 @@ maps.o \ text.o \ wram.o \ gfx/pics.o \ +gfx/pikachu.o \ gfx/sprites.o \ gfx/tilesets.o @@ -29,6 +27,9 @@ RGBFIX ?= $(RGBDS)rgbfix RGBGFX ?= $(RGBDS)rgbgfx RGBLINK ?= $(RGBDS)rgblink +PYTHON := python +pcm := $(PYTHON) tools/pokemontools/pcm.py pcm + ### Build targets @@ -42,7 +43,8 @@ all: $(rom) yellow: $(rom) clean: tidy - find . \( -iname '*.1bpp' -o -iname '*.2bpp' -o -iname '*.pic' -o -iname '*.pcm' \) -delete + find gfx \( -iname '*.1bpp' -o -iname '*.2bpp' -o -iname '*.pic' \) -delete + find audio/pikachu_cries \( -iname '*.pcm' \) -delete tidy: rm -f $(rom) $(rom_obj) $(rom:.gbc=.map) $(rom:.gbc=.sym) rgbdscheck.o @@ -105,11 +107,14 @@ gfx/slots/slots_1.2bpp: tools/gfx += --trim-whitespace gfx/tilesets/%.2bpp: tools/gfx += --trim-whitespace gfx/tilesets/reds_house.2bpp: tools/gfx += --preserve=0x48 +gfx/title/pokemon_logo.2bpp: tools/gfx += --trim-whitespace + gfx/trade/game_boy.2bpp: tools/gfx += --remove-duplicates gfx/sgb/border.2bpp: tools/gfx += --trim-whitespace -gfx/surfing_pikachu_1c.2bpp: tools/gfx += --trim-whitespace -gfx/surfing_pikachu_3.2bpp: tools/gfx += --trim-whitespace + +gfx/surfing_pikachu/surfing_pikachu_1c.2bpp: tools/gfx += --trim-whitespace +gfx/surfing_pikachu/surfing_pikachu_3.2bpp: tools/gfx += --trim-whitespace ### Catch-all graphics rules @@ -130,5 +135,9 @@ gfx/surfing_pikachu_3.2bpp: tools/gfx += --trim-whitespace tools/pkmncompress $< $@ +### Catch-all audio rules + %.wav: ; -%.pcm: %.wav ; @$(pcm) $< + +%.pcm: %.wav + @$(pcm) $< diff --git a/audio.asm b/audio.asm index 737e9f70..bd5b390d 100644 --- a/audio.asm +++ b/audio.asm @@ -433,8 +433,6 @@ INCLUDE "audio/sfx/get_item2_4.asm" SECTION "Audio Engine 1", ROMX -AudioEngine1:: - INCLUDE "audio/play_battle_music.asm" INCLUDE "audio/engine_1.asm" INCLUDE "audio/alternate_tempo.asm" @@ -447,25 +445,18 @@ INCLUDE "audio/low_health_alarm.asm" SECTION "Audio Engine 2", ROMX -AudioEngine2:: - INCLUDE "audio/engine_2.asm" SECTION "Audio Engine 3", ROMX -AudioEngine3:: - INCLUDE "audio/pokedex_rating_sfx.asm" INCLUDE "audio/engine_3.asm" SECTION "Audio Engine 4", ROMX -SurfingPikachu1Graphics1:: INCBIN "gfx/surfing_pikachu_1a.2bpp" -SurfingPikachu1Graphics2:: INCBIN "gfx/surfing_pikachu_1b.2bpp" -SurfingPikachu1Graphics3:: INCBIN "gfx/surfing_pikachu_1c.2bpp" - +INCLUDE "gfx/surfing_pikachu.asm" INCLUDE "audio/engine_4.asm" @@ -550,5 +541,6 @@ INCLUDE "audio/music/meetjessiejames.asm" INCBIN "audio/unknown_832b9.bin" -; cries are in different banks + +; Pikachu cries are in different banks INCLUDE "audio/pikachu_cries.asm" diff --git a/audio/alternate_tempo.asm b/audio/alternate_tempo.asm index 87d08e18..eb47d62d 100644 --- a/audio/alternate_tempo.asm +++ b/audio/alternate_tempo.asm @@ -23,18 +23,17 @@ Music_RivalAlternateTempo:: ld a, MUSIC_MEET_RIVAL call PlayMusic ld de, Music_MeetRival_branch_b119 - jr asm_99ed + jr FinishAlternateRivalMusic ; applies both the alternate start and alternate tempo Music_RivalAlternateStartAndTempo:: call Music_RivalAlternateStart ld de, Music_MeetRival_branch_b19b -asm_99ed: +FinishAlternateRivalMusic: ld hl, wChannelCommandPointers jp Audio1_OverwriteChannelPointer -; XXX - ret + ret ; unused ; an alternate tempo for Cities1 which is used for the Hall of Fame room Music_Cities1AlternateTempo:: diff --git a/audio/engine_1.asm b/audio/engine_1.asm index a585cd43..df3281cb 100644 --- a/audio/engine_1.asm +++ b/audio/engine_1.asm @@ -1,4 +1,4 @@ -; The first of three duplicated sound engines. +; The first of four partially duplicated sound engines. Audio1_UpdateMusic:: ld c, Ch1 @@ -1064,7 +1064,7 @@ Audio1_IsCry: Audio1_96c3: ld a, [wAudioROMBank] - cp BANK(AudioEngine2) + cp BANK("Audio Engine 2") jr nz, .asm_96dc ld a, [wChannelSoundIDs + Ch8] ld b, a diff --git a/audio/engine_2.asm b/audio/engine_2.asm index 65c25c20..800a2246 100644 --- a/audio/engine_2.asm +++ b/audio/engine_2.asm @@ -1,4 +1,4 @@ -; The second of three duplicated sound engines. +; The second of four partially duplicated sound engines. ; This copy has a few differences relating to battle sound effects ; and the low health alarm that plays in battle diff --git a/audio/engine_3.asm b/audio/engine_3.asm index 10893868..06698ca5 100644 --- a/audio/engine_3.asm +++ b/audio/engine_3.asm @@ -1,4 +1,4 @@ -; The third of three duplicated sound engines. +; The third of four partially duplicated sound engines. Audio3_PlaySound:: ld [wSoundID], a diff --git a/audio/engine_4.asm b/audio/engine_4.asm index 850bb66a..b3ed422e 100644 --- a/audio/engine_4.asm +++ b/audio/engine_4.asm @@ -1,4 +1,4 @@ -; The fourth of three duplicated sound engines. +; The fourth of four partially duplicated sound engines. Audio4_PlaySound:: ld [wSoundID], a diff --git a/audio/music/dungeon1.asm b/audio/music/dungeon1.asm index 6bcb1fc0..445576bb 100644 --- a/audio/music/dungeon1.asm +++ b/audio/music/dungeon1.asm @@ -6,10 +6,8 @@ Music_Dungeon1_Ch1:: vibrato 10, 1, 4 note_type 12, 4, -5 rest 8 - ; stereo_panning %1110, %1101 octave 4 note F#, 8 - ; stereo_panning %1111, %1111 Music_Dungeon1_branch_7dee5:: note_type 12, 11, 2 diff --git a/audio/pikachu_cries.asm b/audio/pikachu_cries.asm index a09425b3..1f6bc2c4 100644 --- a/audio/pikachu_cries.asm +++ b/audio/pikachu_cries.asm @@ -5,12 +5,14 @@ pcm: MACRO .End: ENDM -SECTION "Pikachu Cries 1", ROMX ; BANK $21 + +; All of the pcm data has one trailing byte that is never processed. + +SECTION "Pikachu Cries 1", ROMX PikachuCry1:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_1.pcm" db $77 ; unused - ; All of the pcm data has one trailing byte that is never processed. PikachuCry2:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_2.pcm" @@ -25,7 +27,7 @@ PikachuCry4:: db $e0 ; unused -SECTION "Pikachu Cries 2", ROMX ; BANK $22 +SECTION "Pikachu Cries 2", ROMX PikachuCry5:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_5.pcm" @@ -40,7 +42,7 @@ PikachuCry7:: db $ff ; unused -SECTION "Pikachu Cries 3", ROMX ; BANK $23 +SECTION "Pikachu Cries 3", ROMX PikachuCry8:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_8.pcm" @@ -55,7 +57,7 @@ PikachuCry10:: db $ff ; unused -SECTION "Pikachu Cries 4", ROMX ; BANK $24 +SECTION "Pikachu Cries 4", ROMX PikachuCry11:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_11.pcm" @@ -70,7 +72,7 @@ PikachuCry13:: db $f0 ; unused -SECTION "Pikachu Cries 5", ROMX ; BANK $25 +SECTION "Pikachu Cries 5", ROMX PikachuCry14:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_14.pcm" @@ -80,7 +82,7 @@ PikachuCry15:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_15.pcm" db $77 ; unused -SECTION "Pikachu Cries 6", ROMX ; BANK $31 +SECTION "Pikachu Cries 6", ROMX PikachuCry16:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_16.pcm" @@ -95,7 +97,7 @@ PikachuCry22:: db $7e ; unused -SECTION "Pikachu Cries 7", ROMX ; BANK $32 +SECTION "Pikachu Cries 7", ROMX PikachuCry20:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_20.pcm" @@ -106,7 +108,7 @@ PikachuCry21:: db $ff ; unused -SECTION "Pikachu Cries 8", ROMX ; BANK $33 +SECTION "Pikachu Cries 8", ROMX PikachuCry19:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_19.pcm" @@ -120,7 +122,7 @@ PikachuCry26:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_26.pcm" db $00 ; unused -SECTION "Pikachu Cries 9", ROMX ; BANK $34 +SECTION "Pikachu Cries 9", ROMX PikachuCry17:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_17.pcm" @@ -135,7 +137,7 @@ PikachuCry25:: db $03 ; unused -SECTION "Pikachu Cries 10", ROMX ; BANK $35 +SECTION "Pikachu Cries 10", ROMX PikachuCry27:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_27.pcm" @@ -157,7 +159,7 @@ PikachuCry31:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_31.pcm" db $00 ; unused -SECTION "Pikachu Cries 11", ROMX ; BANK $36 +SECTION "Pikachu Cries 11", ROMX PikachuCry32:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_32.pcm" @@ -176,7 +178,7 @@ PikachuCry41:: db $9b ; unused -SECTION "Pikachu Cries 12", ROMX ; BANK $37 +SECTION "Pikachu Cries 12", ROMX PikachuCry35:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_35.pcm" @@ -191,7 +193,7 @@ PikachuCry39:: db $0f ; unused -SECTION "Pikachu Cries 13", ROMX ; BANK $38 +SECTION "Pikachu Cries 13", ROMX PikachuCry37:: pcm INCBIN "audio/pikachu_cries/pikachu_cry_37.pcm" diff --git a/audio/wave_instruments.asm b/audio/wave_instruments.asm index 5095cced..911ce873 100644 --- a/audio/wave_instruments.asm +++ b/audio/wave_instruments.asm @@ -8,7 +8,6 @@ dw .wave5 ; used in the Lavender Town and Pokemon Tower themes dw .wave5 ; unused dw .wave5 ; unused -; dw .wave5 ; unused ; these are the definitions for the channel 3 instruments ; each instrument definition is made up of 32 points (nibbles) that form diff --git a/constants.asm b/constants.asm index 21cd6400..2a277001 100644 --- a/constants.asm +++ b/constants.asm @@ -35,4 +35,5 @@ INCLUDE "constants/tileset_constants.asm" INCLUDE "constants/event_constants.asm" INCLUDE "constants/text_constants.asm" INCLUDE "constants/menu_constants.asm" +INCLUDE "constants/sprite_anim_constants.asm" INCLUDE "constants/pikachu_emotion_constants.asm" diff --git a/constants/gfx_constants.asm b/constants/gfx_constants.asm index 912e5835..e6eb50db 100644 --- a/constants/gfx_constants.asm +++ b/constants/gfx_constants.asm @@ -2,10 +2,18 @@ TILE_WIDTH EQU 8 ; pixels LEN_1BPP_TILE EQU 1 * TILE_WIDTH ; bytes LEN_2BPP_TILE EQU 2 * TILE_WIDTH ; bytes -NUM_PAL_COLORS EQU 4 + const_def + const SHADE_WHITE ; %00 + const SHADE_LIGHT ; %01 + const SHADE_DARK ; %10 + const SHADE_BLACK ; %11 +NUM_PAL_COLORS EQU const_value + PAL_COLOR_SIZE EQU 2 PALETTE_SIZE EQU NUM_PAL_COLORS * PAL_COLOR_SIZE +NUM_ACTIVE_PALS EQU 4 + SCREEN_WIDTH EQU 20 SCREEN_HEIGHT EQU 18 SCREEN_WIDTH_PX EQU SCREEN_WIDTH * TILE_WIDTH ; pixels @@ -16,6 +24,11 @@ BG_MAP_HEIGHT EQU 32 ; tiles SPRITEBUFFERSIZE EQU 7 * 7 * LEN_1BPP_TILE +; DMGPalToGBCPal +CONVERT_BGP EQU 0 +CONVERT_OBP0 EQU 1 +CONVERT_OBP1 EQU 2 + ; HP bar HP_BAR_GREEN EQU 0 HP_BAR_YELLOW EQU 1 diff --git a/constants/hide_show_constants.asm b/constants/hide_show_constants.asm index 54d27769..08bb2607 100755 --- a/constants/hide_show_constants.asm +++ b/constants/hide_show_constants.asm @@ -3,8 +3,7 @@ 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 -; there may be unused sprites, but these will remain unmarked until -; the disassembly is complete +; TODO: mark sprite constants with an X that are never used const_def const HS_PALLET_TOWN_OAK ; 00 @@ -33,20 +32,20 @@ SHOW EQU $15 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 X - const HS_ROUTE_2_ITEM_2 ; 1B X - const HS_ROUTE_4_ITEM ; 1C X - const HS_ROUTE_9_ITEM ; 1D X + 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 X - const HS_ROUTE_12_ITEM_2 ; 20 X - const HS_ROUTE_15_ITEM ; 21 X + 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 X - const HS_ROUTE_25_ITEM ; 27 X + 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 @@ -57,95 +56,95 @@ SHOW EQU $15 const HS_POKEDEX_2 ; 2F const HS_OAKS_LAB_OAK_2 ; 30 const HS_VIRIDIAN_GYM_GIOVANNI ; 31 - const HS_VIRIDIAN_GYM_ITEM ; 32 X + const HS_VIRIDIAN_GYM_ITEM ; 32 const HS_OLD_AMBER ; 33 const HS_CERULEAN_BULBASAUR ; 34 - const HS_CERULEAN_CAVE_1F_ITEM_1 ; 35 X - const HS_CERULEAN_CAVE_1F_ITEM_2 ; 36 X - const HS_CERULEAN_CAVE_1F_ITEM_3 ; 37 X - const HS_CERULEAN_CAVE_1F_ITEM_4 ; 38 X + 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 X - const HS_POKEMON_TOWER_4F_ITEM_1 ; 3B X - const HS_POKEMON_TOWER_4F_ITEM_2 ; 3C X - const HS_POKEMON_TOWER_4F_ITEM_3 ; 3D X - const HS_POKEMON_TOWER_5F_ITEM ; 3E X - const HS_POKEMON_TOWER_6F_ITEM_1 ; 3F X - const HS_POKEMON_TOWER_6F_ITEM_2 ; 40 X + 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 X - const HS_POKEMON_MANSION_1F_ITEM_1 ; 48 X - const HS_POKEMON_MANSION_1F_ITEM_2 ; 49 X + 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 X - const HS_VOLTORB_2 ; 4E X - const HS_VOLTORB_3 ; 4F X - const HS_ELECTRODE_1 ; 50 X - const HS_VOLTORB_4 ; 51 X - const HS_VOLTORB_5 ; 52 X - const HS_ELECTRODE_2 ; 53 X - const HS_VOLTORB_6 ; 54 X - const HS_ZAPDOS ; 55 X - const HS_POWER_PLANT_ITEM_1 ; 56 X - const HS_POWER_PLANT_ITEM_2 ; 57 X - const HS_POWER_PLANT_ITEM_3 ; 58 X - const HS_POWER_PLANT_ITEM_4 ; 59 X - const HS_POWER_PLANT_ITEM_5 ; 5A X - const HS_MOLTRES ; 5B X - const HS_VICTORY_ROAD_2F_ITEM_1 ; 5C X - const HS_VICTORY_ROAD_2F_ITEM_2 ; 5D X - const HS_VICTORY_ROAD_2F_ITEM_3 ; 5E X - const HS_VICTORY_ROAD_2F_ITEM_4 ; 5F X + 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 X - const HS_VIRIDIAN_FOREST_ITEM_2 ; 65 X - const HS_VIRIDIAN_FOREST_ITEM_3 ; 66 X - const HS_MT_MOON_1F_ITEM_1 ; 67 X - const HS_MT_MOON_1F_ITEM_2 ; 68 X - const HS_MT_MOON_1F_ITEM_3 ; 69 X - const HS_MT_MOON_1F_ITEM_4 ; 6A X - const HS_MT_MOON_1F_ITEM_5 ; 6B X - const HS_MT_MOON_1F_ITEM_6 ; 6C X + 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 X - const HS_MT_MOON_B2F_ITEM_2 ; 72 X + 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 X - const HS_SS_ANNE_2F_ROOMS_ITEM_1 ; 75 X - const HS_SS_ANNE_2F_ROOMS_ITEM_2 ; 76 X - const HS_SS_ANNE_B1F_ROOMS_ITEM_1 ; 77 X - const HS_SS_ANNE_B1F_ROOMS_ITEM_2 ; 78 X - const HS_SS_ANNE_B1F_ROOMS_ITEM_3 ; 79 X - const HS_VICTORY_ROAD_3F_ITEM_1 ; 7A X - const HS_VICTORY_ROAD_3F_ITEM_2 ; 7B X + 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 X - const HS_ROCKET_HIDEOUT_B1F_ITEM_2 ; 7E X - const HS_ROCKET_HIDEOUT_B2F_ITEM_1 ; 7F X - const HS_ROCKET_HIDEOUT_B2F_ITEM_2 ; 80 X - const HS_ROCKET_HIDEOUT_B2F_ITEM_3 ; 81 X - const HS_ROCKET_HIDEOUT_B2F_ITEM_4 ; 82 X - const HS_ROCKET_HIDEOUT_B3F_ITEM_1 ; 83 X - const HS_ROCKET_HIDEOUT_B3F_ITEM_2 ; 84 X + 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 X - const HS_ROCKET_HIDEOUT_B4F_ITEM_2 ; 89 X - const HS_ROCKET_HIDEOUT_B4F_ITEM_3 ; 8A X + 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? @@ -155,32 +154,32 @@ SHOW EQU $15 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 X + 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 X - const HS_SILPH_CO_4F_ITEM_2 ; 99 X - const HS_SILPH_CO_4F_ITEM_3 ; 9A X + 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 X - const HS_SILPH_CO_5F_ITEM_2 ; A0 X - const HS_SILPH_CO_5F_ITEM_3 ; A1 X + 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 X - const HS_SILPH_CO_6F_ITEM_2 ; A6 X + 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 X - const HS_SILPH_CO_7F_ITEM_2 ; AD X + 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 @@ -191,44 +190,44 @@ SHOW EQU $15 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 X - const HS_SILPH_CO_10F_ITEM_2 ; B9 X - const HS_SILPH_CO_10F_ITEM_3 ; BA X + 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 X - const HS_POKEMON_MANSION_3F_ITEM_1 ; C1 X - const HS_POKEMON_MANSION_3F_ITEM_2 ; C2 X - const HS_POKEMON_MANSION_B1F_ITEM_1 ; C3 X - const HS_POKEMON_MANSION_B1F_ITEM_2 ; C4 X - const HS_POKEMON_MANSION_B1F_ITEM_3 ; C5 X - const HS_POKEMON_MANSION_B1F_ITEM_4 ; C6 X - const HS_POKEMON_MANSION_B1F_ITEM_5 ; C7 X - const HS_SAFARI_ZONE_EAST_ITEM_1 ; C8 X - const HS_SAFARI_ZONE_EAST_ITEM_2 ; C9 X - const HS_SAFARI_ZONE_EAST_ITEM_3 ; CA X - const HS_SAFARI_ZONE_EAST_ITEM_4 ; CB X - const HS_SAFARI_ZONE_NORTH_ITEM_1 ; CC X - const HS_SAFARI_ZONE_NORTH_ITEM_2 ; CD X - const HS_SAFARI_ZONE_WEST_ITEM_1 ; CE X - const HS_SAFARI_ZONE_WEST_ITEM_2 ; CF X - const HS_SAFARI_ZONE_WEST_ITEM_3 ; D0 X - const HS_SAFARI_ZONE_WEST_ITEM_4 ; D1 X - const HS_SAFARI_ZONE_CENTER_ITEM ; D2 X - const HS_CERULEAN_CAVE_2F_ITEM_1 ; D3 X - const HS_CERULEAN_CAVE_2F_ITEM_2 ; D4 X - const HS_CERULEAN_CAVE_2F_ITEM_3 ; D5 X - const HS_CERULEAN_CAVE_2F_ITEM_4 ; D6 X - const HS_MEWTWO ; D7 X - const HS_CERULEAN_CAVE_B1F_ITEM_1 ; D8 X - const HS_CERULEAN_CAVE_B1F_ITEM_2 ; D9 X - const HS_CERULEAN_CAVE_B1F_ITEM_3 ; DA X - const HS_CERULEAN_CAVE_B1F_ITEM_4 ; DB X - const HS_VICTORY_ROAD_1F_ITEM_1 ; DC X - const HS_VICTORY_ROAD_1F_ITEM_2 ; DD X + 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 @@ -242,7 +241,7 @@ SHOW EQU $15 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 X + const HS_ARTICUNO ; EB const HS_DAISY_SITTING_COPY ; EC const HS_DAISY_WALKING_COPY ; ED const HS_TOWN_MAP_COPY ; EE diff --git a/constants/map_constants.asm b/constants/map_constants.asm index 038c2ab2..366c8619 100644 --- a/constants/map_constants.asm +++ b/constants/map_constants.asm @@ -266,7 +266,7 @@ FIRST_INDOOR_MAP EQU const_value mapconst LORELEIS_ROOM, 6, 5 ; $F5 mapconst BRUNOS_ROOM, 6, 5 ; $F6 mapconst AGATHAS_ROOM, 6, 5 ; $F7 - mapconst BEACH_HOUSE, 4, 7 ; $F8 + mapconst SUMMER_BEACH_HOUSE, 4, 7 ; $F8 ; 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 diff --git a/constants/misc_constants.asm b/constants/misc_constants.asm index 6fb43490..1bb32f8e 100644 --- a/constants/misc_constants.asm +++ b/constants/misc_constants.asm @@ -7,26 +7,3 @@ TRUE EQU 1 const FLAG_RESET ; 0 const FLAG_SET ; 1 const FLAG_TEST ; 2 - -; pikachu happiness modifiers - const_def 1 - const PIKAHAPPY_LEVELUP - const PIKAHAPPY_USEDITEM - const PIKAHAPPY_USEDXITEM - const PIKAHAPPY_GYMLEADER - const PIKAHAPPY_USEDTMHM - const PIKAHAPPY_WALKING - const PIKAHAPPY_DEPOSITED - const PIKAHAPPY_FAINTED - const PIKAHAPPY_PSNFNT - const PIKAHAPPY_CARELESSTRAINER - const PIKAHAPPY_TRADE - -; DMGPalToGBCPal -CONVERT_BGP EQU 0 -CONVERT_OBP0 EQU 1 -CONVERT_OBP1 EQU 2 - -NUM_COLORS EQU 4 -PAL_SIZE EQU NUM_COLORS * 2 -NUM_ACTIVE_PALS EQU 4 diff --git a/constants/oam_constants.asm b/constants/oam_constants.asm index 7a80bdd2..be63dc24 100755 --- a/constants/oam_constants.asm +++ b/constants/oam_constants.asm @@ -15,18 +15,3 @@ OAM_OBP1 EQU 1 << OAM_OBP_NUM ; OBJ palette 1 OAM_HFLIP EQU 1 << OAM_X_FLIP ; horizontal flip OAM_VFLIP EQU 1 << OAM_Y_FLIP ; vertical flip OAM_BEHIND_BG EQU 1 << OAM_PRIORITY ; behind bg (except color 0) - -frame: MACRO - db \1 -x = \2 -REPT _NARG +- 2 -x = x | (\3 << 1) - shift -endr - db x - endm - -delanim EQUS "db $fc" -dorepeat EQUS "db $fd," -dorestart EQUS "db $fe" -endanim EQUS "db $ff" diff --git a/constants/pikachu_emotion_constants.asm b/constants/pikachu_emotion_constants.asm index feb4a438..fa2a9457 100644 --- a/constants/pikachu_emotion_constants.asm +++ b/constants/pikachu_emotion_constants.asm @@ -1,29 +1,28 @@ -dpikapic: macro +; pikachu happiness modifiers + const_def 1 + const PIKAHAPPY_LEVELUP + const PIKAHAPPY_USEDITEM + const PIKAHAPPY_USEDXITEM + const PIKAHAPPY_GYMLEADER + const PIKAHAPPY_USEDTMHM + const PIKAHAPPY_WALKING + const PIKAHAPPY_DEPOSITED + const PIKAHAPPY_FAINTED + const PIKAHAPPY_PSNFNT + const PIKAHAPPY_CARELESSTRAINER + const PIKAHAPPY_TRADE + +dpikapic: MACRO db (\1_id - PikaPicAnimPointers) / 2 - endm - -ldpikapic: macro - ld \1, (\2_id - PikaPicAnimPointers) / 2 - endm +ENDM -dpikaemotion: macro +dpikaemotion: MACRO db (\1_id - PikachuEmotionTable) / 2 - endm +ENDM -ldpikaemotion: macro +ldpikaemotion: MACRO ld \1, (\2_id - PikachuEmotionTable) / 2 - endm - -dpikaanim: macro - db (\1_id - PikaPicAnimBGFramesPointers) / 2 - endm - -pikaframeend EQUS "db $e0" -pikaframe: macro - db (\1_id - PikaPicTilemapPointers) / 2, \2 - endm - -pikaframedelay EQUS "db 0," +ENDM ; Starter Pikachu emotion commands constants @@ -60,7 +59,7 @@ pikaframedelay EQUS "db 0," const PIKASTEPDIR_UP_RIGHT -; Macros for commands +; MACROs for commands pikaemotion_dummy1: MACRO db PIKAEMOTION_DUMMY1 ENDM @@ -117,108 +116,109 @@ pikaemotion_dummy3: MACRO ENDM pikacry_def: MACRO -\1_id:: dba \1 -endm +\1_id:: + dba \1 +ENDM dpikacry: MACRO db (\1_id - PikachuCriesPointerTable) / 3 - endm +ENDM ldpikacry: MACRO ld \1, (\2_id - PikachuCriesPointerTable) / 3 - ENDM +ENDM pikacry: MACRO ldpikacry a, \1 - endm +ENDM const_def const pikapic_nop_command -pikapic_nop: macro +pikapic_nop: MACRO db pikapic_nop_command - endm +ENDM const pikapic_writebyte_command -pikapic_writebyte: macro +pikapic_writebyte: MACRO db pikapic_writebyte_command, \1 - endm +ENDM const pikapic_loadgfx_command -pikapic_loadgfx: macro +pikapic_loadgfx: MACRO db pikapic_loadgfx_command, (\1_id - PikaPicAnimGFXHeaders) / 4 - endm +ENDM const pikapic_animation_command -pikapic_animation: macro +pikapic_animation: MACRO ; frameset pointer, starting vtile, y offset, x offset db pikapic_animation_command - dpikaanim \1 + db (\1_id - PikaPicAnimBGFramesPointers) / 2 db 0, \2, \3, \4 - endm +ENDM const pikapic_nop4_command -pikapic_nop4: macro +pikapic_nop4: MACRO db pikapic_nop4_command - endm +ENDM const pikapic_nop5_command -pikapic_nop5: macro +pikapic_nop5: MACRO db pikapic_nop5_command - endm +ENDM const pikapic_waitbgmapeleteobject_command -pikapic_waitbgmapeleteobject: macro +pikapic_waitbgmapeleteobject: MACRO db pikapic_waitbgmapeleteobject_command, \1 - endm +ENDM const pikapic_nop7_command -pikapic_nop7: macro +pikapic_nop7: MACRO db pikapic_nop7_command - endm +ENDM const pikapic_nop8_command -pikapic_nop8: macro +pikapic_nop8: MACRO db pikapic_nop8_command - endm +ENDM const pikapic_jump_command -pikapic_jump: macro ; 9 +pikapic_jump: MACRO ; 9 dbw pikapic_jump_command, \1 - endm +ENDM const pikapic_setduration_command -pikapic_setduration: macro ; a +pikapic_setduration: MACRO ; a dbw pikapic_setduration_command, \1 - endm +ENDM const pikapic_cry_command -pikapic_cry: macro ; b +pikapic_cry: MACRO ; b db pikapic_cry_command IF _NARG == 0 db $ff else dpikacry \1 endc - endm +ENDM const pikapic_thunderbolt_command -pikapic_thunderbolt: macro ; c +pikapic_thunderbolt: MACRO ; c db pikapic_thunderbolt_command - endm +ENDM const pikapic_waitbgmap_command -pikapic_waitbgmap: macro ; d +pikapic_waitbgmap: MACRO ; d db pikapic_waitbgmap_command - endm +ENDM const pikapic_ret_command -pikapic_ret: macro ; e +pikapic_ret: MACRO ; e db pikapic_ret_command - endm +ENDM -pikapic_looptofinish: macro +pikapic_looptofinish: MACRO .loop\@ pikapic_waitbgmap pikapic_jump .loop\@ - endm +ENDM diff --git a/constants/sprite_anim_constants.asm b/constants/sprite_anim_constants.asm new file mode 100644 index 00000000..f5a90ab9 --- /dev/null +++ b/constants/sprite_anim_constants.asm @@ -0,0 +1,17 @@ +; animated_object struct members (see macros/wram.asm) +ANIM_OBJ_INDEX EQUS "wAnimatedObject0Index - wAnimatedObject0" +ANIM_OBJ_FRAME_SET EQUS "wAnimatedObject0FramesetID - wAnimatedObject0" +ANIM_OBJ_CALLBACK EQUS "wAnimatedObject0AnimSeqID - wAnimatedObject0" +ANIM_OBJ_TILE EQUS "wAnimatedObject0TileID - wAnimatedObject0" +ANIM_OBJ_X_COORD EQUS "wAnimatedObject0XCoord - wAnimatedObject0" +ANIM_OBJ_Y_COORD EQUS "wAnimatedObject0YCoord - wAnimatedObject0" +ANIM_OBJ_X_OFFSET EQUS "wAnimatedObject0XOffset - wAnimatedObject0" +ANIM_OBJ_Y_OFFSET EQUS "wAnimatedObject0YOffset - wAnimatedObject0" +ANIM_OBJ_DURATION EQUS "wAnimatedObject0Duration - wAnimatedObject0" +ANIM_OBJ_DURATION_OFFSET EQUS "wAnimatedObject0DurationOffset - wAnimatedObject0" +ANIM_OBJ_FRAME_IDX EQUS "wAnimatedObject0FrameIndex - wAnimatedObject0" +ANIM_OBJ_FIELD_B EQUS "wAnimatedObject0FieldB - wAnimatedObject0" +ANIM_OBJ_FIELD_C EQUS "wAnimatedObject0FieldC - wAnimatedObject0" +ANIM_OBJ_FIELD_D EQUS "wAnimatedObject0FieldD - wAnimatedObject0" +ANIM_OBJ_FIELD_E EQUS "wAnimatedObject0FieldE - wAnimatedObject0" +ANIM_OBJ_FIELD_F EQUS "wAnimatedObject0FieldF - wAnimatedObject0" diff --git a/constants/sprite_constants.asm b/constants/sprite_constants.asm index da0b3b43..2613f707 100755 --- a/constants/sprite_constants.asm +++ b/constants/sprite_constants.asm @@ -32,7 +32,7 @@ const SPRITE_MIDDLE_AGED_WOMAN ; $1c const SPRITE_BRUNETTE_GIRL ; $1d const SPRITE_LANCE ; $1e - const SPRITE_UNUSED_SCIENTIST ; $1f + const SPRITE_UNUSED_RED_1 ; $1f const SPRITE_SCIENTIST ; $20 const SPRITE_ROCKER ; $21 const SPRITE_SWIMMER ; $22 @@ -51,11 +51,11 @@ const SPRITE_FISHER ; $2f const SPRITE_KOGA ; $30 const SPRITE_GUARD ; $31 - const SPRITE_UNUSED_GUARD ; $32 + const SPRITE_UNUSED_RED_2 ; $32 const SPRITE_MOM ; $33 const SPRITE_BALDING_GUY ; $34 const SPRITE_LITTLE_BOY ; $35 - const SPRITE_UNUSED_GAMEBOY_KID ; $36 + const SPRITE_UNUSED_RED_3 ; $36 const SPRITE_GAMEBOY_KID ; $37 const SPRITE_FAIRY ; $38 const SPRITE_AGATHA ; $39 diff --git a/constants/tileset_constants.asm b/constants/tileset_constants.asm index 12b30ffe..3991ac4d 100644 --- a/constants/tileset_constants.asm +++ b/constants/tileset_constants.asm @@ -25,4 +25,4 @@ const CLUB ; 21 const FACILITY ; 22 const PLATEAU ; 23 - const BEACH_HOUSE_TILESET ; 24 + const BEACH_HOUSE ; 24 diff --git a/data/animated_objects_3e_1.asm b/data/animated_objects_3e_1.asm deleted file mode 100755 index 07b17ce5..00000000 --- a/data/animated_objects_3e_1.asm +++ /dev/null @@ -1,383 +0,0 @@ -SurfingPikachuFrames: - dw Unkn_f943d ; 00 - dw Unkn_f9440 ; 01 - dw Unkn_f9445 ; 02 - dw Unkn_f944a ; 03 - dw Unkn_f944f ; 04 - dw Unkn_f9454 ; 05 - dw Unkn_f9459 ; 06 - dw Unkn_f945e ; 07 - dw Unkn_f9463 ; 08 - dw Unkn_f9468 ; 09 - dw Unkn_f946d ; 0a - dw Unkn_f9472 ; 0b - dw Unkn_f9477 ; 0c - dw Unkn_f947c ; 0d - dw Unkn_f9481 ; 0e - dw Unkn_f9486 ; 0f - dw Unkn_f948b ; 10 - dw Unkn_f9494 ; 11 - dw Unkn_f9499 ; 12 - dw Unkn_f949e ; 13 - dw Unkn_f94fb ; 14 - dw Unkn_f94a1 ; 15 - dw Unkn_f94b0 ; 16 - dw Unkn_f94bf ; 17 - dw Unkn_f94ce ; 18 - dw Unkn_f94dd ; 19 - dw Unkn_f94ec ; 1a - dw Unkn_f94fe ; 1b - -Unkn_f943d: - frame $00, 32 - endanim - -Unkn_f9440: - frame $01, 8 - frame $02, 8 - dorestart - -Unkn_f9445: - frame $03, 8 - frame $04, 8 - dorestart - -Unkn_f944a: - frame $05, 8 - frame $06, 8 - dorestart - -Unkn_f944f: - frame $07, 8 - frame $08, 8 - dorestart - -Unkn_f9454: - frame $09, 8 - frame $0a, 8 - dorestart - -Unkn_f9459: - frame $0b, 8 - frame $0c, 8 - dorestart - -Unkn_f945e: - frame $0d, 8 - frame $0e, 8 - dorestart - -Unkn_f9463: - frame $01, 8, OAM_HFLIP, OAM_VFLIP - frame $02, 8, OAM_HFLIP, OAM_VFLIP - dorestart - -Unkn_f9468: - frame $03, 8, OAM_HFLIP, OAM_VFLIP - frame $04, 8, OAM_HFLIP, OAM_VFLIP - dorestart - -Unkn_f946d: - frame $05, 8, OAM_HFLIP, OAM_VFLIP - frame $06, 8, OAM_HFLIP, OAM_VFLIP - dorestart - -Unkn_f9472: - frame $07, 8, OAM_HFLIP, OAM_VFLIP - frame $08, 8, OAM_HFLIP, OAM_VFLIP - dorestart - -Unkn_f9477: - frame $09, 8, OAM_HFLIP, OAM_VFLIP - frame $0a, 8, OAM_HFLIP, OAM_VFLIP - dorestart - -Unkn_f947c: - frame $0b, 8, OAM_HFLIP, OAM_VFLIP - frame $0c, 8, OAM_HFLIP, OAM_VFLIP - dorestart - -Unkn_f9481: - frame $0d, 8, OAM_HFLIP, OAM_VFLIP - frame $0e, 8, OAM_HFLIP, OAM_VFLIP - dorestart - -Unkn_f9486: - frame $11, 7 - frame $12, 7 - dorestart - -Unkn_f948b: - frame $13, 2 - frame $14, 2 - dorepeat 8 - frame $15, 2 - endanim - -Unkn_f9494: - frame $16, 32 - frame $16, 32 - delanim - -Unkn_f9499: - frame $17, 32 - frame $17, 32 - delanim - -Unkn_f949e: - frame $18, 32 - endanim - -Unkn_f94a1: - frame $1a, 4 - dorepeat 1 - frame $1a, 3 - dorepeat 1 - frame $1a, 2 - dorepeat 1 - frame $1a, 1 - delanim - -Unkn_f94b0: - frame $1b, 4 - dorepeat 1 - frame $1b, 3 - dorepeat 1 - frame $1b, 2 - dorepeat 1 - frame $1b, 1 - delanim - -Unkn_f94bf: - frame $1c, 4 - dorepeat 1 - frame $1c, 3 - dorepeat 1 - frame $1c, 2 - dorepeat 1 - frame $1c, 1 - delanim - -Unkn_f94ce: - frame $1d, 4 - dorepeat 1 - frame $1d, 3 - dorepeat 1 - frame $1d, 2 - dorepeat 1 - frame $1d, 1 - delanim - -Unkn_f94dd: - frame $1e, 4 - dorepeat 1 - frame $1e, 3 - dorepeat 1 - frame $1e, 2 - dorepeat 1 - frame $1e, 1 - delanim - -Unkn_f94ec: - frame $1f, 4 - dorepeat 1 - frame $1f, 3 - dorepeat 1 - frame $1f, 2 - dorepeat 1 - frame $1f, 1 - delanim - -Unkn_f94fb: - frame $19, 1 - delanim - -Unkn_f94fe: - frame $20, 7 - frame $21, 7 - frame $22, 7 - frame $23, 7 - dorestart - -SurfingPikachuOAMData: - dbw $00, .Frame0 - dbw $00, .Frame1 - dbw $36, .Frame2 - dbw $03, .Frame3 - dbw $39, .Frame4 - dbw $06, .Frame5 - dbw $3c, .Frame6 - dbw $09, .Frame7 - dbw $60, .Frame8 - dbw $0c, .Frame9 - dbw $63, .Frame10 - dbw $30, .Frame11 - dbw $66, .Frame12 - dbw $33, .Frame13 - dbw $69, .Frame14 - dbw $6c, .Frame15 - dbw $9c, .Frame16 - dbw $a0, .Frame17 - dbw $a3, .Frame18 - dbw $a7, .Frame19 - dbw $a8, .Frame20 - dbw $98, .Frame21 - dbw $e0, .Frame22 - dbw $e6, .Frame23 - dbw $ca, .Frame24 - dbw $a7, .Frame25 - dbw $00, .Frame26 - dbw $00, .Frame27 - dbw $00, .Frame28 - dbw $00, .Frame29 - dbw $00, .Frame30 - dbw $00, .Frame31 - dbw $80, .Frame32 - dbw $84, .Frame33 - dbw $88, .Frame34 - dbw $8c, .Frame35 - -.Frame0: - db 1 - db $fc, $fc, $00, $00 - -.Frame1: -.Frame2: -.Frame3: -.Frame4: -.Frame5: -.Frame6: -.Frame7: -.Frame8: -.Frame9: -.Frame10: -.Frame11: -.Frame12: -.Frame13: -.Frame14: -.Frame15: -.Frame16: -.Frame17: -.Frame18: - db 9 - db $f4, $f4, $00, $00 - db $f4, $fc, $01, $00 - db $f4, $04, $02, $00 - db $fc, $f4, $10, $00 - db $fc, $fc, $11, $00 - db $fc, $04, $12, $00 - db $04, $f4, $20, $00 - db $04, $fc, $21, $00 - db $04, $04, $22, $00 - -.Frame22: -.Frame23: -.Frame24: - db 12 - db $f8, $e8, $00, $00 - db $f8, $f0, $01, $00 - db $f8, $f8, $02, $00 - db $f8, $00, $03, $00 - db $f8, $08, $04, $00 - db $f8, $10, $05, $00 - db $00, $e8, $10, $00 - db $00, $f0, $11, $00 - db $00, $f8, $12, $00 - db $00, $00, $13, $00 - db $00, $08, $14, $00 - db $00, $10, $15, $00 - -.Frame25: - db 3 - db $fc, $0b, $00, $10 - db $04, $03, $0f, $10 - db $04, $0b, $10, $10 - -.Frame19: - db 6 - db $fc, $f0, $00, $30 - db $fc, $08, $00, $10 - db $04, $f0, $10, $30 - db $04, $f8, $0f, $30 - db $04, $00, $0f, $10 - db $04, $08, $10, $10 - -.Frame20: - db 12 - db $f4, $f0, $00, $10 - db $f4, $f8, $01, $10 - db $f4, $00, $01, $30 - db $f4, $08, $00, $30 - db $fc, $f0, $10, $10 - db $fc, $f8, $11, $10 - db $fc, $00, $11, $30 - db $fc, $08, $10, $30 - db $04, $f0, $20, $10 - db $04, $f8, $21, $10 - db $04, $00, $21, $30 - db $04, $08, $20, $30 - -.Frame21: - db 3 - db $04, $f4, $00, $00 - db $04, $fc, $01, $00 - db $04, $04, $02, $00 - -.Frame26: - db 3 - db $fc, $f4, $bf, $00 - db $fc, $fc, $d5, $00 - db $fc, $04, $d0, $00 - -.Frame27: - db 4 - db $fc, $f0, $bf, $00 - db $fc, $f8, $d1, $00 - db $fc, $00, $d5, $00 - db $fc, $08, $d0, $00 - -.Frame28: - db 4 - db $fc, $f0, $bf, $00 - db $fc, $f8, $d3, $00 - db $fc, $00, $d5, $00 - db $fc, $08, $d0, $00 - -.Frame29: - db 4 - db $fc, $f0, $bf, $00 - db $fc, $f8, $d7, $00 - db $fc, $00, $d5, $00 - db $fc, $08, $d0, $00 - -.Frame30: - db 4 - db $fc, $f0, $bf, $00 - db $fc, $f8, $d1, $00 - db $fc, $00, $d8, $00 - db $fc, $08, $d0, $00 - -.Frame31: - db 4 - db $fc, $f0, $bf, $00 - db $fc, $f8, $d5, $00 - db $fc, $00, $d0, $00 - db $fc, $08, $d0, $00 - -.Frame32: -.Frame33: -.Frame34: -.Frame35: - db 12 - db $f4, $f0, $03, $20 - db $f4, $f8, $02, $20 - db $f4, $00, $01, $20 - db $f4, $08, $00, $20 - db $fc, $f0, $13, $20 - db $fc, $f8, $12, $20 - db $fc, $00, $11, $20 - db $fc, $08, $10, $20 - db $04, $f0, $23, $20 - db $04, $f8, $22, $20 - db $04, $00, $21, $20 - db $04, $08, $20, $20 diff --git a/data/animated_objects_3e_2.asm b/data/animated_objects_3e_2.asm deleted file mode 100755 index 4e9f5b3c..00000000 --- a/data/animated_objects_3e_2.asm +++ /dev/null @@ -1,236 +0,0 @@ -YellowIntro_AnimatedObjectFramesData: - dw Unkn_fa100 - dw Unkn_fa103 - dw Unkn_fa10a - dw Unkn_fa111 - dw Unkn_fa118 - dw Unkn_fa11b - dw Unkn_fa11e - dw Unkn_fa121 - dw Unkn_fa124 - dw Unkn_fa127 - dw Unkn_fa138 - -Unkn_fa100: - frame $00, 32 - endanim - -Unkn_fa103: - frame $01, 4 - frame $02, 4 - frame $03, 4 - dorestart - -Unkn_fa10a: - frame $04, 4 - frame $05, 4 - frame $06, 4 - dorestart - -Unkn_fa111: - frame $07, 4 - frame $08, 4 - frame $09, 4 - dorestart - -Unkn_fa118: - frame $0a, 32 - endanim - -Unkn_fa11b: - frame $0b, 32 - endanim - -Unkn_fa11e: - frame $0c, 32 - endanim - -Unkn_fa121: - frame $0d, 32 - endanim - -Unkn_fa124: - frame $0e, 32 - endanim - -Unkn_fa127: - frame $0f, 31 - frame $11, 2 - frame $0f, 2 - frame $11, 2 - frame $0f, 31 - frame $11, 2 - frame $0f, 23 - frame $10, 32 - endanim - -Unkn_fa138: - frame $12, 4 - frame $13, 4 - dorestart - -YellowIntro_AnimatedObjectOAMData: - dbw $00, Unkn_fa179 - dbw $96, Unkn_fa17e - dbw $98, Unkn_fa17e - dbw $9a, Unkn_fa17e - dbw $0c, Unkn_fa18f - dbw $0e, Unkn_fa18f - dbw $3c, Unkn_fa18f - dbw $60, Unkn_fa1b0 - dbw $70, Unkn_fa1b0 - dbw $80, Unkn_fa1b0 - dbw $90, Unkn_fa201 - dbw $00, Unkn_fa201 - dbw $06, Unkn_fa201 - dbw $c6, Unkn_fa292 - dbw $6d, Unkn_fa2f7 - dbw $f0, Unkn_fa308 - dbw $f4, Unkn_fa308 - dbw $f8, Unkn_fa308 - dbw $9c, Unkn_fa329 - dbw $ec, Unkn_fa329 - -Unkn_fa179: - db 1 - db $fc, $fc, $00, $00 -Unkn_fa17e: - db 4 - db $f8, $f8, $00, $00 - db $f8, $00, $01, $00 - db $00, $f8, $10, $00 - db $00, $00, $11, $00 - -Unkn_fa18f: - db 8 - db $f0, $f8, $00, $00 - db $f0, $00, $01, $00 - db $f8, $f8, $10, $00 - db $f8, $00, $11, $00 - db $00, $f8, $20, $00 - db $00, $00, $20, $20 - db $08, $f8, $21, $00 - db $08, $00, $21, $20 - -Unkn_fa1b0: - db 20 - db $e8, $f8, $00, $00 - db $e8, $00, $01, $00 - db $f0, $f8, $02, $00 - db $f0, $00, $03, $00 - db $f8, $f0, $04, $00 - db $f8, $f8, $05, $00 - db $f8, $00, $06, $00 - db $f8, $08, $04, $20 - db $00, $f0, $07, $00 - db $00, $f8, $08, $00 - db $00, $00, $08, $20 - db $00, $08, $07, $20 - db $08, $f0, $09, $00 - db $08, $f8, $0a, $00 - db $08, $00, $0a, $20 - db $08, $08, $09, $20 - db $10, $f0, $0b, $00 - db $10, $f8, $0c, $00 - db $10, $00, $0c, $20 - db $10, $08, $0b, $20 - -Unkn_fa201: - db 36 - db $e8, $e8, $00, $00 - db $e8, $f0, $01, $00 - db $e8, $f8, $02, $00 - db $e8, $00, $03, $00 - db $e8, $08, $04, $00 - db $e8, $10, $05, $00 - db $f0, $e8, $10, $00 - db $f0, $f0, $11, $00 - db $f0, $f8, $12, $00 - db $f0, $00, $13, $00 - db $f0, $08, $14, $00 - db $f0, $10, $15, $00 - db $f8, $e8, $20, $00 - db $f8, $f0, $21, $00 - db $f8, $f8, $22, $00 - db $f8, $00, $23, $00 - db $f8, $08, $24, $00 - db $f8, $10, $25, $00 - db $00, $e8, $30, $00 - db $00, $f0, $31, $00 - db $00, $f8, $32, $00 - db $00, $00, $33, $00 - db $00, $08, $34, $00 - db $00, $10, $35, $00 - db $08, $e8, $40, $00 - db $08, $f0, $41, $00 - db $08, $f8, $42, $00 - db $08, $00, $43, $00 - db $08, $08, $44, $00 - db $08, $10, $45, $00 - db $10, $e8, $50, $00 - db $10, $f0, $51, $00 - db $10, $f8, $52, $00 - db $10, $00, $53, $00 - db $10, $08, $54, $00 - db $10, $10, $55, $00 - -Unkn_fa292: - db 25 - db $ec, $f0, $00, $00 - db $ec, $f8, $01, $00 - db $ec, $00, $02, $00 - db $ec, $08, $03, $00 - db $ec, $10, $04, $00 - db $f4, $f0, $05, $00 - db $f4, $f8, $06, $00 - db $f4, $00, $07, $00 - db $f4, $08, $08, $00 - db $f4, $10, $09, $00 - db $fc, $f0, $10, $00 - db $fc, $f8, $11, $00 - db $fc, $00, $12, $00 - db $fc, $08, $13, $00 - db $fc, $10, $14, $00 - db $04, $f0, $15, $00 - db $04, $f8, $16, $00 - db $04, $00, $17, $00 - db $04, $08, $18, $00 - db $04, $10, $19, $00 - db $0c, $f0, $20, $00 - db $0c, $f8, $21, $00 - db $0c, $00, $22, $00 - db $0c, $08, $23, $00 - db $0c, $10, $24, $00 - -Unkn_fa2f7: - db 4 - db $fc, $f0, $00, $00 - db $fc, $f8, $01, $00 - db $fc, $00, $01, $20 - db $fc, $08, $00, $20 - -Unkn_fa308: - db 8 - db $f8, $e8, $00, $10 - db $f8, $f0, $01, $10 - db $00, $e8, $02, $10 - db $00, $f0, $03, $10 - db $f8, $08, $01, $30 - db $f8, $10, $00, $30 - db $00, $08, $03, $30 - db $00, $10, $02, $30 - -Unkn_fa329: - db 12 - db $f8, $d8, $00, $10 - db $f8, $e0, $01, $10 - db $f8, $e8, $02, $10 - db $00, $d8, $10, $10 - db $00, $e0, $11, $10 - db $00, $e8, $12, $10 - db $f8, $10, $02, $30 - db $f8, $18, $01, $30 - db $f8, $20, $00, $30 - db $00, $10, $12, $30 - db $00, $18, $11, $30 - db $00, $20, $10, $30 diff --git a/data/bg_map_attributes.asm b/data/bg_map_attributes.asm deleted file mode 100644 index 81535e72..00000000 --- a/data/bg_map_attributes.asm +++ /dev/null @@ -1,506 +0,0 @@ -BGMapAttributes_Unknown1: - db $23 - dw $000d - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - -BGMapAttributes_Unknown2: - db $23 - dw $000d - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - -BGMapAttributes_GameFreakIntro: - db $23 - dw $000d - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$01,$01,$01,$02,$02,$00,$00,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$01,$01,$01,$02,$02,$00,$00,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$01,$01,$01,$02,$02,$00,$00,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - -BGMapAttributes_TrainerCard: - db $23 - dw $000d - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$01,$01,$00,$00,$03,$03,$00,$00,$00,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$01,$01,$00,$00,$03,$03,$00,$01,$01,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$02,$02,$00,$00,$03,$03,$00,$00,$02,$02,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$02,$02,$00,$00,$03,$03,$00,$00,$02,$02,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - -BGMapAttributes_PartyMenu: - db $23 - dw $000d - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - -BGMapAttributes_NidorinoIntro: - db $23 - dw $000d - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - -BGMapAttributes_TitleScreen: - db $23 - dw $024d - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 -; vBGMap1 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - -BGMapAttributes_Slots: - db $23 - dw $000d - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - -BGMapAttributes_Pokedex: - db $23 - dw $000d - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - -BGMapAttributes_StatusScreen: - db $23 - dw $000d - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - -BGMapAttributes_Battle: - db $23 - dw $000d - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - -BGMapAttributes_WholeScreen: - db $3f - dw $000d - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - -BGMapAttributes_Unknown13: - db $23 - dw $024d - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 -; vBGMap1 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 diff --git a/data/cgb/bg_map_attributes.asm b/data/cgb/bg_map_attributes.asm new file mode 100644 index 00000000..81535e72 --- /dev/null +++ b/data/cgb/bg_map_attributes.asm @@ -0,0 +1,506 @@ +BGMapAttributes_Unknown1: + db $23 + dw $000d + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + +BGMapAttributes_Unknown2: + db $23 + dw $000d + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + +BGMapAttributes_GameFreakIntro: + db $23 + dw $000d + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$01,$01,$01,$02,$02,$00,$00,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$01,$01,$01,$02,$02,$00,$00,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$01,$01,$01,$02,$02,$00,$00,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + +BGMapAttributes_TrainerCard: + db $23 + dw $000d + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$01,$01,$00,$00,$03,$03,$00,$00,$00,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$01,$01,$00,$00,$03,$03,$00,$01,$01,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$02,$02,$00,$00,$03,$03,$00,$00,$02,$02,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$02,$02,$00,$00,$03,$03,$00,$00,$02,$02,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + +BGMapAttributes_PartyMenu: + db $23 + dw $000d + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$00,$00,$01,$01,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + +BGMapAttributes_NidorinoIntro: + db $23 + dw $000d + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + +BGMapAttributes_TitleScreen: + db $23 + dw $024d + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +; vBGMap1 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + +BGMapAttributes_Slots: + db $23 + dw $000d + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + +BGMapAttributes_Pokedex: + db $23 + dw $000d + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + +BGMapAttributes_StatusScreen: + db $23 + dw $000d + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + +BGMapAttributes_Battle: + db $23 + dw $000d + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + +BGMapAttributes_WholeScreen: + db $3f + dw $000d + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + +BGMapAttributes_Unknown13: + db $23 + dw $024d + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$03,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +; vBGMap1 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 diff --git a/data/credits/credits_mons.asm b/data/credits/credits_mons.asm index 15212048..4dd69409 100755 --- a/data/credits/credits_mons.asm +++ b/data/credits/credits_mons.asm @@ -15,6 +15,6 @@ CreditsMons: db NIDOKING db PARASECT -rept 9 +REPT 9 db GENGAR -endr +ENDR diff --git a/data/maps/bit_5_maps.asm b/data/maps/bit_5_maps.asm new file mode 100644 index 00000000..c32bb114 --- /dev/null +++ b/data/maps/bit_5_maps.asm @@ -0,0 +1,30 @@ +; SetMapSpecificScriptFlagsOnMapReload sets bit 5 +; of wCurrentMapScriptFlags for these maps. + +Bit5Maps: + db SILPH_CO_2F + db SILPH_CO_3F + db SILPH_CO_4F + db SILPH_CO_5F + db SILPH_CO_6F + db SILPH_CO_7F + db SILPH_CO_8F + db SILPH_CO_9F + db SILPH_CO_10F + db SILPH_CO_11F + db POKEMON_MANSION_2F + db POKEMON_MANSION_3F + db POKEMON_MANSION_B1F + db POKEMON_MANSION_1F + db CINNABAR_GYM + db GAME_CORNER + db ROCKET_HIDEOUT_B1F + db ROCKET_HIDEOUT_B4F + db VICTORY_ROAD_3F + db VICTORY_ROAD_1F + db VICTORY_ROAD_2F + db LANCES_ROOM + db LORELEIS_ROOM + db BRUNOS_ROOM + db AGATHAS_ROOM + db -1 ; end diff --git a/data/maps/headers/BeachHouse.asm b/data/maps/headers/BeachHouse.asm deleted file mode 100644 index b1b69e5a..00000000 --- a/data/maps/headers/BeachHouse.asm +++ /dev/null @@ -1,8 +0,0 @@ -BeachHouse_h: - db BEACH_HOUSE_TILESET - db BEACH_HOUSE_HEIGHT, BEACH_HOUSE_WIDTH ; dimensions (y, x) - dw BeachHouse_Blocks ; blocks - dw BeachHouse_TextPointers ; texts - dw BeachHouse_Script ; scripts - db 0 ; connections - dw BeachHouse_Object ; objects diff --git a/data/maps/headers/SummerBeachHouse.asm b/data/maps/headers/SummerBeachHouse.asm new file mode 100644 index 00000000..64f55acc --- /dev/null +++ b/data/maps/headers/SummerBeachHouse.asm @@ -0,0 +1,3 @@ + + map_header SummerBeachHouse, SUMMER_BEACH_HOUSE, BEACH_HOUSE, 0 + end_map_header diff --git a/data/maps/hide_show_data.asm b/data/maps/hide_show_data.asm index 0e26900f..74251978 100755 --- a/data/maps/hide_show_data.asm +++ b/data/maps/hide_show_data.asm @@ -571,11 +571,8 @@ SeafoamIslandsB4FHS: db SEAFOAM_ISLANDS_B4F, $01, HIDE db SEAFOAM_ISLANDS_B4F, $02, HIDE db SEAFOAM_ISLANDS_B4F, $03, SHOW - -BluesHouseHSCopy: -; doesn't seem to be referenced +BluesHouseHSCopy: ; unreferenced db BLUES_HOUSE, $01, SHOW db BLUES_HOUSE, $02, HIDE db BLUES_HOUSE, $03, SHOW - - db $FF, $01, SHOW + db $FF, $01, SHOW ; end diff --git a/data/maps/map_header_banks.asm b/data/maps/map_header_banks.asm index 98e5b5f5..bbc7e13c 100644 --- a/data/maps/map_header_banks.asm +++ b/data/maps/map_header_banks.asm @@ -248,4 +248,4 @@ MapHeaderBanks:: db BANK(LoreleisRoom_h) db BANK(BrunosRoom_h) db BANK(AgathasRoom_h) - db BANK(BeachHouse_h) + db BANK(SummerBeachHouse_h) diff --git a/data/maps/map_header_pointers.asm b/data/maps/map_header_pointers.asm index 6ea31795..25a814cf 100644 --- a/data/maps/map_header_pointers.asm +++ b/data/maps/map_header_pointers.asm @@ -248,4 +248,4 @@ MapHeaderPointers:: dw LoreleisRoom_h dw BrunosRoom_h dw AgathasRoom_h ;247 - dw BeachHouse_h + dw SummerBeachHouse_h diff --git a/data/maps/objects/BeachHouse.asm b/data/maps/objects/BeachHouse.asm deleted file mode 100644 index 1ba99f87..00000000 --- a/data/maps/objects/BeachHouse.asm +++ /dev/null @@ -1,18 +0,0 @@ -BeachHouse_Object: - db $a ; border block - - def_warps - warp 2, 7, 0, LAST_MAP - warp 3, 7, 0, LAST_MAP - - def_signs - sign 3, 0, 3 - sign 7, 0, 4 - sign 11, 0, 5 - sign 13, 1, 6 - - def_objects - object SPRITE_FISHING_GURU, 2, 3, STAY, DOWN, 1 ; surfin' dude - object SPRITE_PIKACHU, 5, 3, WALK, 1, 2 ; pikachu - - def_warps_to BEACH_HOUSE diff --git a/data/maps/objects/Route19.asm b/data/maps/objects/Route19.asm index 340c48f0..55511b21 100755 --- a/data/maps/objects/Route19.asm +++ b/data/maps/objects/Route19.asm @@ -2,7 +2,7 @@ Route19_Object: db $43 ; border block def_warps - warp 5, 9, 0, BEACH_HOUSE + warp 5, 9, 0, SUMMER_BEACH_HOUSE def_signs sign 11, 11, 11 diff --git a/data/maps/objects/Route2.asm b/data/maps/objects/Route2.asm index e939b0dd..6977133b 100755 --- a/data/maps/objects/Route2.asm +++ b/data/maps/objects/Route2.asm @@ -22,8 +22,7 @@ Route2_Object: ; unused warp_to 2, 7, 4 - dw $c712 - db $9, $7 + db $12, $c7, $9, $7 warp_to 2, 7, 4 warp_to 2, 7, 4 warp_to 2, 7, 4 diff --git a/data/maps/objects/SummerBeachHouse.asm b/data/maps/objects/SummerBeachHouse.asm new file mode 100644 index 00000000..c503b8a7 --- /dev/null +++ b/data/maps/objects/SummerBeachHouse.asm @@ -0,0 +1,18 @@ +SummerBeachHouse_Object: + db $a ; border block + + def_warps + warp 2, 7, 0, LAST_MAP + warp 3, 7, 0, LAST_MAP + + def_signs + sign 3, 0, 3 + sign 7, 0, 4 + sign 11, 0, 5 + sign 13, 1, 6 + + def_objects + object SPRITE_FISHING_GURU, 2, 3, STAY, DOWN, 1 ; surfin' dude + object SPRITE_PIKACHU, 5, 3, WALK, 1, 2 ; pikachu + + def_warps_to SUMMER_BEACH_HOUSE diff --git a/data/maps/songs.asm b/data/maps/songs.asm index 1b043bfa..afafe3b3 100644 --- a/data/maps/songs.asm +++ b/data/maps/songs.asm @@ -247,4 +247,4 @@ MapSongBanks:: db MUSIC_GYM, BANK(Music_Gym) ; LORELEIS_ROOM db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; BRUNOS_ROOM db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; AGATHAS_ROOM - db MUSIC_ROUTES3, BANK(Music_Routes3) ; BEACH_HOUSE + db MUSIC_ROUTES3, BANK(Music_Routes3) ; SUMMER_BEACH_HOUSE diff --git a/data/maps/town_map_entries.asm b/data/maps/town_map_entries.asm index 6e754558..8ad4bc28 100755 --- a/data/maps/town_map_entries.asm +++ b/data/maps/town_map_entries.asm @@ -114,5 +114,5 @@ InternalMapEntries: 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 BEACH_HOUSE, 6, 15, Route19Name + internal_map SUMMER_BEACH_HOUSE, 6, 15, Route19Name db -1 ; end diff --git a/data/moves/grammar.asm b/data/moves/grammar.asm index 5855c98c..e44b1abc 100644 --- a/data/moves/grammar.asm +++ b/data/moves/grammar.asm @@ -1,6 +1,4 @@ ExclamationPointMoveSets: -; a grammar mistake was fixed (only concerning japanese) -; BIDE is in category 3, moved from category 2 ; set 0 db SWORDS_DANCE db GROWTH @@ -18,7 +16,7 @@ ExclamationPointMoveSets: db TELEPORT db MIMIC db DOUBLE_TEAM - db BIDE + db BIDE ; corrected JP grammar: moved from set 1 in pokered db BARRAGE db 0 ; end set diff --git a/data/pikachu/pikachu_emotions.asm b/data/pikachu/pikachu_emotions.asm new file mode 100755 index 00000000..f72beaa4 --- /dev/null +++ b/data/pikachu/pikachu_emotions.asm @@ -0,0 +1,266 @@ +PikachuEmotion0: + db $ff + +PikachuEmotion2: + pikaemotion_dummy2 + pikaemotion_emotebubble SMILE_BUBBLE + pikaemotion_pcm PikachuCry35 + pikaemotion_pikapic PikaPicAnimScript2 + db $ff + +PikachuEmotion10: + pikaemotion_dummy2 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES + pikaemotion_emotebubble HEART_BUBBLE + pikaemotion_pcm PikachuCry5 + pikaemotion_pikapic PikaPicAnimScript10 + db $ff + +PikachuEmotion7: + pikaemotion_dummy2 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES + pikaemotion_movement PikachuMovementData_fd224 + pikaemotion_pcm PikachuCry1 + pikaemotion_movement PikachuMovementData_fd224 + pikaemotion_pikapic PikaPicAnimScript7 + db $ff + +PikachuEmotion4: + pikaemotion_dummy2 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES + pikaemotion_movement PikachuMovementData_fd230 + pikaemotion_pcm PikachuCry29 + pikaemotion_pikapic PikaPicAnimScript4 + db $ff + +PikachuEmotion1: + pikaemotion_dummy2 + pikaemotion_pcm + pikaemotion_pikapic PikaPicAnimScript1 + db $ff + +PikachuEmotion8: + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry39 + pikaemotion_pikapic PikaPicAnimScript8 + db $ff + +PikachuEmotion5: + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry31 + pikaemotion_pikapic PikaPicAnimScript5 + db $ff + +PikachuEmotion6: + pikaemotion_dummy2 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES + pikaemotion_pcm + pikaemotion_movement PikachuMovementData_fd21e + pikaemotion_emotebubble SKULL_BUBBLE + pikaemotion_pikapic PikaPicAnimScript6 + db $ff + +PikachuEmotion3: + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry40 + pikaemotion_pikapic PikaPicAnimScript3 + db $ff + +PikachuEmotion9: + pikaemotion_dummy2 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES + pikaemotion_pcm PikachuCry6 + pikaemotion_movement PikachuMovementData_fd218 + pikaemotion_emotebubble SKULL_BUBBLE + pikaemotion_pikapic PikaPicAnimScript9 + db $ff + +PikachuEmotion11: + pikaemotion_emotebubble ZZZ_BUBBLE + pikaemotion_pcm PikachuCry37 + pikaemotion_pikapic PikaPicAnimScript11 + db $ff + +PikachuEmotion12: + pikaemotion_dummy2 + pikaemotion_pcm + pikaemotion_pikapic PikaPicAnimScript12 + db $ff + +PikachuEmotion13: + pikaemotion_dummy2 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES + pikaemotion_movement PikachuMovementData_fd21e + pikaemotion_pikapic PikaPicAnimScript13 + db $ff + +PikachuEmotion14: + pikaemotion_dummy2 + pikaemotion_emotebubble BOLT_BUBBLE + pikaemotion_pcm PikachuCry10 + pikaemotion_pikapic PikaPicAnimScript14 + db $ff + +PikachuEmotion15: + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry34 + pikaemotion_pikapic PikaPicAnimScript15 + db $ff + +PikachuEmotion16: + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry33 + pikaemotion_pikapic PikaPicAnimScript16 + db $ff + +PikachuEmotion17: + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry13 + pikaemotion_pikapic PikaPicAnimScript17 + db $ff + +PikachuEmotion18: + pikaemotion_dummy2 + pikaemotion_pcm + pikaemotion_pikapic PikaPicAnimScript18 + db $ff + +PikachuEmotion19: + pikaemotion_dummy2 + pikaemotion_emotebubble HEART_BUBBLE + pikaemotion_pcm PikachuCry33 + pikaemotion_pikapic PikaPicAnimScript19 + db $ff + +PikachuEmotion20: + pikaemotion_dummy2 + pikaemotion_emotebubble HEART_BUBBLE + pikaemotion_pcm PikachuCry5 + pikaemotion_pikapic PikaPicAnimScript20 + db $ff + +PikachuEmotion21: + pikaemotion_dummy2 + pikaemotion_emotebubble FISH_BUBBLE + pikaemotion_pcm + pikaemotion_pikapic PikaPicAnimScript21 + db $ff + +PikachuEmotion22: + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry4 + pikaemotion_pikapic PikaPicAnimScript22 + db $ff + +PikachuEmotion23: + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry19 + pikaemotion_pikapic PikaPicAnimScript23 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW + db $ff + +PikachuEmotion24: + pikaemotion_dummy2 + pikaemotion_emotebubble EXCLAMATION_BUBBLE + pikaemotion_pcm + pikaemotion_pikapic PikaPicAnimScript24 + db $ff + +PikachuEmotion25: + pikaemotion_dummy2 + pikaemotion_emotebubble BOLT_BUBBLE + pikaemotion_pcm PikachuCry35 + pikaemotion_pikapic PikaPicAnimScript25 + db $ff + +PikachuEmotion26: + pikaemotion_dummy2 + pikaemotion_emotebubble ZZZ_BUBBLE + pikaemotion_pcm PikachuCry37 + pikaemotion_pikapic PikaPicAnimScript26 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW + pikaemotion_subcmd PIKAEMOTION_SUBCMD_CHECKPEWTERCENTER + db $ff + +PikachuEmotion27: + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry9 + pikaemotion_pikapic PikaPicAnimScript27 + db $ff + +PikachuEmotion28: + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry15 + pikaemotion_pikapic PikaPicAnimScript28 + db $ff + +PikachuEmotion29: + pikaemotion_pcm PikachuCry5 + pikaemotion_pikapic PikaPicAnimScript10 + db $ff + +PikachuEmotion30: + pikaemotion_9 + pikaemotion_emotebubble HEART_BUBBLE + pikaemotion_pcm PikachuCry5 + pikaemotion_pikapic PikaPicAnimScript20 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW + pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADFONT + pikaemotion_subcmd PIKAEMOTION_SUBCMD_CHECKLAVENDERTOWER + db $ff + +PikachuEmotion31: + pikaemotion_pcm PikachuCry19 + pikaemotion_pikapic PikaPicAnimScript23 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW + pikaemotion_subcmd PIKAEMOTION_SUBCMD_CHECKBILLSHOUSE + db $ff + +PikachuEmotion32: + pikaemotion_pcm PikachuCry26 + pikaemotion_pikapic PikaPicAnimScript23 + db $ff + +PikachuMovementData_fd218: + db $00 + db $39, 2 - 1 + db $3e, 31 - 1 + db $3f + +PikachuMovementData_fd21e: + db $00 + db $39, 1 - 1 + db $3e, 31 - 1 + db $3f + +PikachuMovementData_fd224: + db $00 + db $3c, 8 - 1, (2 << 4) | (16 - 1) + db $3c, 8 - 1, (2 << 4) | (16 - 1) + db $3f + +PikachuMovementData_fd22c: + db $3b, 32 - 1, 4 - 1 + db $3f + +PikachuMovementData_fd230: + db $00 + db $3c, 16 - 1, (1 << 4) | (16 - 1) + db $3c, 16 - 1, (1 << 4) | (16 - 1) + db $3f + +PikachuMovementData_fd238: + db $00 + db $05, 8 - 1 + db $39, 1 - 1 + db $05, 8 - 1 + db $06, 8 - 1 + db $39, 1 - 1 + db $06, 8 - 1 + db $08, 8 - 1 + db $39, 1 - 1 + db $08, 8 - 1 + db $07, 8 - 1 + db $39, 1 - 1 + db $07, 8 - 1 + db $3f diff --git a/data/pikachu/pikachu_pic_animation.asm b/data/pikachu/pikachu_pic_animation.asm new file mode 100755 index 00000000..a9e3c5e7 --- /dev/null +++ b/data/pikachu/pikachu_pic_animation.asm @@ -0,0 +1,402 @@ +PikaPicAnimThunderboltPals: + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db -1 ; end + +Data_fe26b: + pikapic_loadgfx Pic_e4000 + pikapic_loadgfx Pic_e49d1 + pikapic_loadgfx PikachuSprite + pikapic_animation PikaPicAnimBGFrames_1, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_2, $b2, $5, $5 + pikapic_animation PikaPicAnimBGFrames_3, $b6, $5, $5 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript0: +PikaPicAnimScript1: +PikaPicAnimScript29: + pikapic_setduration 40 + pikapic_loadgfx Pic_e4000 + pikapic_loadgfx GFX_e40cc + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_6, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry PikachuCry3 + pikapic_looptofinish + +PikaPicAnimScript2: + pikapic_setduration 44 + pikapic_loadgfx Pic_e411c + pikapic_loadgfx GFX_e41d2 + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_7, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript3: + pikapic_setduration 80 + pikapic_loadgfx Pic_e4272 + pikapic_loadgfx GFX_e4323 + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_8, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript4: + pikapic_setduration 70 + pikapic_loadgfx Pic_e4383 + pikapic_loadgfx GFX_e444b + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_9, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript5: + pikapic_setduration 32 + pikapic_loadgfx Pic_e458b + pikapic_loadgfx GFX_e463b + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_10, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript6: + pikapic_setduration 50 + pikapic_loadgfx Pic_e467b + pikapic_loadgfx GFX_e472e + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_11, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry PikachuCry38 + pikapic_looptofinish + +PikaPicAnimScript7: + pikapic_setduration 58 + pikapic_loadgfx Pic_e476e + pikapic_loadgfx GFX_e4841 + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_12, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript8: + pikapic_setduration 44 + pikapic_loadgfx Pic_e49d1 + pikapic_loadgfx GFX_e4a99 + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_13, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript9: + pikapic_setduration 56 + pikapic_loadgfx Pic_e4b39 + pikapic_loadgfx GFX_e4bde + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_14, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript10: + pikapic_setduration 56 + pikapic_loadgfx Pic_e4c3e + pikapic_loadgfx GFX_e4ce0 + pikapic_loadgfx GFX_e4e70 + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_16, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript11: + pikapic_setduration 100 + pikapic_loadgfx Pic_e5000 + pikapic_loadgfx GFX_e50af + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_17, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript12: + pikapic_setduration 50 + pikapic_loadgfx Pic_e523f + pikapic_loadgfx GFX_e52fe + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_18, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry PikachuCry25 + pikapic_looptofinish + +PikaPicAnimScript13: + pikapic_setduration 50 + pikapic_loadgfx Pic_e548e + pikapic_loadgfx GFX_e5541 + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_19, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript14: + pikapic_setduration 40 + pikapic_loadgfx Pic_e56d1 + pikapic_loadgfx GFX_e5794 + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_20, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript15: + pikapic_setduration 50 + pikapic_loadgfx Pic_e5924 + pikapic_loadgfx GFX_e59ed + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_21, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript16: + pikapic_setduration 32 + pikapic_loadgfx Pic_e5b7d + pikapic_loadgfx GFX_e5c4d + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_22, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript17: + pikapic_setduration 100 + pikapic_loadgfx Pic_e5ddd + pikapic_loadgfx GFX_e5e90 + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_23, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript18: + pikapic_setduration 32 + pikapic_loadgfx GFX_e6020 + pikapic_loadgfx GFX_e61b0 + pikapic_animation PikaPicAnimBGFrames_5, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_24, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry PikachuCry18 + pikapic_looptofinish + +PikaPicAnimScript19: + pikapic_setduration 44 + pikapic_loadgfx Pic_e6340 + pikapic_loadgfx GFX_e63f7 + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_25, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript20: + pikapic_setduration 50 + pikapic_loadgfx Pic_e6587 + pikapic_loadgfx GFX_e6646 + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_26, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript21: + pikapic_setduration 40 + pikapic_loadgfx Pic_e67d6 + pikapic_loadgfx GFX_e682f + pikapic_loadgfx GFX_e69bf + pikapic_loadgfx GFX_e6b4f + pikapic_loadgfx GFX_e6cdf + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_27, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry PikachuCry20 + pikapic_looptofinish + +PikaPicAnimScript22: + pikapic_setduration 40 + pikapic_loadgfx GFX_e6e6f + pikapic_loadgfx GFX_e6fff + pikapic_animation PikaPicAnimBGFrames_5, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_28, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript23: + pikapic_setduration 70 + pikapic_loadgfx GFX_e718f + pikapic_loadgfx GFX_e731f + pikapic_animation PikaPicAnimBGFrames_5, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_29, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript24: + pikapic_setduration 60 + pikapic_loadgfx GFX_e74af + pikapic_loadgfx GFX_e763f + pikapic_animation PikaPicAnimBGFrames_5, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_30, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript25: + pikapic_setduration 50 + pikapic_loadgfx Pic_e77cf + pikapic_loadgfx GFX_e7863 + pikapic_loadgfx GFX_e79f3 + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_31, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_writebyte 13 + pikapic_waitbgmap + pikapic_thunderbolt + pikapic_ret + +Data_fe51f: + pikapic_waitbgmap +PikaPicAnimScript26: + pikapic_setduration 100 + pikapic_loadgfx Pic_e5000 + pikapic_loadgfx GFX_e50af + pikapic_loadgfx GFX_e7b83 + pikapic_loadgfx GFX_e7d13 + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_32, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript27: + pikapic_setduration 30 + pikapic_loadgfx Pic_f0abf + pikapic_loadgfx GFX_f0b64 + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_33, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +PikaPicAnimScript28: + pikapic_setduration 64 + pikapic_loadgfx Pic_f0cf4 + pikapic_loadgfx GFX_f0d82 + pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 + pikapic_animation PikaPicAnimBGFrames_34, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_looptofinish + +pikapicanimgfx: MACRO +IF _NARG == 2 +\2_id:: + db \1 ; size (-1 if compressed) + dba \2 ; pointer +ELSE + dbbw \1, \2, \3 ; size, bank, address +ENDC +ENDM + +PikaPicAnimGFXHeaders: + pikapicanimgfx 1, $39, NULL ; 00 + pikapicanimgfx -1, Pic_e4000 ; 01 + pikapicanimgfx 5, GFX_e40cc ; 02 + pikapicanimgfx -1, Pic_e411c ; 03 + pikapicanimgfx 10, GFX_e41d2 ; 04 + pikapicanimgfx -1, Pic_e4272 ; 05 + pikapicanimgfx 6, GFX_e4323 ; 06 + pikapicanimgfx -1, Pic_e4383 ; 07 + pikapicanimgfx 20, GFX_e444b ; 08 + pikapicanimgfx -1, Pic_e458b ; 09 + pikapicanimgfx 4, GFX_e463b ; 0a + pikapicanimgfx -1, Pic_e467b ; 0b + pikapicanimgfx 4, GFX_e472e ; 0c + pikapicanimgfx -1, Pic_e476e ; 0d + pikapicanimgfx 25, GFX_e4841 ; 0e + pikapicanimgfx -1, Pic_e49d1 ; 0f + pikapicanimgfx 10, GFX_e4a99 ; 00 + pikapicanimgfx -1, Pic_e4b39 ; 11 + pikapicanimgfx 6, GFX_e4bde ; 12 + pikapicanimgfx -1, Pic_e4c3e ; 13 + pikapicanimgfx 25, GFX_e4ce0 ; 14 + pikapicanimgfx 25, GFX_e4e70 ; 15 + pikapicanimgfx -1, Pic_e5000 ; 16 + pikapicanimgfx 25, GFX_e50af ; 17 + pikapicanimgfx -1, Pic_e523f ; 18 + pikapicanimgfx 25, GFX_e52fe ; 19 + pikapicanimgfx -1, Pic_e548e ; 1a + pikapicanimgfx 25, GFX_e5541 ; 1b + pikapicanimgfx -1, Pic_e56d1 ; 1c + pikapicanimgfx 25, GFX_e5794 ; 1d + pikapicanimgfx -1, Pic_e5924 ; 1e + pikapicanimgfx 25, GFX_e59ed ; 1f + pikapicanimgfx -1, Pic_e5b7d ; 20 + pikapicanimgfx 25, GFX_e5c4d ; 21 + pikapicanimgfx -1, Pic_e5ddd ; 22 + pikapicanimgfx 25, GFX_e5e90 ; 23 + pikapicanimgfx 25, GFX_e6020 ; 24 + pikapicanimgfx 25, GFX_e61b0 ; 25 + pikapicanimgfx -1, Pic_e6340 ; 26 + pikapicanimgfx 25, GFX_e63f7 ; 27 + pikapicanimgfx -1, Pic_e6587 ; 28 + pikapicanimgfx 25, GFX_e6646 ; 29 + pikapicanimgfx -1, Pic_e67d6 ; 2a + pikapicanimgfx 25, GFX_e682f ; 2b + pikapicanimgfx 25, GFX_e69bf ; 2c + pikapicanimgfx 25, GFX_e6b4f ; 2d + pikapicanimgfx 25, GFX_e6cdf ; 2e + pikapicanimgfx 25, GFX_e6e6f ; 2f + pikapicanimgfx 25, GFX_e6fff ; 30 + pikapicanimgfx 25, GFX_e718f ; 31 + pikapicanimgfx 25, GFX_e731f ; 32 + pikapicanimgfx 25, GFX_e74af ; 33 + pikapicanimgfx 25, GFX_e763f ; 34 + pikapicanimgfx -1, Pic_e77cf ; 35 + pikapicanimgfx 25, GFX_e7863 ; 36 + pikapicanimgfx 25, GFX_e79f3 ; 37 + pikapicanimgfx 25, GFX_e7b83 ; 38 + pikapicanimgfx 25, GFX_e7d13 ; 39 + pikapicanimgfx -1, Pic_f0abf ; 3a + pikapicanimgfx 25, GFX_f0b64 ; 3b + pikapicanimgfx -1, Pic_f0cf4 ; 3c + pikapicanimgfx 25, GFX_f0d82 ; 3d + pikapicanimgfx 24, PikachuSprite ; 3e diff --git a/data/pikachu/pikachu_pic_objects.asm b/data/pikachu/pikachu_pic_objects.asm new file mode 100755 index 00000000..c3a44bc9 --- /dev/null +++ b/data/pikachu/pikachu_pic_objects.asm @@ -0,0 +1,308 @@ +pikaanim_def: MACRO +\1_id: + dw \1 +ENDM + +PikaPicAnimBGFramesPointers: + pikaanim_def PikaPicAnimBGFrames_0 ; 00 + pikaanim_def PikaPicAnimBGFrames_1 ; 01 + pikaanim_def PikaPicAnimBGFrames_2 ; 02 + pikaanim_def PikaPicAnimBGFrames_3 ; 03 + pikaanim_def PikaPicAnimBGFrames_4 ; 04 + pikaanim_def PikaPicAnimBGFrames_5 ; 05 + pikaanim_def PikaPicAnimBGFrames_6 ; 06 + pikaanim_def PikaPicAnimBGFrames_7 ; 07 + pikaanim_def PikaPicAnimBGFrames_8 ; 08 + pikaanim_def PikaPicAnimBGFrames_9 ; 09 + pikaanim_def PikaPicAnimBGFrames_10 ; 0a + pikaanim_def PikaPicAnimBGFrames_11 ; 0b + pikaanim_def PikaPicAnimBGFrames_12 ; 0c + pikaanim_def PikaPicAnimBGFrames_13 ; 0d + pikaanim_def PikaPicAnimBGFrames_14 ; 0e + pikaanim_def PikaPicAnimBGFrames_15 ; 0f + pikaanim_def PikaPicAnimBGFrames_16 ; 10 + pikaanim_def PikaPicAnimBGFrames_17 ; 11 + pikaanim_def PikaPicAnimBGFrames_18 ; 12 + pikaanim_def PikaPicAnimBGFrames_19 ; 13 + pikaanim_def PikaPicAnimBGFrames_20 ; 14 + pikaanim_def PikaPicAnimBGFrames_21 ; 15 + pikaanim_def PikaPicAnimBGFrames_22 ; 16 + pikaanim_def PikaPicAnimBGFrames_23 ; 17 + pikaanim_def PikaPicAnimBGFrames_24 ; 18 + pikaanim_def PikaPicAnimBGFrames_25 ; 19 + pikaanim_def PikaPicAnimBGFrames_26 ; 1a + pikaanim_def PikaPicAnimBGFrames_27 ; 1b + pikaanim_def PikaPicAnimBGFrames_28 ; 1c + pikaanim_def PikaPicAnimBGFrames_29 ; 1d + pikaanim_def PikaPicAnimBGFrames_30 ; 1e + pikaanim_def PikaPicAnimBGFrames_31 ; 1f + pikaanim_def PikaPicAnimBGFrames_32 ; 20 + pikaanim_def PikaPicAnimBGFrames_33 ; 21 + pikaanim_def PikaPicAnimBGFrames_34 ; 22 + pikaanim_def PikaPicAnimBGFrames_35 ; 23 + +pikaframe: MACRO + db (\1_id - PikaPicTilemapPointers) / 2, \2 +ENDM + +pikaframedelay EQUS "db 0," +pikaframeend EQUS "db $e0" + +PikaPicAnimBGFrames_0: +PikaPicAnimBGFrames_1: + ; Tilemap idx, duration + pikaframe PikaAnimTilemap_1, 20 + pikaframe PikaAnimTilemap_7, 2 + pikaframe PikaAnimTilemap_1, 1 + pikaframe PikaAnimTilemap_7, 2 + pikaframe PikaAnimTilemap_1, 1 + pikaframe PikaAnimTilemap_7, 8 + pikaframeend + +PikaPicAnimBGFrames_fdc1e: ; unreferenced + pikaframe PikaAnimTilemap_2, 2 + pikaframe PikaAnimTilemap_1, 1 + pikaframe PikaAnimTilemap_2, 2 + pikaframe PikaAnimTilemap_1, 1 + pikaframe PikaAnimTilemap_2, 8 + pikaframeend + +PikaPicAnimBGFrames_2: + pikaframedelay 8 + pikaframe PikaAnimTilemap_8, 8 + pikaframedelay 8 + pikaframe PikaAnimTilemap_8, 8 + pikaframeend + +PikaPicAnimBGFrames_3: + pikaframe PikaAnimTilemap_8, 8 + pikaframedelay 8 + pikaframe PikaAnimTilemap_8, 8 + pikaframedelay 8 + pikaframeend + +PikaPicAnimBGFrames_4: +PikaPicAnimBGFrames_35: + pikaframe PikaAnimTilemap_1, 0 + pikaframeend + +PikaPicAnimBGFrames_5: + pikaframe PikaAnimTilemap_9, 0 + pikaframeend + +PikaPicAnimBGFrames_6: + pikaframedelay 2 + pikaframe PikaAnimTilemap_14, 4 + pikaframedelay 8 + pikaframe PikaAnimTilemap_14, 4 + pikaframedelay 64 + pikaframe PikaAnimTilemap_14, 4 + pikaframedelay 64 + pikaframeend + +PikaPicAnimBGFrames_7: + pikaframedelay 4 + pikaframe PikaAnimTilemap_15, 4 + pikaframedelay 4 + pikaframe PikaAnimTilemap_15, 4 + pikaframedelay 8 + pikaframe PikaAnimTilemap_15, 4 + pikaframedelay 8 + pikaframe PikaAnimTilemap_15, 4 + pikaframeend + +PikaPicAnimBGFrames_8: + pikaframe PikaAnimTilemap_16, 1 + pikaframedelay 1 + pikaframe PikaAnimTilemap_16, 1 + pikaframedelay 64 + pikaframe PikaAnimTilemap_16, 1 + pikaframedelay 64 + pikaframeend + +PikaPicAnimBGFrames_9: + pikaframedelay 8 + pikaframe PikaAnimTilemap_17, 8 + pikaframedelay 20 + pikaframe PikaAnimTilemap_17, 8 + pikaframeend + +PikaPicAnimBGFrames_10: + pikaframedelay 2 + pikaframe PikaAnimTilemap_18, 2 + pikaframedelay 2 + pikaframe PikaAnimTilemap_18, 64 + pikaframedelay 3 + pikaframe PikaAnimTilemap_18, 64 + pikaframeend + +PikaPicAnimBGFrames_11: + pikaframedelay 8 + pikaframe PikaAnimTilemap_19, 64 + pikaframedelay 4 + pikaframe PikaAnimTilemap_19, 64 + pikaframeend + +PikaPicAnimBGFrames_12: + pikaframe PikaAnimTilemap_20, 8 + pikaframedelay 2 + pikaframe PikaAnimTilemap_20, 8 + pikaframedelay 2 + pikaframe PikaAnimTilemap_20, 8 + pikaframeend + +PikaPicAnimBGFrames_13: + pikaframe PikaAnimTilemap_21, 4 + pikaframedelay 8 + pikaframe PikaAnimTilemap_21, 4 + pikaframedelay 64 + pikaframe PikaAnimTilemap_21, 4 + pikaframedelay 64 + pikaframeend + +PikaPicAnimBGFrames_14: + pikaframedelay 2 + pikaframe PikaAnimTilemap_22, 2 + pikaframedelay 2 + pikaframe PikaAnimTilemap_22, 2 + pikaframedelay 20 + pikaframe PikaAnimTilemap_22, 2 + pikaframeend + +PikaPicAnimBGFrames_15: + pikaframedelay 8 + pikaframe PikaAnimTilemap_23, 8 + pikaframeend + +PikaPicAnimBGFrames_16: + pikaframedelay 8 + pikaframe PikaAnimTilemap_23, 3 + pikaframe PikaAnimTilemap_24, 5 + pikaframe PikaAnimTilemap_23, 3 + pikaframedelay 5 + pikaframeend + +PikaPicAnimBGFrames_17: + pikaframedelay 20 + pikaframe PikaAnimTilemap_25, 8 + pikaframedelay 20 + pikaframe PikaAnimTilemap_25, 8 + pikaframeend + +PikaPicAnimBGFrames_18: + pikaframedelay 13 + pikaframe PikaAnimTilemap_26, 12 + pikaframedelay 100 + pikaframe PikaAnimTilemap_26, 8 + pikaframeend + +PikaPicAnimBGFrames_19: + pikaframedelay 5 + pikaframe PikaAnimTilemap_27, 5 + pikaframedelay 5 + pikaframe PikaAnimTilemap_27, 5 + pikaframedelay 100 + pikaframeend + +PikaPicAnimBGFrames_20: + pikaframedelay 2 + pikaframe PikaAnimTilemap_28, 2 + pikaframedelay 2 + pikaframe PikaAnimTilemap_28, 2 + pikaframeend + +PikaPicAnimBGFrames_21: + pikaframedelay 5 + pikaframe PikaAnimTilemap_29, 5 + pikaframedelay 5 + pikaframe PikaAnimTilemap_29, 5 + pikaframeend + +PikaPicAnimBGFrames_22: + pikaframe PikaAnimTilemap_30, 8 + pikaframedelay 100 + pikaframeend + +PikaPicAnimBGFrames_23: + pikaframedelay 10 + pikaframe PikaAnimTilemap_31, 3 + pikaframedelay 3 + pikaframe PikaAnimTilemap_31, 3 + pikaframedelay 100 + pikaframeend + +PikaPicAnimBGFrames_24: + pikaframedelay 3 + pikaframe PikaAnimTilemap_32, 100 + pikaframedelay 8 + pikaframe PikaAnimTilemap_32, 8 + pikaframeend + +PikaPicAnimBGFrames_25: + pikaframe PikaAnimTilemap_33, 6 + pikaframedelay 6 + pikaframe PikaAnimTilemap_33, 6 + pikaframedelay 6 + pikaframeend + +PikaPicAnimBGFrames_26: + pikaframedelay 8 + pikaframe PikaAnimTilemap_34, 12 + pikaframedelay 8 + pikaframe PikaAnimTilemap_34, 12 + pikaframeend + +PikaPicAnimBGFrames_27: + pikaframedelay 8 + pikaframe PikaAnimTilemap_9, 2 + pikaframe PikaAnimTilemap_10, 1 + pikaframe PikaAnimTilemap_11, 1 + pikaframe PikaAnimTilemap_12, 100 + pikaframeend + +PikaPicAnimBGFrames_28: + pikaframedelay 8 + pikaframe PikaAnimTilemap_36, 100 + pikaframeend + +PikaPicAnimBGFrames_29: + pikaframedelay 16 + pikaframe PikaAnimTilemap_37, 16 + pikaframedelay 16 + pikaframe PikaAnimTilemap_37, 16 + pikaframeend + +PikaPicAnimBGFrames_30: + pikaframedelay 6 + pikaframe PikaAnimTilemap_38, 6 + pikaframedelay 6 + pikaframe PikaAnimTilemap_38, 6 + pikaframedelay 100 + pikaframeend + +PikaPicAnimBGFrames_31: + pikaframedelay 6 + pikaframe PikaAnimTilemap_9, 6 + pikaframe PikaAnimTilemap_10, 100 + pikaframeend + +PikaPicAnimBGFrames_32: + pikaframedelay 20 + pikaframe PikaAnimTilemap_9, 8 + pikaframedelay 20 + pikaframe PikaAnimTilemap_9, 8 + pikaframe PikaAnimTilemap_10, 8 + pikaframe PikaAnimTilemap_11, 100 + pikaframeend + +PikaPicAnimBGFrames_33: + pikaframedelay 4 + pikaframe PikaAnimTilemap_9, 100 + pikaframeend + +PikaPicAnimBGFrames_34: + pikaframedelay 12 + pikaframe PikaAnimTilemap_9, 12 + pikaframedelay 12 + pikaframe PikaAnimTilemap_9, 100 + pikaframeend diff --git a/data/pikachu/pikachu_pic_tilemaps.asm b/data/pikachu/pikachu_pic_tilemaps.asm new file mode 100755 index 00000000..d11ba04e --- /dev/null +++ b/data/pikachu/pikachu_pic_tilemaps.asm @@ -0,0 +1,254 @@ +pikatilemap_def: MACRO +\1_id: + dw \1 +ENDM + +PikaPicTilemapPointers: + pikatilemap_def PikaAnimTilemap_0 + pikatilemap_def PikaAnimTilemap_1 + pikatilemap_def PikaAnimTilemap_2 + pikatilemap_def PikaAnimTilemap_3 + pikatilemap_def PikaAnimTilemap_4 + pikatilemap_def PikaAnimTilemap_5 + pikatilemap_def PikaAnimTilemap_6 + pikatilemap_def PikaAnimTilemap_7 + pikatilemap_def PikaAnimTilemap_8 + pikatilemap_def PikaAnimTilemap_9 + pikatilemap_def PikaAnimTilemap_10 + pikatilemap_def PikaAnimTilemap_11 + pikatilemap_def PikaAnimTilemap_12 + pikatilemap_def PikaAnimTilemap_13 + pikatilemap_def PikaAnimTilemap_14 + pikatilemap_def PikaAnimTilemap_15 + pikatilemap_def PikaAnimTilemap_16 + pikatilemap_def PikaAnimTilemap_17 + pikatilemap_def PikaAnimTilemap_18 + pikatilemap_def PikaAnimTilemap_19 + pikatilemap_def PikaAnimTilemap_20 + pikatilemap_def PikaAnimTilemap_21 + pikatilemap_def PikaAnimTilemap_22 + pikatilemap_def PikaAnimTilemap_23 + pikatilemap_def PikaAnimTilemap_24 + pikatilemap_def PikaAnimTilemap_25 + pikatilemap_def PikaAnimTilemap_26 + pikatilemap_def PikaAnimTilemap_27 + pikatilemap_def PikaAnimTilemap_28 + pikatilemap_def PikaAnimTilemap_29 + pikatilemap_def PikaAnimTilemap_30 + pikatilemap_def PikaAnimTilemap_31 + pikatilemap_def PikaAnimTilemap_32 + pikatilemap_def PikaAnimTilemap_33 + pikatilemap_def PikaAnimTilemap_34 + pikatilemap_def PikaAnimTilemap_35 + pikatilemap_def PikaAnimTilemap_36 + pikatilemap_def PikaAnimTilemap_37 + pikatilemap_def PikaAnimTilemap_38 + pikatilemap_def PikaAnimTilemap_39 + pikatilemap_def PikaAnimTilemap_40 + pikatilemap_def PikaAnimTilemap_41 + pikatilemap_def PikaAnimTilemap_42 + +PikaAnimTilemap_0: + db -1 ; unused + +; $ff inhibits overwriting that tile + +PikaAnimTilemap_1: +PikaAnimTilemap_42: + db 5, 5 + db $00, $05, $0a, $0f, $14 + db $01, $06, $0b, $10, $15 + db $02, $07, $0c, $11, $16 + db $03, $08, $0d, $12, $17 + db $04, $09, $0e, $13, $18 + +PikaAnimTilemap_2: + db 5, 5 + db $19, $1e, $23, $28, $2d + db $1a, $1f, $24, $29, $2e + db $1b, $20, $25, $2a, $2f + db $1c, $21, $26, $2b, $30 + db $1d, $22, $27, $2c, $31 + +PikaAnimTilemap_7: + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $ff, $20, $25, $ff, $ff + db $ff, $21, $26, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + +PikaAnimTilemap_3: + db 1, 1 + db $00 + +PikaAnimTilemap_4: + db 2, 1 + db $00 + db $01 + +PikaAnimTilemap_5: + db 1, 2 + db $00, $01 + +PikaAnimTilemap_6: +PikaAnimTilemap_8: + db 2, 2 + db $00, $01 + db $02, $03 + +PikaAnimTilemap_fde71: ; unused + db 3, 2 + db $00, $01 + db $02, $03 + db $04, $05 + +PikaAnimTilemap_fde79: ; unused + db 2, 3 + db $00, $01, $02 + db $03, $04, $05 + +PikaAnimTilemap_14: + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $00, $01, $02, $03, $04 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + +PikaAnimTilemap_15: + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $00, $01, $02, $03, $04 + db $05, $06, $07, $08, $09 + +PikaAnimTilemap_16: + db 5, 5 + db $00, $01, $ff, $ff, $ff + db $02, $03, $ff, $ff, $ff + db $04, $05, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + +PikaAnimTilemap_17: + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $00, $01, $02, $03, $04 + db $05, $06, $07, $08, $09 + db $0a, $0b, $0c, $0d, $0e + db $0f, $10, $11, $12, $13 + +PikaAnimTilemap_18: + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $00, $01 + db $ff, $ff, $ff, $02, $03 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + +PikaAnimTilemap_19: + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $00, $01, $ff, $ff, $ff + db $02, $03, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + +PikaAnimTilemap_20: + db 5, 5 + db $00, $01, $02, $03, $04 + db $05, $06, $07, $08, $09 + db $0a, $0b, $0c, $0d, $0e + db $0f, $10, $11, $12, $13 + db $14, $15, $16, $17, $18 + +PikaAnimTilemap_21: + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $00, $01, $02, $03, $04 + db $05, $06, $07, $08, $09 + db $ff, $ff, $ff, $ff, $ff + +PikaAnimTilemap_22: + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $00, $01, $ff, $ff, $ff + db $02, $03, $ff, $ff, $ff + db $04, $05, $ff, $ff, $ff + +PikaAnimTilemap_23: + db 5, 5 + db $00, $01, $02, $03, $04 + db $05, $06, $07, $08, $09 + db $0a, $0b, $0c, $0d, $0e + db $0f, $10, $11, $12, $13 + db $14, $15, $16, $17, $18 + +PikaAnimTilemap_24: + db 5, 5 + db $19, $1a, $1b, $1c, $1d + db $1e, $1f, $20, $21, $22 + db $23, $24, $25, $26, $27 + db $28, $29, $2a, $2b, $2c + db $2d, $2e, $2f, $30, $31 + +PikaAnimTilemap_9: +PikaAnimTilemap_25: +PikaAnimTilemap_26: +PikaAnimTilemap_27: +PikaAnimTilemap_28: +PikaAnimTilemap_29: +PikaAnimTilemap_30: +PikaAnimTilemap_31: +PikaAnimTilemap_32: +PikaAnimTilemap_33: +PikaAnimTilemap_34: +PikaAnimTilemap_35: +PikaAnimTilemap_36: +PikaAnimTilemap_37: +PikaAnimTilemap_38: +PikaAnimTilemap_39: + db 5, 5 + db $00, $01, $02, $03, $04 + db $05, $06, $07, $08, $09 + db $0a, $0b, $0c, $0d, $0e + db $0f, $10, $11, $12, $13 + db $14, $15, $16, $17, $18 + +PikaAnimTilemap_10: +PikaAnimTilemap_40: + db 5, 5 + db $19, $1a, $1b, $1c, $1d + db $1e, $1f, $20, $21, $22 + db $23, $24, $25, $26, $27 + db $28, $29, $2a, $2b, $2c + db $2d, $2e, $2f, $30, $31 + +PikaAnimTilemap_11: +PikaAnimTilemap_41: + db 5, 5 + db $32, $33, $34, $35, $36 + db $37, $38, $39, $3a, $3b + db $3c, $3d, $3e, $3f, $40 + db $41, $42, $43, $44, $45 + db $46, $47, $48, $49, $4a + +PikaAnimTilemap_12: + db 5, 5 + db $4b, $4c, $4d, $4e, $4f + db $50, $51, $52, $53, $54 + db $55, $56, $57, $58, $59 + db $5a, $5b, $5c, $5d, $5e + db $5f, $60, $61, $62, $63 + +PikaAnimTilemap_13: + db 5, 5 + db $64, $65, $66, $67, $68 + db $69, $6a, $6b, $6c, $6d + db $6e, $6f, $70, $71, $72 + db $73, $74, $75, $76, $77 + db $78, $79, $7a, $7b, $7c diff --git a/data/pikachu_emotions.asm b/data/pikachu_emotions.asm deleted file mode 100755 index f72beaa4..00000000 --- a/data/pikachu_emotions.asm +++ /dev/null @@ -1,266 +0,0 @@ -PikachuEmotion0: - db $ff - -PikachuEmotion2: - pikaemotion_dummy2 - pikaemotion_emotebubble SMILE_BUBBLE - pikaemotion_pcm PikachuCry35 - pikaemotion_pikapic PikaPicAnimScript2 - db $ff - -PikachuEmotion10: - pikaemotion_dummy2 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES - pikaemotion_emotebubble HEART_BUBBLE - pikaemotion_pcm PikachuCry5 - pikaemotion_pikapic PikaPicAnimScript10 - db $ff - -PikachuEmotion7: - pikaemotion_dummy2 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES - pikaemotion_movement PikachuMovementData_fd224 - pikaemotion_pcm PikachuCry1 - pikaemotion_movement PikachuMovementData_fd224 - pikaemotion_pikapic PikaPicAnimScript7 - db $ff - -PikachuEmotion4: - pikaemotion_dummy2 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES - pikaemotion_movement PikachuMovementData_fd230 - pikaemotion_pcm PikachuCry29 - pikaemotion_pikapic PikaPicAnimScript4 - db $ff - -PikachuEmotion1: - pikaemotion_dummy2 - pikaemotion_pcm - pikaemotion_pikapic PikaPicAnimScript1 - db $ff - -PikachuEmotion8: - pikaemotion_dummy2 - pikaemotion_pcm PikachuCry39 - pikaemotion_pikapic PikaPicAnimScript8 - db $ff - -PikachuEmotion5: - pikaemotion_dummy2 - pikaemotion_pcm PikachuCry31 - pikaemotion_pikapic PikaPicAnimScript5 - db $ff - -PikachuEmotion6: - pikaemotion_dummy2 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES - pikaemotion_pcm - pikaemotion_movement PikachuMovementData_fd21e - pikaemotion_emotebubble SKULL_BUBBLE - pikaemotion_pikapic PikaPicAnimScript6 - db $ff - -PikachuEmotion3: - pikaemotion_dummy2 - pikaemotion_pcm PikachuCry40 - pikaemotion_pikapic PikaPicAnimScript3 - db $ff - -PikachuEmotion9: - pikaemotion_dummy2 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES - pikaemotion_pcm PikachuCry6 - pikaemotion_movement PikachuMovementData_fd218 - pikaemotion_emotebubble SKULL_BUBBLE - pikaemotion_pikapic PikaPicAnimScript9 - db $ff - -PikachuEmotion11: - pikaemotion_emotebubble ZZZ_BUBBLE - pikaemotion_pcm PikachuCry37 - pikaemotion_pikapic PikaPicAnimScript11 - db $ff - -PikachuEmotion12: - pikaemotion_dummy2 - pikaemotion_pcm - pikaemotion_pikapic PikaPicAnimScript12 - db $ff - -PikachuEmotion13: - pikaemotion_dummy2 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES - pikaemotion_movement PikachuMovementData_fd21e - pikaemotion_pikapic PikaPicAnimScript13 - db $ff - -PikachuEmotion14: - pikaemotion_dummy2 - pikaemotion_emotebubble BOLT_BUBBLE - pikaemotion_pcm PikachuCry10 - pikaemotion_pikapic PikaPicAnimScript14 - db $ff - -PikachuEmotion15: - pikaemotion_dummy2 - pikaemotion_pcm PikachuCry34 - pikaemotion_pikapic PikaPicAnimScript15 - db $ff - -PikachuEmotion16: - pikaemotion_dummy2 - pikaemotion_pcm PikachuCry33 - pikaemotion_pikapic PikaPicAnimScript16 - db $ff - -PikachuEmotion17: - pikaemotion_dummy2 - pikaemotion_pcm PikachuCry13 - pikaemotion_pikapic PikaPicAnimScript17 - db $ff - -PikachuEmotion18: - pikaemotion_dummy2 - pikaemotion_pcm - pikaemotion_pikapic PikaPicAnimScript18 - db $ff - -PikachuEmotion19: - pikaemotion_dummy2 - pikaemotion_emotebubble HEART_BUBBLE - pikaemotion_pcm PikachuCry33 - pikaemotion_pikapic PikaPicAnimScript19 - db $ff - -PikachuEmotion20: - pikaemotion_dummy2 - pikaemotion_emotebubble HEART_BUBBLE - pikaemotion_pcm PikachuCry5 - pikaemotion_pikapic PikaPicAnimScript20 - db $ff - -PikachuEmotion21: - pikaemotion_dummy2 - pikaemotion_emotebubble FISH_BUBBLE - pikaemotion_pcm - pikaemotion_pikapic PikaPicAnimScript21 - db $ff - -PikachuEmotion22: - pikaemotion_dummy2 - pikaemotion_pcm PikachuCry4 - pikaemotion_pikapic PikaPicAnimScript22 - db $ff - -PikachuEmotion23: - pikaemotion_dummy2 - pikaemotion_pcm PikachuCry19 - pikaemotion_pikapic PikaPicAnimScript23 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW - db $ff - -PikachuEmotion24: - pikaemotion_dummy2 - pikaemotion_emotebubble EXCLAMATION_BUBBLE - pikaemotion_pcm - pikaemotion_pikapic PikaPicAnimScript24 - db $ff - -PikachuEmotion25: - pikaemotion_dummy2 - pikaemotion_emotebubble BOLT_BUBBLE - pikaemotion_pcm PikachuCry35 - pikaemotion_pikapic PikaPicAnimScript25 - db $ff - -PikachuEmotion26: - pikaemotion_dummy2 - pikaemotion_emotebubble ZZZ_BUBBLE - pikaemotion_pcm PikachuCry37 - pikaemotion_pikapic PikaPicAnimScript26 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW - pikaemotion_subcmd PIKAEMOTION_SUBCMD_CHECKPEWTERCENTER - db $ff - -PikachuEmotion27: - pikaemotion_dummy2 - pikaemotion_pcm PikachuCry9 - pikaemotion_pikapic PikaPicAnimScript27 - db $ff - -PikachuEmotion28: - pikaemotion_dummy2 - pikaemotion_pcm PikachuCry15 - pikaemotion_pikapic PikaPicAnimScript28 - db $ff - -PikachuEmotion29: - pikaemotion_pcm PikachuCry5 - pikaemotion_pikapic PikaPicAnimScript10 - db $ff - -PikachuEmotion30: - pikaemotion_9 - pikaemotion_emotebubble HEART_BUBBLE - pikaemotion_pcm PikachuCry5 - pikaemotion_pikapic PikaPicAnimScript20 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW - pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADFONT - pikaemotion_subcmd PIKAEMOTION_SUBCMD_CHECKLAVENDERTOWER - db $ff - -PikachuEmotion31: - pikaemotion_pcm PikachuCry19 - pikaemotion_pikapic PikaPicAnimScript23 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW - pikaemotion_subcmd PIKAEMOTION_SUBCMD_CHECKBILLSHOUSE - db $ff - -PikachuEmotion32: - pikaemotion_pcm PikachuCry26 - pikaemotion_pikapic PikaPicAnimScript23 - db $ff - -PikachuMovementData_fd218: - db $00 - db $39, 2 - 1 - db $3e, 31 - 1 - db $3f - -PikachuMovementData_fd21e: - db $00 - db $39, 1 - 1 - db $3e, 31 - 1 - db $3f - -PikachuMovementData_fd224: - db $00 - db $3c, 8 - 1, (2 << 4) | (16 - 1) - db $3c, 8 - 1, (2 << 4) | (16 - 1) - db $3f - -PikachuMovementData_fd22c: - db $3b, 32 - 1, 4 - 1 - db $3f - -PikachuMovementData_fd230: - db $00 - db $3c, 16 - 1, (1 << 4) | (16 - 1) - db $3c, 16 - 1, (1 << 4) | (16 - 1) - db $3f - -PikachuMovementData_fd238: - db $00 - db $05, 8 - 1 - db $39, 1 - 1 - db $05, 8 - 1 - db $06, 8 - 1 - db $39, 1 - 1 - db $06, 8 - 1 - db $08, 8 - 1 - db $39, 1 - 1 - db $08, 8 - 1 - db $07, 8 - 1 - db $39, 1 - 1 - db $07, 8 - 1 - db $3f diff --git a/data/pikachu_pic_animation.asm b/data/pikachu_pic_animation.asm deleted file mode 100755 index d10f65dd..00000000 --- a/data/pikachu_pic_animation.asm +++ /dev/null @@ -1,399 +0,0 @@ -PikaPicAnimThunderboltPals: - db 4, %11000000 - db 4, %11100100 - db 4, %11000000 - db 4, %11100100 - db 4, %11000000 - db 4, %11100100 - db 4, %11000000 - db 4, %11100100 - db 4, %11000000 - db 4, %11100100 - db 4, %11000000 - db 4, %11100100 - db 4, %11000000 - db 4, %11100100 - db 4, %11000000 - db 4, %11100100 - db 4, %11000000 - db 4, %11100100 - db 4, %11000000 - db 4, %11100100 - db $ff - -Data_fe26b: - pikapic_loadgfx Pic_e4000 - pikapic_loadgfx Pic_e49d1 - pikapic_loadgfx PikachuSprite - pikapic_animation PikaPicAnimBGFrames_1, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_2, $b2, $5, $5 - pikapic_animation PikaPicAnimBGFrames_3, $b6, $5, $5 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript0: -PikaPicAnimScript1: -PikaPicAnimScript29: - pikapic_setduration 40 - pikapic_loadgfx Pic_e4000 - pikapic_loadgfx GFX_e40cc - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_6, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry PikachuCry3 - pikapic_looptofinish - -PikaPicAnimScript2: - pikapic_setduration 44 - pikapic_loadgfx Pic_e411c - pikapic_loadgfx GFX_e41d2 - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_7, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript3: - pikapic_setduration 80 - pikapic_loadgfx Pic_e4272 - pikapic_loadgfx GFX_e4323 - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_8, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript4: - pikapic_setduration 70 - pikapic_loadgfx Pic_e4383 - pikapic_loadgfx GFX_e444b - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_9, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript5: - pikapic_setduration 32 - pikapic_loadgfx Pic_e458b - pikapic_loadgfx GFX_e463b - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_10, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript6: - pikapic_setduration 50 - pikapic_loadgfx Pic_e467b - pikapic_loadgfx GFX_e472e - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_11, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry PikachuCry38 - pikapic_looptofinish - -PikaPicAnimScript7: - pikapic_setduration 58 - pikapic_loadgfx Pic_e476e - pikapic_loadgfx GFX_e4841 - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_12, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript8: - pikapic_setduration 44 - pikapic_loadgfx Pic_e49d1 - pikapic_loadgfx GFX_e4a99 - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_13, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript9: - pikapic_setduration 56 - pikapic_loadgfx Pic_e4b39 - pikapic_loadgfx GFX_e4bde - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_14, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript10: - pikapic_setduration 56 - pikapic_loadgfx Pic_e4c3e - pikapic_loadgfx GFX_e4ce0 - pikapic_loadgfx GFX_e4e70 - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_16, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript11: - pikapic_setduration 100 - pikapic_loadgfx Pic_e5000 - pikapic_loadgfx GFX_e50af - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_17, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript12: - pikapic_setduration 50 - pikapic_loadgfx Pic_e523f - pikapic_loadgfx GFX_e52fe - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_18, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry PikachuCry25 - pikapic_looptofinish - -PikaPicAnimScript13: - pikapic_setduration 50 - pikapic_loadgfx Pic_e548e - pikapic_loadgfx GFX_e5541 - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_19, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript14: - pikapic_setduration 40 - pikapic_loadgfx Pic_e56d1 - pikapic_loadgfx GFX_e5794 - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_20, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript15: - pikapic_setduration 50 - pikapic_loadgfx Pic_e5924 - pikapic_loadgfx GFX_e59ed - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_21, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript16: - pikapic_setduration 32 - pikapic_loadgfx Pic_e5b7d - pikapic_loadgfx GFX_e5c4d - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_22, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript17: - pikapic_setduration 100 - pikapic_loadgfx Pic_e5ddd - pikapic_loadgfx GFX_e5e90 - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_23, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript18: - pikapic_setduration 32 - pikapic_loadgfx GFX_e6020 - pikapic_loadgfx GFX_e61b0 - pikapic_animation PikaPicAnimBGFrames_5, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_24, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry PikachuCry18 - pikapic_looptofinish - -PikaPicAnimScript19: - pikapic_setduration 44 - pikapic_loadgfx Pic_e6340 - pikapic_loadgfx GFX_e63f7 - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_25, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript20: - pikapic_setduration 50 - pikapic_loadgfx Pic_e6587 - pikapic_loadgfx GFX_e6646 - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_26, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript21: - pikapic_setduration 40 - pikapic_loadgfx Pic_e67d6 - pikapic_loadgfx GFX_e682f - pikapic_loadgfx GFX_e69bf - pikapic_loadgfx GFX_e6b4f - pikapic_loadgfx GFX_e6cdf - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_27, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry PikachuCry20 - pikapic_looptofinish - -PikaPicAnimScript22: - pikapic_setduration 40 - pikapic_loadgfx GFX_e6e6f - pikapic_loadgfx GFX_e6fff - pikapic_animation PikaPicAnimBGFrames_5, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_28, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript23: - pikapic_setduration 70 - pikapic_loadgfx GFX_e718f - pikapic_loadgfx GFX_e731f - pikapic_animation PikaPicAnimBGFrames_5, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_29, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript24: - pikapic_setduration 60 - pikapic_loadgfx GFX_e74af - pikapic_loadgfx GFX_e763f - pikapic_animation PikaPicAnimBGFrames_5, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_30, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript25: - pikapic_setduration 50 - pikapic_loadgfx Pic_e77cf - pikapic_loadgfx GFX_e7863 - pikapic_loadgfx GFX_e79f3 - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_31, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_writebyte 13 - pikapic_waitbgmap - pikapic_thunderbolt - pikapic_ret - -Data_fe51f: - pikapic_waitbgmap -PikaPicAnimScript26: - pikapic_setduration 100 - pikapic_loadgfx Pic_e5000 - pikapic_loadgfx GFX_e50af - pikapic_loadgfx GFX_e7b83 - pikapic_loadgfx GFX_e7d13 - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_32, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript27: - pikapic_setduration 30 - pikapic_loadgfx Pic_f0abf - pikapic_loadgfx GFX_f0b64 - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_33, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimScript28: - pikapic_setduration 64 - pikapic_loadgfx Pic_f0cf4 - pikapic_loadgfx GFX_f0d82 - pikapic_animation PikaPicAnimBGFrames_4, $80, $0, $0 - pikapic_animation PikaPicAnimBGFrames_34, $99, $0, $0 - pikapic_waitbgmap - pikapic_cry - pikapic_looptofinish - -PikaPicAnimGFXHeaders: -pikapicanimgfx: MACRO -\2_id:: - db \1 ; size (-1 if compressed) - dba \2 ; pointer - endm - -PikaPicAnimGFX_Null_id:: - dbbw 1, $39,$0000 ; 00 - pikapicanimgfx -1, Pic_e4000 ; 01 - pikapicanimgfx 5, GFX_e40cc ; 02 - pikapicanimgfx -1, Pic_e411c ; 03 - pikapicanimgfx 10, GFX_e41d2 ; 04 - pikapicanimgfx -1, Pic_e4272 ; 05 - pikapicanimgfx 6, GFX_e4323 ; 06 - pikapicanimgfx -1, Pic_e4383 ; 07 - pikapicanimgfx 20, GFX_e444b ; 08 - pikapicanimgfx -1, Pic_e458b ; 09 - pikapicanimgfx 4, GFX_e463b ; 0a - pikapicanimgfx -1, Pic_e467b ; 0b - pikapicanimgfx 4, GFX_e472e ; 0c - pikapicanimgfx -1, Pic_e476e ; 0d - pikapicanimgfx 25, GFX_e4841 ; 0e - pikapicanimgfx -1, Pic_e49d1 ; 0f - pikapicanimgfx 10, GFX_e4a99 ; 00 - pikapicanimgfx -1, Pic_e4b39 ; 11 - pikapicanimgfx 6, GFX_e4bde ; 12 - pikapicanimgfx -1, Pic_e4c3e ; 13 - pikapicanimgfx 25, GFX_e4ce0 ; 14 - pikapicanimgfx 25, GFX_e4e70 ; 15 - pikapicanimgfx -1, Pic_e5000 ; 16 - pikapicanimgfx 25, GFX_e50af ; 17 - pikapicanimgfx -1, Pic_e523f ; 18 - pikapicanimgfx 25, GFX_e52fe ; 19 - pikapicanimgfx -1, Pic_e548e ; 1a - pikapicanimgfx 25, GFX_e5541 ; 1b - pikapicanimgfx -1, Pic_e56d1 ; 1c - pikapicanimgfx 25, GFX_e5794 ; 1d - pikapicanimgfx -1, Pic_e5924 ; 1e - pikapicanimgfx 25, GFX_e59ed ; 1f - pikapicanimgfx -1, Pic_e5b7d ; 20 - pikapicanimgfx 25, GFX_e5c4d ; 21 - pikapicanimgfx -1, Pic_e5ddd ; 22 - pikapicanimgfx 25, GFX_e5e90 ; 23 - pikapicanimgfx 25, GFX_e6020 ; 24 - pikapicanimgfx 25, GFX_e61b0 ; 25 - pikapicanimgfx -1, Pic_e6340 ; 26 - pikapicanimgfx 25, GFX_e63f7 ; 27 - pikapicanimgfx -1, Pic_e6587 ; 28 - pikapicanimgfx 25, GFX_e6646 ; 29 - pikapicanimgfx -1, Pic_e67d6 ; 2a - pikapicanimgfx 25, GFX_e682f ; 2b - pikapicanimgfx 25, GFX_e69bf ; 2c - pikapicanimgfx 25, GFX_e6b4f ; 2d - pikapicanimgfx 25, GFX_e6cdf ; 2e - pikapicanimgfx 25, GFX_e6e6f ; 2f - pikapicanimgfx 25, GFX_e6fff ; 30 - pikapicanimgfx 25, GFX_e718f ; 31 - pikapicanimgfx 25, GFX_e731f ; 32 - pikapicanimgfx 25, GFX_e74af ; 33 - pikapicanimgfx 25, GFX_e763f ; 34 - pikapicanimgfx -1, Pic_e77cf ; 35 - pikapicanimgfx 25, GFX_e7863 ; 36 - pikapicanimgfx 25, GFX_e79f3 ; 37 - pikapicanimgfx 25, GFX_e7b83 ; 38 - pikapicanimgfx 25, GFX_e7d13 ; 39 - pikapicanimgfx -1, Pic_f0abf ; 3a - pikapicanimgfx 25, GFX_f0b64 ; 3b - pikapicanimgfx -1, Pic_f0cf4 ; 3c - pikapicanimgfx 25, GFX_f0d82 ; 3d - pikapicanimgfx 24, PikachuSprite ; 3e diff --git a/data/pikachu_pic_objects.asm b/data/pikachu_pic_objects.asm deleted file mode 100755 index 940c1141..00000000 --- a/data/pikachu_pic_objects.asm +++ /dev/null @@ -1,300 +0,0 @@ -PikaPicAnimBGFramesPointers: -pikaanim_def: macro -\1_id: dw \1 - endm - - pikaanim_def PikaPicAnimBGFrames_0 ; 00 - pikaanim_def PikaPicAnimBGFrames_1 ; 01 - pikaanim_def PikaPicAnimBGFrames_2 ; 02 - pikaanim_def PikaPicAnimBGFrames_3 ; 03 - pikaanim_def PikaPicAnimBGFrames_4 ; 04 - pikaanim_def PikaPicAnimBGFrames_5 ; 05 - pikaanim_def PikaPicAnimBGFrames_6 ; 06 - pikaanim_def PikaPicAnimBGFrames_7 ; 07 - pikaanim_def PikaPicAnimBGFrames_8 ; 08 - pikaanim_def PikaPicAnimBGFrames_9 ; 09 - pikaanim_def PikaPicAnimBGFrames_10 ; 0a - pikaanim_def PikaPicAnimBGFrames_11 ; 0b - pikaanim_def PikaPicAnimBGFrames_12 ; 0c - pikaanim_def PikaPicAnimBGFrames_13 ; 0d - pikaanim_def PikaPicAnimBGFrames_14 ; 0e - pikaanim_def PikaPicAnimBGFrames_15 ; 0f - pikaanim_def PikaPicAnimBGFrames_16 ; 10 - pikaanim_def PikaPicAnimBGFrames_17 ; 11 - pikaanim_def PikaPicAnimBGFrames_18 ; 12 - pikaanim_def PikaPicAnimBGFrames_19 ; 13 - pikaanim_def PikaPicAnimBGFrames_20 ; 14 - pikaanim_def PikaPicAnimBGFrames_21 ; 15 - pikaanim_def PikaPicAnimBGFrames_22 ; 16 - pikaanim_def PikaPicAnimBGFrames_23 ; 17 - pikaanim_def PikaPicAnimBGFrames_24 ; 18 - pikaanim_def PikaPicAnimBGFrames_25 ; 19 - pikaanim_def PikaPicAnimBGFrames_26 ; 1a - pikaanim_def PikaPicAnimBGFrames_27 ; 1b - pikaanim_def PikaPicAnimBGFrames_28 ; 1c - pikaanim_def PikaPicAnimBGFrames_29 ; 1d - pikaanim_def PikaPicAnimBGFrames_30 ; 1e - pikaanim_def PikaPicAnimBGFrames_31 ; 1f - pikaanim_def PikaPicAnimBGFrames_32 ; 20 - pikaanim_def PikaPicAnimBGFrames_33 ; 21 - pikaanim_def PikaPicAnimBGFrames_34 ; 22 - pikaanim_def PikaPicAnimBGFrames_35 ; 23 - -PikaPicAnimBGFrames_0: -PikaPicAnimBGFrames_1: - ; Tilemap idx, duration - pikaframe PikaAnimTilemap_1, 20 - pikaframe PikaAnimTilemap_7, 2 - pikaframe PikaAnimTilemap_1, 1 - pikaframe PikaAnimTilemap_7, 2 - pikaframe PikaAnimTilemap_1, 1 - pikaframe PikaAnimTilemap_7, 8 - pikaframeend - -PikaPicAnimBGFrames_fdc1e: ; unreferenced - pikaframe PikaAnimTilemap_2, 2 - pikaframe PikaAnimTilemap_1, 1 - pikaframe PikaAnimTilemap_2, 2 - pikaframe PikaAnimTilemap_1, 1 - pikaframe PikaAnimTilemap_2, 8 - pikaframeend - -PikaPicAnimBGFrames_2: - pikaframedelay 8 - pikaframe PikaAnimTilemap_8, 8 - pikaframedelay 8 - pikaframe PikaAnimTilemap_8, 8 - pikaframeend - -PikaPicAnimBGFrames_3: - pikaframe PikaAnimTilemap_8, 8 - pikaframedelay 8 - pikaframe PikaAnimTilemap_8, 8 - pikaframedelay 8 - pikaframeend - -PikaPicAnimBGFrames_4: -PikaPicAnimBGFrames_35: - pikaframe PikaAnimTilemap_1, 0 - pikaframeend - -PikaPicAnimBGFrames_5: - pikaframe PikaAnimTilemap_9, 0 - pikaframeend - -PikaPicAnimBGFrames_6: - pikaframedelay 2 - pikaframe PikaAnimTilemap_14, 4 - pikaframedelay 8 - pikaframe PikaAnimTilemap_14, 4 - pikaframedelay 64 - pikaframe PikaAnimTilemap_14, 4 - pikaframedelay 64 - pikaframeend - -PikaPicAnimBGFrames_7: - pikaframedelay 4 - pikaframe PikaAnimTilemap_15, 4 - pikaframedelay 4 - pikaframe PikaAnimTilemap_15, 4 - pikaframedelay 8 - pikaframe PikaAnimTilemap_15, 4 - pikaframedelay 8 - pikaframe PikaAnimTilemap_15, 4 - pikaframeend - -PikaPicAnimBGFrames_8: - pikaframe PikaAnimTilemap_16, 1 - pikaframedelay 1 - pikaframe PikaAnimTilemap_16, 1 - pikaframedelay 64 - pikaframe PikaAnimTilemap_16, 1 - pikaframedelay 64 - pikaframeend - -PikaPicAnimBGFrames_9: - pikaframedelay 8 - pikaframe PikaAnimTilemap_17, 8 - pikaframedelay 20 - pikaframe PikaAnimTilemap_17, 8 - pikaframeend - -PikaPicAnimBGFrames_10: - pikaframedelay 2 - pikaframe PikaAnimTilemap_18, 2 - pikaframedelay 2 - pikaframe PikaAnimTilemap_18, 64 - pikaframedelay 3 - pikaframe PikaAnimTilemap_18, 64 - pikaframeend - -PikaPicAnimBGFrames_11: - pikaframedelay 8 - pikaframe PikaAnimTilemap_19, 64 - pikaframedelay 4 - pikaframe PikaAnimTilemap_19, 64 - pikaframeend - -PikaPicAnimBGFrames_12: - pikaframe PikaAnimTilemap_20, 8 - pikaframedelay 2 - pikaframe PikaAnimTilemap_20, 8 - pikaframedelay 2 - pikaframe PikaAnimTilemap_20, 8 - pikaframeend - -PikaPicAnimBGFrames_13: - pikaframe PikaAnimTilemap_21, 4 - pikaframedelay 8 - pikaframe PikaAnimTilemap_21, 4 - pikaframedelay 64 - pikaframe PikaAnimTilemap_21, 4 - pikaframedelay 64 - pikaframeend - -PikaPicAnimBGFrames_14: - pikaframedelay 2 - pikaframe PikaAnimTilemap_22, 2 - pikaframedelay 2 - pikaframe PikaAnimTilemap_22, 2 - pikaframedelay 20 - pikaframe PikaAnimTilemap_22, 2 - pikaframeend - -PikaPicAnimBGFrames_15: - pikaframedelay 8 - pikaframe PikaAnimTilemap_23, 8 - pikaframeend - -PikaPicAnimBGFrames_16: - pikaframedelay 8 - pikaframe PikaAnimTilemap_23, 3 - pikaframe PikaAnimTilemap_24, 5 - pikaframe PikaAnimTilemap_23, 3 - pikaframedelay 5 - pikaframeend - -PikaPicAnimBGFrames_17: - pikaframedelay 20 - pikaframe PikaAnimTilemap_25, 8 - pikaframedelay 20 - pikaframe PikaAnimTilemap_25, 8 - pikaframeend - -PikaPicAnimBGFrames_18: - pikaframedelay 13 - pikaframe PikaAnimTilemap_26, 12 - pikaframedelay 100 - pikaframe PikaAnimTilemap_26, 8 - pikaframeend - -PikaPicAnimBGFrames_19: - pikaframedelay 5 - pikaframe PikaAnimTilemap_27, 5 - pikaframedelay 5 - pikaframe PikaAnimTilemap_27, 5 - pikaframedelay 100 - pikaframeend - -PikaPicAnimBGFrames_20: - pikaframedelay 2 - pikaframe PikaAnimTilemap_28, 2 - pikaframedelay 2 - pikaframe PikaAnimTilemap_28, 2 - pikaframeend - -PikaPicAnimBGFrames_21: - pikaframedelay 5 - pikaframe PikaAnimTilemap_29, 5 - pikaframedelay 5 - pikaframe PikaAnimTilemap_29, 5 - pikaframeend - -PikaPicAnimBGFrames_22: - pikaframe PikaAnimTilemap_30, 8 - pikaframedelay 100 - pikaframeend - -PikaPicAnimBGFrames_23: - pikaframedelay 10 - pikaframe PikaAnimTilemap_31, 3 - pikaframedelay 3 - pikaframe PikaAnimTilemap_31, 3 - pikaframedelay 100 - pikaframeend - -PikaPicAnimBGFrames_24: - pikaframedelay 3 - pikaframe PikaAnimTilemap_32, 100 - pikaframedelay 8 - pikaframe PikaAnimTilemap_32, 8 - pikaframeend - -PikaPicAnimBGFrames_25: - pikaframe PikaAnimTilemap_33, 6 - pikaframedelay 6 - pikaframe PikaAnimTilemap_33, 6 - pikaframedelay 6 - pikaframeend - -PikaPicAnimBGFrames_26: - pikaframedelay 8 - pikaframe PikaAnimTilemap_34, 12 - pikaframedelay 8 - pikaframe PikaAnimTilemap_34, 12 - pikaframeend - -PikaPicAnimBGFrames_27: - pikaframedelay 8 - pikaframe PikaAnimTilemap_9, 2 - pikaframe PikaAnimTilemap_10, 1 - pikaframe PikaAnimTilemap_11, 1 - pikaframe PikaAnimTilemap_12, 100 - pikaframeend - -PikaPicAnimBGFrames_28: - pikaframedelay 8 - pikaframe PikaAnimTilemap_36, 100 - pikaframeend - -PikaPicAnimBGFrames_29: - pikaframedelay 16 - pikaframe PikaAnimTilemap_37, 16 - pikaframedelay 16 - pikaframe PikaAnimTilemap_37, 16 - pikaframeend - -PikaPicAnimBGFrames_30: - pikaframedelay 6 - pikaframe PikaAnimTilemap_38, 6 - pikaframedelay 6 - pikaframe PikaAnimTilemap_38, 6 - pikaframedelay 100 - pikaframeend - -PikaPicAnimBGFrames_31: - pikaframedelay 6 - pikaframe PikaAnimTilemap_9, 6 - pikaframe PikaAnimTilemap_10, 100 - pikaframeend - -PikaPicAnimBGFrames_32: - pikaframedelay 20 - pikaframe PikaAnimTilemap_9, 8 - pikaframedelay 20 - pikaframe PikaAnimTilemap_9, 8 - pikaframe PikaAnimTilemap_10, 8 - pikaframe PikaAnimTilemap_11, 100 - pikaframeend - -PikaPicAnimBGFrames_33: - pikaframedelay 4 - pikaframe PikaAnimTilemap_9, 100 - pikaframeend - -PikaPicAnimBGFrames_34: - pikaframedelay 12 - pikaframe PikaAnimTilemap_9, 12 - pikaframedelay 12 - pikaframe PikaAnimTilemap_9, 100 - pikaframeend diff --git a/data/pikachu_pic_tilemaps.asm b/data/pikachu_pic_tilemaps.asm deleted file mode 100755 index 95882711..00000000 --- a/data/pikachu_pic_tilemaps.asm +++ /dev/null @@ -1,253 +0,0 @@ -PikaPicTilemapPointers: -pikatilemap_def: macro -\1_id: dw \1 - endm - - pikatilemap_def PikaAnimTilemap_0 - pikatilemap_def PikaAnimTilemap_1 - pikatilemap_def PikaAnimTilemap_2 - pikatilemap_def PikaAnimTilemap_3 - pikatilemap_def PikaAnimTilemap_4 - pikatilemap_def PikaAnimTilemap_5 - pikatilemap_def PikaAnimTilemap_6 - pikatilemap_def PikaAnimTilemap_7 - pikatilemap_def PikaAnimTilemap_8 - pikatilemap_def PikaAnimTilemap_9 - pikatilemap_def PikaAnimTilemap_10 - pikatilemap_def PikaAnimTilemap_11 - pikatilemap_def PikaAnimTilemap_12 - pikatilemap_def PikaAnimTilemap_13 - pikatilemap_def PikaAnimTilemap_14 - pikatilemap_def PikaAnimTilemap_15 - pikatilemap_def PikaAnimTilemap_16 - pikatilemap_def PikaAnimTilemap_17 - pikatilemap_def PikaAnimTilemap_18 - pikatilemap_def PikaAnimTilemap_19 - pikatilemap_def PikaAnimTilemap_20 - pikatilemap_def PikaAnimTilemap_21 - pikatilemap_def PikaAnimTilemap_22 - pikatilemap_def PikaAnimTilemap_23 - pikatilemap_def PikaAnimTilemap_24 - pikatilemap_def PikaAnimTilemap_25 - pikatilemap_def PikaAnimTilemap_26 - pikatilemap_def PikaAnimTilemap_27 - pikatilemap_def PikaAnimTilemap_28 - pikatilemap_def PikaAnimTilemap_29 - pikatilemap_def PikaAnimTilemap_30 - pikatilemap_def PikaAnimTilemap_31 - pikatilemap_def PikaAnimTilemap_32 - pikatilemap_def PikaAnimTilemap_33 - pikatilemap_def PikaAnimTilemap_34 - pikatilemap_def PikaAnimTilemap_35 - pikatilemap_def PikaAnimTilemap_36 - pikatilemap_def PikaAnimTilemap_37 - pikatilemap_def PikaAnimTilemap_38 - pikatilemap_def PikaAnimTilemap_39 - pikatilemap_def PikaAnimTilemap_40 - pikatilemap_def PikaAnimTilemap_41 - pikatilemap_def PikaAnimTilemap_42 - -PikaAnimTilemap_0: - db $ff ; unused - - - ; $ff inhibits overwriting that tile -PikaAnimTilemap_1: -PikaAnimTilemap_42: - db 5, 5 - db $00, $05, $0a, $0f, $14 - db $01, $06, $0b, $10, $15 - db $02, $07, $0c, $11, $16 - db $03, $08, $0d, $12, $17 - db $04, $09, $0e, $13, $18 - -PikaAnimTilemap_2: - db 5, 5 - db $19, $1e, $23, $28, $2d - db $1a, $1f, $24, $29, $2e - db $1b, $20, $25, $2a, $2f - db $1c, $21, $26, $2b, $30 - db $1d, $22, $27, $2c, $31 - -PikaAnimTilemap_7: - db 5, 5 - db $ff, $ff, $ff, $ff, $ff - db $ff, $ff, $ff, $ff, $ff - db $ff, $20, $25, $ff, $ff - db $ff, $21, $26, $ff, $ff - db $ff, $ff, $ff, $ff, $ff - -PikaAnimTilemap_3: - db 1, 1 - db $00 - -PikaAnimTilemap_4: - db 2, 1 - db $00 - db $01 - -PikaAnimTilemap_5: - db 1, 2 - db $00, $01 - -PikaAnimTilemap_6: -PikaAnimTilemap_8: - db 2, 2 - db $00, $01 - db $02, $03 - -PikaAnimTilemap_fde71: ; unused - db 3, 2 - db $00, $01 - db $02, $03 - db $04, $05 - -PikaAnimTilemap_fde79: ; unused - db 2, 3 - db $00, $01, $02 - db $03, $04, $05 - -PikaAnimTilemap_14: - db 5, 5 - db $ff, $ff, $ff, $ff, $ff - db $ff, $ff, $ff, $ff, $ff - db $00, $01, $02, $03, $04 - db $ff, $ff, $ff, $ff, $ff - db $ff, $ff, $ff, $ff, $ff - -PikaAnimTilemap_15: - db 5, 5 - db $ff, $ff, $ff, $ff, $ff - db $ff, $ff, $ff, $ff, $ff - db $ff, $ff, $ff, $ff, $ff - db $00, $01, $02, $03, $04 - db $05, $06, $07, $08, $09 - -PikaAnimTilemap_16: - db 5, 5 - db $00, $01, $ff, $ff, $ff - db $02, $03, $ff, $ff, $ff - db $04, $05, $ff, $ff, $ff - db $ff, $ff, $ff, $ff, $ff - db $ff, $ff, $ff, $ff, $ff - -PikaAnimTilemap_17: - db 5, 5 - db $ff, $ff, $ff, $ff, $ff - db $00, $01, $02, $03, $04 - db $05, $06, $07, $08, $09 - db $0a, $0b, $0c, $0d, $0e - db $0f, $10, $11, $12, $13 - -PikaAnimTilemap_18: - db 5, 5 - db $ff, $ff, $ff, $ff, $ff - db $ff, $ff, $ff, $00, $01 - db $ff, $ff, $ff, $02, $03 - db $ff, $ff, $ff, $ff, $ff - db $ff, $ff, $ff, $ff, $ff - -PikaAnimTilemap_19: - db 5, 5 - db $ff, $ff, $ff, $ff, $ff - db $ff, $ff, $ff, $ff, $ff - db $00, $01, $ff, $ff, $ff - db $02, $03, $ff, $ff, $ff - db $ff, $ff, $ff, $ff, $ff - -PikaAnimTilemap_20: - db 5, 5 - db $00, $01, $02, $03, $04 - db $05, $06, $07, $08, $09 - db $0a, $0b, $0c, $0d, $0e - db $0f, $10, $11, $12, $13 - db $14, $15, $16, $17, $18 - -PikaAnimTilemap_21: - db 5, 5 - db $ff, $ff, $ff, $ff, $ff - db $ff, $ff, $ff, $ff, $ff - db $00, $01, $02, $03, $04 - db $05, $06, $07, $08, $09 - db $ff, $ff, $ff, $ff, $ff - -PikaAnimTilemap_22: - db 5, 5 - db $ff, $ff, $ff, $ff, $ff - db $ff, $ff, $ff, $ff, $ff - db $00, $01, $ff, $ff, $ff - db $02, $03, $ff, $ff, $ff - db $04, $05, $ff, $ff, $ff - -PikaAnimTilemap_23: - db 5, 5 - db $00, $01, $02, $03, $04 - db $05, $06, $07, $08, $09 - db $0a, $0b, $0c, $0d, $0e - db $0f, $10, $11, $12, $13 - db $14, $15, $16, $17, $18 - -PikaAnimTilemap_24: - db 5, 5 - db $19, $1a, $1b, $1c, $1d - db $1e, $1f, $20, $21, $22 - db $23, $24, $25, $26, $27 - db $28, $29, $2a, $2b, $2c - db $2d, $2e, $2f, $30, $31 - -PikaAnimTilemap_9: -PikaAnimTilemap_25: -PikaAnimTilemap_26: -PikaAnimTilemap_27: -PikaAnimTilemap_28: -PikaAnimTilemap_29: -PikaAnimTilemap_30: -PikaAnimTilemap_31: -PikaAnimTilemap_32: -PikaAnimTilemap_33: -PikaAnimTilemap_34: -PikaAnimTilemap_35: -PikaAnimTilemap_36: -PikaAnimTilemap_37: -PikaAnimTilemap_38: -PikaAnimTilemap_39: - db 5, 5 - db $00, $01, $02, $03, $04 - db $05, $06, $07, $08, $09 - db $0a, $0b, $0c, $0d, $0e - db $0f, $10, $11, $12, $13 - db $14, $15, $16, $17, $18 - -PikaAnimTilemap_10: -PikaAnimTilemap_40: - db 5, 5 - db $19, $1a, $1b, $1c, $1d - db $1e, $1f, $20, $21, $22 - db $23, $24, $25, $26, $27 - db $28, $29, $2a, $2b, $2c - db $2d, $2e, $2f, $30, $31 - -PikaAnimTilemap_11: -PikaAnimTilemap_41: - db 5, 5 - db $32, $33, $34, $35, $36 - db $37, $38, $39, $3a, $3b - db $3c, $3d, $3e, $3f, $40 - db $41, $42, $43, $44, $45 - db $46, $47, $48, $49, $4a - -PikaAnimTilemap_12: - db 5, 5 - db $4b, $4c, $4d, $4e, $4f - db $50, $51, $52, $53, $54 - db $55, $56, $57, $58, $59 - db $5a, $5b, $5c, $5d, $5e - db $5f, $60, $61, $62, $63 - -PikaAnimTilemap_13: - db 5, 5 - db $64, $65, $66, $67, $68 - db $69, $6a, $6b, $6c, $6d - db $6e, $6f, $70, $71, $72 - db $73, $74, $75, $76, $77 - db $78, $79, $7a, $7b, $7c diff --git a/data/sprite_anims/intro_frames.asm b/data/sprite_anims/intro_frames.asm new file mode 100644 index 00000000..bed2aa6f --- /dev/null +++ b/data/sprite_anims/intro_frames.asm @@ -0,0 +1,70 @@ +YellowIntro_AnimatedObjectFramesData: + dw Unkn_fa100 + dw Unkn_fa103 + dw Unkn_fa10a + dw Unkn_fa111 + dw Unkn_fa118 + dw Unkn_fa11b + dw Unkn_fa11e + dw Unkn_fa121 + dw Unkn_fa124 + dw Unkn_fa127 + dw Unkn_fa138 + +Unkn_fa100: + frame $00, 32 + endanim + +Unkn_fa103: + frame $01, 4 + frame $02, 4 + frame $03, 4 + dorestart + +Unkn_fa10a: + frame $04, 4 + frame $05, 4 + frame $06, 4 + dorestart + +Unkn_fa111: + frame $07, 4 + frame $08, 4 + frame $09, 4 + dorestart + +Unkn_fa118: + frame $0a, 32 + endanim + +Unkn_fa11b: + frame $0b, 32 + endanim + +Unkn_fa11e: + frame $0c, 32 + endanim + +Unkn_fa121: + frame $0d, 32 + endanim + +Unkn_fa124: + frame $0e, 32 + endanim + +Unkn_fa127: + frame $0f, 31 + frame $11, 2 + frame $0f, 2 + frame $11, 2 + frame $0f, 31 + frame $11, 2 + frame $0f, 23 + frame $10, 32 + endanim + +Unkn_fa138: + frame $12, 4 + frame $13, 4 + dorestart diff --git a/data/sprite_anims/intro_oam.asm b/data/sprite_anims/intro_oam.asm new file mode 100644 index 00000000..f966d082 --- /dev/null +++ b/data/sprite_anims/intro_oam.asm @@ -0,0 +1,165 @@ +YellowIntro_AnimatedObjectOAMData: + dbw $00, Unkn_fa179 + dbw $96, Unkn_fa17e + dbw $98, Unkn_fa17e + dbw $9a, Unkn_fa17e + dbw $0c, Unkn_fa18f + dbw $0e, Unkn_fa18f + dbw $3c, Unkn_fa18f + dbw $60, Unkn_fa1b0 + dbw $70, Unkn_fa1b0 + dbw $80, Unkn_fa1b0 + dbw $90, Unkn_fa201 + dbw $00, Unkn_fa201 + dbw $06, Unkn_fa201 + dbw $c6, Unkn_fa292 + dbw $6d, Unkn_fa2f7 + dbw $f0, Unkn_fa308 + dbw $f4, Unkn_fa308 + dbw $f8, Unkn_fa308 + dbw $9c, Unkn_fa329 + dbw $ec, Unkn_fa329 + +Unkn_fa179: + db 1 + db $fc, $fc, $00, $00 +Unkn_fa17e: + db 4 + db $f8, $f8, $00, $00 + db $f8, $00, $01, $00 + db $00, $f8, $10, $00 + db $00, $00, $11, $00 + +Unkn_fa18f: + db 8 + db $f0, $f8, $00, $00 + db $f0, $00, $01, $00 + db $f8, $f8, $10, $00 + db $f8, $00, $11, $00 + db $00, $f8, $20, $00 + db $00, $00, $20, $20 + db $08, $f8, $21, $00 + db $08, $00, $21, $20 + +Unkn_fa1b0: + db 20 + db $e8, $f8, $00, $00 + db $e8, $00, $01, $00 + db $f0, $f8, $02, $00 + db $f0, $00, $03, $00 + db $f8, $f0, $04, $00 + db $f8, $f8, $05, $00 + db $f8, $00, $06, $00 + db $f8, $08, $04, $20 + db $00, $f0, $07, $00 + db $00, $f8, $08, $00 + db $00, $00, $08, $20 + db $00, $08, $07, $20 + db $08, $f0, $09, $00 + db $08, $f8, $0a, $00 + db $08, $00, $0a, $20 + db $08, $08, $09, $20 + db $10, $f0, $0b, $00 + db $10, $f8, $0c, $00 + db $10, $00, $0c, $20 + db $10, $08, $0b, $20 + +Unkn_fa201: + db 36 + db $e8, $e8, $00, $00 + db $e8, $f0, $01, $00 + db $e8, $f8, $02, $00 + db $e8, $00, $03, $00 + db $e8, $08, $04, $00 + db $e8, $10, $05, $00 + db $f0, $e8, $10, $00 + db $f0, $f0, $11, $00 + db $f0, $f8, $12, $00 + db $f0, $00, $13, $00 + db $f0, $08, $14, $00 + db $f0, $10, $15, $00 + db $f8, $e8, $20, $00 + db $f8, $f0, $21, $00 + db $f8, $f8, $22, $00 + db $f8, $00, $23, $00 + db $f8, $08, $24, $00 + db $f8, $10, $25, $00 + db $00, $e8, $30, $00 + db $00, $f0, $31, $00 + db $00, $f8, $32, $00 + db $00, $00, $33, $00 + db $00, $08, $34, $00 + db $00, $10, $35, $00 + db $08, $e8, $40, $00 + db $08, $f0, $41, $00 + db $08, $f8, $42, $00 + db $08, $00, $43, $00 + db $08, $08, $44, $00 + db $08, $10, $45, $00 + db $10, $e8, $50, $00 + db $10, $f0, $51, $00 + db $10, $f8, $52, $00 + db $10, $00, $53, $00 + db $10, $08, $54, $00 + db $10, $10, $55, $00 + +Unkn_fa292: + db 25 + db $ec, $f0, $00, $00 + db $ec, $f8, $01, $00 + db $ec, $00, $02, $00 + db $ec, $08, $03, $00 + db $ec, $10, $04, $00 + db $f4, $f0, $05, $00 + db $f4, $f8, $06, $00 + db $f4, $00, $07, $00 + db $f4, $08, $08, $00 + db $f4, $10, $09, $00 + db $fc, $f0, $10, $00 + db $fc, $f8, $11, $00 + db $fc, $00, $12, $00 + db $fc, $08, $13, $00 + db $fc, $10, $14, $00 + db $04, $f0, $15, $00 + db $04, $f8, $16, $00 + db $04, $00, $17, $00 + db $04, $08, $18, $00 + db $04, $10, $19, $00 + db $0c, $f0, $20, $00 + db $0c, $f8, $21, $00 + db $0c, $00, $22, $00 + db $0c, $08, $23, $00 + db $0c, $10, $24, $00 + +Unkn_fa2f7: + db 4 + db $fc, $f0, $00, $00 + db $fc, $f8, $01, $00 + db $fc, $00, $01, $20 + db $fc, $08, $00, $20 + +Unkn_fa308: + db 8 + db $f8, $e8, $00, $10 + db $f8, $f0, $01, $10 + db $00, $e8, $02, $10 + db $00, $f0, $03, $10 + db $f8, $08, $01, $30 + db $f8, $10, $00, $30 + db $00, $08, $03, $30 + db $00, $10, $02, $30 + +Unkn_fa329: + db 12 + db $f8, $d8, $00, $10 + db $f8, $e0, $01, $10 + db $f8, $e8, $02, $10 + db $00, $d8, $10, $10 + db $00, $e0, $11, $10 + db $00, $e8, $12, $10 + db $f8, $10, $02, $30 + db $f8, $18, $01, $30 + db $f8, $20, $00, $30 + db $00, $10, $12, $30 + db $00, $18, $11, $30 + db $00, $20, $10, $30 diff --git a/data/sprite_anims/surfing_pikachu_frames.asm b/data/sprite_anims/surfing_pikachu_frames.asm new file mode 100755 index 00000000..cf3463a3 --- /dev/null +++ b/data/sprite_anims/surfing_pikachu_frames.asm @@ -0,0 +1,200 @@ +SurfingPikachuFrames: + dw Unkn_f943d ; 00 + dw Unkn_f9440 ; 01 + dw Unkn_f9445 ; 02 + dw Unkn_f944a ; 03 + dw Unkn_f944f ; 04 + dw Unkn_f9454 ; 05 + dw Unkn_f9459 ; 06 + dw Unkn_f945e ; 07 + dw Unkn_f9463 ; 08 + dw Unkn_f9468 ; 09 + dw Unkn_f946d ; 0a + dw Unkn_f9472 ; 0b + dw Unkn_f9477 ; 0c + dw Unkn_f947c ; 0d + dw Unkn_f9481 ; 0e + dw Unkn_f9486 ; 0f + dw Unkn_f948b ; 10 + dw Unkn_f9494 ; 11 + dw Unkn_f9499 ; 12 + dw Unkn_f949e ; 13 + dw Unkn_f94fb ; 14 + dw Unkn_f94a1 ; 15 + dw Unkn_f94b0 ; 16 + dw Unkn_f94bf ; 17 + dw Unkn_f94ce ; 18 + dw Unkn_f94dd ; 19 + dw Unkn_f94ec ; 1a + dw Unkn_f94fe ; 1b + +Unkn_f943d: + frame $00, 32 + endanim + +Unkn_f9440: + frame $01, 8 + frame $02, 8 + dorestart + +Unkn_f9445: + frame $03, 8 + frame $04, 8 + dorestart + +Unkn_f944a: + frame $05, 8 + frame $06, 8 + dorestart + +Unkn_f944f: + frame $07, 8 + frame $08, 8 + dorestart + +Unkn_f9454: + frame $09, 8 + frame $0a, 8 + dorestart + +Unkn_f9459: + frame $0b, 8 + frame $0c, 8 + dorestart + +Unkn_f945e: + frame $0d, 8 + frame $0e, 8 + dorestart + +Unkn_f9463: + frame $01, 8, OAM_HFLIP, OAM_VFLIP + frame $02, 8, OAM_HFLIP, OAM_VFLIP + dorestart + +Unkn_f9468: + frame $03, 8, OAM_HFLIP, OAM_VFLIP + frame $04, 8, OAM_HFLIP, OAM_VFLIP + dorestart + +Unkn_f946d: + frame $05, 8, OAM_HFLIP, OAM_VFLIP + frame $06, 8, OAM_HFLIP, OAM_VFLIP + dorestart + +Unkn_f9472: + frame $07, 8, OAM_HFLIP, OAM_VFLIP + frame $08, 8, OAM_HFLIP, OAM_VFLIP + dorestart + +Unkn_f9477: + frame $09, 8, OAM_HFLIP, OAM_VFLIP + frame $0a, 8, OAM_HFLIP, OAM_VFLIP + dorestart + +Unkn_f947c: + frame $0b, 8, OAM_HFLIP, OAM_VFLIP + frame $0c, 8, OAM_HFLIP, OAM_VFLIP + dorestart + +Unkn_f9481: + frame $0d, 8, OAM_HFLIP, OAM_VFLIP + frame $0e, 8, OAM_HFLIP, OAM_VFLIP + dorestart + +Unkn_f9486: + frame $11, 7 + frame $12, 7 + dorestart + +Unkn_f948b: + frame $13, 2 + frame $14, 2 + dorepeat 8 + frame $15, 2 + endanim + +Unkn_f9494: + frame $16, 32 + frame $16, 32 + delanim + +Unkn_f9499: + frame $17, 32 + frame $17, 32 + delanim + +Unkn_f949e: + frame $18, 32 + endanim + +Unkn_f94a1: + frame $1a, 4 + dorepeat 1 + frame $1a, 3 + dorepeat 1 + frame $1a, 2 + dorepeat 1 + frame $1a, 1 + delanim + +Unkn_f94b0: + frame $1b, 4 + dorepeat 1 + frame $1b, 3 + dorepeat 1 + frame $1b, 2 + dorepeat 1 + frame $1b, 1 + delanim + +Unkn_f94bf: + frame $1c, 4 + dorepeat 1 + frame $1c, 3 + dorepeat 1 + frame $1c, 2 + dorepeat 1 + frame $1c, 1 + delanim + +Unkn_f94ce: + frame $1d, 4 + dorepeat 1 + frame $1d, 3 + dorepeat 1 + frame $1d, 2 + dorepeat 1 + frame $1d, 1 + delanim + +Unkn_f94dd: + frame $1e, 4 + dorepeat 1 + frame $1e, 3 + dorepeat 1 + frame $1e, 2 + dorepeat 1 + frame $1e, 1 + delanim + +Unkn_f94ec: + frame $1f, 4 + dorepeat 1 + frame $1f, 3 + dorepeat 1 + frame $1f, 2 + dorepeat 1 + frame $1f, 1 + delanim + +Unkn_f94fb: + frame $19, 1 + delanim + +Unkn_f94fe: + frame $20, 7 + frame $21, 7 + frame $22, 7 + frame $23, 7 + dorestart diff --git a/data/sprite_anims/surfing_pikachu_oam.asm b/data/sprite_anims/surfing_pikachu_oam.asm new file mode 100644 index 00000000..d3aa441f --- /dev/null +++ b/data/sprite_anims/surfing_pikachu_oam.asm @@ -0,0 +1,182 @@ +SurfingPikachuOAMData: + dbw $00, .Frame0 + dbw $00, .Frame1 + dbw $36, .Frame2 + dbw $03, .Frame3 + dbw $39, .Frame4 + dbw $06, .Frame5 + dbw $3c, .Frame6 + dbw $09, .Frame7 + dbw $60, .Frame8 + dbw $0c, .Frame9 + dbw $63, .Frame10 + dbw $30, .Frame11 + dbw $66, .Frame12 + dbw $33, .Frame13 + dbw $69, .Frame14 + dbw $6c, .Frame15 + dbw $9c, .Frame16 + dbw $a0, .Frame17 + dbw $a3, .Frame18 + dbw $a7, .Frame19 + dbw $a8, .Frame20 + dbw $98, .Frame21 + dbw $e0, .Frame22 + dbw $e6, .Frame23 + dbw $ca, .Frame24 + dbw $a7, .Frame25 + dbw $00, .Frame26 + dbw $00, .Frame27 + dbw $00, .Frame28 + dbw $00, .Frame29 + dbw $00, .Frame30 + dbw $00, .Frame31 + dbw $80, .Frame32 + dbw $84, .Frame33 + dbw $88, .Frame34 + dbw $8c, .Frame35 + +.Frame0: + db 1 + db $fc, $fc, $00, $00 + +.Frame1: +.Frame2: +.Frame3: +.Frame4: +.Frame5: +.Frame6: +.Frame7: +.Frame8: +.Frame9: +.Frame10: +.Frame11: +.Frame12: +.Frame13: +.Frame14: +.Frame15: +.Frame16: +.Frame17: +.Frame18: + db 9 + db $f4, $f4, $00, $00 + db $f4, $fc, $01, $00 + db $f4, $04, $02, $00 + db $fc, $f4, $10, $00 + db $fc, $fc, $11, $00 + db $fc, $04, $12, $00 + db $04, $f4, $20, $00 + db $04, $fc, $21, $00 + db $04, $04, $22, $00 + +.Frame22: +.Frame23: +.Frame24: + db 12 + db $f8, $e8, $00, $00 + db $f8, $f0, $01, $00 + db $f8, $f8, $02, $00 + db $f8, $00, $03, $00 + db $f8, $08, $04, $00 + db $f8, $10, $05, $00 + db $00, $e8, $10, $00 + db $00, $f0, $11, $00 + db $00, $f8, $12, $00 + db $00, $00, $13, $00 + db $00, $08, $14, $00 + db $00, $10, $15, $00 + +.Frame25: + db 3 + db $fc, $0b, $00, $10 + db $04, $03, $0f, $10 + db $04, $0b, $10, $10 + +.Frame19: + db 6 + db $fc, $f0, $00, $30 + db $fc, $08, $00, $10 + db $04, $f0, $10, $30 + db $04, $f8, $0f, $30 + db $04, $00, $0f, $10 + db $04, $08, $10, $10 + +.Frame20: + db 12 + db $f4, $f0, $00, $10 + db $f4, $f8, $01, $10 + db $f4, $00, $01, $30 + db $f4, $08, $00, $30 + db $fc, $f0, $10, $10 + db $fc, $f8, $11, $10 + db $fc, $00, $11, $30 + db $fc, $08, $10, $30 + db $04, $f0, $20, $10 + db $04, $f8, $21, $10 + db $04, $00, $21, $30 + db $04, $08, $20, $30 + +.Frame21: + db 3 + db $04, $f4, $00, $00 + db $04, $fc, $01, $00 + db $04, $04, $02, $00 + +.Frame26: + db 3 + db $fc, $f4, $bf, $00 + db $fc, $fc, $d5, $00 + db $fc, $04, $d0, $00 + +.Frame27: + db 4 + db $fc, $f0, $bf, $00 + db $fc, $f8, $d1, $00 + db $fc, $00, $d5, $00 + db $fc, $08, $d0, $00 + +.Frame28: + db 4 + db $fc, $f0, $bf, $00 + db $fc, $f8, $d3, $00 + db $fc, $00, $d5, $00 + db $fc, $08, $d0, $00 + +.Frame29: + db 4 + db $fc, $f0, $bf, $00 + db $fc, $f8, $d7, $00 + db $fc, $00, $d5, $00 + db $fc, $08, $d0, $00 + +.Frame30: + db 4 + db $fc, $f0, $bf, $00 + db $fc, $f8, $d1, $00 + db $fc, $00, $d8, $00 + db $fc, $08, $d0, $00 + +.Frame31: + db 4 + db $fc, $f0, $bf, $00 + db $fc, $f8, $d5, $00 + db $fc, $00, $d0, $00 + db $fc, $08, $d0, $00 + +.Frame32: +.Frame33: +.Frame34: +.Frame35: + db 12 + db $f4, $f0, $03, $20 + db $f4, $f8, $02, $20 + db $f4, $00, $01, $20 + db $f4, $08, $00, $20 + db $fc, $f0, $13, $20 + db $fc, $f8, $12, $20 + db $fc, $00, $11, $20 + db $fc, $08, $10, $20 + db $04, $f0, $23, $20 + db $04, $f8, $22, $20 + db $04, $00, $21, $20 + db $04, $08, $20, $20 diff --git a/data/sprites/facings.asm b/data/sprites/facings.asm index e87a9627..d3455d74 100644 --- a/data/sprites/facings.asm +++ b/data/sprites/facings.asm @@ -1,4 +1,5 @@ SpriteFacingAndAnimationTable: +; This table is used for overworld sprites $1-$9. dw .StandingDown ; facing down, walk animation frame 0 dw .WalkingDown ; facing down, walk animation frame 1 dw .StandingDown ; facing down, walk animation frame 2 @@ -35,97 +36,91 @@ SpriteFacingAndAnimationTable: dw .StandingDown dw .StandingDown ; special case - dw SpriteSpecialCase ; pikachu maybe? + dw .SpecialCase ; pikachu maybe? + +; Tables used as a reference to transform OAM data. + +; Format: +; db y, x, attributes, tile index .StandingDown: - db $04 -; Sprite OAM Parameters - db $00, $00, $00, $00 ; top left - db $00, $08, $01, $00 ; top right - db $08, $00, $02, OAMFLAG_CANBEMASKED ; bottom left - db $08, $08, $03, OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right + db 4 ; # + db 0, 0, $00, 0 + db 0, 8, $01, 0 + db 8, 0, $02, OAMFLAG_CANBEMASKED + db 8, 8, $03, OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA .WalkingDown: - db $04 -; Sprite OAM Parameters - db $00, $00, $80, $00 ; top left - db $00, $08, $81, $00 ; top right - db $08, $00, $82, OAMFLAG_CANBEMASKED ; bottom left - db $08, $08, $83, OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right + db 4 ; # + db 0, 0, $80, 0 + db 0, 8, $81, 0 + db 8, 0, $82, OAMFLAG_CANBEMASKED + db 8, 8, $83, OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA .WalkingDown2: - db $04 -; Sprite OAM Parameters - db $00, $08, $80, OAM_HFLIP ; top left - db $00, $00, $81, OAM_HFLIP ; top right - db $08, $08, $82, OAM_HFLIP | OAMFLAG_CANBEMASKED ; bottom left - db $08, $00, $83, OAM_HFLIP | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right + db 4 ; # + db 0, 8, $80, OAM_HFLIP + db 0, 0, $81, OAM_HFLIP + db 8, 8, $82, OAM_HFLIP | OAMFLAG_CANBEMASKED + db 8, 0, $83, OAM_HFLIP | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA .StandingUp: - db $04 -; Sprite OAM Parameters - db $00, $00, $04, $00 ; top left - db $00, $08, $05, $00 ; top right - db $08, $00, $06, OAMFLAG_CANBEMASKED ; bottom left - db $08, $08, $07, OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right + db 4 ; # + db 0, 0, $04, 0 + db 0, 8, $05, 0 + db 8, 0, $06, OAMFLAG_CANBEMASKED + db 8, 8, $07, OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA .WalkingUp: - db $04 -; Sprite OAM Parameters - db $00, $00, $84, $00 ; top left - db $00, $08, $85, $00 ; top right - db $08, $00, $86, OAMFLAG_CANBEMASKED ; bottom left - db $08, $08, $87, OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right + db 4 ; # + db 0, 0, $84, 0 + db 0, 8, $85, 0 + db 8, 0, $86, OAMFLAG_CANBEMASKED + db 8, 8, $87, OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA .WalkingUp2: - db $04 -; Sprite OAM Parameters - db $00, $08, $84, OAM_HFLIP ; top left - db $00, $00, $85, OAM_HFLIP ; top right - db $08, $08, $86, OAM_HFLIP | OAMFLAG_CANBEMASKED ; bottom left - db $08, $00, $87, OAM_HFLIP | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right + db 4 ; # + db 0, 8, $84, OAM_HFLIP + db 0, 0, $85, OAM_HFLIP + db 8, 8, $86, OAM_HFLIP | OAMFLAG_CANBEMASKED + db 8, 0, $87, OAM_HFLIP | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA .StandingLeft: - db $04 -; Sprite OAM Parameters - db $00, $00, $08, $00 ; top left - db $00, $08, $09, $00 ; top right - db $08, $00, $0a, OAMFLAG_CANBEMASKED ; bottom left - db $08, $08, $0b, OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right + db 4 ; # + db 0, 0, $08, 0 + db 0, 8, $09, 0 + db 8, 0, $0a, OAMFLAG_CANBEMASKED + db 8, 8, $0b, OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA .WalkingLeft: - db $04 -; Sprite OAM Parameters - db $00, $00, $88, $00 ; top left - db $00, $08, $89, $00 ; top right - db $08, $00, $8a, OAMFLAG_CANBEMASKED ; bottom left - db $08, $08, $8b, OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right + db 4 ; # + db 0, 0, $88, 0 + db 0, 8, $89, 0 + db 8, 0, $8a, OAMFLAG_CANBEMASKED + db 8, 8, $8b, OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA .StandingRight: - db $04 -; Sprite OAM Parameters - db $00, $08, $08, OAM_HFLIP ; top left - db $00, $00, $09, OAM_HFLIP ; top right - db $08, $08, $0a, OAM_HFLIP | OAMFLAG_CANBEMASKED ; bottom left - db $08, $00, $0b, OAM_HFLIP | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right + db 4 ; # + db 0, 8, $08, OAM_HFLIP + db 0, 0, $09, OAM_HFLIP + db 8, 8, $0a, OAM_HFLIP | OAMFLAG_CANBEMASKED + db 8, 0, $0b, OAM_HFLIP | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA .WalkingRight: - db $04 -; Sprite OAM Parameters - db $00, $08, $88, OAM_HFLIP ; top left - db $00, $00, $89, OAM_HFLIP ; top right - db $08, $08, $8a, OAM_HFLIP | OAMFLAG_CANBEMASKED ; bottom left - db $08, $00, $8b, OAM_HFLIP | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right + db 4 ; # + db 0, 8, $88, OAM_HFLIP + db 0, 0, $89, OAM_HFLIP + db 8, 8, $8a, OAM_HFLIP | OAMFLAG_CANBEMASKED + db 8, 0, $8b, OAM_HFLIP | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA -SpriteSpecialCase: - db $09 -; Sprite OAM Parameters - db -$4, -$4, $00, $00 - db -$4, $04, $01, $00 - db -$4, $0c, $00, OAM_HFLIP - db $04, -$4, $01, $00 - db $04, $04, $02, $00 - db $04, $0c, $01, $00 - db $0c, -$4, $00, OAM_VFLIP | OAMFLAG_CANBEMASKED - db $0c, $04, $01, OAMFLAG_CANBEMASKED - db $0c, $0c, $00, OAM_VFLIP | OAM_HFLIP | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA +.SpecialCase: + db 9 ; # + db -4, -4, $00, 0 + db -4, 4, $01, 0 + db -4, 12, $00, OAM_HFLIP + db 4, -4, $01, 0 + db 4, 4, $02, 0 + db 4, 12, $01, 0 + db 12, -4, $00, OAM_VFLIP | OAMFLAG_CANBEMASKED + db 12, 4, $01, OAMFLAG_CANBEMASKED + db 12, 12, $00, OAM_VFLIP | OAM_HFLIP | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA diff --git a/data/sprites/sprites.asm b/data/sprites/sprites.asm index b7bee609..217ad864 100644 --- a/data/sprites/sprites.asm +++ b/data/sprites/sprites.asm @@ -36,7 +36,7 @@ SpriteSheetPointerTable: overworld_sprite MiddleAgedWomanSprite, 12 ; SPRITE_MIDDLE_AGED_WOMAN overworld_sprite BrunetteGirlSprite, 12 ; SPRITE_BRUNETTE_GIRL overworld_sprite LanceSprite, 12 ; SPRITE_LANCE - overworld_sprite RedSprite, 12 ; SPRITE_UNUSED_SCIENTIST + overworld_sprite RedSprite, 12 ; SPRITE_UNUSED_RED_1 overworld_sprite ScientistSprite, 12 ; SPRITE_SCIENTIST overworld_sprite RockerSprite, 12 ; SPRITE_ROCKER overworld_sprite SwimmerSprite, 12 ; SPRITE_SWIMMER @@ -55,11 +55,11 @@ SpriteSheetPointerTable: overworld_sprite FisherSprite, 12 ; SPRITE_FISHER overworld_sprite KogaSprite, 12 ; SPRITE_KOGA overworld_sprite GuardSprite, 12 ; SPRITE_GUARD - overworld_sprite RedSprite, 12 ; SPRITE_UNUSED_GUARD + overworld_sprite RedSprite, 12 ; SPRITE_UNUSED_RED_2 overworld_sprite MomSprite, 12 ; SPRITE_MOM overworld_sprite BaldingGuySprite, 12 ; SPRITE_BALDING_GUY overworld_sprite LittleBoySprite, 12 ; SPRITE_LITTLE_BOY - overworld_sprite RedSprite, 12 ; SPRITE_UNUSED_GAMEBOY_KID + overworld_sprite RedSprite, 12 ; SPRITE_UNUSED_RED_3 overworld_sprite GameboyKidSprite, 12 ; SPRITE_GAMEBOY_KID overworld_sprite FairySprite, 12 ; SPRITE_FAIRY overworld_sprite AgathaSprite, 12 ; SPRITE_AGATHA diff --git a/data/trainers/parties.asm b/data/trainers/parties.asm index af33a273..766a1713 100755 --- a/data/trainers/parties.asm +++ b/data/trainers/parties.asm @@ -272,14 +272,6 @@ BikerData: db 33, WEEZING, 0 db 26, GRIMER, GRIMER, GRIMER, GRIMER, 0 ; Route 17 - ; From https://www.smogon.com/smog/issue27/glitch: - ; 0E:5FC2 is offset of the ending 0 for this first Biker on Route 17. - ; BaseStats + (MonBaseStatsEnd - MonBaseStats) * (000 - 1) = $5FC2; - ; that's the formula from GetMonHeader for the base stats of mon #000. - ; (BaseStats = $43DE and BANK(BaseStats) = $0E.) - ; Finally, PokedexOrder lists 0 as the dex ID for every MissingNo. - ; The result is that this data gets interpreted as the base stats - ; for MissingNo: 0, 33, MUK, 0, 29, VOLTORB, VOLTORB, 0, ..., 28, GRIMER, GRIMER. db 28, WEEZING, KOFFING, WEEZING, 0 db 33, MUK, 0 db 29, VOLTORB, VOLTORB, 0 @@ -600,12 +592,12 @@ RocketData: ; Silph Co. 11F db 25, RATTATA, RATTATA, ZUBAT, RATTATA, EKANS, 0 db 32, CUBONE, DROWZEE, MAROWAK, 0 -;JessieJamesData: +; Jessie & James db 14, EKANS, MEOWTH, KOFFING, 0 db 25, KOFFING, MEOWTH, EKANS, 0 db 27, MEOWTH, ARBOK, WEEZING, 0 db 31, WEEZING, ARBOK, MEOWTH, 0 -; unused JessieJames trainers +; Unused db 16, KOFFING, 0 db 27, KOFFING, 0 db 29, WEEZING, 0 diff --git a/data/trainers/special_moves.asm b/data/trainers/special_moves.asm index f858fa57..d9c6b893 100755 --- a/data/trainers/special_moves.asm +++ b/data/trainers/special_moves.asm @@ -1,7 +1,7 @@ -; yellow has its own format. - -; entry = trainerclass, trainerid, moveset+, 0 -; moveset = partymon location, partymon's move, moveid +; Yellow entry format: +; db trainerclass, trainerid +; repeat { db partymon location, partymon move, move id } +; db 0 SpecialTrainerMoves: db BUG_CATCHER, 15 diff --git a/data/wild/super_rod.asm b/data/wild/super_rod.asm index 154980cc..7b3b6407 100755 --- a/data/wild/super_rod.asm +++ b/data/wild/super_rod.asm @@ -1,4 +1,4 @@ -FishingSlots:: +SuperRodFishingSlots:: db PALLET_TOWN, STARYU, 10, TENTACOOL, 10, STARYU, 5, TENTACOOL, 20 db VIRIDIAN_CITY, POLIWAG, 5, POLIWAG, 10, POLIWAG, 15, POLIWAG, 10 db CERULEAN_CITY, GOLDEEN, 25, GOLDEEN, 30, SEAKING, 30, SEAKING, 40 diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md index cb4cfc81..fa1050fd 100644 --- a/docs/bugs_and_glitches.md +++ b/docs/bugs_and_glitches.md @@ -13,12 +13,13 @@ Fixes are written in the `diff` format. If you've used Git before, this should l ## Contents -- [Options Menu Code Fails to Clear Joypad State on Initialization](#options-menu-code-fails-to-clear-joypad-state-on-initialization) -- [Battle Transitions Fail to Account for Scripted Battles](#battle-transitions-fail-to-account-for-scripted-battles) -- [wPikachuFollowCommandBuffer can Overflow](#wpikachufollowcommandbuffer-can-overflow) -- [Unexpected Counter Damage](#unexpected-counter-damage) +- [Options menu code fails to clear joypad state on initialization](#options-menu-code-fails-to-clear-joypad-state-on-initialization) +- [Battle transitions fail to account for scripted battles](#battle-transitions-fail-to-account-for-scripted-battles) +- [`wPikachuFollowCommandBuffer` can overflow](#wpikachufollowcommandbuffer-can-overflow) +- [Unexpected Counter damage](#unexpected-counter-damage) -## Options Menu Code Fails to Clear Joypad State on Initialization + +## Options menu code fails to clear joypad state on initialization This bug (or feature!) results in all options being shifted left or right if the respective direction is pressed on the same frame the options menu is opened. The bug also exists in pokegold and pokecrystal. @@ -32,7 +33,8 @@ The bug also exists in pokegold and pokecrystal. call InitOptionsMenu ``` -## Battle Transitions Fail to Account for Scripted Battles + +## Battle transitions fail to account for scripted battles When Oak Catches Pikachu in the Pallet Town cutscenes you don't yet have any Pokemon in Party. The Battle Transitions code has no error handling for this and reads wPartyMon1HP from wRivalName+6. @@ -41,7 +43,8 @@ A similar series of bugs appears to exist in pokecrystal. **Fix:** TBD in [engine/battle/battle_transitions.asm#L93](/engine/battle/battle_transitions.asm#L93) -## wPikachuFollowCommandBuffer can Overflow + +## `wPikachuFollowCommandBuffer` can overflow AppendPikachuFollowCommandToBuffer doesn't have any length checking for the buffer of Pikachu commands. This can be abused to write data into any address past d437, typically by putting pikachu to sleep in the Pewter Center with Jigglypuff. @@ -49,9 +52,10 @@ While in this state, walking down writes 01, up 02, left 03, and right 04. This bug is generally known as "Pikawalk." A typical use for this would be to force the in game time to 255:59. -**Fix:** TBD in [engine/pikachu_follow.asm#1165](/engine/pikachu_follow.asm#1165) +**Fix:** TBD in [engine/pikachu/pikachu_follow.asm#1165](/engine/pikachu/pikachu_follow.asm#1165) + -## Unexpected Counter Damage +## Unexpected Counter damage Counter simply doubles the value of wDamage which can hold the last value of damage dealt whether it was from you, your opponent, a switched out opponent, or a player in another battle. This is because wDamage is used for both the player's damage and opponent's damage, and is not cleared out between switching or battles. diff --git a/engine/animated_objects_3e.asm b/engine/animated_objects_3e.asm deleted file mode 100755 index 2373e19e..00000000 --- a/engine/animated_objects_3e.asm +++ /dev/null @@ -1,394 +0,0 @@ -ClearObjectAnimationBuffers: - ld hl, wAnimatedObjectsData - ld bc, wAnimatedObjectsDataEnd - wAnimatedObjectsData - xor a - call FillMemory - ret - -RunObjectAnimations: - ld hl, wAnimatedObjectDataStructs - ld e, 10 -.loop - ld a, [hl] - and a - jr z, .next - ld c, l - ld b, h - push hl - push de - call ExecuteCurrentAnimatedObjectCallback - call UpdateCurrentAnimatedObjectFrame - pop de - pop hl - jr c, .quit -.next - ld bc, $10 - add hl, bc - dec e - jr nz, .loop - ld a, [wCurrentAnimatedObjectOAMBufferOffset] - ld l, a - ld h, wOAMBuffer / $100 -.deinit_unused_oam_loop - ld a, l - cp wOAMBufferEnd % $100 - jr nc, .quit - xor a - ld [hli], a - jr .deinit_unused_oam_loop - -.quit - ret - -SpawnAnimatedObject: - push de - push af - ld hl, wAnimatedObjectDataStructs - ld e, 10 -.loop - ld a, [hl] - and a - jr z, .init - ld bc, $10 - add hl, bc - dec e - jr nz, .loop - pop af - pop de - scf - ret - -.init - pop af - ld c, l - ld b, h - ld hl, wNumLoadedAnimatedObjects - inc [hl] - ld e, a - ld d, $0 - ld a, [wAnimatedObjectSpawnStateDataPointer] - ld l, a - ld a, [wAnimatedObjectSpawnStateDataPointer + 1] - ld h, a - add hl, de - add hl, de - add hl, de - ld e, l - ld d, h - ld hl, $0 - add hl, bc - ld a, [wNumLoadedAnimatedObjects] - ld [hli], a - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - xor a - ld [hli], a - pop de - ld hl, $4 - add hl, bc - ld a, e - ld [hli], a - ld a, d - ld [hli], a - xor a - ld [hli], a - ld [hli], a - xor a - ld [hli], a - ld [hli], a - dec a - ld [hli], a - xor a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hl], a - ret - -MaskCurrentAnimatedObjectStruct: - ld hl, $0 - add hl, bc - ld [hl], $0 - ret - -MaskAllAnimatedObjectStructs: - ld hl, wAnimatedObjectDataStructs - ld e, 10 -.loop - ld [hl], $0 - ld bc, $10 - add hl, bc - dec e - jr nz, .loop - ret - -UpdateCurrentAnimatedObjectFrame: - xor a - ld [wCurAnimatedObjectOAMAttributes], a - ld hl, $3 - add hl, bc - ld a, [hli] - ld [wCurrentAnimatedObjectVTileOffset], a - ld a, [hli] - ld [wCurrentAnimatedObjectXCoord], a - ld a, [hli] - ld [wCurrentAnimatedObjectYCoord], a - ld a, [hli] - ld [wCurrentAnimatedObjectXOffset], a - ld a, [hl] - ld [wCurrentAnimatedObjectYOffset], a - call UpdateDurationTimerAndFrameStateForCurrentAnimatedObject - cp $fd - jr z, .finish - cp $fc - jr z, .delete_animation - call GetCurrentAnimatedObjectOAMDataPointer - ld a, [wCurrentAnimatedObjectVTileOffset] - add [hl] - ld [wCurrentAnimatedObjectVTileOffset], a - inc hl - ld a, [hli] - ld h, [hl] - ld l, a - push bc - ld a, [wCurrentAnimatedObjectOAMBufferOffset] - ld e, a - ld d, wOAMBuffer / $100 - ld a, [hli] - ld c, a -.loop - ld a, [wCurrentAnimatedObjectYCoord] - ld b, a - ld a, [wCurrentAnimatedObjectYOffset] - add b - ld b, a - ld a, [wAnimatedObjectGlobalYOffset] - add b - ld b, a - call GetCurrentAnimatedObjectTileYCoordinate - add b - ld [de], a - inc hl - inc de - ld a, [wCurrentAnimatedObjectXCoord] - ld b, a - ld a, [wCurrentAnimatedObjectXOffset] - add b - ld b, a - ld a, [wAnimatedObjectGlobalXOffset] - add b - ld b, a - call GetCurrentAnimatedObjectTileXCoordinate - add b - ld [de], a - inc hl - inc de - ld a, [wCurrentAnimatedObjectVTileOffset] - add [hl] - ld [de], a - inc hl - inc de - call SetCurrentAnimatedObjectOAMAttributes - ld b, a - ld a, [wc634] - cp $7 - ld a, b - jr z, .skip_load - ld [de], a -.skip_load - inc hl - inc de - ld a, e - ld [wCurrentAnimatedObjectOAMBufferOffset], a - cp wOAMBufferEnd % $100 - jr nc, .oam_is_full - dec c - jr nz, .loop - pop bc - jr .finish - -.delete_animation - call MaskCurrentAnimatedObjectStruct -.finish - and a - ret - -.oam_is_full - pop bc - scf - ret - -GetCurrentAnimatedObjectTileYCoordinate: - push hl - ld a, [hl] - ld hl, wCurAnimatedObjectOAMAttributes - bit 6, [hl] - jr z, .no_flip - add $8 - xor $ff - inc a -.no_flip - pop hl - ret - -GetCurrentAnimatedObjectTileXCoordinate: - push hl - ld a, [hl] - ld hl, wCurAnimatedObjectOAMAttributes - bit 5, [hl] - jr z, .no_flip - add $8 - xor $ff - inc a -.no_flip - pop hl - ret - -SetCurrentAnimatedObjectOAMAttributes: - ld a, [wCurAnimatedObjectOAMAttributes] - ld b, a - ld a, [hl] - xor b - and $e0 - ld b, a - ld a, [hl] - and $10 - or b - bit 4, a - ret z - or $4 - ret - -GetCurrentAnimatedObjectOAMDataPointer: - ld e, a - ld d, $0 - ld a, [wAnimatedObjectOAMDataPointer] - ld l, a - ld a, [wAnimatedObjectOAMDataPointer + 1] - ld h, a - add hl, de - add hl, de - add hl, de - ret - -SetCurrentAnimatedObjectCallbackAndResetFrameStateRegisters: - ld hl, $1 - add hl, bc - ld [hl], a - ld hl, $8 - add hl, bc - ld [hl], $0 - ld hl, $9 - add hl, bc - ld [hl], $0 - ld hl, $a - add hl, bc - ld [hl], $ff - ret - -UpdateDurationTimerAndFrameStateForCurrentAnimatedObject: -.loop - ld hl, $8 - add hl, bc - ld a, [hl] - and a - jr z, .next_frame - dec [hl] - call GetPointerToCurrentAnimatedObjectFrameScript - ld a, [hli] - push af - jr .finish - -.next_frame - ld hl, $a - add hl, bc - inc [hl] - call GetPointerToCurrentAnimatedObjectFrameScript - ld a, [hli] - cp $fe - jr z, .restart_anim - cp $ff - jr z, .hold_last_frame_state - push af - ld a, [hl] - push hl - and $3f - ld hl, $9 - add hl, bc - add [hl] - ld hl, $8 - add hl, bc - ld [hl], a - pop hl -.finish - ld a, [hl] - and $c0 - srl a - ld [wCurAnimatedObjectOAMAttributes], a - pop af - ret - -.hold_last_frame_state - xor a - ld hl, $8 - add hl, bc - ld [hl], a - ld hl, $a - add hl, bc - dec [hl] - dec [hl] - jr .loop - -.restart_anim - xor a - ld hl, $8 - add hl, bc - ld [hl], a - dec a - ld hl, $a - add hl, bc - ld [hl], a - jr .loop - -GetPointerToCurrentAnimatedObjectFrameScript: - ld hl, $1 - add hl, bc - ld e, [hl] - ld d, $0 - ld a, [wAnimatedObjectFramesDataPointer] - ld l, a - ld a, [wAnimatedObjectFramesDataPointer + 1] - ld h, a - add hl, de - add hl, de - ld e, [hl] - inc hl - ld d, [hl] - ld hl, $a - add hl, bc - ld l, [hl] - ld h, $0 - add hl, hl - add hl, de - ret - -ExecuteCurrentAnimatedObjectCallback: - ld hl, $2 - add hl, bc - ld e, [hl] - ld d, $0 - ld a, [wAnimatedObjectJumptablePointer] - ld l, a - ld a, [wAnimatedObjectJumptablePointer + 1] - ld h, a - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl diff --git a/engine/bank30.bin b/engine/bank30.bin deleted file mode 100644 index 6309c149..00000000 Binary files a/engine/bank30.bin and /dev/null differ diff --git a/engine/bank3c.asm b/engine/bank3c.asm deleted file mode 100644 index 8eb32837..00000000 --- a/engine/bank3c.asm +++ /dev/null @@ -1,189 +0,0 @@ -INCLUDE "engine/pikachu_pcm.asm" -INCLUDE "engine/overworld/advance_player_sprite.asm" - -INCLUDE "engine/events/black_out.asm" - -SetMapSpecificScriptFlagsOnMapReload:: - ld a, [wCurMap] - cp VERMILION_GYM ; ??? new thing about verm gym? - jr z, .verm_gym - ld c, a - ld hl, .MapList -.search_loop - ld a, [hli] - cp c - jr z, .in_list - cp a, $ff - jr nz, .search_loop - ret - -.verm_gym - ld hl, wCurrentMapScriptFlags - set 6, [hl] - ret - -.in_list - ld hl, wCurrentMapScriptFlags - set 5, [hl] - ret - -.MapList - db SILPH_CO_2F - db SILPH_CO_3F - db SILPH_CO_4F - db SILPH_CO_5F - db SILPH_CO_6F - db SILPH_CO_7F - db SILPH_CO_8F - db SILPH_CO_9F - db SILPH_CO_10F - db SILPH_CO_11F - db POKEMON_MANSION_2F - db POKEMON_MANSION_3F - db POKEMON_MANSION_B1F - db POKEMON_MANSION_1F - db CINNABAR_GYM - db GAME_CORNER - db ROCKET_HIDEOUT_B1F - db ROCKET_HIDEOUT_B4F - db VICTORY_ROAD_3F - db VICTORY_ROAD_1F - db VICTORY_ROAD_2F - db LANCES_ROOM - db LORELEIS_ROOM - db BRUNOS_ROOM - db AGATHAS_ROOM - db $ff - -BeachHouse_GFX: - INCBIN "gfx/tilesets/beachhouse.2bpp" - ds 384 - -BeachHouse_Block: - INCBIN "gfx/blocksets/beachhouse.bst" - -Func_f0a54: - ret - -LoadUnusedBluesHouseMissableObjectData:: -; referenced in an unused function - ld hl, .MissableObjectsMaps -.loop - ld a, [hli] - cp a, $ff - ret z - ld b, a - ld a, [wCurMap] - cp b - jr z, .found - inc hl - inc hl - inc hl - jr .loop - -.found - ld a, [hli] - ld c, a - ld b, 0 - ld a, [hli] - ld h, [hl] - ld l, a - ld de, wMissableObjectList - call CopyData - ret - -.MissableObjectsMaps: - dbbw BLUES_HOUSE, .End - .Start, .Start - db $ff - -.Start: - db 1, HS_DAISY_SITTING_COPY - db 2, HS_DAISY_WALKING_COPY - db 3, HS_TOWN_MAP_COPY - db $ff -.End: - -TryApplyPikachuMovementData: - ld a, [wd472] - bit 7, a - ret z - ld a, [wWalkBikeSurfState] - and a - ret nz - push hl - push bc - callfar GetPikachuFacingDirectionAndReturnToE - pop bc - pop hl - ld a, b - cp e - ret nz - push hl - ld a, [wUpdateSpritesEnabled] - push af - ld a, $ff - ld [wUpdateSpritesEnabled], a - callfar LoadPikachuShadowIntoVRAM - pop af - ld [wUpdateSpritesEnabled], a - pop hl - call ApplyPikachuMovementData - callfar RefreshPikachuFollow - ret - -Pic_f0abf: -INCBIN "gfx/pikachu/unknown_f0abf.pic" -GFX_f0b64: -INCBIN "gfx/pikachu/unknown_f0b64.2bpp" -Pic_f0cf4: -INCBIN "gfx/pikachu/unknown_f0cf4.pic" -GFX_f0d82: -INCBIN "gfx/pikachu/unknown_f0d82.2bpp" - -PokecenterChanseyText:: - ld hl, NurseChanseyText - call PrintText - ld a, CHANSEY - call PlayCry - call WaitForSoundToFinish - ret - -NurseChanseyText: - text_far _NurseChanseyText - text_end - -INCLUDE "engine/movie/credits.asm" -INCLUDE "scripts/ViridianCity2.asm" -INCLUDE "scripts/VermilionCity2.asm" -INCLUDE "scripts/CeladonCity2.asm" -INCLUDE "scripts/Route1_2.asm" -INCLUDE "scripts/Route22_2.asm" -INCLUDE "scripts/RedsHouse1F2.asm" -INCLUDE "scripts/OaksLab2.asm" -INCLUDE "scripts/ViridianSchoolHouse2.asm" -INCLUDE "scripts/Museum1F2.asm" -INCLUDE "scripts/PewterPokecenter2.asm" -INCLUDE "scripts/PokemonTower2F_2.asm" -INCLUDE "scripts/CeladonMart3F_2.asm" -INCLUDE "scripts/CeladonMansion1F_2.asm" -INCLUDE "scripts/CeladonMansion3F_2.asm" -INCLUDE "scripts/GameCorner2.asm" -INCLUDE "scripts/CeladonDiner2.asm" -INCLUDE "scripts/SafariZoneGate2.asm" -INCLUDE "scripts/CinnabarGym3.asm" -INCLUDE "scripts/MtMoonPokecenter2.asm" - -INCLUDE "data/maps/headers/BeachHouse.asm" -INCLUDE "scripts/BeachHouse.asm" -BeachHouse_Blocks: -INCBIN "maps/BeachHouse.blk" -INCLUDE "data/maps/objects/BeachHouse.asm" - -INCLUDE "scripts/BeachHouse2.asm" -INCLUDE "scripts/BillsHouse2.asm" -INCLUDE "scripts/ViridianForest2.asm" -INCLUDE "scripts/SSAnne2FRooms_2.asm" -INCLUDE "scripts/SilphCo11F_2.asm" - -INCLUDE "engine/overworld/hidden_objects.asm" -INCLUDE "engine/vermilion_gym_trash_cans.asm" diff --git a/engine/bank3d.asm b/engine/bank3d.asm deleted file mode 100644 index e929e44e..00000000 --- a/engine/bank3d.asm +++ /dev/null @@ -1,491 +0,0 @@ -INCLUDE "engine/battle/common_text.asm" -INCLUDE "engine/battle/link_battle_versus_text.asm" -INCLUDE "engine/battle/unused_stats_functions.asm" -INCLUDE "engine/battle/scroll_draw_trainer_pic.asm" - -StarterPikachuBattleEntranceAnimation: - hlcoord 0, 5 - ld c, 0 -.loop1 - inc c - ld a, c - cp 9 - ret z - ld d, 7 * 13 - push bc - push hl -.loop2 - call .PlaceColumn - dec hl - ld a, d - sub 7 - ld d, a - dec c - jr nz, .loop2 - ld c, 2 - call DelayFrames - pop hl - pop bc - inc hl - jr .loop1 - -.PlaceColumn: - push hl - push de - push bc - ld e, 7 -.loop3 - ld a, d - cp 7 * 7 - jr nc, .okay - ld a, $7f -.okay - ld [hl], a - ld bc, SCREEN_WIDTH - add hl, bc - inc d - dec e - jr nz, .loop3 - pop bc - pop de - pop hl - ret - -INCLUDE "engine/battle/decrement_pp.asm" - -ModifyPikachuHappiness:: - ld a, d - cp PIKAHAPPY_GYMLEADER - jr z, .checkanywhereinparty - cp PIKAHAPPY_WALKING - jr z, .checkanywhereinparty - push de - callfar IsThisPartymonStarterPikachu_Party - pop de - ret nc - jr .proceed - -.checkanywhereinparty - push de - callfar IsStarterPikachuInOurParty - pop de - ret nc - -.proceed - push de - ; Divide [wPikachuHappiness] by 100. Hold the integer part in e. - ld e, $0 - ld a, [wPikachuHappiness] - cp 100 - jr c, .wPikachuHappiness_div_100 - inc e - cp 200 - jr c, .wPikachuHappiness_div_100 - inc e -.wPikachuHappiness_div_100 - ; Get the (d, e) entry from HappinessChangeTable. - ld c, d - dec c - ld b, $0 - ld hl, HappinessChangeTable - add hl, bc - add hl, bc - add hl, bc - ld d, $0 - add hl, de - ld a, [hl] - ; If [hl] is positive, take min(0xff, [hl] + [wPikachuHappiness]). - ; If [hl] is negative, take max(0x00, [hl] + [wPikachuHappiness]). - ; Inexplicably, we're using 100 as the threshold for comparison. - cp 100 - ld a, [wPikachuHappiness] - jr nc, .negative - add [hl] - jr nc, .okay - ld a, -1 - jr .okay - -.negative - add [hl] - jr c, .okay - xor a -.okay - ld [wPikachuHappiness], a - - ; Restore d and get the d'th entry in PikachuMoods. - pop de - dec d - ld hl, PikachuMoods - ld e, d - ld d, $0 - add hl, de - ld a, [hl] - ld b, a - ; Modify Pikachu's mood - cp $80 - jr z, .done - ld a, [wPikachuMood] - jr c, .decreased - cp b - jr nc, .done - ld a, [wd49c] - and a - jr nz, .done - jr .update_mood - -.decreased - cp b - jr c, .done -.update_mood - ld a, b - ld [wPikachuMood], a -.done - ret - -HappinessChangeTable: - ; Increase - db 5, 3, 2 ; Gained a level - db 5, 3, 2 ; HP restore - db 1, 1, 0 ; Used X item - db 3, 2, 1 ; Challenged Gym Leader - db 1, 1, 0 ; Teach TM/HM - db 2, 1, 1 ; Walking around - ; Decrease - db -3, -3, -5 ; Deposited - db -1, -1, -1 ; Fainted in battle - db -5, -5, -10 ; Fainted due to Poison outside of battle - db -5, -5, -10 ; Fainted to opponent at least 30 levels higher - db -10, -10, -20 ; Traded away - -PikachuMoods: - ; Increase - db $8a ; Gained a level - db $83 ; HP restore - db $80 ; Teach TM/HM - db $80 ; Challenged Gym Leader - db $94 ; Unknown (d = 5) - db $80 ; Unknown (d = 6) - ; Decrease - db $62 ; Deposited - db $6c ; Fainted - db $62 ; Unknown (d = 9) - db $6c ; Unknown (d = 10) - db $00 ; Unknown (d = 11) - -RedPicBack: INCBIN "gfx/player/redb.pic" -OldManPic: INCBIN "gfx/battle/oldman.pic" -ProfOakPicBack: INCBIN "gfx/battle/prof.oakb.pic" - -LoadYellowTitleScreenGFX: - ld hl, PokemonLogoGraphics - ld de, vChars2 - ld bc, 115 * $10 - ld a, BANK(PokemonLogoGraphics) ; redundant because this function is in bank3d - call FarCopyData - ld hl, YellowLogoGraphics + 35 * $10 - ld de, vChars0 + 253 * $10 - ld bc, 3 * $10 - ld a, BANK(YellowLogoGraphics) - call FarCopyData - ld hl, YellowLogoGraphics + 38 * $10 - ld de, vChars1 - ld bc, 64 * $10 - ld a, BANK(YellowLogoGraphics) - call FarCopyData - ld hl, YellowLogoGraphics + 102 * $10 - ld de, vChars0 + 240 * $10 - ld bc, 12 * $10 - ld a, BANK(YellowLogoGraphics) - call FarCopyData - ret - -TitleScreen_PlacePokemonLogo: - hlcoord 2, 1 - ld de, TitleScreenPokemonLogoTilemap - lb bc, 7, 16 - call Bank3D_CopyBox - ret - -TitleScreen_PlacePikaSpeechBubble: - hlcoord 6, 4 - ld de, TitleScreenPikaBubbleTilemap - lb bc, 4, 7 - call Bank3D_CopyBox - hlcoord 9, 8 - ld [hl], $64 - inc hl - ld [hl], $65 - ret - -TitleScreen_PlacePikachu: - hlcoord 4, 8 - ld de, TitleScreenPikachuTilemap - lb bc, 9, 12 - call Bank3D_CopyBox - hlcoord 16, 10 - ld [hl], $96 - hlcoord 16, 11 - ld [hl], $9d - hlcoord 16, 12 - ld [hl], $a7 - hlcoord 16, 13 - ld [hl], $b1 - ld hl, TitleScreenPikachuEyesOAMData - ld de, wOAMBuffer - ld bc, $20 - call CopyData - ret - -TitleScreenPikachuEyesOAMData: - db $60, $40, $f1, $22 - db $60, $48, $f0, $22 - db $68, $40, $f3, $22 - db $68, $48, $f2, $22 - db $60, $60, $f0, $02 - db $60, $68, $f1, $02 - db $68, $60, $f2, $02 - db $68, $68, $f3, $02 - -Bank3D_CopyBox: -; copy cxb (xy) screen area from de to hl -.row - push bc - push hl -.col - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .col - pop hl - ld bc, SCREEN_WIDTH - add hl, bc - pop bc - dec b - jr nz, .row - ret - -TitleScreenPokemonLogoTilemap: -; 16x7 (xy) - db $f4, $f4, $f4, $f4, $f4, $f4, $49, $f4, $72, $30, $f4, $f4, $f4, $f4, $f4, $f4 - db $fd, $01, $02, $03, $04, $05, $06, $07, $08, $09, $0a, $0b, $f4, $0d, $0e, $0f - db $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $1a, $1b, $1c, $1d, $1e, $1f - db $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $2a, $2b, $2c, $2d, $2e, $2f - db $f4, $31, $32, $33, $34, $35, $36, $37, $38, $39, $3a, $3b, $3c, $3d, $3e, $3f - db $f4, $41, $42, $43, $44, $45, $46, $47, $48, $f4, $4a, $4b, $4c, $4d, $4e, $4f - db $f4, $6a, $6b, $6c, $6d, $f4, $f4, $f4, $f4, $f4, $f4, $6e, $6f, $70, $71, $f4 - -Pointer_f4669: -; Unreferenced - db $47, $48, $49, $4a, $4b, $4c, $4d, $4e, $4f, $5f - -TitleScreenPikaBubbleTilemap: -; 7x4 (xy) - db $24, $25, $66, $67, $68, $69, $2a - db $50, $51, $52, $53, $54, $55, $56 - db $57, $58, $59, $5a, $5b, $5c, $5d - db $6d, $5e, $5f, $60, $61, $62, $63 - -TitleScreenPikachuTilemap: -; 12x9 (xy) - db $80, $81, $82, $83, $00, $00, $00, $00, $84, $85, $86, $87 - db $88, $89, $8a, $8b, $8c, $8d, $8d, $8e, $8f, $8a, $90, $91 - db $00, $92, $93, $8a, $8a, $8a, $8a, $8a, $8a, $94, $95, $00 - db $00, $00, $97, $8a, $8a, $98, $99, $8a, $8a, $9a, $9b, $9c - db $00, $00, $9e, $9f, $a0, $a1, $a2, $a3, $a4, $a5, $a6, $8a - db $00, $a8, $a9, $aa, $8a, $ab, $ac, $8a, $ad, $ae, $af, $b0 - db $00, $b2, $b3, $b4, $8a, $8a, $8a, $8a, $b5, $b6, $b7, $b8 - db $00, $b9, $ba, $8a, $8a, $8a, $8a, $8a, $8a, $bb, $bc, $00 - db $00, $00, $bd, $8a, $8a, $8a, $8a, $8a, $8a, $be, $bf, $00 - -PokemonLogoGraphics: INCBIN "gfx/title/pokemon_logo.2bpp" -PokemonLogoGraphicsEnd: -YellowLogoGraphics: INCBIN "gfx/yellow_titlescreen.2bpp" -YellowLogoGraphicsEnd: - -INCLUDE "engine/menus/link_menu.asm" - -HandleMenuInputDouble: - xor a - ld [wPartyMenuAnimMonEnabled], a - -HandleMenuInputPokemonSelectionDouble: - ldh a, [hDownArrowBlinkCount1] - push af - ldh a, [hDownArrowBlinkCount2] - push af ; save existing values on stack - xor a - ldh [hDownArrowBlinkCount1], a ; blinking down arrow timing value 1 - ld a, $06 - ldh [hDownArrowBlinkCount2], a ; blinking down arrow timing value 2 -.loop1 - xor a - ld [wAnimCounter], a ; counter for pokemon shaking animation - call .UpdateCursorTile - call JoypadLowSensitivity - ldh a, [hJoy5] - and a ; was a key pressed? - jr nz, .keyPressed - pop af - ldh [hDownArrowBlinkCount2], a - pop af - ldh [hDownArrowBlinkCount1], a ; restore previous values - xor a - ld [wMenuWrappingEnabled], a ; disable menu wrapping - ret -.keyPressed - xor a - ld [wCheckFor180DegreeTurn], a - ldh a, [hJoy5] - ld b, a - bit 6, a ; pressed Up key? - jr z, .checkIfDownPressed -.upPressed - ld a, [wCurrentMenuItem] ; selected menu item - and a ; already at the top of the menu? - jr z, .checkOtherKeys -.notAtTop - dec a - ld [wCurrentMenuItem], a ; move selected menu item up one space - jr .checkOtherKeys -.checkIfDownPressed - bit 7, a - jr z, .checkOtherKeys -.downPressed - ld a, [wCurrentMenuItem] - inc a - ld c, a - ld a, [wMaxMenuItem] - cp c - jr c, .checkOtherKeys - ld a, c - ld [wCurrentMenuItem], a -.checkOtherKeys - ld a, [wMenuWatchedKeys] - and b ; does the menu care about any of the pressed keys? - jp z, .loop1 -.checkIfAButtonOrBButtonPressed - ldh a, [hJoy5] - and A_BUTTON | B_BUTTON - jr z, .skipPlayingSound -.AButtonOrBButtonPressed - ld a, SFX_PRESS_AB - call PlaySound ; play sound -.skipPlayingSound - pop af - ldh [hDownArrowBlinkCount2], a - pop af - ldh [hDownArrowBlinkCount1], a ; restore previous values - ldh a, [hJoy5] - ret - -.UpdateCursorTile: - ld a, [wTopMenuItemY] - and a - jr z, .asm_f5ac0 - hlcoord 0, 0 - ld bc, SCREEN_WIDTH -.loop - add hl, bc - dec a - jr nz, .loop -.asm_f5ac0 - ld a, [wTopMenuItemX] - ld b, $0 - ld c, a - add hl, bc - push hl - ld a, [wLastMenuItem] - and a - jr z, .asm_f5ad5 - ld bc, $28 -.loop2 - add hl, bc - dec a - jr nz, .loop2 -.asm_f5ad5 - ld a, [hl] - cp "â–¶" - jr nz, .asm_f5ade - ld a, [wTileBehindCursor] - ld [hl], a -.asm_f5ade - pop hl - ld a, [wCurrentMenuItem] - and a - jr z, .asm_f5aec - ld bc, $28 -.loop3 - add hl, bc - dec a - jr nz, .loop3 -.asm_f5aec - ld a, [hl] - cp "â–¶" - jr z, .asm_f5af4 - ld [wTileBehindCursor], a -.asm_f5af4 - ld a, "â–¶" - ld [hl], a - ld a, l - ld [wMenuCursorLocation], a - ld a, h - ld [wMenuCursorLocation + 1], a - ld a, [wCurrentMenuItem] - ld [wLastMenuItem], a - ret - -INCLUDE "engine/overworld/field_move_messages.asm" - -INCLUDE "engine/items/inventory.asm" - -INCLUDE "gfx/trainer_card.asm" - -ReadSuperRodData: - ld a, [wCurMap] - ld c, a - ld hl, FishingSlots -.loop - ld a, [hli] - cp $ff - jr z, .notfound - cp c - jr z, .found - ld de, $8 - add hl, de - jr .loop -.found - call GenerateRandomFishingEncounter - ret -.notfound - ld de, $0 - ret - -GenerateRandomFishingEncounter: - call Random - cp $66 - jr c, .asm_f5ed6 - inc hl - inc hl - cp $b2 - jr c, .asm_f5ed6 - inc hl - inc hl - cp $e5 - jr c, .asm_f5ed6 - inc hl - inc hl -.asm_f5ed6 - ld e, [hl] - inc hl - ld d, [hl] - ret - -INCLUDE "data/wild/super_rod.asm" -INCLUDE "engine/battle/bank3d_battle.asm" -INCLUDE "engine/items/tm_prices.asm" -INCLUDE "engine/math/multiply_divide.asm" -INCLUDE "engine/events/give_pokemon.asm" -INCLUDE "engine/battle/get_trainer_name.asm" -INCLUDE "engine/math/random.asm" -INCLUDE "engine/predefs.asm" diff --git a/engine/bank3e.asm b/engine/bank3e.asm deleted file mode 100644 index 32f5ebfd..00000000 --- a/engine/bank3e.asm +++ /dev/null @@ -1,5 +0,0 @@ -INCLUDE "engine/surfing_minigame.asm" -INCLUDE "engine/yellow_intro.asm" -INCLUDE "data/animated_objects_3e_2.asm" -YellowIntroGraphics: INCBIN "gfx/yellow_intro.2bpp" -INCLUDE "engine/animated_objects_3e.asm" diff --git a/engine/bank3f.asm b/engine/bank3f.asm deleted file mode 100644 index c26e9834..00000000 --- a/engine/bank3f.asm +++ /dev/null @@ -1,23 +0,0 @@ -INCLUDE "data/maps/songs.asm" -INCLUDE "data/maps/map_header_pointers.asm" -INCLUDE "data/maps/map_header_banks.asm" -INCLUDE "engine/pikachu_follow.asm" -INCLUDE "engine/pikachu_status.asm" -INCLUDE "engine/pikachu_emotions.asm" -INCLUDE "engine/pikachu_movement.asm" -INCLUDE "engine/pikachu_pic_animation.asm" - -Func_fe66e: - ret - -OfficerJennySprite: INCBIN "gfx/sprites/officer_jenny.2bpp" -PikachuSprite: INCBIN "gfx/sprites/pikachu.2bpp" -SandshrewSprite: INCBIN "gfx/sprites/sandshrew.2bpp" -OddishSprite: INCBIN "gfx/sprites/oddish.2bpp" -BulbasaurSprite: INCBIN "gfx/sprites/bulbasaur.2bpp" -JigglypuffSprite: INCBIN "gfx/sprites/jigglypuff.2bpp" -ClefairySprite: INCBIN "gfx/sprites/clefairy.2bpp" -ChanseySprite: INCBIN "gfx/sprites/chansey.2bpp" -SurfingPikachuSprite:: INCBIN "gfx/sprites/surfing_pikachu.2bpp" -JessieSprite: INCBIN "gfx/sprites/jessie.2bpp" -JamesSprite: INCBIN "gfx/sprites/james.2bpp" diff --git a/engine/battle/animations.asm b/engine/battle/animations.asm index 4508dbaa..3b0fd4ec 100755 --- a/engine/battle/animations.asm +++ b/engine/battle/animations.asm @@ -579,16 +579,16 @@ Func_78e98: xor a ldh [hAutoBGTransferEnabled], a call ClearScreen - ld h, vBGMap0 / $100 + ld h, HIGH(vBGMap0) call WriteLowerByteOfBGMapAndEnableBGTransfer call Delay3 xor a ldh [hAutoBGTransferEnabled], a call LoadScreenTilesFromBuffer2 - ld h, vBGMap1 / $100 + ld h, HIGH(vBGMap1) WriteLowerByteOfBGMapAndEnableBGTransfer: - ld l, vBGMap0 & $ff + ld l, LOW(vBGMap0) call BattleAnimCopyTileMapToVRAM ld a, $1 ldh [hAutoBGTransferEnabled], a diff --git a/engine/battle/bank3d_battle.asm b/engine/battle/bank3d_battle.asm deleted file mode 100644 index 48c3cde3..00000000 --- a/engine/battle/bank3d_battle.asm +++ /dev/null @@ -1,292 +0,0 @@ -InitBattle:: - ld a, [wCurOpponent] - and a - jr z, DetermineWildOpponent - -InitOpponent: - ld a, [wCurOpponent] - ld [wcf91], a - ld [wEnemyMonSpecies2], a - jr InitBattleCommon - -DetermineWildOpponent: - ld a, [wd732] - bit 1, a - jr z, .asm_3ef2f - ldh a, [hJoyHeld] - bit 1, a ; B button pressed? - ret nz -.asm_3ef2f - ld a, [wNumberOfNoRandomBattleStepsLeft] - and a - ret nz - callfar TryDoWildEncounter - ret nz -InitBattleCommon: - ld a, [wMapPalOffset] - push af - ld hl, wLetterPrintingDelayFlags - ld a, [hl] - push af - res 1, [hl] - call InitBattleVariables - ld a, [wEnemyMonSpecies2] - sub OPP_ID_OFFSET - jp c, InitWildBattle - ld [wTrainerClass], a - call GetTrainerInformation - callfar ReadTrainer - callfar DoBattleTransitionAndInitBattleVariables - call _LoadTrainerPic - xor a - ld [wEnemyMonSpecies2], a - ldh [hStartTileID], a - dec a - ld [wAICount], a - hlcoord 12, 0 - predef CopyUncompressedPicToTilemap - ld a, $ff - ld [wEnemyMonPartyPos], a - ld a, $2 - ld [wIsInBattle], a - -; Is this a major story battle? - ld a, [wLoneAttackNo] - and a - jp z, _InitBattleCommon - callabd_ModifyPikachuHappiness PIKAHAPPY_GYMLEADER ; useless since already in bank3d - jp _InitBattleCommon - -InitWildBattle: - ld a, $1 - ld [wIsInBattle], a - callfar LoadEnemyMonData - callfar DoBattleTransitionAndInitBattleVariables - ld a, [wCurOpponent] - cp RESTLESS_SOUL - jr z, .isGhost - callfar IsGhostBattle - jr nz, .isNoGhost -.isGhost - ld hl, wMonHSpriteDim - ld a, $66 - ld [hli], a ; write sprite dimensions - ld bc, GhostPic - ld a, c - 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 a, [wcf91] - push af - ld a, MON_GHOST - ld [wcf91], a - ld de, vFrontPic - call LoadMonFrontSprite ; load ghost sprite - pop af - ld [wcf91], a - jr .spriteLoaded -.isNoGhost - ld de, vFrontPic - call LoadMonFrontSprite ; load mon sprite -.spriteLoaded - xor a - ld [wTrainerClass], a - ldh [hStartTileID], a - hlcoord 12, 0 - predef CopyUncompressedPicToTilemap - -; common code that executes after init battle code specific to trainer or wild battles -_InitBattleCommon: - ld b, SET_PAL_BATTLE_BLACK - call RunPaletteCommand - callfar SlidePlayerAndEnemySilhouettesOnScreen - xor a - ldh [hAutoBGTransferEnabled], a - ld hl, .emptyString - call PrintText - call SaveScreenTilesToBuffer1 - call ClearScreen - ld a, $98 - ldh [hAutoBGTransferDest + 1], a - ld a, $1 - ldh [hAutoBGTransferEnabled], a - call Delay3 - ld a, $9c - ldh [hAutoBGTransferDest + 1], a - call LoadScreenTilesFromBuffer1 - hlcoord 9, 7 - lb bc, 5, 10 - call ClearScreenArea - hlcoord 1, 0 - lb bc, 4, 10 - call ClearScreenArea - call ClearSprites - ld a, [wIsInBattle] - dec a ; is it a wild battle? - ld hl, DrawEnemyHUDAndHPBar - ld b, BANK(DrawEnemyHUDAndHPBar) - call z, Bankswitch ; draw enemy HUD and HP bar if it's a wild battle - callfar StartBattle - callfar EndOfBattle - pop af - ld [wLetterPrintingDelayFlags], a - pop af - ld [wMapPalOffset], a - ld a, [wSavedTilesetType] - ldh [hTilesetType], a - scf - ret -.emptyString - db "@" - -_LoadTrainerPic: -; wd033-wd034 contain pointer to pic - ld a, [wTrainerPicPointer] - ld e, a - ld a, [wTrainerPicPointer + 1] - ld d, a ; de contains pointer to trainer pic - ld a, [wLinkState] - and a - ld a, BANK(TrainerPics) ; this is where all the trainer pics are (not counting Red's) - jr z, .loadSprite - ld a, BANK(RedPicFront) -.loadSprite - call UncompressSpriteFromDE - ld de, vFrontPic - ld a, $77 - ld c, a - jp LoadUncompressedSpriteData - -LoadMonBackPic: -; Assumes the monster's attributes have -; been loaded with GetMonHeader. - ld a, [wBattleMonSpecies2] - ld [wcf91], a - hlcoord 1, 5 - lb bc, 7, 8 - call ClearScreenArea - ld hl, wMonHBackSprite - wMonHeader - call UncompressMonSprite - predef ScaleSpriteByTwo - ld de, vBackPic - call InterlaceMergeSpriteBuffers ; combine the two buffers to a single 2bpp sprite - ld hl, vSprites - ld de, vBackPic - ld c, (2*SPRITEBUFFERSIZE)/16 ; count of 16-byte chunks to be copied - ldh a, [hLoadedROMBank] - ld b, a - jp CopyVideoData - -AnimateSendingOutMon: - ld a, [wPredefRegisters] - ld h, a - ld a, [wPredefRegisters + 1] - ld l, a - ldh a, [hStartTileID] - ldh [hDownArrowBlinkCount1], a - ld b, $4c - ld a, [wIsInBattle] - and a - jr z, .asm_f61ef - add b - ld [hl], a - call Delay3 - ld bc, -41 - add hl, bc - ld a, $1 - ld [wNumMovesMinusOne], a - ld bc, $303 - predef CopyDownscaledMonTiles - ld c, $4 - call DelayFrames - ld bc, -41 - add hl, bc - xor a - ld [wNumMovesMinusOne], a - ld bc, $505 - predef CopyDownscaledMonTiles - ld c, $5 - call DelayFrames - ld bc, -41 - jr .asm_f61f2 -.asm_f61ef - ld bc, -123 -.asm_f61f2 - add hl, bc - ldh a, [hDownArrowBlinkCount1] - add $31 - jr CopyUncompressedPicToHL - -CopyUncompressedPicToTilemap: - ld a, [wPredefRegisters] - ld h, a - ld a, [wPredefRegisters + 1] - ld l, a - ldh a, [hStartTileID] -CopyUncompressedPicToHL:: - ld bc, $707 - ld de, $14 - push af - ld a, [wSpriteFlipped] - and a - jr nz, .asm_f6220 - pop af -.asm_f6211 - push bc - push hl -.asm_f6213 - ld [hl], a - add hl, de - inc a - dec c - jr nz, .asm_f6213 - pop hl - inc hl - pop bc - dec b - jr nz, .asm_f6211 - ret - -.asm_f6220 - push bc - ld b, $0 - dec c - add hl, bc - pop bc - pop af -.asm_f6227 - push bc - push hl -.asm_f6229 - ld [hl], a - add hl, de - inc a - dec c - jr nz, .asm_f6229 - pop hl - dec hl - pop bc - dec b - jr nz, .asm_f6227 - ret - -INCLUDE "engine/battle/init_battle_variables.asm" -INCLUDE "engine/battle/move_effects/focus_energy.asm" -INCLUDE "engine/battle/move_effects/heal.asm" -INCLUDE "engine/battle/move_effects/transform.asm" -INCLUDE "engine/battle/move_effects/reflect_light_screen.asm" -INCLUDE "engine/battle/move_effects/mist.asm" -INCLUDE "engine/battle/move_effects/one_hit_ko.asm" -INCLUDE "engine/battle/move_effects/pay_day.asm" -INCLUDE "engine/battle/move_effects/paralyze.asm" diff --git a/engine/battle/init_battle.asm b/engine/battle/init_battle.asm new file mode 100644 index 00000000..d6ba51ed --- /dev/null +++ b/engine/battle/init_battle.asm @@ -0,0 +1,282 @@ +InitBattle:: + ld a, [wCurOpponent] + and a + jr z, DetermineWildOpponent + +InitOpponent: + ld a, [wCurOpponent] + ld [wcf91], a + ld [wEnemyMonSpecies2], a + jr InitBattleCommon + +DetermineWildOpponent: + ld a, [wd732] + bit 1, a + jr z, .asm_3ef2f + ldh a, [hJoyHeld] + bit 1, a ; B button pressed? + ret nz +.asm_3ef2f + ld a, [wNumberOfNoRandomBattleStepsLeft] + and a + ret nz + callfar TryDoWildEncounter + ret nz +InitBattleCommon: + ld a, [wMapPalOffset] + push af + ld hl, wLetterPrintingDelayFlags + ld a, [hl] + push af + res 1, [hl] + call InitBattleVariables + ld a, [wEnemyMonSpecies2] + sub OPP_ID_OFFSET + jp c, InitWildBattle + ld [wTrainerClass], a + call GetTrainerInformation + callfar ReadTrainer + callfar DoBattleTransitionAndInitBattleVariables + call _LoadTrainerPic + xor a + ld [wEnemyMonSpecies2], a + ldh [hStartTileID], a + dec a + ld [wAICount], a + hlcoord 12, 0 + predef CopyUncompressedPicToTilemap + ld a, $ff + ld [wEnemyMonPartyPos], a + ld a, $2 + ld [wIsInBattle], a + +; Is this a major story battle? + ld a, [wLoneAttackNo] + and a + jp z, _InitBattleCommon + callabd_ModifyPikachuHappiness PIKAHAPPY_GYMLEADER ; useless since already in bank3d + jp _InitBattleCommon + +InitWildBattle: + ld a, $1 + ld [wIsInBattle], a + callfar LoadEnemyMonData + callfar DoBattleTransitionAndInitBattleVariables + ld a, [wCurOpponent] + cp RESTLESS_SOUL + jr z, .isGhost + callfar IsGhostBattle + jr nz, .isNoGhost +.isGhost + ld hl, wMonHSpriteDim + ld a, $66 + ld [hli], a ; write sprite dimensions + ld bc, GhostPic + ld a, c + 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 a, [wcf91] + push af + ld a, MON_GHOST + ld [wcf91], a + ld de, vFrontPic + call LoadMonFrontSprite ; load ghost sprite + pop af + ld [wcf91], a + jr .spriteLoaded +.isNoGhost + ld de, vFrontPic + call LoadMonFrontSprite ; load mon sprite +.spriteLoaded + xor a + ld [wTrainerClass], a + ldh [hStartTileID], a + hlcoord 12, 0 + predef CopyUncompressedPicToTilemap + +; common code that executes after init battle code specific to trainer or wild battles +_InitBattleCommon: + ld b, SET_PAL_BATTLE_BLACK + call RunPaletteCommand + callfar SlidePlayerAndEnemySilhouettesOnScreen + xor a + ldh [hAutoBGTransferEnabled], a + ld hl, .emptyString + call PrintText + call SaveScreenTilesToBuffer1 + call ClearScreen + ld a, $98 + ldh [hAutoBGTransferDest + 1], a + ld a, $1 + ldh [hAutoBGTransferEnabled], a + call Delay3 + ld a, $9c + ldh [hAutoBGTransferDest + 1], a + call LoadScreenTilesFromBuffer1 + hlcoord 9, 7 + lb bc, 5, 10 + call ClearScreenArea + hlcoord 1, 0 + lb bc, 4, 10 + call ClearScreenArea + call ClearSprites + ld a, [wIsInBattle] + dec a ; is it a wild battle? + ld hl, DrawEnemyHUDAndHPBar + ld b, BANK(DrawEnemyHUDAndHPBar) + call z, Bankswitch ; draw enemy HUD and HP bar if it's a wild battle + callfar StartBattle + callfar EndOfBattle + pop af + ld [wLetterPrintingDelayFlags], a + pop af + ld [wMapPalOffset], a + ld a, [wSavedTilesetType] + ldh [hTilesetType], a + scf + ret +.emptyString + db "@" + +_LoadTrainerPic: +; wd033-wd034 contain pointer to pic + ld a, [wTrainerPicPointer] + ld e, a + ld a, [wTrainerPicPointer + 1] + ld d, a ; de contains pointer to trainer pic + ld a, [wLinkState] + and a + ld a, BANK(TrainerPics) ; this is where all the trainer pics are (not counting Red's) + jr z, .loadSprite + ld a, BANK(RedPicFront) +.loadSprite + call UncompressSpriteFromDE + ld de, vFrontPic + ld a, $77 + ld c, a + jp LoadUncompressedSpriteData + +LoadMonBackPic: +; Assumes the monster's attributes have +; been loaded with GetMonHeader. + ld a, [wBattleMonSpecies2] + ld [wcf91], a + hlcoord 1, 5 + lb bc, 7, 8 + call ClearScreenArea + ld hl, wMonHBackSprite - wMonHeader + call UncompressMonSprite + predef ScaleSpriteByTwo + ld de, vBackPic + call InterlaceMergeSpriteBuffers ; combine the two buffers to a single 2bpp sprite + ld hl, vSprites + ld de, vBackPic + ld c, (2*SPRITEBUFFERSIZE)/16 ; count of 16-byte chunks to be copied + ldh a, [hLoadedROMBank] + ld b, a + jp CopyVideoData + +AnimateSendingOutMon: + ld a, [wPredefRegisters] + ld h, a + ld a, [wPredefRegisters + 1] + ld l, a + ldh a, [hStartTileID] + ldh [hDownArrowBlinkCount1], a + ld b, $4c + ld a, [wIsInBattle] + and a + jr z, .asm_f61ef + add b + ld [hl], a + call Delay3 + ld bc, -41 + add hl, bc + ld a, $1 + ld [wNumMovesMinusOne], a + ld bc, $303 + predef CopyDownscaledMonTiles + ld c, $4 + call DelayFrames + ld bc, -41 + add hl, bc + xor a + ld [wNumMovesMinusOne], a + ld bc, $505 + predef CopyDownscaledMonTiles + ld c, $5 + call DelayFrames + ld bc, -41 + jr .asm_f61f2 +.asm_f61ef + ld bc, -123 +.asm_f61f2 + add hl, bc + ldh a, [hDownArrowBlinkCount1] + add $31 + jr CopyUncompressedPicToHL + +CopyUncompressedPicToTilemap: + ld a, [wPredefRegisters] + ld h, a + ld a, [wPredefRegisters + 1] + ld l, a + ldh a, [hStartTileID] +CopyUncompressedPicToHL:: + ld bc, $707 + ld de, $14 + push af + ld a, [wSpriteFlipped] + and a + jr nz, .asm_f6220 + pop af +.asm_f6211 + push bc + push hl +.asm_f6213 + ld [hl], a + add hl, de + inc a + dec c + jr nz, .asm_f6213 + pop hl + inc hl + pop bc + dec b + jr nz, .asm_f6211 + ret + +.asm_f6220 + push bc + ld b, $0 + dec c + add hl, bc + pop bc + pop af +.asm_f6227 + push bc + push hl +.asm_f6229 + ld [hl], a + add hl, de + inc a + dec c + jr nz, .asm_f6229 + pop hl + dec hl + pop bc + dec b + jr nz, .asm_f6227 + ret diff --git a/engine/battle/pikachu_entrance_anim.asm b/engine/battle/pikachu_entrance_anim.asm new file mode 100644 index 00000000..8af65cee --- /dev/null +++ b/engine/battle/pikachu_entrance_anim.asm @@ -0,0 +1,47 @@ +StarterPikachuBattleEntranceAnimation: + hlcoord 0, 5 + ld c, 0 +.loop1 + inc c + ld a, c + cp 9 + ret z + ld d, 7 * 13 + push bc + push hl +.loop2 + call .PlaceColumn + dec hl + ld a, d + sub 7 + ld d, a + dec c + jr nz, .loop2 + ld c, 2 + call DelayFrames + pop hl + pop bc + inc hl + jr .loop1 + +.PlaceColumn: + push hl + push de + push bc + ld e, 7 +.loop3 + ld a, d + cp 7 * 7 + jr nc, .okay + ld a, $7f +.okay + ld [hl], a + ld bc, SCREEN_WIDTH + add hl, bc + inc d + dec e + jr nz, .loop3 + pop bc + pop de + pop hl + ret diff --git a/engine/bg_map_attributes.asm b/engine/bg_map_attributes.asm deleted file mode 100644 index 4c50bcf8..00000000 --- a/engine/bg_map_attributes.asm +++ /dev/null @@ -1,219 +0,0 @@ -INCLUDE "data/bg_map_attributes.asm" - -LoadBGMapAttributes:: - ld hl, BGMapAttributesPointers - ld a, c ; c = which packet - push af ; save for later (to determine if we're handling the trainer card or party menu) - dec a ; read this code as: - add a ; dec a - ld e, a ; add a - xor a ; ld e, a - ld d, a ; ld d, 0 - add hl, de ; add hl, de - ld a, [hli] ; ld a, [hli] - ld e, a ; ld h, [hl] - ld a, [hl] ; ld l, a - ld h, a - ld a, e - ld l, a - - di - ld a, $1 - ldh [rVBK], a - push hl - ld a, [hl] - ld c, a ; save attribute count for later - ld de, $10 - add hl, de - ld a, h - ldh [rHDMA1], a - ld a, l - ldh [rHDMA2], a - ld de, vBGMap0 - ld a, d - ldh [rHDMA3], a - ld a, e - ldh [rHDMA4], a - - ldh a, [rLCDC] - and rLCDC_ENABLE_MASK ; is LCD off? - jr z, .lcdOff ; if off, transfer immediately -; wait for VBlank if LCD is on -.waitForVBlankLoop1 - ldh a, [rLY] - cp $90 - jr nz, .waitForVBlankLoop1 -.waitForAccessibleVRAMLoop1 - ldh a, [rSTAT] - and %10 ; are we in HBlank or VBlank? - jr nz, .waitForAccessibleVRAMLoop1 ; loop until we're in a safe period to transfer to VRAM -.lcdOff - ld a, c ; number of BG attributes to transfer, plus 1 times 16 - ldh [rHDMA5], a ; initiate transfer - call Func_3082 ; update audio so it doesn't "lag" - pop hl - ld a, [hli] - ld c, a ; number of BG attributes to transfer, plus 1 times 16 - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a ; offset of the attributes - add hl, de ; hl = new pointer - ld a, h - ldh [rHDMA1], a - ld a, l - ldh [rHDMA2], a - ld de, vBGMap1 ; copy to vBGMap1 - ld a, d - ldh [rHDMA3], a - ld a, e - ldh [rHDMA4], a -; LCD check again - ldh a, [rLCDC] - and rLCDC_ENABLE_MASK ; is LCD off? - jr z, .lcdOff2 ; if off, transfer immediately -; wait for VBlank if LCD is on -.waitForVBlankLoop2 - ldh a, [rLY] - cp $90 - jr nz, .waitForVBlankLoop2 -.waitForAccessibleVRAMLoop2 - ldh a, [rSTAT] - and %10 ; are we in HBlank or VBlank? - jr nz, .waitForAccessibleVRAMLoop2 ; loop until we're in a safe period to transfer to VRAM -.lcdOff2 - ld a, c - ldh [rHDMA5], a - pop af - dec a - dec a - dec a - dec a - jr nz, .checkIfHandlingPartyMenu - call HandleBadgeFaceAttributes - jr .done -.checkIfHandlingPartyMenu - dec a - call z, HandlePartyHPBarAttributes -.done - call Func_3082 - ldh a, [rIF] - res VBLANK, a - ldh [rIF], a - xor a - ldh [rVBK], a - ei - ret - -BGMapAttributesPointers: - dw BGMapAttributes_Unknown1 - dw BGMapAttributes_Unknown2 - dw BGMapAttributes_GameFreakIntro - dw BGMapAttributes_TrainerCard - dw BGMapAttributes_PartyMenu - dw BGMapAttributes_NidorinoIntro - dw BGMapAttributes_TitleScreen - dw BGMapAttributes_Slots - dw BGMapAttributes_Pokedex - dw BGMapAttributes_StatusScreen - dw BGMapAttributes_Battle - dw BGMapAttributes_WholeScreen - dw BGMapAttributes_Unknown13 - -HandleBadgeFaceAttributes: -; zero out the attributes if the player doesn't have the respective badge -; BOULDERBADGE - ld hl, vBGMap1 + $183 - ld de, wTrainerCardBadgeAttributes + 6 * 0 - ld a, [de] - and a - call z, ZeroOutCurrentBadgeAttributes -; CASCADEBADGE - ld hl, vBGMap1 + $187 - ld de, wTrainerCardBadgeAttributes + 6 * 1 - ld a, [de] - and a - call z, ZeroOutCurrentBadgeAttributes -; THUNDERBADGE - ld hl, vBGMap1 + $18b - ld de, wTrainerCardBadgeAttributes + 6 * 2 - ld a, [de] - and a - call z, ZeroOutCurrentBadgeAttributes -; RAINBOWBADGE - ld hl, vBGMap1 + $18f - ld de, wTrainerCardBadgeAttributes + 6 * 3 - ld a, [de] - and a - call z, ZeroOutCurrentBadgeAttributes -; SOULBADGE - ld hl, vBGMap1 + $1e3 - ld de, wTrainerCardBadgeAttributes + 6 * 6 - ld a, [de] - and a - call z, ZeroOutCurrentBadgeAttributes -; MARSHBADGE - ld hl, vBGMap1 + $1e7 - ld de, wTrainerCardBadgeAttributes + 6 * 7 - ld a, [de] - and a - call z, ZeroOutCurrentBadgeAttributes -; VOLCANOBADGE - ld hl, vBGMap1 + $1eb - ld de, wTrainerCardBadgeAttributes + 6 * 8 - ld a, [de] - and a - call z, ZeroOutCurrentBadgeAttributes -; EARTHBADGE - ld hl, vBGMap1 + $1ef - ld de, wTrainerCardBadgeAttributes + 6 * 9 - ld a, [de] - and a - call z, ZeroOutCurrentBadgeAttributes - ret - -ZeroOutCurrentBadgeAttributes: - push hl - xor a - ld [hli], a - ld [hl], a - ld bc, $1f - add hl, bc - ld [hli], a - ld [hl], a - pop hl - ret - -HandlePartyHPBarAttributes: -; hp bars require 3 (green, orange, red) colours, when there are only 2 "free" colours per palette -; therefore, we must transfer individual bg attributes where the locations of the hp bars are in vram - ld hl, vBGMap1 + $25 ; location of start of the HP bar in vram - ld de, wPartyHPBarAttributes - ld c, PARTY_LENGTH -.loop - push bc - push hl - ld a, [de] - and $3 ; 4 possible palettes - rept 7 ; hp bar length in tiles - ld [hli], a - endr - pop hl - ld bc, $40 ; get 2nd party location - add hl, bc - push hl - - push de ; (inefficiently) copy de to hl - pop hl - - ld bc, $6 - add hl, bc ; get the next palette - - push hl - pop de ; copy back to de - - pop hl - pop bc - dec c - jr nz, .loop - ret diff --git a/engine/diploma_3a.asm b/engine/diploma_3a.asm deleted file mode 100755 index 83a7345b..00000000 --- a/engine/diploma_3a.asm +++ /dev/null @@ -1,168 +0,0 @@ -CIRCLE_TILE_ID EQU $10 - -_DisplayDiploma: - call GBPalWhiteOutWithDelay3 - call ClearScreen - ld de, SurfingPikachu3Graphics - ld hl, vChars2 - lb bc, BANK(SurfingPikachu3Graphics), (SurfingPikachu3GraphicsEnd - SurfingPikachu3Graphics) / $10 - call CopyVideoData - - hlcoord 0, 0 - call Func_e9bdf - - hlcoord 0, 0 - call Func_e9beb - - hlcoord 19, 0 - call Func_e9beb - - ld a, $00 - hlcoord 0, 0 - ld [hl], a - hlcoord 19, 0 - ld [hl], a - - ld de, String_e9a73 - hlcoord 5, 2 - call PlaceString - - ld de, String_e9a7d - hlcoord 3, 4 - call PlaceString - - ld de, wPlayerName - hlcoord 10, 4 - call PlaceString - - ld de, String_e9a84 - hlcoord 2, 6 - call PlaceString - - ld de, String_e9ac8 - hlcoord 9, 16 - call PlaceString - - ld b, SET_PAL_GENERIC - call RunPaletteCommand - ld a, $01 - ldh [hAutoBGTransferEnabled], a - call Delay3 - call GBPalNormal - ret - -String_e9a73: - db CIRCLE_TILE_ID, "Diploma", CIRCLE_TILE_ID, "@" - -String_e9a7d: - db "Player@" - -String_e9a84: - db "Congrats! This" - next "diploma certifies" - next "that you have" - next "completed your" - next "#DEX.@" - -String_e9ac8: - db "GAME FREAK@" - -Func_e9ad3: - call ClearScreen - hlcoord 0, 17 - call Func_e9bdf - hlcoord 0, 0 - call Func_e9beb - hlcoord 19, 0 - call Func_e9beb - ld a, $00 - hlcoord 0, 17 - ld [hl], a - hlcoord 19, 17 - ld [hl], a - ld de, Tilemap_e9b3e - hlcoord 6, 2 - lb bc, 10, 12 - call Diploma_Surfing_CopyBox - ld de, Tilemap_e9bb6 - hlcoord 5, 13 - lb bc, 1, 11 - call Diploma_Surfing_CopyBox - ld de, String_e9bd5 - hlcoord 2, 15 - call PlaceString - hlcoord 12, 15 - ld de, wPlayTimeHours - lb bc, $40 | 1, 3 - call PrintNumber - ld [hl], $16 - inc hl - ld de, wPlayTimeMinutes - lb bc, $80 | 1, 2 - call PrintNumber - ld a, [wNumSetBits] - cp 151 - ret nz - ld de, TileMap_e9bc1 - hlcoord 2, 0 - lb bc, 4, 5 - call Diploma_Surfing_CopyBox - ret - -Tilemap_e9b3e: - db $7f, $7f, $7f, $1a, $1b, $7f, $7f, $7f, $7f, $7f - db $7f, $7f, $7f, $7f, $7f, $1c, $1d, $1e, $1f, $20 - db $7f, $21, $22, $23, $7f, $24, $25, $26, $27, $28 - db $29, $2a, $2b, $2c, $2d, $2e, $2f, $30, $31, $32 - db $33, $34, $35, $36, $37, $38, $39, $3a, $3b, $3c - db $7f, $3d, $3e, $3f, $40, $41, $42, $43, $29, $44 - db $45, $46, $47, $48, $49, $4a, $4b, $29, $29, $4c - db $4d, $4e, $4f, $50, $51, $52, $53, $54, $55, $56 - db $57, $58, $59, $7f, $7f, $7f, $5a, $5b, $5c, $5d - db $5e, $5f, $60, $61, $62, $7f, $7f, $7f, $7f, $63 - db $64, $65, $66, $67, $68, $7f, $7f, $7f, $7f, $7f - db $7f, $69, $6a, $6b, $6c, $6d, $6e, $7f, $7f, $7f - -Tilemap_e9bb6: - db $05 - db $06 - db $07 - db $08 - db $09 - db $0a - db $0b - db $0c - db $0d - db $0e - db $0f - -TileMap_e9bc1: - db $70, $71, $7f, $72, $7f - db $73, $74, $75, $76, $77 - db $7f, $78, $11, $12, $13 - db $7f, $7f, $14, $15, $7f - -String_e9bd5: db "PLAY TIME@" - -Func_e9bdf: - ld c, 10 -.asm_e9be1 - ld [hl], $02 - inc hl - ld [hl], $01 - inc hl - dec c - jr nz, .asm_e9be1 - ret - -Func_e9beb: - ld c, 9 - ld de, SCREEN_WIDTH -.asm_e9bed - ld [hl], $04 - add hl, de - ld [hl], $03 - add hl, de - dec c - jr nz, .asm_e9bed - ret diff --git a/engine/events/diploma2.asm b/engine/events/diploma2.asm new file mode 100755 index 00000000..75ac104a --- /dev/null +++ b/engine/events/diploma2.asm @@ -0,0 +1,171 @@ +CIRCLE_TILE_ID EQU $10 + +_DisplayDiploma: + call GBPalWhiteOutWithDelay3 + call ClearScreen + ld de, SurfingPikachu3Graphics + ld hl, vChars2 + lb bc, BANK(SurfingPikachu3Graphics), (SurfingPikachu3GraphicsEnd - SurfingPikachu3Graphics) / $10 + call CopyVideoData + + hlcoord 0, 0 + call Func_e9bdf + + hlcoord 0, 0 + call Func_e9beb + + hlcoord 19, 0 + call Func_e9beb + + ld a, $00 + hlcoord 0, 0 + ld [hl], a + hlcoord 19, 0 + ld [hl], a + + ld de, String_e9a73 + hlcoord 5, 2 + call PlaceString + + ld de, String_e9a7d + hlcoord 3, 4 + call PlaceString + + ld de, wPlayerName + hlcoord 10, 4 + call PlaceString + + ld de, String_e9a84 + hlcoord 2, 6 + call PlaceString + + ld de, String_e9ac8 + hlcoord 9, 16 + call PlaceString + + ld b, SET_PAL_GENERIC + call RunPaletteCommand + ld a, $01 + ldh [hAutoBGTransferEnabled], a + call Delay3 + call GBPalNormal + ret + +String_e9a73: + db CIRCLE_TILE_ID, "Diploma", CIRCLE_TILE_ID, "@" + +String_e9a7d: + db "Player@" + +String_e9a84: + db "Congrats! This" + next "diploma certifies" + next "that you have" + next "completed your" + next "#DEX.@" + +String_e9ac8: + db "GAME FREAK@" + +Func_e9ad3: + call ClearScreen + hlcoord 0, 17 + call Func_e9bdf + hlcoord 0, 0 + call Func_e9beb + hlcoord 19, 0 + call Func_e9beb + ld a, $00 + hlcoord 0, 17 + ld [hl], a + hlcoord 19, 17 + ld [hl], a + ld de, Tilemap_e9b3e + hlcoord 6, 2 + lb bc, 10, 12 + call Diploma_Surfing_CopyBox + ld de, Tilemap_e9bb6 + hlcoord 5, 13 + lb bc, 1, 11 + call Diploma_Surfing_CopyBox + ld de, String_e9bd5 + hlcoord 2, 15 + call PlaceString + hlcoord 12, 15 + ld de, wPlayTimeHours + lb bc, $40 | 1, 3 + call PrintNumber + ld [hl], $16 + inc hl + ld de, wPlayTimeMinutes + lb bc, $80 | 1, 2 + call PrintNumber + ld a, [wNumSetBits] + cp 151 + ret nz + ld de, TileMap_e9bc1 + hlcoord 2, 0 + lb bc, 4, 5 + call Diploma_Surfing_CopyBox + ret + +Tilemap_e9b3e: + db $7f, $7f, $7f, $1a, $1b, $7f, $7f, $7f, $7f, $7f + db $7f, $7f, $7f, $7f, $7f, $1c, $1d, $1e, $1f, $20 + db $7f, $21, $22, $23, $7f, $24, $25, $26, $27, $28 + db $29, $2a, $2b, $2c, $2d, $2e, $2f, $30, $31, $32 + db $33, $34, $35, $36, $37, $38, $39, $3a, $3b, $3c + db $7f, $3d, $3e, $3f, $40, $41, $42, $43, $29, $44 + db $45, $46, $47, $48, $49, $4a, $4b, $29, $29, $4c + db $4d, $4e, $4f, $50, $51, $52, $53, $54, $55, $56 + db $57, $58, $59, $7f, $7f, $7f, $5a, $5b, $5c, $5d + db $5e, $5f, $60, $61, $62, $7f, $7f, $7f, $7f, $63 + db $64, $65, $66, $67, $68, $7f, $7f, $7f, $7f, $7f + db $7f, $69, $6a, $6b, $6c, $6d, $6e, $7f, $7f, $7f + +Tilemap_e9bb6: + db $05 + db $06 + db $07 + db $08 + db $09 + db $0a + db $0b + db $0c + db $0d + db $0e + db $0f + +TileMap_e9bc1: + db $70, $71, $7f, $72, $7f + db $73, $74, $75, $76, $77 + db $7f, $78, $11, $12, $13 + db $7f, $7f, $14, $15, $7f + +String_e9bd5: db "PLAY TIME@" + +Func_e9bdf: + ld c, 10 +.asm_e9be1 + ld [hl], $02 + inc hl + ld [hl], $01 + inc hl + dec c + jr nz, .asm_e9be1 + ret + +Func_e9beb: + ld c, 9 + ld de, SCREEN_WIDTH +.asm_e9bed + ld [hl], $04 + add hl, de + ld [hl], $03 + add hl, de + dec c + jr nz, .asm_e9bed + ret + +SurfingPikachu3Graphics: INCBIN "gfx/surfing_pikachu/surfing_pikachu_3.2bpp" +SurfingPikachu3GraphicsEnd: diff --git a/engine/events/hidden_objects/vermilion_gym_trash2.asm b/engine/events/hidden_objects/vermilion_gym_trash2.asm new file mode 100644 index 00000000..1bc0590b --- /dev/null +++ b/engine/events/hidden_objects/vermilion_gym_trash2.asm @@ -0,0 +1,108 @@ +TrashCanRandom: + ld d, 0 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call JumpToAddress + ld e, a + ld d, 0 + ret + +.Jumptable: + dw .zero + dw .one + dw .two + dw .three + dw .four + +.zero +.one + ld a, 0 + ret + +.two + call Random + and $1 + ret + +.three ; should return to a, instead returns to b + call Random + swap a + cp 1 * $ff / 3 + ld b, 0 + ret c + cp 2 * $ff / 3 + ld b, 1 + ret c + ld b, 2 + ret + +.four + call Random + and $3 + ret + +Yellow_SampleSecondTrashCan: + ld hl, GymTrashCans3c + ld a, [wGymTrashCanIndex] + ld c, a + ld b, 0 + ld a, 9 + call AddNTimes + call AddNTimes ; ???? + ld a, [hli] + ldh [hGymTrashCanRandNumMask], a + ld e, a + push hl + call TrashCanRandom + pop hl + add hl, de + add hl, de + ld a, [hli] + ld [wSecondLockTrashCanIndex], a + ld a, [hl] + ld [wSecondLockTrashCanIndex + 1], a + ret + +GymTrashCans3c: +; First byte: number of trashcan entries +; Following four byte pairs: indices for the second trash can. +; BUG: Rows that have 3 trashcan entries are sampled incorrectly. +; The sampling occurs by taking a random number and seeing which +; third of the range 0-255 the number falls in. However, it returns +; that value to the wrong register, so the result is never used. +; Instead of using an offset in [0,1,2], the offset is instead +; in the full range 0-255. This results in truly random behavior. + db 4 + db 1,3, 3,1, 1,-1, 3,-1 + db 3 + db 0,2, 2,4, 4,0, -1,-1 + db 4 + db 1,5, 5,1, 1,-1, 5,-1 + db 3 + db 0,4, 4,6, 6,0, -1,-1 + db 4 + db 1,3, 3,1, 5,5, 7,7 + db 3 + db 2,4, 4,8, 8,2, -1,-1 + db 3 + db 3,7, 7,9, 9,3, -1,-1 + db 4 + db 4,8, 6,10, 8,4, 10,6 + db 3 + db 5,7, 7,11, 11,5, -1,-1 + db 3 + db 6,10, 10,12, 12,6, -1,-1 + db 4 + db 7,9, 9,7, 11,13, 13,11 + db 3 + db 8,10, 10,14, 14,8, -1,-1 + db 4 + db 9,13, 13,9, 9,-1, 13,-1 + db 3 + db 10,12, 12,14, 14,10, -1,-1 + db 4 + db 11,13, 13,11, 11,-1, 13,-1 diff --git a/engine/events/pikachu_happiness.asm b/engine/events/pikachu_happiness.asm new file mode 100644 index 00000000..0d79e32b --- /dev/null +++ b/engine/events/pikachu_happiness.asm @@ -0,0 +1,118 @@ +ModifyPikachuHappiness:: + ld a, d + cp PIKAHAPPY_GYMLEADER + jr z, .checkanywhereinparty + cp PIKAHAPPY_WALKING + jr z, .checkanywhereinparty + push de + callfar IsThisPartymonStarterPikachu_Party + pop de + ret nc + jr .proceed + +.checkanywhereinparty + push de + callfar IsStarterPikachuInOurParty + pop de + ret nc + +.proceed + push de + ; Divide [wPikachuHappiness] by 100. Hold the integer part in e. + ld e, $0 + ld a, [wPikachuHappiness] + cp 100 + jr c, .wPikachuHappiness_div_100 + inc e + cp 200 + jr c, .wPikachuHappiness_div_100 + inc e +.wPikachuHappiness_div_100 + ; Get the (d, e) entry from HappinessChangeTable. + ld c, d + dec c + ld b, $0 + ld hl, HappinessChangeTable + add hl, bc + add hl, bc + add hl, bc + ld d, $0 + add hl, de + ld a, [hl] + ; If [hl] is positive, take min(0xff, [hl] + [wPikachuHappiness]). + ; If [hl] is negative, take max(0x00, [hl] + [wPikachuHappiness]). + ; Inexplicably, we're using 100 as the threshold for comparison. + cp 100 + ld a, [wPikachuHappiness] + jr nc, .negative + add [hl] + jr nc, .okay + ld a, -1 + jr .okay + +.negative + add [hl] + jr c, .okay + xor a +.okay + ld [wPikachuHappiness], a + + ; Restore d and get the d'th entry in PikachuMoods. + pop de + dec d + ld hl, PikachuMoods + ld e, d + ld d, $0 + add hl, de + ld a, [hl] + ld b, a + ; Modify Pikachu's mood + cp $80 + jr z, .done + ld a, [wPikachuMood] + jr c, .decreased + cp b + jr nc, .done + ld a, [wd49c] + and a + jr nz, .done + jr .update_mood + +.decreased + cp b + jr c, .done +.update_mood + ld a, b + ld [wPikachuMood], a +.done + ret + +HappinessChangeTable: + ; Increase + db 5, 3, 2 ; Gained a level + db 5, 3, 2 ; HP restore + db 1, 1, 0 ; Used X item + db 3, 2, 1 ; Challenged Gym Leader + db 1, 1, 0 ; Teach TM/HM + db 2, 1, 1 ; Walking around + ; Decrease + db -3, -3, -5 ; Deposited + db -1, -1, -1 ; Fainted in battle + db -5, -5, -10 ; Fainted due to Poison outside of battle + db -5, -5, -10 ; Fainted to opponent at least 30 levels higher + db -10, -10, -20 ; Traded away + +PikachuMoods: + ; Increase + db $8a ; Gained a level + db $83 ; HP restore + db $80 ; Teach TM/HM + db $80 ; Challenged Gym Leader + db $94 ; Unknown (d = 5) + db $80 ; Unknown (d = 6) + ; Decrease + db $62 ; Deposited + db $6c ; Fainted + db $62 ; Unknown (d = 9) + db $6c ; Unknown (d = 10) + db $00 ; Unknown (d = 11) diff --git a/engine/events/pokecenter_chansey.asm b/engine/events/pokecenter_chansey.asm new file mode 100644 index 00000000..d7c3a95b --- /dev/null +++ b/engine/events/pokecenter_chansey.asm @@ -0,0 +1,11 @@ +PokecenterChanseyText:: + ld hl, NurseChanseyText + call PrintText + ld a, CHANSEY + call PlayCry + call WaitForSoundToFinish + ret + +NurseChanseyText: + text_far _NurseChanseyText + text_end diff --git a/engine/events/try_pikachu_movement.asm b/engine/events/try_pikachu_movement.asm new file mode 100644 index 00000000..70cf65b4 --- /dev/null +++ b/engine/events/try_pikachu_movement.asm @@ -0,0 +1,27 @@ +TryApplyPikachuMovementData:: + ld a, [wd472] + bit 7, a + ret z + ld a, [wWalkBikeSurfState] + and a + ret nz + push hl + push bc + callfar GetPikachuFacingDirectionAndReturnToE + pop bc + pop hl + ld a, b + cp e + ret nz + push hl + ld a, [wUpdateSpritesEnabled] + push af + ld a, $ff + ld [wUpdateSpritesEnabled], a + callfar LoadPikachuShadowIntoVRAM + pop af + ld [wUpdateSpritesEnabled], a + pop hl + call ApplyPikachuMovementData + callfar RefreshPikachuFollow + ret diff --git a/engine/gfx/animated_objects.asm b/engine/gfx/animated_objects.asm new file mode 100755 index 00000000..971af6b5 --- /dev/null +++ b/engine/gfx/animated_objects.asm @@ -0,0 +1,394 @@ +ClearObjectAnimationBuffers: + ld hl, wAnimatedObjectsData + ld bc, wAnimatedObjectsDataEnd - wAnimatedObjectsData + xor a + call FillMemory + ret + +RunObjectAnimations: + ld hl, wAnimatedObjectDataStructs + ld e, 10 +.loop + ld a, [hl] + and a + jr z, .next + ld c, l + ld b, h + push hl + push de + call ExecuteCurrentAnimatedObjectCallback + call UpdateCurrentAnimatedObjectFrame + pop de + pop hl + jr c, .quit +.next + ld bc, $10 + add hl, bc + dec e + jr nz, .loop + ld a, [wCurrentAnimatedObjectOAMBufferOffset] + ld l, a + ld h, HIGH(wOAMBuffer) +.deinit_unused_oam_loop + ld a, l + cp LOW(wOAMBufferEnd) + jr nc, .quit + xor a + ld [hli], a + jr .deinit_unused_oam_loop + +.quit + ret + +SpawnAnimatedObject: + push de + push af + ld hl, wAnimatedObjectDataStructs + ld e, 10 +.loop + ld a, [hl] + and a + jr z, .init + ld bc, $10 + add hl, bc + dec e + jr nz, .loop + pop af + pop de + scf + ret + +.init + pop af + ld c, l + ld b, h + ld hl, wNumLoadedAnimatedObjects + inc [hl] + ld e, a + ld d, $0 + ld a, [wAnimatedObjectSpawnStateDataPointer] + ld l, a + ld a, [wAnimatedObjectSpawnStateDataPointer + 1] + ld h, a + add hl, de + add hl, de + add hl, de + ld e, l + ld d, h + ld hl, $0 + add hl, bc + ld a, [wNumLoadedAnimatedObjects] + ld [hli], a + ld a, [de] + ld [hli], a + inc de + ld a, [de] + ld [hli], a + inc de + xor a + ld [hli], a + pop de + ld hl, $4 + add hl, bc + ld a, e + ld [hli], a + ld a, d + ld [hli], a + xor a + ld [hli], a + ld [hli], a + xor a + ld [hli], a + ld [hli], a + dec a + ld [hli], a + xor a + ld [hli], a + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ret + +MaskCurrentAnimatedObjectStruct: + ld hl, $0 + add hl, bc + ld [hl], $0 + ret + +MaskAllAnimatedObjectStructs: + ld hl, wAnimatedObjectDataStructs + ld e, 10 +.loop + ld [hl], $0 + ld bc, $10 + add hl, bc + dec e + jr nz, .loop + ret + +UpdateCurrentAnimatedObjectFrame: + xor a + ld [wCurAnimatedObjectOAMAttributes], a + ld hl, $3 + add hl, bc + ld a, [hli] + ld [wCurrentAnimatedObjectVTileOffset], a + ld a, [hli] + ld [wCurrentAnimatedObjectXCoord], a + ld a, [hli] + ld [wCurrentAnimatedObjectYCoord], a + ld a, [hli] + ld [wCurrentAnimatedObjectXOffset], a + ld a, [hl] + ld [wCurrentAnimatedObjectYOffset], a + call UpdateDurationTimerAndFrameStateForCurrentAnimatedObject + cp $fd + jr z, .finish + cp $fc + jr z, .delete_animation + call GetCurrentAnimatedObjectOAMDataPointer + ld a, [wCurrentAnimatedObjectVTileOffset] + add [hl] + ld [wCurrentAnimatedObjectVTileOffset], a + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + push bc + ld a, [wCurrentAnimatedObjectOAMBufferOffset] + ld e, a + ld d, HIGH(wOAMBuffer) + ld a, [hli] + ld c, a +.loop + ld a, [wCurrentAnimatedObjectYCoord] + ld b, a + ld a, [wCurrentAnimatedObjectYOffset] + add b + ld b, a + ld a, [wAnimatedObjectGlobalYOffset] + add b + ld b, a + call GetCurrentAnimatedObjectTileYCoordinate + add b + ld [de], a + inc hl + inc de + ld a, [wCurrentAnimatedObjectXCoord] + ld b, a + ld a, [wCurrentAnimatedObjectXOffset] + add b + ld b, a + ld a, [wAnimatedObjectGlobalXOffset] + add b + ld b, a + call GetCurrentAnimatedObjectTileXCoordinate + add b + ld [de], a + inc hl + inc de + ld a, [wCurrentAnimatedObjectVTileOffset] + add [hl] + ld [de], a + inc hl + inc de + call SetCurrentAnimatedObjectOAMAttributes + ld b, a + ld a, [wc634] + cp $7 + ld a, b + jr z, .skip_load + ld [de], a +.skip_load + inc hl + inc de + ld a, e + ld [wCurrentAnimatedObjectOAMBufferOffset], a + cp LOW(wOAMBufferEnd) + jr nc, .oam_is_full + dec c + jr nz, .loop + pop bc + jr .finish + +.delete_animation + call MaskCurrentAnimatedObjectStruct +.finish + and a + ret + +.oam_is_full + pop bc + scf + ret + +GetCurrentAnimatedObjectTileYCoordinate: + push hl + ld a, [hl] + ld hl, wCurAnimatedObjectOAMAttributes + bit 6, [hl] + jr z, .no_flip + add $8 + xor $ff + inc a +.no_flip + pop hl + ret + +GetCurrentAnimatedObjectTileXCoordinate: + push hl + ld a, [hl] + ld hl, wCurAnimatedObjectOAMAttributes + bit 5, [hl] + jr z, .no_flip + add $8 + xor $ff + inc a +.no_flip + pop hl + ret + +SetCurrentAnimatedObjectOAMAttributes: + ld a, [wCurAnimatedObjectOAMAttributes] + ld b, a + ld a, [hl] + xor b + and $e0 + ld b, a + ld a, [hl] + and $10 + or b + bit 4, a + ret z + or $4 + ret + +GetCurrentAnimatedObjectOAMDataPointer: + ld e, a + ld d, $0 + ld a, [wAnimatedObjectOAMDataPointer] + ld l, a + ld a, [wAnimatedObjectOAMDataPointer + 1] + ld h, a + add hl, de + add hl, de + add hl, de + ret + +SetCurrentAnimatedObjectCallbackAndResetFrameStateRegisters: + ld hl, $1 + add hl, bc + ld [hl], a + ld hl, $8 + add hl, bc + ld [hl], $0 + ld hl, $9 + add hl, bc + ld [hl], $0 + ld hl, $a + add hl, bc + ld [hl], $ff + ret + +UpdateDurationTimerAndFrameStateForCurrentAnimatedObject: +.loop + ld hl, $8 + add hl, bc + ld a, [hl] + and a + jr z, .next_frame + dec [hl] + call GetPointerToCurrentAnimatedObjectFrameScript + ld a, [hli] + push af + jr .finish + +.next_frame + ld hl, $a + add hl, bc + inc [hl] + call GetPointerToCurrentAnimatedObjectFrameScript + ld a, [hli] + cp $fe + jr z, .restart_anim + cp $ff + jr z, .hold_last_frame_state + push af + ld a, [hl] + push hl + and $3f + ld hl, $9 + add hl, bc + add [hl] + ld hl, $8 + add hl, bc + ld [hl], a + pop hl +.finish + ld a, [hl] + and $c0 + srl a + ld [wCurAnimatedObjectOAMAttributes], a + pop af + ret + +.hold_last_frame_state + xor a + ld hl, $8 + add hl, bc + ld [hl], a + ld hl, $a + add hl, bc + dec [hl] + dec [hl] + jr .loop + +.restart_anim + xor a + ld hl, $8 + add hl, bc + ld [hl], a + dec a + ld hl, $a + add hl, bc + ld [hl], a + jr .loop + +GetPointerToCurrentAnimatedObjectFrameScript: + ld hl, $1 + add hl, bc + ld e, [hl] + ld d, $0 + ld a, [wAnimatedObjectFramesDataPointer] + ld l, a + ld a, [wAnimatedObjectFramesDataPointer + 1] + ld h, a + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $a + add hl, bc + ld l, [hl] + ld h, $0 + add hl, hl + add hl, de + ret + +ExecuteCurrentAnimatedObjectCallback: + ld hl, $2 + add hl, bc + ld e, [hl] + ld d, $0 + ld a, [wAnimatedObjectJumptablePointer] + ld l, a + ld a, [wAnimatedObjectJumptablePointer + 1] + ld h, a + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl diff --git a/engine/gfx/bg_map_attributes.asm b/engine/gfx/bg_map_attributes.asm new file mode 100644 index 00000000..6f81af63 --- /dev/null +++ b/engine/gfx/bg_map_attributes.asm @@ -0,0 +1,219 @@ +INCLUDE "data/cgb/bg_map_attributes.asm" + +LoadBGMapAttributes:: + ld hl, BGMapAttributesPointers + ld a, c ; c = which packet + push af ; save for later (to determine if we're handling the trainer card or party menu) + dec a ; read this code as: + add a ; dec a + ld e, a ; add a + xor a ; ld e, a + ld d, a ; ld d, 0 + add hl, de ; add hl, de + ld a, [hli] ; ld a, [hli] + ld e, a ; ld h, [hl] + ld a, [hl] ; ld l, a + ld h, a + ld a, e + ld l, a + + di + ld a, $1 + ldh [rVBK], a + push hl + ld a, [hl] + ld c, a ; save attribute count for later + ld de, $10 + add hl, de + ld a, h + ldh [rHDMA1], a + ld a, l + ldh [rHDMA2], a + ld de, vBGMap0 + ld a, d + ldh [rHDMA3], a + ld a, e + ldh [rHDMA4], a + + ldh a, [rLCDC] + and rLCDC_ENABLE_MASK ; is LCD off? + jr z, .lcdOff ; if off, transfer immediately +; wait for VBlank if LCD is on +.waitForVBlankLoop1 + ldh a, [rLY] + cp $90 + jr nz, .waitForVBlankLoop1 +.waitForAccessibleVRAMLoop1 + ldh a, [rSTAT] + and %10 ; are we in HBlank or VBlank? + jr nz, .waitForAccessibleVRAMLoop1 ; loop until we're in a safe period to transfer to VRAM +.lcdOff + ld a, c ; number of BG attributes to transfer, plus 1 times 16 + ldh [rHDMA5], a ; initiate transfer + call Func_3082 ; update audio so it doesn't "lag" + pop hl + ld a, [hli] + ld c, a ; number of BG attributes to transfer, plus 1 times 16 + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a ; offset of the attributes + add hl, de ; hl = new pointer + ld a, h + ldh [rHDMA1], a + ld a, l + ldh [rHDMA2], a + ld de, vBGMap1 ; copy to vBGMap1 + ld a, d + ldh [rHDMA3], a + ld a, e + ldh [rHDMA4], a +; LCD check again + ldh a, [rLCDC] + and rLCDC_ENABLE_MASK ; is LCD off? + jr z, .lcdOff2 ; if off, transfer immediately +; wait for VBlank if LCD is on +.waitForVBlankLoop2 + ldh a, [rLY] + cp $90 + jr nz, .waitForVBlankLoop2 +.waitForAccessibleVRAMLoop2 + ldh a, [rSTAT] + and %10 ; are we in HBlank or VBlank? + jr nz, .waitForAccessibleVRAMLoop2 ; loop until we're in a safe period to transfer to VRAM +.lcdOff2 + ld a, c + ldh [rHDMA5], a + pop af + dec a + dec a + dec a + dec a + jr nz, .checkIfHandlingPartyMenu + call HandleBadgeFaceAttributes + jr .done +.checkIfHandlingPartyMenu + dec a + call z, HandlePartyHPBarAttributes +.done + call Func_3082 + ldh a, [rIF] + res VBLANK, a + ldh [rIF], a + xor a + ldh [rVBK], a + ei + ret + +BGMapAttributesPointers: + dw BGMapAttributes_Unknown1 + dw BGMapAttributes_Unknown2 + dw BGMapAttributes_GameFreakIntro + dw BGMapAttributes_TrainerCard + dw BGMapAttributes_PartyMenu + dw BGMapAttributes_NidorinoIntro + dw BGMapAttributes_TitleScreen + dw BGMapAttributes_Slots + dw BGMapAttributes_Pokedex + dw BGMapAttributes_StatusScreen + dw BGMapAttributes_Battle + dw BGMapAttributes_WholeScreen + dw BGMapAttributes_Unknown13 + +HandleBadgeFaceAttributes: +; zero out the attributes if the player doesn't have the respective badge +; BOULDERBADGE + ld hl, vBGMap1 + $183 + ld de, wTrainerCardBadgeAttributes + 6 * 0 + ld a, [de] + and a + call z, ZeroOutCurrentBadgeAttributes +; CASCADEBADGE + ld hl, vBGMap1 + $187 + ld de, wTrainerCardBadgeAttributes + 6 * 1 + ld a, [de] + and a + call z, ZeroOutCurrentBadgeAttributes +; THUNDERBADGE + ld hl, vBGMap1 + $18b + ld de, wTrainerCardBadgeAttributes + 6 * 2 + ld a, [de] + and a + call z, ZeroOutCurrentBadgeAttributes +; RAINBOWBADGE + ld hl, vBGMap1 + $18f + ld de, wTrainerCardBadgeAttributes + 6 * 3 + ld a, [de] + and a + call z, ZeroOutCurrentBadgeAttributes +; SOULBADGE + ld hl, vBGMap1 + $1e3 + ld de, wTrainerCardBadgeAttributes + 6 * 6 + ld a, [de] + and a + call z, ZeroOutCurrentBadgeAttributes +; MARSHBADGE + ld hl, vBGMap1 + $1e7 + ld de, wTrainerCardBadgeAttributes + 6 * 7 + ld a, [de] + and a + call z, ZeroOutCurrentBadgeAttributes +; VOLCANOBADGE + ld hl, vBGMap1 + $1eb + ld de, wTrainerCardBadgeAttributes + 6 * 8 + ld a, [de] + and a + call z, ZeroOutCurrentBadgeAttributes +; EARTHBADGE + ld hl, vBGMap1 + $1ef + ld de, wTrainerCardBadgeAttributes + 6 * 9 + ld a, [de] + and a + call z, ZeroOutCurrentBadgeAttributes + ret + +ZeroOutCurrentBadgeAttributes: + push hl + xor a + ld [hli], a + ld [hl], a + ld bc, $1f + add hl, bc + ld [hli], a + ld [hl], a + pop hl + ret + +HandlePartyHPBarAttributes: +; hp bars require 3 (green, orange, red) colours, when there are only 2 "free" colours per palette +; therefore, we must transfer individual bg attributes where the locations of the hp bars are in vram + ld hl, vBGMap1 + $25 ; location of start of the HP bar in vram + ld de, wPartyHPBarAttributes + ld c, PARTY_LENGTH +.loop + push bc + push hl + ld a, [de] + and $3 ; 4 possible palettes +REPT 7 ; hp bar length in tiles + ld [hli], a +ENDR + pop hl + ld bc, $40 ; get 2nd party location + add hl, bc + push hl + + push de ; (inefficiently) copy de to hl + pop hl + + ld bc, $6 + add hl, bc ; get the next palette + + push hl + pop de ; copy back to de + + pop hl + pop bc + dec c + jr nz, .loop + ret diff --git a/engine/gfx/palettes.asm b/engine/gfx/palettes.asm index dd723afa..c08992d3 100755 --- a/engine/gfx/palettes.asm +++ b/engine/gfx/palettes.asm @@ -752,7 +752,7 @@ index = 0 ld a, [hli] inc hl - IF index < (NUM_ACTIVE_PALS + -1) + IF index < NUM_ACTIVE_PALS - 1 push hl ENDC @@ -823,7 +823,7 @@ DMGPalToGBCPal:: ld [wLastOBP1], a .convert color_index = 0 - REPT NUM_COLORS + REPT NUM_PAL_COLORS ld b, a and %11 call .GetColorAddress @@ -832,7 +832,7 @@ color_index = 0 ld a, [hl] ld [wGBCPal + color_index * 2 + 1], a - IF color_index < (NUM_COLORS + -1) + IF color_index < NUM_PAL_COLORS - 1 ld a, b rrca rrca @@ -863,14 +863,14 @@ TransferCurBGPData:: ldh a, [rLCDC] and rLCDC_ENABLE_MASK jr nz, .lcdEnabled - rept NUM_COLORS - call TransferPalColorLCDDisabled - endr + REPT NUM_PAL_COLORS + call TransferPalColorLCDDisabled + ENDR jr .done .lcdEnabled - rept NUM_COLORS - call TransferPalColorLCDEnabled - endr + REPT NUM_PAL_COLORS + call TransferPalColorLCDEnabled + ENDR .done pop de ret @@ -887,7 +887,7 @@ BufferBGPPal:: ld de, wBGPPalsBuffer add hl, de ld de, wGBCPal - ld c, PAL_SIZE + ld c, PALETTE_SIZE .loop ld a, [de] ld [hli], a @@ -918,7 +918,7 @@ TransferBGPPals:: ldh [rBGPI], a ld de, rBGPD ld hl, wBGPPalsBuffer - ld c, 4 * PAL_SIZE + ld c, 4 * PALETTE_SIZE .loop ld a, [hli] ld [de], a @@ -939,14 +939,14 @@ TransferCurOBPData: ldh a, [rLCDC] and rLCDC_ENABLE_MASK jr nz, .lcdEnabled - rept NUM_COLORS - call TransferPalColorLCDDisabled - endr + REPT NUM_PAL_COLORS + call TransferPalColorLCDDisabled + ENDR jr .done .lcdEnabled - rept NUM_COLORS - call TransferPalColorLCDEnabled - endr + REPT NUM_PAL_COLORS + call TransferPalColorLCDEnabled + ENDR .done pop de ret diff --git a/engine/gfx/sprite_oam.asm b/engine/gfx/sprite_oam.asm index 01b2c412..b62d9d4b 100644 --- a/engine/gfx/sprite_oam.asm +++ b/engine/gfx/sprite_oam.asm @@ -153,7 +153,7 @@ PrepareOAMData:: cp c ret nc ld l, a - ld h, wOAMBuffer / $100 + ld h, HIGH(wOAMBuffer) ld a, c ld de, $4 ; entry size ld b, $a0 diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm index b1b458ab..d4c3ae18 100755 --- a/engine/items/item_effects.asm +++ b/engine/items/item_effects.asm @@ -1037,7 +1037,7 @@ ItemUseMedicine: push hl push de push bc - callfar Func_2fd6a + callfar RespawnOverworldPikachu pop bc pop de pop hl @@ -1542,7 +1542,7 @@ ItemUseMedicine: push af ld a, [wUsedItemOnWhichPokemon] ld [wWhichPokemon], a - callfar Func_2fd6a ; evolve pokemon, if appropriate + callfar RespawnOverworldPikachu ; evolve pokemon, if appropriate pop af ld [wWhichPokemon], a diff --git a/engine/items/super_rod.asm b/engine/items/super_rod.asm new file mode 100644 index 00000000..db82f5fb --- /dev/null +++ b/engine/items/super_rod.asm @@ -0,0 +1,41 @@ +ReadSuperRodData: + ld a, [wCurMap] + ld c, a + ld hl, SuperRodFishingSlots +.loop + ld a, [hli] + cp $ff + jr z, .notfound + cp c + jr z, .found + ld de, $8 + add hl, de + jr .loop +.found + call GenerateRandomFishingEncounter + ret +.notfound + ld de, $0 + ret + +GenerateRandomFishingEncounter: + call Random + cp $66 + jr c, .asm_f5ed6 + inc hl + inc hl + cp $b2 + jr c, .asm_f5ed6 + inc hl + inc hl + cp $e5 + jr c, .asm_f5ed6 + inc hl + inc hl +.asm_f5ed6 + ld e, [hl] + inc hl + ld d, [hl] + ret + +INCLUDE "data/wild/super_rod.asm" diff --git a/engine/menus/draw_badges.asm b/engine/menus/draw_badges.asm index 0bb433cc..5e00a34e 100644 --- a/engine/menus/draw_badges.asm +++ b/engine/menus/draw_badges.asm @@ -49,8 +49,7 @@ DrawBadges: hlcoord 2, 14 ld de, wTempObtainedBadgesBooleans + 4 -; call .DrawBadgeRow -; ret + ; fallthrough .DrawBadgeRow ; Draw 4 badges. diff --git a/engine/menus/start_sub_menus.asm b/engine/menus/start_sub_menus.asm index 84583a69..b9751e1e 100755 --- a/engine/menus/start_sub_menus.asm +++ b/engine/menus/start_sub_menus.asm @@ -324,10 +324,11 @@ StartMenu_Item:: call PrintText jr .exitMenu .notInCableClubRoom + ; store item bag pointer in wListPointer (for DisplayListMenuID) ld hl, wListPointer - ld [hl], wNumBagItems & $ff + ld [hl], LOW(wNumBagItems) inc hl - ld [hl], wNumBagItems / $100 ; store item bag pointer in wListPointer (for DisplayListMenuID) + ld [hl], HIGH(wNumBagItems) xor a ld [wPrintItemPrices], a ld a, ITEMLISTMENU diff --git a/engine/menus/unused_input.asm b/engine/menus/unused_input.asm new file mode 100644 index 00000000..ad5c36df --- /dev/null +++ b/engine/menus/unused_input.asm @@ -0,0 +1,129 @@ +HandleMenuInputDuplicate: ; unreferenced + xor a + ld [wPartyMenuAnimMonEnabled], a + +HandleMenuInputPokemonSelectionDuplicate: ; unreferenced + ldh a, [hDownArrowBlinkCount1] + push af + ldh a, [hDownArrowBlinkCount2] + push af ; save existing values on stack + xor a + ldh [hDownArrowBlinkCount1], a ; blinking down arrow timing value 1 + ld a, 6 + ldh [hDownArrowBlinkCount2], a ; blinking down arrow timing value 2 +.loop1 + xor a + ld [wAnimCounter], a ; counter for pokemon shaking animation + call PlaceMenuCursorDuplicate + call JoypadLowSensitivity + ldh a, [hJoy5] + and a ; was a key pressed? + jr nz, .keyPressed + pop af + ldh [hDownArrowBlinkCount2], a + pop af + ldh [hDownArrowBlinkCount1], a ; restore previous values + xor a + ld [wMenuWrappingEnabled], a ; disable menu wrapping + ret +.keyPressed + xor a + ld [wCheckFor180DegreeTurn], a + ldh a, [hJoy5] + ld b, a + bit 6, a ; pressed Up key? + jr z, .checkIfDownPressed +.upPressed + ld a, [wCurrentMenuItem] ; selected menu item + and a ; already at the top of the menu? + jr z, .checkOtherKeys +.notAtTop + dec a + ld [wCurrentMenuItem], a ; move selected menu item up one space + jr .checkOtherKeys +.checkIfDownPressed + bit 7, a + jr z, .checkOtherKeys +.downPressed + ld a, [wCurrentMenuItem] + inc a + ld c, a + ld a, [wMaxMenuItem] + cp c + jr c, .checkOtherKeys + ld a, c + ld [wCurrentMenuItem], a +.checkOtherKeys + ld a, [wMenuWatchedKeys] + and b ; does the menu care about any of the pressed keys? + jp z, .loop1 +.checkIfAButtonOrBButtonPressed + ldh a, [hJoy5] + and A_BUTTON | B_BUTTON + jr z, .skipPlayingSound +.AButtonOrBButtonPressed + ld a, SFX_PRESS_AB + call PlaySound ; play sound +.skipPlayingSound + pop af + ldh [hDownArrowBlinkCount2], a + pop af + ldh [hDownArrowBlinkCount1], a ; restore previous values + ldh a, [hJoy5] + ret + +PlaceMenuCursorDuplicate: + ld a, [wTopMenuItemY] + and a + jr z, .asm_f5ac0 + hlcoord 0, 0 + ld bc, SCREEN_WIDTH +.loop + add hl, bc + dec a + jr nz, .loop +.asm_f5ac0 + ld a, [wTopMenuItemX] + ld b, $0 + ld c, a + add hl, bc + push hl + ld a, [wLastMenuItem] + and a + jr z, .asm_f5ad5 + ld bc, $28 +.loop2 + add hl, bc + dec a + jr nz, .loop2 +.asm_f5ad5 + ld a, [hl] + cp "â–¶" + jr nz, .asm_f5ade + ld a, [wTileBehindCursor] + ld [hl], a +.asm_f5ade + pop hl + ld a, [wCurrentMenuItem] + and a + jr z, .asm_f5aec + ld bc, $28 +.loop3 + add hl, bc + dec a + jr nz, .loop3 +.asm_f5aec + ld a, [hl] + cp "â–¶" + jr z, .asm_f5af4 + ld [wTileBehindCursor], a +.asm_f5af4 + ld a, "â–¶" + ld [hl], a + ld a, l + ld [wMenuCursorLocation], a + ld a, h + ld [wMenuCursorLocation + 1], a + ld a, [wCurrentMenuItem] + ld [wLastMenuItem], a + ret diff --git a/engine/minigame/surfing_pikachu.asm b/engine/minigame/surfing_pikachu.asm new file mode 100755 index 00000000..6d319867 --- /dev/null +++ b/engine/minigame/surfing_pikachu.asm @@ -0,0 +1,2863 @@ +SurfingPikachuMinigame:: + call SurfingPikachuMinigame_BlankPals + call DelayFrame + call DelayFrame + call DelayFrame + ldh a, [hTilesetType] + push af + xor a + ldh [hTilesetType], a + ld a, [wUpdateSpritesEnabled] + push af + ld a, $ff + ld [wUpdateSpritesEnabled], a + ldh a, [rIE] + push af + xor a + ldh [rIF], a + ld a, $f + ldh [rIE], a + ld a, $8 + ldh [rSTAT], a + ldh a, [hAutoBGTransferDest + 1] + push af + ld a, $98 + ldh [hAutoBGTransferDest + 1], a + call SurfingPikachuMinigameIntro + call SurfingPikachuLoop + xor a + ldh [rBGP], a + ldh [rOBP0], a + ldh [rOBP1], a + call UpdateGBCPal_BGP + call UpdateGBCPal_OBP0 + call UpdateGBCPal_OBP1 + call ClearObjectAnimationBuffers + call ClearSprites + xor a + ldh [hLCDCPointer], a + ldh [hSCX], a + ldh [hSCY], a + ld a, $90 + ldh [hWY], a + call DelayFrame + pop af + ldh [hAutoBGTransferDest + 1], a + xor a + ldh [rIF], a + pop af + ldh [rIE], a + xor a + ldh [rSTAT], a + call RunDefaultPaletteCommand + call ReloadMapAfterSurfingMinigame + call PlayDefaultMusic + call GBPalNormal + pop af + ld [wUpdateSpritesEnabled], a + pop af + ldh [hTilesetType], a + ret + +SurfingPikachuLoop: + call SurfingPikachuMinigame_LoadGFXAndLayout + call DelayFrame + ld b, $e + call RunPaletteCommand +.loop + ld a, [wSurfingMinigameRoutineNumber] + bit 7, a + ret nz + call SurfingPikachu_GetJoypad_3FrameBuffer + call SurfingPikachu_CheckPressedSelect + ret nz + call RunSurfingMinigameRoutine + ld a, $3c + ld [wCurrentAnimatedObjectOAMBufferOffset], a + call RunObjectAnimations + call SurfingMinigame_MoveClouds + call .DelayFrame + call SurfingMinigame_UpdateMusicTempo + jr .loop + +.DelayFrame: + call DelayFrame + ret + +SurfingPikachu_CheckPressedSelect: + ld hl, wd492 + bit 1, [hl] + ret z + ldh a, [hJoyPressed] + and SELECT + ret + +Func_f80b7: + ldh a, [hJoyPressed] + and START + ret z + ld hl, wc5e2 + ld a, [hl] + xor $1 + ld [hl], a + ret + +SurfingMinigame_UpdateMusicTempo: + ld a, [wc634] + and a + ret z + + ; check that all channels are on their last frame of note delay + ld hl, wChannelNoteDelayCounters + ld a, $1 + cp [hl] + ret nz + inc hl + cp [hl] + ret nz + inc hl + cp [hl] + ret nz + + ; de = ([wSurfingMinigamePikachuSpeed] & 0x3f) * 2 + ld a, [wSurfingMinigamePikachuSpeed] + ld e, a + ld a, [wSurfingMinigamePikachuSpeed + 1] + and $3 + ld d, a + sla e + rl d + ld e, d + ld d, $0 + ld hl, .Tempos + add hl, de + add hl, de + ld a, [hli] + ld [wMusicTempo + 1], a + ld a, [hl] + ld [wMusicTempo], a + ret + +.Tempos: + dw 117 + dw 109 + dw 101 + dw 93 + dw 85 + +SurfingMinigame_ResetMusicTempo: + ld hl, wChannelNoteDelayCounters + ld a, $1 + cp [hl] + ret nz + inc hl + cp [hl] + ret nz + inc hl + cp [hl] + ret nz + ld a, 117 + ld [wMusicTempo + 1], a + xor a + ld [wMusicTempo], a + ret + +SurfingPikachuMinigame_LoadGFXAndLayout: + call SurfingPikachu_ClearTileMap + call ClearSprites + call DisableLCD + ld hl, wSurfingMinigameData + ld bc, wSurfingMinigameDataEnd - wSurfingMinigameData + xor a + call FillMemory + ld hl, wLYOverrides + ld bc, wLYOverridesBufferEnd - wLYOverrides + xor a + call FillMemory + xor a + ldh [hAutoBGTransferEnabled], a + call ClearObjectAnimationBuffers + + ld hl, SurfingPikachu1Graphics1 + ld de, $9000 + ld bc, $500 + ld a, BANK(SurfingPikachu1Graphics1) + call FarCopyData + + ld hl, SurfingPikachu1Graphics2 + ld de, $8000 + ld bc, $1000 + ld a, BANK(SurfingPikachu1Graphics2) + call FarCopyData + + ld a, LOW(SurfingPikachuSpawnStateDataPointer) + ld [wAnimatedObjectSpawnStateDataPointer], a + ld a, HIGH(SurfingPikachuSpawnStateDataPointer) + ld [wAnimatedObjectSpawnStateDataPointer + 1], a + + ld a, LOW(SurfingPikachuObjectJumptable) + ld [wAnimatedObjectJumptablePointer], a + ld a, HIGH(SurfingPikachuObjectJumptable) + ld [wAnimatedObjectJumptablePointer + 1], a + + ld a, LOW(SurfingPikachuOAMData) + ld [wAnimatedObjectOAMDataPointer], a + ld a, HIGH(SurfingPikachuOAMData) + ld [wAnimatedObjectOAMDataPointer + 1], a + + ld a, LOW(SurfingPikachuFrames) + ld [wAnimatedObjectFramesDataPointer], a + ld a, HIGH(SurfingPikachuFrames) + ld [wAnimatedObjectFramesDataPointer + 1], a + + ld hl, vBGMap0 + ld bc, $80 tiles + ld a, $0 + call FillMemory + + ld hl, $98c0 + ld bc, $18 tiles + ld a, $b + call FillMemory + + ld a, $1 + lb de, $74, $58 + call SpawnAnimatedObject + + ld a, $74 + ld [wSurfingMinigamePikachuObjectHeight], a + + call SurfingMinigame_InitScanlineOverrides + + xor a + ldh [hSCX], a + ldh [hSCY], a + ld a, $7e + ldh [hWY], a + ld a, rSCY - $ff00 + ldh [hLCDCPointer], a + ld a, $40 + ld [wSurfingMinigamePikachuSpeed], a + xor a + ld [wSurfingMinigamePikachuSpeed + 1], a + xor a + ld [wSurfingMinigamePikachuHP], a + ld a, $60 + ld [wSurfingMinigamePikachuHP + 1], a + ld hl, wSurfingMinigameWaveHeight + ld bc, $14 + ld a, $74 + call FillMemory + call Func_f81ff + call Func_f8256 + ld a, $e3 + ldh [rLCDC], a + call SurfingPikachuMinigame_SetBGPals + ld a, $e4 + ldh [rOBP0], a + ld a, $e0 + ldh [rOBP1], a + call UpdateGBCPal_OBP0 + call UpdateGBCPal_OBP1 + ret + +SurfingPikachuMinigame_SetBGPals: + ld a, [wOnSGB] + and a + jr nz, .sgb + ld a, $d0 + ldh [rBGP], a + call UpdateGBCPal_BGP + ret + +.sgb + ld a, $e4 + ldh [rBGP], a + call UpdateGBCPal_BGP + ret + +Func_f81ff: + ld hl, wSpriteDataEnd + ld de, Unkn_f8249 + ld b, $97 + ld c, $80 + ld a, $4 + call Func_f8233 + ld de, Unkn_f8248 + ld b, $96 + ld c, $50 + ld a, $1 + call Func_f8233 + ld de, Unkn_f824d + ld b, $14 + ld c, $20 + ld a, $5 + call Func_f8233 + ld de, Unkn_f8252 + ld b, $20 + ld c, $80 + ld a, $4 + call Func_f8233 + ret + +Func_f8233: +.asm_f8233 + push af + ld [hl], b + inc hl + ld [hl], c + inc hl + ld a, [de] + ld [hl], a + inc hl + ld [hl], $0 + inc hl + ld a, c + add $8 + ld c, a + inc de + pop af + dec a + jr nz, .asm_f8233 + ret + +Unkn_f8248: + db $fe + +Unkn_f8249: + db $d0 + db $d0 + db $d0 + db $d0 + +Unkn_f824d: + db $ec + db $ed + db $ed + db $ee + db $ef + +Unkn_f8252: + db $ec + db $ed + db $ee + db $ef + +Func_f8256: + ld de, $9c21 + ld hl, Unkn_f8279 + ld c, $9 +.asm_f825e + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_f825e + ld hl, $9c01 + ld [hl], $15 + ld hl, $9c02 + ld [hl], $16 + ld hl, $9c2c + ld [hl], $1b + ld hl, $9c2d + ld [hl], $1c + ret + +Unkn_f8279: + db $17 + db $18 + db $19 + db $19 + db $19 + db $19 + db $19 + db $19 + db $19 + +RunSurfingMinigameRoutine: + ld a, [wSurfingMinigameRoutineNumber] + ld e, a + ld d, $0 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.Jumptable: + dw SurfingMinigameRoutine_SpawnPikachu ; 0 + dw SurfingMinigame_RunGame ; 1 + dw Func_f8324 ; 2 + dw Func_f835c ; 3 + dw SurfingMinigame_DrawResultsScreenAndWait ; 4 + dw SurfingMinigame_WriteHPLeftAndWait ; 5 + dw SurfingMinigame_WriteRadnessAndWait ; 6 + dw SurfingMinigame_WriteTotalAndWait ; 7 + dw SurfingMinigame_AddRemainingHPToTotalAndWait ; 8 + dw SurfingMinigame_AddRadnessToTotalAndWait ; 9 + dw SurfingMinigame_WaitLast ; a + dw SurfingMinigame_ExitOnPressA ; b + dw SurfingMinigame_GameOver ; c + +SurfingMinigameRoutine_SpawnPikachu: + ld a, $2 + lb de, $48, $e0 + call SpawnAnimatedObject + ld hl, wSurfingMinigameRoutineNumber + inc [hl] + ld a, $1 + ld [wc634], a + ret + +SurfingMinigame_RunGame: + ld a, [wc5e5] + cp $18 + jr nc, .asm_f82e8 + ld hl, wSurfingMinigamePikachuHP + ld a, [hli] + or [hl] + and a + jr z, .dead + call Random + ld [wc5d5], a + call SurfingMinigame_UpdateLYOverrides + call SurfingMinigame_SetPikachuHeight + call SurfingMinigame_ReadBGMapBuffer + call SurfingMinigame_ScrollAndGenerateBGMap + call SurfingMinigame_UpdatePikachuDistance + call SurfingMinigame_Deduct1HP + call SurfingMinigame_DrawHP + ret + +.asm_f82e8 + ld hl, wSurfingMinigameRoutineNumber + inc [hl] + xor a + ld [wc634], a + ld a, 192 + ld [wSurfingMinigameRoutineDelay], a + ret + +.dead + ld a, $1 + ld [wc630], a + ld a, $c + ld [wSurfingMinigameRoutineNumber], a + ld a, $80 + ld [wc631], a + ld a, $b + lb de, $88, $58 + call SpawnAnimatedObject + ld hl, ANIM_OBJ_Y_OFFSET + add hl, bc + ld [hl], $80 + ld hl, ANIM_OBJ_FIELD_B + add hl, bc + ld [hl], $80 + ld hl, ANIM_OBJ_FIELD_C + add hl, bc + ld [hl], $30 + xor a + ld [wc634], a + ret + +Func_f8324: + call SurfingMinigame_RunDelayTimer + jr c, .done_delay + xor a + ld [wc5d5], a + call SurfingMinigame_UpdateLYOverrides + call SurfingMinigame_SetPikachuHeight + call SurfingMinigame_ReadBGMapBuffer + call Func_f8c97 + call SurfingMinigame_ResetMusicTempo + ret + +.done_delay + ld hl, wSurfingMinigameRoutineNumber + inc [hl] + ld a, $90 + ldh [hSCX], a + ld a, $72 + ld [wSurfingMinigameWaveFunctionNumber], a + ld a, $4 + ld [wc5d2], a + xor a + ldh [hLCDCPointer], a + ld [wSurfingMinigameSCX], a + ld [wSurfingMinigameSCX + 1], a + ld [wSurfingMinigameSCX + 2], a + ret + +Func_f835c: + ldh a, [hSCX] + and a + jr z, .asm_f837b + call SurfingMinigame_UpdateLYOverrides + call SurfingMinigame_SetPikachuHeight + call SurfingMinigame_ReadBGMapBuffer + ldh a, [hSCX] + dec a + dec a + dec a + dec a + ldh [hSCX], a + ld a, $e0 + ld [wSurfingMinigameXOffset], a + call SurfingMinigame_GenerateBGMap + ret + +.asm_f837b + xor a + ld [wSurfingMinigamePikachuSpeed], a + ld [wSurfingMinigamePikachuSpeed + 1], a + ld hl, wSurfingMinigameRoutineNumber + inc [hl] + ld a, $5 + ld [wc5d2], a + ret + +SurfingMinigame_DrawResultsScreenAndWait: + call SurfingMinigame_DrawResultsScreen + ld a, 32 + ld [wSurfingMinigameRoutineDelay], a + ld hl, wSurfingMinigameRoutineNumber + inc [hl] + ret + +SurfingMinigame_WriteHPLeftAndWait: + call SurfingMinigame_RunDelayTimer + ret nc + call SurfingMinigame_WriteHPLeft + ld a, 64 + ld [wSurfingMinigameRoutineDelay], a + ld hl, wSurfingMinigameRoutineNumber + inc [hl] + ret + +SurfingMinigame_WriteRadnessAndWait: + call SurfingMinigame_RunDelayTimer + ret nc + call SurfingMinigame_WriteRadness + ld a, 64 + ld [wSurfingMinigameRoutineDelay], a + ld hl, wSurfingMinigameRoutineNumber + inc [hl] + ret + +SurfingMinigame_WriteTotalAndWait: + call SurfingMinigame_RunDelayTimer + ret nc + call SurfingMinigame_WriteTotal + ld a, 64 + ld [wSurfingMinigameRoutineDelay], a + ld hl, wSurfingMinigameRoutineNumber + inc [hl] + ret + +SurfingMinigame_AddRemainingHPToTotalAndWait: + call SurfingMinigame_RunDelayTimer + ret nc + call SurfingMinigame_AddRemainingHPToTotal + push af + call SurfingMinigame_BCDPrintTotalScore + pop af + ret nc + ld a, 64 + ld [wSurfingMinigameRoutineDelay], a + ld hl, wSurfingMinigameRoutineNumber + inc [hl] + ret + +SurfingMinigame_AddRadnessToTotalAndWait: + call SurfingMinigame_RunDelayTimer + ret nc + call SurfingMinigame_AddRadnessToTotal + push af + call SurfingMinigame_BCDPrintTotalScore + pop af + ret nc + ld a, 128 + ld [wSurfingMinigameRoutineDelay], a + ld hl, wSurfingMinigameRoutineNumber + inc [hl] + call DidPlayerGetAHighScore + ret nc + call SurfingMinigame_PrintTextHiScore + ld a, $6 + ld [wc5d2], a + ret + +SurfingMinigame_WaitLast: + call SurfingMinigame_RunDelayTimer + ret nc + ld hl, wSurfingMinigameRoutineNumber + inc [hl] + ret + +SurfingMinigame_ExitOnPressA: + call SurfingMinigame_UpdateLYOverrides + ldh a, [hJoyPressed] + and A_BUTTON + ret z + ld hl, wSurfingMinigameRoutineNumber + set 7, [hl] + ret + +SurfingMinigame_GameOver: + call SurfingMinigame_UpdateLYOverrides + call SurfingMinigame_SetPikachuHeight + call SurfingMinigame_ReadBGMapBuffer + call SurfingMinigame_ScrollAndGenerateBGMap + call SurfingMinigame_ResetMusicTempo + ld hl, wc631 + ld a, [hl] + and a + jr z, .wait_press_a + dec [hl] + ret + +.wait_press_a + ldh a, [hJoyPressed] + and A_BUTTON + ret z + ld hl, wSurfingMinigameRoutineNumber + set 7, [hl] + ret + +SurfingMinigame_RunDelayTimer: + ld hl, wSurfingMinigameRoutineDelay + ld a, [hl] + and a + jr z, .set_carry + dec [hl] + and a + ret + +.set_carry + scf + ret + +SurfingMinigame_UpdatePikachuDistance: + ld a, [wc5e5 + 1] + ld h, a + ld a, [wc5e5 + 2] + ld l, a + ld a, [wSurfingMinigamePikachuSpeed] + ld e, a + ld a, [wSurfingMinigamePikachuSpeed + 1] + ld d, a + add hl, de + ld a, h + ld [wc5e5 + 1], a + ld a, l + ld [wc5e5 + 2], a + ret nc + ld hl, wc5e5 + inc [hl] + ld hl, wOAMBuffer + 4 * 4 + 1 + dec [hl] + dec [hl] + ret + +SurfingMinigameAnimatedObjectFn_Pikachu: + ld a, [wc5d2] + ld e, a + ld d, $0 + ld hl, Jumptable_f847f + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +Jumptable_f847f: + dw Func_f848d + dw SurfingMinigame_ScoreCurrentWave + dw Func_f8516 + dw Func_f8545 + dw Func_f8561 + dw Func_f856d + dw Func_f8579 + +Func_f848d: + ld a, [wc630] + and a + jr nz, .asm_f84d2 + call Func_f87b5 + ld a, [wSurfingMinigamePikachuObjectHeight] + ld hl, ANIM_OBJ_Y_COORD + add hl, bc + ld [hl], a + call Func_f871e + jr c, .splash + call Func_f8742 + call SurfingMinigame_SpeedUpPikachu + ret + +.splash + call Func_f8742 + ld a, $1 ; on a wave + ld [wc5d2], a + xor a + ld hl, ANIM_OBJ_FIELD_C + add hl, bc + ld [hl], a + ld hl, ANIM_OBJ_FIELD_D + add hl, bc + ld [hl], a + ld hl, ANIM_OBJ_FIELD_E + add hl, bc + ld [hl], a + ld [wSurfingMinigameRadnessMeter], a + ld [wSurfingMinigameTrickFlags], a + xor a + ld [wChannelSoundIDs + Ch8], a + ld a, SFX_SURFING_JUMP + call PlaySound + ret + +.asm_f84d2 + xor a + ld [wSurfingMinigamePikachuSpeed], a + ld [wSurfingMinigamePikachuSpeed + 1], a + ld a, $4 + ld [wc5d2], a + call Func_f8742 + ret + +SurfingMinigame_ScoreCurrentWave: + call SurfingMinigame_DPadAction + call SurfingMinigame_UpdatePikachuHeight + ret nc + call SurfingMinigame_TileInteraction + jr c, .splash + call SurfingMinigame_CalculateAndAddRadnessFromStunt + ld hl, ANIM_OBJ_FIELD_C + add hl, bc + ld [hl], $0 + ld a, $2 + ld [wc5d2], a + ret + +.splash + ld a, $3 + ld [wc5d2], a + ld a, $60 + ld [wc5e1], a + ld a, $10 + call SetCurrentAnimatedObjectCallbackAndResetFrameStateRegisters + xor a + ld [wChannelSoundIDs + Ch8], a + ld a, SFX_SURFING_CRASH + call PlaySound + ret + +Func_f8516: + ld hl, ANIM_OBJ_FIELD_C + add hl, bc + ld a, [hl] + cp $20 + jr nc, .asm_f8539 + inc [hl] + inc [hl] + inc [hl] + inc [hl] + ld d, $4 + call SurfingPikachu_Sine + ld hl, ANIM_OBJ_Y_OFFSET + add hl, bc + ld [hl], a + call Func_f87b5 + ld a, [wSurfingMinigamePikachuObjectHeight] + ld hl, ANIM_OBJ_Y_COORD + add hl, bc + ld [hl], a + ret + +.asm_f8539 + ld hl, ANIM_OBJ_Y_OFFSET + add hl, bc + ld [hl], $0 + ld a, $0 + ld [wc5d2], a + ret + +Func_f8545: + ld hl, wc5e1 + ld a, [hl] + and a + jr z, .asm_f8556 + dec [hl] + ld a, [wSurfingMinigamePikachuObjectHeight] + ld hl, ANIM_OBJ_Y_COORD + add hl, bc + ld [hl], a + ret + +.asm_f8556 + ld a, $0 + ld [wc5d2], a + ld a, $4 + call SetCurrentAnimatedObjectCallbackAndResetFrameStateRegisters + ret + +Func_f8561: + ld a, [wSurfingMinigamePikachuObjectHeight] + ld hl, ANIM_OBJ_Y_COORD + add hl, bc + ld [hl], a + call Func_f8742 + ret + +Func_f856d: + ld a, $f + call SetCurrentAnimatedObjectCallbackAndResetFrameStateRegisters + ld hl, ANIM_OBJ_FIELD_C + add hl, bc + ld [hl], $0 + ret + +Func_f8579: + ld hl, ANIM_OBJ_FIELD_C + add hl, bc + ld a, [hl] + inc [hl] + inc [hl] + and $3f + cp $20 + jr c, .asm_f8591 + ld d, $10 + call SurfingPikachu_Sine + ld hl, ANIM_OBJ_Y_OFFSET + add hl, bc + ld [hl], a + ret + +.asm_f8591 + ld hl, ANIM_OBJ_Y_OFFSET + add hl, bc + ld [hl], $0 + ret + +SurfingMinigame_DPadAction: + ld de, hJoy5 + ld a, [de] + and D_LEFT + jr nz, .d_left + ld a, [de] + and D_RIGHT + jr nz, .d_right + ret + +.d_left + ld hl, ANIM_OBJ_FIELD_E + add hl, bc + ld [hl], $0 + ld hl, ANIM_OBJ_FIELD_D + add hl, bc + ld a, [hl] + inc [hl] + cp $b + jr c, .d_left_skip + call .StartTrick + ld hl, wSurfingMinigameTrickFlags + set 0, [hl] +.d_left_skip + ld hl, ANIM_OBJ_FRAME_SET + add hl, bc + ld a, [hl] + cp $e + jr nc, .d_left_reset + inc [hl] + ret + +.d_left_reset + ld [hl], $1 + ret + +.d_right + ld hl, ANIM_OBJ_FIELD_D + add hl, bc + ld [hl], $0 + ld hl, ANIM_OBJ_FIELD_E + add hl, bc + ld a, [hl] + inc [hl] + cp $d + jr c, .d_right_skip + call .StartTrick + ld hl, wSurfingMinigameTrickFlags + set 1, [hl] +.d_right_skip + ld hl, ANIM_OBJ_FRAME_SET + add hl, bc + ld a, [hl] + cp $1 + jr z, .d_right_reset + dec [hl] + ret + +.d_right_reset + ld [hl], $e + ret + +.StartTrick: + call SurfingMinigame_IncreaseRadnessMeter + xor a + ld hl, ANIM_OBJ_FIELD_D + add hl, bc + ld [hl], a + ld hl, ANIM_OBJ_FIELD_E + add hl, bc + ld [hl], a + ld a, SFX_SURFING_FLIP + call PlaySound + ret + +SurfingMinigame_TileInteraction: + ld hl, ANIM_OBJ_FRAME_SET + add hl, bc + ld a, [wSurfingMinigameBGMapReadBuffer] + cp $6 + jr z, .tile_06 + cp $14 + jr z, .tile_14 + cp $12 + jr z, .tile_12 + cp $7 + jr z, .tile_07 + ld a, [hl] + cp $1 + jp z, .action_0 + cp $2 + jr z, .action_1 + cp $3 + jr z, .action_2 + cp $4 + jr z, .action_3 + cp $5 + jr z, .action_2 + cp $6 + jr z, .action_1 + cp $7 + jr z, .action_0 + jr .action_0 + +.tile_06 + ld a, [hl] + cp $1 + jr z, .action_0 + cp $2 + jr z, .action_0 + cp $3 + jr z, .action_0 + cp $4 + jr z, .action_1 + cp $5 + jr z, .action_2 + cp $6 + jr z, .action_3 + cp $7 + jr z, .action_2 + jr .action_0 + +.tile_07 + ld a, [hl] + cp $1 + jr z, .action_2 + cp $2 + jr z, .action_3 + cp $3 + jr z, .action_2 + cp $4 + jr z, .action_1 + cp $5 + jr z, .action_0 + cp $6 + jr z, .action_0 + cp $7 + jr z, .action_0 + jr .action_0 + +.tile_12 +.tile_14 + ld a, [hl] + cp $1 + jr z, .action_0 + cp $2 + jr z, .action_1 + cp $3 + jr z, .action_2 + cp $4 + jr z, .action_3 + cp $5 + jr z, .action_3 + cp $6 + jr z, .action_2 + cp $7 + jr z, .action_1 + jr .action_0 + +.action_1 + call SufingMinigame_ReduceSpeedBy128 + jr .action_3 + +.action_2 + call SufingMinigame_ReduceSpeedBy64 +.action_3 + xor a + ld [wChannelSoundIDs + Ch8], a + ld a, SFX_SURFING_LAND + call PlaySound + and a + ret + +.action_0 + ld a, $40 + ld [wSurfingMinigamePikachuSpeed], a + xor a + ld [wSurfingMinigamePikachuSpeed + 1], a + scf + ret + +SurfingMinigame_SpeedUpPikachu: + ld a, [wSurfingMinigamePikachuSpeed + 1] + cp $2 + ret nc + ld h, a + ld a, [wSurfingMinigamePikachuSpeed] + ld l, a + ld de, $2 + add hl, de + ld a, h + ld [wSurfingMinigamePikachuSpeed + 1], a + ld a, l + ld [wSurfingMinigamePikachuSpeed], a + ret + +SufingMinigame_ReduceSpeedBy64: + ld a, [wSurfingMinigamePikachuSpeed + 1] + and a + jr nz, .go + ld a, [wSurfingMinigamePikachuSpeed] + cp $40 + jr nc, .go + xor a + ld [wSurfingMinigamePikachuSpeed], a + ret + +.go + ld a, [wSurfingMinigamePikachuSpeed + 1] + ld h, a + ld a, [wSurfingMinigamePikachuSpeed] + ld l, a + ld de, -$40 + add hl, de + ld a, h + ld [wSurfingMinigamePikachuSpeed + 1], a + ld a, l + ld [wSurfingMinigamePikachuSpeed], a + ret + +SufingMinigame_ReduceSpeedBy128: + ld a, [wSurfingMinigamePikachuSpeed + 1] + and a + jr nz, .go + ld a, [wSurfingMinigamePikachuSpeed] + cp $80 + jr nc, .go + xor a + ld [wSurfingMinigamePikachuSpeed], a + ret + +.go + ld a, [wSurfingMinigamePikachuSpeed + 1] + ld h, a + ld a, [wSurfingMinigamePikachuSpeed] + ld l, a + ld de, -$80 + add hl, de + ld a, h + ld [wSurfingMinigamePikachuSpeed + 1], a + ld a, l + ld [wSurfingMinigamePikachuSpeed], a + ret + +Func_f871e: + ldh a, [hSCX] + and $7 + cp $3 + jr c, .asm_f8740 + cp $5 + jr nc, .asm_f8740 + ld a, [wSurfingMinigameBGMapReadBuffer] + cp $14 + jr nz, .asm_f8740 + call SufingMinigame_GetSpeedDividedBy32 + cp $a + jr c, .asm_f8740 + ld [wc5ec], a + call Func_f9284 + scf + ret + +.asm_f8740 + and a + ret + +Func_f8742: + ldh a, [hSCX] + and $7 + cp $3 + ret c + cp $5 + ret nc + ld a, [wSurfingMinigameBGMapReadBuffer] + cp $6 + jr z, .asm_f8766 + cp $14 + jr z, .asm_f8766 + cp $7 + jr z, .asm_f876a + call Func_f8778 + ld a, $4 + ld hl, ANIM_OBJ_FRAME_SET + add hl, bc + ld [hl], a + ret + +.asm_f8766 + ld a, $6 + jr .asm_f876c + +.asm_f876a + ld a, $2 +.asm_f876c + ld e, a + ld a, [wc5de] + dec a + add e + ld hl, ANIM_OBJ_FRAME_SET + add hl, bc + ld [hl], a + ret + +Func_f8778: + ld hl, wc5e0 + ld a, [hl] + inc [hl] + and $7 + ret nz + ld a, [wc5df] + and a + jr z, .asm_f8796 + ld a, [wc5de] + and a + jr z, .asm_f8791 + dec a + ld [wc5de], a + ret + +.asm_f8791 + xor a + ld [wc5df], a + ret + +.asm_f8796 + ld a, [wc5de] + cp $2 + jr z, .asm_f87a2 + inc a + ld [wc5de], a + ret + +.asm_f87a2 + ld a, $1 + ld [wc5df], a + ret + +SufingMinigame_GetSpeedDividedBy32: + ld a, [wSurfingMinigamePikachuSpeed] + ld l, a + ld a, [wSurfingMinigamePikachuSpeed + 1] + ld h, a + add hl, hl + add hl, hl + add hl, hl + ld a, h + ret + +Func_f87b5: + ld hl, wc5eb + ld a, [hl] + inc [hl] + and $3 + ret nz + call .GetYCoord + ld d, a + ld hl, ANIM_OBJ_X_COORD + add hl, bc + ld e, [hl] + ld a, $a + push bc + call SpawnAnimatedObject + pop bc + ret + +.GetYCoord: + ldh a, [hSCX] + and $8 + jr nz, .get_height_plus_9 + ld hl, wSurfingMinigameWaveHeight + 8 + jr .got_hl + +.get_height_plus_9 + ld hl, wSurfingMinigameWaveHeight + 9 +.got_hl + ld a, [wSurfingMinigameBGMapReadBuffer + 1] + cp $6 + jr z, .six_or_twenty + cp $14 + jr z, .six_or_twenty + cp $7 + jr z, .seven + ld a, [hl] + ret + +.six_or_twenty + ldh a, [hSCX] + and $7 + ld e, a + ld a, [hl] + sub e + ret + +.seven + ldh a, [hSCX] + and $7 + add [hl] + ret + +Func_f87fb: + ld hl, ANIM_OBJ_X_COORD + add hl, bc + ld a, [hl] + cp $58 + ret z + add $4 + ld [hl], a + ret + +Func_f8807: ; unreferenced + call MaskCurrentAnimatedObjectStruct + ret + +SurfingMinigameAnimatedObjectFn_FlippingPika: + ld hl, ANIM_OBJ_FIELD_B + add hl, bc + ld a, [hl] + and a + ret z + dec [hl] + dec [hl] + ld d, a + ld hl, ANIM_OBJ_FIELD_C + add hl, bc + ld a, [hl] + inc [hl] + call SurfingPikachu_Sine + cp $80 + jr nc, .positive + xor $ff + inc a +.positive + ld hl, ANIM_OBJ_Y_OFFSET + add hl, bc + ld [hl], a + ret + +SurfingMinigameAnimatedObjectFn_IntroAnimationPikachu: + ld hl, ANIM_OBJ_FIELD_B + add hl, bc + ld a, [hl] + inc [hl] + and $1 + ret z + ld hl, ANIM_OBJ_X_COORD + add hl, bc + ld a, [hl] + cp $c0 + jr z, .done + inc [hl] + ret + +.done + ld a, $1 + ld [wSurfingMinigameIntroAnimationFinished], a + call MaskCurrentAnimatedObjectStruct + ret + +SurfingMinigame_MoveClouds: + ld a, [wc635] + ld e, a + ld d, $0 + ld a, [wSurfingMinigamePikachuSpeed] + ld l, a + ld a, [wSurfingMinigamePikachuSpeed + 1] + ld h, a + add hl, de + ld a, l + ld [wc635], a + ld d, h + ld hl, wOAMBuffer + 5 * 4 + 1 + ld e, $9 +.loop + ld a, [hl] + add d + ld [hli], a + inc hl + inc hl + inc hl + dec e + jr nz, .loop + ret + +SurfingMinigame_ReadBGMapBuffer: + ld a, [wSurfingMinigameBGMapReadBuffer] ; ??? + ldh a, [hSCX] + add $48 + ld e, a + srl e + srl e + srl e + ld d, $0 + ld hl, vBGMap0 + add hl, de + ld a, [wSurfingMinigamePikachuObjectHeight] + srl a + srl a + srl a + ld c, a +.loop + ld a, c + and a + jr z, .copy + dec c + ld de, $20 + add hl, de + ld a, h + and $3 + or $98 + ld h, a + jr .loop + +.copy + ld de, wSurfingMinigameBGMapReadBuffer + ld a, e + ldh [hVBlankCopyDest], a + ld a, d + ldh [hVBlankCopyDest + 1], a + ld a, l + ldh [hVBlankCopySource], a + ld a, h + ldh [hVBlankCopySource + 1], a + ld a, 16 / $10 + ldh [hVBlankCopySize], a + ret + +SurfingMinigame_SetPikachuHeight: + ldh a, [hSCX] + and $8 + jr nz, .asm_f88b9 + ld hl, wSurfingMinigameWaveHeight + 7 + jr .asm_f88bc + +.asm_f88b9 + ld hl, wSurfingMinigameWaveHeight + 8 +.asm_f88bc + ld a, [wSurfingMinigameBGMapReadBuffer] + cp $6 + jr z, .asm_f88d0 + cp $14 + jr z, .asm_f88d0 + cp $7 + jr z, .asm_f88db + ld a, [hl] + ld [wSurfingMinigamePikachuObjectHeight], a + ret + +.asm_f88d0 + ldh a, [hSCX] + and $7 + ld e, a + ld a, [hl] + sub e + ld [wSurfingMinigamePikachuObjectHeight], a + ret + +.asm_f88db + ldh a, [hSCX] + and $7 + add [hl] + ld [wSurfingMinigamePikachuObjectHeight], a + ret + +SurfingMinigame_Deduct1HP: + ld hl, wSurfingMinigamePikachuHP + ld e, $99 + call .BCD_Deduct + ret nc + inc hl + ld e, $99 +.BCD_Deduct: + ld a, [hl] + and a + jr z, .roll_over + sub $1 + daa + ld [hl], a + and a + ret + +.roll_over + ld [hl], e + scf + ret + +SurfingMinigame_DrawHP: + ld de, wSurfingMinigamePikachuHP + 1 + ld hl, wOAMBuffer + 0 * 4 + 2 + ld a, [de] + call .PlaceBCDNumber + ld hl, wOAMBuffer + 2 * 4 + 2 + ld a, [de] +.PlaceBCDNumber: + ld c, a + swap a + and $f + add $d0 + ld [hli], a + inc hl + inc hl + inc hl + ld a, c + and $f + add $d0 + ld [hl], a + dec de + ret + +SurfingMinigame_DrawResultsScreen: + ld hl, wTileMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + xor a + call FillMemory + ld hl, .BeachTilemap + decoord 0, 6 + ld bc, .BeachTilemapEnd - .BeachTilemap + call CopyData + call .PlaceTextbox + ld hl, wOAMBuffer + 5 * 4 + 1 + ld bc, 9 * 4 + xor a + call FillMemory + ld a, $1 + ldh [hAutoBGTransferEnabled], a + ret + +.BeachTilemap: +INCBIN "gfx/surfing_pikachu/unknown_f8946.map" +.BeachTilemapEnd: + +.PlaceTextbox: + hlcoord 1, 1 + lb de, $3b, $3c + ld a, $40 + call .place_row + hlcoord 1, 2 + lb de, $3f, $3f + ld a, $ff + call .place_row + hlcoord 1, 3 + lb de, $3f, $3f + ld a, $ff + call .place_row + hlcoord 1, 4 + lb de, $3f, $3f + ld a, $ff + call .place_row + hlcoord 1, 5 + lb de, $3f, $3f + ld a, $ff + call .place_row + hlcoord 1, 6 + lb de, $3f, $3f + ld a, $ff + call .place_row + hlcoord 1, 7 + lb de, $3f, $3f + ld a, $ff + call .place_row + hlcoord 1, 8 + lb de, $3f, $3f + ld a, $ff + call .place_row + hlcoord 1, 9 + lb de, $3d, $3e + ld a, $40 + call .place_row + ret + +.place_row: + ld [hl], d + inc hl + ld c, $10 +.loop + ld [hli], a + dec c + jr nz, .loop + ld [hl], e + ret + +SurfingMinigame_PrintTextHiScore: + ld hl, .Hi_Score + decoord 6, 8 + ld bc, $9 + call CopyData + ret + +.Hi_Score: + db $20,$2e,$2f,$30,$31,$2c,$32,$23,$33 ; Hi-Score!! + +SurfingMinigame_WriteHPLeft: + ld hl, .HP_Left + decoord 2, 2 + ld bc, $7 + call CopyData + call SurfingMinigame_BCDPrintHPLeft + ret + +.HP_Left: + db $20,$21,$ff,$22,$23,$24,$25 ; HP Left + +SurfingMinigame_AddRemainingHPToTotal: + ld c, 99 +.loop + push bc + ld hl, wSurfingMinigamePikachuHP + ld a, [hli] + or [hl] + and a + jr z, .dead + call SurfingMinigame_Deduct1HP + ld e, $1 + call SurfingMinigame_AddPointsToTotal + pop bc + dec c + jr nz, .loop + ld a, SFX_PRESS_AB + call PlaySound + and a + ret + +.dead + pop bc + scf + ret + +SurfingMinigame_BCDPrintHPLeft: + hlcoord 10, 2 + ld de, wSurfingMinigamePikachuHP + 1 + ld a, [de] + call SurfingPikachu_PlaceBCDNumber + inc hl + ld a, [de] + call SurfingPikachu_PlaceBCDNumber + inc hl + inc hl + ld [hl], $21 ; P + inc hl + ld [hl], $25 ; t + inc hl + ld [hl], $26 ; s + ret + +SurfingMinigame_WriteRadness: + ld hl, .Radness + decoord 2, 4 + ld bc, $7 + call CopyData + call SurfingMinigame_BCDPrintRadness + ret + +.Radness: + db $27,$28,$29,$2a,$23,$26,$26 ; Radness + +SurfingMinigame_AddRadnessToTotal: + ld c, 99 +.loop + push bc + ld hl, wSurfingMinigameRadnessScore + ld a, [hli] + ld e, a + or [hl] + jr z, .done + ld d, [hl] + ld a, e + sub $1 + daa + ld e, a + ld a, d + sbc $0 + daa + ld [hld], a + ld [hl], e + ld e, $1 + call SurfingMinigame_AddPointsToTotal + pop bc + dec c + jr nz, .loop + ld a, SFX_PRESS_AB + call PlaySound + and a + ret + +.done + pop bc + scf + ret + +SurfingMinigame_BCDPrintRadness: + ld a, [wSurfingMinigameRadnessScore + 1] + hlcoord 10, 4 + call SurfingPikachu_PlaceBCDNumber + ld a, [wSurfingMinigameRadnessScore] + hlcoord 12, 4 + call SurfingPikachu_PlaceBCDNumber + inc hl + inc hl + ld [hl], $21 ; P + inc hl + ld [hl], $25 ; t + inc hl + ld [hl], $26 ; s + ret + +SurfingMinigame_AddPointsToTotal: + ld a, [wSurfingMinigameTotalScore] + add e + daa + ld [wSurfingMinigameTotalScore], a + ld a, [wSurfingMinigameTotalScore + 1] + adc $0 + daa + ld [wSurfingMinigameTotalScore + 1], a + ret nc + ld a, $99 + ld [wSurfingMinigameTotalScore], a + ld [wSurfingMinigameTotalScore + 1], a + ret + +SurfingMinigame_BCDPrintTotalScore: + ld a, [wSurfingMinigameTotalScore + 1] + hlcoord 10, 6 + call SurfingPikachu_PlaceBCDNumber + ld a, [wSurfingMinigameTotalScore] + hlcoord 12, 6 + call SurfingPikachu_PlaceBCDNumber + inc hl + inc hl + ld [hl], $21 ; P + inc hl + ld [hl], $25 ; t + inc hl + ld [hl], $26 ; s + ret + +SurfingMinigame_WriteTotal: + ld hl, .Total + decoord 2, 6 + ld bc, $5 + call CopyData + call SurfingMinigame_BCDPrintRadness + call SurfingMinigame_BCDPrintTotalScore + ret + +.Total: + db $2b,$2c,$25,$28,$2d ; Total + +DidPlayerGetAHighScore: + ld hl, wSurfingMinigameHiScore + 1 + ld a, [wSurfingMinigameTotalScore + 1] + cp [hl] + jr c, .not_high_score + jr nz, .high_score + dec hl + ld a, [wSurfingMinigameTotalScore] + cp [hl] + jr c, .not_high_score + jr nz, .high_score +.not_high_score + call WaitForSoundToFinish + ldpikacry e, PikachuCry28 + call SurfingMinigame_PlayPikaCryIfSurfingPikaInParty + and a + ret + +.high_score + ld a, [wSurfingMinigameTotalScore] + ld [wSurfingMinigameHiScore], a + ld a, [wSurfingMinigameTotalScore + 1] + ld [wSurfingMinigameHiScore + 1], a + call WaitForSoundToFinish + ldpikacry e, PikachuCry34 + call SurfingMinigame_PlayPikaCryIfSurfingPikaInParty + ld a, SFX_GET_ITEM2_4_2 + call PlaySound + scf + ret + +SurfingMinigame_PlayPikaCryIfSurfingPikaInParty: + push de + callfar IsSurfingPikachuInThePlayersParty + pop de + ret nc + callfar PlayPikachuSoundClip + ret + +SurfingMinigame_IncreaseRadnessMeter: + ld a, [wSurfingMinigameRadnessMeter] + inc a + cp $4 + jr c, .cap + ld a, $3 +.cap + ld [wSurfingMinigameRadnessMeter], a + ret + +SurfingMinigame_CalculateAndAddRadnessFromStunt: + ; Compute the amount of radness points from the + ; current trick based on the number of + ; consecutive flips + ; Single flip: +0050 + ; 2 of the same flip: +0150 + ; 3 or more of the same flip: +0350 + ; 2 different flips: +0180 + ; 3 or more different flips: +0500 + ld a, [wSurfingMinigameRadnessMeter] + and a + ret z + ld a, [wSurfingMinigameTrickFlags] + and $3 + cp $3 ; did a combination of front and back flips + jr z, .mixed_chain + ld a, [wSurfingMinigameRadnessMeter] + ld d, a + ld e, $1 + ld a, $0 +.get_amount_of_radness + add e + sla e + dec d + jr nz, .get_amount_of_radness +.add_radness_50_at_a_time + push af + ld e, $50 + call SurfingMinigame_AddRadness + pop af + dec a + jr nz, .add_radness_50_at_a_time + ld hl, ANIM_OBJ_Y_COORD + add hl, bc + ld a, [hl] + sub $10 + ld d, a + ld hl, ANIM_OBJ_X_COORD + add hl, bc + ld e, [hl] + ld a, [wSurfingMinigameRadnessMeter] + add $3 + push bc + call SpawnAnimatedObject + pop bc + ret + +.mixed_chain + ld a, [wSurfingMinigameRadnessMeter] + cp $3 + jr c, .add_180_radness_points + ld a, 10 +.add_500_radness_50_at_a_time + push af + ld e, $50 + call SurfingMinigame_AddRadness + pop af + dec a + jr nz, .add_500_radness_50_at_a_time + ld hl, ANIM_OBJ_Y_COORD + add hl, bc + ld a, [hl] + sub $10 + ld d, a + ld hl, ANIM_OBJ_X_COORD + add hl, bc + ld e, [hl] + ld a, $9 + push bc + call SpawnAnimatedObject + pop bc + ret + +.add_180_radness_points + ld e, $50 + call SurfingMinigame_AddRadness + ld e, $50 + call SurfingMinigame_AddRadness + ld e, $50 + call SurfingMinigame_AddRadness + ld e, $30 + call SurfingMinigame_AddRadness + ld hl, ANIM_OBJ_Y_COORD + add hl, bc + ld a, [hl] + sub $10 + ld d, a + ld hl, ANIM_OBJ_X_COORD + add hl, bc + ld e, [hl] + ld a, $8 + push bc + call SpawnAnimatedObject + pop bc + ret + +SurfingMinigame_AddRadness: + ld a, [wSurfingMinigameRadnessScore] + add e + daa + ld [wSurfingMinigameRadnessScore], a + ld a, [wSurfingMinigameRadnessScore + 1] + adc $0 + daa + ld [wSurfingMinigameRadnessScore + 1], a + ret nc + ld a, $99 + ld [wSurfingMinigameRadnessScore], a + ld [wSurfingMinigameRadnessScore + 1], a + ret + +Func_f8c97: + ld a, $a0 + ld [wSurfingMinigameXOffset], a + ldh a, [hSCX] + ld h, a + ld a, [wSurfingMinigameSCX] + ld l, a + ld de, $900 + add hl, de + ld a, l + ld [wSurfingMinigameSCX], a + ld a, h + ldh [hSCX], a + jr SurfingMinigame_GenerateBGMap + +SurfingMinigame_ScrollAndGenerateBGMap: + ld a, $a0 + ld [wSurfingMinigameXOffset], a + ldh a, [hSCX] + ld h, a + ld a, [wSurfingMinigameSCX] + ld l, a + ld de, $180 + add hl, de + ld a, l + ld [wSurfingMinigameSCX], a + ld a, h + ldh [hSCX], a +SurfingMinigame_GenerateBGMap: + ld hl, wSurfingMinigameSCX + 1 + ldh a, [hSCX] + cp [hl] + ret z + ld [hl], a + and $f0 + ld hl, wSurfingMinigameSCX + 2 + cp [hl] + ret z + ld [hl], a + call SurfingMinigame_GetWaveDataPointers + ; b and c contain the height of the next wave to appear + ; on screen, in number of pixels from the top of the screen + ld a, b + ld [wSurfingMinigameWaveHeightBuffer], a + ld a, c + ld [wSurfingMinigameWaveHeightBuffer + 1], a + push de + ld hl, wSurfingMinigameWaveHeight + ld de, wSurfingMinigameWaveHeight + 2 + ld c, SCREEN_WIDTH - 2 +.copy_loop + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .copy_loop + ld a, [wSurfingMinigameWaveHeightBuffer] + ld [hli], a + ld a, [wSurfingMinigameWaveHeightBuffer + 1] + ld [hl], a + pop de + ld hl, wRedrawRowOrColumnSrcTiles + ld c, $8 +.loop + ld a, [de] + call .CopyRedrawSrcTiles + inc de + dec c + jr nz, .loop + ld a, [wSurfingMinigameXOffset] + ld e, a + ldh a, [hSCX] + add e + and $f0 + srl a + srl a + srl a + ld e, a + ld d, $0 + ld hl, vBGMap0 + add hl, de + ld a, l + ldh [hRedrawRowOrColumnDest], a + ld a, h + ldh [hRedrawRowOrColumnDest + 1], a + ld a, $1 + ldh [hRedrawRowOrColumnMode], a + ret + +.CopyRedrawSrcTiles: + push de + push hl + ld l, a + ld h, $0 + ld de, Unkn_f96e5 + add hl, hl + add hl, hl + add hl, de + ld e, l + ld d, h + pop hl + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + pop de + ret + +SurfingMinigame_GetWaveDataPointers: + ld a, [wSurfingMinigameWaveFunctionNumber] + ld e, a + ld d, $0 + ld hl, Jumptable_f8d53 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +Jumptable_f8d53: + dw SurfingMinigameWaveFunction_NoWave ; 00 + + dw Func_f8f28 ; 01 + dw Func_f8f31 ; 02 + dw Func_f8f3a ; 03 + dw Func_f8f43 ; 04 + dw Func_f8e7d ; 05 + dw Func_f8f4c ; 06 + dw Func_f8f55 ; 07 + dw Func_f8f5e ; 08 + dw Func_f8e7d ; 09 + dw Func_f8e7d ; 0a + dw Func_f8e7d ; 0b + dw Func_f8e7d ; 0c + dw Func_f8f94 ; 0d + + dw Func_f8ec5 ; 0e + dw Func_f8ece ; 0f + dw Func_f8ed7 ; 10 + dw Func_f8ee0 ; 11 + dw Func_f8ee9 ; 12 + dw Func_f8ef2 ; 13 + dw Func_f8e7d ; 14 + dw Func_f8e7d ; 15 + dw Func_f8e7d ; 16 + dw Func_f8e7d ; 17 + dw Func_f8e7d ; 18 + dw Func_f8f94 ; 19 + + dw Func_f8efb ; 1a + dw Func_f8f04 ; 1b + dw Func_f8f0d ; 1c + dw Func_f8f16 ; 1d + dw Func_f8f1f ; 1e + dw Func_f8efb ; 1f + dw Func_f8f04 ; 20 + dw Func_f8f0d ; 21 + dw Func_f8f16 ; 22 + dw Func_f8f1f ; 23 + dw Func_f8e7d ; 24 + dw Func_f8e7d ; 25 + dw Func_f8e7d ; 26 + dw Func_f8e7d ; 27 + dw Func_f8f94 ; 28 + + dw Func_f8f28 ; 29 + dw Func_f8f31 ; 2a + dw Func_f8f3a ; 2b + dw Func_f8f43 ; 2c + dw Func_f8e7d ; 2d + dw Func_f8e7d ; 2e + dw Func_f8e7d ; 2f + dw Func_f8e7d ; 30 + dw Func_f8f94 ; 31 + + dw Func_f8f4c ; 32 + dw Func_f8f55 ; 33 + dw Func_f8f5e ; 34 + dw Func_f8f4c ; 35 + dw Func_f8f55 ; 36 + dw Func_f8f5e ; 37 + dw Func_f8f4c ; 38 + dw Func_f8f55 ; 39 + dw Func_f8f5e ; 3a + dw Func_f8e7d ; 3b + dw Func_f8e7d ; 3c + dw Func_f8e7d ; 3d + dw Func_f8e7d ; 3e + dw Func_f8f94 ; 3f + + dw Func_f8f67 ; 40 + dw Func_f8f70 ; 41 + dw Func_f8efb ; 42 + dw Func_f8f04 ; 43 + dw Func_f8f0d ; 44 + dw Func_f8f16 ; 45 + dw Func_f8f1f ; 46 + dw Func_f8f67 ; 47 + dw Func_f8f70 ; 48 + dw Func_f8e7d ; 49 + dw Func_f8e7d ; 4a + dw Func_f8e7d ; 4b + dw Func_f8f94 ; 4c + + dw Func_f8ec5 ; 4d + dw Func_f8ece ; 4e + dw Func_f8ed7 ; 4f + dw Func_f8ee0 ; 50 + dw Func_f8ee9 ; 51 + dw Func_f8ef2 ; 52 + dw Func_f8e7d ; 53 + dw Func_f8f67 ; 54 + dw Func_f8f70 ; 55 + dw Func_f8f67 ; 56 + dw Func_f8f70 ; 57 + dw Func_f8e7d ; 58 + dw Func_f8e7d ; 59 + dw Func_f8e7d ; 5a + dw Func_f8f94 ; 5b + + dw Func_f8efb ; 5c + dw Func_f8f04 ; 5d + dw Func_f8f0d ; 5e + dw Func_f8f16 ; 5f + dw Func_f8f1f ; 60 + dw Func_f8f28 ; 61 + dw Func_f8f31 ; 62 + dw Func_f8f3a ; 63 + dw Func_f8f43 ; 64 + dw Func_f8e7d ; 65 + dw Func_f8e7d ; 66 + dw Func_f8e7d ; 67 + dw Func_f8e7d ; 68 + dw Func_f8f94 ; 69 + + dw Func_f8e86 ; 6a + dw Func_f8e8f ; 6b + dw Func_f8e98 ; 6c + dw Func_f8ea1 ; 6d + dw Func_f8eaa ; 6e + dw Func_f8eb3 ; 6f + dw Func_f8ebc ; 70 + dw Func_f8f9d ; 71 + + dw Func_f8e7d ; 72 + dw Func_f8f79 ; 73 + dw Func_f8f82 ; 74 + dw Func_f8f82 ; 75 + dw Func_f8f82 ; 76 + dw Func_f8f82 ; 77 + dw Func_f8f82 ; 78 + dw Func_f8f82 ; 79 + dw Func_f8f82 ; 7a + dw Func_f8f8b ; 7b + +SurfingMinigameWaveFunction_NoWave: + ld a, [wc5e5] + cp $16 + jr c, .check_param + jr z, .big_kahuna + jr nc, .got_wave +.big_kahuna + ld a, $6a + jr .got_next_fn + +.check_param + ld a, [wc5d5] + and a + jr z, .got_wave + dec a + and $7 + ld e, a + ld d, $0 + ld hl, Unkn_f8e75 + add hl, de + ld a, [hl] +.got_next_fn + ld [wSurfingMinigameWaveFunctionNumber], a +.got_wave + lb bc, $74, $74 + ld de, Unkn_f973d + ret + +Unkn_f8e75: + db $01,$0e,$1a,$29,$32,$40,$4d,$5c + +Func_f8e7d: + lb bc, $74, $74 + ld de, Unkn_f973d + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8e86: + lb bc, $74, $6c + ld de, Unkn_f9745 + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8e8f: + lb bc, $64, $5c + ld de, Unkn_f974d + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8e98: + lb bc, $54, $4c + ld de, Unkn_f9755 + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8ea1: + lb bc, $44, $44 + ld de, Unkn_f975d + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8eaa: + lb bc, $44, $4c + ld de, Unkn_f9765 + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8eb3: + lb bc, $54, $5c + ld de, Unkn_f976d + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8ebc: + lb bc, $64, $6c + ld de, Unkn_f9775 + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8ec5: + lb bc, $74, $6c + ld de, Unkn_f977d + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8ece: + lb bc, $64, $5c + ld de, Unkn_f9785 + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8ed7: + lb bc, $54, $4c + ld de, Unkn_f978d + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8ee0: + lb bc, $4c, $4c + ld de, Unkn_f9795 + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8ee9: + lb bc, $54, $5c + ld de, Unkn_f979d + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8ef2: + lb bc, $64, $6c + ld de, Unkn_f97a5 + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8efb: + lb bc, $74, $6c + ld de, Unkn_f97ad + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f04: + lb bc, $64, $5c + ld de, Unkn_f97b5 + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f0d: + lb bc, $54, $54 + ld de, Unkn_f97bd + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f16: + lb bc, $54, $5c + ld de, Unkn_f97c5 + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f1f: + lb bc, $64, $6c + ld de, Unkn_f97cd + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f28: + lb bc, $74, $6c + ld de, Unkn_f97d5 + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f31: + lb bc, $64, $5c + ld de, Unkn_f97dd + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f3a: + lb bc, $5c, $5c + ld de, Unkn_f97e5 + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f43: + lb bc, $64, $6c + ld de, Unkn_f97ed + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f4c: + lb bc, $74, $6c + ld de, Unkn_f97f5 + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f55: + lb bc, $64, $64 + ld de, Unkn_f97fd + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f5e: + lb bc, $64, $6c + ld de, Unkn_f9805 + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f67: + lb bc, $74, $6c + ld de, Unkn_f980d + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f70: + lb bc, $6c, $6c + ld de, Unkn_f9815 + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f79: + lb bc, $74, $74 + ld de, Unkn_f981d + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f82: + lb bc, $74, $74 + ld de, Unkn_f9825 + jp SurfingMinigameWaveFunction_GoToNextWaveFunction + +Func_f8f8b: + lb bc, $74, $74 + ld de, Unkn_f9825 + jp SurfingMinigameWaveFunction_ResetWaveFunction + +Func_f8f94: + lb bc, $74, $74 + ld de, Unkn_f973d + jp SurfingMinigameWaveFunction_ResetWaveFunction + +Func_f8f9d: + lb bc, $74, $74 + ld de, Unkn_f973d + ret + +Func_f8fa4: ; unused + inc a + ld [wSurfingMinigameWaveFunctionNumber], a + ret + +SurfingMinigameWaveFunction_GoToNextWaveFunction: + ld hl, wSurfingMinigameWaveFunctionNumber + inc [hl] + ret + +SurfingMinigameWaveFunction_ResetWaveFunction: + xor a + ld [wSurfingMinigameWaveFunctionNumber], a + ret + +SurfingPikachuMinigameIntro: + call SurfingPikachu_ClearTileMap + call ClearSprites + call DisableLCD + xor a + ldh [hAutoBGTransferEnabled], a + call ClearObjectAnimationBuffers + ld hl, SurfingPikachu1Graphics3 + ld de, $8800 + ld bc, $900 + ld a, BANK(SurfingPikachu1Graphics3) + call FarCopyData + ld a, LOW(SurfingPikachuSpawnStateDataPointer) + ld [wAnimatedObjectSpawnStateDataPointer], a + ld a, HIGH(SurfingPikachuSpawnStateDataPointer) + ld [wAnimatedObjectSpawnStateDataPointer + 1], a + ld a, LOW(SurfingPikachuObjectJumptable) + ld [wAnimatedObjectJumptablePointer], a + ld a, HIGH(SurfingPikachuObjectJumptable) + ld [wAnimatedObjectJumptablePointer + 1], a + ld a, LOW(SurfingPikachuOAMData) + ld [wAnimatedObjectOAMDataPointer], a + ld a, HIGH(SurfingPikachuOAMData) + ld [wAnimatedObjectOAMDataPointer + 1], a + ld a, LOW(SurfingPikachuFrames) + ld [wAnimatedObjectFramesDataPointer], a + ld a, HIGH(SurfingPikachuFrames) + ld [wAnimatedObjectFramesDataPointer + 1], a + ld a, $c + lb de, $74, $58 + call SpawnAnimatedObject + call DrawSurfingPikachuMinigameIntroBackground + xor a + ldh [hSCX], a + ldh [hSCY], a + ld a, $90 + ldh [hWY], a + ld b, $f + call RunPaletteCommand + ld a, $e3 + ldh [rLCDC], a + ld a, $1 + ldh [hAutoBGTransferEnabled], a + call DelayFrame + call DelayFrame + call DelayFrame + call SurfingPikachuMinigame_SetBGPals + ld a, $e4 + ldh [rOBP0], a + ld a, $e0 + ldh [rOBP1], a + call UpdateGBCPal_OBP0 + call UpdateGBCPal_OBP1 + call DelayFrame + ld a, MUSIC_SURFING_PIKACHU + ld c, BANK(Music_SurfingPikachu) + call PlayMusic + xor a + ld [wSurfingMinigameIntroAnimationFinished], a +.loop + ld a, [wSurfingMinigameIntroAnimationFinished] + and a + ret nz + ld a, $0 + ld [wCurrentAnimatedObjectOAMBufferOffset], a + call RunObjectAnimations + call DelayFrame + jr .loop + +DrawSurfingPikachuMinigameIntroBackground: + ld hl, wTileMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, $ff + call FillMemory + ld hl, Tilemap_f90bc + decoord 0, 6 + ld bc, 12 * SCREEN_WIDTH + call CopyData + ld de, Tilemap_f91c8 + hlcoord 4, 0 + lb bc, 6, 12 + call .CopyBox + hlcoord 3, 7 + lb bc, 3, 15 + call .FillBoxWithFF + ld hl, Tilemap_f91ac + decoord 3, 7 + ld bc, 15 + call CopyData + ld hl, Tilemap_f91bb + decoord 4, 9 + ld bc, 13 + call CopyData + ret + +.CopyBox: +.copy_row + push bc + push hl +.copy_col + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .copy_col + ld bc, SCREEN_WIDTH + pop hl + add hl, bc + pop bc + dec b + jr nz, .copy_row + ret + +.FillBoxWithFF: +.fill_row + push bc + push hl +.fill_col + ld [hl], $ff + inc hl + dec c + jr nz, .fill_col + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .fill_row + ret + +Tilemap_f90bc: INCBIN "gfx/surfing_pikachu/unknown_f90bc.map" +Tilemap_f91ac: INCBIN "gfx/surfing_pikachu/unknown_f91ac.map" +Tilemap_f91bb: INCBIN "gfx/surfing_pikachu/unknown_f91bb.map" +Tilemap_f91c8: INCBIN "gfx/surfing_pikachu/unknown_f91c8.map" + +SurfingMinigame_UpdateLYOverrides: + ld hl, wLYOverrides + $10 + ld de, wLYOverrides + $11 + ld c, $80 + ld a, [hl] + push af +.loop + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .loop + pop af + ld [hl], a + ret + +SurfingMinigame_InitScanlineOverrides: + ld hl, wLYOverrides + ld bc, wLYOverridesEnd - wLYOverrides + ld de, $0 +.loop + ld a, e + and $1f + ld e, a + push hl + ld hl, SurfingMinigame_LYOverridesInitialSineWave + add hl, de + ld a, [hl] + pop hl + ld [hli], a + inc e + dec bc + ld a, c + or b + jr nz, .loop + ret + +SurfingPikachu_GetJoypad_3FrameBuffer: + call Joypad + ldh a, [hFrameCounter] + and a + jr nz, .delayed + ldh a, [hJoyHeld] + ldh [hJoy5], a + ld a, $2 + ldh [hFrameCounter], a + ret + +.delayed + xor a + ldh [hJoy5], a + ret + +SurfingPikachuMinigame_BlankPals: + xor a + ldh [rBGP], a + ldh [rOBP0], a + ldh [rOBP1], a + call UpdateGBCPal_BGP + call UpdateGBCPal_OBP0 + call UpdateGBCPal_OBP1 + ret + +SurfingPikachuMinigame_NormalPals: + ld a, $e4 + ldh [rBGP], a + ldh [rOBP0], a + ld a, $e0 + ldh [rOBP1], a + call UpdateGBCPal_BGP + call UpdateGBCPal_OBP0 + call UpdateGBCPal_OBP1 + ret + +SurfingPikachu_ClearTileMap: + ld hl, wTileMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + xor a + call FillMemory + ret + +Func_f9284: + xor a + ld [wc5ed], a + ld [wc5ee], a + ret + +SurfingMinigame_UpdatePikachuHeight: + ld a, [wc5ed] + and a + jr nz, .positive + ld a, [wc5ec] + ld d, a + ld a, [wc5ee] + or d + jr z, .done + ld a, [wc5ee] + ld e, a + ld hl, -$80 + add hl, de + ld a, l + ld [wc5ee], a + ld a, h + ld [wc5ec], a + + ; -(4 * a ** 2) + ld e, a + ld d, $0 + call SurfingMinigame_NTimesDE + ld e, l + ld d, h + ld a, $4 + call SurfingMinigame_NTimesDE + ld a, l + xor $ff + inc a + ld l, a + ld a, h + xor $ff + ld h, a + + push hl + ld hl, ANIM_OBJ_Y_COORD + add hl, bc + ld d, [hl] + ld hl, ANIM_OBJ_FIELD_C + add hl, bc + ld e, [hl] + pop hl + + add hl, de + ld e, l + ld d, h + + ld hl, ANIM_OBJ_Y_COORD + add hl, bc + ld [hl], d + ld hl, ANIM_OBJ_FIELD_C + add hl, bc + ld [hl], e + and a + ret + +.done + ld a, $1 + ld [wc5ed], a + and a + ret + +.positive + ld a, [wSurfingMinigamePikachuObjectHeight] + ld e, a + ld hl, ANIM_OBJ_Y_COORD + add hl, bc + ld a, [hl] + cp $90 + jr nc, .okay + cp e + jr nc, .reset +.okay + ld a, [wc5ec] + ld d, a + ld a, [wc5ee] + ld e, a + ld hl, $80 + add hl, de + ld a, l + ld [wc5ee], a + ld a, h + ld [wc5ec], a + + ; 4 * a ** 2 + ld e, a + ld d, $0 + call SurfingMinigame_NTimesDE + ld e, l + ld d, h + ld a, $4 + call SurfingMinigame_NTimesDE + + push hl + ld hl, ANIM_OBJ_Y_COORD + add hl, bc + ld d, [hl] + ld hl, ANIM_OBJ_FIELD_C + add hl, bc + ld e, [hl] + pop hl + + add hl, de + ld e, l + ld d, h + + ld hl, ANIM_OBJ_Y_COORD + add hl, bc + ld [hl], d + ld hl, ANIM_OBJ_FIELD_C + add hl, bc + ld [hl], e + and a + ret + +.reset + ld hl, ANIM_OBJ_Y_COORD + add hl, bc + ld a, [wSurfingMinigamePikachuObjectHeight] + ld [hl], a + ld hl, ANIM_OBJ_FIELD_C + add hl, bc + ld [hl], $0 + scf + ret + +SurfingMinigame_NTimesDE: + ld hl, $0 +.loop + srl a + jr nc, .no_add + add hl, de +.no_add + sla e + rl d + and a + jr nz, .loop + ret + +SurfingPikachu_PlaceBCDNumber: + ld c, a + swap a + and $f + add $d0 + ld [hli], a + ld a, c + and $f + add $d0 + ld [hl], a + dec de + ret + +SurfingPikachu_Cosine: ; cosine + add $10 +SurfingPikachu_Sine: ; sine + and $3f + cp $20 + jr nc, .positive + call .GetSine + ld a, h + ret + +.positive + and $1f + call .GetSine + ld a, h + xor $ff + inc a + ret + +.GetSine: + ld e, a + ld a, d + ld d, $0 + ld hl, .SineWave + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $0 +.loop + srl a + jr nc, .no_add + add hl, de +.no_add + sla e + rl d + and a + jr nz, .loop + ret + +.SineWave: + sine_wave $100 + +SurfingPikachuSpawnStateDataPointer: + db $00, $00, $00 ; 0 + db $04, $01, $00 ; 1 + db $11, $02, $00 ; 2 + db $12, $02, $00 ; 3 + db $15, $00, $00 ; 4 + db $16, $00, $00 ; 5 + db $17, $00, $00 ; 6 + db $18, $00, $00 ; 7 + db $19, $00, $00 ; 8 + db $1a, $00, $00 ; 9 + db $14, $00, $00 ; a + db $13, $03, $00 ; b + db $1b, $04, $00 ; c + +SurfingPikachuObjectJumptable: + dw SurfingMinigameAnimatedObjectFn_nop ; 0 + dw SurfingMinigameAnimatedObjectFn_Pikachu ; 1 + dw Func_f87fb ; 2 + dw SurfingMinigameAnimatedObjectFn_FlippingPika ; 3 + dw SurfingMinigameAnimatedObjectFn_IntroAnimationPikachu ; 4 + +SurfingMinigameAnimatedObjectFn_nop: + ret + +INCLUDE "data/sprite_anims/surfing_pikachu_frames.asm" +INCLUDE "data/sprite_anims/surfing_pikachu_oam.asm" + +SurfingMinigame_LYOverridesInitialSineWave: +; a sine wave with amplitude 2 + db 0, 0, 0, 1, 1, 1, 1, 2 + db 2, 2, 1, 1, 1, 1, 0, 0 + db 0, 0, 0, -1, -1, -1, -1, -2 + db -2, -2, -1, -1, -1, -1, 0, 0 + +Unkn_f96e5: + db $00, $00, $00, $00 ; 00 + db $0b, $0b, $0b, $0b ; 01 + db $0b, $02, $02, $06 ; 02 + db $03, $0b, $07, $03 ; 03 + db $06, $06, $06, $06 ; 04 + db $07, $07, $07, $07 ; 05 + db $06, $04, $04, $08 ; 06 + db $05, $07, $08, $05 ; 07 + db $0b, $0b, $11, $12 ; 08 + db $0b, $0b, $13, $03 ; 09 + db $14, $12, $04, $08 ; 0a + db $13, $07, $08, $05 ; 0b + db $06, $14, $06, $14 ; 0c + db $13, $07, $13, $07 ; 0d + db $08, $08, $08, $08 ; 0e + db $14, $12, $14, $12 ; 0f + db $0b, $11, $02, $14 ; 10 + db $06, $14, $06, $14 ; 11 + db $0c, $0c, $0d, $0d ; 12 + db $0d, $0d, $0d, $0d ; 13 + db $0e, $0f, $10, $0b ; 14 + db $12, $13, $12, $13 ; 15 + +Unkn_f973d: + db $00, $00, $00, $01, $01, $01, $01, $01 +Unkn_f9745: + db $00, $00, $00, $01, $01, $02, $04, $06 +Unkn_f974d: + db $00, $00, $00, $01, $02, $04, $06, $0e +Unkn_f9755: + db $00, $00, $00, $10, $11, $06, $0e, $0e +Unkn_f975d: + db $00, $00, $00, $15, $15, $0e, $0e, $0e +Unkn_f9765: + db $00, $00, $00, $03, $05, $07, $0e, $0e +Unkn_f976d: + db $00, $00, $00, $01, $03, $05, $07, $0e +Unkn_f9775: + db $00, $00, $00, $01, $01, $03, $05, $07 +Unkn_f977d: + db $00, $00, $00, $01, $01, $02, $04, $06 +Unkn_f9785: + db $00, $00, $00, $01, $02, $04, $06, $0e +Unkn_f978d: + db $00, $00, $00, $08, $0f, $0a, $0e, $0e +Unkn_f9795: + db $00, $00, $00, $09, $0d, $0b, $0e, $0e +Unkn_f979d: + db $00, $00, $00, $01, $03, $05, $07, $0e +Unkn_f97a5: + db $00, $00, $00, $01, $01, $03, $05, $07 +Unkn_f97ad: + db $00, $00, $00, $01, $01, $02, $04, $06 +Unkn_f97b5: + db $00, $00, $00, $01, $10, $11, $06, $0e +Unkn_f97bd: + db $00, $00, $00, $01, $15, $15, $0e, $0e +Unkn_f97c5: + db $00, $00, $00, $01, $03, $05, $07, $0e +Unkn_f97cd: + db $00, $00, $00, $01, $01, $03, $05, $07 +Unkn_f97d5: + db $00, $00, $00, $01, $01, $02, $04, $06 +Unkn_f97dd: + db $00, $00, $00, $01, $08, $0f, $0a, $0e +Unkn_f97e5: + db $00, $00, $00, $01, $09, $0d, $0b, $0e +Unkn_f97ed: + db $00, $00, $00, $01, $01, $03, $05, $07 +Unkn_f97f5: + db $00, $00, $00, $01, $01, $10, $11, $06 +Unkn_f97fd: + db $00, $00, $00, $01, $01, $15, $15, $0e +Unkn_f9805: + db $00, $00, $00, $01, $01, $03, $05, $07 +Unkn_f980d: + db $00, $00, $00, $01, $01, $08, $0f, $0a +Unkn_f9815: + db $00, $00, $00, $01, $01, $09, $0d, $0b +Unkn_f981d: + db $00, $00, $00, $14, $14, $14, $14, $14 +Unkn_f9825: + db $00, $00, $00, $12, $13, $13, $13, $13 diff --git a/engine/movie/intro_yellow.asm b/engine/movie/intro_yellow.asm new file mode 100755 index 00000000..673d207c --- /dev/null +++ b/engine/movie/intro_yellow.asm @@ -0,0 +1,1085 @@ +PlayIntroScene: + ldh a, [rIE] + push af + xor a + ldh [rIF], a + ld a, $f + ldh [rIE], a + ld a, $8 + ldh [rSTAT], a + call InitYellowIntroGFXAndMusic + call DelayFrame +.loop + ld a, [wYellowIntroCurrentScene] + bit 7, a + jr nz, .go_to_title_screen + call JoypadLowSensitivity + ldh a, [hJoyPressed] + and A_BUTTON | B_BUTTON | START + jr nz, .go_to_title_screen + call Func_f98fc + ld a, $0 + ld [wCurrentAnimatedObjectOAMBufferOffset], a + call RunObjectAnimations + ld a, [wYellowIntroCurrentScene] + cp $7 + call z, Func_f98a2 + cp $b + call z, Func_f98cb + call DelayFrame + jr .loop + +.go_to_title_screen + call YellowIntro_BlankPalettes + xor a + ldh [hLCDCPointer], a + call DelayFrame + xor a + ldh [rIF], a + pop af + ldh [rIE], a + ld a, $90 + ldh [hWY], a + call ClearObjectAnimationBuffers + ld hl, wTileMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + xor a + call Bank3E_FillMemory + call YellowIntro_BlankOAMBuffer + ld a, $1 + ldh [hAutoBGTransferEnabled], a + call DelayFrame + call DelayFrame + call DelayFrame + xor a + ldh [hAutoBGTransferEnabled], a + ret + +Func_f98a2: + ld a, [wOAMBuffer + 8 * 4 + 3] + or $1 + ld [wOAMBuffer + 8 * 4 + 3], a + ld a, [wOAMBuffer + 14 * 4 + 3] + or $1 + ld [wOAMBuffer + 14 * 4 + 3], a + ld a, [wOAMBuffer + 16 * 4 + 3] + or $1 + ld [wOAMBuffer + 16 * 4 + 3], a + ld a, [wOAMBuffer + 18 * 4 + 3] + or $1 + ld [wOAMBuffer + 18 * 4 + 3], a + ld a, [wOAMBuffer + 19 * 4 + 3] + or $1 + ld [wOAMBuffer + 19 * 4 + 3], a + ret + +Func_f98cb: + ld a, [wOAMBuffer + 18 * 4 + 3] + or $1 + ld [wOAMBuffer + 18 * 4 + 3], a + ld a, [wOAMBuffer + 19 * 4 + 3] + or $1 + ld [wOAMBuffer + 19 * 4 + 3], a + ld a, [wOAMBuffer + 20 * 4 + 3] + or $1 + ld [wOAMBuffer + 20 * 4 + 3], a + ld a, [wOAMBuffer + 25 * 4 + 3] + or $1 + ld [wOAMBuffer + 25 * 4 + 3], a + ld a, [wOAMBuffer + 26 * 4 + 3] + or $1 + ld [wOAMBuffer + 26 * 4 + 3], a + ld a, [wOAMBuffer + 28 * 4 + 3] + or $1 + ld [wOAMBuffer + 28 * 4 + 3], a + ret + +Func_f98fc: + ld a, [wYellowIntroCurrentScene] + ld hl, Jumptable_f9906 + call Func_fa06e + jp hl + +Jumptable_f9906: + dw YellowIntroScene0 ; running pika 1 + dw YellowIntroScene1 ; wait last + dw YellowIntroScene2 ; pikachu kick + dw YellowIntroScene3 ; wait last + dw YellowIntroScene4 ; running pika 2 + dw YellowIntroScene5 ; wait last + dw YellowIntroScene6 ; surfing pika + dw YellowIntroScene7 ; wait last + dw YellowIntroScene8 ; running pika 3 + dw YellowIntroScene9 ; wait last + dw YellowIntroScene10 ; flying pika + dw YellowIntroScene11 ; wait last + dw YellowIntroScene12 ; pika close up + dw YellowIntroScene13 ; wait last + dw YellowIntroScene14 ; pika thunderbolt + dw YellowIntroScene15 ; wait last + dw YellowIntroScene16 ; fade to white + dw YellowIntroScene17 ; wait and quit + +YellowIntro_NextScene: + ld hl, wYellowIntroCurrentScene + inc [hl] + ret + +YellowIntroScene0: + xor a + ldh [hLCDCPointer], a + lb de, $58, $58 + ld a, $1 + call YellowIntro_SpawnAnimatedObjectAndSavePointer + xor a + ldh [hSCX], a + ldh [hSCY], a + ld a, $90 + ldh [hWY], a + ld a, $e4 + ldh [rBGP], a + ldh [rOBP0], a + ld a, $c4 + ldh [rOBP1], a + call UpdateGBCPal_BGP + call UpdateGBCPal_OBP0 + call UpdateGBCPal_OBP1 + ld a, 130 + ld [wYellowIntroSceneTimer], a + call YellowIntro_NextScene + ret + +YellowIntroScene1: + call YellowIntro_CheckFrameTimerDecrement + ret nc + call YellowIntro_MaskCurrentAnimatedObjectStruct + call YellowIntro_NextScene + ret + +YellowIntroScene2: + call YellowIntro_BlankPalsDelay2AndDisableLCD + ld c, $8 + call UpdateMusicCTimes + xor a + ldh [hLCDCPointer], a + ld hl, vBGMap0 + ld bc, $400 + xor a + call Bank3E_FillMemory + call YellowIntroScene2_PlaceGraphic + lb de, $58, $b8 ; overloaded + ld a, $4 ; overloaded + call LoadYellowIntroFlyingSpeedBars + ld a, $1 + call Func_f9e9a + call YellowIntro_SetTimerFor128Frames + call YellowIntro_NextScene + ret + +YellowIntroScene2_PlaceGraphic: + ld hl, $98d4 ; (20, 6) + ld de, $20 + ld b, $6 + ld a, $90 +.row + ld c, $6 + push af + push hl +.col + ld [hli], a + inc a + dec c + jr nz, .col + pop hl + add hl, de + pop af + add $10 + dec b + jr nz, .row + ldh a, [hGBC] + and a + jr z, .dmg_sgb + ; We can actually set palettes! + ld hl, $98d4 ; (20, 6) + ld de, $20 + ld b, $6 + ld a, $1 + ldh [rVBK], a +.attr_row + ld c, $6 + push hl +.attr_col + ld [hli], a + dec c + jr nz, .attr_col + pop hl + add hl, de + dec b + jr nz, .attr_row + xor a + ldh [rVBK], a +.dmg_sgb + ret + +LoadYellowIntroFlyingSpeedBars: + ld hl, YellowIntroFlyingSpeedBarData + ld a, $8 +.loop +; Spawn object $8 at indicated coordinates with indicated speeds + push af + ld e, [hl] + inc hl + ld d, [hl] + inc hl + ld a, [hli] + push hl + push af + ld a, $8 + call SpawnAnimatedObject + pop af + ld hl, $b + add hl, bc + ld [hl], a + pop hl + pop af + dec a + jr nz, .loop + ret + +YellowIntroFlyingSpeedBarData: + ; y, x, speed + db $d0, $20, $02 + db $f0, $30, $04 + db $d0, $40, $06 + db $c0, $50, $08 + db $e0, $60, $08 + db $c0, $70, $06 + db $e0, $80, $04 + db $f0, $90, $02 + +YellowIntroScene3: + call YellowIntro_CheckFrameTimerDecrement + jr c, .expired + ldh a, [hSCX] + cp $68 + ret z + add $4 + ldh [hSCX], a + ret + +.expired + call MaskAllAnimatedObjectStructs + call YellowIntro_NextScene + ret + +YellowIntroScene4: + call YellowIntro_BlankPalsDelay2AndDisableLCD + ld c, $5 + call UpdateMusicCTimes + ldh a, [hGBC] + and a + jr z, .dmg_sgb + ; We can actually set palettes! + ld hl, $98d4 + ld de, $20 + ld b, $6 + ld a, $1 + ldh [rVBK], a + xor a +.attr_row + ld c, $6 + push hl +.attr_col + ld [hli], a + dec c + jr nz, .attr_col + pop hl + add hl, de + dec b + jr nz, .attr_row + xor a + ldh [rVBK], a +.dmg_sgb + xor a + ldh [hLCDCPointer], a + call Func_f9e5f + lb de, $58, $58 + ld a, $2 + call YellowIntro_SpawnAnimatedObjectAndSavePointer + xor a + call Func_f9e9a + call YellowIntro_SetTimerFor128Frames + call YellowIntro_NextScene + ret + +YellowIntroScene5: + call YellowIntro_CheckFrameTimerDecrement + ret nc + call YellowIntro_MaskCurrentAnimatedObjectStruct + call YellowIntro_NextScene + ret + +YellowIntroScene6: + call YellowIntro_BlankPalsDelay2AndDisableLCD + ld c, $5 + call UpdateMusicCTimes + ld a, LOW(rSCY) + ldh [hLCDCPointer], a + call YellowIntro_Copy8BitSineWave + ld hl, vBGMap0 + ld bc, $60 + xor a + call Bank3E_FillMemory + ld hl, $9860 + ld c, $10 + ld a, $20 +.asm_f9a8b + ld [hli], a + inc a + ld [hli], a + dec a + dec c + jr nz, .asm_f9a8b + ld hl, $9880 + ld bc, $300 + ld a, $10 + call Bank3E_FillMemory + lb de, $40, $f8 + ld a, $5 + call YellowIntro_SpawnAnimatedObjectAndSavePointer + ld a, $1 + call Func_f9e9a + call YellowIntro_SetTimerFor88Frames + call YellowIntro_NextScene + ret + +YellowIntroScene7: + call YellowIntro_CheckFrameTimerDecrement + jr c, .expired + ld hl, hSCX + inc [hl] + inc [hl] + ld hl, wLYOverridesBuffer + ld de, wLYOverridesBuffer + 1 + ld a, [hl] + push af + ld c, $ff +.shift_loop + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .shift_loop + pop af + ld [hl], a + call Request7TileTransferFromC810ToC710 + ret + +.expired + call YellowIntro_MaskCurrentAnimatedObjectStruct + call YellowIntro_NextScene + ret + +YellowIntroScene8: + call YellowIntro_BlankPalsDelay2AndDisableLCD + ld c, $5 + call UpdateMusicCTimes + xor a + ldh [hLCDCPointer], a + call Func_f9e5f + lb de, $58, $58 + ld a, $3 + call YellowIntro_SpawnAnimatedObjectAndSavePointer + xor a + call Func_f9e9a + call YellowIntro_SetTimerFor128Frames + call YellowIntro_NextScene + ret + +YellowIntroScene9: + call YellowIntro_CheckFrameTimerDecrement + ret nc + call YellowIntro_MaskCurrentAnimatedObjectStruct + call YellowIntro_NextScene + ret + +YellowIntroScene10: + call YellowIntro_BlankPalsDelay2AndDisableLCD + ld c, $5 + call UpdateMusicCTimes + xor a + ldh [hLCDCPointer], a + ld hl, vBGMap0 + ld bc, $400 + xor a + call Bank3E_FillMemory + ld hl, vBGMap0 + ld bc, $100 + ld a, $2 + call Bank3E_FillMemory + ld hl, $9900 + ld de, Unkn_f9b6e + lb bc, 6, 20 + call .FillBGMapBox + ld hl, $988c + ld de, Unkn_f9be6 + lb bc, 3, 4 + call .FillBGMapBox + ld hl, $98e3 + ld de, Unkn_f9bf2 + lb bc, 2, 2 + call .FillBGMapBox + lb de, $98, $58 + ld a, $6 + call YellowIntro_SpawnAnimatedObjectAndSavePointer + ld a, $1 + call Func_f9e9a + call YellowIntro_SetTimerFor128Frames + call YellowIntro_NextScene + ret + +.FillBGMapBox: +.fill_row + push bc + push hl +.fill_col + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .fill_col + pop hl + ld bc, $20 + add hl, bc + pop bc + dec b + jr nz, .fill_row + ret + +Unkn_f9b6e: INCBIN "gfx/intro/unknown_f9b6e.map" +Unkn_f9be6: INCBIN "gfx/intro/unknown_f9be6.map" +Unkn_f9bf2: INCBIN "gfx/intro/unknown_f9bf2.map" + +YellowIntroScene11: + call YellowIntro_CheckFrameTimerDecrement + jr c, .expired + ld a, [wYellowIntroSceneTimer] + and $7 + ret nz + ld a, [wYellowIntroSceneTimer] + and $8 + sla a + sla a + sla a + ld e, a + ld d, $0 + ld hl, YellowIntroCloudGFX + add hl, de + ld a, l + ldh [hVBlankCopySource], a + ld a, h + ldh [hVBlankCopySource + 1], a + xor a + ldh [hVBlankCopyDest], a + ld a, $96 + ldh [hVBlankCopyDest + 1], a + ld a, $4 + ldh [hVBlankCopySize], a + ret + +.expired + call YellowIntro_MaskCurrentAnimatedObjectStruct + call YellowIntro_NextScene + ret + +YellowIntroCloudGFX: INCBIN "gfx/intro/clouds.2bpp" + +YellowIntroScene12: + call YellowIntro_BlankPalsDelay2AndDisableLCD + ld c, $5 + call UpdateMusicCTimes + xor a + ldh [hLCDCPointer], a + ld hl, vBGMap0 + ld bc, $80 + ld a, $1 + call Bank3E_FillMemory + ld hl, $9880 + ld bc, $140 + xor a + call Bank3E_FillMemory + ld hl, $99c0 + ld bc, $80 + ld a, $1 + call Bank3E_FillMemory + + ; paste 8x12 graphic into vBGMap0 at (5, 6) starting at tile 4, skipping 4 vtiles at the end of each row + ld hl, $98c5 + ld de, $20 + ld a, $4 + ld b, 8 +.row + ld c, 12 + push hl +.col + ld [hli], a + inc a + dec c + jr nz, .col + pop hl + add hl, de + add $4 + dec b + jr nz, .row + + ld hl, $98c4 ; (4, 6) + ld [hl], $3 + ld hl, $98e4 ; (4, 7) + ld [hl], $74 + ld hl, $99a5 ; (5, 5) + ld [hl], $0 + lb de, $60, $58 + ld a, $9 + call YellowIntro_SpawnAnimatedObjectAndSavePointer + xor a + call Func_f9e9a + call YellowIntro_SetTimerFor128Frames + call YellowIntro_NextScene + ret + +YellowIntroScene13: + call YellowIntro_CheckFrameTimerDecrement + ret nc + lb de, $68, $58 + ld a, $a + call SpawnAnimatedObject + call YellowIntro_NextScene + ret + +YellowIntroScene14: + ld de, YellowIntroPalSequence_f9dd6 + call YellowIntro_LoadDMGPalAndIncrementCounter + jr c, .expired + ldh [rBGP], a + ldh [rOBP0], a + and $f0 + ldh [rOBP1], a + call UpdateGBCPal_BGP + call UpdateGBCPal_OBP0 + call UpdateGBCPal_OBP1 + ret + +.expired + call MaskAllAnimatedObjectStructs + call YellowIntro_BlankOAMBuffer + ld hl, wTileMap + ld bc, $50 + ld a, $1 + call Bank3E_FillMemory + hlcoord 0, 4 + ld bc, CopyVideoDataAlternate + xor a + call Bank3E_FillMemory + hlcoord 0, 14 + ld bc, $50 + ld a, $1 + call Bank3E_FillMemory + ld a, $1 + ldh [hAutoBGTransferEnabled], a + call DelayFrame + call DelayFrame + call DelayFrame + xor a + ldh [hAutoBGTransferEnabled], a + ld a, $e4 + ldh [rOBP0], a + ldh [rBGP], a + call UpdateGBCPal_BGP + call UpdateGBCPal_OBP0 + lb de, $58, $58 + ld a, $7 + call YellowIntro_SpawnAnimatedObjectAndSavePointer + call YellowIntro_NextScene + ld a, $28 + ld [wYellowIntroSceneTimer], a + ret + +YellowIntroScene15: + call YellowIntro_CheckFrameTimerDecrement + jr c, .expired + ld a, [wYellowIntroSceneTimer] + and $3 + ret nz + ldh a, [rOBP0] + xor $ff + ldh [rOBP0], a + ldh a, [rBGP] + xor $3 + ldh [rBGP], a + call UpdateGBCPal_BGP + call UpdateGBCPal_OBP0 + ret + +.expired + xor a + ldh [hLCDCPointer], a + ld a, $e4 + ldh [rBGP], a + ldh [rOBP0], a + call UpdateGBCPal_BGP + call UpdateGBCPal_OBP0 + call YellowIntro_NextScene +YellowIntroScene16: + ld de, YellowIntroPalSequence_f9e0a + call YellowIntro_LoadDMGPalAndIncrementCounter + jr c, .expired + ldh [rOBP0], a + ldh [rBGP], a + call UpdateGBCPal_BGP + call UpdateGBCPal_OBP0 + ret + +.expired + call YellowIntro_NextScene + ret + +YellowIntroPalSequence_f9dd6: + db $e4, $c0, $c0, $e4 + db $e4, $c0, $c0, $e4 + db $e4, $c0, $c0, $e4 + db $e4, $c0, $c0, $e4 + db $e4, $c0, $c0, $e4 + db $e4, $c0, $c0, $e4 + db $e4, $c0, $c0, $e4 + db $e4, $c0, $c0, $e4 + db $e4, $c0, $c0, $e4 + db $e4, $c0, $c0, $e4 + db $e4, $c0, $c0, $e4 + db $e4, $c0, $c0, $e4 + db $e4, $c0, $c0, $ff + +YellowIntroPalSequence_f9e0a: + db $e4, $90, $90, $40 + db $40, $00, $00, $ff + +YellowIntroScene17: + ld c, 64 + call DelayFrames + ld hl, wYellowIntroCurrentScene + set 7, [hl] + ret + +YellowIntro_SpawnAnimatedObjectAndSavePointer: + call SpawnAnimatedObject + ld a, c + ld [wYellowIntroAnimatedObjectStructPointer], a + ld a, b + ld [wYellowIntroAnimatedObjectStructPointer + 1], a + ret + +YellowIntro_MaskCurrentAnimatedObjectStruct: + ld a, [wYellowIntroAnimatedObjectStructPointer] + ld c, a + ld a, [wYellowIntroAnimatedObjectStructPointer + 1] + ld b, a + call MaskCurrentAnimatedObjectStruct + ret + +YellowIntro_SetTimerFor128Frames: + ld a, 128 + ld [wYellowIntroSceneTimer], a + ret + +YellowIntro_SetTimerFor88Frames: + ld a, 88 + ld [wYellowIntroSceneTimer], a + ret + +YellowIntro_CheckFrameTimerDecrement: + ld hl, wYellowIntroSceneTimer + ld a, [hl] + and a + jr z, .asm_f9e4b + dec [hl] + and a + ret + +.asm_f9e4b + scf + ret + +YellowIntro_LoadDMGPalAndIncrementCounter: + ld hl, wYellowIntroSceneTimer + ld a, [hl] + inc [hl] + ld l, a + ld h, $0 + add hl, de + ld a, [hl] + cp $ff + jr z, .asm_f9e5d + and a + ret + +.asm_f9e5d + scf + ret + +Func_f9e5f: + ld hl, vBGMap0 + ld bc, $80 + ld a, $1 + call Bank3E_FillMemory + ld hl, $9880 + ld bc, $140 + xor a + call Bank3E_FillMemory + ld hl, $99c0 + ld bc, $80 + ld a, $1 + call Bank3E_FillMemory + ret + +YellowIntro_BlankPalsDelay2AndDisableLCD: + xor a + ldh [rBGP], a + ldh [rOBP0], a + ldh [rOBP1], a + call UpdateGBCPal_BGP + call UpdateGBCPal_OBP0 + call UpdateGBCPal_OBP1 + call DelayFrame + call DelayFrame + call DisableLCD + ret + +Func_f9e9a: + ld e, a + callfar YellowIntroPaletteAction + xor a + ldh [hSCX], a + ldh [hSCY], a + ld a, $90 + ldh [hWY], a + ld a, $e3 + ldh [rLCDC], a + ld a, $e4 + ldh [rBGP], a + ldh [rOBP0], a + ld a, $e0 + ldh [rOBP1], a + call UpdateGBCPal_BGP + call UpdateGBCPal_OBP0 + call UpdateGBCPal_OBP1 + ret + +YellowIntro_Copy8BitSineWave: + ; Copy this sine wave into wLYOverridesBuffer 8 times (end just before wc900) + ld de, wLYOverridesBuffer + ld a, $8 +.loop + push af + ld hl, .SineWave + ld bc, .SineWaveEnd - .SineWave + call Bank3E_CopyData + pop af + dec a + jr nz, .loop + ret + +.SineWave: +; a sine wave with amplitude 4 + db 0, 0, 1, 2, 2, 3, 3, 3 + db 4, 3, 3, 3, 2, 2, 1, 0 + db 0, 0, -1, -2, -2, -3, -3, -3 + db -4, -3, -3, -3, -2, -2, -1, 0 +.SineWaveEnd: + +Request7TileTransferFromC810ToC710: + ld a, $10 + ldh [hVBlankCopySource], a + ld a, HIGH(wLYOverridesBuffer) + ldh [hVBlankCopySource + 1], a + ld a, $10 + ldh [hVBlankCopyDest], a + ld a, HIGH(wLYOverrides) + ldh [hVBlankCopyDest + 1], a + ld a, $7 + ldh [hVBlankCopySize], a + ret + +InitYellowIntroGFXAndMusic: + xor a + ldh [hAutoBGTransferEnabled], a + ldh [hSCX], a + ldh [hSCY], a + ldh [hAutoBGTransferDest], a + ld a, $98 + ldh [hAutoBGTransferDest + 1], a + call YellowIntro_BlankTileMap + ld hl, wTileMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, $1 + call Bank3E_FillMemory + hlcoord 0, 4 + ld bc, CopyVideoDataAlternate + xor a + call Bank3E_FillMemory + ld a, $1 + ldh [hAutoBGTransferEnabled], a + call DelayFrame + call DelayFrame + call DelayFrame + xor a + ldh [hAutoBGTransferEnabled], a + ld de, YellowIntroGraphics2 + ld hl, vChars0 + lb bc, BANK(YellowIntroGraphics2), (YellowIntroGraphics2End - YellowIntroGraphics2 - $10) / $10 + call CopyVideoData + ld de, YellowIntroGraphics1 + ld hl, vChars2 + lb bc, BANK(YellowIntroGraphics1), (YellowIntroGraphics1End - YellowIntroGraphics1) / $10 + call CopyVideoData + call ClearObjectAnimationBuffers + call LoadYellowIntroObjectAnimationDataPointers + ld b, $8 + call RunPaletteCommand + xor a + ld hl, wYellowIntroCurrentScene + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ld a, MUSIC_YELLOW_INTRO + ld c, BANK(Music_YellowIntro) + call PlayMusic + ret + +LoadYellowIntroObjectAnimationDataPointers: + ld a, LOW(YellowIntro_AnimatedObjectSpawnStateData) + ld [wAnimatedObjectSpawnStateDataPointer], a + ld a, HIGH(YellowIntro_AnimatedObjectSpawnStateData) + ld [wAnimatedObjectSpawnStateDataPointer + 1], a + ld a, LOW(YellowIntro_AnimatedObjectJumptable) + ld [wAnimatedObjectJumptablePointer], a + ld a, HIGH(YellowIntro_AnimatedObjectJumptable) + ld [wAnimatedObjectJumptablePointer + 1], a + ld a, LOW(YellowIntro_AnimatedObjectOAMData) + ld [wAnimatedObjectOAMDataPointer], a + ld a, HIGH(YellowIntro_AnimatedObjectOAMData) + ld [wAnimatedObjectOAMDataPointer + 1], a + ld a, LOW(YellowIntro_AnimatedObjectFramesData) + ld [wAnimatedObjectFramesDataPointer], a + ld a, HIGH(YellowIntro_AnimatedObjectFramesData) + ld [wAnimatedObjectFramesDataPointer + 1], a + ret + +YellowIntro_BlankTileMap: + ld hl, wTileMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, $7f + call Bank3E_FillMemory + ret + +Bank3E_CopyData: +.loop + ld a, [hli] + ld [de], a + inc de + dec bc + ld a, c + or b + jr nz, .loop + ret + +Bank3E_FillMemory: + push de + ld e, a +.loop + ld a, e + ld [hli], a + dec bc + ld a, c + or b + jr nz, .loop + pop de + ret + +YellowIntro_BlankOAMBuffer: + ld hl, wOAMBuffer + ld bc, wOAMBufferEnd - wOAMBuffer + xor a + call Bank3E_FillMemory + ret + +YellowIntro_BlankPalettes: + xor a + ldh [rBGP], a + ldh [rOBP0], a + ldh [rOBP1], a + call UpdateGBCPal_BGP + call UpdateGBCPal_OBP0 + call UpdateGBCPal_OBP1 + ret + +YellowIntro_AnimatedObjectSpawnStateData: + db $00, $00, $00 + db $01, $01, $00 + db $02, $01, $00 + db $03, $01, $00 + db $04, $02, $00 + db $05, $03, $00 + db $06, $04, $00 + db $07, $01, $00 + db $08, $05, $00 + db $09, $01, $00 + db $0a, $01, $00 + +YellowIntro_AnimatedObjectJumptable: + dw Func_fa007 + dw Func_fa007 + dw Func_fa008 + dw Func_fa014 + dw Func_fa02b + dw Func_fa062 + +Func_fa007: + ret + +Func_fa008: + ld hl, $4 + add hl, bc + ld a, [hl] + cp $58 + ret z + sub $4 + ld [hl], a + ret + +Func_fa014: + ld hl, $4 + add hl, bc + ld a, [hl] + cp $58 + jr z, .asm_fa020 + add $4 + ld [hl], a +.asm_fa020 + ld hl, $5 + add hl, bc + cp $58 + ret z + add $1 + ld [hl], a + ret + +Func_fa02b: + ld hl, $b + add hl, bc + ld e, [hl] + ld d, $0 + ld hl, Jumptable_fa03b + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +Jumptable_fa03b: + dw Func_fa03f + dw Func_fa051 + +Func_fa03f: + ld hl, $5 + add hl, bc + ld a, [hl] + cp $58 + jr z, .asm_fa04c + sub $2 + ld [hl], a + ret + +.asm_fa04c + ld hl, $b + add hl, bc + inc [hl] +Func_fa051: + ld hl, $c + add hl, bc + ld a, [hl] + inc [hl] + ld d, $8 + call Func_fa079 + ld hl, $7 + add hl, bc + ld [hl], a + ret + +Func_fa062: + ld hl, $b + add hl, bc + ld a, [hl] + ld hl, $4 + add hl, bc + add [hl] + ld [hl], a + ret + +Func_fa06e: + ld e, a + ld d, $0 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ret + +Func_fa077: ; cosine + add $10 +Func_fa079: + and $3f + cp $20 + jr nc, .asm_fa084 + call Func_fa08e + ld a, h + ret + +.asm_fa084 + and $1f + call Func_fa08e + ld a, h + xor $ff + inc a + ret + +Func_fa08e: + ld e, a + ld a, d + ld d, $0 + ld hl, Unkn_fa0aa + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $0 +.asm_fa09d + srl a + jr nc, .asm_fa0a2 + add hl, de +.asm_fa0a2 + sla e + rl d + and a + jr nz, .asm_fa09d + ret + +Unkn_fa0aa: + sine_wave $100 + +INCLUDE "data/sprite_anims/intro_frames.asm" +INCLUDE "data/sprite_anims/intro_oam.asm" + +INCLUDE "gfx/yellow_intro.asm" diff --git a/engine/movie/title.asm b/engine/movie/title.asm index 1f2723a3..0b421d89 100755 --- a/engine/movie/title.asm +++ b/engine/movie/title.asm @@ -38,7 +38,7 @@ DisplayTitleScreen: call FarCopyData ld hl, NineTile ld de, vTitleLogo tile $6e - ld bc, $10 + ld bc, 1 tiles ld a, BANK(NineTile) call FarCopyData ld hl, GamefreakLogoGraphics diff --git a/engine/movie/title2.asm b/engine/movie/title2.asm deleted file mode 100755 index df630b53..00000000 --- a/engine/movie/title2.asm +++ /dev/null @@ -1,122 +0,0 @@ -; Leftover of Red/Blue. Seemingly unused - -TitleScroll_WaitBall: -; Wait around for the TitleBall animation to play out. -; hi: speed -; lo: duration - db $05, $05, 0 - -TitleScroll_In: -; Scroll a TitleMon in from the right. -; hi: speed -; lo: duration - db $a2, $94, $84, $63, $52, $31, $11, 0 - -TitleScroll_Out: -; Scroll a TitleMon out to the left. -; hi: speed -; lo: duration - db $12, $22, $32, $42, $52, $62, $83, $93, 0 - -TitleScroll: - ld a, d - - ld bc, TitleScroll_In - ld d, $88 - ld e, 0 ; don't animate titleball - - and a - jr nz, .ok - - ld bc, TitleScroll_Out - ld d, $00 - ld e, 0 ; don't animate titleball -.ok - -_TitleScroll: - ld a, [bc] - and a - ret z - - inc bc - push bc - - ld b, a - and $f - ld c, a - ld a, b - and $f0 - swap a - ld b, a - -.loop - ld h, d - ld l, $48 - call .ScrollBetween - - ld h, $00 - ld l, $88 - call .ScrollBetween - - ld a, d - add b - ld d, a - - call GetTitleBallY - dec c - jr nz, .loop - - pop bc - jr _TitleScroll - -.ScrollBetween: -.wait - ldh a, [rLY] ; rLY - cp l - jr nz, .wait - - ld a, h - ldh [rSCX], a - -.wait2 - ldh a, [rLY] ; rLY - cp h - jr z, .wait2 - ret - -TitleBallYTable: -; OBJ y-positions for the Poke Ball held by Red in the title screen. -; This is really two 0-terminated lists. Initiated with an index of 1. - db 0, $71, $6f, $6e, $6d, $6c, $6d, $6e, $6f, $71, $74, 0 - -TitleScreenAnimateBallIfStarterOut: -; Animate the TitleBall if a starter just got scrolled out. - ld a, [wTitleScreenScene] - cp STARTER1 - jr z, .ok - cp STARTER2 - jr z, .ok - cp STARTER3 - ret nz -.ok - ld e, 1 ; animate titleball - ld bc, TitleScroll_WaitBall - ld d, 0 - jp _TitleScroll - -GetTitleBallY: -; Get position e from TitleBallYTable - push de - push hl - xor a - ld d, a - ld hl, TitleBallYTable - add hl, de - ld a, [hl] - pop hl - pop de - and a - ret z - ld [wOAMBuffer + $28], a - inc e - ret diff --git a/engine/movie/title_rb.asm b/engine/movie/title_rb.asm new file mode 100755 index 00000000..df630b53 --- /dev/null +++ b/engine/movie/title_rb.asm @@ -0,0 +1,122 @@ +; Leftover of Red/Blue. Seemingly unused + +TitleScroll_WaitBall: +; Wait around for the TitleBall animation to play out. +; hi: speed +; lo: duration + db $05, $05, 0 + +TitleScroll_In: +; Scroll a TitleMon in from the right. +; hi: speed +; lo: duration + db $a2, $94, $84, $63, $52, $31, $11, 0 + +TitleScroll_Out: +; Scroll a TitleMon out to the left. +; hi: speed +; lo: duration + db $12, $22, $32, $42, $52, $62, $83, $93, 0 + +TitleScroll: + ld a, d + + ld bc, TitleScroll_In + ld d, $88 + ld e, 0 ; don't animate titleball + + and a + jr nz, .ok + + ld bc, TitleScroll_Out + ld d, $00 + ld e, 0 ; don't animate titleball +.ok + +_TitleScroll: + ld a, [bc] + and a + ret z + + inc bc + push bc + + ld b, a + and $f + ld c, a + ld a, b + and $f0 + swap a + ld b, a + +.loop + ld h, d + ld l, $48 + call .ScrollBetween + + ld h, $00 + ld l, $88 + call .ScrollBetween + + ld a, d + add b + ld d, a + + call GetTitleBallY + dec c + jr nz, .loop + + pop bc + jr _TitleScroll + +.ScrollBetween: +.wait + ldh a, [rLY] ; rLY + cp l + jr nz, .wait + + ld a, h + ldh [rSCX], a + +.wait2 + ldh a, [rLY] ; rLY + cp h + jr z, .wait2 + ret + +TitleBallYTable: +; OBJ y-positions for the Poke Ball held by Red in the title screen. +; This is really two 0-terminated lists. Initiated with an index of 1. + db 0, $71, $6f, $6e, $6d, $6c, $6d, $6e, $6f, $71, $74, 0 + +TitleScreenAnimateBallIfStarterOut: +; Animate the TitleBall if a starter just got scrolled out. + ld a, [wTitleScreenScene] + cp STARTER1 + jr z, .ok + cp STARTER2 + jr z, .ok + cp STARTER3 + ret nz +.ok + ld e, 1 ; animate titleball + ld bc, TitleScroll_WaitBall + ld d, 0 + jp _TitleScroll + +GetTitleBallY: +; Get position e from TitleBallYTable + push de + push hl + xor a + ld d, a + ld hl, TitleBallYTable + add hl, de + ld a, [hl] + pop hl + pop de + and a + ret z + ld [wOAMBuffer + $28], a + inc e + ret diff --git a/engine/movie/title_yellow.asm b/engine/movie/title_yellow.asm new file mode 100644 index 00000000..c70b87f9 --- /dev/null +++ b/engine/movie/title_yellow.asm @@ -0,0 +1,109 @@ +LoadYellowTitleScreenGFX: + ld hl, PokemonLogoGraphics + ld de, vChars2 + ld bc, PokemonLogoGraphicsEnd - PokemonLogoGraphics + ld a, BANK(PokemonLogoGraphics) + call FarCopyData + ld hl, PokemonLogoCornerGraphics + ld de, vChars1 tile $7d + ld bc, PokemonLogoCornerGraphicsEnd - PokemonLogoCornerGraphics + ld a, BANK(PokemonLogoCornerGraphics) + call FarCopyData + ld hl, TitlePikachuBGGraphics + ld de, vChars1 + ld bc, TitlePikachuBGGraphicsEnd - TitlePikachuBGGraphics + ld a, BANK(TitlePikachuBGGraphics) + call FarCopyData + ld hl, TitlePikachuOBGraphics + ld de, vChars1 tile $70 + ld bc, TitlePikachuOBGraphicsEnd - TitlePikachuOBGraphics + ld a, BANK(TitlePikachuOBGraphics) + call FarCopyData + ret + +TitleScreen_PlacePokemonLogo: + hlcoord 2, 1 + ld de, TitleScreenPokemonLogoTilemap + lb bc, 7, 16 + call Bank3D_CopyBox + ret + +TitleScreen_PlacePikaSpeechBubble: + hlcoord 6, 4 + ld de, TitleScreenPikaBubbleTilemap + lb bc, 4, 7 + call Bank3D_CopyBox + hlcoord 9, 8 + ld [hl], $64 + inc hl + ld [hl], $65 + ret + +TitleScreen_PlacePikachu: + hlcoord 4, 8 + ld de, TitleScreenPikachuTilemap + lb bc, 9, 12 + call Bank3D_CopyBox + hlcoord 16, 10 + ld [hl], $96 + hlcoord 16, 11 + ld [hl], $9d + hlcoord 16, 12 + ld [hl], $a7 + hlcoord 16, 13 + ld [hl], $b1 + ld hl, TitleScreenPikachuEyesOAMData + ld de, wOAMBuffer + ld bc, $20 + call CopyData + ret + +TitleScreenPikachuEyesOAMData: + db $60, $40, $f1, $22 + db $60, $48, $f0, $22 + db $68, $40, $f3, $22 + db $68, $48, $f2, $22 + db $60, $60, $f0, $02 + db $60, $68, $f1, $02 + db $68, $60, $f2, $02 + db $68, $68, $f3, $02 + +Bank3D_CopyBox: +; copy cxb (xy) screen area from de to hl +.row + push bc + push hl +.col + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .col + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .row + ret + +TitleScreenPokemonLogoTilemap: ; 16x7 + INCBIN "gfx/title/pokemon_logo.tilemap" + +Pointer_f4669: ; unreferenced + db $47, $48, $49, $4a, $4b, $4c, $4d, $4e, $4f, $5f + +TitleScreenPikaBubbleTilemap: ; 7x4 + INCBIN "gfx/title/pika_bubble.tilemap" + +TitleScreenPikachuTilemap: ; 12x9 + INCBIN "gfx/title/pikachu.tilemap" + +PokemonLogoGraphics: INCBIN "gfx/title/pokemon_logo.2bpp" +PokemonLogoGraphicsEnd: +PokemonLogoCornerGraphics: INCBIN "gfx/title/pokemon_logo_corner.2bpp" +PokemonLogoCornerGraphicsEnd: +TitlePikachuBGGraphics: INCBIN "gfx/title/pikachu_bg.2bpp" +TitlePikachuBGGraphicsEnd: +TitlePikachuOBGraphics: INCBIN "gfx/title/pikachu_ob.2bpp" +TitlePikachuOBGraphicsEnd: diff --git a/engine/overworld/healing_machine.asm b/engine/overworld/healing_machine.asm index e5fba7e1..84891353 100755 --- a/engine/overworld/healing_machine.asm +++ b/engine/overworld/healing_machine.asm @@ -34,7 +34,7 @@ AnimateHealingMachine: dec b jr nz, .partyLoop ld a, [wAudioROMBank] - cp BANK(AudioEngine3) + cp BANK("Audio Engine 3") ld [wAudioSavedROMBank], a jr nz, .next call StopAllMusic diff --git a/engine/overworld/missable_objects.asm b/engine/overworld/missable_objects.asm index 358a9b9f..bcaa731b 100644 --- a/engine/overworld/missable_objects.asm +++ b/engine/overworld/missable_objects.asm @@ -15,17 +15,13 @@ MarkTownVisitedAndLoadMissableObjects:: add hl, bc ld a, [hli] ; load missable objects pointer in hl ld h, [hl] - ; fall through - -; LoadMissableObjects: -; seems to not exist in yellow (predef replaced with something near TryPushingBoulder) ld l, a push hl ld a, l - sub MissableObjects & $ff ; calculate difference between out pointer and the base pointer + sub LOW(MissableObjects) ; calculate difference between out pointer and the base pointer ld l, a ld a, h - sbc MissableObjects / $100 + sbc HIGH(MissableObjects) ld h, a ld a, h ldh [hDividend], a diff --git a/engine/overworld/specific_script_flags.asm b/engine/overworld/specific_script_flags.asm new file mode 100644 index 00000000..d6f333ac --- /dev/null +++ b/engine/overworld/specific_script_flags.asm @@ -0,0 +1,25 @@ +SetMapSpecificScriptFlagsOnMapReload:: + ld a, [wCurMap] + cp VERMILION_GYM + jr z, .vermilion_gym + ld c, a + ld hl, Bit5Maps +.search_loop + ld a, [hli] + cp c + jr z, .in_list + cp a, $ff + jr nz, .search_loop + ret + +.vermilion_gym + ld hl, wCurrentMapScriptFlags + set 6, [hl] + ret + +.in_list + ld hl, wCurrentMapScriptFlags + set 5, [hl] + ret + +INCLUDE "data/maps/bit_5_maps.asm" diff --git a/engine/overworld/sprite_collisions.asm b/engine/overworld/sprite_collisions.asm index db81977b..b29dc108 100644 --- a/engine/overworld/sprite_collisions.asm +++ b/engine/overworld/sprite_collisions.asm @@ -1,5 +1,5 @@ _UpdateSprites:: - ld h, wSpriteStateData1 / $100 + ld h, HIGH(wSpriteStateData1) inc h ld a, SPRITESTATEDATA2_IMAGEBASEOFFSET .spriteLoop diff --git a/engine/overworld/unused_load_missable_object_data.asm b/engine/overworld/unused_load_missable_object_data.asm new file mode 100644 index 00000000..ce0c00d1 --- /dev/null +++ b/engine/overworld/unused_load_missable_object_data.asm @@ -0,0 +1,40 @@ +Func_f0a54: ; unreferenced + ret + +LoadMissableObjectData:: +; farcalled by an unreferenced function + ld hl, .MissableObjectsMaps +.loop + ld a, [hli] + cp -1 + ret z + ld b, a + ld a, [wCurMap] + cp b + jr z, .found + inc hl + inc hl + inc hl + jr .loop + +.found + ld a, [hli] + ld c, a + ld b, 0 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, wMissableObjectList + call CopyData + ret + +.MissableObjectsMaps: + dbbw BLUES_HOUSE, .BluesHouseEnd - .BluesHouse, .BluesHouse + db -1 ; end + +.BluesHouse: + db 1, HS_DAISY_SITTING_COPY + db 2, HS_DAISY_WALKING_COPY + db 3, HS_TOWN_MAP_COPY + db -1 ; end +.BluesHouseEnd: diff --git a/engine/pikachu/pikachu_emotions.asm b/engine/pikachu/pikachu_emotions.asm new file mode 100755 index 00000000..1378d383 --- /dev/null +++ b/engine/pikachu/pikachu_emotions.asm @@ -0,0 +1,422 @@ +IsPlayerTalkingToPikachu:: + ld a, [wd436] + and a + ret z + ldh a, [hSpriteIndexOrTextID] + cp $f + ret nz + call InitializePikachuTextID + xor a + ldh [hSpriteIndexOrTextID], a + ld [wd436], a + ret + +InitializePikachuTextID:: + ld a, TEXT_PIKACHU_ANIM ; display + ldh [hSpriteIndexOrTextID], a + xor a + ld [wPlayerMovingDirection], a + ld a, $1 + ld [wAutoTextBoxDrawingControl], a + call DisplayTextID + xor a + ld [wAutoTextBoxDrawingControl], a + ret + +DoStarterPikachuEmotions: + ld e, a + ld d, 0 + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] +.loop + ld a, [de] + inc de + cp $ff + jr z, .done + ld c, a + ld b, 0 + ld hl, StarterPikachuEmotionsJumptable + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + call JumpToAddress + jr .loop + +.done + ret + +StarterPikachuEmotionsJumptable: + dw StarterPikachuEmotionCommand_nop ; 0 + dw StarterPikachuEmotionCommand_text ; 1 + dw StarterPikachuEmotionCommand_pcm ; 2 + dw StarterPikachuEmotionCommand_emote ; 3 + dw StarterPikachuEmotionCommand_movement ; 4 + dw StarterPikachuEmotionCommand_pikapic ; 5 + dw StarterPikachuEmotionCommand_subcmd ; 6 + dw StarterPikachuEmotionCommand_delay ; 7 + dw StarterPikachuEmotionCommand_nop2 ; 8 + dw StarterPikachuEmotionCommand_9 ; 9 + dw StarterPikachuEmotionCommand_nop3 ; a + +StarterPikachuEmotionCommand_nop: +StarterPikachuEmotionCommand_nop3: + ret + +StarterPikachuEmotionCommand_text: + ld a, [de] + ld l, a + inc de + ld a, [de] + ld h, a + inc de + push de + call PrintText + pop de + ret + +StarterPikachuEmotionCommand_pcm: + ld a, [de] + inc de + push de + ld e, a + nop + call PlayPikachuSoundClip_ + pop de + ret + +PlayPikachuSoundClip_: + cp $ff + ret z + callfar PlayPikachuSoundClip + ret + +StarterPikachuEmotionCommand_emote: + ld a, [wUpdateSpritesEnabled] + push af + ld a, $ff + ld [wUpdateSpritesEnabled], a + ld a, [de] + inc de + push de + call ShowPikachuEmoteBubble + pop de + pop af + ld [wUpdateSpritesEnabled], a + ret + +ShowPikachuEmoteBubble: + ld [wWhichEmotionBubble], a + ld a, $f ; Pikachu + ld [wEmotionBubbleSpriteIndex], a + predef EmotionBubble + ret + +StarterPikachuEmotionCommand_movement: + ld a, [de] + inc de + ld l, a + ld a, [de] + inc de + ld h, a + push de + ld b, BANK(DoStarterPikachuEmotions) + call ApplyPikachuMovementData_ + pop de + ret + +StarterPikachuEmotionCommand_delay: + ld a, [de] + inc de + push de + ld c, a + call DelayFrames + pop de + ret + +StarterPikachuEmotionCommand_subcmd: + ld a, [de] + inc de + push de + ld e, a + ld d, 0 + ld hl, .Subcommands + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call JumpToAddress + pop de + ret + +.Subcommands: + dw LoadPikachuSpriteIntoVRAM + dw LoadFontTilePatterns + dw Pikachu_LoadCurrentMapViewUpdateSpritesAndDelay3 + dw WaitForTextScrollButtonPress + dw PikachuPewterPokecenterCheck + dw PikachuFanClubCheck + dw PikachuBillsHouseCheck + +StarterPikachuEmotionCommand_nop2: + ret + +StarterPikachuEmotionCommand_9: + push de + call StarterPikachuEmotionCommand_turnawayfromplayer + call UpdateSprites + pop de + ret + +StarterPikachuEmotionCommand_turnawayfromplayer: + ld a, [wSpritePlayerStateData1FacingDirection] + xor $4 + ld [wSpritePikachuStateData1FacingDirection], a + ret + +DeletedFunction_fcffb: +; Inexplicably empty. +REPT 5 + nop +ENDR + ret + +PlaySpecificPikachuEmotion: + ld a, e + jr load_expression + +TalkToPikachu:: + call MapSpecificPikachuExpression + jr c, load_expression + call GetPikaPicAnimationScriptIndex + call DeletedFunction_fcffb +load_expression: + ld [wExpressionNumber], a + ld hl, PikachuEmotionTable + call DoStarterPikachuEmotions + ret + +pikaemotion_def: MACRO +\1_id: + dw \1 +ENDM + +PikachuEmotionTable: + pikaemotion_def PikachuEmotion0 + pikaemotion_def PikachuEmotion1 + pikaemotion_def PikachuEmotion2 + pikaemotion_def PikachuEmotion3 + pikaemotion_def PikachuEmotion4 + pikaemotion_def PikachuEmotion5 + pikaemotion_def PikachuEmotion6 + pikaemotion_def PikachuEmotion7 + pikaemotion_def PikachuEmotion8 + pikaemotion_def PikachuEmotion9 + pikaemotion_def PikachuEmotion10 + pikaemotion_def PikachuEmotion11 + pikaemotion_def PikachuEmotion12 + pikaemotion_def PikachuEmotion13 + pikaemotion_def PikachuEmotion14 + pikaemotion_def PikachuEmotion15 + pikaemotion_def PikachuEmotion16 + pikaemotion_def PikachuEmotion17 + pikaemotion_def PikachuEmotion18 + pikaemotion_def PikachuEmotion19 + pikaemotion_def PikachuEmotion20 + pikaemotion_def PikachuEmotion21 ; used a fishing rod + pikaemotion_def PikachuEmotion22 + pikaemotion_def PikachuEmotion23 + pikaemotion_def PikachuEmotion24 + pikaemotion_def PikachuEmotion25 + pikaemotion_def PikachuEmotion26 ; wake up pikachu in pewter pokemon center + pikaemotion_def PikachuEmotion27 + pikaemotion_def PikachuEmotion28 + pikaemotion_def PikachuEmotion29 + pikaemotion_def PikachuEmotion30 + pikaemotion_def PikachuEmotion31 + pikaemotion_def PikachuEmotion32 + pikaemotion_def PikachuEmotion33 + +PikachuEmotion33: + db $ff + +MapSpecificPikachuExpression: + ld a, [wCurMap] + cp POKEMON_FAN_CLUB + jr nz, .notFanClub + ld hl, wd492 + bit 7, [hl] + ldpikaemotion a, PikachuEmotion29 + jr z, .play_emotion + call CheckPikachuFollowingPlayer + ldpikaemotion a, PikachuEmotion30 + jr nz, .play_emotion + jr .check_pikachu_status + +.notFanClub + ld a, [wCurMap] + cp PEWTER_POKECENTER + jr nz, .notPewterPokecenter + call CheckPikachuFollowingPlayer + ldpikaemotion a, PikachuEmotion26 + jr nz, .play_emotion + jr .check_pikachu_status + +.notPewterPokecenter + callfar Func_f24ae + ld a, e + cp $ff + jr nz, .play_emotion + jr .check_pikachu_status ; useless + +.check_pikachu_status + call IsPlayerPikachuAsleepInParty + ldpikaemotion a, PikachuEmotion11 + jr c, .play_emotion + callfar CheckPikachuFaintedOrStatused ; same bank + ldpikaemotion a, PikachuEmotion28 + jr c, .play_emotion + ld a, [wCurMap] + cp POKEMON_TOWER_1F + jr c, .notInLavenderTower + cp POKEMON_TOWER_7F + 1 + ldpikaemotion a, PikachuEmotion22 + jr c, .play_emotion +.notInLavenderTower + ld a, [wd49c] + and a + jr z, .mood_based_emotion + dec a + ld c, a + ld b, $0 + ld hl, .Emotions + add hl, bc + ld a, [hl] + jr .play_emotion + +.mood_based_emotion + and a + ret + +.play_emotion + scf + ret + +.Emotions: + dpikaemotion PikachuEmotion18 + dpikaemotion PikachuEmotion21 + dpikaemotion PikachuEmotion23 + dpikaemotion PikachuEmotion24 + dpikaemotion PikachuEmotion25 + +IsPlayerPikachuAsleepInParty: + xor a + ld [wWhichPokemon], a +.loop + ld a, [wWhichPokemon] + ld c, a + ld b, 0 + ld hl, wPartySpecies + add hl, bc + ld a, [hl] + cp $ff + jr z, .done + cp PIKACHU + jr nz, .curMonNotStarterPikachu + callfar IsThisPartymonStarterPikachu + jr nc, .curMonNotStarterPikachu + ld a, [wWhichPokemon] + ld hl, wPartyMon1Status + ld bc, wPartyMon2 - wPartyMon1 + call AddNTimes + ld a, [hl] + and SLP + jr z, .done + jr .curMonSleepingPikachu + +.curMonNotStarterPikachu + ld a, [wWhichPokemon] + cp PARTY_LENGTH - 1 + jr z, .done + inc a + ld [wWhichPokemon], a + jr .loop + +.curMonSleepingPikachu + scf + ret + +.done + and a + ret + +INCLUDE "data/pikachu/pikachu_emotions.asm" + +PikachuWalksToNurseJoy: + ld a, $40 + ldh [hFFFC], a + call LoadPikachuSpriteIntoVRAM + call .GetMovementData + and a + jr z, .skip + call ApplyPikachuMovementData +.skip + xor a + ldh [hFFFC], a + ret + +.GetMovementData: + ld a, [wSpritePikachuStateData2MapY] + ld e, a + ld a, [wSpritePikachuStateData2MapX] + ld d, a + ld a, [wYCoord] + add 4 + cp e + jr z, .pikachu_at_same_y_as_player + jr nc, .pikachu_above_player + ld hl, .PikaMovementData1 + ld a, 1 + ret + +.pikachu_above_player + xor a + ret + +.pikachu_at_same_y_as_player + ld a, [wXCoord] + add 4 + cp d + jr c, .pikachu_to_right_of_player + ld hl, .PikaMovementData2 + ld a, 2 + ret + +.pikachu_to_right_of_player + ld hl, .PikaMovementData3 + ld a, 3 + ret + +.PikaMovementData1: + db $00 ; init + db $36 ; look up + db $2b ; walk up left + db $34 ; hop up right + db $3f ; ret + +.PikaMovementData2: + db $00 ; init + db $36 ; look up + db $34 ; hop up right + db $3f ; ret + +.PikaMovementData3: + db $00 ; init + db $36 ; look up + db $33 ; hop up left + db $3f ; ret diff --git a/engine/pikachu/pikachu_follow.asm b/engine/pikachu/pikachu_follow.asm new file mode 100755 index 00000000..9575c341 --- /dev/null +++ b/engine/pikachu/pikachu_follow.asm @@ -0,0 +1,1578 @@ +ShouldPikachuSpawn:: +; possibly to test if pika should be out? + ld a, [wPikachuOverworldStateFlags] + bit 5, a + jr nz, .hide + ld a, [wPikachuOverworldStateFlags] + bit 7, a + jr nz, .hide + call IsStarterPikachuInOurParty + jr nc, .hide + ld a, [wWalkBikeSurfState] + and a + jr nz, .hide + scf + ret + +.hide + and a + ret + +SchedulePikachuSpawnForAfterText:: + ld hl, wPikachuOverworldStateFlags + bit 4, [hl] + res 4, [hl] + jr nz, .normal_spawn_state + call EnablePikachuFollowingPlayer + call ClearPikachuSpriteStateData + ld a, $ff + ld [wSpritePikachuStateData1ImageIndex], a + call ClearPikachuFollowCommandBuffer + call CalculatePikachuFacingDirection + ret + +.normal_spawn_state + call CalculatePikachuPlacementCoords + xor a + ld [wPikachuSpawnState], a + ld a, [wSpritePlayerStateData1FacingDirection] + ld [wSpritePikachuStateData1FacingDirection], a + ret + +ClearPikachuSpriteStateData:: + ld hl, wSpritePikachuStateData1PictureID + call .clear + ld hl, wSpritePikachuStateData2 +.clear + ld bc, $10 + xor a + call FillMemory + ret + +CalculatePikachuSpawnCoordsAndFacing:: + call CalculatePikachuPlacementCoords + call CalculatePikachuFacingDirection + xor a + ld [wPikachuSpawnState], a + ret + +CalculatePikachuPlacementCoords:: + ld bc, wSpritePikachuStateData1PictureID + ld a, [wYCoord] + add $4 + ld e, a + ld a, [wXCoord] + add $4 + ld d, a + ld a, [wPikachuSpawnState] + and a + jr z, .load_coords + cp $1 + jr z, .right_of_player + cp $2 + jr z, .check_player_facing2 + cp $3 + jr z, .load_coords + cp $4 + jr z, .below_player + cp $5 + jr z, .above_player + cp $6 + jr z, .left_of_player + cp $7 + jr z, .check_player_facing + jr .right_of_player + +.check_player_facing + ld a, [wSpritePlayerStateData1FacingDirection] + and a ; SPRITE_FACING_DOWN + jr z, .below_player + cp SPRITE_FACING_UP + jr z, .above_player + cp SPRITE_FACING_LEFT + jr z, .left_of_player + cp SPRITE_FACING_RIGHT + jr z, .right_of_player +.check_player_facing2 + ld a, [wSpritePlayerStateData1FacingDirection] + and a + jr nz, .check_up + dec e + jr .load_coords + +.check_up + cp SPRITE_FACING_UP + jr nz, .check_left + inc e + jr .load_coords + +.check_left + cp SPRITE_FACING_LEFT + jr nz, .left_of_player_2 + inc d + jr .load_coords + +.left_of_player_2 + dec d + jr .load_coords + +.right_of_player + inc d + jr .load_coords + +.left_of_player + dec d + jr .load_coords + +.below_player + inc e + jr .load_coords + +.above_player + dec e + jr .load_coords ; useless jr +.load_coords + ld hl, wSpritePlayerStateData2MapY - wSpritePlayerStateData1 + add hl, bc + ld [hl], e + inc hl + ld [hl], d + inc hl + ld [hl], $fe + push hl + ld hl, wd472 + set 5, [hl] + pop hl + ret + +CalculatePikachuFacingDirection:: + ld a, $49 + ld [wSpritePikachuStateData1PictureID], a + ld a, $ff + ld [wSpritePikachuStateData1ImageIndex], a + ld a, [wPikachuSpawnState] + and a + jr z, .copy_player_facing + cp $1 + jr z, .copy_player_facing + cp $3 + jr z, .force_facing_down + cp $4 + jr z, .copy_player_facing + cp $6 + jr z, .copy_player_facing + cp $7 + jr z, .face_the_other_way + call ComputePikachuFacingDirection + ret + +.copy_player_facing + ld a, [wSpritePlayerStateData1FacingDirection] + ld [wSpritePikachuStateData1FacingDirection], a + ret + +.force_facing_down + ld a, SPRITE_FACING_DOWN + ld [wSpritePikachuStateData1FacingDirection], a + ret + +.face_the_other_way + ld a, [wSpritePlayerStateData1FacingDirection] + xor $4 + ld [wSpritePikachuStateData1FacingDirection], a + ret + +SetPikachuSpawnOutside:: + ld a, [wCurMap] + cp OAKS_LAB + jr z, .oaks_lab + cp ROUTE_22_GATE + jr z, .route_22_gate + cp MT_MOON_B1F + jr z, .mt_moon_2 + cp ROCK_TUNNEL_1F + jr z, .rock_tunnel_1 + ld a, [wCurMap] + ld hl, Pointer_fc64b + call Pikachu_IsInArray ; similar to IsInArray, but not the same + jr c, .map_list_1 + ld a, [wCurMap] + ld hl, Pointer_fc653 + call Pikachu_IsInArray + jr nc, .not_map_list_2 + ld a, [wSpritePlayerStateData1FacingDirection] + and a + jr nz, .not_map_list_2 + ld a, $3 + jr .load + +.route_22_gate + ld a, [wSpritePlayerStateData1FacingDirection] + and a + jr z, .rock_tunnel_1 + jr .not_map_list_2 + +.mt_moon_2 + ld a, $3 + jr .load + +.map_list_1 + ld a, $4 + jr .load + +.oaks_lab + ld a, $6 + jr .load + +.not_map_list_2 + ld a, $1 + jr .load + +.rock_tunnel_1 + ld a, $3 +.load + ld [wPikachuSpawnState], a + ret + +Pointer_fc64b:: + db VICTORY_ROAD_2F + db ROUTE_7_GATE + db ROUTE_8_GATE + db ROUTE_16_GATE_1F + db ROUTE_18_GATE_1F + db ROUTE_15_GATE_1F + db ROUTE_11_GATE_1F + db $ff + +Pointer_fc653:: + db VIRIDIAN_FOREST_NORTH_GATE + db CERULEAN_BADGE_HOUSE + db CERULEAN_TRASHED_HOUSE + db VERMILION_DOCK + db CELADON_MANSION_1F + db ROUTE_2_GATE + db FUCHSIA_GOOD_ROD_HOUSE + db $ff + +SetPikachuSpawnWarpPad:: + ld a, [wCurMap] + cp VIRIDIAN_FOREST_NORTH_GATE + jr z, .viridian_forest_exit + cp VIRIDIAN_FOREST_SOUTH_GATE + jr z, .viridian_forest_entrance + ld a, [wCurMap] + ld hl, Pointer_fc68e + call Pikachu_IsInArray + jr c, .in_array + jr .not_in_array + +.viridian_forest_exit + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + jr z, .in_array + jr .not_in_array + +.viridian_forest_entrance + ld a, [wSpritePlayerStateData1FacingDirection] + and a ; SPRITE_FACING_DOWN + jr z, .not_in_array + jr .in_array + +.not_in_array + ld a, $0 + jr .load_spawn_state + +.in_array + ld a, $1 +.load_spawn_state + ld [wPikachuSpawnState], a + ret + +Pointer_fc68e:: + db VIRIDIAN_FOREST + db SAFARI_ZONE_CENTER_REST_HOUSE + db SAFARI_ZONE_WEST_REST_HOUSE + db SAFARI_ZONE_EAST_REST_HOUSE + db SAFARI_ZONE_NORTH_REST_HOUSE + db SAFARI_ZONE_SECRET_HOUSE + db SILPH_CO_ELEVATOR + db CELADON_MART_ELEVATOR + db CINNABAR_LAB_TRADE_ROOM + db CINNABAR_LAB_METRONOME_ROOM + db CINNABAR_LAB_FOSSIL_ROOM + db $ff + +SetPikachuSpawnBackOutside:: + ld a, [wCurMap] + cp ROUTE_22_GATE + jr z, .asm_fc6a7 + cp ROUTE_2_GATE + jr z, .asm_fc6b0 + jr .asm_fc6bd + +.asm_fc6a7 + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + jr z, .asm_fc6b9 + jr .asm_fc6bd + +.asm_fc6b0 + ld a, [wSpritePlayerStateData1FacingDirection] + cp SPRITE_FACING_UP + jr z, .asm_fc6b9 + jr .asm_fc6bd + +.asm_fc6b9 + ld a, $1 + jr .asm_fc6c1 + +.asm_fc6bd + ld a, $3 + jr .asm_fc6c1 + +.asm_fc6c1 + ld [wPikachuSpawnState], a + ret + +SetPikachuOverworldStateFlag2:: + push hl + ld hl, wPikachuOverworldStateFlags + set 2, [hl] + pop hl + ret + +ResetPikachuOverworldStateFlag2:: + push hl + ld hl, wPikachuOverworldStateFlags + res 2, [hl] + pop hl + ret + +SpawnPikachu_:: + call ResetPikachuOverworldStateFlag2 + call TrySpawnPikachu + ret nc + + push bc + call WillPikachuSpawnOnTheScreen + pop bc + ret c + + ld bc, wSpritePikachuStateData1 + ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 + add hl, bc + bit 7, [hl] + jp nz, Func_fc745 + ld a, [wFontLoaded] + bit 0, a + jp nz, Func_fc76a + call CheckPikachuFollowingPlayer + jp nz, Func_fc76a + ld a, [hl] + and $7f + cp $a + jr c, .valid + xor a +.valid + add a + ld e, a + ld d, 0 + ld hl, PointerTable_fc710 + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +PointerTable_fc710: + dw Func_fc793 + dw Func_fc7aa + dw Func_fc803 + dw asm_fc9c3 + dw asm_fca1c + dw asm_fc9ee + dw asm_fc87f + dw asm_fc904 + dw asm_fc937 + dw asm_fc969 + dw .nop + +.nop: + ret + +TrySpawnPikachu: + call ShouldPikachuSpawn + jr nc, .dont_spawn + ld a, [wSpritePikachuStateData1MovementStatus] + and a + jr nz, .already_spawned + push bc + push hl + call CalculatePikachuSpawnCoordsAndFacing + pop hl + pop bc +.already_spawned + scf + ret + +.dont_spawn + ld hl, wSpritePikachuStateData1ImageIndex + ld [hl], $ff + dec hl + ld [hl], $0 + xor a + ret + +Func_fc745: + ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 + add hl, bc + res 7, [hl] + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + ld [hl], a + call CheckPikachuFollowingPlayer + jr nz, .okay + ; Have Pikachu face in the opposite direction of you + ld a, [wSpritePlayerStateData1FacingDirection] + xor $4 + ld hl, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1 + add hl, bc + ld [hl], a +.okay + xor a + ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1 + add hl, bc + ld [hli], a + ld [hl], a + call UpdatePikachuWalkingSprite + ret + +Func_fc76a: + xor a + ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1 + add hl, bc + ld [hli], a + ld [hl], a + call UpdatePikachuWalkingSprite + call Func_fc82e + jr c, .skip + push bc + callfar InitializeSpriteScreenPosition + pop bc +.skip + ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 + add hl, bc + ld [hl], $1 + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + ld [hl], $0 + call RefreshPikachuFollow + ret + +Func_fc793: + call RefreshPikachuFollow + push bc + callfar InitializeSpriteScreenPosition + pop bc + ld hl, wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1 + add hl, bc + ld [hl], $ff + dec hl + ld [hl], $1 + ret + +Func_fc7aa: + call Func_fcc92 + jp c, Func_fc803 + dec a + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld de, Pointer_fc7e3 + add hl, de + ld d, h + ld e, l + ld a, [de] + inc de + ld hl, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1 + add hl, bc + ld [hl], a + ld a, [de] + inc de + ld hl, wSpritePikachuStateData1XStepVector - wSpritePikachuStateData1 + add hl, bc + ld [hl], a + dec hl + dec hl + ld a, [de] + ld [hl], a + inc de + ld a, [de] + ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 + add hl, bc + ld [hl], a + cp $4 + jp z, Func_fca0a + call AreThereAtLeastTwoStepsInPikachuFollowCommandBuffer + jp c, FastPikachuFollow + jp NormalPikachuFollow + +Pointer_fc7e3: + db 0, 0 + db 1, 3 + db 4, 0 + db -1, 3 + db 8, -1 + db 0, 3 + db 12, 1 + db 0, 3 + db 0, 0 + db 1, 4 + db 4, 0 + db -1, 4 + db 8, -1 + db 0, 4 + db 12, 1 + db 0, 4 + +Func_fc803: + call Func_fcae2 + ret c + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + dec [hl] + jr nz, .asm_fc823 + push hl + call GetPikachuFollowCommand + pop hl + cp $5 + jr nc, Func_fc842 + ld [hl], $20 + call Random + and $c + ld hl, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1 + add hl, bc + ld [hl], a +.asm_fc823 + xor a + ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1 + add hl, bc + ld [hli], a + ld [hl], a + call UpdatePikachuWalkingSprite + ret + +Func_fc82e: + ld a, [wWalkCounter] + and a + ret z + scf + ret + +Func_fc835: + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + ld [hl], $10 + ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 + add hl, bc + ld [hl], $1 + ret + +Func_fc842: + ld hl, $0 + push af + call Random + ldh a, [hRandomAdd] + and %11 + ld e, a + ld d, $0 + ld hl, PointerTable_fc85a + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + pop af + jp hl + +PointerTable_fc85a: + dw Func_fc862 + dw Func_fc8f8 + dw Func_fc92b + dw Func_fc95d + +Func_fc862: + dec a + add a + add a + and $c + ld hl, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1 + add hl, bc + ld [hl], a + ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 + add hl, bc + ld [hl], $6 + xor a + ld [wd432], a + ld [wd433], a + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + ld [hl], $11 +asm_fc87f: + ld a, [wd432] + ld e, a + ld a, [wd433] + ld d, a + call Func_fc82e + jr c, Func_fc8c7 + call SetPikachuOverworldStateFlag2 + ld hl, wSpritePikachuStateData1YPixels - wSpritePikachuStateData1 + add hl, bc + ld a, [hl] + sub e + ld e, a + inc hl + inc hl + ld a, [hl] + sub d + ld d, a + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + ld a, [hl] + dec a + add a + add LOW(Pointer_fc8d6) + ld l, a + ld a, HIGH(Pointer_fc8d6) + adc 0 + ld h, a + ld a, [hli] + ld [wd432], a + add e + ld e, a + ld a, [hl] + ld [wd433], a + add d + ld d, a + ld hl, wSpritePikachuStateData1YPixels - wSpritePikachuStateData1 + add hl, bc + ld [hl], e + inc hl + inc hl + ld [hl], d + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + dec [hl] + ret nz + jp Func_fc835 + +Func_fc8c7: + ld hl, wSpritePikachuStateData1YPixels - wSpritePikachuStateData1 + add hl, bc + ld a, [hl] + sub e + ld [hl], a + inc hl + inc hl + ld a, [hl] + sub d + ld [hl], a + jp Func_fc835 + +Pointer_fc8d6: + db 0, 0 + db -2, 1 + db -4, 2 + db -2, 3 + db 0, 4 + db -2, 3 + db -4, 2 + db -2, 1 + db 0, 0 + db -2, -1 + db -4, -2 + db -2, -3 + db 0, -4 + db -2, -3 + db -4, -2 + db -2, -1 + db 0, 0 + +Func_fc8f8: + ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 + add hl, bc + ld [hl], $7 + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + ld [hl], $30 +asm_fc904: + call Func_fc82e + jp c, Func_fc835 + call SetPikachuOverworldStateFlag2 + ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1 + add hl, bc + ld a, [hl] + inc a + cp $8 + ld [hl], a + jr nz, .asm_fc91f + xor a + ld [hli], a + ld a, [hl] + inc a + and %11 + ld [hl], a +.asm_fc91f + call UpdatePikachuWalkingSprite + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + dec [hl] + ret nz + jp Func_fc835 + +Func_fc92b: + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + ld [hl], $20 + ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 + add hl, bc + ld [hl], $8 +asm_fc937: + call Func_fc82e + jp c, Func_fc835 + call SetPikachuOverworldStateFlag2 + ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1 + add hl, bc + ld a, [hl] + inc a + cp $8 + ld [hl], a + jr nz, .asm_fc951 + xor a + ld [hli], a + ld a, [hl] + xor $1 + ld [hl], a +.asm_fc951 + call UpdatePikachuWalkingSprite + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + dec [hl] + ret nz + jp Func_fc835 + +Func_fc95d: + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + ld [hl], $20 + ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 + add hl, bc + ld [hl], $9 +asm_fc969: + call Func_fc82e + jp c, Func_fc835 + call SetPikachuOverworldStateFlag2 + ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1 + add hl, bc + ld a, [hl] + inc a + cp $8 + ld [hl], a + jr nz, .skip + xor a + ld [hl], a + ld hl, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1 + add hl, bc + ld a, [hl] + call .TurnClockwise + ld [hl], a +.skip + call UpdatePikachuWalkingSprite + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + dec [hl] + ret nz + jp Func_fc835 + +.TurnClockwise: + push hl + ld hl, .Facings + ld d, a +.loop + ld a, [hli] + cp d + jr nz, .loop + ld a, [hl] + pop hl + ret + +.TurnCounterclockwise: + push hl + ld hl, .Facings_End + ld d, a +.loop_ + ld a, [hld] + cp d + jr nz, .loop_ + ld a, [hl] + pop hl + ret + +.Facings: + db SPRITE_FACING_DOWN, SPRITE_FACING_LEFT, SPRITE_FACING_UP, SPRITE_FACING_RIGHT + db SPRITE_FACING_DOWN, SPRITE_FACING_LEFT, SPRITE_FACING_UP, SPRITE_FACING_RIGHT +.Facings_End: + +NormalPikachuFollow: + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + ld [hl], $8 + ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 + add hl, bc + ld [hl], $3 + call AddPikachuStepVector +asm_fc9c3: + call TryDoubleAddPikachuStepVectorToScreenPixelCoords + call GetPikachuWalkingAnimationSpeed + call UpdatePikachuWalkingSprite + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + dec [hl] + ret nz + call ResetPikachuStepVector + call ComputePikachuFacingDirection + ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 + add hl, bc + ld [hl], $1 + ret + +FastPikachuFollow: + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + ld [hl], $4 + ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 + add hl, bc + ld [hl], $5 + call AddPikachuStepVector +asm_fc9ee: + call DoubleAddPikachuStepVectorToScreenPixelCoords + call GetPikachuWalkingAnimationSpeed + call UpdatePikachuWalkingSprite + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + dec [hl] + ret nz + call ResetPikachuStepVector + call ComputePikachuFacingDirection + ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 + add hl, bc + ld [hl], $1 + ret + +Func_fca0a: + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + ld [hl], $8 + ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 + add hl, bc + ld [hl], $4 + call AddPikachuStepVector + call AddPikachuStepVector +asm_fca1c: + call DoubleAddPikachuStepVectorToScreenPixelCoords + call GetPikachuWalkingAnimationSpeed + call UpdatePikachuWalkingSprite + ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 + add hl, bc + dec [hl] + ret nz + call ResetPikachuStepVector + call ComputePikachuFacingDirection + ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 + add hl, bc + ld [hl], $1 + ret + +AddPikachuStepVector: + ld hl, wSpritePikachuStateData1YStepVector - wSpritePikachuStateData1 + add hl, bc + ld e, [hl] + inc hl + inc hl + ld d, [hl] + ld hl, wSpritePikachuStateData2MapY - wSpritePikachuStateData1 + add hl, bc + ld a, [hl] + add e + ld [hli], a + ld a, [hl] + add d + ld [hl], a + ret + +TryDoubleAddPikachuStepVectorToScreenPixelCoords: + ld a, [wWalkBikeSurfState] + cp $1 ; biking + jr nz, AddPikachuStepVectorToScreenPixelCoords + ld a, [wd736] + bit 6, a + jr nz, AddPikachuStepVectorToScreenPixelCoords +DoubleAddPikachuStepVectorToScreenPixelCoords: + ld hl, wSpritePikachuStateData1YStepVector - wSpritePikachuStateData1 + add hl, bc + ld a, [hli] + add a + add a + add [hl] + ld [hli], a + ld a, [hli] + add a + add a + add [hl] + ld [hl], a + ret + +AddPikachuStepVectorToScreenPixelCoords: + ld hl, wSpritePikachuStateData1YStepVector - wSpritePikachuStateData1 + add hl, bc + ld a, [hli] + add a + add [hl] + ld [hli], a + ld a, [hli] + add a + add [hl] + ld [hli], a + ret + +ResetPikachuStepVector: + ld hl, wSpritePikachuStateData1YStepVector - wSpritePikachuStateData1 + add hl, bc + xor a + ld [hli], a + inc hl + ld [hl], a + ret + +GetPikachuWalkingAnimationSpeed: + call ComparePikachuHappinessTo80 + ld d, $2 + jr nc, .happy + ld d, $5 +.happy + ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1 + add hl, bc + ld a, [hl] + inc a + cp d + jr nz, .dont_reset + xor a +.dont_reset + ld [hli], a + ret nz + ld a, [hl] + inc a + and $3 + ld [hl], a + ret + +UpdatePikachuWalkingSprite: + ld a, [wPikachuOverworldStateFlags] + bit 3, a + jr nz, .uninitialized + ld hl, wSpritePikachuStateData2ImageBaseOffset - wSpritePikachuStateData1 + add hl, bc + ld a, [hl] + dec a + swap a + ld d, a + ld a, [wd736] + bit 7, a + jr nz, .copy_player + ld hl, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1 + add hl, bc + ld a, [hl] + or d + ld d, a + ld a, [wFontLoaded] + bit 0, a + jr z, .normal_get_sprite_index + call Func_fcae2 + ret c + jr .load_sprite_index + +.normal_get_sprite_index + ld hl, wSpritePikachuStateData1AnimFrameCounter - wSpritePikachuStateData1 + add hl, bc + ld a, d + or [hl] + ld d, a +.load_sprite_index + ld hl, wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1 + add hl, bc + ld [hl], d + ret + +.uninitialized + ld hl, wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1 + add hl, bc + ld [hl], $ff + ret + +.copy_player + ld a, [wSpritePlayerStateData1ImageIndex] + and $f + or d + ld [wSpritePikachuStateData1ImageIndex], a + ret + +Func_fcae2: + ld hl, wSpritePikachuStateData2MapY - wSpritePikachuStateData1 + add hl, bc + ld a, [wYCoord] + add $4 + cp [hl] + jr nz, .on_screen + inc hl + ld a, [wXCoord] + add $4 + cp [hl] + jr nz, .on_screen + ld hl, wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1 + add hl, bc + ld [hl], $ff + scf + ret + +.on_screen + and a + ret + +IsPikachuRightNextToPlayer: + push bc + push de + push hl + ld bc, wSpritePikachuStateData1PictureID + ld a, [wXCoord] + add $4 + ld d, a + ld a, [wYCoord] + add $4 + ld e, a + ld hl, wSpritePlayerStateData2MapY - wSpritePlayerStateData1 + add hl, bc + ld a, [hl] + sub e + and a + jr z, .equal + cp $ff + jr z, .one_away + cp $1 + jr z, .one_away + jr .bad + +.one_away + ld hl, wSpritePlayerStateData2MapX - wSpritePlayerStateData1 + add hl, bc + ld a, [hl] + sub d + jr z, .good + jr .bad + +.equal + ld hl, wSpritePlayerStateData2MapX - wSpritePlayerStateData1 + add hl, bc + ld a, [hl] + sub d + cp $ff + jr z, .good + cp $1 + jr z, .good + and a + jr z, .good + jr .bad + +.good + pop hl + pop de + pop bc + scf + ret + +.bad + pop hl + pop de + pop bc + xor a + ret + +GetPikachuFacingDirectionAndReturnToE:: + call GetPikachuFacingDirection + ld e, a + ret + +GetPikachuFacingDirection: + ld bc, wSpritePikachuStateData1PictureID + ld a, [wXCoord] + add $4 + ld d, a + ld a, [wYCoord] + add $4 + ld e, a + ld hl, wSpritePlayerStateData2MapY - wSpritePlayerStateData1 + add hl, bc + ld a, [hl] + cp e + jr z, .asm_fcb71 + jr nc, .asm_fcb6e + ld a, SPRITE_FACING_UP + ret + +.asm_fcb6e + ld a, SPRITE_FACING_DOWN + ret + +.asm_fcb71 + ld hl, wSpritePlayerStateData2MapX - wSpritePlayerStateData1 + add hl, bc + ld a, [hl] + cp d + jr z, .asm_fcb81 + jr nc, .asm_fcb7e + ld a, SPRITE_FACING_LEFT + ret + +.asm_fcb7e + ld a, SPRITE_FACING_RIGHT + ret + +.asm_fcb81 + ld a, $ff ; standing + ret + +ClearPikachuFollowCommandBuffer: + push bc + ld hl, wPikachuFollowCommandBufferSize + ld [hl], $ff + inc hl + ld bc, $10 + xor a + call FillMemory + pop bc + ret + +AppendPikachuFollowCommandToBuffer: + ld hl, wPikachuFollowCommandBufferSize + inc [hl] + ld e, [hl] + ld d, 0 + ld hl, wPikachuFollowCommandBuffer + add hl, de + ld [hl], a + ret + +RefreshPikachuFollow: + call ClearPikachuFollowCommandBuffer + call ComputePikachuFollowCommand + ret c + call AppendPikachuFollowCommandToBuffer + ret + +ComputePikachuFollowCommand: + ld bc, wSpritePikachuStateData1PictureID + ld hl, wSpritePlayerStateData2MapY - wSpritePlayerStateData1 + add hl, bc + ld a, [wYCoord] + add $4 + sub [hl] + jr z, .checkXCoord + jr c, .pikaAbovePlayer + call CheckAbsoluteValueLessThan2 + jr c, .return1 + ld a, $5 + and a + ret + +.return1 + ld a, $1 + and a + ret + +.pikaAbovePlayer + call CheckAbsoluteValueLessThan2 + jr c, .return2 + ld a, $6 + and a + ret + +.return2 + ld a, $2 + and a + ret + +.checkXCoord + ld hl, wSpritePlayerStateData2MapX - wSpritePlayerStateData1 + add hl, bc + ld a, [wXCoord] + add $4 + sub [hl] + jr z, .pikachuOnTopOfPlayer + jr c, .pikaToLeftOfPlayer + call CheckAbsoluteValueLessThan2 + jr c, .return4 + ld a, $8 + and a + ret + +.return4 + ld a, $4 + and a + ret + +.pikaToLeftOfPlayer + call CheckAbsoluteValueLessThan2 + jr c, .return3 + ld a, $7 + and a + ret + +.return3 + ld a, $3 + and a + ret + +.pikachuOnTopOfPlayer + scf + ret + +CheckAbsoluteValueLessThan2: + jr nc, .positive + cpl + inc a +.positive + cp $2 + ret + +Func_fcc08:: + call Func_fcc23 + ret nc + ld a, [wd736] + bit 6, a + jr nz, .asm_fcc1b + call Func_fcc42 + ret c + call AppendPikachuFollowCommandToBuffer + ret + +.asm_fcc1b + call Func_fcc64 + ret c + call AppendPikachuFollowCommandToBuffer + ret + +Func_fcc23: + ld a, [wPikachuOverworldStateFlags] + bit 5, a + jr nz, .asm_fcc40 + ld a, [wPikachuOverworldStateFlags] + bit 7, a + jr nz, .asm_fcc40 + ld a, [wd472] + bit 7, a + jr z, .asm_fcc40 + ld a, [wWalkBikeSurfState] + and a + jr nz, .asm_fcc40 + scf + ret + +.asm_fcc40 + and a + ret + +Func_fcc42: + xor a + ld a, [wPlayerDirection] + bit 3, a + jr nz, .asm_fcc58 + bit 2, a + jr nz, .asm_fcc5b + bit 1, a + jr nz, .asm_fcc5e + bit 0, a + jr nz, .asm_fcc61 + scf + ret + +.asm_fcc58 + ld a, $2 + ret + +.asm_fcc5b + ld a, $1 + ret + +.asm_fcc5e + ld a, $3 + ret + +.asm_fcc61 + ld a, $4 + ret + +Func_fcc64: + ld hl, wPikachuOverworldStateFlags + bit 6, [hl] + jr z, .asm_fcc6e + res 6, [hl] + ret + +.asm_fcc6e + set 6, [hl] + xor a + ld a, [wPlayerDirection] + bit 3, a + jr nz, .asm_fcc86 + bit 2, a + jr nz, .asm_fcc89 + bit 1, a + jr nz, .asm_fcc8c + bit 0, a + jr nz, .asm_fcc8f + scf + ret + +.asm_fcc86 + ld a, $6 + ret + +.asm_fcc89 + ld a, $5 + ret + +.asm_fcc8c + ld a, $7 + ret + +.asm_fcc8f + ld a, $8 + ret + +Func_fcc92: + ld hl, wPikachuFollowCommandBufferSize + ld a, [hl] + cp $ff + jr z, .asm_fccb0 + and a + jr z, .asm_fccb0 + dec [hl] + ld e, a + ld d, 0 + ld hl, wPikachuFollowCommandBuffer + add hl, de + inc e + ld a, $ff +.asm_fcca8 + ld d, [hl] + ldd [hl], a + ld a, d + dec e + jr nz, .asm_fcca8 + and a + ret + +.asm_fccb0 + scf + ret + +ComputePikachuFacingDirection:: + call GetPikachuFollowCommandIfBufferSizeNonzero + and a + jr z, .check_y + dec a + and $3 + add a + add a + jr .load + +.check_y + ld a, [wYCoord] + add $4 + ld d, a + ld a, [wXCoord] + add $4 + ld e, a + ld a, [wSpritePikachuStateData2MapY] + cp d + jr z, .check_x + ld a, SPRITE_FACING_DOWN + jr c, .load + ld a, SPRITE_FACING_UP + jr .load + +.check_x + ld a, [wSpritePikachuStateData2MapX] + cp e + jr z, .copy_from_player + ld a, SPRITE_FACING_RIGHT + jr c, .load + ld a, SPRITE_FACING_LEFT + jr .load + +.copy_from_player + ld a, [wSpritePlayerStateData1FacingDirection] +.load + ld [wSpritePikachuStateData1FacingDirection], a + ret + +GetPikachuFollowCommand: + ld hl, wPikachuFollowCommandBufferSize + ld a, [hl] + cp $ff + jr z, .asm_fccff + ld e, a + ld d, 0 + ld hl, wPikachuFollowCommandBuffer + add hl, de + ld a, [hl] + ret + +.asm_fccff + xor a + ret + +GetPikachuFollowCommandIfBufferSizeNonzero: + ld hl, wPikachuFollowCommandBufferSize + ld a, [hl] + cp $ff + jr z, .default + and a + jr z, .default + ld e, a + ld d, 0 + ld hl, wPikachuFollowCommandBuffer + add hl, de + ld a, [hl] + ret + +.default + xor a + ret + +AreThereAtLeastTwoStepsInPikachuFollowCommandBuffer: + ld a, [wPikachuFollowCommandBufferSize] + cp $ff + ret z + cp $2 + jr nc, .set_carry + and a + ret + +.set_carry + scf + ret + +WillPikachuSpawnOnTheScreen: + ld h, HIGH(wSpriteStateData2) + ldh a, [hCurrentSpriteOffset] ; If we're here, this can only be $f0 + add wSpritePikachuStateData2MapY - wSpritePikachuStateData2 + ld l, a + ld b, [hl] + ld a, [wYCoord] + cp b + jr z, .same_y + jr nc, .not_on_screen + add (SCREEN_HEIGHT / 2) - 1 + cp b + jr c, .not_on_screen +.same_y + inc l + ld b, [hl] + ld a, [wXCoord] + cp b + jr z, .same_x + jr nc, .not_on_screen + add (SCREEN_WIDTH / 2) - 1 + cp b + jr c, .not_on_screen +.same_x + call .GetNPCCurrentTile + ld d, $60 + ld a, [hli] + ld e, a + cp d + jr nc, .not_on_screen + ld a, [hld] + cp d + jr nc, .not_on_screen + ld bc, -20 + add hl, bc + ld a, [hli] + cp d + jr nc, .not_on_screen + ld a, [hl] + cp d + jr c, .on_screen +.not_on_screen + ld h, HIGH(wSpriteStateData1) + ldh a, [hCurrentSpriteOffset] + add wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1 + ld l, a + ld [hl], $ff + scf + jr .return + +.on_screen + ld h, HIGH(wSpriteStateData2) + ldh a, [hCurrentSpriteOffset] + add wSpritePikachuStateData2GrassPriority - wSpritePikachuStateData2 + ld l, a + ld a, [wGrassTile] + cp e + ld a, $0 + jr nz, .priority + ld a, $80 +.priority + ld [hl], a + and a +.return + ret + +.GetNPCCurrentTile: + ld h, HIGH(wSpriteStateData1) + ldh a, [hCurrentSpriteOffset] + add wSpritePikachuStateData1YPixels - wSpritePikachuStateData1 + ld l, a + ld a, [hli] + add $4 + and $f0 + srl a + ld c, a + ld b, $0 + inc l + ld a, [hl] + add $2 + srl a + srl a + srl a + add SCREEN_WIDTH + ld d, 0 + ld e, a + ld hl, wTileMap +REPT 5 + add hl, bc +ENDR + add hl, de + ret + +ComparePikachuHappinessTo80: +; preserves a and bc + push bc + push af + ld a, [wPikachuHappiness] + cp 80 + pop bc + ld a, b + pop bc + ret diff --git a/engine/pikachu/pikachu_movement.asm b/engine/pikachu/pikachu_movement.asm new file mode 100755 index 00000000..6b912e61 --- /dev/null +++ b/engine/pikachu/pikachu_movement.asm @@ -0,0 +1,1048 @@ +ApplyPikachuMovementData_:: + ld a, b + ld [wPikachuMovementScriptBank], a + ld a, l + ld [wPikachuMovementScriptAddress], a + ld a, h + ld [wPikachuMovementScriptAddress + 1], a + call .SwapSpriteStateData +.loop + call LoadPikachuMovementCommandData + jr nc, .done + call ExecutePikachuMovementCommand + jr .loop + +.done + call .SwapSpriteStateData + call DelayFrame + ret + +.SwapSpriteStateData: + ld a, [wUpdateSpritesEnabled] + push af + ld a, $ff + ld [wUpdateSpritesEnabled], a + push hl + push de + push bc + + ld hl, wSpritePlayerStateData1 + ld de, wSpritePikachuStateData1 + ld c, $10 + call .SwapBytes + + ld hl, wSpritePlayerStateData2 + ld de, wSpritePikachuStateData2 + ld c, $10 + call .SwapBytes + + pop bc + pop de + pop hl + pop af + ld [wUpdateSpritesEnabled], a + ret + +.SwapBytes: + ld b, [hl] + ld a, [de] + ld [hli], a + ld a, b + ld [de], a + inc de + dec c + jr nz, .SwapBytes + ret + +LoadPikachuMovementCommandData: + call GetPikachuMovementScriptByte + cp $3f + ret z + ld c, a + ld b, 0 + ld hl, PikachuMovementDatabase + add hl, bc + add hl, bc + add hl, bc + add hl, bc + ld a, [hli] + ld [wCurPikaMovementFunc1], a + ld a, [hli] + cp $80 + jr nz, .no_param + call GetPikachuMovementScriptByte +.no_param + ld [wCurPikaMovementParam1], a + ld a, [hli] + ld [wCurPikaMovementFunc2], a + ld a, [hli] + cp $80 + jr nz, .no_param2 + call GetPikachuMovementScriptByte +.no_param2 + ld [wCurPikaMovementParam2], a + xor a + ld [wd451], a + scf + ret + +ExecutePikachuMovementCommand: + xor a + ld [wPikachuMovementFlags], a + ld [wPikachuStepTimer], a + ld [wPikachuStepSubtimer], a + ld a, [wSpritePlayerStateData2GrassPriority] + push af +.loop + ld bc, wSpritePlayerStateData1 ; Currently holds Pikachu's sprite state data + ld a, [wCurPikaMovementFunc1] + ld hl, PikaMovementFunc1Jumptable + call .JumpTable + ld a, [wCurPikaMovementFunc2] + ld hl, PikaMovementFunc2Jumptable + call .JumpTable + call GetCoordsForPikachuShadow + call AnimatePikachuShadow + call DelayFrame + call DelayFrame + ld hl, wPikachuMovementFlags + bit 7, [hl] + jr z, .loop + pop af + ld [wSpritePlayerStateData2GrassPriority], a + scf + ret + +.JumpTable: + ld e, a + ld d, 0 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +GetCoordsForPikachuShadow: + ld hl, wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1 + add hl, bc + ld a, [wCurPikaMovementSpriteImageIdx] + ld [hl], a + ld a, [wPikaSpriteY] + ld d, a + ld a, [wPikachuMovementYOffset] + add d + ld hl, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 + add hl, bc + ld [hl], a + ld a, [wPikaSpriteX] + ld d, a + ld a, [wPikachuMovementXOffset] + add d + ld hl, wSpritePlayerStateData1XPixels - wSpritePlayerStateData1 + add hl, bc + ld [hl], a + ld hl, wPikachuMovementFlags + bit 6, [hl] + ret z + ld hl, wSpritePlayerStateData2GrassPriority - wSpritePlayerStateData1 + add hl, bc + ld [hl], 0 + ret + +AnimatePikachuShadow: + ld hl, wPikachuMovementFlags + bit 6, [hl] + res 6, [hl] + ld hl, wd736 + res 6, [hl] + ret z + set 6, [hl] + call LoadPikachuShadowOAMData + ret + +PikachuMovementDatabase: + db $01, 1 - 1, $00, 1 - 1 ; $00 start + + db $03, $80, $01, 1 - 1 ; $01 + db $04, $80, $01, 1 - 1 ; $02 + db $05, $80, $01, 1 - 1 ; $03 + db $06, $80, $01, 1 - 1 ; $04 + db $07, $80, $01, 1 - 1 ; $05 + db $08, $80, $01, 1 - 1 ; $06 + db $09, $80, $01, 1 - 1 ; $07 + db $0a, $80, $01, 1 - 1 ; $08 + + db $03, $80, $06, 1 - 1 ; $09 + db $04, $80, $06, 1 - 1 ; $0a + db $05, $80, $06, 1 - 1 ; $0b + db $06, $80, $06, 1 - 1 ; $0c + db $07, $80, $06, 1 - 1 ; $0d + db $08, $80, $06, 1 - 1 ; $0e + db $09, $80, $06, 1 - 1 ; $0f + db $0a, $80, $06, 1 - 1 ; $10 + + db $03, $80, $03, $80 ; $11 + db $04, $80, $03, $80 ; $12 + db $05, $80, $03, $80 ; $13 + db $06, $80, $03, $80 ; $14 + db $07, $80, $03, $80 ; $15 + db $08, $80, $03, $80 ; $16 + db $09, $80, $03, $80 ; $17 + db $0a, $80, $03, $80 ; $18 + + db $03, $80, $07, $80 ; $19 + db $04, $80, $07, $80 ; $1a + db $05, $80, $07, $80 ; $1b + db $06, $80, $07, $80 ; $1c + + db $0b, (1 << 5) | 8 - 1, $02, 1 - 1 ; $1d step down + db $0c, (1 << 5) | 8 - 1, $02, 1 - 1 ; $1e step up + db $0d, (1 << 5) | 8 - 1, $02, 1 - 1 ; $1f step left + db $0e, (1 << 5) | 8 - 1, $02, 1 - 1 ; $20 step right + db $0f, (1 << 5) | 8 - 1, $02, 1 - 1 ; $21 step down left + db $10, (1 << 5) | 8 - 1, $02, 1 - 1 ; $22 step down right + db $11, (1 << 5) | 8 - 1, $02, 1 - 1 ; $23 step up left + db $12, (1 << 5) | 8 - 1, $02, 1 - 1 ; $24 step up right + + db $0b, 16 - 1, $02, 1 - 1 ; $25 slide down + db $0c, 16 - 1, $02, 1 - 1 ; $26 slide up + db $0d, 16 - 1, $02, 1 - 1 ; $27 slide left + db $0e, 16 - 1, $02, 1 - 1 ; $28 slide right + db $0f, 16 - 1, $02, 1 - 1 ; $29 slide down left + db $10, 16 - 1, $02, 1 - 1 ; $2a slide down right + db $11, 16 - 1, $02, 1 - 1 ; $2b slide up left + db $12, 16 - 1, $02, 1 - 1 ; $2c slide up right + + db $0b, 16 - 1, $08, (1 << 4) | 8 - 1 ; $2d hop down + db $0c, 16 - 1, $08, (1 << 4) | 8 - 1 ; $2e hop up + db $0d, 16 - 1, $08, (1 << 4) | 8 - 1 ; $2f hop left + db $0e, 16 - 1, $08, (1 << 4) | 8 - 1 ; $30 hop right + db $0f, 16 - 1, $08, (1 << 4) | 8 - 1 ; $31 hop down left + db $10, 16 - 1, $08, (1 << 4) | 8 - 1 ; $32 hop down right + db $11, 16 - 1, $08, (1 << 4) | 8 - 1 ; $33 hop up left + db $12, 16 - 1, $08, (1 << 4) | 8 - 1 ; $34 hop up right + + db $13, 16 - 1, $06, 1 - 1 ; $35 look down + db $14, 16 - 1, $06, 1 - 1 ; $36 look up + db $15, 16 - 1, $06, 1 - 1 ; $37 look left + db $16, 16 - 1, $06, 1 - 1 ; $38 look right + + db $02, $80, $04, 1 - 1 ; $39 + db $02, $80, $05, 1 - 1 ; $3a + db $02, $80, $03, $80 ; $3b + db $02, $80, $07, $80 ; $3c + db $02, $80, $09, $80 ; $3d + db $02, $80, $06, 1 - 1 ; $3e + +PikaMovementFunc1Jumptable: + dw PikaMovementFunc1_EndCommand_ ; 00 + dw PikaMovementFunc1_LoadPikachuCurrentPosition ; 01 + dw PikaMovementFunc1_DelayFrames ; 02 + dw PikaMovementFunc1_WalkInCurrentFacingDirection ; 03 + dw PikaMovementFunc1_WalkInOppositeFacingDirection ; 04 + dw PikaMovementFunc1_StepTurningCounterclockwise ; 05 + dw PikaMovementFunc1_StepTurningClockwise ; 06 + dw PikaMovementFunc1_StepForwardLeft ; 07 + dw PikaMovementFunc1_StepForwardRight ; 08 + dw PikaMovementFunc1_StepBackwardLeft ; 09 + dw PikaMovementFunc1_StepBackwardRight ; 0a + dw PikaMovementFunc1_MoveDown ; 0b + dw PikaMovementFunc1_MoveUp ; 0c + dw PikaMovementFunc1_MoveLeft ; 0d + dw PikaMovementFunc1_MoveRight ; 0e + dw PikaMovementFunc1_MoveDownLeft ; 0f + dw PikaMovementFunc1_MoveDownRight ; 10 + dw PikaMovementFunc1_MoveUpLeft ; 11 + dw PikaMovementFunc1_MoveUpRight ; 12 + dw PikaMovementFunc1_LookDown ; 13 + dw PikaMovementFunc1_LookUp ; 14 + dw PikaMovementFunc1_LookLeft ; 15 + dw PikaMovementFunc1_LookRight ; 16 + dw PikaMovementFunc1_EndCommand_ ; 17 + +PikaMovementFunc1_EndCommand: + ld a, [wPikachuMovementFlags] + set 7, a + ld [wPikachuMovementFlags], a + ret + +PikaMovementFunc1_EndCommand_: + call PikaMovementFunc1_EndCommand + ret + +PikaMovementFunc1_LoadPikachuCurrentPosition: + ld hl, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 + add hl, bc + ld a, [hl] + ld [wPikaSpriteY], a + ld hl, wSpritePlayerStateData1XPixels - wSpritePlayerStateData1 + add hl, bc + ld a, [hl] + ld [wPikaSpriteX], a + xor a + ld [wPikachuMovementYOffset], a + ld [wPikachuMovementXOffset], a + call PikaMovementFunc1_EndCommand + ret + +PikaMovementFunc1_DelayFrames: + call CheckPikachuStepTimer1 + ret nz + call PikaMovementFunc1_EndCommand + ret + +PikaMovementFunc1_WalkInCurrentFacingDirection: + call GetPikachuFacing + jr PikaMovementFunc1_ApplyStepVector + +PikaMovementFunc1_WalkInOppositeFacingDirection: + call GetPikachuFacing + xor %100 + jr PikaMovementFunc1_ApplyStepVector + +PikaMovementFunc1_StepTurningCounterclockwise: + call GetPikachuFacing + ld hl, .Data + call PikaMovementFunc1_GetNextFacing + jr PikaMovementFunc1_ApplyStepVector + +.Data: + db SPRITE_FACING_DOWN, PIKASTEPDIR_RIGHT << 2 + db SPRITE_FACING_UP, PIKASTEPDIR_LEFT << 2 + db SPRITE_FACING_LEFT, PIKASTEPDIR_DOWN << 2 + db SPRITE_FACING_RIGHT, PIKASTEPDIR_UP << 2 + db $ff + +PikaMovementFunc1_StepTurningClockwise: + call GetPikachuFacing + ld hl, .Data + call PikaMovementFunc1_GetNextFacing + jr PikaMovementFunc1_ApplyStepVector + +.Data: + db SPRITE_FACING_DOWN, PIKASTEPDIR_LEFT << 2 + db SPRITE_FACING_UP, PIKASTEPDIR_RIGHT << 2 + db SPRITE_FACING_LEFT, PIKASTEPDIR_UP << 2 + db SPRITE_FACING_RIGHT, PIKASTEPDIR_DOWN << 2 + db $ff + +PikaMovementFunc1_StepForwardLeft: + call GetPikachuFacing + ld hl, .Data + call PikaMovementFunc1_GetNextFacing + jr PikaMovementFunc1_ApplyStepVector + +.Data: + db SPRITE_FACING_DOWN, PIKASTEPDIR_DOWN_RIGHT << 2 + db SPRITE_FACING_UP, PIKASTEPDIR_UP_LEFT << 2 + db SPRITE_FACING_LEFT, PIKASTEPDIR_DOWN_LEFT << 2 + db SPRITE_FACING_RIGHT, PIKASTEPDIR_UP_RIGHT << 2 + +PikaMovementFunc1_StepForwardRight: + call GetPikachuFacing + ld hl, .Data + call PikaMovementFunc1_GetNextFacing + jr PikaMovementFunc1_ApplyStepVector + +.Data: + db SPRITE_FACING_DOWN, PIKASTEPDIR_DOWN_LEFT << 2 + db SPRITE_FACING_UP, PIKASTEPDIR_UP_RIGHT << 2 + db SPRITE_FACING_LEFT, PIKASTEPDIR_UP_LEFT << 2 + db SPRITE_FACING_RIGHT, PIKASTEPDIR_DOWN_RIGHT << 2 + +PikaMovementFunc1_StepBackwardLeft: + call GetPikachuFacing + ld hl, .Data + call PikaMovementFunc1_GetNextFacing + jr PikaMovementFunc1_ApplyStepVector + +.Data: + db SPRITE_FACING_DOWN, PIKASTEPDIR_UP_RIGHT << 2 + db SPRITE_FACING_UP, PIKASTEPDIR_DOWN_LEFT << 2 + db SPRITE_FACING_LEFT, PIKASTEPDIR_DOWN_RIGHT << 2 + db SPRITE_FACING_RIGHT, PIKASTEPDIR_UP_LEFT << 2 + +PikaMovementFunc1_StepBackwardRight: + call GetPikachuFacing + ld hl, .Data + call PikaMovementFunc1_GetNextFacing + jr PikaMovementFunc1_ApplyStepVector + +.Data: + db SPRITE_FACING_DOWN, PIKASTEPDIR_UP_LEFT << 2 + db SPRITE_FACING_UP, PIKASTEPDIR_DOWN_RIGHT << 2 + db SPRITE_FACING_LEFT, PIKASTEPDIR_UP_RIGHT << 2 + db SPRITE_FACING_RIGHT, PIKASTEPDIR_DOWN_LEFT << 2 + +PikaMovementFunc1_ApplyStepVector: + rrca + rrca + and $7 + ld e, a + call GetPikachuStepVectorMagnitude + ld d, a + call UpdatePikachuPosition + call CheckPikachuStepTimer1 + ret nz + call PikaMovementFunc1_EndCommand + ret + +PikaMovementFunc1_GetNextFacing: + push de + ld d, a +.loop + ld a, [hli] + cp d + jr z, .found + inc hl + cp $ff + jr nz, .loop + pop de + ret + +.found + ld a, [hl] + pop de + scf + ret + +PikaMovementFunc1_MoveDown: + ld a, PIKASTEPDIR_DOWN + jr PikaMovementFunc1_ApplyFacingAndMove + +PikaMovementFunc1_MoveUp: + ld a, PIKASTEPDIR_UP + jr PikaMovementFunc1_ApplyFacingAndMove + +PikaMovementFunc1_MoveLeft: + ld a, PIKASTEPDIR_LEFT + jr PikaMovementFunc1_ApplyFacingAndMove + +PikaMovementFunc1_MoveRight: + ld a, PIKASTEPDIR_RIGHT + jr PikaMovementFunc1_ApplyFacingAndMove + +PikaMovementFunc1_MoveDownLeft: + ld e, PIKASTEPDIR_DOWN_LEFT + jr PikaMovementFunc1_MoveDiagonally + +PikaMovementFunc1_MoveDownRight: + ld e, PIKASTEPDIR_DOWN_RIGHT + jr PikaMovementFunc1_MoveDiagonally + +PikaMovementFunc1_MoveUpLeft: + ld e, PIKASTEPDIR_UP_LEFT + jr PikaMovementFunc1_MoveDiagonally + +PikaMovementFunc1_MoveUpRight: + ld e, PIKASTEPDIR_UP_RIGHT + jr PikaMovementFunc1_MoveDiagonally + +PikaMovementFunc1_ApplyFacingAndMove: + ld e, a + call SetPikachuFacing +PikaMovementFunc1_MoveDiagonally: + call GetPikachuStepVectorMagnitude + ld d, a + push de + call UpdatePikachuPosition + pop de + call CheckPikachuStepTimer1 + ret nz + ld a, e + call ApplyPikachuStepVector + call PikaMovementFunc1_EndCommand + ret + +PikaMovementFunc1_LookDown: + ld a, PIKASTEPDIR_DOWN + jr PikaMovementFunc1_ApplyFacing + +PikaMovementFunc1_LookUp: + ld a, PIKASTEPDIR_UP + jr PikaMovementFunc1_ApplyFacing + +PikaMovementFunc1_LookLeft: + ld a, PIKASTEPDIR_LEFT + jr PikaMovementFunc1_ApplyFacing + +PikaMovementFunc1_LookRight: + ld a, PIKASTEPDIR_RIGHT + jr PikaMovementFunc1_ApplyFacing + +PikaMovementFunc1_ApplyFacing: + call SetPikachuFacing + call PikaMovementFunc1_EndCommand + ret + +UpdatePikachuPosition: + push de + ld d, 0 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + pop de + ld a, d + jp hl + +.Jumptable: + dw .Down + dw .Up + dw .Left + dw .Right + dw .DownLeft + dw .DownRight + dw .UpLeft + dw .UpRight + +.Down: + ld d, 0 + ld e, a + jr .ApplyVector + +.Up: + ld d, 0 + cpl + inc a + ld e, a + jr .ApplyVector + +.Left: + cpl + inc a + ld d, a + ld e, 0 + jr .ApplyVector + +.Right: + ld d, a + ld e, 0 + jr .ApplyVector + +.DownLeft: + ld e, a + cpl + inc a + ld d, a + jr .ApplyVector + +.DownRight: + ld e, a + ld d, a + jr .ApplyVector + +.UpLeft: + cpl + inc a + ld e, a + ld d, a + jr .ApplyVector + +.UpRight: + ld d, a + cpl + inc a + ld e, a + jr .ApplyVector + +.ApplyVector: + ld a, [wPikaSpriteX] + add d + ld [wPikaSpriteX], a + ld a, [wPikaSpriteY] + add e + ld [wPikaSpriteY], a + ret + +PikaMovementFunc2Jumptable: + dw PikaMovementFunc2_ResetFrameCounterAndFaceCurrent ; 0 + dw PikaMovementFunc2_UpdateSpriteImageIdxWithPreviousImageIdxDirection ; 1 + dw PikaMovementFunc2_UpdateSpriteImageIdxWithFacing ; 2 + dw PikaMovementFunc2_TurnParameter ; 3 + dw PikaMovementFunc2_TurnClockwise ; 4 + dw PikaMovementFunc2_TurnCounterClockwise ; 5 + dw PikaMovementFunc2_CopySpriteImageIdxDirectionToSpriteImageIdx ; 6 + dw PikaMovementFunc2_UpdateJumpWithPreviousImageIdxDirection ; 7 + dw PikaMovementFunc2_UpdateJumpWithFacing ; 8 + dw PikaMovementFunc2_CopyFacingToJump ; 9 + dw PikaMovementFunc2_nop ; 10 + +PikaMovement_SetSpawnShadow: + ld hl, wPikachuMovementFlags + set 6, [hl] + ret + +PikaMovementFunc2_ResetFrameCounterAndFaceCurrent: + ld hl, wSpritePlayerStateData1IntraAnimFrameCounter - wSpritePlayerStateData1 + add hl, bc + xor a + ld [hli], a + ld [hl], a + call PikaMovementFunc2_GetImageBaseOffset + ld d, a + call GetPikachuFacing + or d + ld [wCurPikaMovementSpriteImageIdx], a + ret + +PikaMovementFunc2_nop: + ret + +PikaMovementFunc2_CopySpriteImageIdxDirectionToSpriteImageIdx: + call PikaMovementFunc2_GetImageBaseOffset + ld d, a + call PikaMovementFunc2_GetSpriteImageIdxDirection + or d + ld [wCurPikaMovementSpriteImageIdx], a + ret + +PikaMovementFunc2_UpdateSpriteImageIdxWithFacing: + call PikaMovementFunc2_GetImageBaseOffset + ld d, a + call GetPikachuFacing + or d + ld d, a + jr PikaMovementFunc2_UpdateSpriteImageIdx + +PikaMovementFunc2_UpdateSpriteImageIdxWithPreviousImageIdxDirection: + call PikaMovementFunc2_GetImageBaseOffset + ld d, a + call PikaMovementFunc2_GetSpriteImageIdxDirection + or d + ld d, a +PikaMovementFunc2_UpdateSpriteImageIdx: + ld hl, wSpritePlayerStateData1AnimFrameCounter - wSpritePlayerStateData1 + add hl, bc + call CheckPikachuStepTimer2 ; does not preserve hl + jr nz, .skip + inc [hl] +.skip + ld a, [hl] + rrca + rrca + and 3 + or d + ld [wCurPikaMovementSpriteImageIdx], a + ret + +PikaMovementFunc2_UpdateJumpWithFacing: + call GetPikachuFacing + ld d, a + jr PikaMovementFunc2_UpdateJump + +PikaMovementFunc2_UpdateJumpWithPreviousImageIdxDirection: + call PikaMovementFunc2_GetSpriteImageIdxDirection + ld d, a +PikaMovementFunc2_UpdateJump: + call PikaMovementFunc2_GetImageBaseOffset + or d + ld d, a + call PikaMovementFunc2_Timer + or d + ld [wCurPikaMovementSpriteImageIdx], a + call PikaMovementFunc_Sine + ld [wPikachuMovementYOffset], a + and a + ret z + call PikaMovement_SetSpawnShadow + ret + +PikaMovementFunc2_CopyFacingToJump: + call GetPikachuFacing + ld d, a + call PikaMovementFunc2_GetImageBaseOffset + or d + ld [wCurPikaMovementSpriteImageIdx], a + call PikaMovementFunc_Sine + ld [wPikachuMovementYOffset], a + ret + +PikaMovementFunc2_TurnParameter: + ld a, [wCurPikaMovementParam2] + and $40 + cp $40 + jr z, PikaMovementFunc2_TurnClockwise + jr PikaMovementFunc2_TurnCounterClockwise + +PikaMovementFunc2_TurnClockwise: + call PikaMovementFunc2_GetSpriteImageIdxDirection + ld d, a + call CheckPikachuStepTimer2 + jr nz, .skip + ld hl, Data_fd731 +.loop + ld a, [hli] + cp d + jr nz, .loop + ld d, [hl] +.skip + call PikaMovementFunc2_GetImageBaseOffset + or d + ld [wCurPikaMovementSpriteImageIdx], a + ret + +PikaMovementFunc2_TurnCounterClockwise: + call PikaMovementFunc2_GetSpriteImageIdxDirection + ld d, a + call CheckPikachuStepTimer2 + jr nz, .skip + ld hl, Data_fd731End +.loop + ld a, [hld] + cp d + jr nz, .loop + ld d, [hl] +.skip + call PikaMovementFunc2_GetImageBaseOffset + or d + ld [wCurPikaMovementSpriteImageIdx], a + ret + +Data_fd731: + db SPRITE_FACING_DOWN + db SPRITE_FACING_LEFT + db SPRITE_FACING_UP + db SPRITE_FACING_RIGHT + db SPRITE_FACING_DOWN +Data_fd731End: + +PikaMovementFunc2_Timer: + push hl + ld hl, wSpritePlayerStateData1IntraAnimFrameCounter - wSpritePlayerStateData1 + add hl, bc + ld a, [hl] + inc a + and $3 + ld [hli], a + jr nz, .load_pop + ld a, [hl] + inc a + and $3 + ld [hl], a +.load_pop + ld a, [hl] + pop hl + ret + +PikaMovementFunc2_GetImageBaseOffset: + push hl + ld hl, wSpritePlayerStateData2ImageBaseOffset - wSpritePlayerStateData1 + add hl, bc + ld a, [hl] + dec a + swap a + pop hl + ret + +PikaMovementFunc2_GetSpriteImageIdxDirection: + push hl + ld hl, wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1 + add hl, bc + ld a, [hl] + and $c + pop hl + ret + +GetPikachuFacing: + push hl + ld hl, wSpritePlayerStateData1FacingDirection - wSpritePlayerStateData1 + add hl, bc + ld a, [hl] + and $c + pop hl + ret + +SetPikachuFacing: + push hl + ld hl, wSpritePlayerStateData1FacingDirection - wSpritePlayerStateData1 + add hl, bc + add a + add a + and $c + ld [hl], a + pop hl + ret + +CheckPikachuStepTimer1: + ld hl, wPikachuStepTimer + inc [hl] + ld a, [wCurPikaMovementParam1] + and $1f + inc a + cp [hl] + ret nz + ld [hl], 0 + ret + +GetPikachuStepVectorMagnitude: + ; *XX***** + ld a, [wCurPikaMovementParam1] + swap a + rrca + and $3 + inc a + ret + +CheckPikachuStepTimer2: + ld hl, wPikachuStepSubtimer + inc [hl] + ld a, [wCurPikaMovementParam2] + and $f + inc a + cp [hl] + ret nz + ld [hl], 0 + ret + +PikaMovementFunc_Sine: + call .GetArgument + ld a, [wPikachuStepSubtimer] + add e + ld [wPikachuStepSubtimer], a + add $20 + ld e, a + push hl + push bc + call Sine_e + pop bc + pop hl + ret + +.GetArgument: + ld a, [wCurPikaMovementParam2] + and $f + inc a + ld d, a + ld a, [wCurPikaMovementParam2] + swap a + and $7 + ld e, a + ld a, 1 + jr z, .okay +.loop + add a + dec e + jr nz, .loop +.okay + ld e, a + ret + +ApplyPikachuStepVector: + push bc + ld c, a + ld b, 0 + ld hl, .StepVectors + add hl, bc + add hl, bc + ld d, [hl] + inc hl + ld e, [hl] + pop bc + ld hl, wSpritePlayerStateData2MapY - wSpritePlayerStateData1 + add hl, bc + ld a, [hl] + add e + ld [hli], a + ld a, [hl] + add d + ld [hl], a + ret + +.StepVectors: + db 0, 1 + db 0, -1 + db -1, 0 + db 1, 0 + db -1, 1 + db 1, 1 + db -1, -1 + db 1, -1 + +LoadPikachuShadowOAMData: + push bc + push de + push hl + + ld bc, wOAMBuffer + 4 * 36 + ld a, [wPikaSpriteY] + ld e, a + ld a, [wPikaSpriteX] + ld d, a + ld hl, .OAMData + call .LoadOAMData + + pop hl + pop de + pop bc + ret + +.OAMData: + db 2 + db $0c, $00, $ff, 0 + db $0c, $08, $ff, 1 << OAM_X_FLIP + +.LoadOAMData: + ld a, e + add $10 + ld e, a + ld a, d + add $8 + ld d, a + ld a, [hli] +.loop + push af + ld a, [hli] + add e + ld [bc], a + inc bc + ld a, [hli] + add d + ld [bc], a + inc bc + ld a, [hli] + ld [bc], a + inc bc + ld a, [hli] + ld [bc], a + inc bc + pop af + dec a + jr nz, .loop + ret + +LoadPikachuShadowIntoVRAM:: + ld hl, vNPCSprites2 + $7f * $10 + ld de, LedgeHoppingShadowGFX_3F + lb bc, BANK(LedgeHoppingShadowGFX_3F), (LedgeHoppingShadowGFX_3FEnd - LedgeHoppingShadowGFX_3F) / 8 + jp CopyVideoDataDoubleAlternate + +LedgeHoppingShadowGFX_3F: +INCBIN "gfx/overworld/shadow.1bpp" +LedgeHoppingShadowGFX_3FEnd: + +LoadPikachuBallIconIntoVRAM: + ld hl, vNPCSprites2 + $7e * $10 + ld de, OverworldPikachuBallGFX + lb bc, BANK(OverworldPikachuBallGFX), 1 + jp CopyVideoDataDoubleAlternate + +Func_fd851: + ld hl, vNPCSprites + $c * $10 + ld a, 3 +.loop + push af + push hl + ld de, OverworldPikachuBallGFX + lb bc, BANK(OverworldPikachuBallGFX), 4 + call CopyVideoDataAlternate + pop hl + ld de, 4 * $10 + add hl, de + pop af + dec a + jr nz, .loop + ret + +OverworldPikachuBallGFX: +INCBIN "gfx/overworld/pikachu_ball.2bpp" + +LoadPikachuSpriteIntoVRAM: + ld de, PikachuSprite + lb bc, BANK(PikachuSprite), (SandshrewSprite - PikachuSprite) / 32 + ld hl, vNPCSprites + $c * $10 + push bc + call CopyVideoDataAlternate + ld de, PikachuSprite + $c * $10 + ld hl, vNPCSprites2 + $c * $10 + ldh a, [hFFFC] + and a + jr z, .load + ld de, PikachuSprite + $c * $10 + ld hl, vNPCSprites2 + $4c * $10 +.load + pop bc + call CopyVideoDataAlternate + call LoadPikachuShadowIntoVRAM + call LoadPikachuBallIconIntoVRAM + ret + +PikachuPewterPokecenterCheck: + ld a, [wCurMap] + cp PEWTER_POKECENTER + ret nz + call EnablePikachuFollowingPlayer + call StarterPikachuEmotionCommand_turnawayfromplayer + ret + +PikachuFanClubCheck: + ld a, [wCurMap] + cp POKEMON_FAN_CLUB + ret nz + call EnablePikachuFollowingPlayer + call StarterPikachuEmotionCommand_turnawayfromplayer + ret + +PikachuBillsHouseCheck: + ld a, [wCurMap] + cp BILLS_HOUSE + ret nz + call EnablePikachuFollowingPlayer + ret + +Pikachu_LoadCurrentMapViewUpdateSpritesAndDelay3: + call LoadCurrentMapView + call UpdateSprites + call Delay3 + ret + +Cosine_e: ; cosine? + ld a, e + add $10 + jr asm_fd908 + +Sine_e: ; sine? + ld a, e +asm_fd908: + and $3f + cp $20 + jr nc, .asm_fd913 + call GetSine + ld a, h + ret + +.asm_fd913 + and $1f + call GetSine + ld a, h + cpl + inc a + ret + +GetSine: + ld e, a + ld a, d + ld d, 0 + ld hl, SineWave_3f + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld hl, 0 +.asm_fd92b + srl a + jr nc, .asm_fd930 + add hl, de +.asm_fd930 + sla e + rl d + and a + jr nz, .asm_fd92b + ret + +SineWave_3f: + sine_wave $100 diff --git a/engine/pikachu/pikachu_pcm.asm b/engine/pikachu/pikachu_pcm.asm new file mode 100755 index 00000000..bf1aa57f --- /dev/null +++ b/engine/pikachu/pikachu_pcm.asm @@ -0,0 +1,154 @@ +PlayPikachuSoundClip:: + ld a, e + ld e, a + ld d, $0 + ld hl, PikachuCriesPointerTable + add hl, de + add hl, de + add hl, de + ld b, [hl] ; bank of pikachu cry data + inc hl + ld a, [hli] ; cry data pointer + ld h, [hl] + ld l, a + ld c, $4 +.loop + dec c + jr z, .done_delay + call DelayFrame + jr .loop + +.done_delay + di + push bc + push hl + ld a, $80 + ldh [rNR52], a + ld a, $77 + ldh [rNR50], a + xor a + ldh [rNR30], a + ld hl, rWave_0 ; wave data + ld de, wRedrawRowOrColumnSrcTiles +.saveWaveDataLoop + ld a, [hl] + ld [de], a + inc de + ld a, $ff + ld [hli], a + ld a, l + cp $40 ; end of wave data + jr nz, .saveWaveDataLoop + ld a, $80 + ldh [rNR30], a + ldh a, [rNR51] + or $44 + ldh [rNR51], a + ld a, $ff + ldh [rNR31], a + ld a, $20 + ldh [rNR32], a + ld a, $ff + ldh [rNR33], a + ld a, $87 + ldh [rNR34], a + pop hl + pop bc + call PlayPikachuPCM + xor a + ld [wc0f3], a + ld [wc0f4], a + ld a, $80 + ldh [rNR52], a + xor a + ldh [rNR30], a + ld hl, rWave_0 + ld de, wRedrawRowOrColumnSrcTiles +.reloadWaveDataLoop + ld a, [de] + inc de + ld [hli], a + ld a, l + cp $40 ; end of wave data + jr nz, .reloadWaveDataLoop + ld a, $80 + ldh [rNR30], a + ldh a, [rNR51] + and $bb + ldh [rNR51], a + xor a + ld [wChannelSoundIDs + Ch5], a + ld [wChannelSoundIDs + Ch6], a + ld [wChannelSoundIDs + Ch7], a + ld [wChannelSoundIDs + Ch8], a + ldh a, [hLoadedROMBank] + ei + ret + +PikachuCriesPointerTable:: +; format: +; db bank +; dw pointer to cry + +; bank 21 + pikacry_def PikachuCry1 + pikacry_def PikachuCry2 + pikacry_def PikachuCry3 + pikacry_def PikachuCry4 + +; bank 22 + pikacry_def PikachuCry5 + pikacry_def PikachuCry6 + pikacry_def PikachuCry7 + +; bank 23 + pikacry_def PikachuCry8 + pikacry_def PikachuCry9 + pikacry_def PikachuCry10 + +; bank 24 + pikacry_def PikachuCry11 + pikacry_def PikachuCry12 + pikacry_def PikachuCry13 + +; bank 25 + pikacry_def PikachuCry14 + pikacry_def PikachuCry15 + +; banks 31-34, in no particular order + + pikacry_def PikachuCry16 + pikacry_def PikachuCry17 + pikacry_def PikachuCry18 + pikacry_def PikachuCry19 + pikacry_def PikachuCry20 + pikacry_def PikachuCry21 + pikacry_def PikachuCry22 + pikacry_def PikachuCry23 + pikacry_def PikachuCry24 + pikacry_def PikachuCry25 + pikacry_def PikachuCry26 + +; bank 35 + pikacry_def PikachuCry27 + pikacry_def PikachuCry28 + pikacry_def PikachuCry29 + pikacry_def PikachuCry30 + pikacry_def PikachuCry31 + +; bank 36 + pikacry_def PikachuCry32 + pikacry_def PikachuCry33 + pikacry_def PikachuCry34 + +; bank 37 + pikacry_def PikachuCry35 + pikacry_def PikachuCry36 + +; banks 36-38 + pikacry_def PikachuCry37 + pikacry_def PikachuCry38 + pikacry_def PikachuCry39 + pikacry_def PikachuCry40 + pikacry_def PikachuCry41 + pikacry_def PikachuCry42 diff --git a/engine/pikachu/pikachu_pic_animation.asm b/engine/pikachu/pikachu_pic_animation.asm new file mode 100755 index 00000000..33a3e504 --- /dev/null +++ b/engine/pikachu/pikachu_pic_animation.asm @@ -0,0 +1,855 @@ +GetPikaPicAnimationScriptIndex: + ld hl, PikachuMoodLookupTable + ld a, [wPikachuMood] + ld d, a +.get_mood_param + ld a, [hli] + inc hl + cp d + jr c, .get_mood_param + dec hl + ld e, [hl] + ld hl, PikaPicAnimationScriptPointerLookupTable + ld a, [wPikachuHappiness] + ld d, a + ld bc, 6 +.get_happiness_param + ld a, [hl] + cp d + jr nc, .got_animation + add hl, bc + jr .get_happiness_param + +.got_animation + ld d, 0 + add hl, de + ld a, [hl] + ret + +PikachuMoodLookupTable: +; First byte: mood threshold +; Second byte: column index in PikaPicAnimationScriptPointerLookupTable + db 40, 1 + db 127, 2 + db 128, 3 + db 210, 4 + db 255, 5 + +PikaPicAnimationScriptPointerLookupTable: +; First byte: happiness threshold +; Remaining bytes: loaded based on Pikachu's mood + db 50 + dpikapic PikaPicAnimScript14 + dpikapic PikaPicAnimScript14 + dpikapic PikaPicAnimScript6 + dpikapic PikaPicAnimScript13 + dpikapic PikaPicAnimScript13 + + db 100 + dpikapic PikaPicAnimScript9 + dpikapic PikaPicAnimScript9 + dpikapic PikaPicAnimScript5 + dpikapic PikaPicAnimScript12 + dpikapic PikaPicAnimScript12 + + db 130 + dpikapic PikaPicAnimScript3 + dpikapic PikaPicAnimScript3 + dpikapic PikaPicAnimScript1 + dpikapic PikaPicAnimScript8 + dpikapic PikaPicAnimScript8 + + db 160 + dpikapic PikaPicAnimScript3 + dpikapic PikaPicAnimScript3 + dpikapic PikaPicAnimScript4 + dpikapic PikaPicAnimScript15 + dpikapic PikaPicAnimScript15 + + db 200 + dpikapic PikaPicAnimScript17 + dpikapic PikaPicAnimScript17 + dpikapic PikaPicAnimScript7 + dpikapic PikaPicAnimScript2 + dpikapic PikaPicAnimScript2 + + db 250 + dpikapic PikaPicAnimScript17 + dpikapic PikaPicAnimScript17 + dpikapic PikaPicAnimScript16 + dpikapic PikaPicAnimScript10 + dpikapic PikaPicAnimScript10 + + db 255 + dpikapic PikaPicAnimScript17 + dpikapic PikaPicAnimScript17 + dpikapic PikaPicAnimScript19 + dpikapic PikaPicAnimScript20 + dpikapic PikaPicAnimScript20 + +StarterPikachuEmotionCommand_pikapic: + ldh a, [hAutoBGTransferEnabled] + push af + xor a + ldh [hAutoBGTransferEnabled], a + ld a, [de] + ld [wPikaPicAnimNumber], a + inc de + push de + call .RunPikapic + pop de + pop af + ldh [hAutoBGTransferEnabled], a + ret + +.RunPikapic: + call PlacePikapicTextBoxBorder + callfar LoadOverworldPikachuFrontpicPalettes + call ResetPikaPicAnimBuffer + call LoadCurrentPikaPicAnimScriptPointer + call ExecutePikaPicAnimScript + call PlacePikapicTextBoxBorder + call RunDefaultPaletteCommand + ret + +ResetPikaPicAnimBuffer: + ld hl, wCurPikaMovementData + ld bc, wCurPikaMovementDataEnd - wCurPikaMovementData + xor a + call FillMemory + ld hl, wPikaPicAnimObjectDataBufferSize + ld bc, wPikaPicAnimObjectDataBufferEnd - wPikaPicAnimObjectDataBufferSize + xor a + call FillMemory + call ClearPikaPicUsedGFXBuffer + ld hl, 100 + ld a, l + ld [wPikaPicAnimTimer], a + ld a, h + ld [wPikaPicAnimTimer + 1], a + ld a, $7 + ld [wPikaPicPikaDrawStartX], a + ld a, $6 + ld [wPikaPicPikaDrawStartY], a + ret + +PlacePikapicTextBoxBorder: + xor a + ldh [hAutoBGTransferEnabled], a + hlcoord 6, 5 + lb bc, 5, 5 + call TextBoxBorder + call Delay3 + call UpdateSprites + ld a, $1 + ldh [hAutoBGTransferEnabled], a + call Delay3 + ret + +LoadCurrentPikaPicAnimScriptPointer: + ld a, [wPikaPicAnimNumber] + cp $1d + jr c, .valid + ld a, $0 +.valid + ld e, a + ld d, 0 + ld hl, PikaPicAnimPointers + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call UpdatePikaPicAnimPointer + ret + +pikapic_def: MACRO +\1_id: + dw \1 +ENDM + +PikaPicAnimPointers: + pikapic_def PikaPicAnimScript0 ; 00 + pikapic_def PikaPicAnimScript1 ; 01 + pikapic_def PikaPicAnimScript2 ; 02 + pikapic_def PikaPicAnimScript3 ; 03 + pikapic_def PikaPicAnimScript4 ; 04 + pikapic_def PikaPicAnimScript5 ; 05 + pikapic_def PikaPicAnimScript6 ; 06 + pikapic_def PikaPicAnimScript7 ; 07 + pikapic_def PikaPicAnimScript8 ; 08 + pikapic_def PikaPicAnimScript9 ; 09 + pikapic_def PikaPicAnimScript10 ; 0a + pikapic_def PikaPicAnimScript11 ; 0b + pikapic_def PikaPicAnimScript12 ; 0c + pikapic_def PikaPicAnimScript13 ; 0d + pikapic_def PikaPicAnimScript14 ; 0e + pikapic_def PikaPicAnimScript15 ; 0f + pikapic_def PikaPicAnimScript16 ; 10 + pikapic_def PikaPicAnimScript17 ; 11 + pikapic_def PikaPicAnimScript18 ; 12 + pikapic_def PikaPicAnimScript19 ; 13 + pikapic_def PikaPicAnimScript20 ; 14 + pikapic_def PikaPicAnimScript21 ; 15 + pikapic_def PikaPicAnimScript22 ; 16 + pikapic_def PikaPicAnimScript23 ; 17 + pikapic_def PikaPicAnimScript24 ; 18 + pikapic_def PikaPicAnimScript25 ; 19 + pikapic_def PikaPicAnimScript26 ; 1a + pikapic_def PikaPicAnimScript27 ; 1b + pikapic_def PikaPicAnimScript28 ; 1c + pikapic_def PikaPicAnimScript29 ; 1d + +ExecutePikaPicAnimScript: +.loop + xor a + ldh [hAutoBGTransferEnabled], a + call RunPikaPicAnimSetupScript + call DummyFunction_fdad5 + call AnimateCurrentPikaPicAnimFrame + call DummyFunction_fdad5 + ld a, $1 + ldh [hAutoBGTransferEnabled], a + call PikaPicAnimTimerAndJoypad + and a + jr z, .loop + ret + +PikaPicAnimTimerAndJoypad: + call Delay3 + call CheckPikaPicAnimTimer + and a + ret nz + call JoypadLowSensitivity + ldh a, [hJoyPressed] + and A_BUTTON | B_BUTTON + ret + +CheckPikaPicAnimTimer: + ld hl, wPikaPicAnimTimer + dec [hl] + jr nz, .not_done_yet + inc hl + ld a, [hl] + and a + jr z, .timer_expired + dec [hl] +.not_done_yet + xor a + ret + +.timer_expired + ld a, $1 + ret + +DummyFunction_fdad5: + ret + +AnimateCurrentPikaPicAnimFrame: + ld bc, wPikaPicAnimObjectDataBuffer + ld a, 4 +.loop + push af + push bc + ld hl, 0 ; struct index + add hl, bc + ld a, [hli] + and a + jr z, .skip + ld a, [hli] + ld [wCurPikaPicAnimObjectScriptIdx], a + ld a, [hli] + ld [wCurPikaPicAnimObjectFrameIdx], a + ld a, [hli] + ld [wCurPikaPicAnimObjectFrameTimer], a + ld a, [hli] + ld [wCurPikaPicAnimObjectVTileOffset], a + ld a, [hli] + ld [wCurPikaPicAnimObjectXOffset], a + ld a, [hli] + ld [wCurPikaPicAnimObjectYOffset], a + ld a, [hli] + ld [wCurPikaPicAnimObject + 6], a + push bc + call LoadPikaPicAnimObjectData + pop bc + ld hl, 1 ; script index + add hl, bc + ld a, [wCurPikaPicAnimObjectScriptIdx] + ld [hli], a + ld a, [wCurPikaPicAnimObjectFrameIdx] + ld [hli], a + ld a, [wCurPikaPicAnimObjectFrameTimer] + ld [hli], a + ld a, [wCurPikaPicAnimObjectVTileOffset] + ld [hli], a + ld a, [wCurPikaPicAnimObjectXOffset] + ld [hli], a + ld a, [wCurPikaPicAnimObjectYOffset] + ld [hli], a + ld a, [wCurPikaPicAnimObject + 6] + ld [hl], a +.skip + pop bc + ld hl, 8 + add hl, bc + ld b, h + ld c, l + pop af + dec a + jr nz, .loop + ret + +PikaPicAnimCommand_object: + ld hl, wPikaPicAnimObjectDataBuffer + ld de, 8 + ld c, 4 +.loop + ld a, [hl] + and a + jr z, .found + add hl, de + dec c + jr nz, .loop + scf + ret + +.found + ld a, [wPikaPicAnimObjectDataBufferSize] + inc a + ld [wPikaPicAnimObjectDataBufferSize], a + ld [hli], a + call GetPikaPicAnimByte + ld [hli], a + call GetPikaPicAnimByte + ld [hl], a + xor a + ld [hli], a ; overloads + ld [hli], a + call GetPikaPicAnimByte + ld [hli], a + call GetPikaPicAnimByte + ld [hli], a + call GetPikaPicAnimByte + ld [hli], a + and a + ret + +PikaPicAnimCommand_deleteobject: + call GetPikaPicAnimByte + ld b, a + ld hl, wPikaPicAnimObjectDataBuffer + ld de, 8 + ld c, 4 +.search + ld a, [hl] + cp b + jr z, .delete + add hl, de + dec c + jr nz, .search + scf + ret + +.delete + xor a + ld [hl], a + ret + +LoadPikaPicAnimObjectData: +.loop + ld a, [wCurPikaPicAnimObjectScriptIdx] + cp $23 + jr c, .valid + ld a, $4 +.valid + ld e, a + ld d, 0 + ld hl, PikaPicAnimBGFramesPointers + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wCurPikaPicAnimObjectFrameIdx] + ld e, a + ld d, 0 + add hl, de + add hl, de + ld a, [hli] + cp $e0 + jr z, .end + jr .init + +.end + xor a + ld [wCurPikaPicAnimObjectFrameIdx], a + ld [wCurPikaPicAnimObjectFrameTimer], a + jr .loop + +.init + push hl + call LoadCurPikaPicObjectTilemap + pop hl + ld a, [hl] + and a + jr z, .not_done ; lasts forever + ld a, [wCurPikaPicAnimObjectFrameTimer] + inc a + ld [wCurPikaPicAnimObjectFrameTimer], a + cp [hl] + jr nz, .not_done + xor a + ld [wCurPikaPicAnimObjectFrameTimer], a + ld a, [wCurPikaPicAnimObjectFrameIdx] + inc a + ld [wCurPikaPicAnimObjectFrameIdx], a +.not_done + ret + +INCLUDE "data/pikachu/pikachu_pic_objects.asm" + +LoadCurPikaPicObjectTilemap: + and a + ret z + ld e, a + ld d, 0 + ld hl, PikaPicTilemapPointers + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld a, [de] + ld c, a + inc de + ld a, [de] + ld b, a + inc de + push de + push bc + call .GetStartCoords + pop bc + pop de +.row + push bc + push hl + ld a, [wCurPikaPicAnimObjectVTileOffset] ; tile id offset + ld c, a +.col + ld a, [de] + inc de + cp $ff + jr z, .skip + add c + ld [hl], a +.skip + inc hl + dec b + jr nz, .col + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec c + jr nz, .row + ret + +.GetStartCoords: + push bc + ld a, [wCurPikaPicAnimObjectYOffset] ; Y offset + ld b, a + ld a, [wPikaPicPikaDrawStartY] + add b + hlcoord 0, 0 + ld bc, SCREEN_WIDTH + call AddNTimes + ld a, [wCurPikaPicAnimObjectXOffset] ; X offset + ld c, a + ld a, [wPikaPicPikaDrawStartX] + add c + ld c, a + ld b, 0 + add hl, bc + pop bc + ret + +INCLUDE "data/pikachu/pikachu_pic_tilemaps.asm" + +LoadPikaPicAnimGFXHeader: + push hl + ld e, a + ld d, 0 + ld hl, PikaPicAnimGFXHeaders + add hl, de + add hl, de + add hl, de + add hl, de + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + pop hl + ret + +RunPikaPicAnimSetupScript: + call .CheckAndAdvanceTimer + ret c + xor a + ld [wPikaPicAnimPointerSetupFinished], a +.loop + call GetPikaPicAnimByte + ld e, a + ld d, 0 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call JumpToAddress + ld a, [wPikaPicAnimPointerSetupFinished] + and a + jr z, .loop + ret + +.CheckAndAdvanceTimer: + ld a, [wPikaPicAnimDelay] + and a + ret z + dec a + ld [wPikaPicAnimDelay], a + scf + ret + +.Jumptable: + dw PikaPicAnimCommand_nop ; 00, 0 params + dw PikaPicAnimCommand_writebyte ; 01, 1 param + dw PikaPicAnimCommand_loadgfx ; 02, 1 param + dw PikaPicAnimCommand_object ; 03, 5 params + dw PikaPicAnimCommand_nop4 ; 04, 0 params + dw PikaPicAnimCommand_nop5 ; 05, 0 params + dw PikaPicAnimCommand_deleteobject ; 06, 1 param + dw PikaPicAnimCommand_nop7 ; 07, 0 params + dw PikaPicAnimCommand_nop8 ; 08, 0 params + dw PikaPicAnimCommand_jump ; 09, 1 dw param + dw PikaPicAnimCommand_setduration ; 0a, 1 dw param + dw PikaPicAnimCommand_cry ; 0b, 1 param + dw PikaPicAnimCommand_thunderbolt ; 0c, 0 params + dw PikaPicAnimCommand_run ; 0d, 0 params (ret) + dw PikaPicAnimCommand_ret ; 0e, 0 params (ret) + +PikaPicAnimCommand_nop: + ret + +PikaPicAnimCommand_ret: + ld a, 1 + ld [wPikaPicAnimTimer], a + xor a + ld [wPikaPicAnimTimer + 1], a + jr PikaPicAnimCommand_run + +; XXX + ret + +PikaPicAnimCommand_setduration: + call GetPikaPicAnimByte + ld [wPikaPicAnimTimer], a + call GetPikaPicAnimByte + ld [wPikaPicAnimTimer + 1], a + ret + +PikaPicAnimCommand_run: + ld a, $ff + ld [wPikaPicAnimPointerSetupFinished], a + ret + +PikaPicAnimCommand_writebyte: + call GetPikaPicAnimByte + ld [wPikaPicAnimDelay], a + ret + +PikaPicAnimCommand_nop4: +PikaPicAnimCommand_nop5: +PikaPicAnimCommand_nop7: +PikaPicAnimCommand_nop8: + ret + +PikaPicAnimCommand_jump: + call GetPikaPicAnimByte + ld l, a + call GetPikaPicAnimByte + ld h, a + call UpdatePikaPicAnimPointer + ret + +GetPikaPicAnimByte: + push hl + ld hl, wPikaPicAnimPointer + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [hli] + call UpdatePikaPicAnimPointer + pop hl + ret + +UpdatePikaPicAnimPointer: + push af + ld a, l + ld [wPikaPicAnimPointer], a + ld a, h + ld [wPikaPicAnimPointer + 1], a + pop af + ret + +PikaPicAnimCommand_loadgfx: + ld a, [wUpdateSpritesEnabled] + push af + ld a, $ff + ld [wUpdateSpritesEnabled], a + ldh a, [hAutoBGTransferEnabled] + push af + xor a + ldh [hAutoBGTransferEnabled], a + ldh a, [hTilesetType] + push af + xor a + ldh [hTilesetType], a + call GetPikaPicAnimByte + ld [wPikaPicAnimCurGraphicID], a + ld a, [wPikaPicAnimCurGraphicID] + call LoadPikaPicAnimGFXHeader + ld a, c + cp a, $ff + jr z, .compressed + call RequestPikaPicAnimGFX + jr .done + +.compressed + call DecompressRequestPikaPicAnimGFX +.done + pop af + ldh [hTilesetType], a + pop af + ldh [hAutoBGTransferEnabled], a + pop af + ld [wUpdateSpritesEnabled], a + ret + +RequestPikaPicAnimGFX: + push de + ld a, [wPikaPicAnimCurGraphicID] + ld d, a + ld e, c + call CheckIfThereIsRoomForPikaPicAnimGFX + pop de + jr c, .failed + call GetPikaPicVRAMAddressForNewGFX + call CopyVideoDataAlternate + and a +.failed + ret + +DecompressRequestPikaPicAnimGFX: + push de + ld a, [wPikaPicAnimCurGraphicID] + ld d, a + ld e, 5 * 5 + call CheckIfThereIsRoomForPikaPicAnimGFX + pop de + jr c, .failed + ld a, b + call UncompressSpriteFromDE + ld a, BANK(sSpriteBuffer1) + call SwitchSRAMBankAndLatchClockData + ld hl, sSpriteBuffer1 + ld de, sSpriteBuffer0 + ld bc, SPRITEBUFFERSIZE * 2 + call CopyData + call PrepareRTCDataAndDisableSRAM + ld a, [wPikaPicAnimCurGraphicID] + call LookUpTileOffsetForCurrentPikaPicAnimGFX + call GetPikaPicVRAMAddressForNewGFX + ld d, h + ld e, l + call InterlaceMergeSpriteBuffers +.failed + ret + +ClearPikaPicUsedGFXBuffer: + ld hl, wPikaPicUsedGFXCount + ld bc, wPikaPicUsedGFXEnd - wPikaPicUsedGFXCount + xor a + call FillMemory + ret + +GetPikaPicVRAMAddressForNewGFX: + ld hl, vNPCSprites + push bc + ld b, a + and $f + swap a + ld c, a + ld a, b + and $f0 + swap a + ld b, a + add hl, bc + pop bc + ret + +CheckIfThereIsRoomForPikaPicAnimGFX: +; d: idx +; e: size +; FATAL: If the graphic has already been loaded, or if there are +; already 8 graphics objects loaded, the game will execute arbitrary +; code. + push bc + push hl + ld hl, wPikaPicUsedGFX + ld c, 8 +.loop + ld a, [hl] + and a + jr z, .empty + cp d + jr z, .found + inc hl + inc hl + dec c + jr nz, .loop + scf + ret ; execute hl, then bc + +.found + inc hl + ld a, [hl] + ret ; execute hl, then bc + +.empty + ld [hl], d + inc hl + ld a, [wPikaPicUsedGFXCount] + add $80 + ld [hl], a + ld a, [wPikaPicUsedGFXCount] + add e + ld [wPikaPicUsedGFXCount], a + cp $80 + jr z, .okay + jr nc, .failed +.okay + ld a, [hl] + and a + jr .pop_ret + +.failed + scf +.pop_ret + pop hl + pop bc + ret + +LookUpTileOffsetForCurrentPikaPicAnimGFX: + push bc + push hl + ld b, a + ld hl, wPikaPicUsedGFX + ld c, 8 +.loop + ld a, [hli] + cp b + jr z, .found + inc hl + dec c + jr nz, .loop + scf + jr .pop_ret + +.found + ld a, [hl] + and a +.pop_ret + pop hl + pop bc + ret + +PikaPicAnimCommand_cry: + call GetPikaPicAnimByte + cp $ff + ret z + ld e, a + callfar PlayPikachuSoundClip + ret + +PikaPicAnimCommand_thunderbolt: + ld a, $1 + ld [wMuteAudioAndPauseMusic], a + call DelayFrame + ld a, [wAudioROMBank] + push af + ld a, BANK(SFX_Battle_2F) + ld [wAudioROMBank], a + ld [wAudioSavedROMBank], a + call .LoadAudio + call PlaySound + call .FlashScreen + call WaitForSoundToFinish + pop af + ld [wAudioROMBank], a + ld [wAudioSavedROMBank], a + xor a + ld [wMuteAudioAndPauseMusic], a + ret + +.LoadAudio: + ld hl, MoveSoundTable + ld e, THUNDERBOLT + ld d, 0 + add hl, de + add hl, de + add hl, de + ld a, BANK(MoveSoundTable) + call GetFarByte + ld b, a + inc hl + ld a, BANK(MoveSoundTable) + call GetFarByte + inc hl + ld [wFrequencyModifier], a + ld a, BANK(MoveSoundTable) + call GetFarByte + ld [wTempoModifier], a + ld a, b + ret + +.FlashScreen: + ld hl, PikaPicAnimThunderboltPals +.loop + ld a, [hli] + cp $ff + ret z + ld c, a + ld b, [hl] + inc hl + push hl + call .UpdatePal + pop hl + jr .loop + +.UpdatePal: + ld a, b + ldh [rBGP], a + call UpdateGBCPal_BGP + call DelayFrames + ret + +INCLUDE "data/pikachu/pikachu_pic_animation.asm" + +Func_fe66e: + ret diff --git a/engine/pikachu/pikachu_status.asm b/engine/pikachu/pikachu_status.asm new file mode 100755 index 00000000..c73d3b3f --- /dev/null +++ b/engine/pikachu/pikachu_status.asm @@ -0,0 +1,258 @@ +IsStarterPikachuInOurParty:: + ld hl, wPartySpecies + ld de, wPartyMon1OTID + ld bc, wPartyMonOT + push hl +.loop + pop hl + ld a, [hli] + push hl + inc a + jr z, .noPlayerPikachu + cp PIKACHU + 1 + jr nz, .curMonNotPlayerPikachu + ld h, d + ld l, e + ld a, [wPlayerID] + cp [hl] + jr nz, .curMonNotPlayerPikachu + inc hl + ld a, [wPlayerID+1] + cp [hl] + jr nz, .curMonNotPlayerPikachu + push de + push bc + ld hl, wPlayerName + ld d, $6 ; possible player length - 1 +.nameCompareLoop + dec d + jr z, .sameOT + ld a, [bc] + inc bc + cp [hl] + inc hl + jr z, .nameCompareLoop + pop bc + pop de +.curMonNotPlayerPikachu + ld hl, wPartyMon2 - wPartyMon1 + add hl, de + ld d, h + ld e, l + ld hl, NAME_LENGTH + add hl, bc + ld b, h + ld c, l + jr .loop + +.sameOT + pop bc + pop de + ld h, d + ld l, e + ld bc, -NAME_LENGTH + add hl, bc + ld a, [hli] + or [hl] + jr z, .noPlayerPikachu ; XXX how is this determined? + pop hl + scf + ret + +.noPlayerPikachu + pop hl + and a + ret + +IsThisPartymonStarterPikachu_Box:: + ld hl, wBoxMon1 + ld bc, wBoxMon2 - wBoxMon1 + ld de, wBoxMonOT + jr asm_fce21 + +IsThisPartymonStarterPikachu_Party:: +IsThisPartymonStarterPikachu:: + ld hl, wPartyMon1 + ld bc, wPartyMon2 - wPartyMon1 + ld de, wPartyMonOT +asm_fce21: + ld a, [wWhichPokemon] + call AddNTimes + ld a, [hl] + cp PIKACHU + jr nz, .notPlayerPikachu + ld bc, wPartyMon1OTID - wPartyMon1 + add hl, bc + ld a, [wPlayerID] + cp [hl] + jr nz, .notPlayerPikachu + inc hl + ld a, [wPlayerID+1] + cp [hl] + jr nz, .notPlayerPikachu + ld h, d + ld l, e + ld a, [wWhichPokemon] + ld bc, NAME_LENGTH + call AddNTimes + ld de, wPlayerName + ld b, $6 +.loop + dec b + jr z, .isPlayerPikachu + ld a, [de] + inc de + cp [hl] + inc hl + jr z, .loop +.notPlayerPikachu + and a + ret + +.isPlayerPikachu + scf + ret + +UpdatePikachuMoodAfterBattle:: +; because d is always $82 at this function, it serves to +; ensure Pikachu's mood is at least 130 after battle + push de + call IsStarterPikachuInOurParty + pop de + ret nc + ld a, d + cp 128 + ld a, [wPikachuMood] + jr c, .d_less_than_128 ; we never jump + cp d + jr c, .load_d_into_mood + ret + +.d_less_than_128 + cp d + ret c +.load_d_into_mood + ld a, d + ld [wPikachuMood], a + ret + +CheckPikachuFaintedOrStatused:: +; function to test if Pikachu is alive? + xor a + ld [wWhichPokemon], a + ld hl, wPartyCount +.loop + inc hl + ld a, [hl] + cp $ff + jr z, .dead_or_not_in_party + push hl + call IsThisPartymonStarterPikachu_Party + pop hl + jr nc, .next + ld a, [wWhichPokemon] + ld hl, wPartyMon1HP + ld bc, wPartyMon2 - wPartyMon1 + call AddNTimes + ld a, [hli] + or [hl] + ld d, a + inc hl + inc hl + ld a, [hl] ; status + and a + jr nz, .alive + jr .dead_or_not_in_party + +.next + ld a, [wWhichPokemon] + inc a + ld [wWhichPokemon], a + jr .loop + +.alive + scf + ret + +.dead_or_not_in_party + and a + ret + +IsSurfingPikachuInThePlayersParty:: + ld hl, wPartySpecies + ld de, wPartyMon1Moves + ld bc, wPartyMonOT + push hl +.loop + pop hl + ld a, [hli] + push hl + inc a + jr z, .noSurfingPlayerPikachu + cp PIKACHU+1 + jr nz, .curMonNotSurfingPlayerPikachu + ld h, d + ld l, e + push hl + push bc + ld b, NUM_MOVES +.moveSearchLoop + ld a, [hli] + cp SURF + jr z, .foundSurfingPikachu + dec b + jr nz, .moveSearchLoop + pop bc + pop hl + jr .curMonNotSurfingPlayerPikachu + +.foundSurfingPikachu + pop bc + pop hl + inc hl + inc hl + inc hl + inc hl + ld a, [wPlayerID] + cp [hl] + jr nz, .curMonNotSurfingPlayerPikachu + inc hl + ld a, [wPlayerID+1] + cp [hl] + jr nz, .curMonNotSurfingPlayerPikachu + push de + push bc + ld hl, wPlayerName + ld d, $6 +.nameCompareLoop + dec d + jr z, .foundSurfingPlayerPikachu + ld a, [bc] + inc bc + cp [hl] + inc hl + jr z, .nameCompareLoop + pop bc + pop de +.curMonNotSurfingPlayerPikachu + ld hl, wPartyMon2 - wPartyMon1 + add hl, de + ld d, h + ld e, l + ld hl, NAME_LENGTH + add hl, bc + ld b, h + ld c, l + jr .loop + +.foundSurfingPlayerPikachu + pop bc + pop de + pop hl + scf + ret + +.noSurfingPlayerPikachu + pop hl + and a + ret diff --git a/engine/pikachu/respawn_overworld_pikachu.asm b/engine/pikachu/respawn_overworld_pikachu.asm new file mode 100644 index 00000000..4b610085 --- /dev/null +++ b/engine/pikachu/respawn_overworld_pikachu.asm @@ -0,0 +1,6 @@ +RespawnOverworldPikachu: + callfar IsThisPartymonStarterPikachu_Party + ret nc + ld a, $3 + ld [wPikachuSpawnState], a + ret diff --git a/engine/pikachu_emotions.asm b/engine/pikachu_emotions.asm deleted file mode 100755 index 55262493..00000000 --- a/engine/pikachu_emotions.asm +++ /dev/null @@ -1,421 +0,0 @@ -IsPlayerTalkingToPikachu:: - ld a, [wd436] - and a - ret z - ldh a, [hSpriteIndexOrTextID] - cp $f - ret nz - call InitializePikachuTextID - xor a - ldh [hSpriteIndexOrTextID], a - ld [wd436], a - ret - -InitializePikachuTextID:: - ld a, TEXT_PIKACHU_ANIM ; display - ldh [hSpriteIndexOrTextID], a - xor a - ld [wPlayerMovingDirection], a - ld a, $1 - ld [wAutoTextBoxDrawingControl], a - call DisplayTextID - xor a - ld [wAutoTextBoxDrawingControl], a - ret - -DoStarterPikachuEmotions: - ld e, a - ld d, 0 - add hl, de - add hl, de - ld e, [hl] - inc hl - ld d, [hl] -.loop - ld a, [de] - inc de - cp $ff - jr z, .done - ld c, a - ld b, 0 - ld hl, StarterPikachuEmotionsJumptable - add hl, bc - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - call JumpToAddress - jr .loop - -.done - ret - -StarterPikachuEmotionsJumptable: - dw StarterPikachuEmotionCommand_nop ; 0 - dw StarterPikachuEmotionCommand_text ; 1 - dw StarterPikachuEmotionCommand_pcm ; 2 - dw StarterPikachuEmotionCommand_emote ; 3 - dw StarterPikachuEmotionCommand_movement ; 4 - dw StarterPikachuEmotionCommand_pikapic ; 5 - dw StarterPikachuEmotionCommand_subcmd ; 6 - dw StarterPikachuEmotionCommand_delay ; 7 - dw StarterPikachuEmotionCommand_nop2 ; 8 - dw StarterPikachuEmotionCommand_9 ; 9 - dw StarterPikachuEmotionCommand_nop3 ; a - -StarterPikachuEmotionCommand_nop: -StarterPikachuEmotionCommand_nop3: - ret - -StarterPikachuEmotionCommand_text: - ld a, [de] - ld l, a - inc de - ld a, [de] - ld h, a - inc de - push de - call PrintText - pop de - ret - -StarterPikachuEmotionCommand_pcm: - ld a, [de] - inc de - push de - ld e, a - nop - call PlayPikachuSoundClip_ - pop de - ret - -PlayPikachuSoundClip_: - cp $ff - ret z - callfar PlayPikachuSoundClip - ret - -StarterPikachuEmotionCommand_emote: - ld a, [wUpdateSpritesEnabled] - push af - ld a, $ff - ld [wUpdateSpritesEnabled], a - ld a, [de] - inc de - push de - call ShowPikachuEmoteBubble - pop de - pop af - ld [wUpdateSpritesEnabled], a - ret - -ShowPikachuEmoteBubble: - ld [wWhichEmotionBubble], a - ld a, $f ; Pikachu - ld [wEmotionBubbleSpriteIndex], a - predef EmotionBubble - ret - -StarterPikachuEmotionCommand_movement: - ld a, [de] - inc de - ld l, a - ld a, [de] - inc de - ld h, a - push de - ld b, BANK(DoStarterPikachuEmotions) - call ApplyPikachuMovementData_ - pop de - ret - -StarterPikachuEmotionCommand_delay: - ld a, [de] - inc de - push de - ld c, a - call DelayFrames - pop de - ret - -StarterPikachuEmotionCommand_subcmd: - ld a, [de] - inc de - push de - ld e, a - ld d, 0 - ld hl, .Subcommands - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - call JumpToAddress - pop de - ret - -.Subcommands: - dw LoadPikachuSpriteIntoVRAM - dw LoadFontTilePatterns - dw Pikachu_LoadCurrentMapViewUpdateSpritesAndDelay3 - dw WaitForTextScrollButtonPress - dw PikachuPewterPokecenterCheck - dw PikachuFanClubCheck - dw PikachuBillsHouseCheck - -StarterPikachuEmotionCommand_nop2: - ret - -StarterPikachuEmotionCommand_9: - push de - call StarterPikachuEmotionCommand_turnawayfromplayer - call UpdateSprites - pop de - ret - -StarterPikachuEmotionCommand_turnawayfromplayer: - ld a, [wSpritePlayerStateData1FacingDirection] - xor $4 - ld [wSpritePikachuStateData1FacingDirection], a - ret - -DeletedFunction_fcffb: -; Inexplicably empty. - rept 5 - nop - endr - ret - -PlaySpecificPikachuEmotion: - ld a, e - jr load_expression - -TalkToPikachu:: - call MapSpecificPikachuExpression - jr c, load_expression - call GetPikaPicAnimationScriptIndex - call DeletedFunction_fcffb -load_expression: - ld [wExpressionNumber], a - ld hl, PikachuEmotionTable - call DoStarterPikachuEmotions - ret - -PikachuEmotionTable: -pikaemotion_def: MACRO -\1_id: dw \1 - endm - - pikaemotion_def PikachuEmotion0 - pikaemotion_def PikachuEmotion1 - pikaemotion_def PikachuEmotion2 - pikaemotion_def PikachuEmotion3 - pikaemotion_def PikachuEmotion4 - pikaemotion_def PikachuEmotion5 - pikaemotion_def PikachuEmotion6 - pikaemotion_def PikachuEmotion7 - pikaemotion_def PikachuEmotion8 - pikaemotion_def PikachuEmotion9 - pikaemotion_def PikachuEmotion10 - pikaemotion_def PikachuEmotion11 - pikaemotion_def PikachuEmotion12 - pikaemotion_def PikachuEmotion13 - pikaemotion_def PikachuEmotion14 - pikaemotion_def PikachuEmotion15 - pikaemotion_def PikachuEmotion16 - pikaemotion_def PikachuEmotion17 - pikaemotion_def PikachuEmotion18 - pikaemotion_def PikachuEmotion19 - pikaemotion_def PikachuEmotion20 - pikaemotion_def PikachuEmotion21 ; used a fishing rod - pikaemotion_def PikachuEmotion22 - pikaemotion_def PikachuEmotion23 - pikaemotion_def PikachuEmotion24 - pikaemotion_def PikachuEmotion25 - pikaemotion_def PikachuEmotion26 ; wake up pikachu in pewter pokemon center - pikaemotion_def PikachuEmotion27 - pikaemotion_def PikachuEmotion28 - pikaemotion_def PikachuEmotion29 - pikaemotion_def PikachuEmotion30 - pikaemotion_def PikachuEmotion31 - pikaemotion_def PikachuEmotion32 - pikaemotion_def PikachuEmotion33 - -PikachuEmotion33: - db $ff - -MapSpecificPikachuExpression: - ld a, [wCurMap] - cp POKEMON_FAN_CLUB - jr nz, .notFanClub - ld hl, wd492 - bit 7, [hl] - ldpikaemotion a, PikachuEmotion29 - jr z, .play_emotion - call CheckPikachuFollowingPlayer - ldpikaemotion a, PikachuEmotion30 - jr nz, .play_emotion - jr .check_pikachu_status - -.notFanClub - ld a, [wCurMap] - cp PEWTER_POKECENTER - jr nz, .notPewterPokecenter - call CheckPikachuFollowingPlayer - ldpikaemotion a, PikachuEmotion26 - jr nz, .play_emotion - jr .check_pikachu_status - -.notPewterPokecenter - callfar Func_f24ae - ld a, e - cp $ff - jr nz, .play_emotion - jr .check_pikachu_status ; useless - -.check_pikachu_status - call IsPlayerPikachuAsleepInParty - ldpikaemotion a, PikachuEmotion11 - jr c, .play_emotion - callfar CheckPikachuFaintedOrStatused ; same bank - ldpikaemotion a, PikachuEmotion28 - jr c, .play_emotion - ld a, [wCurMap] - cp POKEMON_TOWER_1F - jr c, .notInLavenderTower - cp POKEMON_TOWER_7F + 1 - ldpikaemotion a, PikachuEmotion22 - jr c, .play_emotion -.notInLavenderTower - ld a, [wd49c] - and a - jr z, .mood_based_emotion - dec a - ld c, a - ld b, $0 - ld hl, .Emotions - add hl, bc - ld a, [hl] - jr .play_emotion - -.mood_based_emotion - and a - ret - -.play_emotion - scf - ret - -.Emotions: - dpikaemotion PikachuEmotion18 - dpikaemotion PikachuEmotion21 - dpikaemotion PikachuEmotion23 - dpikaemotion PikachuEmotion24 - dpikaemotion PikachuEmotion25 - -IsPlayerPikachuAsleepInParty: - xor a - ld [wWhichPokemon], a -.loop - ld a, [wWhichPokemon] - ld c, a - ld b, 0 - ld hl, wPartySpecies - add hl, bc - ld a, [hl] - cp $ff - jr z, .done - cp PIKACHU - jr nz, .curMonNotStarterPikachu - callfar IsThisPartymonStarterPikachu - jr nc, .curMonNotStarterPikachu - ld a, [wWhichPokemon] - ld hl, wPartyMon1Status - ld bc, wPartyMon2 - wPartyMon1 - call AddNTimes - ld a, [hl] - and SLP - jr z, .done - jr .curMonSleepingPikachu - -.curMonNotStarterPikachu - ld a, [wWhichPokemon] - cp PARTY_LENGTH - 1 - jr z, .done - inc a - ld [wWhichPokemon], a - jr .loop - -.curMonSleepingPikachu - scf - ret - -.done - and a - ret - -INCLUDE "data/pikachu_emotions.asm" - -PikachuWalksToNurseJoy: - ld a, $40 - ldh [hFFFC], a - call LoadPikachuSpriteIntoVRAM - call .GetMovementData - and a - jr z, .skip - call ApplyPikachuMovementData -.skip - xor a - ldh [hFFFC], a - ret - -.GetMovementData: - ld a, [wSpritePikachuStateData2MapY] - ld e, a - ld a, [wSpritePikachuStateData2MapX] - ld d, a - ld a, [wYCoord] - add 4 - cp e - jr z, .pikachu_at_same_y_as_player - jr nc, .pikachu_above_player - ld hl, .PikaMovementData1 - ld a, 1 - ret - -.pikachu_above_player - xor a - ret - -.pikachu_at_same_y_as_player - ld a, [wXCoord] - add 4 - cp d - jr c, .pikachu_to_right_of_player - ld hl, .PikaMovementData2 - ld a, 2 - ret - -.pikachu_to_right_of_player - ld hl, .PikaMovementData3 - ld a, 3 - ret - -.PikaMovementData1: - db $00 ; init - db $36 ; look up - db $2b ; walk up left - db $34 ; hop up right - db $3f ; ret - -.PikaMovementData2: - db $00 ; init - db $36 ; look up - db $34 ; hop up right - db $3f ; ret - -.PikaMovementData3: - db $00 ; init - db $36 ; look up - db $33 ; hop up left - db $3f ; ret diff --git a/engine/pikachu_follow.asm b/engine/pikachu_follow.asm deleted file mode 100755 index fd2fbc47..00000000 --- a/engine/pikachu_follow.asm +++ /dev/null @@ -1,1578 +0,0 @@ -ShouldPikachuSpawn:: -; possibly to test if pika should be out? - ld a, [wPikachuOverworldStateFlags] - bit 5, a - jr nz, .hide - ld a, [wPikachuOverworldStateFlags] - bit 7, a - jr nz, .hide - call IsStarterPikachuInOurParty - jr nc, .hide - ld a, [wWalkBikeSurfState] - and a - jr nz, .hide - scf - ret - -.hide - and a - ret - -SchedulePikachuSpawnForAfterText:: - ld hl, wPikachuOverworldStateFlags - bit 4, [hl] - res 4, [hl] - jr nz, .normal_spawn_state - call EnablePikachuFollowingPlayer - call ClearPikachuSpriteStateData - ld a, $ff - ld [wSpritePikachuStateData1ImageIndex], a - call ClearPikachuFollowCommandBuffer - call CalculatePikachuFacingDirection - ret - -.normal_spawn_state - call CalculatePikachuPlacementCoords - xor a - ld [wPikachuSpawnState], a - ld a, [wSpritePlayerStateData1FacingDirection] - ld [wSpritePikachuStateData1FacingDirection], a - ret - -ClearPikachuSpriteStateData:: - ld hl, wSpritePikachuStateData1PictureID - call .clear - ld hl, wSpritePikachuStateData2 -.clear - ld bc, $10 - xor a - call FillMemory - ret - -CalculatePikachuSpawnCoordsAndFacing:: - call CalculatePikachuPlacementCoords - call CalculatePikachuFacingDirection - xor a - ld [wPikachuSpawnState], a - ret - -CalculatePikachuPlacementCoords:: - ld bc, wSpritePikachuStateData1PictureID - ld a, [wYCoord] - add $4 - ld e, a - ld a, [wXCoord] - add $4 - ld d, a - ld a, [wPikachuSpawnState] - and a - jr z, .load_coords - cp $1 - jr z, .right_of_player - cp $2 - jr z, .check_player_facing2 - cp $3 - jr z, .load_coords - cp $4 - jr z, .below_player - cp $5 - jr z, .above_player - cp $6 - jr z, .left_of_player - cp $7 - jr z, .check_player_facing - jr .right_of_player - -.check_player_facing - ld a, [wSpritePlayerStateData1FacingDirection] - and a ; SPRITE_FACING_DOWN - jr z, .below_player - cp SPRITE_FACING_UP - jr z, .above_player - cp SPRITE_FACING_LEFT - jr z, .left_of_player - cp SPRITE_FACING_RIGHT - jr z, .right_of_player -.check_player_facing2 - ld a, [wSpritePlayerStateData1FacingDirection] - and a - jr nz, .check_up - dec e - jr .load_coords - -.check_up - cp SPRITE_FACING_UP - jr nz, .check_left - inc e - jr .load_coords - -.check_left - cp SPRITE_FACING_LEFT - jr nz, .left_of_player_2 - inc d - jr .load_coords - -.left_of_player_2 - dec d - jr .load_coords - -.right_of_player - inc d - jr .load_coords - -.left_of_player - dec d - jr .load_coords - -.below_player - inc e - jr .load_coords - -.above_player - dec e - jr .load_coords ; useless jr -.load_coords - ld hl, wSpritePlayerStateData2MapY - wSpritePlayerStateData1 - add hl, bc - ld [hl], e - inc hl - ld [hl], d - inc hl - ld [hl], $fe - push hl - ld hl, wd472 - set 5, [hl] - pop hl - ret - -CalculatePikachuFacingDirection:: - ld a, $49 - ld [wSpritePikachuStateData1PictureID], a - ld a, $ff - ld [wSpritePikachuStateData1ImageIndex], a - ld a, [wPikachuSpawnState] - and a - jr z, .copy_player_facing - cp $1 - jr z, .copy_player_facing - cp $3 - jr z, .force_facing_down - cp $4 - jr z, .copy_player_facing - cp $6 - jr z, .copy_player_facing - cp $7 - jr z, .face_the_other_way - call ComputePikachuFacingDirection - ret - -.copy_player_facing - ld a, [wSpritePlayerStateData1FacingDirection] - ld [wSpritePikachuStateData1FacingDirection], a - ret - -.force_facing_down - ld a, SPRITE_FACING_DOWN - ld [wSpritePikachuStateData1FacingDirection], a - ret - -.face_the_other_way - ld a, [wSpritePlayerStateData1FacingDirection] - xor $4 - ld [wSpritePikachuStateData1FacingDirection], a - ret - -SetPikachuSpawnOutside:: - ld a, [wCurMap] - cp OAKS_LAB - jr z, .oaks_lab - cp ROUTE_22_GATE - jr z, .route_22_gate - cp MT_MOON_B1F - jr z, .mt_moon_2 - cp ROCK_TUNNEL_1F - jr z, .rock_tunnel_1 - ld a, [wCurMap] - ld hl, Pointer_fc64b - call Pikachu_IsInArray ; similar to IsInArray, but not the same - jr c, .map_list_1 - ld a, [wCurMap] - ld hl, Pointer_fc653 - call Pikachu_IsInArray - jr nc, .not_map_list_2 - ld a, [wSpritePlayerStateData1FacingDirection] - and a - jr nz, .not_map_list_2 - ld a, $3 - jr .load - -.route_22_gate - ld a, [wSpritePlayerStateData1FacingDirection] - and a - jr z, .rock_tunnel_1 - jr .not_map_list_2 - -.mt_moon_2 - ld a, $3 - jr .load - -.map_list_1 - ld a, $4 - jr .load - -.oaks_lab - ld a, $6 - jr .load - -.not_map_list_2 - ld a, $1 - jr .load - -.rock_tunnel_1 - ld a, $3 -.load - ld [wPikachuSpawnState], a - ret - -Pointer_fc64b:: - db VICTORY_ROAD_2F - db ROUTE_7_GATE - db ROUTE_8_GATE - db ROUTE_16_GATE_1F - db ROUTE_18_GATE_1F - db ROUTE_15_GATE_1F - db ROUTE_11_GATE_1F - db $ff - -Pointer_fc653:: - db VIRIDIAN_FOREST_NORTH_GATE - db CERULEAN_BADGE_HOUSE - db CERULEAN_TRASHED_HOUSE - db VERMILION_DOCK - db CELADON_MANSION_1F - db ROUTE_2_GATE - db FUCHSIA_GOOD_ROD_HOUSE - db $ff - -SetPikachuSpawnWarpPad:: - ld a, [wCurMap] - cp VIRIDIAN_FOREST_NORTH_GATE - jr z, .viridian_forest_exit - cp VIRIDIAN_FOREST_SOUTH_GATE - jr z, .viridian_forest_entrance - ld a, [wCurMap] - ld hl, Pointer_fc68e - call Pikachu_IsInArray - jr c, .in_array - jr .not_in_array - -.viridian_forest_exit - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - jr z, .in_array - jr .not_in_array - -.viridian_forest_entrance - ld a, [wSpritePlayerStateData1FacingDirection] - and a ; SPRITE_FACING_DOWN - jr z, .not_in_array - jr .in_array - -.not_in_array - ld a, $0 - jr .load_spawn_state - -.in_array - ld a, $1 -.load_spawn_state - ld [wPikachuSpawnState], a - ret - -Pointer_fc68e:: - db VIRIDIAN_FOREST - db SAFARI_ZONE_CENTER_REST_HOUSE - db SAFARI_ZONE_WEST_REST_HOUSE - db SAFARI_ZONE_EAST_REST_HOUSE - db SAFARI_ZONE_NORTH_REST_HOUSE - db SAFARI_ZONE_SECRET_HOUSE - db SILPH_CO_ELEVATOR - db CELADON_MART_ELEVATOR - db CINNABAR_LAB_TRADE_ROOM - db CINNABAR_LAB_METRONOME_ROOM - db CINNABAR_LAB_FOSSIL_ROOM - db $ff - -SetPikachuSpawnBackOutside:: - ld a, [wCurMap] - cp ROUTE_22_GATE - jr z, .asm_fc6a7 - cp ROUTE_2_GATE - jr z, .asm_fc6b0 - jr .asm_fc6bd - -.asm_fc6a7 - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - jr z, .asm_fc6b9 - jr .asm_fc6bd - -.asm_fc6b0 - ld a, [wSpritePlayerStateData1FacingDirection] - cp SPRITE_FACING_UP - jr z, .asm_fc6b9 - jr .asm_fc6bd - -.asm_fc6b9 - ld a, $1 - jr .asm_fc6c1 - -.asm_fc6bd - ld a, $3 - jr .asm_fc6c1 - -.asm_fc6c1 - ld [wPikachuSpawnState], a - ret - -SetPikachuOverworldStateFlag2:: - push hl - ld hl, wPikachuOverworldStateFlags - set 2, [hl] - pop hl - ret - -ResetPikachuOverworldStateFlag2:: - push hl - ld hl, wPikachuOverworldStateFlags - res 2, [hl] - pop hl - ret - -SpawnPikachu_:: - call ResetPikachuOverworldStateFlag2 - call TrySpawnPikachu - ret nc - - push bc - call WillPikachuSpawnOnTheScreen - pop bc - ret c - - ld bc, wSpritePikachuStateData1 - ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 - add hl, bc - bit 7, [hl] - jp nz, Func_fc745 - ld a, [wFontLoaded] - bit 0, a - jp nz, Func_fc76a - call CheckPikachuFollowingPlayer - jp nz, Func_fc76a - ld a, [hl] - and $7f - cp $a - jr c, .valid - xor a -.valid - add a - ld e, a - ld d, 0 - ld hl, PointerTable_fc710 - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -PointerTable_fc710: - dw Func_fc793 - dw Func_fc7aa - dw Func_fc803 - dw asm_fc9c3 - dw asm_fca1c - dw asm_fc9ee - dw asm_fc87f - dw asm_fc904 - dw asm_fc937 - dw asm_fc969 - dw .nop - -.nop: - ret - -TrySpawnPikachu: - call ShouldPikachuSpawn - jr nc, .dont_spawn - ld a, [wSpritePikachuStateData1MovementStatus] - and a - jr nz, .already_spawned - push bc - push hl - call CalculatePikachuSpawnCoordsAndFacing - pop hl - pop bc -.already_spawned - scf - ret - -.dont_spawn - ld hl, wSpritePikachuStateData1ImageIndex - ld [hl], $ff - dec hl - ld [hl], $0 - xor a - ret - -Func_fc745: - ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 - add hl, bc - res 7, [hl] - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - ld [hl], a - call CheckPikachuFollowingPlayer - jr nz, .okay - ; Have Pikachu face in the opposite direction of you - ld a, [wSpritePlayerStateData1FacingDirection] - xor $4 - ld hl, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1 - add hl, bc - ld [hl], a -.okay - xor a - ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1 - add hl, bc - ld [hli], a - ld [hl], a - call UpdatePikachuWalkingSprite - ret - -Func_fc76a: - xor a - ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1 - add hl, bc - ld [hli], a - ld [hl], a - call UpdatePikachuWalkingSprite - call Func_fc82e - jr c, .skip - push bc - callfar InitializeSpriteScreenPosition - pop bc -.skip - ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 - add hl, bc - ld [hl], $1 - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - ld [hl], $0 - call RefreshPikachuFollow - ret - -Func_fc793: - call RefreshPikachuFollow - push bc - callfar InitializeSpriteScreenPosition - pop bc - ld hl, wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1 - add hl, bc - ld [hl], $ff - dec hl - ld [hl], $1 - ret - -Func_fc7aa: - call Func_fcc92 - jp c, Func_fc803 - dec a - ld l, a - ld h, $0 - add hl, hl - add hl, hl - ld de, Pointer_fc7e3 - add hl, de - ld d, h - ld e, l - ld a, [de] - inc de - ld hl, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1 - add hl, bc - ld [hl], a - ld a, [de] - inc de - ld hl, wSpritePikachuStateData1XStepVector - wSpritePikachuStateData1 - add hl, bc - ld [hl], a - dec hl - dec hl - ld a, [de] - ld [hl], a - inc de - ld a, [de] - ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 - add hl, bc - ld [hl], a - cp $4 - jp z, Func_fca0a - call AreThereAtLeastTwoStepsInPikachuFollowCommandBuffer - jp c, FastPikachuFollow - jp NormalPikachuFollow - -Pointer_fc7e3: - db 0, 0 - db 1, 3 - db 4, 0 - db -1, 3 - db 8, -1 - db 0, 3 - db 12, 1 - db 0, 3 - db 0, 0 - db 1, 4 - db 4, 0 - db -1, 4 - db 8, -1 - db 0, 4 - db 12, 1 - db 0, 4 - -Func_fc803: - call Func_fcae2 - ret c - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - dec [hl] - jr nz, .asm_fc823 - push hl - call GetPikachuFollowCommand - pop hl - cp $5 - jr nc, Func_fc842 - ld [hl], $20 - call Random - and $c - ld hl, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1 - add hl, bc - ld [hl], a -.asm_fc823 - xor a - ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1 - add hl, bc - ld [hli], a - ld [hl], a - call UpdatePikachuWalkingSprite - ret - -Func_fc82e: - ld a, [wWalkCounter] - and a - ret z - scf - ret - -Func_fc835: - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - ld [hl], $10 - ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 - add hl, bc - ld [hl], $1 - ret - -Func_fc842: - ld hl, $0 - push af - call Random - ldh a, [hRandomAdd] - and %11 - ld e, a - ld d, $0 - ld hl, PointerTable_fc85a - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - pop af - jp hl - -PointerTable_fc85a: - dw Func_fc862 - dw Func_fc8f8 - dw Func_fc92b - dw Func_fc95d - -Func_fc862: - dec a - add a - add a - and $c - ld hl, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1 - add hl, bc - ld [hl], a - ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 - add hl, bc - ld [hl], $6 - xor a - ld [wd432], a - ld [wd433], a - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - ld [hl], $11 -asm_fc87f: - ld a, [wd432] - ld e, a - ld a, [wd433] - ld d, a - call Func_fc82e - jr c, Func_fc8c7 - call SetPikachuOverworldStateFlag2 - ld hl, wSpritePikachuStateData1YPixels - wSpritePikachuStateData1 - add hl, bc - ld a, [hl] - sub e - ld e, a - inc hl - inc hl - ld a, [hl] - sub d - ld d, a - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - ld a, [hl] - dec a - add a - add Pointer_fc8d6 % $100 - ld l, a - ld a, Pointer_fc8d6 / $100 - adc $0 - ld h, a - ld a, [hli] - ld [wd432], a - add e - ld e, a - ld a, [hl] - ld [wd433], a - add d - ld d, a - ld hl, wSpritePikachuStateData1YPixels - wSpritePikachuStateData1 - add hl, bc - ld [hl], e - inc hl - inc hl - ld [hl], d - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - dec [hl] - ret nz - jp Func_fc835 - -Func_fc8c7: - ld hl, wSpritePikachuStateData1YPixels - wSpritePikachuStateData1 - add hl, bc - ld a, [hl] - sub e - ld [hl], a - inc hl - inc hl - ld a, [hl] - sub d - ld [hl], a - jp Func_fc835 - -Pointer_fc8d6: - db 0, 0 - db -2, 1 - db -4, 2 - db -2, 3 - db 0, 4 - db -2, 3 - db -4, 2 - db -2, 1 - db 0, 0 - db -2, -1 - db -4, -2 - db -2, -3 - db 0, -4 - db -2, -3 - db -4, -2 - db -2, -1 - db 0, 0 - -Func_fc8f8: - ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 - add hl, bc - ld [hl], $7 - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - ld [hl], $30 -asm_fc904: - call Func_fc82e - jp c, Func_fc835 - call SetPikachuOverworldStateFlag2 - ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1 - add hl, bc - ld a, [hl] - inc a - cp $8 - ld [hl], a - jr nz, .asm_fc91f - xor a - ld [hli], a - ld a, [hl] - inc a - and %11 - ld [hl], a -.asm_fc91f - call UpdatePikachuWalkingSprite - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - dec [hl] - ret nz - jp Func_fc835 - -Func_fc92b: - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - ld [hl], $20 - ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 - add hl, bc - ld [hl], $8 -asm_fc937: - call Func_fc82e - jp c, Func_fc835 - call SetPikachuOverworldStateFlag2 - ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1 - add hl, bc - ld a, [hl] - inc a - cp $8 - ld [hl], a - jr nz, .asm_fc951 - xor a - ld [hli], a - ld a, [hl] - xor $1 - ld [hl], a -.asm_fc951 - call UpdatePikachuWalkingSprite - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - dec [hl] - ret nz - jp Func_fc835 - -Func_fc95d: - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - ld [hl], $20 - ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 - add hl, bc - ld [hl], $9 -asm_fc969: - call Func_fc82e - jp c, Func_fc835 - call SetPikachuOverworldStateFlag2 - ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1 - add hl, bc - ld a, [hl] - inc a - cp $8 - ld [hl], a - jr nz, .skip - xor a - ld [hl], a - ld hl, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1 - add hl, bc - ld a, [hl] - call .TurnClockwise - ld [hl], a -.skip - call UpdatePikachuWalkingSprite - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - dec [hl] - ret nz - jp Func_fc835 - -.TurnClockwise: - push hl - ld hl, .Facings - ld d, a -.loop - ld a, [hli] - cp d - jr nz, .loop - ld a, [hl] - pop hl - ret - -.TurnCounterclockwise: - push hl - ld hl, .Facings_End - ld d, a -.loop_ - ld a, [hld] - cp d - jr nz, .loop_ - ld a, [hl] - pop hl - ret - -.Facings: - db SPRITE_FACING_DOWN, SPRITE_FACING_LEFT, SPRITE_FACING_UP, SPRITE_FACING_RIGHT - db SPRITE_FACING_DOWN, SPRITE_FACING_LEFT, SPRITE_FACING_UP, SPRITE_FACING_RIGHT -.Facings_End: - -NormalPikachuFollow: - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - ld [hl], $8 - ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 - add hl, bc - ld [hl], $3 - call AddPikachuStepVector -asm_fc9c3: - call TryDoubleAddPikachuStepVectorToScreenPixelCoords - call GetPikachuWalkingAnimationSpeed - call UpdatePikachuWalkingSprite - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - dec [hl] - ret nz - call ResetPikachuStepVector - call ComputePikachuFacingDirection - ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 - add hl, bc - ld [hl], $1 - ret - -FastPikachuFollow: - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - ld [hl], $4 - ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 - add hl, bc - ld [hl], $5 - call AddPikachuStepVector -asm_fc9ee: - call DoubleAddPikachuStepVectorToScreenPixelCoords - call GetPikachuWalkingAnimationSpeed - call UpdatePikachuWalkingSprite - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - dec [hl] - ret nz - call ResetPikachuStepVector - call ComputePikachuFacingDirection - ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 - add hl, bc - ld [hl], $1 - ret - -Func_fca0a: - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - ld [hl], $8 - ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 - add hl, bc - ld [hl], $4 - call AddPikachuStepVector - call AddPikachuStepVector -asm_fca1c: - call DoubleAddPikachuStepVectorToScreenPixelCoords - call GetPikachuWalkingAnimationSpeed - call UpdatePikachuWalkingSprite - ld hl, wSpritePikachuStateData2WalkAnimationCounter - wSpritePikachuStateData1 - add hl, bc - dec [hl] - ret nz - call ResetPikachuStepVector - call ComputePikachuFacingDirection - ld hl, wSpritePikachuStateData1MovementStatus - wSpritePikachuStateData1 - add hl, bc - ld [hl], $1 - ret - -AddPikachuStepVector: - ld hl, wSpritePikachuStateData1YStepVector - wSpritePikachuStateData1 - add hl, bc - ld e, [hl] - inc hl - inc hl - ld d, [hl] - ld hl, wSpritePikachuStateData2MapY - wSpritePikachuStateData1 - add hl, bc - ld a, [hl] - add e - ld [hli], a - ld a, [hl] - add d - ld [hl], a - ret - -TryDoubleAddPikachuStepVectorToScreenPixelCoords: - ld a, [wWalkBikeSurfState] - cp $1 ; biking - jr nz, AddPikachuStepVectorToScreenPixelCoords - ld a, [wd736] - bit 6, a - jr nz, AddPikachuStepVectorToScreenPixelCoords -DoubleAddPikachuStepVectorToScreenPixelCoords: - ld hl, wSpritePikachuStateData1YStepVector - wSpritePikachuStateData1 - add hl, bc - ld a, [hli] - add a - add a - add [hl] - ld [hli], a - ld a, [hli] - add a - add a - add [hl] - ld [hl], a - ret - -AddPikachuStepVectorToScreenPixelCoords: - ld hl, wSpritePikachuStateData1YStepVector - wSpritePikachuStateData1 - add hl, bc - ld a, [hli] - add a - add [hl] - ld [hli], a - ld a, [hli] - add a - add [hl] - ld [hli], a - ret - -ResetPikachuStepVector: - ld hl, wSpritePikachuStateData1YStepVector - wSpritePikachuStateData1 - add hl, bc - xor a - ld [hli], a - inc hl - ld [hl], a - ret - -GetPikachuWalkingAnimationSpeed: - call ComparePikachuHappinessTo80 - ld d, $2 - jr nc, .happy - ld d, $5 -.happy - ld hl, wSpritePikachuStateData1IntraAnimFrameCounter - wSpritePikachuStateData1 - add hl, bc - ld a, [hl] - inc a - cp d - jr nz, .dont_reset - xor a -.dont_reset - ld [hli], a - ret nz - ld a, [hl] - inc a - and $3 - ld [hl], a - ret - -UpdatePikachuWalkingSprite: - ld a, [wPikachuOverworldStateFlags] - bit 3, a - jr nz, .uninitialized - ld hl, wSpritePikachuStateData2ImageBaseOffset - wSpritePikachuStateData1 - add hl, bc - ld a, [hl] - dec a - swap a - ld d, a - ld a, [wd736] - bit 7, a - jr nz, .copy_player - ld hl, wSpritePikachuStateData1FacingDirection - wSpritePikachuStateData1 - add hl, bc - ld a, [hl] - or d - ld d, a - ld a, [wFontLoaded] - bit 0, a - jr z, .normal_get_sprite_index - call Func_fcae2 - ret c - jr .load_sprite_index - -.normal_get_sprite_index - ld hl, wSpritePikachuStateData1AnimFrameCounter - wSpritePikachuStateData1 - add hl, bc - ld a, d - or [hl] - ld d, a -.load_sprite_index - ld hl, wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1 - add hl, bc - ld [hl], d - ret - -.uninitialized - ld hl, wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1 - add hl, bc - ld [hl], $ff - ret - -.copy_player - ld a, [wSpritePlayerStateData1ImageIndex] - and $f - or d - ld [wSpritePikachuStateData1ImageIndex], a - ret - -Func_fcae2: - ld hl, wSpritePikachuStateData2MapY - wSpritePikachuStateData1 - add hl, bc - ld a, [wYCoord] - add $4 - cp [hl] - jr nz, .on_screen - inc hl - ld a, [wXCoord] - add $4 - cp [hl] - jr nz, .on_screen - ld hl, wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1 - add hl, bc - ld [hl], $ff - scf - ret - -.on_screen - and a - ret - -IsPikachuRightNextToPlayer: - push bc - push de - push hl - ld bc, wSpritePikachuStateData1PictureID - ld a, [wXCoord] - add $4 - ld d, a - ld a, [wYCoord] - add $4 - ld e, a - ld hl, wSpritePlayerStateData2MapY - wSpritePlayerStateData1 - add hl, bc - ld a, [hl] - sub e - and a - jr z, .equal - cp $ff - jr z, .one_away - cp $1 - jr z, .one_away - jr .bad - -.one_away - ld hl, wSpritePlayerStateData2MapX - wSpritePlayerStateData1 - add hl, bc - ld a, [hl] - sub d - jr z, .good - jr .bad - -.equal - ld hl, wSpritePlayerStateData2MapX - wSpritePlayerStateData1 - add hl, bc - ld a, [hl] - sub d - cp $ff - jr z, .good - cp $1 - jr z, .good - and a - jr z, .good - jr .bad - -.good - pop hl - pop de - pop bc - scf - ret - -.bad - pop hl - pop de - pop bc - xor a - ret - -GetPikachuFacingDirectionAndReturnToE:: - call GetPikachuFacingDirection - ld e, a - ret - -GetPikachuFacingDirection: - ld bc, wSpritePikachuStateData1PictureID - ld a, [wXCoord] - add $4 - ld d, a - ld a, [wYCoord] - add $4 - ld e, a - ld hl, wSpritePlayerStateData2MapY - wSpritePlayerStateData1 - add hl, bc - ld a, [hl] - cp e - jr z, .asm_fcb71 - jr nc, .asm_fcb6e - ld a, SPRITE_FACING_UP - ret - -.asm_fcb6e - ld a, SPRITE_FACING_DOWN - ret - -.asm_fcb71 - ld hl, wSpritePlayerStateData2MapX - wSpritePlayerStateData1 - add hl, bc - ld a, [hl] - cp d - jr z, .asm_fcb81 - jr nc, .asm_fcb7e - ld a, SPRITE_FACING_LEFT - ret - -.asm_fcb7e - ld a, SPRITE_FACING_RIGHT - ret - -.asm_fcb81 - ld a, $ff ; standing - ret - -ClearPikachuFollowCommandBuffer: - push bc - ld hl, wPikachuFollowCommandBufferSize - ld [hl], $ff - inc hl - ld bc, $10 - xor a - call FillMemory - pop bc - ret - -AppendPikachuFollowCommandToBuffer: - ld hl, wPikachuFollowCommandBufferSize - inc [hl] - ld e, [hl] - ld d, 0 - ld hl, wPikachuFollowCommandBuffer - add hl, de - ld [hl], a - ret - -RefreshPikachuFollow: - call ClearPikachuFollowCommandBuffer - call ComputePikachuFollowCommand - ret c - call AppendPikachuFollowCommandToBuffer - ret - -ComputePikachuFollowCommand: - ld bc, wSpritePikachuStateData1PictureID - ld hl, wSpritePlayerStateData2MapY - wSpritePlayerStateData1 - add hl, bc - ld a, [wYCoord] - add $4 - sub [hl] - jr z, .checkXCoord - jr c, .pikaAbovePlayer - call CheckAbsoluteValueLessThan2 - jr c, .return1 - ld a, $5 - and a - ret - -.return1 - ld a, $1 - and a - ret - -.pikaAbovePlayer - call CheckAbsoluteValueLessThan2 - jr c, .return2 - ld a, $6 - and a - ret - -.return2 - ld a, $2 - and a - ret - -.checkXCoord - ld hl, wSpritePlayerStateData2MapX - wSpritePlayerStateData1 - add hl, bc - ld a, [wXCoord] - add $4 - sub [hl] - jr z, .pikachuOnTopOfPlayer - jr c, .pikaToLeftOfPlayer - call CheckAbsoluteValueLessThan2 - jr c, .return4 - ld a, $8 - and a - ret - -.return4 - ld a, $4 - and a - ret - -.pikaToLeftOfPlayer - call CheckAbsoluteValueLessThan2 - jr c, .return3 - ld a, $7 - and a - ret - -.return3 - ld a, $3 - and a - ret - -.pikachuOnTopOfPlayer - scf - ret - -CheckAbsoluteValueLessThan2: - jr nc, .positive - cpl - inc a -.positive - cp $2 - ret - -Func_fcc08:: - call Func_fcc23 - ret nc - ld a, [wd736] - bit 6, a - jr nz, .asm_fcc1b - call Func_fcc42 - ret c - call AppendPikachuFollowCommandToBuffer - ret - -.asm_fcc1b - call Func_fcc64 - ret c - call AppendPikachuFollowCommandToBuffer - ret - -Func_fcc23: - ld a, [wPikachuOverworldStateFlags] - bit 5, a - jr nz, .asm_fcc40 - ld a, [wPikachuOverworldStateFlags] - bit 7, a - jr nz, .asm_fcc40 - ld a, [wd472] - bit 7, a - jr z, .asm_fcc40 - ld a, [wWalkBikeSurfState] - and a - jr nz, .asm_fcc40 - scf - ret - -.asm_fcc40 - and a - ret - -Func_fcc42: - xor a - ld a, [wPlayerDirection] - bit 3, a - jr nz, .asm_fcc58 - bit 2, a - jr nz, .asm_fcc5b - bit 1, a - jr nz, .asm_fcc5e - bit 0, a - jr nz, .asm_fcc61 - scf - ret - -.asm_fcc58 - ld a, $2 - ret - -.asm_fcc5b - ld a, $1 - ret - -.asm_fcc5e - ld a, $3 - ret - -.asm_fcc61 - ld a, $4 - ret - -Func_fcc64: - ld hl, wPikachuOverworldStateFlags - bit 6, [hl] - jr z, .asm_fcc6e - res 6, [hl] - ret - -.asm_fcc6e - set 6, [hl] - xor a - ld a, [wPlayerDirection] - bit 3, a - jr nz, .asm_fcc86 - bit 2, a - jr nz, .asm_fcc89 - bit 1, a - jr nz, .asm_fcc8c - bit 0, a - jr nz, .asm_fcc8f - scf - ret - -.asm_fcc86 - ld a, $6 - ret - -.asm_fcc89 - ld a, $5 - ret - -.asm_fcc8c - ld a, $7 - ret - -.asm_fcc8f - ld a, $8 - ret - -Func_fcc92: - ld hl, wPikachuFollowCommandBufferSize - ld a, [hl] - cp $ff - jr z, .asm_fccb0 - and a - jr z, .asm_fccb0 - dec [hl] - ld e, a - ld d, 0 - ld hl, wPikachuFollowCommandBuffer - add hl, de - inc e - ld a, $ff -.asm_fcca8 - ld d, [hl] - ldd [hl], a - ld a, d - dec e - jr nz, .asm_fcca8 - and a - ret - -.asm_fccb0 - scf - ret - -ComputePikachuFacingDirection:: - call GetPikachuFollowCommandIfBufferSizeNonzero - and a - jr z, .check_y - dec a - and $3 - add a - add a - jr .load - -.check_y - ld a, [wYCoord] - add $4 - ld d, a - ld a, [wXCoord] - add $4 - ld e, a - ld a, [wSpritePikachuStateData2MapY] - cp d - jr z, .check_x - ld a, SPRITE_FACING_DOWN - jr c, .load - ld a, SPRITE_FACING_UP - jr .load - -.check_x - ld a, [wSpritePikachuStateData2MapX] - cp e - jr z, .copy_from_player - ld a, SPRITE_FACING_RIGHT - jr c, .load - ld a, SPRITE_FACING_LEFT - jr .load - -.copy_from_player - ld a, [wSpritePlayerStateData1FacingDirection] -.load - ld [wSpritePikachuStateData1FacingDirection], a - ret - -GetPikachuFollowCommand: - ld hl, wPikachuFollowCommandBufferSize - ld a, [hl] - cp $ff - jr z, .asm_fccff - ld e, a - ld d, 0 - ld hl, wPikachuFollowCommandBuffer - add hl, de - ld a, [hl] - ret - -.asm_fccff - xor a - ret - -GetPikachuFollowCommandIfBufferSizeNonzero: - ld hl, wPikachuFollowCommandBufferSize - ld a, [hl] - cp $ff - jr z, .default - and a - jr z, .default - ld e, a - ld d, 0 - ld hl, wPikachuFollowCommandBuffer - add hl, de - ld a, [hl] - ret - -.default - xor a - ret - -AreThereAtLeastTwoStepsInPikachuFollowCommandBuffer: - ld a, [wPikachuFollowCommandBufferSize] - cp $ff - ret z - cp $2 - jr nc, .set_carry - and a - ret - -.set_carry - scf - ret - -WillPikachuSpawnOnTheScreen: - ld h, wSpriteStateData2 / $100 - ldh a, [hCurrentSpriteOffset] ; If we're here, this can only be $f0 - add wSpritePikachuStateData2MapY - wSpritePikachuStateData2 - ld l, a - ld b, [hl] - ld a, [wYCoord] - cp b - jr z, .same_y - jr nc, .not_on_screen - add (SCREEN_HEIGHT / 2) - 1 - cp b - jr c, .not_on_screen -.same_y - inc l - ld b, [hl] - ld a, [wXCoord] - cp b - jr z, .same_x - jr nc, .not_on_screen - add (SCREEN_WIDTH / 2) - 1 - cp b - jr c, .not_on_screen -.same_x - call .GetNPCCurrentTile - ld d, $60 - ld a, [hli] - ld e, a - cp d - jr nc, .not_on_screen - ld a, [hld] - cp d - jr nc, .not_on_screen - ld bc, -20 - add hl, bc - ld a, [hli] - cp d - jr nc, .not_on_screen - ld a, [hl] - cp d - jr c, .on_screen -.not_on_screen - ld h, wSpriteStateData1 / $100 - ldh a, [hCurrentSpriteOffset] - add wSpritePikachuStateData1ImageIndex - wSpritePikachuStateData1 - ld l, a - ld [hl], $ff - scf - jr .return - -.on_screen - ld h, wSpriteStateData2 / $100 - ldh a, [hCurrentSpriteOffset] - add wSpritePikachuStateData2GrassPriority - wSpritePikachuStateData2 - ld l, a - ld a, [wGrassTile] - cp e - ld a, $0 - jr nz, .priority - ld a, $80 -.priority - ld [hl], a - and a -.return - ret - -.GetNPCCurrentTile: - ld h, wSpriteStateData1 / $100 - ldh a, [hCurrentSpriteOffset] - add wSpritePikachuStateData1YPixels - wSpritePikachuStateData1 - ld l, a - ld a, [hli] - add $4 - and $f0 - srl a - ld c, a - ld b, $0 - inc l - ld a, [hl] - add $2 - srl a - srl a - srl a - add SCREEN_WIDTH - ld d, 0 - ld e, a - ld hl, wTileMap - rept 5 - add hl, bc - endr - add hl, de - ret - -ComparePikachuHappinessTo80: -; preserves a and bc - push bc - push af - ld a, [wPikachuHappiness] - cp 80 - pop bc - ld a, b - pop bc - ret diff --git a/engine/pikachu_movement.asm b/engine/pikachu_movement.asm deleted file mode 100755 index 2d87e947..00000000 --- a/engine/pikachu_movement.asm +++ /dev/null @@ -1,1048 +0,0 @@ -ApplyPikachuMovementData_:: - ld a, b - ld [wPikachuMovementScriptBank], a - ld a, l - ld [wPikachuMovementScriptAddress], a - ld a, h - ld [wPikachuMovementScriptAddress + 1], a - call .SwapSpriteStateData -.loop - call LoadPikachuMovementCommandData - jr nc, .done - call ExecutePikachuMovementCommand - jr .loop - -.done - call .SwapSpriteStateData - call DelayFrame - ret - -.SwapSpriteStateData: - ld a, [wUpdateSpritesEnabled] - push af - ld a, $ff - ld [wUpdateSpritesEnabled], a - push hl - push de - push bc - - ld hl, wSpritePlayerStateData1 - ld de, wSpritePikachuStateData1 - ld c, $10 - call .SwapBytes - - ld hl, wSpritePlayerStateData2 - ld de, wSpritePikachuStateData2 - ld c, $10 - call .SwapBytes - - pop bc - pop de - pop hl - pop af - ld [wUpdateSpritesEnabled], a - ret - -.SwapBytes: - ld b, [hl] - ld a, [de] - ld [hli], a - ld a, b - ld [de], a - inc de - dec c - jr nz, .SwapBytes - ret - -LoadPikachuMovementCommandData: - call GetPikachuMovementScriptByte - cp $3f - ret z - ld c, a - ld b, 0 - ld hl, PikachuMovementDatabase - add hl, bc - add hl, bc - add hl, bc - add hl, bc - ld a, [hli] - ld [wCurPikaMovementFunc1], a - ld a, [hli] - cp $80 - jr nz, .no_param - call GetPikachuMovementScriptByte -.no_param - ld [wCurPikaMovementParam1], a - ld a, [hli] - ld [wCurPikaMovementFunc2], a - ld a, [hli] - cp $80 - jr nz, .no_param2 - call GetPikachuMovementScriptByte -.no_param2 - ld [wCurPikaMovementParam2], a - xor a - ld [wd451], a - scf - ret - -ExecutePikachuMovementCommand: - xor a - ld [wPikachuMovementFlags], a - ld [wPikachuStepTimer], a - ld [wPikachuStepSubtimer], a - ld a, [wSpritePlayerStateData2GrassPriority] - push af -.loop - ld bc, wSpritePlayerStateData1 ; Currently holds Pikachu's sprite state data - ld a, [wCurPikaMovementFunc1] - ld hl, PikaMovementFunc1Jumptable - call .JumpTable - ld a, [wCurPikaMovementFunc2] - ld hl, PikaMovementFunc2Jumptable - call .JumpTable - call GetCoordsForPikachuShadow - call AnimatePikachuShadow - call DelayFrame - call DelayFrame - ld hl, wPikachuMovementFlags - bit 7, [hl] - jr z, .loop - pop af - ld [wSpritePlayerStateData2GrassPriority], a - scf - ret - -.JumpTable: - ld e, a - ld d, 0 - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -GetCoordsForPikachuShadow: - ld hl, wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1 - add hl, bc - ld a, [wCurPikaMovementSpriteImageIdx] - ld [hl], a - ld a, [wPikaSpriteY] - ld d, a - ld a, [wPikachuMovementYOffset] - add d - ld hl, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 - add hl, bc - ld [hl], a - ld a, [wPikaSpriteX] - ld d, a - ld a, [wPikachuMovementXOffset] - add d - ld hl, wSpritePlayerStateData1XPixels - wSpritePlayerStateData1 - add hl, bc - ld [hl], a - ld hl, wPikachuMovementFlags - bit 6, [hl] - ret z - ld hl, wSpritePlayerStateData2GrassPriority - wSpritePlayerStateData1 - add hl, bc - ld [hl], 0 - ret - -AnimatePikachuShadow: - ld hl, wPikachuMovementFlags - bit 6, [hl] - res 6, [hl] - ld hl, wd736 - res 6, [hl] - ret z - set 6, [hl] - call LoadPikachuShadowOAMData - ret - -PikachuMovementDatabase: - db $01, 1 - 1, $00, 1 - 1 ; $00 start - - db $03, $80, $01, 1 - 1 ; $01 - db $04, $80, $01, 1 - 1 ; $02 - db $05, $80, $01, 1 - 1 ; $03 - db $06, $80, $01, 1 - 1 ; $04 - db $07, $80, $01, 1 - 1 ; $05 - db $08, $80, $01, 1 - 1 ; $06 - db $09, $80, $01, 1 - 1 ; $07 - db $0a, $80, $01, 1 - 1 ; $08 - - db $03, $80, $06, 1 - 1 ; $09 - db $04, $80, $06, 1 - 1 ; $0a - db $05, $80, $06, 1 - 1 ; $0b - db $06, $80, $06, 1 - 1 ; $0c - db $07, $80, $06, 1 - 1 ; $0d - db $08, $80, $06, 1 - 1 ; $0e - db $09, $80, $06, 1 - 1 ; $0f - db $0a, $80, $06, 1 - 1 ; $10 - - db $03, $80, $03, $80 ; $11 - db $04, $80, $03, $80 ; $12 - db $05, $80, $03, $80 ; $13 - db $06, $80, $03, $80 ; $14 - db $07, $80, $03, $80 ; $15 - db $08, $80, $03, $80 ; $16 - db $09, $80, $03, $80 ; $17 - db $0a, $80, $03, $80 ; $18 - - db $03, $80, $07, $80 ; $19 - db $04, $80, $07, $80 ; $1a - db $05, $80, $07, $80 ; $1b - db $06, $80, $07, $80 ; $1c - - db $0b, (1 << 5) | 8 - 1, $02, 1 - 1 ; $1d step down - db $0c, (1 << 5) | 8 - 1, $02, 1 - 1 ; $1e step up - db $0d, (1 << 5) | 8 - 1, $02, 1 - 1 ; $1f step left - db $0e, (1 << 5) | 8 - 1, $02, 1 - 1 ; $20 step right - db $0f, (1 << 5) | 8 - 1, $02, 1 - 1 ; $21 step down left - db $10, (1 << 5) | 8 - 1, $02, 1 - 1 ; $22 step down right - db $11, (1 << 5) | 8 - 1, $02, 1 - 1 ; $23 step up left - db $12, (1 << 5) | 8 - 1, $02, 1 - 1 ; $24 step up right - - db $0b, 16 - 1, $02, 1 - 1 ; $25 slide down - db $0c, 16 - 1, $02, 1 - 1 ; $26 slide up - db $0d, 16 - 1, $02, 1 - 1 ; $27 slide left - db $0e, 16 - 1, $02, 1 - 1 ; $28 slide right - db $0f, 16 - 1, $02, 1 - 1 ; $29 slide down left - db $10, 16 - 1, $02, 1 - 1 ; $2a slide down right - db $11, 16 - 1, $02, 1 - 1 ; $2b slide up left - db $12, 16 - 1, $02, 1 - 1 ; $2c slide up right - - db $0b, 16 - 1, $08, (1 << 4) | 8 - 1 ; $2d hop down - db $0c, 16 - 1, $08, (1 << 4) | 8 - 1 ; $2e hop up - db $0d, 16 - 1, $08, (1 << 4) | 8 - 1 ; $2f hop left - db $0e, 16 - 1, $08, (1 << 4) | 8 - 1 ; $30 hop right - db $0f, 16 - 1, $08, (1 << 4) | 8 - 1 ; $31 hop down left - db $10, 16 - 1, $08, (1 << 4) | 8 - 1 ; $32 hop down right - db $11, 16 - 1, $08, (1 << 4) | 8 - 1 ; $33 hop up left - db $12, 16 - 1, $08, (1 << 4) | 8 - 1 ; $34 hop up right - - db $13, 16 - 1, $06, 1 - 1 ; $35 look down - db $14, 16 - 1, $06, 1 - 1 ; $36 look up - db $15, 16 - 1, $06, 1 - 1 ; $37 look left - db $16, 16 - 1, $06, 1 - 1 ; $38 look right - - db $02, $80, $04, 1 - 1 ; $39 - db $02, $80, $05, 1 - 1 ; $3a - db $02, $80, $03, $80 ; $3b - db $02, $80, $07, $80 ; $3c - db $02, $80, $09, $80 ; $3d - db $02, $80, $06, 1 - 1 ; $3e - -PikaMovementFunc1Jumptable: - dw PikaMovementFunc1_EndCommand_ ; 00 - dw PikaMovementFunc1_LoadPikachuCurrentPosition ; 01 - dw PikaMovementFunc1_DelayFrames ; 02 - dw PikaMovementFunc1_WalkInCurrentFacingDirection ; 03 - dw PikaMovementFunc1_WalkInOppositeFacingDirection ; 04 - dw PikaMovementFunc1_StepTurningCounterclockwise ; 05 - dw PikaMovementFunc1_StepTurningClockwise ; 06 - dw PikaMovementFunc1_StepForwardLeft ; 07 - dw PikaMovementFunc1_StepForwardRight ; 08 - dw PikaMovementFunc1_StepBackwardLeft ; 09 - dw PikaMovementFunc1_StepBackwardRight ; 0a - dw PikaMovementFunc1_MoveDown ; 0b - dw PikaMovementFunc1_MoveUp ; 0c - dw PikaMovementFunc1_MoveLeft ; 0d - dw PikaMovementFunc1_MoveRight ; 0e - dw PikaMovementFunc1_MoveDownLeft ; 0f - dw PikaMovementFunc1_MoveDownRight ; 10 - dw PikaMovementFunc1_MoveUpLeft ; 11 - dw PikaMovementFunc1_MoveUpRight ; 12 - dw PikaMovementFunc1_LookDown ; 13 - dw PikaMovementFunc1_LookUp ; 14 - dw PikaMovementFunc1_LookLeft ; 15 - dw PikaMovementFunc1_LookRight ; 16 - dw PikaMovementFunc1_EndCommand_ ; 17 - -PikaMovementFunc1_EndCommand: - ld a, [wPikachuMovementFlags] - set 7, a - ld [wPikachuMovementFlags], a - ret - -PikaMovementFunc1_EndCommand_: - call PikaMovementFunc1_EndCommand - ret - -PikaMovementFunc1_LoadPikachuCurrentPosition: - ld hl, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 - add hl, bc - ld a, [hl] - ld [wPikaSpriteY], a - ld hl, wSpritePlayerStateData1XPixels - wSpritePlayerStateData1 - add hl, bc - ld a, [hl] - ld [wPikaSpriteX], a - xor a - ld [wPikachuMovementYOffset], a - ld [wPikachuMovementXOffset], a - call PikaMovementFunc1_EndCommand - ret - -PikaMovementFunc1_DelayFrames: - call CheckPikachuStepTimer1 - ret nz - call PikaMovementFunc1_EndCommand - ret - -PikaMovementFunc1_WalkInCurrentFacingDirection: - call GetPikachuFacing - jr PikaMovementFunc1_ApplyStepVector - -PikaMovementFunc1_WalkInOppositeFacingDirection: - call GetPikachuFacing - xor %100 - jr PikaMovementFunc1_ApplyStepVector - -PikaMovementFunc1_StepTurningCounterclockwise: - call GetPikachuFacing - ld hl, .Data - call PikaMovementFunc1_GetNextFacing - jr PikaMovementFunc1_ApplyStepVector - -.Data: - db SPRITE_FACING_DOWN, PIKASTEPDIR_RIGHT << 2 - db SPRITE_FACING_UP, PIKASTEPDIR_LEFT << 2 - db SPRITE_FACING_LEFT, PIKASTEPDIR_DOWN << 2 - db SPRITE_FACING_RIGHT, PIKASTEPDIR_UP << 2 - db $ff - -PikaMovementFunc1_StepTurningClockwise: - call GetPikachuFacing - ld hl, .Data - call PikaMovementFunc1_GetNextFacing - jr PikaMovementFunc1_ApplyStepVector - -.Data: - db SPRITE_FACING_DOWN, PIKASTEPDIR_LEFT << 2 - db SPRITE_FACING_UP, PIKASTEPDIR_RIGHT << 2 - db SPRITE_FACING_LEFT, PIKASTEPDIR_UP << 2 - db SPRITE_FACING_RIGHT, PIKASTEPDIR_DOWN << 2 - db $ff - -PikaMovementFunc1_StepForwardLeft: - call GetPikachuFacing - ld hl, .Data - call PikaMovementFunc1_GetNextFacing - jr PikaMovementFunc1_ApplyStepVector - -.Data: - db SPRITE_FACING_DOWN, PIKASTEPDIR_DOWN_RIGHT << 2 - db SPRITE_FACING_UP, PIKASTEPDIR_UP_LEFT << 2 - db SPRITE_FACING_LEFT, PIKASTEPDIR_DOWN_LEFT << 2 - db SPRITE_FACING_RIGHT, PIKASTEPDIR_UP_RIGHT << 2 - -PikaMovementFunc1_StepForwardRight: - call GetPikachuFacing - ld hl, .Data - call PikaMovementFunc1_GetNextFacing - jr PikaMovementFunc1_ApplyStepVector - -.Data: - db SPRITE_FACING_DOWN, PIKASTEPDIR_DOWN_LEFT << 2 - db SPRITE_FACING_UP, PIKASTEPDIR_UP_RIGHT << 2 - db SPRITE_FACING_LEFT, PIKASTEPDIR_UP_LEFT << 2 - db SPRITE_FACING_RIGHT, PIKASTEPDIR_DOWN_RIGHT << 2 - -PikaMovementFunc1_StepBackwardLeft: - call GetPikachuFacing - ld hl, .Data - call PikaMovementFunc1_GetNextFacing - jr PikaMovementFunc1_ApplyStepVector - -.Data: - db SPRITE_FACING_DOWN, PIKASTEPDIR_UP_RIGHT << 2 - db SPRITE_FACING_UP, PIKASTEPDIR_DOWN_LEFT << 2 - db SPRITE_FACING_LEFT, PIKASTEPDIR_DOWN_RIGHT << 2 - db SPRITE_FACING_RIGHT, PIKASTEPDIR_UP_LEFT << 2 - -PikaMovementFunc1_StepBackwardRight: - call GetPikachuFacing - ld hl, .Data - call PikaMovementFunc1_GetNextFacing - jr PikaMovementFunc1_ApplyStepVector - -.Data: - db SPRITE_FACING_DOWN, PIKASTEPDIR_UP_LEFT << 2 - db SPRITE_FACING_UP, PIKASTEPDIR_DOWN_RIGHT << 2 - db SPRITE_FACING_LEFT, PIKASTEPDIR_UP_RIGHT << 2 - db SPRITE_FACING_RIGHT, PIKASTEPDIR_DOWN_LEFT << 2 - -PikaMovementFunc1_ApplyStepVector: - rrca - rrca - and $7 - ld e, a - call GetPikachuStepVectorMagnitude - ld d, a - call UpdatePikachuPosition - call CheckPikachuStepTimer1 - ret nz - call PikaMovementFunc1_EndCommand - ret - -PikaMovementFunc1_GetNextFacing: - push de - ld d, a -.loop - ld a, [hli] - cp d - jr z, .found - inc hl - cp $ff - jr nz, .loop - pop de - ret - -.found - ld a, [hl] - pop de - scf - ret - -PikaMovementFunc1_MoveDown: - ld a, PIKASTEPDIR_DOWN - jr PikaMovementFunc1_ApplyFacingAndMove - -PikaMovementFunc1_MoveUp: - ld a, PIKASTEPDIR_UP - jr PikaMovementFunc1_ApplyFacingAndMove - -PikaMovementFunc1_MoveLeft: - ld a, PIKASTEPDIR_LEFT - jr PikaMovementFunc1_ApplyFacingAndMove - -PikaMovementFunc1_MoveRight: - ld a, PIKASTEPDIR_RIGHT - jr PikaMovementFunc1_ApplyFacingAndMove - -PikaMovementFunc1_MoveDownLeft: - ld e, PIKASTEPDIR_DOWN_LEFT - jr PikaMovementFunc1_MoveDiagonally - -PikaMovementFunc1_MoveDownRight: - ld e, PIKASTEPDIR_DOWN_RIGHT - jr PikaMovementFunc1_MoveDiagonally - -PikaMovementFunc1_MoveUpLeft: - ld e, PIKASTEPDIR_UP_LEFT - jr PikaMovementFunc1_MoveDiagonally - -PikaMovementFunc1_MoveUpRight: - ld e, PIKASTEPDIR_UP_RIGHT - jr PikaMovementFunc1_MoveDiagonally - -PikaMovementFunc1_ApplyFacingAndMove: - ld e, a - call SetPikachuFacing -PikaMovementFunc1_MoveDiagonally: - call GetPikachuStepVectorMagnitude - ld d, a - push de - call UpdatePikachuPosition - pop de - call CheckPikachuStepTimer1 - ret nz - ld a, e - call ApplyPikachuStepVector - call PikaMovementFunc1_EndCommand - ret - -PikaMovementFunc1_LookDown: - ld a, PIKASTEPDIR_DOWN - jr PikaMovementFunc1_ApplyFacing - -PikaMovementFunc1_LookUp: - ld a, PIKASTEPDIR_UP - jr PikaMovementFunc1_ApplyFacing - -PikaMovementFunc1_LookLeft: - ld a, PIKASTEPDIR_LEFT - jr PikaMovementFunc1_ApplyFacing - -PikaMovementFunc1_LookRight: - ld a, PIKASTEPDIR_RIGHT - jr PikaMovementFunc1_ApplyFacing - -PikaMovementFunc1_ApplyFacing: - call SetPikachuFacing - call PikaMovementFunc1_EndCommand - ret - -UpdatePikachuPosition: - push de - ld d, 0 - ld hl, .Jumptable - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - pop de - ld a, d - jp hl - -.Jumptable: - dw .Down - dw .Up - dw .Left - dw .Right - dw .DownLeft - dw .DownRight - dw .UpLeft - dw .UpRight - -.Down: - ld d, 0 - ld e, a - jr .ApplyVector - -.Up: - ld d, 0 - cpl - inc a - ld e, a - jr .ApplyVector - -.Left: - cpl - inc a - ld d, a - ld e, 0 - jr .ApplyVector - -.Right: - ld d, a - ld e, 0 - jr .ApplyVector - -.DownLeft: - ld e, a - cpl - inc a - ld d, a - jr .ApplyVector - -.DownRight: - ld e, a - ld d, a - jr .ApplyVector - -.UpLeft: - cpl - inc a - ld e, a - ld d, a - jr .ApplyVector - -.UpRight: - ld d, a - cpl - inc a - ld e, a - jr .ApplyVector - -.ApplyVector: - ld a, [wPikaSpriteX] - add d - ld [wPikaSpriteX], a - ld a, [wPikaSpriteY] - add e - ld [wPikaSpriteY], a - ret - -PikaMovementFunc2Jumptable: - dw PikaMovementFunc2_ResetFrameCounterAndFaceCurrent ; 0 - dw PikaMovementFunc2_UpdateSpriteImageIdxWithPreviousImageIdxDirection ; 1 - dw PikaMovementFunc2_UpdateSpriteImageIdxWithFacing ; 2 - dw PikaMovementFunc2_TurnParameter ; 3 - dw PikaMovementFunc2_TurnClockwise ; 4 - dw PikaMovementFunc2_TurnCounterClockwise ; 5 - dw PikaMovementFunc2_CopySpriteImageIdxDirectionToSpriteImageIdx ; 6 - dw PikaMovementFunc2_UpdateJumpWithPreviousImageIdxDirection ; 7 - dw PikaMovementFunc2_UpdateJumpWithFacing ; 8 - dw PikaMovementFunc2_CopyFacingToJump ; 9 - dw PikaMovementFunc2_nop ; 10 - -PikaMovement_SetSpawnShadow: - ld hl, wPikachuMovementFlags - set 6, [hl] - ret - -PikaMovementFunc2_ResetFrameCounterAndFaceCurrent: - ld hl, wSpritePlayerStateData1IntraAnimFrameCounter - wSpritePlayerStateData1 - add hl, bc - xor a - ld [hli], a - ld [hl], a - call PikaMovementFunc2_GetImageBaseOffset - ld d, a - call GetPikachuFacing - or d - ld [wCurPikaMovementSpriteImageIdx], a - ret - -PikaMovementFunc2_nop: - ret - -PikaMovementFunc2_CopySpriteImageIdxDirectionToSpriteImageIdx: - call PikaMovementFunc2_GetImageBaseOffset - ld d, a - call PikaMovementFunc2_GetSpriteImageIdxDirection - or d - ld [wCurPikaMovementSpriteImageIdx], a - ret - -PikaMovementFunc2_UpdateSpriteImageIdxWithFacing: - call PikaMovementFunc2_GetImageBaseOffset - ld d, a - call GetPikachuFacing - or d - ld d, a - jr PikaMovementFunc2_UpdateSpriteImageIdx - -PikaMovementFunc2_UpdateSpriteImageIdxWithPreviousImageIdxDirection: - call PikaMovementFunc2_GetImageBaseOffset - ld d, a - call PikaMovementFunc2_GetSpriteImageIdxDirection - or d - ld d, a -PikaMovementFunc2_UpdateSpriteImageIdx: - ld hl, wSpritePlayerStateData1AnimFrameCounter - wSpritePlayerStateData1 - add hl, bc - call CheckPikachuStepTimer2 ; does not preserve hl - jr nz, .skip - inc [hl] -.skip - ld a, [hl] - rrca - rrca - and 3 - or d - ld [wCurPikaMovementSpriteImageIdx], a - ret - -PikaMovementFunc2_UpdateJumpWithFacing: - call GetPikachuFacing - ld d, a - jr PikaMovementFunc2_UpdateJump - -PikaMovementFunc2_UpdateJumpWithPreviousImageIdxDirection: - call PikaMovementFunc2_GetSpriteImageIdxDirection - ld d, a -PikaMovementFunc2_UpdateJump: - call PikaMovementFunc2_GetImageBaseOffset - or d - ld d, a - call PikaMovementFunc2_Timer - or d - ld [wCurPikaMovementSpriteImageIdx], a - call PikaMovementFunc_Sine - ld [wPikachuMovementYOffset], a - and a - ret z - call PikaMovement_SetSpawnShadow - ret - -PikaMovementFunc2_CopyFacingToJump: - call GetPikachuFacing - ld d, a - call PikaMovementFunc2_GetImageBaseOffset - or d - ld [wCurPikaMovementSpriteImageIdx], a - call PikaMovementFunc_Sine - ld [wPikachuMovementYOffset], a - ret - -PikaMovementFunc2_TurnParameter: - ld a, [wCurPikaMovementParam2] - and $40 - cp $40 - jr z, PikaMovementFunc2_TurnClockwise - jr PikaMovementFunc2_TurnCounterClockwise - -PikaMovementFunc2_TurnClockwise: - call PikaMovementFunc2_GetSpriteImageIdxDirection - ld d, a - call CheckPikachuStepTimer2 - jr nz, .skip - ld hl, Data_fd731 -.loop - ld a, [hli] - cp d - jr nz, .loop - ld d, [hl] -.skip - call PikaMovementFunc2_GetImageBaseOffset - or d - ld [wCurPikaMovementSpriteImageIdx], a - ret - -PikaMovementFunc2_TurnCounterClockwise: - call PikaMovementFunc2_GetSpriteImageIdxDirection - ld d, a - call CheckPikachuStepTimer2 - jr nz, .skip - ld hl, Data_fd731End -.loop - ld a, [hld] - cp d - jr nz, .loop - ld d, [hl] -.skip - call PikaMovementFunc2_GetImageBaseOffset - or d - ld [wCurPikaMovementSpriteImageIdx], a - ret - -Data_fd731: - db SPRITE_FACING_DOWN - db SPRITE_FACING_LEFT - db SPRITE_FACING_UP - db SPRITE_FACING_RIGHT - db SPRITE_FACING_DOWN -Data_fd731End: - -PikaMovementFunc2_Timer: - push hl - ld hl, wSpritePlayerStateData1IntraAnimFrameCounter - wSpritePlayerStateData1 - add hl, bc - ld a, [hl] - inc a - and $3 - ld [hli], a - jr nz, .load_pop - ld a, [hl] - inc a - and $3 - ld [hl], a -.load_pop - ld a, [hl] - pop hl - ret - -PikaMovementFunc2_GetImageBaseOffset: - push hl - ld hl, wSpritePlayerStateData2ImageBaseOffset - wSpritePlayerStateData1 - add hl, bc - ld a, [hl] - dec a - swap a - pop hl - ret - -PikaMovementFunc2_GetSpriteImageIdxDirection: - push hl - ld hl, wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1 - add hl, bc - ld a, [hl] - and $c - pop hl - ret - -GetPikachuFacing: - push hl - ld hl, wSpritePlayerStateData1FacingDirection - wSpritePlayerStateData1 - add hl, bc - ld a, [hl] - and $c - pop hl - ret - -SetPikachuFacing: - push hl - ld hl, wSpritePlayerStateData1FacingDirection - wSpritePlayerStateData1 - add hl, bc - add a - add a - and $c - ld [hl], a - pop hl - ret - -CheckPikachuStepTimer1: - ld hl, wPikachuStepTimer - inc [hl] - ld a, [wCurPikaMovementParam1] - and $1f - inc a - cp [hl] - ret nz - ld [hl], 0 - ret - -GetPikachuStepVectorMagnitude: - ; *XX***** - ld a, [wCurPikaMovementParam1] - swap a - rrca - and $3 - inc a - ret - -CheckPikachuStepTimer2: - ld hl, wPikachuStepSubtimer - inc [hl] - ld a, [wCurPikaMovementParam2] - and $f - inc a - cp [hl] - ret nz - ld [hl], 0 - ret - -PikaMovementFunc_Sine: - call .GetArgument - ld a, [wPikachuStepSubtimer] - add e - ld [wPikachuStepSubtimer], a - add $20 - ld e, a - push hl - push bc - call Sine_e - pop bc - pop hl - ret - -.GetArgument: - ld a, [wCurPikaMovementParam2] - and $f - inc a - ld d, a - ld a, [wCurPikaMovementParam2] - swap a - and $7 - ld e, a - ld a, 1 - jr z, .okay -.loop - add a - dec e - jr nz, .loop -.okay - ld e, a - ret - -ApplyPikachuStepVector: - push bc - ld c, a - ld b, 0 - ld hl, .StepVectors - add hl, bc - add hl, bc - ld d, [hl] - inc hl - ld e, [hl] - pop bc - ld hl, wSpritePlayerStateData2MapY - wSpritePlayerStateData1 - add hl, bc - ld a, [hl] - add e - ld [hli], a - ld a, [hl] - add d - ld [hl], a - ret - -.StepVectors: - db 0, 1 - db 0, -1 - db -1, 0 - db 1, 0 - db -1, 1 - db 1, 1 - db -1, -1 - db 1, -1 - -LoadPikachuShadowOAMData: - push bc - push de - push hl - - ld bc, wOAMBuffer + 4 * 36 - ld a, [wPikaSpriteY] - ld e, a - ld a, [wPikaSpriteX] - ld d, a - ld hl, .OAMData - call .LoadOAMData - - pop hl - pop de - pop bc - ret - -.OAMData: - db 2 - db $0c, $00, $ff, 0 - db $0c, $08, $ff, 1 << OAM_X_FLIP - -.LoadOAMData: - ld a, e - add $10 - ld e, a - ld a, d - add $8 - ld d, a - ld a, [hli] -.loop - push af - ld a, [hli] - add e - ld [bc], a - inc bc - ld a, [hli] - add d - ld [bc], a - inc bc - ld a, [hli] - ld [bc], a - inc bc - ld a, [hli] - ld [bc], a - inc bc - pop af - dec a - jr nz, .loop - ret - -LoadPikachuShadowIntoVRAM:: - ld hl, vNPCSprites2 + $7f * $10 - ld de, LedgeHoppingShadowGFX_3F - lb bc, BANK(LedgeHoppingShadowGFX_3F), (LedgeHoppingShadowGFX_3FEnd - LedgeHoppingShadowGFX_3F) / 8 - jp CopyVideoDataDoubleAlternate - -LedgeHoppingShadowGFX_3F: -INCBIN "gfx/overworld/shadow.1bpp" -LedgeHoppingShadowGFX_3FEnd: - -LoadPikachuBallIconIntoVRAM: - ld hl, vNPCSprites2 + $7e * $10 - ld de, GFX_fd86b - lb bc, BANK(GFX_fd86b), 1 - jp CopyVideoDataDoubleAlternate - -Func_fd851: - ld hl, vNPCSprites + $c * $10 - ld a, 3 -.loop - push af - push hl - ld de, GFX_fd86b - lb bc, BANK(GFX_fd86b), 4 - call CopyVideoDataAlternate - pop hl - ld de, 4 * $10 - add hl, de - pop af - dec a - jr nz, .loop - ret - -GFX_fd86b: -INCBIN "gfx/unknown_fd86b.2bpp" - -LoadPikachuSpriteIntoVRAM: - ld de, PikachuSprite - lb bc, BANK(PikachuSprite), (SandshrewSprite - PikachuSprite) / 32 - ld hl, vNPCSprites + $c * $10 - push bc - call CopyVideoDataAlternate - ld de, PikachuSprite + $c * $10 - ld hl, vNPCSprites2 + $c * $10 - ldh a, [hFFFC] - and a - jr z, .load - ld de, PikachuSprite + $c * $10 - ld hl, vNPCSprites2 + $4c * $10 -.load - pop bc - call CopyVideoDataAlternate - call LoadPikachuShadowIntoVRAM - call LoadPikachuBallIconIntoVRAM - ret - -PikachuPewterPokecenterCheck: - ld a, [wCurMap] - cp PEWTER_POKECENTER - ret nz - call EnablePikachuFollowingPlayer - call StarterPikachuEmotionCommand_turnawayfromplayer - ret - -PikachuFanClubCheck: - ld a, [wCurMap] - cp POKEMON_FAN_CLUB - ret nz - call EnablePikachuFollowingPlayer - call StarterPikachuEmotionCommand_turnawayfromplayer - ret - -PikachuBillsHouseCheck: - ld a, [wCurMap] - cp BILLS_HOUSE - ret nz - call EnablePikachuFollowingPlayer - ret - -Pikachu_LoadCurrentMapViewUpdateSpritesAndDelay3: - call LoadCurrentMapView - call UpdateSprites - call Delay3 - ret - -Cosine_e: ; cosine? - ld a, e - add $10 - jr asm_fd908 - -Sine_e: ; sine? - ld a, e -asm_fd908: - and $3f - cp $20 - jr nc, .asm_fd913 - call GetSine - ld a, h - ret - -.asm_fd913 - and $1f - call GetSine - ld a, h - cpl - inc a - ret - -GetSine: - ld e, a - ld a, d - ld d, 0 - ld hl, SineWave_3f - add hl, de - add hl, de - ld e, [hl] - inc hl - ld d, [hl] - ld hl, 0 -.asm_fd92b - srl a - jr nc, .asm_fd930 - add hl, de -.asm_fd930 - sla e - rl d - and a - jr nz, .asm_fd92b - ret - -SineWave_3f: - sine_wave $100 diff --git a/engine/pikachu_pcm.asm b/engine/pikachu_pcm.asm deleted file mode 100755 index bf1aa57f..00000000 --- a/engine/pikachu_pcm.asm +++ /dev/null @@ -1,154 +0,0 @@ -PlayPikachuSoundClip:: - ld a, e - ld e, a - ld d, $0 - ld hl, PikachuCriesPointerTable - add hl, de - add hl, de - add hl, de - ld b, [hl] ; bank of pikachu cry data - inc hl - ld a, [hli] ; cry data pointer - ld h, [hl] - ld l, a - ld c, $4 -.loop - dec c - jr z, .done_delay - call DelayFrame - jr .loop - -.done_delay - di - push bc - push hl - ld a, $80 - ldh [rNR52], a - ld a, $77 - ldh [rNR50], a - xor a - ldh [rNR30], a - ld hl, rWave_0 ; wave data - ld de, wRedrawRowOrColumnSrcTiles -.saveWaveDataLoop - ld a, [hl] - ld [de], a - inc de - ld a, $ff - ld [hli], a - ld a, l - cp $40 ; end of wave data - jr nz, .saveWaveDataLoop - ld a, $80 - ldh [rNR30], a - ldh a, [rNR51] - or $44 - ldh [rNR51], a - ld a, $ff - ldh [rNR31], a - ld a, $20 - ldh [rNR32], a - ld a, $ff - ldh [rNR33], a - ld a, $87 - ldh [rNR34], a - pop hl - pop bc - call PlayPikachuPCM - xor a - ld [wc0f3], a - ld [wc0f4], a - ld a, $80 - ldh [rNR52], a - xor a - ldh [rNR30], a - ld hl, rWave_0 - ld de, wRedrawRowOrColumnSrcTiles -.reloadWaveDataLoop - ld a, [de] - inc de - ld [hli], a - ld a, l - cp $40 ; end of wave data - jr nz, .reloadWaveDataLoop - ld a, $80 - ldh [rNR30], a - ldh a, [rNR51] - and $bb - ldh [rNR51], a - xor a - ld [wChannelSoundIDs + Ch5], a - ld [wChannelSoundIDs + Ch6], a - ld [wChannelSoundIDs + Ch7], a - ld [wChannelSoundIDs + Ch8], a - ldh a, [hLoadedROMBank] - ei - ret - -PikachuCriesPointerTable:: -; format: -; db bank -; dw pointer to cry - -; bank 21 - pikacry_def PikachuCry1 - pikacry_def PikachuCry2 - pikacry_def PikachuCry3 - pikacry_def PikachuCry4 - -; bank 22 - pikacry_def PikachuCry5 - pikacry_def PikachuCry6 - pikacry_def PikachuCry7 - -; bank 23 - pikacry_def PikachuCry8 - pikacry_def PikachuCry9 - pikacry_def PikachuCry10 - -; bank 24 - pikacry_def PikachuCry11 - pikacry_def PikachuCry12 - pikacry_def PikachuCry13 - -; bank 25 - pikacry_def PikachuCry14 - pikacry_def PikachuCry15 - -; banks 31-34, in no particular order - - pikacry_def PikachuCry16 - pikacry_def PikachuCry17 - pikacry_def PikachuCry18 - pikacry_def PikachuCry19 - pikacry_def PikachuCry20 - pikacry_def PikachuCry21 - pikacry_def PikachuCry22 - pikacry_def PikachuCry23 - pikacry_def PikachuCry24 - pikacry_def PikachuCry25 - pikacry_def PikachuCry26 - -; bank 35 - pikacry_def PikachuCry27 - pikacry_def PikachuCry28 - pikacry_def PikachuCry29 - pikacry_def PikachuCry30 - pikacry_def PikachuCry31 - -; bank 36 - pikacry_def PikachuCry32 - pikacry_def PikachuCry33 - pikacry_def PikachuCry34 - -; bank 37 - pikacry_def PikachuCry35 - pikacry_def PikachuCry36 - -; banks 36-38 - pikacry_def PikachuCry37 - pikacry_def PikachuCry38 - pikacry_def PikachuCry39 - pikacry_def PikachuCry40 - pikacry_def PikachuCry41 - pikacry_def PikachuCry42 diff --git a/engine/pikachu_pic_animation.asm b/engine/pikachu_pic_animation.asm deleted file mode 100755 index 7829c048..00000000 --- a/engine/pikachu_pic_animation.asm +++ /dev/null @@ -1,851 +0,0 @@ -GetPikaPicAnimationScriptIndex: - ld hl, PikachuMoodLookupTable - ld a, [wPikachuMood] - ld d, a -.get_mood_param - ld a, [hli] - inc hl - cp d - jr c, .get_mood_param - dec hl - ld e, [hl] - ld hl, PikaPicAnimationScriptPointerLookupTable - ld a, [wPikachuHappiness] - ld d, a - ld bc, 6 -.get_happiness_param - ld a, [hl] - cp d - jr nc, .got_animation - add hl, bc - jr .get_happiness_param - -.got_animation - ld d, 0 - add hl, de - ld a, [hl] - ret - -PikachuMoodLookupTable: -; First byte: mood threshold -; Second byte: column index in PikaPicAnimationScriptPointerLookupTable - db 40, 1 - db 127, 2 - db 128, 3 - db 210, 4 - db 255, 5 - -PikaPicAnimationScriptPointerLookupTable: -; First byte: happiness threshold -; Remaining bytes: loaded based on Pikachu's mood - db 50 - dpikapic PikaPicAnimScript14 - dpikapic PikaPicAnimScript14 - dpikapic PikaPicAnimScript6 - dpikapic PikaPicAnimScript13 - dpikapic PikaPicAnimScript13 - - db 100 - dpikapic PikaPicAnimScript9 - dpikapic PikaPicAnimScript9 - dpikapic PikaPicAnimScript5 - dpikapic PikaPicAnimScript12 - dpikapic PikaPicAnimScript12 - - db 130 - dpikapic PikaPicAnimScript3 - dpikapic PikaPicAnimScript3 - dpikapic PikaPicAnimScript1 - dpikapic PikaPicAnimScript8 - dpikapic PikaPicAnimScript8 - - db 160 - dpikapic PikaPicAnimScript3 - dpikapic PikaPicAnimScript3 - dpikapic PikaPicAnimScript4 - dpikapic PikaPicAnimScript15 - dpikapic PikaPicAnimScript15 - - db 200 - dpikapic PikaPicAnimScript17 - dpikapic PikaPicAnimScript17 - dpikapic PikaPicAnimScript7 - dpikapic PikaPicAnimScript2 - dpikapic PikaPicAnimScript2 - - db 250 - dpikapic PikaPicAnimScript17 - dpikapic PikaPicAnimScript17 - dpikapic PikaPicAnimScript16 - dpikapic PikaPicAnimScript10 - dpikapic PikaPicAnimScript10 - - db 255 - dpikapic PikaPicAnimScript17 - dpikapic PikaPicAnimScript17 - dpikapic PikaPicAnimScript19 - dpikapic PikaPicAnimScript20 - dpikapic PikaPicAnimScript20 - -StarterPikachuEmotionCommand_pikapic: - ldh a, [hAutoBGTransferEnabled] - push af - xor a - ldh [hAutoBGTransferEnabled], a - ld a, [de] - ld [wPikaPicAnimNumber], a - inc de - push de - call .RunPikapic - pop de - pop af - ldh [hAutoBGTransferEnabled], a - ret - -.RunPikapic: - call PlacePikapicTextBoxBorder - callfar LoadOverworldPikachuFrontpicPalettes - call ResetPikaPicAnimBuffer - call LoadCurrentPikaPicAnimScriptPointer - call ExecutePikaPicAnimScript - call PlacePikapicTextBoxBorder - call RunDefaultPaletteCommand - ret - -ResetPikaPicAnimBuffer: - ld hl, wCurPikaMovementData - ld bc, wCurPikaMovementDataEnd - wCurPikaMovementData - xor a - call FillMemory - ld hl, wPikaPicAnimObjectDataBufferSize - ld bc, wPikaPicAnimObjectDataBufferEnd - wPikaPicAnimObjectDataBufferSize - xor a - call FillMemory - call ClearPikaPicUsedGFXBuffer - ld hl, 100 - ld a, l - ld [wPikaPicAnimTimer], a - ld a, h - ld [wPikaPicAnimTimer + 1], a - ld a, $7 - ld [wPikaPicPikaDrawStartX], a - ld a, $6 - ld [wPikaPicPikaDrawStartY], a - ret - -PlacePikapicTextBoxBorder: - xor a - ldh [hAutoBGTransferEnabled], a - hlcoord 6, 5 - lb bc, 5, 5 - call TextBoxBorder - call Delay3 - call UpdateSprites - ld a, $1 - ldh [hAutoBGTransferEnabled], a - call Delay3 - ret - -LoadCurrentPikaPicAnimScriptPointer: - ld a, [wPikaPicAnimNumber] - cp $1d - jr c, .valid - ld a, $0 -.valid - ld e, a - ld d, 0 - ld hl, PikaPicAnimPointers - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - call UpdatePikaPicAnimPointer - ret - -PikaPicAnimPointers: -pikapic_def: macro -\1_id: dw \1 -endm - - pikapic_def PikaPicAnimScript0 ; 00 - pikapic_def PikaPicAnimScript1 ; 01 - pikapic_def PikaPicAnimScript2 ; 02 - pikapic_def PikaPicAnimScript3 ; 03 - pikapic_def PikaPicAnimScript4 ; 04 - pikapic_def PikaPicAnimScript5 ; 05 - pikapic_def PikaPicAnimScript6 ; 06 - pikapic_def PikaPicAnimScript7 ; 07 - pikapic_def PikaPicAnimScript8 ; 08 - pikapic_def PikaPicAnimScript9 ; 09 - pikapic_def PikaPicAnimScript10 ; 0a - pikapic_def PikaPicAnimScript11 ; 0b - pikapic_def PikaPicAnimScript12 ; 0c - pikapic_def PikaPicAnimScript13 ; 0d - pikapic_def PikaPicAnimScript14 ; 0e - pikapic_def PikaPicAnimScript15 ; 0f - pikapic_def PikaPicAnimScript16 ; 10 - pikapic_def PikaPicAnimScript17 ; 11 - pikapic_def PikaPicAnimScript18 ; 12 - pikapic_def PikaPicAnimScript19 ; 13 - pikapic_def PikaPicAnimScript20 ; 14 - pikapic_def PikaPicAnimScript21 ; 15 - pikapic_def PikaPicAnimScript22 ; 16 - pikapic_def PikaPicAnimScript23 ; 17 - pikapic_def PikaPicAnimScript24 ; 18 - pikapic_def PikaPicAnimScript25 ; 19 - pikapic_def PikaPicAnimScript26 ; 1a - pikapic_def PikaPicAnimScript27 ; 1b - pikapic_def PikaPicAnimScript28 ; 1c - pikapic_def PikaPicAnimScript29 ; 1d - -ExecutePikaPicAnimScript: -.loop - xor a - ldh [hAutoBGTransferEnabled], a - call RunPikaPicAnimSetupScript - call DummyFunction_fdad5 - call AnimateCurrentPikaPicAnimFrame - call DummyFunction_fdad5 - ld a, $1 - ldh [hAutoBGTransferEnabled], a - call PikaPicAnimTimerAndJoypad - and a - jr z, .loop - ret - -PikaPicAnimTimerAndJoypad: - call Delay3 - call CheckPikaPicAnimTimer - and a - ret nz - call JoypadLowSensitivity - ldh a, [hJoyPressed] - and A_BUTTON | B_BUTTON - ret - -CheckPikaPicAnimTimer: - ld hl, wPikaPicAnimTimer - dec [hl] - jr nz, .not_done_yet - inc hl - ld a, [hl] - and a - jr z, .timer_expired - dec [hl] -.not_done_yet - xor a - ret - -.timer_expired - ld a, $1 - ret - -DummyFunction_fdad5: - ret - -AnimateCurrentPikaPicAnimFrame: - ld bc, wPikaPicAnimObjectDataBuffer - ld a, 4 -.loop - push af - push bc - ld hl, 0 ; struct index - add hl, bc - ld a, [hli] - and a - jr z, .skip - ld a, [hli] - ld [wCurPikaPicAnimObjectScriptIdx], a - ld a, [hli] - ld [wCurPikaPicAnimObjectFrameIdx], a - ld a, [hli] - ld [wCurPikaPicAnimObjectFrameTimer], a - ld a, [hli] - ld [wCurPikaPicAnimObjectVTileOffset], a - ld a, [hli] - ld [wCurPikaPicAnimObjectXOffset], a - ld a, [hli] - ld [wCurPikaPicAnimObjectYOffset], a - ld a, [hli] - ld [wCurPikaPicAnimObject + 6], a - push bc - call LoadPikaPicAnimObjectData - pop bc - ld hl, 1 ; script index - add hl, bc - ld a, [wCurPikaPicAnimObjectScriptIdx] - ld [hli], a - ld a, [wCurPikaPicAnimObjectFrameIdx] - ld [hli], a - ld a, [wCurPikaPicAnimObjectFrameTimer] - ld [hli], a - ld a, [wCurPikaPicAnimObjectVTileOffset] - ld [hli], a - ld a, [wCurPikaPicAnimObjectXOffset] - ld [hli], a - ld a, [wCurPikaPicAnimObjectYOffset] - ld [hli], a - ld a, [wCurPikaPicAnimObject + 6] - ld [hl], a -.skip - pop bc - ld hl, 8 - add hl, bc - ld b, h - ld c, l - pop af - dec a - jr nz, .loop - ret - -PikaPicAnimCommand_object: - ld hl, wPikaPicAnimObjectDataBuffer - ld de, 8 - ld c, 4 -.loop - ld a, [hl] - and a - jr z, .found - add hl, de - dec c - jr nz, .loop - scf - ret - -.found - ld a, [wPikaPicAnimObjectDataBufferSize] - inc a - ld [wPikaPicAnimObjectDataBufferSize], a - ld [hli], a - call GetPikaPicAnimByte - ld [hli], a - call GetPikaPicAnimByte - ld [hl], a - xor a - ld [hli], a ; overloads - ld [hli], a - call GetPikaPicAnimByte - ld [hli], a - call GetPikaPicAnimByte - ld [hli], a - call GetPikaPicAnimByte - ld [hli], a - and a - ret - -PikaPicAnimCommand_deleteobject: - call GetPikaPicAnimByte - ld b, a - ld hl, wPikaPicAnimObjectDataBuffer - ld de, 8 - ld c, 4 -.search - ld a, [hl] - cp b - jr z, .delete - add hl, de - dec c - jr nz, .search - scf - ret - -.delete - xor a - ld [hl], a - ret - -LoadPikaPicAnimObjectData: -.loop - ld a, [wCurPikaPicAnimObjectScriptIdx] - cp $23 - jr c, .valid - ld a, $4 -.valid - ld e, a - ld d, 0 - ld hl, PikaPicAnimBGFramesPointers - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [wCurPikaPicAnimObjectFrameIdx] - ld e, a - ld d, 0 - add hl, de - add hl, de - ld a, [hli] - cp $e0 - jr z, .end - jr .init - -.end - xor a - ld [wCurPikaPicAnimObjectFrameIdx], a - ld [wCurPikaPicAnimObjectFrameTimer], a - jr .loop - -.init - push hl - call LoadCurPikaPicObjectTilemap - pop hl - ld a, [hl] - and a - jr z, .not_done ; lasts forever - ld a, [wCurPikaPicAnimObjectFrameTimer] - inc a - ld [wCurPikaPicAnimObjectFrameTimer], a - cp [hl] - jr nz, .not_done - xor a - ld [wCurPikaPicAnimObjectFrameTimer], a - ld a, [wCurPikaPicAnimObjectFrameIdx] - inc a - ld [wCurPikaPicAnimObjectFrameIdx], a -.not_done - ret - -INCLUDE "data/pikachu_pic_objects.asm" - -LoadCurPikaPicObjectTilemap: - and a - ret z - ld e, a - ld d, 0 - ld hl, PikaPicTilemapPointers - add hl, de - add hl, de - ld e, [hl] - inc hl - ld d, [hl] - ld a, [de] - ld c, a - inc de - ld a, [de] - ld b, a - inc de - push de - push bc - call .GetStartCoords - pop bc - pop de -.row - push bc - push hl - ld a, [wCurPikaPicAnimObjectVTileOffset] ; tile id offset - ld c, a -.col - ld a, [de] - inc de - cp $ff - jr z, .skip - add c - ld [hl], a -.skip - inc hl - dec b - jr nz, .col - pop hl - ld bc, SCREEN_WIDTH - add hl, bc - pop bc - dec c - jr nz, .row - ret - -.GetStartCoords: - push bc - ld a, [wCurPikaPicAnimObjectYOffset] ; Y offset - ld b, a - ld a, [wPikaPicPikaDrawStartY] - add b - hlcoord 0, 0 - ld bc, SCREEN_WIDTH - call AddNTimes - ld a, [wCurPikaPicAnimObjectXOffset] ; X offset - ld c, a - ld a, [wPikaPicPikaDrawStartX] - add c - ld c, a - ld b, 0 - add hl, bc - pop bc - ret - -INCLUDE "data/pikachu_pic_tilemaps.asm" - -LoadPikaPicAnimGFXHeader: - push hl - ld e, a - ld d, 0 - ld hl, PikaPicAnimGFXHeaders - add hl, de - add hl, de - add hl, de - add hl, de - ld a, [hli] - ld c, a - ld a, [hli] - ld b, a - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - pop hl - ret - -RunPikaPicAnimSetupScript: - call .CheckAndAdvanceTimer - ret c - xor a - ld [wPikaPicAnimPointerSetupFinished], a -.loop - call GetPikaPicAnimByte - ld e, a - ld d, 0 - ld hl, .Jumptable - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - call JumpToAddress - ld a, [wPikaPicAnimPointerSetupFinished] - and a - jr z, .loop - ret - -.CheckAndAdvanceTimer: - ld a, [wPikaPicAnimDelay] - and a - ret z - dec a - ld [wPikaPicAnimDelay], a - scf - ret - -.Jumptable: - dw PikaPicAnimCommand_nop ; 00, 0 params - dw PikaPicAnimCommand_writebyte ; 01, 1 param - dw PikaPicAnimCommand_loadgfx ; 02, 1 param - dw PikaPicAnimCommand_object ; 03, 5 params - dw PikaPicAnimCommand_nop4 ; 04, 0 params - dw PikaPicAnimCommand_nop5 ; 05, 0 params - dw PikaPicAnimCommand_deleteobject ; 06, 1 param - dw PikaPicAnimCommand_nop7 ; 07, 0 params - dw PikaPicAnimCommand_nop8 ; 08, 0 params - dw PikaPicAnimCommand_jump ; 09, 1 dw param - dw PikaPicAnimCommand_setduration ; 0a, 1 dw param - dw PikaPicAnimCommand_cry ; 0b, 1 param - dw PikaPicAnimCommand_thunderbolt ; 0c, 0 params - dw PikaPicAnimCommand_run ; 0d, 0 params (ret) - dw PikaPicAnimCommand_ret ; 0e, 0 params (ret) - -PikaPicAnimCommand_nop: - ret - -PikaPicAnimCommand_ret: - ld a, 1 - ld [wPikaPicAnimTimer], a - xor a - ld [wPikaPicAnimTimer + 1], a - jr PikaPicAnimCommand_run - -; XXX - ret - -PikaPicAnimCommand_setduration: - call GetPikaPicAnimByte - ld [wPikaPicAnimTimer], a - call GetPikaPicAnimByte - ld [wPikaPicAnimTimer + 1], a - ret - -PikaPicAnimCommand_run: - ld a, $ff - ld [wPikaPicAnimPointerSetupFinished], a - ret - -PikaPicAnimCommand_writebyte: - call GetPikaPicAnimByte - ld [wPikaPicAnimDelay], a - ret - -PikaPicAnimCommand_nop4: -PikaPicAnimCommand_nop5: -PikaPicAnimCommand_nop7: -PikaPicAnimCommand_nop8: - ret - -PikaPicAnimCommand_jump: - call GetPikaPicAnimByte - ld l, a - call GetPikaPicAnimByte - ld h, a - call UpdatePikaPicAnimPointer - ret - -GetPikaPicAnimByte: - push hl - ld hl, wPikaPicAnimPointer - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [hli] - call UpdatePikaPicAnimPointer - pop hl - ret - -UpdatePikaPicAnimPointer: - push af - ld a, l - ld [wPikaPicAnimPointer], a - ld a, h - ld [wPikaPicAnimPointer + 1], a - pop af - ret - -PikaPicAnimCommand_loadgfx: - ld a, [wUpdateSpritesEnabled] - push af - ld a, $ff - ld [wUpdateSpritesEnabled], a - ldh a, [hAutoBGTransferEnabled] - push af - xor a - ldh [hAutoBGTransferEnabled], a - ldh a, [hTilesetType] - push af - xor a - ldh [hTilesetType], a - call GetPikaPicAnimByte - ld [wPikaPicAnimCurGraphicID], a - ld a, [wPikaPicAnimCurGraphicID] - call LoadPikaPicAnimGFXHeader - ld a, c - cp a, $ff - jr z, .compressed - call RequestPikaPicAnimGFX - jr .done - -.compressed - call DecompressRequestPikaPicAnimGFX -.done - pop af - ldh [hTilesetType], a - pop af - ldh [hAutoBGTransferEnabled], a - pop af - ld [wUpdateSpritesEnabled], a - ret - -RequestPikaPicAnimGFX: - push de - ld a, [wPikaPicAnimCurGraphicID] - ld d, a - ld e, c - call CheckIfThereIsRoomForPikaPicAnimGFX - pop de - jr c, .failed - call GetPikaPicVRAMAddressForNewGFX - call CopyVideoDataAlternate - and a -.failed - ret - -DecompressRequestPikaPicAnimGFX: - push de - ld a, [wPikaPicAnimCurGraphicID] - ld d, a - ld e, 5 * 5 - call CheckIfThereIsRoomForPikaPicAnimGFX - pop de - jr c, .failed - ld a, b - call UncompressSpriteFromDE - ld a, BANK(sSpriteBuffer1) - call SwitchSRAMBankAndLatchClockData - ld hl, sSpriteBuffer1 - ld de, sSpriteBuffer0 - ld bc, SPRITEBUFFERSIZE * 2 - call CopyData - call PrepareRTCDataAndDisableSRAM - ld a, [wPikaPicAnimCurGraphicID] - call LookUpTileOffsetForCurrentPikaPicAnimGFX - call GetPikaPicVRAMAddressForNewGFX - ld d, h - ld e, l - call InterlaceMergeSpriteBuffers -.failed - ret - -ClearPikaPicUsedGFXBuffer: - ld hl, wPikaPicUsedGFXCount - ld bc, wPikaPicUsedGFXEnd - wPikaPicUsedGFXCount - xor a - call FillMemory - ret - -GetPikaPicVRAMAddressForNewGFX: - ld hl, vNPCSprites - push bc - ld b, a - and $f - swap a - ld c, a - ld a, b - and $f0 - swap a - ld b, a - add hl, bc - pop bc - ret - -CheckIfThereIsRoomForPikaPicAnimGFX: -; d: idx -; e: size -; FATAL: If the graphic has already been loaded, or if there are -; already 8 graphics objects loaded, the game will execute arbitrary -; code. - push bc - push hl - ld hl, wPikaPicUsedGFX - ld c, 8 -.loop - ld a, [hl] - and a - jr z, .empty - cp d - jr z, .found - inc hl - inc hl - dec c - jr nz, .loop - scf - ret ; execute hl, then bc - -.found - inc hl - ld a, [hl] - ret ; execute hl, then bc - -.empty - ld [hl], d - inc hl - ld a, [wPikaPicUsedGFXCount] - add $80 - ld [hl], a - ld a, [wPikaPicUsedGFXCount] - add e - ld [wPikaPicUsedGFXCount], a - cp $80 - jr z, .okay - jr nc, .failed -.okay - ld a, [hl] - and a - jr .pop_ret - -.failed - scf -.pop_ret - pop hl - pop bc - ret - -LookUpTileOffsetForCurrentPikaPicAnimGFX: - push bc - push hl - ld b, a - ld hl, wPikaPicUsedGFX - ld c, 8 -.loop - ld a, [hli] - cp b - jr z, .found - inc hl - dec c - jr nz, .loop - scf - jr .pop_ret - -.found - ld a, [hl] - and a -.pop_ret - pop hl - pop bc - ret - -PikaPicAnimCommand_cry: - call GetPikaPicAnimByte - cp $ff - ret z - ld e, a - callfar PlayPikachuSoundClip - ret - -PikaPicAnimCommand_thunderbolt: - ld a, $1 - ld [wMuteAudioAndPauseMusic], a - call DelayFrame - ld a, [wAudioROMBank] - push af - ld a, BANK(SFX_Battle_2F) - ld [wAudioROMBank], a - ld [wAudioSavedROMBank], a - call .LoadAudio - call PlaySound - call .FlashScreen - call WaitForSoundToFinish - pop af - ld [wAudioROMBank], a - ld [wAudioSavedROMBank], a - xor a - ld [wMuteAudioAndPauseMusic], a - ret - -.LoadAudio: - ld hl, MoveSoundTable - ld e, THUNDERBOLT - ld d, 0 - add hl, de - add hl, de - add hl, de - ld a, BANK(MoveSoundTable) - call GetFarByte - ld b, a - inc hl - ld a, BANK(MoveSoundTable) - call GetFarByte - inc hl - ld [wFrequencyModifier], a - ld a, BANK(MoveSoundTable) - call GetFarByte - ld [wTempoModifier], a - ld a, b - ret - -.FlashScreen: - ld hl, PikaPicAnimThunderboltPals -.loop - ld a, [hli] - cp $ff - ret z - ld c, a - ld b, [hl] - inc hl - push hl - call .UpdatePal - pop hl - jr .loop - -.UpdatePal: - ld a, b - ldh [rBGP], a - call UpdateGBCPal_BGP - call DelayFrames - ret - -INCLUDE "data/pikachu_pic_animation.asm" diff --git a/engine/pikachu_status.asm b/engine/pikachu_status.asm deleted file mode 100755 index c73d3b3f..00000000 --- a/engine/pikachu_status.asm +++ /dev/null @@ -1,258 +0,0 @@ -IsStarterPikachuInOurParty:: - ld hl, wPartySpecies - ld de, wPartyMon1OTID - ld bc, wPartyMonOT - push hl -.loop - pop hl - ld a, [hli] - push hl - inc a - jr z, .noPlayerPikachu - cp PIKACHU + 1 - jr nz, .curMonNotPlayerPikachu - ld h, d - ld l, e - ld a, [wPlayerID] - cp [hl] - jr nz, .curMonNotPlayerPikachu - inc hl - ld a, [wPlayerID+1] - cp [hl] - jr nz, .curMonNotPlayerPikachu - push de - push bc - ld hl, wPlayerName - ld d, $6 ; possible player length - 1 -.nameCompareLoop - dec d - jr z, .sameOT - ld a, [bc] - inc bc - cp [hl] - inc hl - jr z, .nameCompareLoop - pop bc - pop de -.curMonNotPlayerPikachu - ld hl, wPartyMon2 - wPartyMon1 - add hl, de - ld d, h - ld e, l - ld hl, NAME_LENGTH - add hl, bc - ld b, h - ld c, l - jr .loop - -.sameOT - pop bc - pop de - ld h, d - ld l, e - ld bc, -NAME_LENGTH - add hl, bc - ld a, [hli] - or [hl] - jr z, .noPlayerPikachu ; XXX how is this determined? - pop hl - scf - ret - -.noPlayerPikachu - pop hl - and a - ret - -IsThisPartymonStarterPikachu_Box:: - ld hl, wBoxMon1 - ld bc, wBoxMon2 - wBoxMon1 - ld de, wBoxMonOT - jr asm_fce21 - -IsThisPartymonStarterPikachu_Party:: -IsThisPartymonStarterPikachu:: - ld hl, wPartyMon1 - ld bc, wPartyMon2 - wPartyMon1 - ld de, wPartyMonOT -asm_fce21: - ld a, [wWhichPokemon] - call AddNTimes - ld a, [hl] - cp PIKACHU - jr nz, .notPlayerPikachu - ld bc, wPartyMon1OTID - wPartyMon1 - add hl, bc - ld a, [wPlayerID] - cp [hl] - jr nz, .notPlayerPikachu - inc hl - ld a, [wPlayerID+1] - cp [hl] - jr nz, .notPlayerPikachu - ld h, d - ld l, e - ld a, [wWhichPokemon] - ld bc, NAME_LENGTH - call AddNTimes - ld de, wPlayerName - ld b, $6 -.loop - dec b - jr z, .isPlayerPikachu - ld a, [de] - inc de - cp [hl] - inc hl - jr z, .loop -.notPlayerPikachu - and a - ret - -.isPlayerPikachu - scf - ret - -UpdatePikachuMoodAfterBattle:: -; because d is always $82 at this function, it serves to -; ensure Pikachu's mood is at least 130 after battle - push de - call IsStarterPikachuInOurParty - pop de - ret nc - ld a, d - cp 128 - ld a, [wPikachuMood] - jr c, .d_less_than_128 ; we never jump - cp d - jr c, .load_d_into_mood - ret - -.d_less_than_128 - cp d - ret c -.load_d_into_mood - ld a, d - ld [wPikachuMood], a - ret - -CheckPikachuFaintedOrStatused:: -; function to test if Pikachu is alive? - xor a - ld [wWhichPokemon], a - ld hl, wPartyCount -.loop - inc hl - ld a, [hl] - cp $ff - jr z, .dead_or_not_in_party - push hl - call IsThisPartymonStarterPikachu_Party - pop hl - jr nc, .next - ld a, [wWhichPokemon] - ld hl, wPartyMon1HP - ld bc, wPartyMon2 - wPartyMon1 - call AddNTimes - ld a, [hli] - or [hl] - ld d, a - inc hl - inc hl - ld a, [hl] ; status - and a - jr nz, .alive - jr .dead_or_not_in_party - -.next - ld a, [wWhichPokemon] - inc a - ld [wWhichPokemon], a - jr .loop - -.alive - scf - ret - -.dead_or_not_in_party - and a - ret - -IsSurfingPikachuInThePlayersParty:: - ld hl, wPartySpecies - ld de, wPartyMon1Moves - ld bc, wPartyMonOT - push hl -.loop - pop hl - ld a, [hli] - push hl - inc a - jr z, .noSurfingPlayerPikachu - cp PIKACHU+1 - jr nz, .curMonNotSurfingPlayerPikachu - ld h, d - ld l, e - push hl - push bc - ld b, NUM_MOVES -.moveSearchLoop - ld a, [hli] - cp SURF - jr z, .foundSurfingPikachu - dec b - jr nz, .moveSearchLoop - pop bc - pop hl - jr .curMonNotSurfingPlayerPikachu - -.foundSurfingPikachu - pop bc - pop hl - inc hl - inc hl - inc hl - inc hl - ld a, [wPlayerID] - cp [hl] - jr nz, .curMonNotSurfingPlayerPikachu - inc hl - ld a, [wPlayerID+1] - cp [hl] - jr nz, .curMonNotSurfingPlayerPikachu - push de - push bc - ld hl, wPlayerName - ld d, $6 -.nameCompareLoop - dec d - jr z, .foundSurfingPlayerPikachu - ld a, [bc] - inc bc - cp [hl] - inc hl - jr z, .nameCompareLoop - pop bc - pop de -.curMonNotSurfingPlayerPikachu - ld hl, wPartyMon2 - wPartyMon1 - add hl, de - ld d, h - ld e, l - ld hl, NAME_LENGTH - add hl, bc - ld b, h - ld c, l - jr .loop - -.foundSurfingPlayerPikachu - pop bc - pop de - pop hl - scf - ret - -.noSurfingPlayerPikachu - pop hl - and a - ret diff --git a/engine/printer.asm b/engine/printer.asm deleted file mode 100644 index f0b681af..00000000 --- a/engine/printer.asm +++ /dev/null @@ -1,999 +0,0 @@ - const_def - const PRINTER_STATUS_BLANK - const PRINTER_STATUS_CHECKING_LINK - const PRINTER_STATUS_TRANSMITTING - const PRINTER_STATUS_PRINTING - const PRINTER_ERROR_1 - const PRINTER_ERROR_2 - const PRINTER_ERROR_3 - const PRINTER_ERROR_4 - const PRINTER_ERROR_WRONG_DEVICE - -INCLUDE "engine/printer/serial.asm" - -PrintPokedexEntry: - ld a, [wUpdateSpritesEnabled] - push af - xor a - ld [wUpdateSpritesEnabled], a - ldh [hCanceledPrinting], a - call Printer_PlayPrinterMusic - ldh a, [rIE] - push af - xor a - ldh [rIF], a - ld a, $9 - ldh [rIE], a - xor a - ldh [hAutoBGTransferEnabled], a - call Printer_GetDexEntryRegisters - call Printer_StartTransmission - ld a, [wPrinterPokedexMonIsOwned] - and a - jr z, .not_caught - ld a, 16 - jr .got_size - -.not_caught - ld a, 19 -.got_size - ld [wcae2], a - call Printer_CopyTileMapToPrinterTileBuffer - call ClearScreen - callfar Pokedex_DrawInterface - callfar Pokedex_PlacePokemonList - ld a, $1 - ldh [hAutoBGTransferEnabled], a - call .TryPrintPage - jr c, .finish_printing - ld a, [wPrinterPokedexMonIsOwned] - and a - jr z, .finish_printing - xor a - ld [wPrinterConnectionOpen], a - ld [wPrinterOpcode], a - ld c, $c - call DelayFrames - call SaveScreenTilesToBuffer1 - xor a - ldh [hAutoBGTransferEnabled], a - call Printer_PrepareDexEntryForPrinting - ld a, $7 - call Printer_StartTransmission - ld a, $3 - ld [wcae2], a - call Printer_CopyTileMapToPrinterTileBuffer - call LoadScreenTilesFromBuffer1 - ld a, $1 - ldh [hAutoBGTransferEnabled], a - call .TryPrintPage -.finish_printing - xor a - ld [wPrinterConnectionOpen], a - ld [wPrinterOpcode], a - xor a - ldh [rIF], a - pop af - ldh [rIE], a - call ReloadMapAfterPrinter - call Printer_PlayMapMusic - pop af - ld [wUpdateSpritesEnabled], a - ret - -.TryPrintPage: - call Printer_ResetJoypadHRAM -.print_loop - call JoypadLowSensitivity - call Printer_CheckPressingB - jr c, .pressed_b - ld a, [wPrinterSendState] - bit 7, a - jr nz, .completed - call PrinterTransmissionJumptable - call GBPrinter_CheckForErrors - call GBPrinter_UpdateStatusMessage - call DelayFrame - jr .print_loop - -.completed - and a - ret - -.pressed_b - scf - ret - -Printer_GetDexEntryRegisters: - callfar DrawDexEntryOnScreen - ld a, l - ld [wPrinterPokedexEntryTextPointer], a - ld a, h - ld [wPrinterPokedexEntryTextPointer + 1], a - ld a, $0 - rla ; copy carry flag state to bit 0 - ld [wPrinterPokedexMonIsOwned], a - and a - jr z, .not_caught - ld a, $5 - jr .got_num_rows - -.not_caught - ld a, $9 -.got_num_rows - ret - -Printer_PrepareDexEntryForPrinting: - call ClearScreen - callfar Pokedex_PrepareDexEntryForPrinting - ret - -PrintSurfingMinigameHighScore: - xor a - ldh [hCanceledPrinting], a - call Printer_PlayPrinterMusic - call Printer_PrepareSurfingMinigameHighScoreTileMap - ldh a, [rIE] - push af - xor a - ldh [rIF], a - ld a, $9 - ldh [rIE], a - call StartTransmission_Send9Rows - ld a, $13 - ld [wcae2], a - call Printer_CopyTileMapToPrinterTileBuffer - call Printer_ResetJoypadHRAM -.loop - call JoypadLowSensitivity - call Printer_CheckPressingB - jr c, .quit - ld a, [wPrinterSendState] - bit 7, a - jr nz, .quit - call PrinterTransmissionJumptable - call GBPrinter_CheckForErrors - call GBPrinter_UpdateStatusMessage - call DelayFrame - jr .loop - -.quit - xor a - ld [wPrinterConnectionOpen], a - ld [wPrinterOpcode], a - call Printer_CopyTileMapFromPrinterTileBuffer - xor a - ldh [rIF], a - pop af - ldh [rIE], a - call ReloadMapAfterPrinter - call Printer_PlayMapMusic - ret - -PrintDiploma:: - xor a - ldh [hCanceledPrinting], a - call Printer_PlayPrinterMusic - call _DisplayDiploma - ldh a, [rIE] - push af - xor a - ldh [rIF], a - ld a, $9 - ldh [rIE], a - call StartTransmission_Send9Rows - ld a, $10 - ld [wcae2], a - call Printer_CopyTileMapToPrinterTileBuffer - call Func_e8d11 - jr c, .asm_e8cfa - xor a - ld [wPrinterConnectionOpen], a - ld [wPrinterOpcode], a - ld c, $c - call DelayFrames - call SaveScreenTilesToBuffer1 - xor a - ldh [hAutoBGTransferEnabled], a - call Func_e9ad3 - call StartTransmission_Send9Rows - ld a, $3 - ld [wcae2], a - call Printer_CopyTileMapToPrinterTileBuffer - call LoadScreenTilesFromBuffer1 - call Func_e8d11 -.asm_e8cfa - xor a - ld [wPrinterConnectionOpen], a - ld [wPrinterOpcode], a - call Printer_CopyTileMapFromPrinterTileBuffer - xor a - ldh [rIF], a - pop af - ldh [rIE], a - call ReloadMapAfterPrinter - call Printer_PlayMapMusic - ret - -Func_e8d11: - call Printer_ResetJoypadHRAM -.asm_e8d14 - call JoypadLowSensitivity - call Printer_CheckPressingB - jr c, .asm_e8d33 - ld a, [wPrinterSendState] - bit 7, a - jr nz, .asm_e8d31 - call PrinterTransmissionJumptable - call GBPrinter_CheckForErrors - call GBPrinter_UpdateStatusMessage - call DelayFrame - jr .asm_e8d14 - -.asm_e8d31 - and a - ret - -.asm_e8d33 - scf - ret - -PrintPCBox:: - ld a, [wBoxDataStart] - and a - jp z, Func_e8df4 - ld a, [wUpdateSpritesEnabled] - push af - xor a - ld [wUpdateSpritesEnabled], a - ldh [hCanceledPrinting], a - call Printer_PlayPrinterMusic - ldh a, [rIE] - push af - xor a - ldh [rIF], a - ld a, $9 - ldh [rIE], a - call SaveScreenTilesToBuffer1 - xor a - ldh [hAutoBGTransferEnabled], a - call PrintPCBox_DrawPage1 - call StartTransmission_Send9Rows - ld a, $10 - ld [wcae2], a - call Printer_CopyTileMapToPrinterTileBuffer - call LoadScreenTilesFromBuffer1 - call Func_e8dfb - jr c, .asm_e8ddc - xor a - ld [wPrinterConnectionOpen], a - ld [wPrinterOpcode], a - ld c, 12 - call DelayFrames - xor a - ldh [hAutoBGTransferEnabled], a - call PrintPCBox_DrawPage2 - call StartTransmission_Send9Rows - ld a, $0 - ld [wcae2], a - call Printer_CopyTileMapToPrinterTileBuffer - call LoadScreenTilesFromBuffer1 - call Func_e8dfb - jr c, .asm_e8ddc - xor a - ld [wPrinterConnectionOpen], a - ld [wPrinterOpcode], a - ld c, 12 - call DelayFrames - xor a - ldh [hAutoBGTransferEnabled], a - call PrintPCBox_DrawPage3 - call StartTransmission_Send9Rows - ld a, $0 - ld [wcae2], a - call Printer_CopyTileMapToPrinterTileBuffer - call LoadScreenTilesFromBuffer1 - call Func_e8dfb - jr c, .asm_e8ddc - xor a - ld [wPrinterConnectionOpen], a - ld [wPrinterOpcode], a - ld c, 12 - call DelayFrames - xor a - ldh [hAutoBGTransferEnabled], a - call PrintPCBox_DrawPage4 - call StartTransmission_Send9Rows - ld a, $3 - ld [wcae2], a - call Printer_CopyTileMapToPrinterTileBuffer - call LoadScreenTilesFromBuffer1 - call Func_e8dfb -.asm_e8ddc - xor a - ld [wPrinterConnectionOpen], a - ld [wPrinterOpcode], a - xor a - ldh [rIF], a - pop af - ldh [rIE], a - call ReloadMapAfterPrinter - call Printer_PlayMapMusic - pop af - ld [wUpdateSpritesEnabled], a - ret - -Func_e8df4: - ld hl, String_e8e1f - call PrintText - ret - -Func_e8dfb: - call Printer_ResetJoypadHRAM -.asm_e8dfe - call JoypadLowSensitivity - call Printer_CheckPressingB - jr c, .asm_e8e1d - ld a, [wPrinterSendState] - bit 7, a - jr nz, .asm_e8e1b - call PrinterTransmissionJumptable - call GBPrinter_CheckForErrors - call GBPrinter_UpdateStatusMessage - call DelayFrame - jr .asm_e8dfe - -.asm_e8e1b - and a - ret - -.asm_e8e1d - scf - ret - -String_e8e1f: - text_far _NoPokemonText - text_end - -PrintFanClubPortrait:: - xor a - ldh [hCanceledPrinting], a - call Printer_PlayPrinterMusic - call Printer_GetMonStats - ldh a, [rIE] - push af - xor a - ldh [rIF], a - ld a, $9 - ldh [rIE], a - call StartTransmission_Send9Rows - ld a, $13 - ld [wcae2], a - call Printer_CopyTileMapToPrinterTileBuffer - call Printer_ResetJoypadHRAM -.asm_e8e45 - call JoypadLowSensitivity - call Printer_CheckPressingB - jr c, .asm_e8e62 - ld a, [wPrinterSendState] - bit 7, a - jr nz, .asm_e8e62 - call PrinterTransmissionJumptable - call GBPrinter_CheckForErrors - call GBPrinter_UpdateStatusMessage - call DelayFrame - jr .asm_e8e45 - -.asm_e8e62 - xor a - ld [wPrinterConnectionOpen], a - ld [wPrinterOpcode], a - call Printer_CopyTileMapFromPrinterTileBuffer - xor a - ldh [rIF], a - pop af - ldh [rIE], a - call ReloadMapAfterPrinter - call Printer_PlayMapMusic - ret - -PrinterDebug: - push af - push bc - push de - push hl - call StopAllMusic - ldh a, [rIE] - push af - xor a - ldh [rIF], a - ld a, $9 - ldh [rIE], a - call StartTransmission_Send9Rows - ld a, $13 - ld [wcae2], a - ld a, $1 - ldh [hAutoBGTransferEnabled], a - call Printer_CopyTileMapToPrinterTileBuffer - call PrinterDebug_LoadGFX -.loop - ld a, [wPrinterSendState] - bit 7, a - jr nz, .quit - call PrinterDebug_DoFunction - call PrinterDebug_ConvertStatusFlagsToTiles - call DelayFrame - jr .loop - -.quit - xor a - ld [wPrinterConnectionOpen], a - ld [wPrinterOpcode], a - ld hl, wOAMBuffer + 32 * 4 - ld bc, 8 * 4 - xor a - call FillMemory - xor a - ldh [rIF], a - pop af - ldh [rIE], a - pop hl - pop de - pop bc - pop af - ret - -Printer_CheckPressingB: - ldh a, [hJoyHeld] - and B_BUTTON - jr nz, .quit - and a - ret - -.quit - ld a, [wPrinterSendState] - cp $c - jr nz, .already_done -.wait_current_task - ld a, [wPrinterOpcode] - and a - jr nz, .wait_current_task - ld a, $16 - ld [wPrinterOpcode], a - ld a, $88 - ldh [rSB], a - ld a, $1 - ldh [rSC], a - ld a, $81 - ldh [rSC], a -.wait_send_cancel - ld a, [wPrinterOpcode] - and a - jr nz, .wait_send_cancel -.already_done - ld a, $1 - ldh [hCanceledPrinting], a - scf - ret - -Printer_CopyTileMapToPrinterTileBuffer: - hlcoord 0, 0 - decoord 0, 0, wPrinterTileBuffer - ld bc, SCREEN_HEIGHT * SCREEN_WIDTH - call CopyData - ret - -Printer_CopyTileMapFromPrinterTileBuffer: - hlcoord 0, 0, wPrinterTileBuffer - decoord 0, 0 - ld bc, SCREEN_HEIGHT * SCREEN_WIDTH - call CopyData - ret - -Printer_ResetJoypadHRAM: - xor a - ldh [hJoyLast], a - ldh [hJoyReleased], a - ldh [hJoyPressed], a - ldh [hJoyHeld], a - ldh [hJoy5], a - ldh [hJoy6], a - ret - -Printer_PlayPrinterMusic: - call Printer_FadeOutMusicAndWait - ld a, [wAudioROMBank] - ld [wAudioSavedROMBank], a - ld a, BANK(Music_GBPrinter) - ld [wAudioROMBank], a - ld a, MUSIC_GB_PRINTER - ld [wNewSoundID], a - call PlaySound - ret - -Printer_PlayMapMusic: - call Printer_FadeOutMusicAndWait - call PlayDefaultMusic - ret - -Printer_FadeOutMusicAndWait: - ld a, $4 - ld [wAudioFadeOutControl], a - call StopAllMusic -.wait_music_stop - ld a, [wAudioFadeOutControl] - and a - jr nz, .wait_music_stop - ret - -GBPrinter_CheckForErrors: - ld a, [wPrinterHandshake] - cp $81 - jr z, .check_other_errors - ld a, [wPrinterStatusFlags] - cp $ff - jr z, .error2 - xor a - jr .load_status - -.check_other_errors - ld a, [wPrinterStatusFlags] - and %11100000 - ret z - bit 7, a - jr nz, .error1 - bit 6, a - jr nz, .error4 - ; error 3 - ld a, PRINTER_ERROR_3 - jr .load_status - -.error4 - ld a, PRINTER_ERROR_4 - jr .load_status - -.error1 - ld a, PRINTER_ERROR_1 - jr .load_status - -.error2 - ld a, PRINTER_ERROR_2 -.load_status - ld [wPrinterStatusIndicator], a - ret - -GBPrinter_UpdateStatusMessage: - ld a, [wPrinterStatusIndicator] - and a - ret z - push af - xor a - ldh [hAutoBGTransferEnabled], a - hlcoord 0, 5 - lb bc, 10, 18 - call TextBoxBorder - pop af - ld e, a - ld d, $0 - ld hl, .PrinterStatusMessages - add hl, de - add hl, de - ld e, [hl] - inc hl - ld d, [hl] - hlcoord 1, 7 - call PlaceString - hlcoord 2, 15 - ld de, .PressBToCancel - call PlaceString - ld a, $1 - ldh [hAutoBGTransferEnabled], a - xor a - ld [wPrinterStatusIndicator], a - ret - -.PressBToCancel: - db "Press B to Cancel@" - -.PrinterStatusMessages: - dw .Blank - dw .CheckingLink - dw .Transmitting - dw .Printing - dw .Error1 - dw .Error2 - dw .Error3 - dw .Error4 - dw .WrongDevice - -.Blank: - db "@" -.CheckingLink: - db "" - next " CHECKING LINK...@" -.Transmitting: - db "" - next " TRANSMITTING...@" -.Printing: - db "" - next " PRINTING...@" -.Error1: - db " Printer Error 1" - next "" - next "Check the Game Boy" - next "Printer Manual.@" -.Error2: - db " Printer Error 2" - next "" - next "Check the Game Boy" - next "Printer Manual.@" -.Error3: - db " Printer Error 3" - next "" - next "Check the Game Boy" - next "Printer Manual.@" -.Error4: - db " Printer Error 4" - next "" - next "Check the Game Boy" - next "Printer Manual.@" -.WrongDevice: - db "This is not the" - next "Game Boy Printer!@" - -Printer_PrepareSurfingMinigameHighScoreTileMap: - call GBPalWhiteOutWithDelay3 - call ClearScreen - ld de, SurfingPikachu2Graphics - ld hl, vChars2 - lb bc, BANK(SurfingPikachu2Graphics), (SurfingPikachu2GraphicsEnd - SurfingPikachu2Graphics) / $10 - call CopyVideoData - hlcoord 0, 0 - call .PlaceRowAlternatingTiles - hlcoord 0, 17 - call .PlaceRowAlternatingTiles - hlcoord 0, 0 - call .PlaceColumnAlternatingTiles - hlcoord 19, 0 - call .PlaceColumnAlternatingTiles - ld a, $4 - hlcoord 0, 0 - ld [hl], a - hlcoord 0, 17 - ld [hl], a - hlcoord 19, 0 - ld [hl], a - hlcoord 19, 17 - ld [hl], a - ld de, .Tilemap1 - hlcoord 10, 8 - lb bc, 3, 8 - call Diploma_Surfing_CopyBox - ld de, .Tilemap2 - hlcoord 2, 11 - lb bc, 6, 16 - call Diploma_Surfing_CopyBox - ld de, .PikachusBeachString - hlcoord 3, 2 - call PlaceString - ld de, .HiScoreString - hlcoord 9, 4 - call PlaceString - ld de, .PointsString - hlcoord 12, 6 - call PlaceString - ld de, wPlayerName - ld hl, wPlayerName - ld bc, 0 -.find_end_of_name - ld a, [hli] - inc c - cp "@" - jr nz, .find_end_of_name - ld a, 8 - sub c - jr nc, .got_name_length - xor a -.got_name_length - ld c, a - hlcoord 2, 4 - add hl, bc - call PlaceString - call CopySurfingMinigameScore - ld b, 8 - call RunPaletteCommand - ld a, $1 - ldh [hAutoBGTransferEnabled], a - call Delay3 - call GBPalNormal - ret - -.PlaceRowAlternatingTiles: - ld c, SCREEN_WIDTH / 2 -.row_loop - ld [hl], $0 - inc hl - ld [hl], $1 - inc hl - dec c - jr nz, .row_loop - ret - -.PlaceColumnAlternatingTiles: - ld c, SCREEN_HEIGHT / 2 - ld de, SCREEN_WIDTH -.col_loop - ld [hl], $2 - add hl, de - ld [hl], $3 - add hl, de - dec c - jr nz, .col_loop - ret - -.Tilemap1: - db $7f, $7f, $10, $11, $12, $13, $14, $15 - db $0f, $3c, $3d, $3e, $20, $21, $30, $31 - db $4c, $4d, $4e, $50, $34, $1a, $51, $2d - -.Tilemap2: - db $7f, $7f, $7f, $7f, $7f, $7f, $16, $17, $18, $19, $7f, $1b, $1c, $1d, $1e, $1f - db $7f, $7f, $22, $23, $24, $25, $26, $27, $28, $29, $2a, $2b, $2c, $7f, $2e, $2f - db $7f, $7f, $32, $33, $33, $35, $36, $37, $38, $39, $3a, $3b, $7f, $7f, $7f, $3f - db $40, $41, $42, $43, $44, $45, $46, $47, $48, $49, $4a, $4b, $40, $40, $40, $4f - db $52, $52, $52, $53, $54, $55, $56, $57, $58, $59, $5a, $5b, $5c, $5d, $5d, $5e - db $7f, $7f, $7f, $05, $06, $07, $08, $09, $0a, $0b, $0c, $0d, $0e, $7f, $7f, $7f - -.PikachusBeachString: - db "Pikachu's Beach@" -.HiScoreString: - db "'s Hi-Score@" -.PointsString: - db "Points@" - -Diploma_Surfing_CopyBox: -.y - push bc - push hl -.x - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .x - pop hl - ld bc, SCREEN_WIDTH - add hl, bc - pop bc - dec b - jr nz, .y - ret - -CopySurfingMinigameScore: - ld de, wSurfingMinigameHiScore + 1 - hlcoord 7, 6 - ld a, [de] - call .BCDConvertScore - ld a, [de] -.BCDConvertScore: - ld c, a - swap a - and $f - add -10 - ld [hli], a - ld a, c - and $f - add -10 - ld [hli], a - dec de - ret - -SurfingPikachu2Graphics: INCBIN "gfx/surfing_pikachu_2.2bpp" -SurfingPikachu2GraphicsEnd: - -PrintPCBox_DrawPage1: - xor a - ld [wBoxNumString], a - call ClearScreen - call PrintPCBox_PlaceHorizontalLines - hlcoord 0, 0 - ld bc, 11 * SCREEN_WIDTH - ld a, " " - call FillMemory - call PrintPCBox_DrawLeftAndRightBorders - call PrintPCBox_DrawTopBorder - hlcoord 4, 4 - ld de, .PokemonListString - call PlaceString - hlcoord 7, 6 - ld de, .BoxString - call PlaceString - hlcoord 11, 6 - ld a, [wCurrentBoxNum] - and $7f - cp 9 - jr c, .less_than_9 - sub 9 - ld [hl], "1" - inc hl - add "0" - jr .placed_box_number - -.less_than_9 - add "1" -.placed_box_number - ld [hl], a - hlcoord 4, 9 - ld de, wBoxSpecies - ld c, $3 - call PrintPCBox_PlaceBoxMonInfo - ret - -.PokemonListString: db "POKéMON LIST@" -.BoxString: db "BOX@" - -PrintPCBox_DrawPage2: - call ClearScreen - call PrintPCBox_PlaceHorizontalLines - call PrintPCBox_DrawLeftAndRightBorders - ld a, [wBoxDataStart] - cp 4 - ret c - hlcoord 4, 0 - ld de, wBoxSpecies + 3 - ld c, 6 - call PrintPCBox_PlaceBoxMonInfo - ret - -PrintPCBox_DrawPage3: - call ClearScreen - call PrintPCBox_PlaceHorizontalLines - call PrintPCBox_DrawLeftAndRightBorders - ld a, [wBoxDataStart] - cp 10 - ret c - hlcoord 4, 0 - ld de, wBoxSpecies + 9 - ld c, 6 - call PrintPCBox_PlaceBoxMonInfo - ret - -PrintPCBox_DrawPage4: - call ClearScreen - call PrintPCBox_PlaceHorizontalLines - call PrintPCBox_DrawLeftAndRightBorders - hlcoord 0, 15 - call PrintPCBox_DrawBottomBorderAtHL - hlcoord 0, 16 - ld bc, 2 * SCREEN_WIDTH - ld a, " " - call FillMemory - ld a, [wBoxDataStart] - cp 16 - ret c - hlcoord 4, 0 - ld de, wBoxSpecies + 15 - ld c, 5 - call PrintPCBox_PlaceBoxMonInfo - ret - -PrintPCBox_PlaceBoxMonInfo: -.loop - ld a, c - and a - jr z, .done - dec c - ld a, [de] - cp $ff - jr z, .done - ld [wd11e], a - push bc - push hl - push de - push hl - ld bc, 12 - ld a, " " - call FillMemory - pop hl - push hl - ld de, SCREEN_WIDTH - add hl, de - ld bc, 12 - ld a, " " - call FillMemory - pop hl - push hl - call GetMonName - pop hl - call PlaceString - push hl - ld hl, wBoxMonNicks - ld bc, NAME_LENGTH - ld a, [wBoxNumString] - call AddNTimes - ld e, l - ld d, h - pop hl - ld bc, SCREEN_WIDTH + 1 - add hl, bc - ld [hl], " " - inc hl - call PlaceString - ld hl, wBoxNumString - inc [hl] - pop de - pop hl - ld bc, 3 * SCREEN_WIDTH - add hl, bc - pop bc - inc de - jr .loop - -.done - ret - -PrintPCBox_DrawTopBorder: - hlcoord 0, 0 - ld a, $79 - ld [hli], a - ld a, $7a - ld c, SCREEN_WIDTH - 2 -.loop - ld [hli], a - dec c - jr nz, .loop - ld a, $7b - ld [hl], a - ret - -PrintPCBox_DrawLeftAndRightBorders: - hlcoord 0, 0 - ld de, SCREEN_WIDTH - 1 - ld c, SCREEN_HEIGHT -.loop - ld a, $7c - ld [hl], a - add hl, de - ld a, $7c - ld [hli], a - dec c - jr nz, .loop - ret - -PrintPCBox_DrawBottomBorder: - hlcoord 0, 17 -PrintPCBox_DrawBottomBorderAtHL: - ld a, $7d - ld [hli], a - ld a, $7a - ld c, SCREEN_WIDTH - 2 -.loop - ld [hli], a - dec c - jr nz, .loop - ld a, $7e - ld [hl], a - ret - -PrintPCBox_PlaceHorizontalLines: - hlcoord 4, 0 - ld c, 6 - call .PlaceHorizontalLine - hlcoord 6, 1 - ld c, 6 -.PlaceHorizontalLine: -.loop - push bc - push hl - ld de, .HorizontalLineString - call PlaceString - pop hl - ld bc, 3 * SCREEN_WIDTH - add hl, bc - pop bc - dec c - jr nz, .loop - ret - -.HorizontalLineString: - db "----------@" diff --git a/engine/printer/printer.asm b/engine/printer/printer.asm new file mode 100644 index 00000000..18bb18a6 --- /dev/null +++ b/engine/printer/printer.asm @@ -0,0 +1,986 @@ +PrintPokedexEntry: + ld a, [wUpdateSpritesEnabled] + push af + xor a + ld [wUpdateSpritesEnabled], a + ldh [hCanceledPrinting], a + call Printer_PlayPrinterMusic + ldh a, [rIE] + push af + xor a + ldh [rIF], a + ld a, $9 + ldh [rIE], a + xor a + ldh [hAutoBGTransferEnabled], a + call Printer_GetDexEntryRegisters + call Printer_StartTransmission + ld a, [wPrinterPokedexMonIsOwned] + and a + jr z, .not_caught + ld a, 16 + jr .got_size + +.not_caught + ld a, 19 +.got_size + ld [wcae2], a + call Printer_CopyTileMapToPrinterTileBuffer + call ClearScreen + callfar Pokedex_DrawInterface + callfar Pokedex_PlacePokemonList + ld a, $1 + ldh [hAutoBGTransferEnabled], a + call .TryPrintPage + jr c, .finish_printing + ld a, [wPrinterPokedexMonIsOwned] + and a + jr z, .finish_printing + xor a + ld [wPrinterConnectionOpen], a + ld [wPrinterOpcode], a + ld c, $c + call DelayFrames + call SaveScreenTilesToBuffer1 + xor a + ldh [hAutoBGTransferEnabled], a + call Printer_PrepareDexEntryForPrinting + ld a, $7 + call Printer_StartTransmission + ld a, $3 + ld [wcae2], a + call Printer_CopyTileMapToPrinterTileBuffer + call LoadScreenTilesFromBuffer1 + ld a, $1 + ldh [hAutoBGTransferEnabled], a + call .TryPrintPage +.finish_printing + xor a + ld [wPrinterConnectionOpen], a + ld [wPrinterOpcode], a + xor a + ldh [rIF], a + pop af + ldh [rIE], a + call ReloadMapAfterPrinter + call Printer_PlayMapMusic + pop af + ld [wUpdateSpritesEnabled], a + ret + +.TryPrintPage: + call Printer_ResetJoypadHRAM +.print_loop + call JoypadLowSensitivity + call Printer_CheckPressingB + jr c, .pressed_b + ld a, [wPrinterSendState] + bit 7, a + jr nz, .completed + call PrinterTransmissionJumptable + call GBPrinter_CheckForErrors + call GBPrinter_UpdateStatusMessage + call DelayFrame + jr .print_loop + +.completed + and a + ret + +.pressed_b + scf + ret + +Printer_GetDexEntryRegisters: + callfar DrawDexEntryOnScreen + ld a, l + ld [wPrinterPokedexEntryTextPointer], a + ld a, h + ld [wPrinterPokedexEntryTextPointer + 1], a + ld a, $0 + rla ; copy carry flag state to bit 0 + ld [wPrinterPokedexMonIsOwned], a + and a + jr z, .not_caught + ld a, $5 + jr .got_num_rows + +.not_caught + ld a, $9 +.got_num_rows + ret + +Printer_PrepareDexEntryForPrinting: + call ClearScreen + callfar Pokedex_PrepareDexEntryForPrinting + ret + +PrintSurfingMinigameHighScore:: + xor a + ldh [hCanceledPrinting], a + call Printer_PlayPrinterMusic + call Printer_PrepareSurfingMinigameHighScoreTileMap + ldh a, [rIE] + push af + xor a + ldh [rIF], a + ld a, $9 + ldh [rIE], a + call StartTransmission_Send9Rows + ld a, $13 + ld [wcae2], a + call Printer_CopyTileMapToPrinterTileBuffer + call Printer_ResetJoypadHRAM +.loop + call JoypadLowSensitivity + call Printer_CheckPressingB + jr c, .quit + ld a, [wPrinterSendState] + bit 7, a + jr nz, .quit + call PrinterTransmissionJumptable + call GBPrinter_CheckForErrors + call GBPrinter_UpdateStatusMessage + call DelayFrame + jr .loop + +.quit + xor a + ld [wPrinterConnectionOpen], a + ld [wPrinterOpcode], a + call Printer_CopyTileMapFromPrinterTileBuffer + xor a + ldh [rIF], a + pop af + ldh [rIE], a + call ReloadMapAfterPrinter + call Printer_PlayMapMusic + ret + +PrintDiploma:: + xor a + ldh [hCanceledPrinting], a + call Printer_PlayPrinterMusic + call _DisplayDiploma + ldh a, [rIE] + push af + xor a + ldh [rIF], a + ld a, $9 + ldh [rIE], a + call StartTransmission_Send9Rows + ld a, $10 + ld [wcae2], a + call Printer_CopyTileMapToPrinterTileBuffer + call Func_e8d11 + jr c, .asm_e8cfa + xor a + ld [wPrinterConnectionOpen], a + ld [wPrinterOpcode], a + ld c, $c + call DelayFrames + call SaveScreenTilesToBuffer1 + xor a + ldh [hAutoBGTransferEnabled], a + call Func_e9ad3 + call StartTransmission_Send9Rows + ld a, $3 + ld [wcae2], a + call Printer_CopyTileMapToPrinterTileBuffer + call LoadScreenTilesFromBuffer1 + call Func_e8d11 +.asm_e8cfa + xor a + ld [wPrinterConnectionOpen], a + ld [wPrinterOpcode], a + call Printer_CopyTileMapFromPrinterTileBuffer + xor a + ldh [rIF], a + pop af + ldh [rIE], a + call ReloadMapAfterPrinter + call Printer_PlayMapMusic + ret + +Func_e8d11: + call Printer_ResetJoypadHRAM +.asm_e8d14 + call JoypadLowSensitivity + call Printer_CheckPressingB + jr c, .asm_e8d33 + ld a, [wPrinterSendState] + bit 7, a + jr nz, .asm_e8d31 + call PrinterTransmissionJumptable + call GBPrinter_CheckForErrors + call GBPrinter_UpdateStatusMessage + call DelayFrame + jr .asm_e8d14 + +.asm_e8d31 + and a + ret + +.asm_e8d33 + scf + ret + +PrintPCBox:: + ld a, [wBoxDataStart] + and a + jp z, Func_e8df4 + ld a, [wUpdateSpritesEnabled] + push af + xor a + ld [wUpdateSpritesEnabled], a + ldh [hCanceledPrinting], a + call Printer_PlayPrinterMusic + ldh a, [rIE] + push af + xor a + ldh [rIF], a + ld a, $9 + ldh [rIE], a + call SaveScreenTilesToBuffer1 + xor a + ldh [hAutoBGTransferEnabled], a + call PrintPCBox_DrawPage1 + call StartTransmission_Send9Rows + ld a, $10 + ld [wcae2], a + call Printer_CopyTileMapToPrinterTileBuffer + call LoadScreenTilesFromBuffer1 + call Func_e8dfb + jr c, .asm_e8ddc + xor a + ld [wPrinterConnectionOpen], a + ld [wPrinterOpcode], a + ld c, 12 + call DelayFrames + xor a + ldh [hAutoBGTransferEnabled], a + call PrintPCBox_DrawPage2 + call StartTransmission_Send9Rows + ld a, $0 + ld [wcae2], a + call Printer_CopyTileMapToPrinterTileBuffer + call LoadScreenTilesFromBuffer1 + call Func_e8dfb + jr c, .asm_e8ddc + xor a + ld [wPrinterConnectionOpen], a + ld [wPrinterOpcode], a + ld c, 12 + call DelayFrames + xor a + ldh [hAutoBGTransferEnabled], a + call PrintPCBox_DrawPage3 + call StartTransmission_Send9Rows + ld a, $0 + ld [wcae2], a + call Printer_CopyTileMapToPrinterTileBuffer + call LoadScreenTilesFromBuffer1 + call Func_e8dfb + jr c, .asm_e8ddc + xor a + ld [wPrinterConnectionOpen], a + ld [wPrinterOpcode], a + ld c, 12 + call DelayFrames + xor a + ldh [hAutoBGTransferEnabled], a + call PrintPCBox_DrawPage4 + call StartTransmission_Send9Rows + ld a, $3 + ld [wcae2], a + call Printer_CopyTileMapToPrinterTileBuffer + call LoadScreenTilesFromBuffer1 + call Func_e8dfb +.asm_e8ddc + xor a + ld [wPrinterConnectionOpen], a + ld [wPrinterOpcode], a + xor a + ldh [rIF], a + pop af + ldh [rIE], a + call ReloadMapAfterPrinter + call Printer_PlayMapMusic + pop af + ld [wUpdateSpritesEnabled], a + ret + +Func_e8df4: + ld hl, String_e8e1f + call PrintText + ret + +Func_e8dfb: + call Printer_ResetJoypadHRAM +.asm_e8dfe + call JoypadLowSensitivity + call Printer_CheckPressingB + jr c, .asm_e8e1d + ld a, [wPrinterSendState] + bit 7, a + jr nz, .asm_e8e1b + call PrinterTransmissionJumptable + call GBPrinter_CheckForErrors + call GBPrinter_UpdateStatusMessage + call DelayFrame + jr .asm_e8dfe + +.asm_e8e1b + and a + ret + +.asm_e8e1d + scf + ret + +String_e8e1f: + text_far _NoPokemonText + text_end + +PrintFanClubPortrait:: + xor a + ldh [hCanceledPrinting], a + call Printer_PlayPrinterMusic + call Printer_GetMonStats + ldh a, [rIE] + push af + xor a + ldh [rIF], a + ld a, $9 + ldh [rIE], a + call StartTransmission_Send9Rows + ld a, $13 + ld [wcae2], a + call Printer_CopyTileMapToPrinterTileBuffer + call Printer_ResetJoypadHRAM +.asm_e8e45 + call JoypadLowSensitivity + call Printer_CheckPressingB + jr c, .asm_e8e62 + ld a, [wPrinterSendState] + bit 7, a + jr nz, .asm_e8e62 + call PrinterTransmissionJumptable + call GBPrinter_CheckForErrors + call GBPrinter_UpdateStatusMessage + call DelayFrame + jr .asm_e8e45 + +.asm_e8e62 + xor a + ld [wPrinterConnectionOpen], a + ld [wPrinterOpcode], a + call Printer_CopyTileMapFromPrinterTileBuffer + xor a + ldh [rIF], a + pop af + ldh [rIE], a + call ReloadMapAfterPrinter + call Printer_PlayMapMusic + ret + +PrinterDebug: + push af + push bc + push de + push hl + call StopAllMusic + ldh a, [rIE] + push af + xor a + ldh [rIF], a + ld a, $9 + ldh [rIE], a + call StartTransmission_Send9Rows + ld a, $13 + ld [wcae2], a + ld a, $1 + ldh [hAutoBGTransferEnabled], a + call Printer_CopyTileMapToPrinterTileBuffer + call PrinterDebug_LoadGFX +.loop + ld a, [wPrinterSendState] + bit 7, a + jr nz, .quit + call PrinterDebug_DoFunction + call PrinterDebug_ConvertStatusFlagsToTiles + call DelayFrame + jr .loop + +.quit + xor a + ld [wPrinterConnectionOpen], a + ld [wPrinterOpcode], a + ld hl, wOAMBuffer + 32 * 4 + ld bc, 8 * 4 + xor a + call FillMemory + xor a + ldh [rIF], a + pop af + ldh [rIE], a + pop hl + pop de + pop bc + pop af + ret + +Printer_CheckPressingB: + ldh a, [hJoyHeld] + and B_BUTTON + jr nz, .quit + and a + ret + +.quit + ld a, [wPrinterSendState] + cp $c + jr nz, .already_done +.wait_current_task + ld a, [wPrinterOpcode] + and a + jr nz, .wait_current_task + ld a, $16 + ld [wPrinterOpcode], a + ld a, $88 + ldh [rSB], a + ld a, $1 + ldh [rSC], a + ld a, $81 + ldh [rSC], a +.wait_send_cancel + ld a, [wPrinterOpcode] + and a + jr nz, .wait_send_cancel +.already_done + ld a, $1 + ldh [hCanceledPrinting], a + scf + ret + +Printer_CopyTileMapToPrinterTileBuffer: + hlcoord 0, 0 + decoord 0, 0, wPrinterTileBuffer + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + call CopyData + ret + +Printer_CopyTileMapFromPrinterTileBuffer: + hlcoord 0, 0, wPrinterTileBuffer + decoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + call CopyData + ret + +Printer_ResetJoypadHRAM: + xor a + ldh [hJoyLast], a + ldh [hJoyReleased], a + ldh [hJoyPressed], a + ldh [hJoyHeld], a + ldh [hJoy5], a + ldh [hJoy6], a + ret + +Printer_PlayPrinterMusic: + call Printer_FadeOutMusicAndWait + ld a, [wAudioROMBank] + ld [wAudioSavedROMBank], a + ld a, BANK(Music_GBPrinter) + ld [wAudioROMBank], a + ld a, MUSIC_GB_PRINTER + ld [wNewSoundID], a + call PlaySound + ret + +Printer_PlayMapMusic: + call Printer_FadeOutMusicAndWait + call PlayDefaultMusic + ret + +Printer_FadeOutMusicAndWait: + ld a, $4 + ld [wAudioFadeOutControl], a + call StopAllMusic +.wait_music_stop + ld a, [wAudioFadeOutControl] + and a + jr nz, .wait_music_stop + ret + +GBPrinter_CheckForErrors: + ld a, [wPrinterHandshake] + cp $81 + jr z, .check_other_errors + ld a, [wPrinterStatusFlags] + cp $ff + jr z, .error2 + xor a + jr .load_status + +.check_other_errors + ld a, [wPrinterStatusFlags] + and %11100000 + ret z + bit 7, a + jr nz, .error1 + bit 6, a + jr nz, .error4 + ; error 3 + ld a, PRINTER_ERROR_3 + jr .load_status + +.error4 + ld a, PRINTER_ERROR_4 + jr .load_status + +.error1 + ld a, PRINTER_ERROR_1 + jr .load_status + +.error2 + ld a, PRINTER_ERROR_2 +.load_status + ld [wPrinterStatusIndicator], a + ret + +GBPrinter_UpdateStatusMessage: + ld a, [wPrinterStatusIndicator] + and a + ret z + push af + xor a + ldh [hAutoBGTransferEnabled], a + hlcoord 0, 5 + lb bc, 10, 18 + call TextBoxBorder + pop af + ld e, a + ld d, $0 + ld hl, .PrinterStatusMessages + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + hlcoord 1, 7 + call PlaceString + hlcoord 2, 15 + ld de, .PressBToCancel + call PlaceString + ld a, $1 + ldh [hAutoBGTransferEnabled], a + xor a + ld [wPrinterStatusIndicator], a + ret + +.PressBToCancel: + db "Press B to Cancel@" + +.PrinterStatusMessages: + dw .Blank + dw .CheckingLink + dw .Transmitting + dw .Printing + dw .Error1 + dw .Error2 + dw .Error3 + dw .Error4 + dw .WrongDevice + +.Blank: + db "@" +.CheckingLink: + db "" + next " CHECKING LINK...@" +.Transmitting: + db "" + next " TRANSMITTING...@" +.Printing: + db "" + next " PRINTING...@" +.Error1: + db " Printer Error 1" + next "" + next "Check the Game Boy" + next "Printer Manual.@" +.Error2: + db " Printer Error 2" + next "" + next "Check the Game Boy" + next "Printer Manual.@" +.Error3: + db " Printer Error 3" + next "" + next "Check the Game Boy" + next "Printer Manual.@" +.Error4: + db " Printer Error 4" + next "" + next "Check the Game Boy" + next "Printer Manual.@" +.WrongDevice: + db "This is not the" + next "Game Boy Printer!@" + +Printer_PrepareSurfingMinigameHighScoreTileMap:: + call GBPalWhiteOutWithDelay3 + call ClearScreen + ld de, SurfingPikachu2Graphics + ld hl, vChars2 + lb bc, BANK(SurfingPikachu2Graphics), (SurfingPikachu2GraphicsEnd - SurfingPikachu2Graphics) / $10 + call CopyVideoData + hlcoord 0, 0 + call .PlaceRowAlternatingTiles + hlcoord 0, 17 + call .PlaceRowAlternatingTiles + hlcoord 0, 0 + call .PlaceColumnAlternatingTiles + hlcoord 19, 0 + call .PlaceColumnAlternatingTiles + ld a, $4 + hlcoord 0, 0 + ld [hl], a + hlcoord 0, 17 + ld [hl], a + hlcoord 19, 0 + ld [hl], a + hlcoord 19, 17 + ld [hl], a + ld de, .Tilemap1 + hlcoord 10, 8 + lb bc, 3, 8 + call Diploma_Surfing_CopyBox + ld de, .Tilemap2 + hlcoord 2, 11 + lb bc, 6, 16 + call Diploma_Surfing_CopyBox + ld de, .PikachusBeachString + hlcoord 3, 2 + call PlaceString + ld de, .HiScoreString + hlcoord 9, 4 + call PlaceString + ld de, .PointsString + hlcoord 12, 6 + call PlaceString + ld de, wPlayerName + ld hl, wPlayerName + ld bc, 0 +.find_end_of_name + ld a, [hli] + inc c + cp "@" + jr nz, .find_end_of_name + ld a, 8 + sub c + jr nc, .got_name_length + xor a +.got_name_length + ld c, a + hlcoord 2, 4 + add hl, bc + call PlaceString + call CopySurfingMinigameScore + ld b, 8 + call RunPaletteCommand + ld a, $1 + ldh [hAutoBGTransferEnabled], a + call Delay3 + call GBPalNormal + ret + +.PlaceRowAlternatingTiles: + ld c, SCREEN_WIDTH / 2 +.row_loop + ld [hl], $0 + inc hl + ld [hl], $1 + inc hl + dec c + jr nz, .row_loop + ret + +.PlaceColumnAlternatingTiles: + ld c, SCREEN_HEIGHT / 2 + ld de, SCREEN_WIDTH +.col_loop + ld [hl], $2 + add hl, de + ld [hl], $3 + add hl, de + dec c + jr nz, .col_loop + ret + +.Tilemap1: + db $7f, $7f, $10, $11, $12, $13, $14, $15 + db $0f, $3c, $3d, $3e, $20, $21, $30, $31 + db $4c, $4d, $4e, $50, $34, $1a, $51, $2d + +.Tilemap2: + db $7f, $7f, $7f, $7f, $7f, $7f, $16, $17, $18, $19, $7f, $1b, $1c, $1d, $1e, $1f + db $7f, $7f, $22, $23, $24, $25, $26, $27, $28, $29, $2a, $2b, $2c, $7f, $2e, $2f + db $7f, $7f, $32, $33, $33, $35, $36, $37, $38, $39, $3a, $3b, $7f, $7f, $7f, $3f + db $40, $41, $42, $43, $44, $45, $46, $47, $48, $49, $4a, $4b, $40, $40, $40, $4f + db $52, $52, $52, $53, $54, $55, $56, $57, $58, $59, $5a, $5b, $5c, $5d, $5d, $5e + db $7f, $7f, $7f, $05, $06, $07, $08, $09, $0a, $0b, $0c, $0d, $0e, $7f, $7f, $7f + +.PikachusBeachString: + db "Pikachu's Beach@" +.HiScoreString: + db "'s Hi-Score@" +.PointsString: + db "Points@" + +Diploma_Surfing_CopyBox: +.y + push bc + push hl +.x + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .x + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .y + ret + +CopySurfingMinigameScore: + ld de, wSurfingMinigameHiScore + 1 + hlcoord 7, 6 + ld a, [de] + call .BCDConvertScore + ld a, [de] +.BCDConvertScore: + ld c, a + swap a + and $f + add -10 + ld [hli], a + ld a, c + and $f + add -10 + ld [hli], a + dec de + ret + +SurfingPikachu2Graphics: INCBIN "gfx/surfing_pikachu/surfing_pikachu_2.2bpp" +SurfingPikachu2GraphicsEnd: + +PrintPCBox_DrawPage1: + xor a + ld [wBoxNumString], a + call ClearScreen + call PrintPCBox_PlaceHorizontalLines + hlcoord 0, 0 + ld bc, 11 * SCREEN_WIDTH + ld a, " " + call FillMemory + call PrintPCBox_DrawLeftAndRightBorders + call PrintPCBox_DrawTopBorder + hlcoord 4, 4 + ld de, .PokemonListString + call PlaceString + hlcoord 7, 6 + ld de, .BoxString + call PlaceString + hlcoord 11, 6 + ld a, [wCurrentBoxNum] + and $7f + cp 9 + jr c, .less_than_9 + sub 9 + ld [hl], "1" + inc hl + add "0" + jr .placed_box_number + +.less_than_9 + add "1" +.placed_box_number + ld [hl], a + hlcoord 4, 9 + ld de, wBoxSpecies + ld c, $3 + call PrintPCBox_PlaceBoxMonInfo + ret + +.PokemonListString: db "POKéMON LIST@" +.BoxString: db "BOX@" + +PrintPCBox_DrawPage2: + call ClearScreen + call PrintPCBox_PlaceHorizontalLines + call PrintPCBox_DrawLeftAndRightBorders + ld a, [wBoxDataStart] + cp 4 + ret c + hlcoord 4, 0 + ld de, wBoxSpecies + 3 + ld c, 6 + call PrintPCBox_PlaceBoxMonInfo + ret + +PrintPCBox_DrawPage3: + call ClearScreen + call PrintPCBox_PlaceHorizontalLines + call PrintPCBox_DrawLeftAndRightBorders + ld a, [wBoxDataStart] + cp 10 + ret c + hlcoord 4, 0 + ld de, wBoxSpecies + 9 + ld c, 6 + call PrintPCBox_PlaceBoxMonInfo + ret + +PrintPCBox_DrawPage4: + call ClearScreen + call PrintPCBox_PlaceHorizontalLines + call PrintPCBox_DrawLeftAndRightBorders + hlcoord 0, 15 + call PrintPCBox_DrawBottomBorderAtHL + hlcoord 0, 16 + ld bc, 2 * SCREEN_WIDTH + ld a, " " + call FillMemory + ld a, [wBoxDataStart] + cp 16 + ret c + hlcoord 4, 0 + ld de, wBoxSpecies + 15 + ld c, 5 + call PrintPCBox_PlaceBoxMonInfo + ret + +PrintPCBox_PlaceBoxMonInfo: +.loop + ld a, c + and a + jr z, .done + dec c + ld a, [de] + cp $ff + jr z, .done + ld [wd11e], a + push bc + push hl + push de + push hl + ld bc, 12 + ld a, " " + call FillMemory + pop hl + push hl + ld de, SCREEN_WIDTH + add hl, de + ld bc, 12 + ld a, " " + call FillMemory + pop hl + push hl + call GetMonName + pop hl + call PlaceString + push hl + ld hl, wBoxMonNicks + ld bc, NAME_LENGTH + ld a, [wBoxNumString] + call AddNTimes + ld e, l + ld d, h + pop hl + ld bc, SCREEN_WIDTH + 1 + add hl, bc + ld [hl], " " + inc hl + call PlaceString + ld hl, wBoxNumString + inc [hl] + pop de + pop hl + ld bc, 3 * SCREEN_WIDTH + add hl, bc + pop bc + inc de + jr .loop + +.done + ret + +PrintPCBox_DrawTopBorder: + hlcoord 0, 0 + ld a, $79 + ld [hli], a + ld a, $7a + ld c, SCREEN_WIDTH - 2 +.loop + ld [hli], a + dec c + jr nz, .loop + ld a, $7b + ld [hl], a + ret + +PrintPCBox_DrawLeftAndRightBorders: + hlcoord 0, 0 + ld de, SCREEN_WIDTH - 1 + ld c, SCREEN_HEIGHT +.loop + ld a, $7c + ld [hl], a + add hl, de + ld a, $7c + ld [hli], a + dec c + jr nz, .loop + ret + +PrintPCBox_DrawBottomBorder: + hlcoord 0, 17 +PrintPCBox_DrawBottomBorderAtHL: + ld a, $7d + ld [hli], a + ld a, $7a + ld c, SCREEN_WIDTH - 2 +.loop + ld [hli], a + dec c + jr nz, .loop + ld a, $7e + ld [hl], a + ret + +PrintPCBox_PlaceHorizontalLines: + hlcoord 4, 0 + ld c, 6 + call .PlaceHorizontalLine + hlcoord 6, 1 + ld c, 6 +.PlaceHorizontalLine: +.loop + push bc + push hl + ld de, .HorizontalLineString + call PlaceString + pop hl + ld bc, 3 * SCREEN_WIDTH + add hl, bc + pop bc + dec c + jr nz, .loop + ret + +.HorizontalLineString: + db "----------@" diff --git a/engine/printer/printer2.asm b/engine/printer/printer2.asm new file mode 100755 index 00000000..180f044c --- /dev/null +++ b/engine/printer/printer2.asm @@ -0,0 +1,973 @@ +Printer_GetMonStats: + call GBPalWhiteOutWithDelay3 + call ClearScreen + call LoadHpBarAndStatusTilePatterns + ld de, GFX_ea563 + ld hl, vChars2 + $710 + lb bc, BANK(GFX_ea563), (GFX_ea563End - GFX_ea563) / 8 + call CopyVideoDataDouble + + ld de, GFX_ea56b + ld hl, vChars2 + $6e0 + lb bc, BANK(GFX_ea56b), (GFX_ea56bEnd - GFX_ea56b) / 8 + call CopyVideoDataDouble + + xor a + ldh [hAutoBGTransferEnabled], a + xor a + ld [wWhichTradeMonSelectionMenu], a + call LoadMonData + + ld hl, wTileMap + lb bc, 16, 18 + call TextBoxBorder + + hlcoord 0, 12 + lb bc, 4, 18 + call TextBoxBorder + + hlcoord 3, 10 + call PrintLevelFull + + hlcoord 2, 10 + ld a, $6e + ld [hli], a + ld [hl], " " + + hlcoord 2, 11 + ld [hl], "’" + + hlcoord 4, 11 + ld de, wLoadedMonMaxHP + lb bc, 2, 3 + call PrintNumber + + ld a, [wMonHeader] + ld [wPokeBallAnimData], a + ld [wd0b5], a + ld hl, wPartyMonNicks + call .GetNamePointer + hlcoord 8, 2 + call PlaceString + + call GetMonName + hlcoord 9, 3 + call PlaceString + + predef IndexToPokedex + hlcoord 2, 8 + ld [hl], "â„–" + inc hl + ld [hl], $f2 + inc hl + ld de, wPokeBallAnimData + lb bc, $80 | 1, 3 + call PrintNumber + + hlcoord 8, 4 + ld de, .OT + call PlaceString + + ld hl, wPartyMonOT + call .GetNamePointer + hlcoord 9, 5 + call PlaceString + + hlcoord 9, 6 + ld de, .IDNo + call PlaceString + + hlcoord 13, 6 + ld de, wLoadedMonOTID + lb bc, $80 | 2, 5 + call PrintNumber + + hlcoord 9, 8 + ld de, .Stats + ldh a, [hFlagsFFFA] + set 2, a + ldh [hFlagsFFFA], a + call PlaceString + ldh a, [hFlagsFFFA] + res 2, a + ldh [hFlagsFFFA], a + + hlcoord 16, 8 + ld de, wLoadedMonAttack + ld a, 4 +.loop + push af + push de + + push hl + lb bc, 2, 3 + call PrintNumber + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + + pop de + inc de + inc de + pop af + dec a + jr nz, .loop + + hlcoord 1, 13 + ld a, [wLoadedMonMoves] + call .PlaceMoveName + + hlcoord 1, 14 + ld a, [wLoadedMonMoves + 1] + call .PlaceMoveName + + hlcoord 1, 15 + ld a, [wLoadedMonMoves + 2] + call .PlaceMoveName + + hlcoord 1, 16 + ld a, [wLoadedMonMoves + 3] + call .PlaceMoveName + + ld b, $4 ; SET_PAL_STATUS_SCREEN + call RunPaletteCommand + + ld a, $1 + ldh [hAutoBGTransferEnabled], a + call Delay3 + call GBPalNormal + hlcoord 1, 1 + call LoadFlippedFrontSpriteByMonIndex + ret + +.GetNamePointer: + ld bc, NAME_LENGTH + ld a, [wWhichPokemon] + call AddNTimes + ld e, l + ld d, h + ret + +.PlaceMoveName: + and a + jr z, .no_move + ld [wPokeBallAnimData], a + call GetMoveName + jr .place_string + +.no_move + ld de, .Blank +.place_string + call PlaceString + ret + +.OT: + db "OT/@" + +.IDNo: + db $73, "â„–/@" + +.Stats: + db "ATTACK" + next "DEFENSE" + next "SPEED" + next "SPECIAL@" + +.Blank: + db "--------------@" + +GFX_ea563: +INCBIN "gfx/printer/hp.1bpp" +GFX_ea563End: + +GFX_ea56b: +INCBIN "gfx/printer/lv.1bpp" +GFX_ea56bEnd: + +PrinterDebug_LoadGFX: + ld hl, vChars1 + $7e0 + ld de, GFX_ea597 + lb bc, BANK(GFX_ea597), (GFX_ea597End - GFX_ea597) / 16 + call CopyVideoData + + ld hl, wOAMBuffer + 32 * 4 + ld a, $8 + ld c, $8 +.loop + ld [hl], $10 + inc hl + ld [hl], a + inc hl + ld [hl], $fe + inc hl + ld [hl], $0 + inc hl + add $8 + dec c + jr nz, .loop + ret + +GFX_ea597: +INCBIN "gfx/printer/01.2bpp" +GFX_ea597End: + +PrinterDebug_ConvertStatusFlagsToTiles: + ld hl, wOAMBuffer + 32 * 4 + 2 + ld de, 4 + ld a, [wPrinterStatusFlags] + ld c, 8 +.loop + sla a + jr c, .place_1 + ld [hl], $fe + jr .okay + +.place_1 + ld [hl], $ff +.okay + add hl, de + dec c + jr nz, .loop + ret + +PrinterDebug_DoFunction: + ld a, [wPrinterSendState] + ld e, a + ld d, 0 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.Jumptable: + dw Func_ea623 + dw Func_ea6d2 + dw Func_ea6af + dw Func_ea645 + dw Func_ea701 + dw Func_ea6bd + dw Func_ea671 + dw Func_ea701 + dw Func_ea6af + dw Func_ea68a + dw Func_ea701 + dw Func_ea6af + dw Func_ea721 + dw Func_ea610 + dw Func_ea61a + dw Func_ea6af + dw Func_ea61e + dw Func_ea72f + dw Func_ea732 + +Func_ea606: + ld hl, wPrinterSendState + inc [hl] + ret + +Func_ea60b: + ld hl, wPrinterSendState + dec [hl] + ret + +Func_ea610: + xor a + ld [wPrinterStatusFlags], a + ld hl, wPrinterSendState + set 7, [hl] + ret + +Func_ea61a: + call Func_ea606 + ret + +Func_ea61e: + xor a + ld [wPrinterSendState], a + ret + +Func_ea623: + call Func_ea784 + ld hl, Data_ea9de + call Func_ea76b + xor a + ld [wPrinterDataSize], a + ld [wPrinterDataSize + 1], a + ld a, [wPrinterQueueLength] + ld [wPrinterRowIndex], a + call Func_ea606 + call Func_ea74c + ld a, $1 + ld [wPrinterStatusIndicator], a + ret + +Func_ea645: + call Func_ea784 + ld hl, wPrinterRowIndex + ld a, [hl] + and a + jr z, Func_ea671 + ld hl, Data_ea9ea + call Func_ea76b + call PrinterDebug_PrepOAMForPrinting + ld a, $80 + ld [wPrinterDataSize], a + ld a, $2 + ld [wPrinterDataSize + 1], a + call Func_ea7a2 + call Func_ea606 + call Func_ea74c + ld a, $2 + ld [wPrinterStatusIndicator], a + ret + +Func_ea671: + ld a, $6 + ld [wPrinterSendState], a + ld hl, Data_ea9f0 + call Func_ea76b + xor a + ld [wPrinterDataSize], a + ld [wPrinterDataSize + 1], a + call Func_ea606 + call Func_ea74c + ret + +Func_ea68a: + call Func_ea784 + ld hl, Data_ea9e4 + call Func_ea76b + call Func_ea7d2 + ld a, $4 + ld [wPrinterDataSize], a + ld a, $0 + ld [wPrinterDataSize + 1], a + call Func_ea7a2 + call Func_ea606 + call Func_ea74c + ld a, $3 + ld [wPrinterStatusIndicator], a + ret + +Func_ea6af: + ld hl, wPrinterSerialFrameDelay + inc [hl] + ld a, [hl] + cp a, $6 + ret c + xor a + ld [hl], a + call Func_ea606 + ret + +Func_ea6bd: + ld hl, wPrinterSerialFrameDelay + inc [hl] + ld a, [hl] + cp 6 + ret c + xor a + ld [hl], a + ld hl, wPrinterRowIndex + dec [hl] + call Func_ea60b + call Func_ea60b + ret + +Func_ea6d2: + call Func_ea742 + ret c + ld a, [wPrinterHandshake] + cp a, $ff + jr nz, .asm_ea6e4 + ld a, [wPrinterStatusFlags] + cp a, $ff + jr z, .asm_ea6fb +.asm_ea6e4 + ld a, [wPrinterHandshake] + cp a, $81 + jr nz, .asm_ea6fb + ld a, [wPrinterStatusFlags] + cp a, $0 + jr nz, .asm_ea6fb + ld hl, wPrinterConnectionOpen + set 1, [hl] + call Func_ea606 + ret + +.asm_ea6fb + ld a, $e + ld [wPrinterSendState], a + ret + +Func_ea701: + call Func_ea742 + ret c + ld a, [wPrinterStatusFlags] + and $f0 + jr nz, .asm_ea71b + ld a, [wPrinterStatusFlags] + and $1 + jr nz, .asm_ea717 + call Func_ea606 + ret + +.asm_ea717 + call Func_ea60b + ret + +.asm_ea71b + ld a, $11 + ld [wPrinterSendState], a + ret + +Func_ea721: + call Func_ea742 + ret c + ld a, [wPrinterStatusFlags] + and $f3 + ret nz + call Func_ea606 + ret + +Func_ea72f: + call Func_ea606 +Func_ea732: + ld a, [wPrinterOpcode] + and a + ret nz + ld a, [wPrinterStatusFlags] + and $f0 + ret nz + xor a + ld [wPrinterSendState], a + ret + +Func_ea742: + ld a, [wPrinterOpcode] + and a + jr nz, .asm_ea74a + and a + ret + +.asm_ea74a + scf + ret + +Func_ea74c: +.asm_ea74c + ld a, [wPrinterOpcode] + and a + jr nz, .asm_ea74c + ld a, $1 + ld [wPrinterOpcode], a + xor a + ld [wPrinterSendByteOffset], a + ld [wPrinterSendByteOffset + 1], a + ld a, $88 + ldh [rSB], a + ld a, $1 + ldh [rSC], a + ld a, $81 + ldh [rSC], a + ret + +Func_ea76b: + ld a, [hli] + ld [wPrinterDataHeader], a + ld a, [hli] + ld [wPrinterDataHeader + 1], a + ld a, [hli] + ld [wPrinterDataHeader + 2], a + ld a, [hli] + ld [wPrinterDataHeader + 3], a + ld a, [hli] + ld [wPrinterDataHeader + 4], a + ld a, [hl] + ld [wPrinterDataHeader + 5], a + ret + +Func_ea784: + xor a + ld hl, wPrinterDataHeader + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ld hl, wPrinterDataHeader + 4 + ld [hli], a + ld [hl], a + xor a + ld [wPrinterDataSize], a + ld [wPrinterDataSize + 1], a + ld hl, wPrinterSendDataSource1 + ld bc, $280 + call FillMemory + ret + +Func_ea7a2: + ld hl, $0 + ld bc, $4 + ld de, wPrinterDataHeader + call Func_ea7c5 + ld a, [wPrinterDataSize] + ld c, a + ld a, [wPrinterDataSize + 1] + ld b, a + ld de, wPrinterSendDataSource1 + call Func_ea7c5 + ld a, l + ld [wPrinterDataHeader + 4], a + ld a, h + ld [wPrinterDataHeader + 5], a + ret + +Func_ea7c5: +.asm_ea7c5 + ld a, [de] + inc de + add l + jr nc, .asm_ea7cb + inc h +.asm_ea7cb + ld l, a + dec bc + ld a, c + or b + jr nz, .asm_ea7c5 + ret + +Func_ea7d2: + ld a, $1 + ld [wPrinterSendDataSource1], a + ld a, [wcae2] + ld [wPrinterStatusReceived], a + ld a, $e4 + ld [wc6f2], a + ld a, [wPrinterSettingsTempCopy] + ld [wc6f3], a + ret + +PrinterDebug_PrepOAMForPrinting: + ld a, [wPrinterRowIndex] + ld b, a + ld a, [wPrinterQueueLength] + sub b + ld hl, wPrinterTileBuffer + ld de, $28 +.get_start_addr + and a + jr z, .start_working + add hl, de + dec a + jr .get_start_addr + +.start_working + ld e, l + ld d, h + ld hl, wPrinterSendDataSource1 + ld c, $28 +.prep_loop + ld a, [de] + inc de + push bc + push de + push hl + swap a + ld d, a + and $f0 + ld e, a + ld a, d + and $f + ld d, a + and $8 + ld a, d + jr nz, .vtiles1 + or $90 + jr .got_vram_address + +.vtiles1 + or $80 +.got_vram_address + ld d, a + lb bc, BANK(PrinterDebug_PrepOAMForPrinting), $1 + call CopyVideoData + pop hl + ld de, $10 + add hl, de + pop de + pop bc + dec c + jr nz, .prep_loop + call .UnnecessaryCall + ret + +.UnnecessaryCall: + ld hl, wcbdc + ld bc, $20 + xor a + call FillMemory + ld hl, wOAMBuffer + ld c, $28 +.master_loop + push bc + push hl + call .AreWePrintingThisSegment + jr nc, .skip_segment + call .GetVRAMAddress + call .GetOAMFlags + call .ApplyObjectPalettes + call .PlaceObject +.skip_segment + pop hl + inc hl + inc hl + inc hl + inc hl + pop bc + dec c + jr nz, .master_loop + ret + +.AreWePrintingThisSegment: + ld a, [wPrinterRowIndex] + ld b, a + ld a, [wPrinterQueueLength] + sub b + ld c, a + ld b, $10 +.add_n_times + ld a, c + and a + jr z, .check + ld a, b + add $10 + ld b, a + dec c + jr .add_n_times + +.check + ld a, b + ld e, a + add $10 + ld d, a + ld a, [hl] + cp e + jr c, .not_printing + cp d + jr nc, .not_printing + scf + ret + +.not_printing + and a + ret + +.GetVRAMAddress: + push hl + inc hl + inc hl + ld a, [hl] + swap a + ld d, a + and $f0 + ld e, a + ld a, d + and $f + or $80 + ld d, a + ld hl, wcbdc + lb bc, BANK(.GetVRAMAddress), $1 + call CopyVideoData + pop hl + ret + +.GetOAMFlags: + push hl + inc hl + inc hl + inc hl + ld a, [hl] + call .DoBitOperation + pop hl + ret + +.DoBitOperation: + and $60 + swap a + ld e, a + ld d, 0 + ld hl, .Jumptable + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.Jumptable: + dw .nop + dw .xflip + dw .yflip + dw .both + +.nop: + ret + +.xflip: + call .XFlip + ret + +.yflip: + call .YFlip + ret + +.both: + call .XFlip + call .YFlip + ret + +.XFlip: + ld hl, wcbdc + ld c, 16 +.byte_loop + ld d, [hl] + ld a, 0 + ld b, 8 +.bit_loop + sla d + rr a + dec b + jr nz, .bit_loop + ld [hli], a + dec c + jr nz, .byte_loop + ret + +.YFlip: + ld hl, wcbdc + ld de, wcbea + ld c, $4 +.swap_loop + ld b, [hl] + ld a, [de] + ld [hli], a + ld a, b + ld [de], a + inc de + ld b, [hl] + ld a, [de] + ld [hli], a + ld a, b + ld [de], a + dec de + dec de + dec de + dec c + jr nz, .swap_loop + ret + +.ApplyObjectPalettes: + push hl + ld hl, wcbdc + ld de, wcbec + ld a, 8 +.loop1 + push af + ld bc, $0 + ld a, 8 +.loop2 + push af + xor a + rlc [hl] + rl a + inc hl + rlc [hl] + rl a + dec hl + push hl + push de + call .ExpandPalettesToBC + pop de + pop hl + pop af + dec a + jr nz, .loop2 + inc hl + inc hl + ld a, b + ld [de], a + inc de + ld a, c + ld [de], a + inc de + pop af + dec a + jr nz, .loop1 + pop hl + ret + +.ExpandPalettesToBC: + call .GetPaletteFunction + call .ApplyPaletteFunction + ret + +.GetPaletteFunction: + ld e, a + ld d, 0 + ld hl, .PalJumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.PalJumptable: + dw .Pal0 + dw .Pal1 + dw .Pal2 + dw .Pal3 + +.Pal0: + ldh a, [rOBP0] + and $3 + ret + +.Pal2: + ldh a, [rOBP0] + and $c + srl a + srl a + ret + +.Pal1: + ldh a, [rOBP0] + and $30 + swap a + ret + +.Pal3: + ldh a, [rOBP0] + and $c0 + rlca + rlca + ret + +.ApplyPaletteFunction: + ld e, a + ld d, 0 + ld hl, .PalFunJumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.PalFunJumptable: + dw .zero_zero + dw .xflip_zero + dw .zero_xflip + dw .xflip_xflip + +.zero_zero: + sla b + sla c + ret + +.xflip_zero: + scf + rl b + sla c + ret + +.zero_xflip: + sla b + scf + rl c + ret + +.xflip_xflip: + scf + rl b + scf + rl c + ret + +.PlaceObject: + push hl + ld a, [hli] + ld c, [hl] + and $8 + jr nz, .use_source_2 + ld hl, wPrinterSendDataSource1 + jr .got_data_source + +.use_source_2 + ld hl, wPrinterSendDataSource2 +.got_data_source + ld b, $0 + ld a, c + and %11111000 + sub $8 + ld c, a + sla c + rl b + add hl, bc + ld e, l + ld d, h + ld hl, wcbec + ld c, $8 +.coord_copy_loop + call .GetBitMask + ld a, [de] + and b + or [hl] + ld [de], a + inc hl + inc de + ld a, [de] + and b + or [hl] + ld [de], a + inc hl + inc de + dec c + jr nz, .coord_copy_loop + pop hl + ret + +.GetBitMask: + push hl + push de + ld de, -$10 + add hl, de + ld a, [hli] + or [hl] + xor $ff + ld b, a + pop de + pop hl + ret + +Data_ea9de: + db 1, 0, $00, 0 + dw 1 +Data_ea9e4: + db 2, 0, $04, 0 + dw 0 +Data_ea9ea: + db 4, 0, $80, 2 + dw 0 +Data_ea9f0: + db 4, 0, $00, 0 + dw 4 +Data_ea9f6: + db 8, 0, $00, 0 + dw 8 +Data_ea9fc: + db 15, 0, $00, 0 + dw 15 diff --git a/engine/printer/serial.asm b/engine/printer/serial.asm index 97f655bb..fd4dd056 100755 --- a/engine/printer/serial.asm +++ b/engine/printer/serial.asm @@ -1,3 +1,14 @@ + const_def + const PRINTER_STATUS_BLANK + const PRINTER_STATUS_CHECKING_LINK + const PRINTER_STATUS_TRANSMITTING + const PRINTER_STATUS_PRINTING + const PRINTER_ERROR_1 + const PRINTER_ERROR_2 + const PRINTER_ERROR_3 + const PRINTER_ERROR_4 + const PRINTER_ERROR_WRONG_DEVICE + StartTransmission_Send9Rows: ld a, 9 Printer_StartTransmission: @@ -104,9 +115,9 @@ Printer_StartTransmittingTilemap: ld hl, PrinterDataPacket3 call CopyPrinterDataHeader call Printer_Convert2RowsTo2bpp - ld a, (wPrinterSendDataSource1End - wPrinterSendDataSource1) % $100 + ld a, LOW(wPrinterSendDataSource1End - wPrinterSendDataSource1) ld [wPrinterDataSize], a - ld a, (wPrinterSendDataSource1End - wPrinterSendDataSource1) / $100 + ld a, HIGH(wPrinterSendDataSource1End - wPrinterSendDataSource1) ld [wPrinterDataSize + 1], a call ComputePrinterChecksum call Printer_Next diff --git a/engine/surfing_minigame.asm b/engine/surfing_minigame.asm deleted file mode 100755 index 578e6b1e..00000000 --- a/engine/surfing_minigame.asm +++ /dev/null @@ -1,2862 +0,0 @@ -SurfingPikachuMinigame: - call SurfingPikachuMinigame_BlankPals - call DelayFrame - call DelayFrame - call DelayFrame - ldh a, [hTilesetType] - push af - xor a - ldh [hTilesetType], a - ld a, [wUpdateSpritesEnabled] - push af - ld a, $ff - ld [wUpdateSpritesEnabled], a - ldh a, [rIE] - push af - xor a - ldh [rIF], a - ld a, $f - ldh [rIE], a - ld a, $8 - ldh [rSTAT], a - ldh a, [hAutoBGTransferDest + 1] - push af - ld a, $98 - ldh [hAutoBGTransferDest + 1], a - call SurfingPikachuMinigameIntro - call SurfingPikachuLoop - xor a - ldh [rBGP], a - ldh [rOBP0], a - ldh [rOBP1], a - call UpdateGBCPal_BGP - call UpdateGBCPal_OBP0 - call UpdateGBCPal_OBP1 - call ClearObjectAnimationBuffers - call ClearSprites - xor a - ldh [hLCDCPointer], a - ldh [hSCX], a - ldh [hSCY], a - ld a, $90 - ldh [hWY], a - call DelayFrame - pop af - ldh [hAutoBGTransferDest + 1], a - xor a - ldh [rIF], a - pop af - ldh [rIE], a - xor a - ldh [rSTAT], a - call RunDefaultPaletteCommand - call ReloadMapAfterSurfingMinigame - call PlayDefaultMusic - call GBPalNormal - pop af - ld [wUpdateSpritesEnabled], a - pop af - ldh [hTilesetType], a - ret - -SurfingPikachuLoop: - call SurfingPikachuMinigame_LoadGFXAndLayout - call DelayFrame - ld b, $e - call RunPaletteCommand -.loop - ld a, [wSurfingMinigameRoutineNumber] - bit 7, a - ret nz - call SurfingPikachu_GetJoypad_3FrameBuffer - call SurfingPikachu_CheckPressedSelect - ret nz - call RunSurfingMinigameRoutine - ld a, $3c - ld [wCurrentAnimatedObjectOAMBufferOffset], a - call RunObjectAnimations - call SurfingMinigame_MoveClouds - call .DelayFrame - call SurfingMinigame_UpdateMusicTempo - jr .loop - -.DelayFrame: - call DelayFrame - ret - -SurfingPikachu_CheckPressedSelect: - ld hl, wd492 - bit 1, [hl] - ret z - ldh a, [hJoyPressed] - and SELECT - ret - -Func_f80b7: - ldh a, [hJoyPressed] - and START - ret z - ld hl, wc5e2 - ld a, [hl] - xor $1 - ld [hl], a - ret - -SurfingMinigame_UpdateMusicTempo: - ld a, [wc634] - and a - ret z - - ; check that all channels are on their last frame of note delay - ld hl, wChannelNoteDelayCounters - ld a, $1 - cp [hl] - ret nz - inc hl - cp [hl] - ret nz - inc hl - cp [hl] - ret nz - - ; de = ([wSurfingMinigamePikachuSpeed] & 0x3f) * 2 - ld a, [wSurfingMinigamePikachuSpeed] - ld e, a - ld a, [wSurfingMinigamePikachuSpeed + 1] - and $3 - ld d, a - sla e - rl d - ld e, d - ld d, $0 - ld hl, .Tempos - add hl, de - add hl, de - ld a, [hli] - ld [wMusicTempo + 1], a - ld a, [hl] - ld [wMusicTempo], a - ret - -.Tempos: - dw 117 - dw 109 - dw 101 - dw 93 - dw 85 - -SurfingMinigame_ResetMusicTempo: - ld hl, wChannelNoteDelayCounters - ld a, $1 - cp [hl] - ret nz - inc hl - cp [hl] - ret nz - inc hl - cp [hl] - ret nz - ld a, 117 - ld [wMusicTempo + 1], a - xor a - ld [wMusicTempo], a - ret - -SurfingPikachuMinigame_LoadGFXAndLayout: - call SurfingPikachu_ClearTileMap - call ClearSprites - call DisableLCD - ld hl, wSurfingMinigameData - ld bc, wSurfingMinigameDataEnd - wSurfingMinigameData - xor a - call FillMemory - ld hl, wLYOverrides - ld bc, wLYOverridesBufferEnd - wLYOverrides - xor a - call FillMemory - xor a - ldh [hAutoBGTransferEnabled], a - call ClearObjectAnimationBuffers - - ld hl, SurfingPikachu1Graphics1 - ld de, $9000 - ld bc, $500 - ld a, BANK(SurfingPikachu1Graphics1) - call FarCopyData - - ld hl, SurfingPikachu1Graphics2 - ld de, $8000 - ld bc, $1000 - ld a, BANK(SurfingPikachu1Graphics2) - call FarCopyData - - ld a, SurfingPikachuSpawnStateDataPointer % $100 - ld [wAnimatedObjectSpawnStateDataPointer], a - ld a, SurfingPikachuSpawnStateDataPointer / $100 - ld [wAnimatedObjectSpawnStateDataPointer + 1], a - - ld a, SurfingPikachuObjectJumptable % $100 - ld [wAnimatedObjectJumptablePointer], a - ld a, SurfingPikachuObjectJumptable / $100 - ld [wAnimatedObjectJumptablePointer + 1], a - - ld a, SurfingPikachuOAMData % $100 - ld [wAnimatedObjectOAMDataPointer], a - ld a, SurfingPikachuOAMData / $100 - ld [wAnimatedObjectOAMDataPointer + 1], a - - ld a, SurfingPikachuFrames % $100 - ld [wAnimatedObjectFramesDataPointer], a - ld a, SurfingPikachuFrames / $100 - ld [wAnimatedObjectFramesDataPointer + 1], a - - ld hl, vBGMap0 - ld bc, $800 - ld a, $0 - call FillMemory - - ld hl, $98c0 - ld bc, $180 - ld a, $b - call FillMemory - - ld a, $1 - lb de, $74, $58 - call SpawnAnimatedObject - - ld a, $74 - ld [wSurfingMinigamePikachuObjectHeight], a - - call SurfingMinigame_InitScanlineOverrides - - xor a - ldh [hSCX], a - ldh [hSCY], a - ld a, $7e - ldh [hWY], a - ld a, rSCY - $ff00 - ldh [hLCDCPointer], a - ld a, $40 - ld [wSurfingMinigamePikachuSpeed], a - xor a - ld [wSurfingMinigamePikachuSpeed + 1], a - xor a - ld [wSurfingMinigamePikachuHP], a - ld a, $60 - ld [wSurfingMinigamePikachuHP + 1], a - ld hl, wSurfingMinigameWaveHeight - ld bc, $14 - ld a, $74 - call FillMemory - call Func_f81ff - call Func_f8256 - ld a, $e3 - ldh [rLCDC], a - call SurfingPikachuMinigame_SetBGPals - ld a, $e4 - ldh [rOBP0], a - ld a, $e0 - ldh [rOBP1], a - call UpdateGBCPal_OBP0 - call UpdateGBCPal_OBP1 - ret - -SurfingPikachuMinigame_SetBGPals: - ld a, [wOnSGB] - and a - jr nz, .sgb - ld a, $d0 - ldh [rBGP], a - call UpdateGBCPal_BGP - ret - -.sgb - ld a, $e4 - ldh [rBGP], a - call UpdateGBCPal_BGP - ret - -Func_f81ff: - ld hl, wSpriteDataEnd - ld de, Unkn_f8249 - ld b, $97 - ld c, $80 - ld a, $4 - call Func_f8233 - ld de, Unkn_f8248 - ld b, $96 - ld c, $50 - ld a, $1 - call Func_f8233 - ld de, Unkn_f824d - ld b, $14 - ld c, $20 - ld a, $5 - call Func_f8233 - ld de, Unkn_f8252 - ld b, $20 - ld c, $80 - ld a, $4 - call Func_f8233 - ret - -Func_f8233: -.asm_f8233 - push af - ld [hl], b - inc hl - ld [hl], c - inc hl - ld a, [de] - ld [hl], a - inc hl - ld [hl], $0 - inc hl - ld a, c - add $8 - ld c, a - inc de - pop af - dec a - jr nz, .asm_f8233 - ret - -Unkn_f8248: - db $fe - -Unkn_f8249: - db $d0 - db $d0 - db $d0 - db $d0 - -Unkn_f824d: - db $ec - db $ed - db $ed - db $ee - db $ef - -Unkn_f8252: - db $ec - db $ed - db $ee - db $ef - -Func_f8256: - ld de, $9c21 - ld hl, Unkn_f8279 - ld c, $9 -.asm_f825e - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .asm_f825e - ld hl, $9c01 - ld [hl], $15 - ld hl, $9c02 - ld [hl], $16 - ld hl, $9c2c - ld [hl], $1b - ld hl, $9c2d - ld [hl], $1c - ret - -Unkn_f8279: - db $17 - db $18 - db $19 - db $19 - db $19 - db $19 - db $19 - db $19 - db $19 - -RunSurfingMinigameRoutine: - ld a, [wSurfingMinigameRoutineNumber] - ld e, a - ld d, $0 - ld hl, .Jumptable - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -.Jumptable: - dw SurfingMinigameRoutine_SpawnPikachu ; 0 - dw SurfingMinigame_RunGame ; 1 - dw Func_f8324 ; 2 - dw Func_f835c ; 3 - dw SurfingMinigame_DrawResultsScreenAndWait ; 4 - dw SurfingMinigame_WriteHPLeftAndWait ; 5 - dw SurfingMinigame_WriteRadnessAndWait ; 6 - dw SurfingMinigame_WriteTotalAndWait ; 7 - dw SurfingMinigame_AddRemainingHPToTotalAndWait ; 8 - dw SurfingMinigame_AddRadnessToTotalAndWait ; 9 - dw SurfingMinigame_WaitLast ; a - dw SurfingMinigame_ExitOnPressA ; b - dw SurfingMinigame_GameOver ; c - -SurfingMinigameRoutine_SpawnPikachu: - ld a, $2 - lb de, $48, $e0 - call SpawnAnimatedObject - ld hl, wSurfingMinigameRoutineNumber - inc [hl] - ld a, $1 - ld [wc634], a - ret - -SurfingMinigame_RunGame: - ld a, [wc5e5] - cp $18 - jr nc, .asm_f82e8 - ld hl, wSurfingMinigamePikachuHP - ld a, [hli] - or [hl] - and a - jr z, .dead - call Random - ld [wc5d5], a - call SurfingMinigame_UpdateLYOverrides - call SurfingMinigame_SetPikachuHeight - call SurfingMinigame_ReadBGMapBuffer - call SurfingMinigame_ScrollAndGenerateBGMap - call SurfingMinigame_UpdatePikachuDistance - call SurfingMinigame_Deduct1HP - call SurfingMinigame_DrawHP - ret - -.asm_f82e8 - ld hl, wSurfingMinigameRoutineNumber - inc [hl] - xor a - ld [wc634], a - ld a, 192 - ld [wSurfingMinigameRoutineDelay], a - ret - -.dead - ld a, $1 - ld [wc630], a - ld a, $c - ld [wSurfingMinigameRoutineNumber], a - ld a, $80 - ld [wc631], a - ld a, $b - lb de, $88, $58 - call SpawnAnimatedObject - ld hl, ANIM_OBJ_Y_OFFSET - add hl, bc - ld [hl], $80 - ld hl, ANIM_OBJ_FIELD_B - add hl, bc - ld [hl], $80 - ld hl, ANIM_OBJ_FIELD_C - add hl, bc - ld [hl], $30 - xor a - ld [wc634], a - ret - -Func_f8324: - call SurfingMinigame_RunDelayTimer - jr c, .done_delay - xor a - ld [wc5d5], a - call SurfingMinigame_UpdateLYOverrides - call SurfingMinigame_SetPikachuHeight - call SurfingMinigame_ReadBGMapBuffer - call Func_f8c97 - call SurfingMinigame_ResetMusicTempo - ret - -.done_delay - ld hl, wSurfingMinigameRoutineNumber - inc [hl] - ld a, $90 - ldh [hSCX], a - ld a, $72 - ld [wSurfingMinigameWaveFunctionNumber], a - ld a, $4 - ld [wc5d2], a - xor a - ldh [hLCDCPointer], a - ld [wSurfingMinigameSCX], a - ld [wSurfingMinigameSCX + 1], a - ld [wSurfingMinigameSCX + 2], a - ret - -Func_f835c: - ldh a, [hSCX] - and a - jr z, .asm_f837b - call SurfingMinigame_UpdateLYOverrides - call SurfingMinigame_SetPikachuHeight - call SurfingMinigame_ReadBGMapBuffer - ldh a, [hSCX] - dec a - dec a - dec a - dec a - ldh [hSCX], a - ld a, $e0 - ld [wSurfingMinigameXOffset], a - call SurfingMinigame_GenerateBGMap - ret - -.asm_f837b - xor a - ld [wSurfingMinigamePikachuSpeed], a - ld [wSurfingMinigamePikachuSpeed + 1], a - ld hl, wSurfingMinigameRoutineNumber - inc [hl] - ld a, $5 - ld [wc5d2], a - ret - -SurfingMinigame_DrawResultsScreenAndWait: - call SurfingMinigame_DrawResultsScreen - ld a, 32 - ld [wSurfingMinigameRoutineDelay], a - ld hl, wSurfingMinigameRoutineNumber - inc [hl] - ret - -SurfingMinigame_WriteHPLeftAndWait: - call SurfingMinigame_RunDelayTimer - ret nc - call SurfingMinigame_WriteHPLeft - ld a, 64 - ld [wSurfingMinigameRoutineDelay], a - ld hl, wSurfingMinigameRoutineNumber - inc [hl] - ret - -SurfingMinigame_WriteRadnessAndWait: - call SurfingMinigame_RunDelayTimer - ret nc - call SurfingMinigame_WriteRadness - ld a, 64 - ld [wSurfingMinigameRoutineDelay], a - ld hl, wSurfingMinigameRoutineNumber - inc [hl] - ret - -SurfingMinigame_WriteTotalAndWait: - call SurfingMinigame_RunDelayTimer - ret nc - call SurfingMinigame_WriteTotal - ld a, 64 - ld [wSurfingMinigameRoutineDelay], a - ld hl, wSurfingMinigameRoutineNumber - inc [hl] - ret - -SurfingMinigame_AddRemainingHPToTotalAndWait: - call SurfingMinigame_RunDelayTimer - ret nc - call SurfingMinigame_AddRemainingHPToTotal - push af - call SurfingMinigame_BCDPrintTotalScore - pop af - ret nc - ld a, 64 - ld [wSurfingMinigameRoutineDelay], a - ld hl, wSurfingMinigameRoutineNumber - inc [hl] - ret - -SurfingMinigame_AddRadnessToTotalAndWait: - call SurfingMinigame_RunDelayTimer - ret nc - call SurfingMinigame_AddRadnessToTotal - push af - call SurfingMinigame_BCDPrintTotalScore - pop af - ret nc - ld a, 128 - ld [wSurfingMinigameRoutineDelay], a - ld hl, wSurfingMinigameRoutineNumber - inc [hl] - call DidPlayerGetAHighScore - ret nc - call SurfingMinigame_PrintTextHiScore - ld a, $6 - ld [wc5d2], a - ret - -SurfingMinigame_WaitLast: - call SurfingMinigame_RunDelayTimer - ret nc - ld hl, wSurfingMinigameRoutineNumber - inc [hl] - ret - -SurfingMinigame_ExitOnPressA: - call SurfingMinigame_UpdateLYOverrides - ldh a, [hJoyPressed] - and A_BUTTON - ret z - ld hl, wSurfingMinigameRoutineNumber - set 7, [hl] - ret - -SurfingMinigame_GameOver: - call SurfingMinigame_UpdateLYOverrides - call SurfingMinigame_SetPikachuHeight - call SurfingMinigame_ReadBGMapBuffer - call SurfingMinigame_ScrollAndGenerateBGMap - call SurfingMinigame_ResetMusicTempo - ld hl, wc631 - ld a, [hl] - and a - jr z, .wait_press_a - dec [hl] - ret - -.wait_press_a - ldh a, [hJoyPressed] - and A_BUTTON - ret z - ld hl, wSurfingMinigameRoutineNumber - set 7, [hl] - ret - -SurfingMinigame_RunDelayTimer: - ld hl, wSurfingMinigameRoutineDelay - ld a, [hl] - and a - jr z, .set_carry - dec [hl] - and a - ret - -.set_carry - scf - ret - -SurfingMinigame_UpdatePikachuDistance: - ld a, [wc5e5 + 1] - ld h, a - ld a, [wc5e5 + 2] - ld l, a - ld a, [wSurfingMinigamePikachuSpeed] - ld e, a - ld a, [wSurfingMinigamePikachuSpeed + 1] - ld d, a - add hl, de - ld a, h - ld [wc5e5 + 1], a - ld a, l - ld [wc5e5 + 2], a - ret nc - ld hl, wc5e5 - inc [hl] - ld hl, wOAMBuffer + 4 * 4 + 1 - dec [hl] - dec [hl] - ret - -SurfingMinigameAnimatedObjectFn_Pikachu: - ld a, [wc5d2] - ld e, a - ld d, $0 - ld hl, Jumptable_f847f - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -Jumptable_f847f: - dw Func_f848d - dw SurfingMinigame_ScoreCurrentWave - dw Func_f8516 - dw Func_f8545 - dw Func_f8561 - dw Func_f856d - dw Func_f8579 - -Func_f848d: - ld a, [wc630] - and a - jr nz, .asm_f84d2 - call Func_f87b5 - ld a, [wSurfingMinigamePikachuObjectHeight] - ld hl, ANIM_OBJ_Y_COORD - add hl, bc - ld [hl], a - call Func_f871e - jr c, .splash - call Func_f8742 - call SurfingMinigame_SpeedUpPikachu - ret - -.splash - call Func_f8742 - ld a, $1 ; on a wave - ld [wc5d2], a - xor a - ld hl, ANIM_OBJ_FIELD_C - add hl, bc - ld [hl], a - ld hl, ANIM_OBJ_FIELD_D - add hl, bc - ld [hl], a - ld hl, ANIM_OBJ_FIELD_E - add hl, bc - ld [hl], a - ld [wSurfingMinigameRadnessMeter], a - ld [wSurfingMinigameTrickFlags], a - xor a - ld [wChannelSoundIDs + Ch8], a - ld a, SFX_SURFING_JUMP - call PlaySound - ret - -.asm_f84d2 - xor a - ld [wSurfingMinigamePikachuSpeed], a - ld [wSurfingMinigamePikachuSpeed + 1], a - ld a, $4 - ld [wc5d2], a - call Func_f8742 - ret - -SurfingMinigame_ScoreCurrentWave: - call SurfingMinigame_DPadAction - call SurfingMinigame_UpdatePikachuHeight - ret nc - call SurfingMinigame_TileInteraction - jr c, .splash - call SurfingMinigame_CalculateAndAddRadnessFromStunt - ld hl, ANIM_OBJ_FIELD_C - add hl, bc - ld [hl], $0 - ld a, $2 - ld [wc5d2], a - ret - -.splash - ld a, $3 - ld [wc5d2], a - ld a, $60 - ld [wc5e1], a - ld a, $10 - call SetCurrentAnimatedObjectCallbackAndResetFrameStateRegisters - xor a - ld [wChannelSoundIDs + Ch8], a - ld a, SFX_SURFING_CRASH - call PlaySound - ret - -Func_f8516: - ld hl, ANIM_OBJ_FIELD_C - add hl, bc - ld a, [hl] - cp $20 - jr nc, .asm_f8539 - inc [hl] - inc [hl] - inc [hl] - inc [hl] - ld d, $4 - call SurfingPikachu_Sine - ld hl, ANIM_OBJ_Y_OFFSET - add hl, bc - ld [hl], a - call Func_f87b5 - ld a, [wSurfingMinigamePikachuObjectHeight] - ld hl, ANIM_OBJ_Y_COORD - add hl, bc - ld [hl], a - ret - -.asm_f8539 - ld hl, ANIM_OBJ_Y_OFFSET - add hl, bc - ld [hl], $0 - ld a, $0 - ld [wc5d2], a - ret - -Func_f8545: - ld hl, wc5e1 - ld a, [hl] - and a - jr z, .asm_f8556 - dec [hl] - ld a, [wSurfingMinigamePikachuObjectHeight] - ld hl, ANIM_OBJ_Y_COORD - add hl, bc - ld [hl], a - ret - -.asm_f8556 - ld a, $0 - ld [wc5d2], a - ld a, $4 - call SetCurrentAnimatedObjectCallbackAndResetFrameStateRegisters - ret - -Func_f8561: - ld a, [wSurfingMinigamePikachuObjectHeight] - ld hl, ANIM_OBJ_Y_COORD - add hl, bc - ld [hl], a - call Func_f8742 - ret - -Func_f856d: - ld a, $f - call SetCurrentAnimatedObjectCallbackAndResetFrameStateRegisters - ld hl, ANIM_OBJ_FIELD_C - add hl, bc - ld [hl], $0 - ret - -Func_f8579: - ld hl, ANIM_OBJ_FIELD_C - add hl, bc - ld a, [hl] - inc [hl] - inc [hl] - and $3f - cp $20 - jr c, .asm_f8591 - ld d, $10 - call SurfingPikachu_Sine - ld hl, ANIM_OBJ_Y_OFFSET - add hl, bc - ld [hl], a - ret - -.asm_f8591 - ld hl, ANIM_OBJ_Y_OFFSET - add hl, bc - ld [hl], $0 - ret - -SurfingMinigame_DPadAction: - ld de, hJoy5 - ld a, [de] - and D_LEFT - jr nz, .d_left - ld a, [de] - and D_RIGHT - jr nz, .d_right - ret - -.d_left - ld hl, ANIM_OBJ_FIELD_E - add hl, bc - ld [hl], $0 - ld hl, ANIM_OBJ_FIELD_D - add hl, bc - ld a, [hl] - inc [hl] - cp $b - jr c, .d_left_skip - call .StartTrick - ld hl, wSurfingMinigameTrickFlags - set 0, [hl] -.d_left_skip - ld hl, ANIM_OBJ_FRAME_SET - add hl, bc - ld a, [hl] - cp $e - jr nc, .d_left_reset - inc [hl] - ret - -.d_left_reset - ld [hl], $1 - ret - -.d_right - ld hl, ANIM_OBJ_FIELD_D - add hl, bc - ld [hl], $0 - ld hl, ANIM_OBJ_FIELD_E - add hl, bc - ld a, [hl] - inc [hl] - cp $d - jr c, .d_right_skip - call .StartTrick - ld hl, wSurfingMinigameTrickFlags - set 1, [hl] -.d_right_skip - ld hl, ANIM_OBJ_FRAME_SET - add hl, bc - ld a, [hl] - cp $1 - jr z, .d_right_reset - dec [hl] - ret - -.d_right_reset - ld [hl], $e - ret - -.StartTrick: - call SurfingMinigame_IncreaseRadnessMeter - xor a - ld hl, ANIM_OBJ_FIELD_D - add hl, bc - ld [hl], a - ld hl, ANIM_OBJ_FIELD_E - add hl, bc - ld [hl], a - ld a, SFX_SURFING_FLIP - call PlaySound - ret - -SurfingMinigame_TileInteraction: - ld hl, ANIM_OBJ_FRAME_SET - add hl, bc - ld a, [wSurfingMinigameBGMapReadBuffer] - cp $6 - jr z, .tile_06 - cp $14 - jr z, .tile_14 - cp $12 - jr z, .tile_12 - cp $7 - jr z, .tile_07 - ld a, [hl] - cp $1 - jp z, .action_0 - cp $2 - jr z, .action_1 - cp $3 - jr z, .action_2 - cp $4 - jr z, .action_3 - cp $5 - jr z, .action_2 - cp $6 - jr z, .action_1 - cp $7 - jr z, .action_0 - jr .action_0 - -.tile_06 - ld a, [hl] - cp $1 - jr z, .action_0 - cp $2 - jr z, .action_0 - cp $3 - jr z, .action_0 - cp $4 - jr z, .action_1 - cp $5 - jr z, .action_2 - cp $6 - jr z, .action_3 - cp $7 - jr z, .action_2 - jr .action_0 - -.tile_07 - ld a, [hl] - cp $1 - jr z, .action_2 - cp $2 - jr z, .action_3 - cp $3 - jr z, .action_2 - cp $4 - jr z, .action_1 - cp $5 - jr z, .action_0 - cp $6 - jr z, .action_0 - cp $7 - jr z, .action_0 - jr .action_0 - -.tile_12 -.tile_14 - ld a, [hl] - cp $1 - jr z, .action_0 - cp $2 - jr z, .action_1 - cp $3 - jr z, .action_2 - cp $4 - jr z, .action_3 - cp $5 - jr z, .action_3 - cp $6 - jr z, .action_2 - cp $7 - jr z, .action_1 - jr .action_0 - -.action_1 - call SufingMinigame_ReduceSpeedBy128 - jr .action_3 - -.action_2 - call SufingMinigame_ReduceSpeedBy64 -.action_3 - xor a - ld [wChannelSoundIDs + Ch8], a - ld a, SFX_SURFING_LAND - call PlaySound - and a - ret - -.action_0 - ld a, $40 - ld [wSurfingMinigamePikachuSpeed], a - xor a - ld [wSurfingMinigamePikachuSpeed + 1], a - scf - ret - -SurfingMinigame_SpeedUpPikachu: - ld a, [wSurfingMinigamePikachuSpeed + 1] - cp $2 - ret nc - ld h, a - ld a, [wSurfingMinigamePikachuSpeed] - ld l, a - ld de, $2 - add hl, de - ld a, h - ld [wSurfingMinigamePikachuSpeed + 1], a - ld a, l - ld [wSurfingMinigamePikachuSpeed], a - ret - -SufingMinigame_ReduceSpeedBy64: - ld a, [wSurfingMinigamePikachuSpeed + 1] - and a - jr nz, .go - ld a, [wSurfingMinigamePikachuSpeed] - cp $40 - jr nc, .go - xor a - ld [wSurfingMinigamePikachuSpeed], a - ret - -.go - ld a, [wSurfingMinigamePikachuSpeed + 1] - ld h, a - ld a, [wSurfingMinigamePikachuSpeed] - ld l, a - ld de, -$40 - add hl, de - ld a, h - ld [wSurfingMinigamePikachuSpeed + 1], a - ld a, l - ld [wSurfingMinigamePikachuSpeed], a - ret - -SufingMinigame_ReduceSpeedBy128: - ld a, [wSurfingMinigamePikachuSpeed + 1] - and a - jr nz, .go - ld a, [wSurfingMinigamePikachuSpeed] - cp $80 - jr nc, .go - xor a - ld [wSurfingMinigamePikachuSpeed], a - ret - -.go - ld a, [wSurfingMinigamePikachuSpeed + 1] - ld h, a - ld a, [wSurfingMinigamePikachuSpeed] - ld l, a - ld de, -$80 - add hl, de - ld a, h - ld [wSurfingMinigamePikachuSpeed + 1], a - ld a, l - ld [wSurfingMinigamePikachuSpeed], a - ret - -Func_f871e: - ldh a, [hSCX] - and $7 - cp $3 - jr c, .asm_f8740 - cp $5 - jr nc, .asm_f8740 - ld a, [wSurfingMinigameBGMapReadBuffer] - cp $14 - jr nz, .asm_f8740 - call SufingMinigame_GetSpeedDividedBy32 - cp $a - jr c, .asm_f8740 - ld [wc5ec], a - call Func_f9284 - scf - ret - -.asm_f8740 - and a - ret - -Func_f8742: - ldh a, [hSCX] - and $7 - cp $3 - ret c - cp $5 - ret nc - ld a, [wSurfingMinigameBGMapReadBuffer] - cp $6 - jr z, .asm_f8766 - cp $14 - jr z, .asm_f8766 - cp $7 - jr z, .asm_f876a - call Func_f8778 - ld a, $4 - ld hl, ANIM_OBJ_FRAME_SET - add hl, bc - ld [hl], a - ret - -.asm_f8766 - ld a, $6 - jr .asm_f876c - -.asm_f876a - ld a, $2 -.asm_f876c - ld e, a - ld a, [wc5de] - dec a - add e - ld hl, ANIM_OBJ_FRAME_SET - add hl, bc - ld [hl], a - ret - -Func_f8778: - ld hl, wc5e0 - ld a, [hl] - inc [hl] - and $7 - ret nz - ld a, [wc5df] - and a - jr z, .asm_f8796 - ld a, [wc5de] - and a - jr z, .asm_f8791 - dec a - ld [wc5de], a - ret - -.asm_f8791 - xor a - ld [wc5df], a - ret - -.asm_f8796 - ld a, [wc5de] - cp $2 - jr z, .asm_f87a2 - inc a - ld [wc5de], a - ret - -.asm_f87a2 - ld a, $1 - ld [wc5df], a - ret - -SufingMinigame_GetSpeedDividedBy32: - ld a, [wSurfingMinigamePikachuSpeed] - ld l, a - ld a, [wSurfingMinigamePikachuSpeed + 1] - ld h, a - add hl, hl - add hl, hl - add hl, hl - ld a, h - ret - -Func_f87b5: - ld hl, wc5eb - ld a, [hl] - inc [hl] - and $3 - ret nz - call .GetYCoord - ld d, a - ld hl, ANIM_OBJ_X_COORD - add hl, bc - ld e, [hl] - ld a, $a - push bc - call SpawnAnimatedObject - pop bc - ret - -.GetYCoord: - ldh a, [hSCX] - and $8 - jr nz, .get_height_plus_9 - ld hl, wSurfingMinigameWaveHeight + 8 - jr .got_hl - -.get_height_plus_9 - ld hl, wSurfingMinigameWaveHeight + 9 -.got_hl - ld a, [wSurfingMinigameBGMapReadBuffer + 1] - cp $6 - jr z, .six_or_twenty - cp $14 - jr z, .six_or_twenty - cp $7 - jr z, .seven - ld a, [hl] - ret - -.six_or_twenty - ldh a, [hSCX] - and $7 - ld e, a - ld a, [hl] - sub e - ret - -.seven - ldh a, [hSCX] - and $7 - add [hl] - ret - -Func_f87fb: - ld hl, ANIM_OBJ_X_COORD - add hl, bc - ld a, [hl] - cp $58 - ret z - add $4 - ld [hl], a - ret - -Func_f8807: ; unreferenced - call MaskCurrentAnimatedObjectStruct - ret - -SurfingMinigameAnimatedObjectFn_FlippingPika: - ld hl, ANIM_OBJ_FIELD_B - add hl, bc - ld a, [hl] - and a - ret z - dec [hl] - dec [hl] - ld d, a - ld hl, ANIM_OBJ_FIELD_C - add hl, bc - ld a, [hl] - inc [hl] - call SurfingPikachu_Sine - cp $80 - jr nc, .positive - xor $ff - inc a -.positive - ld hl, ANIM_OBJ_Y_OFFSET - add hl, bc - ld [hl], a - ret - -SurfingMinigameAnimatedObjectFn_IntroAnimationPikachu: - ld hl, ANIM_OBJ_FIELD_B - add hl, bc - ld a, [hl] - inc [hl] - and $1 - ret z - ld hl, ANIM_OBJ_X_COORD - add hl, bc - ld a, [hl] - cp $c0 - jr z, .done - inc [hl] - ret - -.done - ld a, $1 - ld [wSurfingMinigameIntroAnimationFinished], a - call MaskCurrentAnimatedObjectStruct - ret - -SurfingMinigame_MoveClouds: - ld a, [wc635] - ld e, a - ld d, $0 - ld a, [wSurfingMinigamePikachuSpeed] - ld l, a - ld a, [wSurfingMinigamePikachuSpeed + 1] - ld h, a - add hl, de - ld a, l - ld [wc635], a - ld d, h - ld hl, wOAMBuffer + 5 * 4 + 1 - ld e, $9 -.loop - ld a, [hl] - add d - ld [hli], a - inc hl - inc hl - inc hl - dec e - jr nz, .loop - ret - -SurfingMinigame_ReadBGMapBuffer: - ld a, [wSurfingMinigameBGMapReadBuffer] ; ??? - ldh a, [hSCX] - add $48 - ld e, a - srl e - srl e - srl e - ld d, $0 - ld hl, vBGMap0 - add hl, de - ld a, [wSurfingMinigamePikachuObjectHeight] - srl a - srl a - srl a - ld c, a -.loop - ld a, c - and a - jr z, .copy - dec c - ld de, $20 - add hl, de - ld a, h - and $3 - or $98 - ld h, a - jr .loop - -.copy - ld de, wSurfingMinigameBGMapReadBuffer - ld a, e - ldh [hVBlankCopyDest], a - ld a, d - ldh [hVBlankCopyDest + 1], a - ld a, l - ldh [hVBlankCopySource], a - ld a, h - ldh [hVBlankCopySource + 1], a - ld a, 16 / $10 - ldh [hVBlankCopySize], a - ret - -SurfingMinigame_SetPikachuHeight: - ldh a, [hSCX] - and $8 - jr nz, .asm_f88b9 - ld hl, wSurfingMinigameWaveHeight + 7 - jr .asm_f88bc - -.asm_f88b9 - ld hl, wSurfingMinigameWaveHeight + 8 -.asm_f88bc - ld a, [wSurfingMinigameBGMapReadBuffer] - cp $6 - jr z, .asm_f88d0 - cp $14 - jr z, .asm_f88d0 - cp $7 - jr z, .asm_f88db - ld a, [hl] - ld [wSurfingMinigamePikachuObjectHeight], a - ret - -.asm_f88d0 - ldh a, [hSCX] - and $7 - ld e, a - ld a, [hl] - sub e - ld [wSurfingMinigamePikachuObjectHeight], a - ret - -.asm_f88db - ldh a, [hSCX] - and $7 - add [hl] - ld [wSurfingMinigamePikachuObjectHeight], a - ret - -SurfingMinigame_Deduct1HP: - ld hl, wSurfingMinigamePikachuHP - ld e, $99 - call .BCD_Deduct - ret nc - inc hl - ld e, $99 -.BCD_Deduct: - ld a, [hl] - and a - jr z, .roll_over - sub $1 - daa - ld [hl], a - and a - ret - -.roll_over - ld [hl], e - scf - ret - -SurfingMinigame_DrawHP: - ld de, wSurfingMinigamePikachuHP + 1 - ld hl, wOAMBuffer + 0 * 4 + 2 - ld a, [de] - call .PlaceBCDNumber - ld hl, wOAMBuffer + 2 * 4 + 2 - ld a, [de] -.PlaceBCDNumber: - ld c, a - swap a - and $f - add $d0 - ld [hli], a - inc hl - inc hl - inc hl - ld a, c - and $f - add $d0 - ld [hl], a - dec de - ret - -SurfingMinigame_DrawResultsScreen: - ld hl, wTileMap - ld bc, SCREEN_WIDTH * SCREEN_HEIGHT - xor a - call FillMemory - ld hl, .BeachTilemap - decoord 0, 6 - ld bc, .BeachTilemapEnd - .BeachTilemap - call CopyData - call .PlaceTextbox - ld hl, wOAMBuffer + 5 * 4 + 1 - ld bc, 9 * 4 - xor a - call FillMemory - ld a, $1 - ldh [hAutoBGTransferEnabled], a - ret - -.BeachTilemap: -INCBIN "gfx/unknown_f8946.map" -.BeachTilemapEnd: - -.PlaceTextbox: - hlcoord 1, 1 - lb de, $3b, $3c - ld a, $40 - call .place_row - hlcoord 1, 2 - lb de, $3f, $3f - ld a, $ff - call .place_row - hlcoord 1, 3 - lb de, $3f, $3f - ld a, $ff - call .place_row - hlcoord 1, 4 - lb de, $3f, $3f - ld a, $ff - call .place_row - hlcoord 1, 5 - lb de, $3f, $3f - ld a, $ff - call .place_row - hlcoord 1, 6 - lb de, $3f, $3f - ld a, $ff - call .place_row - hlcoord 1, 7 - lb de, $3f, $3f - ld a, $ff - call .place_row - hlcoord 1, 8 - lb de, $3f, $3f - ld a, $ff - call .place_row - hlcoord 1, 9 - lb de, $3d, $3e - ld a, $40 - call .place_row - ret - -.place_row: - ld [hl], d - inc hl - ld c, $10 -.loop - ld [hli], a - dec c - jr nz, .loop - ld [hl], e - ret - -SurfingMinigame_PrintTextHiScore: - ld hl, .Hi_Score - decoord 6, 8 - ld bc, $9 - call CopyData - ret - -.Hi_Score: - db $20,$2e,$2f,$30,$31,$2c,$32,$23,$33 ; Hi-Score!! - -SurfingMinigame_WriteHPLeft: - ld hl, .HP_Left - decoord 2, 2 - ld bc, $7 - call CopyData - call SurfingMinigame_BCDPrintHPLeft - ret - -.HP_Left: - db $20,$21,$ff,$22,$23,$24,$25 ; HP Left - -SurfingMinigame_AddRemainingHPToTotal: - ld c, 99 -.loop - push bc - ld hl, wSurfingMinigamePikachuHP - ld a, [hli] - or [hl] - and a - jr z, .dead - call SurfingMinigame_Deduct1HP - ld e, $1 - call SurfingMinigame_AddPointsToTotal - pop bc - dec c - jr nz, .loop - ld a, SFX_PRESS_AB - call PlaySound - and a - ret - -.dead - pop bc - scf - ret - -SurfingMinigame_BCDPrintHPLeft: - hlcoord 10, 2 - ld de, wSurfingMinigamePikachuHP + 1 - ld a, [de] - call SurfingPikachu_PlaceBCDNumber - inc hl - ld a, [de] - call SurfingPikachu_PlaceBCDNumber - inc hl - inc hl - ld [hl], $21 ; P - inc hl - ld [hl], $25 ; t - inc hl - ld [hl], $26 ; s - ret - -SurfingMinigame_WriteRadness: - ld hl, .Radness - decoord 2, 4 - ld bc, $7 - call CopyData - call SurfingMinigame_BCDPrintRadness - ret - -.Radness: - db $27,$28,$29,$2a,$23,$26,$26 ; Radness - -SurfingMinigame_AddRadnessToTotal: - ld c, 99 -.loop - push bc - ld hl, wSurfingMinigameRadnessScore - ld a, [hli] - ld e, a - or [hl] - jr z, .done - ld d, [hl] - ld a, e - sub $1 - daa - ld e, a - ld a, d - sbc $0 - daa - ld [hld], a - ld [hl], e - ld e, $1 - call SurfingMinigame_AddPointsToTotal - pop bc - dec c - jr nz, .loop - ld a, SFX_PRESS_AB - call PlaySound - and a - ret - -.done - pop bc - scf - ret - -SurfingMinigame_BCDPrintRadness: - ld a, [wSurfingMinigameRadnessScore + 1] - hlcoord 10, 4 - call SurfingPikachu_PlaceBCDNumber - ld a, [wSurfingMinigameRadnessScore] - hlcoord 12, 4 - call SurfingPikachu_PlaceBCDNumber - inc hl - inc hl - ld [hl], $21 ; P - inc hl - ld [hl], $25 ; t - inc hl - ld [hl], $26 ; s - ret - -SurfingMinigame_AddPointsToTotal: - ld a, [wSurfingMinigameTotalScore] - add e - daa - ld [wSurfingMinigameTotalScore], a - ld a, [wSurfingMinigameTotalScore + 1] - adc $0 - daa - ld [wSurfingMinigameTotalScore + 1], a - ret nc - ld a, $99 - ld [wSurfingMinigameTotalScore], a - ld [wSurfingMinigameTotalScore + 1], a - ret - -SurfingMinigame_BCDPrintTotalScore: - ld a, [wSurfingMinigameTotalScore + 1] - hlcoord 10, 6 - call SurfingPikachu_PlaceBCDNumber - ld a, [wSurfingMinigameTotalScore] - hlcoord 12, 6 - call SurfingPikachu_PlaceBCDNumber - inc hl - inc hl - ld [hl], $21 ; P - inc hl - ld [hl], $25 ; t - inc hl - ld [hl], $26 ; s - ret - -SurfingMinigame_WriteTotal: - ld hl, .Total - decoord 2, 6 - ld bc, $5 - call CopyData - call SurfingMinigame_BCDPrintRadness - call SurfingMinigame_BCDPrintTotalScore - ret - -.Total: - db $2b,$2c,$25,$28,$2d ; Total - -DidPlayerGetAHighScore: - ld hl, wSurfingMinigameHiScore + 1 - ld a, [wSurfingMinigameTotalScore + 1] - cp [hl] - jr c, .not_high_score - jr nz, .high_score - dec hl - ld a, [wSurfingMinigameTotalScore] - cp [hl] - jr c, .not_high_score - jr nz, .high_score -.not_high_score - call WaitForSoundToFinish - ldpikacry e, PikachuCry28 - call SurfingMinigame_PlayPikaCryIfSurfingPikaInParty - and a - ret - -.high_score - ld a, [wSurfingMinigameTotalScore] - ld [wSurfingMinigameHiScore], a - ld a, [wSurfingMinigameTotalScore + 1] - ld [wSurfingMinigameHiScore + 1], a - call WaitForSoundToFinish - ldpikacry e, PikachuCry34 - call SurfingMinigame_PlayPikaCryIfSurfingPikaInParty - ld a, SFX_GET_ITEM2_4_2 - call PlaySound - scf - ret - -SurfingMinigame_PlayPikaCryIfSurfingPikaInParty: - push de - callfar IsSurfingPikachuInThePlayersParty - pop de - ret nc - callfar PlayPikachuSoundClip - ret - -SurfingMinigame_IncreaseRadnessMeter: - ld a, [wSurfingMinigameRadnessMeter] - inc a - cp $4 - jr c, .cap - ld a, $3 -.cap - ld [wSurfingMinigameRadnessMeter], a - ret - -SurfingMinigame_CalculateAndAddRadnessFromStunt: - ; Compute the amount of radness points from the - ; current trick based on the number of - ; consecutive flips - ; Single flip: +0050 - ; 2 of the same flip: +0150 - ; 3 or more of the same flip: +0350 - ; 2 different flips: +0180 - ; 3 or more different flips: +0500 - ld a, [wSurfingMinigameRadnessMeter] - and a - ret z - ld a, [wSurfingMinigameTrickFlags] - and $3 - cp $3 ; did a combination of front and back flips - jr z, .mixed_chain - ld a, [wSurfingMinigameRadnessMeter] - ld d, a - ld e, $1 - ld a, $0 -.get_amount_of_radness - add e - sla e - dec d - jr nz, .get_amount_of_radness -.add_radness_50_at_a_time - push af - ld e, $50 - call SurfingMinigame_AddRadness - pop af - dec a - jr nz, .add_radness_50_at_a_time - ld hl, ANIM_OBJ_Y_COORD - add hl, bc - ld a, [hl] - sub $10 - ld d, a - ld hl, ANIM_OBJ_X_COORD - add hl, bc - ld e, [hl] - ld a, [wSurfingMinigameRadnessMeter] - add $3 - push bc - call SpawnAnimatedObject - pop bc - ret - -.mixed_chain - ld a, [wSurfingMinigameRadnessMeter] - cp $3 - jr c, .add_180_radness_points - ld a, 10 -.add_500_radness_50_at_a_time - push af - ld e, $50 - call SurfingMinigame_AddRadness - pop af - dec a - jr nz, .add_500_radness_50_at_a_time - ld hl, ANIM_OBJ_Y_COORD - add hl, bc - ld a, [hl] - sub $10 - ld d, a - ld hl, ANIM_OBJ_X_COORD - add hl, bc - ld e, [hl] - ld a, $9 - push bc - call SpawnAnimatedObject - pop bc - ret - -.add_180_radness_points - ld e, $50 - call SurfingMinigame_AddRadness - ld e, $50 - call SurfingMinigame_AddRadness - ld e, $50 - call SurfingMinigame_AddRadness - ld e, $30 - call SurfingMinigame_AddRadness - ld hl, ANIM_OBJ_Y_COORD - add hl, bc - ld a, [hl] - sub $10 - ld d, a - ld hl, ANIM_OBJ_X_COORD - add hl, bc - ld e, [hl] - ld a, $8 - push bc - call SpawnAnimatedObject - pop bc - ret - -SurfingMinigame_AddRadness: - ld a, [wSurfingMinigameRadnessScore] - add e - daa - ld [wSurfingMinigameRadnessScore], a - ld a, [wSurfingMinigameRadnessScore + 1] - adc $0 - daa - ld [wSurfingMinigameRadnessScore + 1], a - ret nc - ld a, $99 - ld [wSurfingMinigameRadnessScore], a - ld [wSurfingMinigameRadnessScore + 1], a - ret - -Func_f8c97: - ld a, $a0 - ld [wSurfingMinigameXOffset], a - ldh a, [hSCX] - ld h, a - ld a, [wSurfingMinigameSCX] - ld l, a - ld de, $900 - add hl, de - ld a, l - ld [wSurfingMinigameSCX], a - ld a, h - ldh [hSCX], a - jr SurfingMinigame_GenerateBGMap - -SurfingMinigame_ScrollAndGenerateBGMap: - ld a, $a0 - ld [wSurfingMinigameXOffset], a - ldh a, [hSCX] - ld h, a - ld a, [wSurfingMinigameSCX] - ld l, a - ld de, $180 - add hl, de - ld a, l - ld [wSurfingMinigameSCX], a - ld a, h - ldh [hSCX], a -SurfingMinigame_GenerateBGMap: - ld hl, wSurfingMinigameSCX + 1 - ldh a, [hSCX] - cp [hl] - ret z - ld [hl], a - and $f0 - ld hl, wSurfingMinigameSCX + 2 - cp [hl] - ret z - ld [hl], a - call SurfingMinigame_GetWaveDataPointers - ; b and c contain the height of the next wave to appear - ; on screen, in number of pixels from the top of the screen - ld a, b - ld [wSurfingMinigameWaveHeightBuffer], a - ld a, c - ld [wSurfingMinigameWaveHeightBuffer + 1], a - push de - ld hl, wSurfingMinigameWaveHeight - ld de, wSurfingMinigameWaveHeight + 2 - ld c, SCREEN_WIDTH - 2 -.copy_loop - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .copy_loop - ld a, [wSurfingMinigameWaveHeightBuffer] - ld [hli], a - ld a, [wSurfingMinigameWaveHeightBuffer + 1] - ld [hl], a - pop de - ld hl, wRedrawRowOrColumnSrcTiles - ld c, $8 -.loop - ld a, [de] - call .CopyRedrawSrcTiles - inc de - dec c - jr nz, .loop - ld a, [wSurfingMinigameXOffset] - ld e, a - ldh a, [hSCX] - add e - and $f0 - srl a - srl a - srl a - ld e, a - ld d, $0 - ld hl, vBGMap0 - add hl, de - ld a, l - ldh [hRedrawRowOrColumnDest], a - ld a, h - ldh [hRedrawRowOrColumnDest + 1], a - ld a, $1 - ldh [hRedrawRowOrColumnMode], a - ret - -.CopyRedrawSrcTiles: - push de - push hl - ld l, a - ld h, $0 - ld de, Unkn_f96e5 - add hl, hl - add hl, hl - add hl, de - ld e, l - ld d, h - pop hl - ld a, [de] - inc de - ld [hli], a - ld a, [de] - inc de - ld [hli], a - ld a, [de] - inc de - ld [hli], a - ld a, [de] - inc de - ld [hli], a - pop de - ret - -SurfingMinigame_GetWaveDataPointers: - ld a, [wSurfingMinigameWaveFunctionNumber] - ld e, a - ld d, $0 - ld hl, Jumptable_f8d53 - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -Jumptable_f8d53: - dw SurfingMinigameWaveFunction_NoWave ; 00 - - dw Func_f8f28 ; 01 - dw Func_f8f31 ; 02 - dw Func_f8f3a ; 03 - dw Func_f8f43 ; 04 - dw Func_f8e7d ; 05 - dw Func_f8f4c ; 06 - dw Func_f8f55 ; 07 - dw Func_f8f5e ; 08 - dw Func_f8e7d ; 09 - dw Func_f8e7d ; 0a - dw Func_f8e7d ; 0b - dw Func_f8e7d ; 0c - dw Func_f8f94 ; 0d - - dw Func_f8ec5 ; 0e - dw Func_f8ece ; 0f - dw Func_f8ed7 ; 10 - dw Func_f8ee0 ; 11 - dw Func_f8ee9 ; 12 - dw Func_f8ef2 ; 13 - dw Func_f8e7d ; 14 - dw Func_f8e7d ; 15 - dw Func_f8e7d ; 16 - dw Func_f8e7d ; 17 - dw Func_f8e7d ; 18 - dw Func_f8f94 ; 19 - - dw Func_f8efb ; 1a - dw Func_f8f04 ; 1b - dw Func_f8f0d ; 1c - dw Func_f8f16 ; 1d - dw Func_f8f1f ; 1e - dw Func_f8efb ; 1f - dw Func_f8f04 ; 20 - dw Func_f8f0d ; 21 - dw Func_f8f16 ; 22 - dw Func_f8f1f ; 23 - dw Func_f8e7d ; 24 - dw Func_f8e7d ; 25 - dw Func_f8e7d ; 26 - dw Func_f8e7d ; 27 - dw Func_f8f94 ; 28 - - dw Func_f8f28 ; 29 - dw Func_f8f31 ; 2a - dw Func_f8f3a ; 2b - dw Func_f8f43 ; 2c - dw Func_f8e7d ; 2d - dw Func_f8e7d ; 2e - dw Func_f8e7d ; 2f - dw Func_f8e7d ; 30 - dw Func_f8f94 ; 31 - - dw Func_f8f4c ; 32 - dw Func_f8f55 ; 33 - dw Func_f8f5e ; 34 - dw Func_f8f4c ; 35 - dw Func_f8f55 ; 36 - dw Func_f8f5e ; 37 - dw Func_f8f4c ; 38 - dw Func_f8f55 ; 39 - dw Func_f8f5e ; 3a - dw Func_f8e7d ; 3b - dw Func_f8e7d ; 3c - dw Func_f8e7d ; 3d - dw Func_f8e7d ; 3e - dw Func_f8f94 ; 3f - - dw Func_f8f67 ; 40 - dw Func_f8f70 ; 41 - dw Func_f8efb ; 42 - dw Func_f8f04 ; 43 - dw Func_f8f0d ; 44 - dw Func_f8f16 ; 45 - dw Func_f8f1f ; 46 - dw Func_f8f67 ; 47 - dw Func_f8f70 ; 48 - dw Func_f8e7d ; 49 - dw Func_f8e7d ; 4a - dw Func_f8e7d ; 4b - dw Func_f8f94 ; 4c - - dw Func_f8ec5 ; 4d - dw Func_f8ece ; 4e - dw Func_f8ed7 ; 4f - dw Func_f8ee0 ; 50 - dw Func_f8ee9 ; 51 - dw Func_f8ef2 ; 52 - dw Func_f8e7d ; 53 - dw Func_f8f67 ; 54 - dw Func_f8f70 ; 55 - dw Func_f8f67 ; 56 - dw Func_f8f70 ; 57 - dw Func_f8e7d ; 58 - dw Func_f8e7d ; 59 - dw Func_f8e7d ; 5a - dw Func_f8f94 ; 5b - - dw Func_f8efb ; 5c - dw Func_f8f04 ; 5d - dw Func_f8f0d ; 5e - dw Func_f8f16 ; 5f - dw Func_f8f1f ; 60 - dw Func_f8f28 ; 61 - dw Func_f8f31 ; 62 - dw Func_f8f3a ; 63 - dw Func_f8f43 ; 64 - dw Func_f8e7d ; 65 - dw Func_f8e7d ; 66 - dw Func_f8e7d ; 67 - dw Func_f8e7d ; 68 - dw Func_f8f94 ; 69 - - dw Func_f8e86 ; 6a - dw Func_f8e8f ; 6b - dw Func_f8e98 ; 6c - dw Func_f8ea1 ; 6d - dw Func_f8eaa ; 6e - dw Func_f8eb3 ; 6f - dw Func_f8ebc ; 70 - dw Func_f8f9d ; 71 - - dw Func_f8e7d ; 72 - dw Func_f8f79 ; 73 - dw Func_f8f82 ; 74 - dw Func_f8f82 ; 75 - dw Func_f8f82 ; 76 - dw Func_f8f82 ; 77 - dw Func_f8f82 ; 78 - dw Func_f8f82 ; 79 - dw Func_f8f82 ; 7a - dw Func_f8f8b ; 7b - -SurfingMinigameWaveFunction_NoWave: - ld a, [wc5e5] - cp $16 - jr c, .check_param - jr z, .big_kahuna - jr nc, .got_wave -.big_kahuna - ld a, $6a - jr .got_next_fn - -.check_param - ld a, [wc5d5] - and a - jr z, .got_wave - dec a - and $7 - ld e, a - ld d, $0 - ld hl, Unkn_f8e75 - add hl, de - ld a, [hl] -.got_next_fn - ld [wSurfingMinigameWaveFunctionNumber], a -.got_wave - lb bc, $74, $74 - ld de, Unkn_f973d - ret - -Unkn_f8e75: - db $01,$0e,$1a,$29,$32,$40,$4d,$5c - -Func_f8e7d: - lb bc, $74, $74 - ld de, Unkn_f973d - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8e86: - lb bc, $74, $6c - ld de, Unkn_f9745 - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8e8f: - lb bc, $64, $5c - ld de, Unkn_f974d - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8e98: - lb bc, $54, $4c - ld de, Unkn_f9755 - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8ea1: - lb bc, $44, $44 - ld de, Unkn_f975d - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8eaa: - lb bc, $44, $4c - ld de, Unkn_f9765 - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8eb3: - lb bc, $54, $5c - ld de, Unkn_f976d - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8ebc: - lb bc, $64, $6c - ld de, Unkn_f9775 - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8ec5: - lb bc, $74, $6c - ld de, Unkn_f977d - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8ece: - lb bc, $64, $5c - ld de, Unkn_f9785 - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8ed7: - lb bc, $54, $4c - ld de, Unkn_f978d - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8ee0: - lb bc, $4c, $4c - ld de, Unkn_f9795 - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8ee9: - lb bc, $54, $5c - ld de, Unkn_f979d - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8ef2: - lb bc, $64, $6c - ld de, Unkn_f97a5 - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8efb: - lb bc, $74, $6c - ld de, Unkn_f97ad - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f04: - lb bc, $64, $5c - ld de, Unkn_f97b5 - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f0d: - lb bc, $54, $54 - ld de, Unkn_f97bd - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f16: - lb bc, $54, $5c - ld de, Unkn_f97c5 - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f1f: - lb bc, $64, $6c - ld de, Unkn_f97cd - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f28: - lb bc, $74, $6c - ld de, Unkn_f97d5 - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f31: - lb bc, $64, $5c - ld de, Unkn_f97dd - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f3a: - lb bc, $5c, $5c - ld de, Unkn_f97e5 - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f43: - lb bc, $64, $6c - ld de, Unkn_f97ed - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f4c: - lb bc, $74, $6c - ld de, Unkn_f97f5 - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f55: - lb bc, $64, $64 - ld de, Unkn_f97fd - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f5e: - lb bc, $64, $6c - ld de, Unkn_f9805 - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f67: - lb bc, $74, $6c - ld de, Unkn_f980d - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f70: - lb bc, $6c, $6c - ld de, Unkn_f9815 - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f79: - lb bc, $74, $74 - ld de, Unkn_f981d - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f82: - lb bc, $74, $74 - ld de, Unkn_f9825 - jp SurfingMinigameWaveFunction_GoToNextWaveFunction - -Func_f8f8b: - lb bc, $74, $74 - ld de, Unkn_f9825 - jp SurfingMinigameWaveFunction_ResetWaveFunction - -Func_f8f94: - lb bc, $74, $74 - ld de, Unkn_f973d - jp SurfingMinigameWaveFunction_ResetWaveFunction - -Func_f8f9d: - lb bc, $74, $74 - ld de, Unkn_f973d - ret - -Func_f8fa4: ; unused - inc a - ld [wSurfingMinigameWaveFunctionNumber], a - ret - -SurfingMinigameWaveFunction_GoToNextWaveFunction: - ld hl, wSurfingMinigameWaveFunctionNumber - inc [hl] - ret - -SurfingMinigameWaveFunction_ResetWaveFunction: - xor a - ld [wSurfingMinigameWaveFunctionNumber], a - ret - -SurfingPikachuMinigameIntro: - call SurfingPikachu_ClearTileMap - call ClearSprites - call DisableLCD - xor a - ldh [hAutoBGTransferEnabled], a - call ClearObjectAnimationBuffers - ld hl, SurfingPikachu1Graphics3 - ld de, $8800 - ld bc, $900 - ld a, BANK(SurfingPikachu1Graphics3) - call FarCopyData - ld a, SurfingPikachuSpawnStateDataPointer % $100 - ld [wAnimatedObjectSpawnStateDataPointer], a - ld a, SurfingPikachuSpawnStateDataPointer / $100 - ld [wAnimatedObjectSpawnStateDataPointer + 1], a - ld a, SurfingPikachuObjectJumptable % $100 - ld [wAnimatedObjectJumptablePointer], a - ld a, SurfingPikachuObjectJumptable / $100 - ld [wAnimatedObjectJumptablePointer + 1], a - ld a, SurfingPikachuOAMData % $100 - ld [wAnimatedObjectOAMDataPointer], a - ld a, SurfingPikachuOAMData / $100 - ld [wAnimatedObjectOAMDataPointer + 1], a - ld a, SurfingPikachuFrames % $100 - ld [wAnimatedObjectFramesDataPointer], a - ld a, SurfingPikachuFrames / $100 - ld [wAnimatedObjectFramesDataPointer + 1], a - ld a, $c - lb de, $74, $58 - call SpawnAnimatedObject - call DrawSurfingPikachuMinigameIntroBackground - xor a - ldh [hSCX], a - ldh [hSCY], a - ld a, $90 - ldh [hWY], a - ld b, $f - call RunPaletteCommand - ld a, $e3 - ldh [rLCDC], a - ld a, $1 - ldh [hAutoBGTransferEnabled], a - call DelayFrame - call DelayFrame - call DelayFrame - call SurfingPikachuMinigame_SetBGPals - ld a, $e4 - ldh [rOBP0], a - ld a, $e0 - ldh [rOBP1], a - call UpdateGBCPal_OBP0 - call UpdateGBCPal_OBP1 - call DelayFrame - ld a, MUSIC_SURFING_PIKACHU - ld c, BANK(Music_SurfingPikachu) - call PlayMusic - xor a - ld [wSurfingMinigameIntroAnimationFinished], a -.loop - ld a, [wSurfingMinigameIntroAnimationFinished] - and a - ret nz - ld a, $0 - ld [wCurrentAnimatedObjectOAMBufferOffset], a - call RunObjectAnimations - call DelayFrame - jr .loop - -DrawSurfingPikachuMinigameIntroBackground: - ld hl, wTileMap - ld bc, SCREEN_WIDTH * SCREEN_HEIGHT - ld a, $ff - call FillMemory - ld hl, Tilemap_f90bc - decoord 0, 6 - ld bc, 12 * SCREEN_WIDTH - call CopyData - ld de, Tilemap_f91c8 - hlcoord 4, 0 - lb bc, 6, 12 - call .CopyBox - hlcoord 3, 7 - lb bc, 3, 15 - call .FillBoxWithFF - ld hl, Tilemap_f91ac - decoord 3, 7 - ld bc, 15 - call CopyData - ld hl, Tilemap_f91bb - decoord 4, 9 - ld bc, 13 - call CopyData - ret - -.CopyBox: -.copy_row - push bc - push hl -.copy_col - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .copy_col - ld bc, SCREEN_WIDTH - pop hl - add hl, bc - pop bc - dec b - jr nz, .copy_row - ret - -.FillBoxWithFF: -.fill_row - push bc - push hl -.fill_col - ld [hl], $ff - inc hl - dec c - jr nz, .fill_col - pop hl - ld bc, SCREEN_WIDTH - add hl, bc - pop bc - dec b - jr nz, .fill_row - ret - -Tilemap_f90bc: INCBIN "gfx/unknown_f90bc.map" -Tilemap_f91ac: INCBIN "gfx/unknown_f91ac.map" -Tilemap_f91bb: INCBIN "gfx/unknown_f91bb.map" -Tilemap_f91c8: INCBIN "gfx/unknown_f91c8.map" - -SurfingMinigame_UpdateLYOverrides: - ld hl, wLYOverrides + $10 - ld de, wLYOverrides + $11 - ld c, $80 - ld a, [hl] - push af -.loop - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .loop - pop af - ld [hl], a - ret - -SurfingMinigame_InitScanlineOverrides: - ld hl, wLYOverrides - ld bc, wLYOverridesEnd - wLYOverrides - ld de, $0 -.loop - ld a, e - and $1f - ld e, a - push hl - ld hl, SurfingMinigame_LYOverridesInitialSineWave - add hl, de - ld a, [hl] - pop hl - ld [hli], a - inc e - dec bc - ld a, c - or b - jr nz, .loop - ret - -SurfingPikachu_GetJoypad_3FrameBuffer: - call Joypad - ldh a, [hFrameCounter] - and a - jr nz, .delayed - ldh a, [hJoyHeld] - ldh [hJoy5], a - ld a, $2 - ldh [hFrameCounter], a - ret - -.delayed - xor a - ldh [hJoy5], a - ret - -SurfingPikachuMinigame_BlankPals: - xor a - ldh [rBGP], a - ldh [rOBP0], a - ldh [rOBP1], a - call UpdateGBCPal_BGP - call UpdateGBCPal_OBP0 - call UpdateGBCPal_OBP1 - ret - -SurfingPikachuMinigame_NormalPals: - ld a, $e4 - ldh [rBGP], a - ldh [rOBP0], a - ld a, $e0 - ldh [rOBP1], a - call UpdateGBCPal_BGP - call UpdateGBCPal_OBP0 - call UpdateGBCPal_OBP1 - ret - -SurfingPikachu_ClearTileMap: - ld hl, wTileMap - ld bc, SCREEN_WIDTH * SCREEN_HEIGHT - xor a - call FillMemory - ret - -Func_f9284: - xor a - ld [wc5ed], a - ld [wc5ee], a - ret - -SurfingMinigame_UpdatePikachuHeight: - ld a, [wc5ed] - and a - jr nz, .positive - ld a, [wc5ec] - ld d, a - ld a, [wc5ee] - or d - jr z, .done - ld a, [wc5ee] - ld e, a - ld hl, -$80 - add hl, de - ld a, l - ld [wc5ee], a - ld a, h - ld [wc5ec], a - - ; -(4 * a ** 2) - ld e, a - ld d, $0 - call SurfingMinigame_NTimesDE - ld e, l - ld d, h - ld a, $4 - call SurfingMinigame_NTimesDE - ld a, l - xor $ff - inc a - ld l, a - ld a, h - xor $ff - ld h, a - - push hl - ld hl, ANIM_OBJ_Y_COORD - add hl, bc - ld d, [hl] - ld hl, ANIM_OBJ_FIELD_C - add hl, bc - ld e, [hl] - pop hl - - add hl, de - ld e, l - ld d, h - - ld hl, ANIM_OBJ_Y_COORD - add hl, bc - ld [hl], d - ld hl, ANIM_OBJ_FIELD_C - add hl, bc - ld [hl], e - and a - ret - -.done - ld a, $1 - ld [wc5ed], a - and a - ret - -.positive - ld a, [wSurfingMinigamePikachuObjectHeight] - ld e, a - ld hl, ANIM_OBJ_Y_COORD - add hl, bc - ld a, [hl] - cp $90 - jr nc, .okay - cp e - jr nc, .reset -.okay - ld a, [wc5ec] - ld d, a - ld a, [wc5ee] - ld e, a - ld hl, $80 - add hl, de - ld a, l - ld [wc5ee], a - ld a, h - ld [wc5ec], a - - ; 4 * a ** 2 - ld e, a - ld d, $0 - call SurfingMinigame_NTimesDE - ld e, l - ld d, h - ld a, $4 - call SurfingMinigame_NTimesDE - - push hl - ld hl, ANIM_OBJ_Y_COORD - add hl, bc - ld d, [hl] - ld hl, ANIM_OBJ_FIELD_C - add hl, bc - ld e, [hl] - pop hl - - add hl, de - ld e, l - ld d, h - - ld hl, ANIM_OBJ_Y_COORD - add hl, bc - ld [hl], d - ld hl, ANIM_OBJ_FIELD_C - add hl, bc - ld [hl], e - and a - ret - -.reset - ld hl, ANIM_OBJ_Y_COORD - add hl, bc - ld a, [wSurfingMinigamePikachuObjectHeight] - ld [hl], a - ld hl, ANIM_OBJ_FIELD_C - add hl, bc - ld [hl], $0 - scf - ret - -SurfingMinigame_NTimesDE: - ld hl, $0 -.loop - srl a - jr nc, .no_add - add hl, de -.no_add - sla e - rl d - and a - jr nz, .loop - ret - -SurfingPikachu_PlaceBCDNumber: - ld c, a - swap a - and $f - add $d0 - ld [hli], a - ld a, c - and $f - add $d0 - ld [hl], a - dec de - ret - -SurfingPikachu_Cosine: ; cosine - add $10 -SurfingPikachu_Sine: ; sine - and $3f - cp $20 - jr nc, .positive - call .GetSine - ld a, h - ret - -.positive - and $1f - call .GetSine - ld a, h - xor $ff - inc a - ret - -.GetSine: - ld e, a - ld a, d - ld d, $0 - ld hl, .SineWave - add hl, de - add hl, de - ld e, [hl] - inc hl - ld d, [hl] - ld hl, $0 -.loop - srl a - jr nc, .no_add - add hl, de -.no_add - sla e - rl d - and a - jr nz, .loop - ret - -.SineWave: - sine_wave $100 - -SurfingPikachuSpawnStateDataPointer: - db $00, $00, $00 ; 0 - db $04, $01, $00 ; 1 - db $11, $02, $00 ; 2 - db $12, $02, $00 ; 3 - db $15, $00, $00 ; 4 - db $16, $00, $00 ; 5 - db $17, $00, $00 ; 6 - db $18, $00, $00 ; 7 - db $19, $00, $00 ; 8 - db $1a, $00, $00 ; 9 - db $14, $00, $00 ; a - db $13, $03, $00 ; b - db $1b, $04, $00 ; c - -SurfingPikachuObjectJumptable: - dw SurfingMinigameAnimatedObjectFn_nop ; 0 - dw SurfingMinigameAnimatedObjectFn_Pikachu ; 1 - dw Func_f87fb ; 2 - dw SurfingMinigameAnimatedObjectFn_FlippingPika ; 3 - dw SurfingMinigameAnimatedObjectFn_IntroAnimationPikachu ; 4 - -SurfingMinigameAnimatedObjectFn_nop: - ret - -INCLUDE "data/animated_objects_3e_1.asm" - -SurfingMinigame_LYOverridesInitialSineWave: -; a sine wave with amplitude 2 - db 0, 0, 0, 1, 1, 1, 1, 2 - db 2, 2, 1, 1, 1, 1, 0, 0 - db 0, 0, 0, -1, -1, -1, -1, -2 - db -2, -2, -1, -1, -1, -1, 0, 0 - -Unkn_f96e5: - db $00, $00, $00, $00 ; 00 - db $0b, $0b, $0b, $0b ; 01 - db $0b, $02, $02, $06 ; 02 - db $03, $0b, $07, $03 ; 03 - db $06, $06, $06, $06 ; 04 - db $07, $07, $07, $07 ; 05 - db $06, $04, $04, $08 ; 06 - db $05, $07, $08, $05 ; 07 - db $0b, $0b, $11, $12 ; 08 - db $0b, $0b, $13, $03 ; 09 - db $14, $12, $04, $08 ; 0a - db $13, $07, $08, $05 ; 0b - db $06, $14, $06, $14 ; 0c - db $13, $07, $13, $07 ; 0d - db $08, $08, $08, $08 ; 0e - db $14, $12, $14, $12 ; 0f - db $0b, $11, $02, $14 ; 10 - db $06, $14, $06, $14 ; 11 - db $0c, $0c, $0d, $0d ; 12 - db $0d, $0d, $0d, $0d ; 13 - db $0e, $0f, $10, $0b ; 14 - db $12, $13, $12, $13 ; 15 - -Unkn_f973d: - db $00, $00, $00, $01, $01, $01, $01, $01 -Unkn_f9745: - db $00, $00, $00, $01, $01, $02, $04, $06 -Unkn_f974d: - db $00, $00, $00, $01, $02, $04, $06, $0e -Unkn_f9755: - db $00, $00, $00, $10, $11, $06, $0e, $0e -Unkn_f975d: - db $00, $00, $00, $15, $15, $0e, $0e, $0e -Unkn_f9765: - db $00, $00, $00, $03, $05, $07, $0e, $0e -Unkn_f976d: - db $00, $00, $00, $01, $03, $05, $07, $0e -Unkn_f9775: - db $00, $00, $00, $01, $01, $03, $05, $07 -Unkn_f977d: - db $00, $00, $00, $01, $01, $02, $04, $06 -Unkn_f9785: - db $00, $00, $00, $01, $02, $04, $06, $0e -Unkn_f978d: - db $00, $00, $00, $08, $0f, $0a, $0e, $0e -Unkn_f9795: - db $00, $00, $00, $09, $0d, $0b, $0e, $0e -Unkn_f979d: - db $00, $00, $00, $01, $03, $05, $07, $0e -Unkn_f97a5: - db $00, $00, $00, $01, $01, $03, $05, $07 -Unkn_f97ad: - db $00, $00, $00, $01, $01, $02, $04, $06 -Unkn_f97b5: - db $00, $00, $00, $01, $10, $11, $06, $0e -Unkn_f97bd: - db $00, $00, $00, $01, $15, $15, $0e, $0e -Unkn_f97c5: - db $00, $00, $00, $01, $03, $05, $07, $0e -Unkn_f97cd: - db $00, $00, $00, $01, $01, $03, $05, $07 -Unkn_f97d5: - db $00, $00, $00, $01, $01, $02, $04, $06 -Unkn_f97dd: - db $00, $00, $00, $01, $08, $0f, $0a, $0e -Unkn_f97e5: - db $00, $00, $00, $01, $09, $0d, $0b, $0e -Unkn_f97ed: - db $00, $00, $00, $01, $01, $03, $05, $07 -Unkn_f97f5: - db $00, $00, $00, $01, $01, $10, $11, $06 -Unkn_f97fd: - db $00, $00, $00, $01, $01, $15, $15, $0e -Unkn_f9805: - db $00, $00, $00, $01, $01, $03, $05, $07 -Unkn_f980d: - db $00, $00, $00, $01, $01, $08, $0f, $0a -Unkn_f9815: - db $00, $00, $00, $01, $01, $09, $0d, $0b -Unkn_f981d: - db $00, $00, $00, $14, $14, $14, $14, $14 -Unkn_f9825: - db $00, $00, $00, $12, $13, $13, $13, $13 diff --git a/engine/unknown_ea3ea.asm b/engine/unknown_ea3ea.asm deleted file mode 100755 index c10f1555..00000000 --- a/engine/unknown_ea3ea.asm +++ /dev/null @@ -1,973 +0,0 @@ -Printer_GetMonStats: - call GBPalWhiteOutWithDelay3 - call ClearScreen - call LoadHpBarAndStatusTilePatterns - ld de, GFX_ea563 - ld hl, vChars2 + $710 - lb bc, BANK(GFX_ea563), (GFX_ea563End - GFX_ea563) / 8 - call CopyVideoDataDouble - - ld de, GFX_ea56b - ld hl, vChars2 + $6e0 - lb bc, BANK(GFX_ea56b), (GFX_ea56bEnd - GFX_ea56b) / 8 - call CopyVideoDataDouble - - xor a - ldh [hAutoBGTransferEnabled], a - xor a - ld [wWhichTradeMonSelectionMenu], a - call LoadMonData - - ld hl, wTileMap - lb bc, 16, 18 - call TextBoxBorder - - hlcoord 0, 12 - lb bc, 4, 18 - call TextBoxBorder - - hlcoord 3, 10 - call PrintLevelFull - - hlcoord 2, 10 - ld a, $6e - ld [hli], a - ld [hl], " " - - hlcoord 2, 11 - ld [hl], "’" - - hlcoord 4, 11 - ld de, wLoadedMonMaxHP - lb bc, 2, 3 - call PrintNumber - - ld a, [wMonHeader] - ld [wPokeBallAnimData], a - ld [wd0b5], a - ld hl, wPartyMonNicks - call .GetNamePointer - hlcoord 8, 2 - call PlaceString - - call GetMonName - hlcoord 9, 3 - call PlaceString - - predef IndexToPokedex - hlcoord 2, 8 - ld [hl], "â„–" - inc hl - ld [hl], $f2 - inc hl - ld de, wPokeBallAnimData - lb bc, $80 | 1, 3 - call PrintNumber - - hlcoord 8, 4 - ld de, .OT - call PlaceString - - ld hl, wPartyMonOT - call .GetNamePointer - hlcoord 9, 5 - call PlaceString - - hlcoord 9, 6 - ld de, .IDNo - call PlaceString - - hlcoord 13, 6 - ld de, wLoadedMonOTID - lb bc, $80 | 2, 5 - call PrintNumber - - hlcoord 9, 8 - ld de, .Stats - ldh a, [hFlagsFFFA] - set 2, a - ldh [hFlagsFFFA], a - call PlaceString - ldh a, [hFlagsFFFA] - res 2, a - ldh [hFlagsFFFA], a - - hlcoord 16, 8 - ld de, wLoadedMonAttack - ld a, 4 -.loop - push af - push de - - push hl - lb bc, 2, 3 - call PrintNumber - pop hl - ld bc, SCREEN_WIDTH - add hl, bc - - pop de - inc de - inc de - pop af - dec a - jr nz, .loop - - hlcoord 1, 13 - ld a, [wLoadedMonMoves] - call .PlaceMoveName - - hlcoord 1, 14 - ld a, [wLoadedMonMoves + 1] - call .PlaceMoveName - - hlcoord 1, 15 - ld a, [wLoadedMonMoves + 2] - call .PlaceMoveName - - hlcoord 1, 16 - ld a, [wLoadedMonMoves + 3] - call .PlaceMoveName - - ld b, $4 ; SET_PAL_STATUS_SCREEN - call RunPaletteCommand - - ld a, $1 - ldh [hAutoBGTransferEnabled], a - call Delay3 - call GBPalNormal - hlcoord 1, 1 - call LoadFlippedFrontSpriteByMonIndex - ret - -.GetNamePointer: - ld bc, NAME_LENGTH - ld a, [wWhichPokemon] - call AddNTimes - ld e, l - ld d, h - ret - -.PlaceMoveName: - and a - jr z, .no_move - ld [wPokeBallAnimData], a - call GetMoveName - jr .place_string - -.no_move - ld de, .Blank -.place_string - call PlaceString - ret - -.OT: - db "OT/@" - -.IDNo: - db $73, "â„–/@" - -.Stats: - db "ATTACK" - next "DEFENSE" - next "SPEED" - next "SPECIAL@" - -.Blank: - db "--------------@" - -GFX_ea563: -INCBIN "gfx/stats_screen_hp.1bpp" -GFX_ea563End: - -GFX_ea56b: -INCBIN "gfx/stats_screen_lv.1bpp" -GFX_ea56bEnd: - -PrinterDebug_LoadGFX: - ld hl, vChars1 + $7e0 - ld de, GFX_ea597 - lb bc, BANK(GFX_ea597), (GFX_ea597End - GFX_ea597) / 16 - call CopyVideoData - - ld hl, wOAMBuffer + 32 * 4 - ld a, $8 - ld c, $8 -.loop - ld [hl], $10 - inc hl - ld [hl], a - inc hl - ld [hl], $fe - inc hl - ld [hl], $0 - inc hl - add $8 - dec c - jr nz, .loop - ret - -GFX_ea597: -INCBIN "gfx/zero_one_ea597.2bpp" -GFX_ea597End: - -PrinterDebug_ConvertStatusFlagsToTiles: - ld hl, wOAMBuffer + 32 * 4 + 2 - ld de, 4 - ld a, [wPrinterStatusFlags] - ld c, 8 -.loop - sla a - jr c, .place_1 - ld [hl], $fe - jr .okay - -.place_1 - ld [hl], $ff -.okay - add hl, de - dec c - jr nz, .loop - ret - -PrinterDebug_DoFunction: - ld a, [wPrinterSendState] - ld e, a - ld d, 0 - ld hl, .Jumptable - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -.Jumptable: - dw Func_ea623 - dw Func_ea6d2 - dw Func_ea6af - dw Func_ea645 - dw Func_ea701 - dw Func_ea6bd - dw Func_ea671 - dw Func_ea701 - dw Func_ea6af - dw Func_ea68a - dw Func_ea701 - dw Func_ea6af - dw Func_ea721 - dw Func_ea610 - dw Func_ea61a - dw Func_ea6af - dw Func_ea61e - dw Func_ea72f - dw Func_ea732 - -Func_ea606: - ld hl, wPrinterSendState - inc [hl] - ret - -Func_ea60b: - ld hl, wPrinterSendState - dec [hl] - ret - -Func_ea610: - xor a - ld [wPrinterStatusFlags], a - ld hl, wPrinterSendState - set 7, [hl] - ret - -Func_ea61a: - call Func_ea606 - ret - -Func_ea61e: - xor a - ld [wPrinterSendState], a - ret - -Func_ea623: - call Func_ea784 - ld hl, Data_ea9de - call Func_ea76b - xor a - ld [wPrinterDataSize], a - ld [wPrinterDataSize + 1], a - ld a, [wPrinterQueueLength] - ld [wPrinterRowIndex], a - call Func_ea606 - call Func_ea74c - ld a, $1 - ld [wPrinterStatusIndicator], a - ret - -Func_ea645: - call Func_ea784 - ld hl, wPrinterRowIndex - ld a, [hl] - and a - jr z, Func_ea671 - ld hl, Data_ea9ea - call Func_ea76b - call PrinterDebug_PrepOAMForPrinting - ld a, $80 - ld [wPrinterDataSize], a - ld a, $2 - ld [wPrinterDataSize + 1], a - call Func_ea7a2 - call Func_ea606 - call Func_ea74c - ld a, $2 - ld [wPrinterStatusIndicator], a - ret - -Func_ea671: - ld a, $6 - ld [wPrinterSendState], a - ld hl, Data_ea9f0 - call Func_ea76b - xor a - ld [wPrinterDataSize], a - ld [wPrinterDataSize + 1], a - call Func_ea606 - call Func_ea74c - ret - -Func_ea68a: - call Func_ea784 - ld hl, Data_ea9e4 - call Func_ea76b - call Func_ea7d2 - ld a, $4 - ld [wPrinterDataSize], a - ld a, $0 - ld [wPrinterDataSize + 1], a - call Func_ea7a2 - call Func_ea606 - call Func_ea74c - ld a, $3 - ld [wPrinterStatusIndicator], a - ret - -Func_ea6af: - ld hl, wPrinterSerialFrameDelay - inc [hl] - ld a, [hl] - cp a, $6 - ret c - xor a - ld [hl], a - call Func_ea606 - ret - -Func_ea6bd: - ld hl, wPrinterSerialFrameDelay - inc [hl] - ld a, [hl] - cp 6 - ret c - xor a - ld [hl], a - ld hl, wPrinterRowIndex - dec [hl] - call Func_ea60b - call Func_ea60b - ret - -Func_ea6d2: - call Func_ea742 - ret c - ld a, [wPrinterHandshake] - cp a, $ff - jr nz, .asm_ea6e4 - ld a, [wPrinterStatusFlags] - cp a, $ff - jr z, .asm_ea6fb -.asm_ea6e4 - ld a, [wPrinterHandshake] - cp a, $81 - jr nz, .asm_ea6fb - ld a, [wPrinterStatusFlags] - cp a, $0 - jr nz, .asm_ea6fb - ld hl, wPrinterConnectionOpen - set 1, [hl] - call Func_ea606 - ret - -.asm_ea6fb - ld a, $e - ld [wPrinterSendState], a - ret - -Func_ea701: - call Func_ea742 - ret c - ld a, [wPrinterStatusFlags] - and $f0 - jr nz, .asm_ea71b - ld a, [wPrinterStatusFlags] - and $1 - jr nz, .asm_ea717 - call Func_ea606 - ret - -.asm_ea717 - call Func_ea60b - ret - -.asm_ea71b - ld a, $11 - ld [wPrinterSendState], a - ret - -Func_ea721: - call Func_ea742 - ret c - ld a, [wPrinterStatusFlags] - and $f3 - ret nz - call Func_ea606 - ret - -Func_ea72f: - call Func_ea606 -Func_ea732: - ld a, [wPrinterOpcode] - and a - ret nz - ld a, [wPrinterStatusFlags] - and $f0 - ret nz - xor a - ld [wPrinterSendState], a - ret - -Func_ea742: - ld a, [wPrinterOpcode] - and a - jr nz, .asm_ea74a - and a - ret - -.asm_ea74a - scf - ret - -Func_ea74c: -.asm_ea74c - ld a, [wPrinterOpcode] - and a - jr nz, .asm_ea74c - ld a, $1 - ld [wPrinterOpcode], a - xor a - ld [wPrinterSendByteOffset], a - ld [wPrinterSendByteOffset + 1], a - ld a, $88 - ldh [rSB], a - ld a, $1 - ldh [rSC], a - ld a, $81 - ldh [rSC], a - ret - -Func_ea76b: - ld a, [hli] - ld [wPrinterDataHeader], a - ld a, [hli] - ld [wPrinterDataHeader + 1], a - ld a, [hli] - ld [wPrinterDataHeader + 2], a - ld a, [hli] - ld [wPrinterDataHeader + 3], a - ld a, [hli] - ld [wPrinterDataHeader + 4], a - ld a, [hl] - ld [wPrinterDataHeader + 5], a - ret - -Func_ea784: - xor a - ld hl, wPrinterDataHeader - ld [hli], a - ld [hli], a - ld [hli], a - ld [hl], a - ld hl, wPrinterDataHeader + 4 - ld [hli], a - ld [hl], a - xor a - ld [wPrinterDataSize], a - ld [wPrinterDataSize + 1], a - ld hl, wPrinterSendDataSource1 - ld bc, $280 - call FillMemory - ret - -Func_ea7a2: - ld hl, $0 - ld bc, $4 - ld de, wPrinterDataHeader - call Func_ea7c5 - ld a, [wPrinterDataSize] - ld c, a - ld a, [wPrinterDataSize + 1] - ld b, a - ld de, wPrinterSendDataSource1 - call Func_ea7c5 - ld a, l - ld [wPrinterDataHeader + 4], a - ld a, h - ld [wPrinterDataHeader + 5], a - ret - -Func_ea7c5: -.asm_ea7c5 - ld a, [de] - inc de - add l - jr nc, .asm_ea7cb - inc h -.asm_ea7cb - ld l, a - dec bc - ld a, c - or b - jr nz, .asm_ea7c5 - ret - -Func_ea7d2: - ld a, $1 - ld [wPrinterSendDataSource1], a - ld a, [wcae2] - ld [wPrinterStatusReceived], a - ld a, $e4 - ld [wc6f2], a - ld a, [wPrinterSettingsTempCopy] - ld [wc6f3], a - ret - -PrinterDebug_PrepOAMForPrinting: - ld a, [wPrinterRowIndex] - ld b, a - ld a, [wPrinterQueueLength] - sub b - ld hl, wPrinterTileBuffer - ld de, $28 -.get_start_addr - and a - jr z, .start_working - add hl, de - dec a - jr .get_start_addr - -.start_working - ld e, l - ld d, h - ld hl, wPrinterSendDataSource1 - ld c, $28 -.prep_loop - ld a, [de] - inc de - push bc - push de - push hl - swap a - ld d, a - and $f0 - ld e, a - ld a, d - and $f - ld d, a - and $8 - ld a, d - jr nz, .vtiles1 - or $90 - jr .got_vram_address - -.vtiles1 - or $80 -.got_vram_address - ld d, a - lb bc, BANK(PrinterDebug_PrepOAMForPrinting), $1 - call CopyVideoData - pop hl - ld de, $10 - add hl, de - pop de - pop bc - dec c - jr nz, .prep_loop - call .UnnecessaryCall - ret - -.UnnecessaryCall: - ld hl, wcbdc - ld bc, $20 - xor a - call FillMemory - ld hl, wOAMBuffer - ld c, $28 -.master_loop - push bc - push hl - call .AreWePrintingThisSegment - jr nc, .skip_segment - call .GetVRAMAddress - call .GetOAMFlags - call .ApplyObjectPalettes - call .PlaceObject -.skip_segment - pop hl - inc hl - inc hl - inc hl - inc hl - pop bc - dec c - jr nz, .master_loop - ret - -.AreWePrintingThisSegment: - ld a, [wPrinterRowIndex] - ld b, a - ld a, [wPrinterQueueLength] - sub b - ld c, a - ld b, $10 -.add_n_times - ld a, c - and a - jr z, .check - ld a, b - add $10 - ld b, a - dec c - jr .add_n_times - -.check - ld a, b - ld e, a - add $10 - ld d, a - ld a, [hl] - cp e - jr c, .not_printing - cp d - jr nc, .not_printing - scf - ret - -.not_printing - and a - ret - -.GetVRAMAddress: - push hl - inc hl - inc hl - ld a, [hl] - swap a - ld d, a - and $f0 - ld e, a - ld a, d - and $f - or $80 - ld d, a - ld hl, wcbdc - lb bc, BANK(.GetVRAMAddress), $1 - call CopyVideoData - pop hl - ret - -.GetOAMFlags: - push hl - inc hl - inc hl - inc hl - ld a, [hl] - call .DoBitOperation - pop hl - ret - -.DoBitOperation: - and $60 - swap a - ld e, a - ld d, 0 - ld hl, .Jumptable - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -.Jumptable: - dw .nop - dw .xflip - dw .yflip - dw .both - -.nop: - ret - -.xflip: - call .XFlip - ret - -.yflip: - call .YFlip - ret - -.both: - call .XFlip - call .YFlip - ret - -.XFlip: - ld hl, wcbdc - ld c, 16 -.byte_loop - ld d, [hl] - ld a, 0 - ld b, 8 -.bit_loop - sla d - rr a - dec b - jr nz, .bit_loop - ld [hli], a - dec c - jr nz, .byte_loop - ret - -.YFlip: - ld hl, wcbdc - ld de, wcbea - ld c, $4 -.swap_loop - ld b, [hl] - ld a, [de] - ld [hli], a - ld a, b - ld [de], a - inc de - ld b, [hl] - ld a, [de] - ld [hli], a - ld a, b - ld [de], a - dec de - dec de - dec de - dec c - jr nz, .swap_loop - ret - -.ApplyObjectPalettes: - push hl - ld hl, wcbdc - ld de, wcbec - ld a, 8 -.loop1 - push af - ld bc, $0 - ld a, 8 -.loop2 - push af - xor a - rlc [hl] - rl a - inc hl - rlc [hl] - rl a - dec hl - push hl - push de - call .ExpandPalettesToBC - pop de - pop hl - pop af - dec a - jr nz, .loop2 - inc hl - inc hl - ld a, b - ld [de], a - inc de - ld a, c - ld [de], a - inc de - pop af - dec a - jr nz, .loop1 - pop hl - ret - -.ExpandPalettesToBC: - call .GetPaletteFunction - call .ApplyPaletteFunction - ret - -.GetPaletteFunction: - ld e, a - ld d, 0 - ld hl, .PalJumptable - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -.PalJumptable: - dw .Pal0 - dw .Pal1 - dw .Pal2 - dw .Pal3 - -.Pal0: - ldh a, [rOBP0] - and $3 - ret - -.Pal2: - ldh a, [rOBP0] - and $c - srl a - srl a - ret - -.Pal1: - ldh a, [rOBP0] - and $30 - swap a - ret - -.Pal3: - ldh a, [rOBP0] - and $c0 - rlca - rlca - ret - -.ApplyPaletteFunction: - ld e, a - ld d, 0 - ld hl, .PalFunJumptable - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -.PalFunJumptable: - dw .zero_zero - dw .xflip_zero - dw .zero_xflip - dw .xflip_xflip - -.zero_zero: - sla b - sla c - ret - -.xflip_zero: - scf - rl b - sla c - ret - -.zero_xflip: - sla b - scf - rl c - ret - -.xflip_xflip: - scf - rl b - scf - rl c - ret - -.PlaceObject: - push hl - ld a, [hli] - ld c, [hl] - and $8 - jr nz, .use_source_2 - ld hl, wPrinterSendDataSource1 - jr .got_data_source - -.use_source_2 - ld hl, wPrinterSendDataSource2 -.got_data_source - ld b, $0 - ld a, c - and %11111000 - sub $8 - ld c, a - sla c - rl b - add hl, bc - ld e, l - ld d, h - ld hl, wcbec - ld c, $8 -.coord_copy_loop - call .GetBitMask - ld a, [de] - and b - or [hl] - ld [de], a - inc hl - inc de - ld a, [de] - and b - or [hl] - ld [de], a - inc hl - inc de - dec c - jr nz, .coord_copy_loop - pop hl - ret - -.GetBitMask: - push hl - push de - ld de, -$10 - add hl, de - ld a, [hli] - or [hl] - xor $ff - ld b, a - pop de - pop hl - ret - -Data_ea9de: - db 1, 0, $00, 0 - dw 1 -Data_ea9e4: - db 2, 0, $04, 0 - dw 0 -Data_ea9ea: - db 4, 0, $80, 2 - dw 0 -Data_ea9f0: - db 4, 0, $00, 0 - dw 4 -Data_ea9f6: - db 8, 0, $00, 0 - dw 8 -Data_ea9fc: - db 15, 0, $00, 0 - dw 15 diff --git a/engine/vermilion_gym_trash_cans.asm b/engine/vermilion_gym_trash_cans.asm deleted file mode 100755 index 1bc0590b..00000000 --- a/engine/vermilion_gym_trash_cans.asm +++ /dev/null @@ -1,108 +0,0 @@ -TrashCanRandom: - ld d, 0 - ld hl, .Jumptable - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - call JumpToAddress - ld e, a - ld d, 0 - ret - -.Jumptable: - dw .zero - dw .one - dw .two - dw .three - dw .four - -.zero -.one - ld a, 0 - ret - -.two - call Random - and $1 - ret - -.three ; should return to a, instead returns to b - call Random - swap a - cp 1 * $ff / 3 - ld b, 0 - ret c - cp 2 * $ff / 3 - ld b, 1 - ret c - ld b, 2 - ret - -.four - call Random - and $3 - ret - -Yellow_SampleSecondTrashCan: - ld hl, GymTrashCans3c - ld a, [wGymTrashCanIndex] - ld c, a - ld b, 0 - ld a, 9 - call AddNTimes - call AddNTimes ; ???? - ld a, [hli] - ldh [hGymTrashCanRandNumMask], a - ld e, a - push hl - call TrashCanRandom - pop hl - add hl, de - add hl, de - ld a, [hli] - ld [wSecondLockTrashCanIndex], a - ld a, [hl] - ld [wSecondLockTrashCanIndex + 1], a - ret - -GymTrashCans3c: -; First byte: number of trashcan entries -; Following four byte pairs: indices for the second trash can. -; BUG: Rows that have 3 trashcan entries are sampled incorrectly. -; The sampling occurs by taking a random number and seeing which -; third of the range 0-255 the number falls in. However, it returns -; that value to the wrong register, so the result is never used. -; Instead of using an offset in [0,1,2], the offset is instead -; in the full range 0-255. This results in truly random behavior. - db 4 - db 1,3, 3,1, 1,-1, 3,-1 - db 3 - db 0,2, 2,4, 4,0, -1,-1 - db 4 - db 1,5, 5,1, 1,-1, 5,-1 - db 3 - db 0,4, 4,6, 6,0, -1,-1 - db 4 - db 1,3, 3,1, 5,5, 7,7 - db 3 - db 2,4, 4,8, 8,2, -1,-1 - db 3 - db 3,7, 7,9, 9,3, -1,-1 - db 4 - db 4,8, 6,10, 8,4, 10,6 - db 3 - db 5,7, 7,11, 11,5, -1,-1 - db 3 - db 6,10, 10,12, 12,6, -1,-1 - db 4 - db 7,9, 9,7, 11,13, 13,11 - db 3 - db 8,10, 10,14, 14,8, -1,-1 - db 4 - db 9,13, 13,9, 9,-1, 13,-1 - db 3 - db 10,12, 12,14, 14,10, -1,-1 - db 4 - db 11,13, 13,11, 11,-1, 13,-1 diff --git a/engine/yellow_intro.asm b/engine/yellow_intro.asm deleted file mode 100755 index 324ba86d..00000000 --- a/engine/yellow_intro.asm +++ /dev/null @@ -1,1081 +0,0 @@ -PlayIntroScene: - ldh a, [rIE] - push af - xor a - ldh [rIF], a - ld a, $f - ldh [rIE], a - ld a, $8 - ldh [rSTAT], a - call InitYellowIntroGFXAndMusic - call DelayFrame -.loop - ld a, [wYellowIntroCurrentScene] - bit 7, a - jr nz, .go_to_title_screen - call JoypadLowSensitivity - ldh a, [hJoyPressed] - and A_BUTTON | B_BUTTON | START - jr nz, .go_to_title_screen - call Func_f98fc - ld a, $0 - ld [wCurrentAnimatedObjectOAMBufferOffset], a - call RunObjectAnimations - ld a, [wYellowIntroCurrentScene] - cp $7 - call z, Func_f98a2 - cp $b - call z, Func_f98cb - call DelayFrame - jr .loop - -.go_to_title_screen - call YellowIntro_BlankPalettes - xor a - ldh [hLCDCPointer], a - call DelayFrame - xor a - ldh [rIF], a - pop af - ldh [rIE], a - ld a, $90 - ldh [hWY], a - call ClearObjectAnimationBuffers - ld hl, wTileMap - ld bc, SCREEN_WIDTH * SCREEN_HEIGHT - xor a - call Bank3E_FillMemory - call YellowIntro_BlankOAMBuffer - ld a, $1 - ldh [hAutoBGTransferEnabled], a - call DelayFrame - call DelayFrame - call DelayFrame - xor a - ldh [hAutoBGTransferEnabled], a - ret - -Func_f98a2: - ld a, [wOAMBuffer + 8 * 4 + 3] - or $1 - ld [wOAMBuffer + 8 * 4 + 3], a - ld a, [wOAMBuffer + 14 * 4 + 3] - or $1 - ld [wOAMBuffer + 14 * 4 + 3], a - ld a, [wOAMBuffer + 16 * 4 + 3] - or $1 - ld [wOAMBuffer + 16 * 4 + 3], a - ld a, [wOAMBuffer + 18 * 4 + 3] - or $1 - ld [wOAMBuffer + 18 * 4 + 3], a - ld a, [wOAMBuffer + 19 * 4 + 3] - or $1 - ld [wOAMBuffer + 19 * 4 + 3], a - ret - -Func_f98cb: - ld a, [wOAMBuffer + 18 * 4 + 3] - or $1 - ld [wOAMBuffer + 18 * 4 + 3], a - ld a, [wOAMBuffer + 19 * 4 + 3] - or $1 - ld [wOAMBuffer + 19 * 4 + 3], a - ld a, [wOAMBuffer + 20 * 4 + 3] - or $1 - ld [wOAMBuffer + 20 * 4 + 3], a - ld a, [wOAMBuffer + 25 * 4 + 3] - or $1 - ld [wOAMBuffer + 25 * 4 + 3], a - ld a, [wOAMBuffer + 26 * 4 + 3] - or $1 - ld [wOAMBuffer + 26 * 4 + 3], a - ld a, [wOAMBuffer + 28 * 4 + 3] - or $1 - ld [wOAMBuffer + 28 * 4 + 3], a - ret - -Func_f98fc: - ld a, [wYellowIntroCurrentScene] - ld hl, Jumptable_f9906 - call Func_fa06e - jp hl - -Jumptable_f9906: - dw YellowIntroScene0 ; running pika 1 - dw YellowIntroScene1 ; wait last - dw YellowIntroScene2 ; pikachu kick - dw YellowIntroScene3 ; wait last - dw YellowIntroScene4 ; running pika 2 - dw YellowIntroScene5 ; wait last - dw YellowIntroScene6 ; surfing pika - dw YellowIntroScene7 ; wait last - dw YellowIntroScene8 ; running pika 3 - dw YellowIntroScene9 ; wait last - dw YellowIntroScene10 ; flying pika - dw YellowIntroScene11 ; wait last - dw YellowIntroScene12 ; pika close up - dw YellowIntroScene13 ; wait last - dw YellowIntroScene14 ; pika thunderbolt - dw YellowIntroScene15 ; wait last - dw YellowIntroScene16 ; fade to white - dw YellowIntroScene17 ; wait and quit - -YellowIntro_NextScene: - ld hl, wYellowIntroCurrentScene - inc [hl] - ret - -YellowIntroScene0: - xor a - ldh [hLCDCPointer], a - lb de, $58, $58 - ld a, $1 - call YellowIntro_SpawnAnimatedObjectAndSavePointer - xor a - ldh [hSCX], a - ldh [hSCY], a - ld a, $90 - ldh [hWY], a - ld a, $e4 - ldh [rBGP], a - ldh [rOBP0], a - ld a, $c4 - ldh [rOBP1], a - call UpdateGBCPal_BGP - call UpdateGBCPal_OBP0 - call UpdateGBCPal_OBP1 - ld a, 130 - ld [wYellowIntroSceneTimer], a - call YellowIntro_NextScene - ret - -YellowIntroScene1: - call YellowIntro_CheckFrameTimerDecrement - ret nc - call YellowIntro_MaskCurrentAnimatedObjectStruct - call YellowIntro_NextScene - ret - -YellowIntroScene2: - call YellowIntro_BlankPalsDelay2AndDisableLCD - ld c, $8 - call UpdateMusicCTimes - xor a - ldh [hLCDCPointer], a - ld hl, vBGMap0 - ld bc, $400 - xor a - call Bank3E_FillMemory - call YellowIntroScene2_PlaceGraphic - lb de, $58, $b8 ; overloaded - ld a, $4 ; overloaded - call LoadYellowIntroFlyingSpeedBars - ld a, $1 - call Func_f9e9a - call YellowIntro_SetTimerFor128Frames - call YellowIntro_NextScene - ret - -YellowIntroScene2_PlaceGraphic: - ld hl, $98d4 ; (20, 6) - ld de, $20 - ld b, $6 - ld a, $90 -.row - ld c, $6 - push af - push hl -.col - ld [hli], a - inc a - dec c - jr nz, .col - pop hl - add hl, de - pop af - add $10 - dec b - jr nz, .row - ldh a, [hGBC] - and a - jr z, .dmg_sgb - ; We can actually set palettes! - ld hl, $98d4 ; (20, 6) - ld de, $20 - ld b, $6 - ld a, $1 - ldh [rVBK], a -.attr_row - ld c, $6 - push hl -.attr_col - ld [hli], a - dec c - jr nz, .attr_col - pop hl - add hl, de - dec b - jr nz, .attr_row - xor a - ldh [rVBK], a -.dmg_sgb - ret - -LoadYellowIntroFlyingSpeedBars: - ld hl, YellowIntroFlyingSpeedBarData - ld a, $8 -.loop -; Spawn object $8 at indicated coordinates with indicated speeds - push af - ld e, [hl] - inc hl - ld d, [hl] - inc hl - ld a, [hli] - push hl - push af - ld a, $8 - call SpawnAnimatedObject - pop af - ld hl, $b - add hl, bc - ld [hl], a - pop hl - pop af - dec a - jr nz, .loop - ret - -YellowIntroFlyingSpeedBarData: - ; y, x, speed - db $d0, $20, $02 - db $f0, $30, $04 - db $d0, $40, $06 - db $c0, $50, $08 - db $e0, $60, $08 - db $c0, $70, $06 - db $e0, $80, $04 - db $f0, $90, $02 - -YellowIntroScene3: - call YellowIntro_CheckFrameTimerDecrement - jr c, .expired - ldh a, [hSCX] - cp $68 - ret z - add $4 - ldh [hSCX], a - ret - -.expired - call MaskAllAnimatedObjectStructs - call YellowIntro_NextScene - ret - -YellowIntroScene4: - call YellowIntro_BlankPalsDelay2AndDisableLCD - ld c, $5 - call UpdateMusicCTimes - ldh a, [hGBC] - and a - jr z, .dmg_sgb - ; We can actually set palettes! - ld hl, $98d4 - ld de, $20 - ld b, $6 - ld a, $1 - ldh [rVBK], a - xor a -.attr_row - ld c, $6 - push hl -.attr_col - ld [hli], a - dec c - jr nz, .attr_col - pop hl - add hl, de - dec b - jr nz, .attr_row - xor a - ldh [rVBK], a -.dmg_sgb - xor a - ldh [hLCDCPointer], a - call Func_f9e5f - lb de, $58, $58 - ld a, $2 - call YellowIntro_SpawnAnimatedObjectAndSavePointer - xor a - call Func_f9e9a - call YellowIntro_SetTimerFor128Frames - call YellowIntro_NextScene - ret - -YellowIntroScene5: - call YellowIntro_CheckFrameTimerDecrement - ret nc - call YellowIntro_MaskCurrentAnimatedObjectStruct - call YellowIntro_NextScene - ret - -YellowIntroScene6: - call YellowIntro_BlankPalsDelay2AndDisableLCD - ld c, $5 - call UpdateMusicCTimes - ld a, rSCY - $ff00 - ldh [hLCDCPointer], a - call YellowIntro_Copy8BitSineWave - ld hl, vBGMap0 - ld bc, $60 - xor a - call Bank3E_FillMemory - ld hl, $9860 - ld c, $10 - ld a, $20 -.asm_f9a8b - ld [hli], a - inc a - ld [hli], a - dec a - dec c - jr nz, .asm_f9a8b - ld hl, $9880 - ld bc, $300 - ld a, $10 - call Bank3E_FillMemory - lb de, $40, $f8 - ld a, $5 - call YellowIntro_SpawnAnimatedObjectAndSavePointer - ld a, $1 - call Func_f9e9a - call YellowIntro_SetTimerFor88Frames - call YellowIntro_NextScene - ret - -YellowIntroScene7: - call YellowIntro_CheckFrameTimerDecrement - jr c, .expired - ld hl, hSCX - inc [hl] - inc [hl] - ld hl, wLYOverridesBuffer - ld de, wLYOverridesBuffer + 1 - ld a, [hl] - push af - ld c, $ff -.shift_loop - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .shift_loop - pop af - ld [hl], a - call Request7TileTransferFromC810ToC710 - ret - -.expired - call YellowIntro_MaskCurrentAnimatedObjectStruct - call YellowIntro_NextScene - ret - -YellowIntroScene8: - call YellowIntro_BlankPalsDelay2AndDisableLCD - ld c, $5 - call UpdateMusicCTimes - xor a - ldh [hLCDCPointer], a - call Func_f9e5f - lb de, $58, $58 - ld a, $3 - call YellowIntro_SpawnAnimatedObjectAndSavePointer - xor a - call Func_f9e9a - call YellowIntro_SetTimerFor128Frames - call YellowIntro_NextScene - ret - -YellowIntroScene9: - call YellowIntro_CheckFrameTimerDecrement - ret nc - call YellowIntro_MaskCurrentAnimatedObjectStruct - call YellowIntro_NextScene - ret - -YellowIntroScene10: - call YellowIntro_BlankPalsDelay2AndDisableLCD - ld c, $5 - call UpdateMusicCTimes - xor a - ldh [hLCDCPointer], a - ld hl, vBGMap0 - ld bc, $400 - xor a - call Bank3E_FillMemory - ld hl, vBGMap0 - ld bc, $100 - ld a, $2 - call Bank3E_FillMemory - ld hl, $9900 - ld de, Unkn_f9b6e - lb bc, 6, 20 - call .FillBGMapBox - ld hl, $988c - ld de, Unkn_f9be6 - lb bc, 3, 4 - call .FillBGMapBox - ld hl, $98e3 - ld de, Unkn_f9bf2 - lb bc, 2, 2 - call .FillBGMapBox - lb de, $98, $58 - ld a, $6 - call YellowIntro_SpawnAnimatedObjectAndSavePointer - ld a, $1 - call Func_f9e9a - call YellowIntro_SetTimerFor128Frames - call YellowIntro_NextScene - ret - -.FillBGMapBox: -.fill_row - push bc - push hl -.fill_col - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .fill_col - pop hl - ld bc, $20 - add hl, bc - pop bc - dec b - jr nz, .fill_row - ret - -Unkn_f9b6e: INCBIN "gfx/unknown_f9b6e.map" -Unkn_f9be6: INCBIN "gfx/unknown_f9be6.map" -Unkn_f9bf2: INCBIN "gfx/unknown_f9bf2.map" - -YellowIntroScene11: - call YellowIntro_CheckFrameTimerDecrement - jr c, .expired - ld a, [wYellowIntroSceneTimer] - and $7 - ret nz - ld a, [wYellowIntroSceneTimer] - and $8 - sla a - sla a - sla a - ld e, a - ld d, $0 - ld hl, YellowIntroCloudGFX1 - add hl, de - ld a, l - ldh [hVBlankCopySource], a - ld a, h - ldh [hVBlankCopySource + 1], a - xor a - ldh [hVBlankCopyDest], a - ld a, $96 - ldh [hVBlankCopyDest + 1], a - ld a, $4 - ldh [hVBlankCopySize], a - ret - -.expired - call YellowIntro_MaskCurrentAnimatedObjectStruct - call YellowIntro_NextScene - ret - -YellowIntroCloudGFX1: INCBIN "gfx/unknown_f9c2c.2bpp" -YellowIntroCloudGFX2: INCBIN "gfx/unknown_f9c6c.2bpp" ; indirectly referenced - -YellowIntroScene12: - call YellowIntro_BlankPalsDelay2AndDisableLCD - ld c, $5 - call UpdateMusicCTimes - xor a - ldh [hLCDCPointer], a - ld hl, vBGMap0 - ld bc, $80 - ld a, $1 - call Bank3E_FillMemory - ld hl, $9880 - ld bc, $140 - xor a - call Bank3E_FillMemory - ld hl, $99c0 - ld bc, $80 - ld a, $1 - call Bank3E_FillMemory - - ; paste 8x12 graphic into vBGMap0 at (5, 6) starting at tile 4, skipping 4 vtiles at the end of each row - ld hl, $98c5 - ld de, $20 - ld a, $4 - ld b, 8 -.row - ld c, 12 - push hl -.col - ld [hli], a - inc a - dec c - jr nz, .col - pop hl - add hl, de - add $4 - dec b - jr nz, .row - - ld hl, $98c4 ; (4, 6) - ld [hl], $3 - ld hl, $98e4 ; (4, 7) - ld [hl], $74 - ld hl, $99a5 ; (5, 5) - ld [hl], $0 - lb de, $60, $58 - ld a, $9 - call YellowIntro_SpawnAnimatedObjectAndSavePointer - xor a - call Func_f9e9a - call YellowIntro_SetTimerFor128Frames - call YellowIntro_NextScene - ret - -YellowIntroScene13: - call YellowIntro_CheckFrameTimerDecrement - ret nc - lb de, $68, $58 - ld a, $a - call SpawnAnimatedObject - call YellowIntro_NextScene - ret - -YellowIntroScene14: - ld de, YellowIntroPalSequence_f9dd6 - call YellowIntro_LoadDMGPalAndIncrementCounter - jr c, .expired - ldh [rBGP], a - ldh [rOBP0], a - and $f0 - ldh [rOBP1], a - call UpdateGBCPal_BGP - call UpdateGBCPal_OBP0 - call UpdateGBCPal_OBP1 - ret - -.expired - call MaskAllAnimatedObjectStructs - call YellowIntro_BlankOAMBuffer - ld hl, wTileMap - ld bc, $50 - ld a, $1 - call Bank3E_FillMemory - hlcoord 0, 4 - ld bc, CopyVideoDataAlternate - xor a - call Bank3E_FillMemory - hlcoord 0, 14 - ld bc, $50 - ld a, $1 - call Bank3E_FillMemory - ld a, $1 - ldh [hAutoBGTransferEnabled], a - call DelayFrame - call DelayFrame - call DelayFrame - xor a - ldh [hAutoBGTransferEnabled], a - ld a, $e4 - ldh [rOBP0], a - ldh [rBGP], a - call UpdateGBCPal_BGP - call UpdateGBCPal_OBP0 - lb de, $58, $58 - ld a, $7 - call YellowIntro_SpawnAnimatedObjectAndSavePointer - call YellowIntro_NextScene - ld a, $28 - ld [wYellowIntroSceneTimer], a - ret - -YellowIntroScene15: - call YellowIntro_CheckFrameTimerDecrement - jr c, .expired - ld a, [wYellowIntroSceneTimer] - and $3 - ret nz - ldh a, [rOBP0] - xor $ff - ldh [rOBP0], a - ldh a, [rBGP] - xor $3 - ldh [rBGP], a - call UpdateGBCPal_BGP - call UpdateGBCPal_OBP0 - ret - -.expired - xor a - ldh [hLCDCPointer], a - ld a, $e4 - ldh [rBGP], a - ldh [rOBP0], a - call UpdateGBCPal_BGP - call UpdateGBCPal_OBP0 - call YellowIntro_NextScene -YellowIntroScene16: - ld de, YellowIntroPalSequence_f9e0a - call YellowIntro_LoadDMGPalAndIncrementCounter - jr c, .expired - ldh [rOBP0], a - ldh [rBGP], a - call UpdateGBCPal_BGP - call UpdateGBCPal_OBP0 - ret - -.expired - call YellowIntro_NextScene - ret - -YellowIntroPalSequence_f9dd6: - db $e4, $c0, $c0, $e4 - db $e4, $c0, $c0, $e4 - db $e4, $c0, $c0, $e4 - db $e4, $c0, $c0, $e4 - db $e4, $c0, $c0, $e4 - db $e4, $c0, $c0, $e4 - db $e4, $c0, $c0, $e4 - db $e4, $c0, $c0, $e4 - db $e4, $c0, $c0, $e4 - db $e4, $c0, $c0, $e4 - db $e4, $c0, $c0, $e4 - db $e4, $c0, $c0, $e4 - db $e4, $c0, $c0, $ff - -YellowIntroPalSequence_f9e0a: - db $e4, $90, $90, $40 - db $40, $00, $00, $ff - -YellowIntroScene17: - ld c, 64 - call DelayFrames - ld hl, wYellowIntroCurrentScene - set 7, [hl] - ret - -YellowIntro_SpawnAnimatedObjectAndSavePointer: - call SpawnAnimatedObject - ld a, c - ld [wYellowIntroAnimatedObjectStructPointer], a - ld a, b - ld [wYellowIntroAnimatedObjectStructPointer + 1], a - ret - -YellowIntro_MaskCurrentAnimatedObjectStruct: - ld a, [wYellowIntroAnimatedObjectStructPointer] - ld c, a - ld a, [wYellowIntroAnimatedObjectStructPointer + 1] - ld b, a - call MaskCurrentAnimatedObjectStruct - ret - -YellowIntro_SetTimerFor128Frames: - ld a, 128 - ld [wYellowIntroSceneTimer], a - ret - -YellowIntro_SetTimerFor88Frames: - ld a, 88 - ld [wYellowIntroSceneTimer], a - ret - -YellowIntro_CheckFrameTimerDecrement: - ld hl, wYellowIntroSceneTimer - ld a, [hl] - and a - jr z, .asm_f9e4b - dec [hl] - and a - ret - -.asm_f9e4b - scf - ret - -YellowIntro_LoadDMGPalAndIncrementCounter: - ld hl, wYellowIntroSceneTimer - ld a, [hl] - inc [hl] - ld l, a - ld h, $0 - add hl, de - ld a, [hl] - cp $ff - jr z, .asm_f9e5d - and a - ret - -.asm_f9e5d - scf - ret - -Func_f9e5f: - ld hl, vBGMap0 - ld bc, $80 - ld a, $1 - call Bank3E_FillMemory - ld hl, $9880 - ld bc, $140 - xor a - call Bank3E_FillMemory - ld hl, $99c0 - ld bc, $80 - ld a, $1 - call Bank3E_FillMemory - ret - -YellowIntro_BlankPalsDelay2AndDisableLCD: - xor a - ldh [rBGP], a - ldh [rOBP0], a - ldh [rOBP1], a - call UpdateGBCPal_BGP - call UpdateGBCPal_OBP0 - call UpdateGBCPal_OBP1 - call DelayFrame - call DelayFrame - call DisableLCD - ret - -Func_f9e9a: - ld e, a - callfar YellowIntroPaletteAction - xor a - ldh [hSCX], a - ldh [hSCY], a - ld a, $90 - ldh [hWY], a - ld a, $e3 - ldh [rLCDC], a - ld a, $e4 - ldh [rBGP], a - ldh [rOBP0], a - ld a, $e0 - ldh [rOBP1], a - call UpdateGBCPal_BGP - call UpdateGBCPal_OBP0 - call UpdateGBCPal_OBP1 - ret - -YellowIntro_Copy8BitSineWave: - ; Copy this sine wave into wLYOverridesBuffer 8 times (end just before wc900) - ld de, wLYOverridesBuffer - ld a, $8 -.loop - push af - ld hl, .SineWave - ld bc, .SineWaveEnd - .SineWave - call Bank3E_CopyData - pop af - dec a - jr nz, .loop - ret - -.SineWave: -; a sine wave with amplitude 4 - db 0, 0, 1, 2, 2, 3, 3, 3 - db 4, 3, 3, 3, 2, 2, 1, 0 - db 0, 0, -1, -2, -2, -3, -3, -3 - db -4, -3, -3, -3, -2, -2, -1, 0 -.SineWaveEnd: - -Request7TileTransferFromC810ToC710: - ld a, $10 - ldh [hVBlankCopySource], a - ld a, wLYOverridesBuffer / $100 - ldh [hVBlankCopySource + 1], a - ld a, $10 - ldh [hVBlankCopyDest], a - ld a, wLYOverrides / $100 - ldh [hVBlankCopyDest + 1], a - ld a, $7 - ldh [hVBlankCopySize], a - ret - -InitYellowIntroGFXAndMusic: - xor a - ldh [hAutoBGTransferEnabled], a - ldh [hSCX], a - ldh [hSCY], a - ldh [hAutoBGTransferDest], a - ld a, $98 - ldh [hAutoBGTransferDest + 1], a - call YellowIntro_BlankTileMap - ld hl, wTileMap - ld bc, SCREEN_WIDTH * SCREEN_HEIGHT - ld a, $1 - call Bank3E_FillMemory - hlcoord 0, 4 - ld bc, CopyVideoDataAlternate - xor a - call Bank3E_FillMemory - ld a, $1 - ldh [hAutoBGTransferEnabled], a - call DelayFrame - call DelayFrame - call DelayFrame - xor a - ldh [hAutoBGTransferEnabled], a - ld de, $6b5a - ld hl, $8000 - ld bc, $3eff - call CopyVideoData - ld de, $635a - ld hl, $9000 - ld bc, $3e80 - call CopyVideoData - call ClearObjectAnimationBuffers - call LoadYellowIntroObjectAnimationDataPointers - ld b, $8 - call RunPaletteCommand - xor a - ld hl, wYellowIntroCurrentScene - ld [hli], a - ld [hli], a - ld [hli], a - ld [hl], a - ld a, MUSIC_YELLOW_INTRO - ld c, BANK(Music_YellowIntro) - call PlayMusic - ret - -LoadYellowIntroObjectAnimationDataPointers: - ld a, YellowIntro_AnimatedObjectSpawnStateData % $100 - ld [wAnimatedObjectSpawnStateDataPointer], a - ld a, YellowIntro_AnimatedObjectSpawnStateData / $100 - ld [wAnimatedObjectSpawnStateDataPointer + 1], a - ld a, YellowIntro_AnimatedObjectJumptable % $100 - ld [wAnimatedObjectJumptablePointer], a - ld a, YellowIntro_AnimatedObjectJumptable / $100 - ld [wAnimatedObjectJumptablePointer + 1], a - ld a, YellowIntro_AnimatedObjectOAMData % $100 - ld [wAnimatedObjectOAMDataPointer], a - ld a, YellowIntro_AnimatedObjectOAMData / $100 - ld [wAnimatedObjectOAMDataPointer + 1], a - ld a, YellowIntro_AnimatedObjectFramesData % $100 - ld [wAnimatedObjectFramesDataPointer], a - ld a, YellowIntro_AnimatedObjectFramesData / $100 - ld [wAnimatedObjectFramesDataPointer + 1], a - ret - -YellowIntro_BlankTileMap: - ld hl, wTileMap - ld bc, SCREEN_WIDTH * SCREEN_HEIGHT - ld a, $7f - call Bank3E_FillMemory - ret - -Bank3E_CopyData: -.loop - ld a, [hli] - ld [de], a - inc de - dec bc - ld a, c - or b - jr nz, .loop - ret - -Bank3E_FillMemory: - push de - ld e, a -.loop - ld a, e - ld [hli], a - dec bc - ld a, c - or b - jr nz, .loop - pop de - ret - -YellowIntro_BlankOAMBuffer: - ld hl, wOAMBuffer - ld bc, wOAMBufferEnd - wOAMBuffer - xor a - call Bank3E_FillMemory - ret - -YellowIntro_BlankPalettes: - xor a - ldh [rBGP], a - ldh [rOBP0], a - ldh [rOBP1], a - call UpdateGBCPal_BGP - call UpdateGBCPal_OBP0 - call UpdateGBCPal_OBP1 - ret - -YellowIntro_AnimatedObjectSpawnStateData: - db $00, $00, $00 - db $01, $01, $00 - db $02, $01, $00 - db $03, $01, $00 - db $04, $02, $00 - db $05, $03, $00 - db $06, $04, $00 - db $07, $01, $00 - db $08, $05, $00 - db $09, $01, $00 - db $0a, $01, $00 - -YellowIntro_AnimatedObjectJumptable: - dw Func_fa007 - dw Func_fa007 - dw Func_fa008 - dw Func_fa014 - dw Func_fa02b - dw Func_fa062 - -Func_fa007: - ret - -Func_fa008: - ld hl, $4 - add hl, bc - ld a, [hl] - cp $58 - ret z - sub $4 - ld [hl], a - ret - -Func_fa014: - ld hl, $4 - add hl, bc - ld a, [hl] - cp $58 - jr z, .asm_fa020 - add $4 - ld [hl], a -.asm_fa020 - ld hl, $5 - add hl, bc - cp $58 - ret z - add $1 - ld [hl], a - ret - -Func_fa02b: - ld hl, $b - add hl, bc - ld e, [hl] - ld d, $0 - ld hl, Jumptable_fa03b - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -Jumptable_fa03b: - dw Func_fa03f - dw Func_fa051 - -Func_fa03f: - ld hl, $5 - add hl, bc - ld a, [hl] - cp $58 - jr z, .asm_fa04c - sub $2 - ld [hl], a - ret - -.asm_fa04c - ld hl, $b - add hl, bc - inc [hl] -Func_fa051: - ld hl, $c - add hl, bc - ld a, [hl] - inc [hl] - ld d, $8 - call Func_fa079 - ld hl, $7 - add hl, bc - ld [hl], a - ret - -Func_fa062: - ld hl, $b - add hl, bc - ld a, [hl] - ld hl, $4 - add hl, bc - add [hl] - ld [hl], a - ret - -Func_fa06e: - ld e, a - ld d, $0 - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - ret - -Func_fa077: ; cosine - add $10 -Func_fa079: - and $3f - cp $20 - jr nc, .asm_fa084 - call Func_fa08e - ld a, h - ret - -.asm_fa084 - and $1f - call Func_fa08e - ld a, h - xor $ff - inc a - ret - -Func_fa08e: - ld e, a - ld a, d - ld d, $0 - ld hl, Unkn_fa0aa - add hl, de - add hl, de - ld e, [hl] - inc hl - ld d, [hl] - ld hl, $0 -.asm_fa09d - srl a - jr nc, .asm_fa0a2 - add hl, de -.asm_fa0a2 - sla e - rl d - and a - jr nz, .asm_fa09d - ret - -Unkn_fa0aa: - sine_wave $100 diff --git a/garbage/bank30.bin b/garbage/bank30.bin new file mode 100644 index 00000000..6309c149 Binary files /dev/null and b/garbage/bank30.bin differ diff --git a/gfx/9_tile.png b/gfx/9_tile.png deleted file mode 100644 index e6fc8911..00000000 Binary files a/gfx/9_tile.png and /dev/null differ diff --git a/gfx/blocksets/beach_house.bst b/gfx/blocksets/beach_house.bst new file mode 100644 index 00000000..bafbe0b2 Binary files /dev/null and b/gfx/blocksets/beach_house.bst differ diff --git a/gfx/blocksets/beachhouse.bst b/gfx/blocksets/beachhouse.bst deleted file mode 100644 index bafbe0b2..00000000 Binary files a/gfx/blocksets/beachhouse.bst and /dev/null differ diff --git a/gfx/font.asm b/gfx/font.asm index 51d61de4..06b02fdf 100644 --- a/gfx/font.asm +++ b/gfx/font.asm @@ -18,7 +18,7 @@ NintendoCopyrightLogoGraphics: INCBIN "gfx/splash/copyright.2bpp" GamefreakLogoGraphics: INCBIN "gfx/title/gamefreak_inc.2bpp" GamefreakLogoGraphicsEnd: -NineTile: INCBIN "gfx/9_tile.2bpp" +NineTile: INCBIN "gfx/title/nine.2bpp" TextBoxGraphics:: INCBIN "gfx/font/font_extra.2bpp" TextBoxGraphicsEnd:: diff --git a/gfx/intro/clouds.png b/gfx/intro/clouds.png new file mode 100644 index 00000000..872492b1 Binary files /dev/null and b/gfx/intro/clouds.png differ diff --git a/gfx/intro/unknown_f9b6e.map b/gfx/intro/unknown_f9b6e.map new file mode 100644 index 00000000..3ce924dc Binary files /dev/null and b/gfx/intro/unknown_f9b6e.map differ diff --git a/gfx/intro/unknown_f9be6.map b/gfx/intro/unknown_f9be6.map new file mode 100644 index 00000000..18560135 --- /dev/null +++ b/gfx/intro/unknown_f9be6.map @@ -0,0 +1 @@ +0123@ABCPQRS \ No newline at end of file diff --git a/gfx/intro/unknown_f9bf2.map b/gfx/intro/unknown_f9bf2.map new file mode 100644 index 00000000..e587b7ce --- /dev/null +++ b/gfx/intro/unknown_f9bf2.map @@ -0,0 +1 @@ +"# \ No newline at end of file diff --git a/gfx/intro/yellow_intro_1.png b/gfx/intro/yellow_intro_1.png new file mode 100644 index 00000000..f7258169 Binary files /dev/null and b/gfx/intro/yellow_intro_1.png differ diff --git a/gfx/intro/yellow_intro_2.png b/gfx/intro/yellow_intro_2.png new file mode 100644 index 00000000..dc5313c3 Binary files /dev/null and b/gfx/intro/yellow_intro_2.png differ diff --git a/gfx/overworld/pikachu_ball.png b/gfx/overworld/pikachu_ball.png new file mode 100644 index 00000000..20bcf5a7 Binary files /dev/null and b/gfx/overworld/pikachu_ball.png differ diff --git a/gfx/pics.asm b/gfx/pics.asm index 4019fe36..2e410ea3 100644 --- a/gfx/pics.asm +++ b/gfx/pics.asm @@ -374,3 +374,10 @@ ChannelerPic:: INCBIN "gfx/trainers/channeler.pic" AgathaPic:: INCBIN "gfx/trainers/agatha.pic" LancePic:: INCBIN "gfx/trainers/lance.pic" JessieJamesPic:: INCBIN "gfx/trainers/yellow/jessiejames.pic" + + +SECTION "Pics 7", ROMX + +RedPicBack:: INCBIN "gfx/player/redb.pic" +OldManPic:: INCBIN "gfx/battle/oldman.pic" +ProfOakPicBack:: INCBIN "gfx/battle/prof.oakb.pic" diff --git a/gfx/pikachu.asm b/gfx/pikachu.asm new file mode 100644 index 00000000..6852e91e --- /dev/null +++ b/gfx/pikachu.asm @@ -0,0 +1,128 @@ +SECTION "Pikachu Graphics 1", ROMX + +Pic_e4000:: +INCBIN "gfx/pikachu/unknown_e4000.pic" +GFX_e40cc:: +INCBIN "gfx/pikachu/unknown_e40cc.2bpp" +Pic_e411c:: +INCBIN "gfx/pikachu/unknown_e411c.pic" +GFX_e41d2:: +INCBIN "gfx/pikachu/unknown_e41d2.2bpp" +Pic_e4272:: +INCBIN "gfx/pikachu/unknown_e4272.pic" +GFX_e4323:: +INCBIN "gfx/pikachu/unknown_e4323.2bpp" +Pic_e4383:: +INCBIN "gfx/pikachu/unknown_e4383.pic" +GFX_e444b:: +INCBIN "gfx/pikachu/unknown_e444b.2bpp" +Pic_e458b:: +INCBIN "gfx/pikachu/unknown_e458b.pic" +GFX_e463b:: +INCBIN "gfx/pikachu/unknown_e463b.2bpp" +Pic_e467b:: +INCBIN "gfx/pikachu/unknown_e467b.pic" +GFX_e472e:: +INCBIN "gfx/pikachu/unknown_e472e.2bpp" +Pic_e476e:: +INCBIN "gfx/pikachu/unknown_e476e.pic" +GFX_e4841:: +INCBIN "gfx/pikachu/unknown_e4841.2bpp" +Pic_e49d1:: +INCBIN "gfx/pikachu/unknown_e49d1.pic" +GFX_e4a99:: +INCBIN "gfx/pikachu/unknown_e4a99.2bpp" +Pic_e4b39:: +INCBIN "gfx/pikachu/unknown_e4b39.pic" +GFX_e4bde:: +INCBIN "gfx/pikachu/unknown_e4bde.2bpp" +Pic_e4c3e:: +INCBIN "gfx/pikachu/unknown_e4c3e.pic" +GFX_e4ce0:: +INCBIN "gfx/pikachu/unknown_e4ce0.2bpp" +GFX_e4e70:: +INCBIN "gfx/pikachu/unknown_e4e70.2bpp" +Pic_e5000:: +INCBIN "gfx/pikachu/unknown_e5000.pic" +GFX_e50af:: +INCBIN "gfx/pikachu/unknown_e50af.2bpp" +Pic_e523f:: +INCBIN "gfx/pikachu/unknown_e523f.pic" +GFX_e52fe:: +INCBIN "gfx/pikachu/unknown_e52fe.2bpp" +Pic_e548e:: +INCBIN "gfx/pikachu/unknown_e548e.pic" +GFX_e5541:: +INCBIN "gfx/pikachu/unknown_e5541.2bpp" +Pic_e56d1:: +INCBIN "gfx/pikachu/unknown_e56d1.pic" +GFX_e5794:: +INCBIN "gfx/pikachu/unknown_e5794.2bpp" +Pic_e5924:: +INCBIN "gfx/pikachu/unknown_e5924.pic" +GFX_e59ed:: +INCBIN "gfx/pikachu/unknown_e59ed.2bpp" +Pic_e5b7d:: +INCBIN "gfx/pikachu/unknown_e5b7d.pic" +GFX_e5c4d:: +INCBIN "gfx/pikachu/unknown_e5c4d.2bpp" +Pic_e5ddd:: +INCBIN "gfx/pikachu/unknown_e5ddd.pic" +GFX_e5e90:: +INCBIN "gfx/pikachu/unknown_e5e90.2bpp" +GFX_e6020:: +INCBIN "gfx/pikachu/unknown_e6020.2bpp" +GFX_e61b0:: +INCBIN "gfx/pikachu/unknown_e61b0.2bpp" +Pic_e6340:: +INCBIN "gfx/pikachu/unknown_e6340.pic" +GFX_e63f7:: +INCBIN "gfx/pikachu/unknown_e63f7.2bpp" +Pic_e6587:: +INCBIN "gfx/pikachu/unknown_e6587.pic" +GFX_e6646:: +INCBIN "gfx/pikachu/unknown_e6646.2bpp" +Pic_e67d6:: +INCBIN "gfx/pikachu/unknown_e67d6.pic" +GFX_e682f:: +INCBIN "gfx/pikachu/unknown_e682f.2bpp" +GFX_e69bf:: +INCBIN "gfx/pikachu/unknown_e69bf.2bpp" +GFX_e6b4f:: +INCBIN "gfx/pikachu/unknown_e6b4f.2bpp" +GFX_e6cdf:: +INCBIN "gfx/pikachu/unknown_e6cdf.2bpp" +GFX_e6e6f:: +INCBIN "gfx/pikachu/unknown_e6e6f.2bpp" +GFX_e6fff:: +INCBIN "gfx/pikachu/unknown_e6fff.2bpp" +GFX_e718f:: +INCBIN "gfx/pikachu/unknown_e718f.2bpp" +GFX_e731f:: +INCBIN "gfx/pikachu/unknown_e731f.2bpp" +GFX_e74af:: +INCBIN "gfx/pikachu/unknown_e74af.2bpp" +GFX_e763f:: +INCBIN "gfx/pikachu/unknown_e763f.2bpp" +Pic_e77cf:: +INCBIN "gfx/pikachu/unknown_e77cf.pic" +GFX_e7863:: +INCBIN "gfx/pikachu/unknown_e7863.2bpp" +GFX_e79f3:: +INCBIN "gfx/pikachu/unknown_e79f3.2bpp" +GFX_e7b83:: +INCBIN "gfx/pikachu/unknown_e7b83.2bpp" +GFX_e7d13:: +INCBIN "gfx/pikachu/unknown_e7d13.2bpp" + + +SECTION "Pikachu Graphics 2", ROMX + +Pic_f0abf:: +INCBIN "gfx/pikachu/unknown_f0abf.pic" +GFX_f0b64:: +INCBIN "gfx/pikachu/unknown_f0b64.2bpp" +Pic_f0cf4:: +INCBIN "gfx/pikachu/unknown_f0cf4.pic" +GFX_f0d82:: +INCBIN "gfx/pikachu/unknown_f0d82.2bpp" diff --git a/gfx/printer/01.png b/gfx/printer/01.png new file mode 100644 index 00000000..0c11b9da Binary files /dev/null and b/gfx/printer/01.png differ diff --git a/gfx/printer/hp.png b/gfx/printer/hp.png new file mode 100644 index 00000000..adf086ca Binary files /dev/null and b/gfx/printer/hp.png differ diff --git a/gfx/printer/lv.png b/gfx/printer/lv.png new file mode 100644 index 00000000..0d5c6620 Binary files /dev/null and b/gfx/printer/lv.png differ diff --git a/gfx/sprites.asm b/gfx/sprites.asm index ebafac20..c54aef3d 100644 --- a/gfx/sprites.asm +++ b/gfx/sprites.asm @@ -72,3 +72,18 @@ AgathaSprite:: INCBIN "gfx/sprites/agatha.2bpp" BrunoSprite:: INCBIN "gfx/sprites/bruno.2bpp" LoreleiSprite:: INCBIN "gfx/sprites/lorelei.2bpp" SeelSprite:: INCBIN "gfx/sprites/seel.2bpp" + + +SECTION "NPC Sprites 3", ROMX + +OfficerJennySprite:: INCBIN "gfx/sprites/officer_jenny.2bpp" +PikachuSprite:: INCBIN "gfx/sprites/pikachu.2bpp" +SandshrewSprite:: INCBIN "gfx/sprites/sandshrew.2bpp" +OddishSprite:: INCBIN "gfx/sprites/oddish.2bpp" +BulbasaurSprite:: INCBIN "gfx/sprites/bulbasaur.2bpp" +JigglypuffSprite:: INCBIN "gfx/sprites/jigglypuff.2bpp" +ClefairySprite:: INCBIN "gfx/sprites/clefairy.2bpp" +ChanseySprite:: INCBIN "gfx/sprites/chansey.2bpp" +SurfingPikachuSprite:: INCBIN "gfx/sprites/surfing_pikachu.2bpp" +JessieSprite:: INCBIN "gfx/sprites/jessie.2bpp" +JamesSprite:: INCBIN "gfx/sprites/james.2bpp" diff --git a/gfx/stats_screen_hp.png b/gfx/stats_screen_hp.png deleted file mode 100644 index adf086ca..00000000 Binary files a/gfx/stats_screen_hp.png and /dev/null differ diff --git a/gfx/stats_screen_lv.png b/gfx/stats_screen_lv.png deleted file mode 100644 index 0d5c6620..00000000 Binary files a/gfx/stats_screen_lv.png and /dev/null differ diff --git a/gfx/surfing_pikachu.asm b/gfx/surfing_pikachu.asm new file mode 100644 index 00000000..51884db2 --- /dev/null +++ b/gfx/surfing_pikachu.asm @@ -0,0 +1,3 @@ +SurfingPikachu1Graphics1:: INCBIN "gfx/surfing_pikachu/surfing_pikachu_1a.2bpp" +SurfingPikachu1Graphics2:: INCBIN "gfx/surfing_pikachu/surfing_pikachu_1b.2bpp" +SurfingPikachu1Graphics3:: INCBIN "gfx/surfing_pikachu/surfing_pikachu_1c.2bpp" diff --git a/gfx/surfing_pikachu/surfing_pikachu_1a.png b/gfx/surfing_pikachu/surfing_pikachu_1a.png new file mode 100644 index 00000000..0bc11684 Binary files /dev/null and b/gfx/surfing_pikachu/surfing_pikachu_1a.png differ diff --git a/gfx/surfing_pikachu/surfing_pikachu_1b.png b/gfx/surfing_pikachu/surfing_pikachu_1b.png new file mode 100644 index 00000000..a64eb4c7 Binary files /dev/null and b/gfx/surfing_pikachu/surfing_pikachu_1b.png differ diff --git a/gfx/surfing_pikachu/surfing_pikachu_1c.png b/gfx/surfing_pikachu/surfing_pikachu_1c.png new file mode 100644 index 00000000..eeedb243 Binary files /dev/null and b/gfx/surfing_pikachu/surfing_pikachu_1c.png differ diff --git a/gfx/surfing_pikachu/surfing_pikachu_2.png b/gfx/surfing_pikachu/surfing_pikachu_2.png new file mode 100644 index 00000000..f8752966 Binary files /dev/null and b/gfx/surfing_pikachu/surfing_pikachu_2.png differ diff --git a/gfx/surfing_pikachu/surfing_pikachu_3.png b/gfx/surfing_pikachu/surfing_pikachu_3.png new file mode 100644 index 00000000..91d4a607 Binary files /dev/null and b/gfx/surfing_pikachu/surfing_pikachu_3.png differ diff --git a/gfx/surfing_pikachu/unknown_f8946.map b/gfx/surfing_pikachu/unknown_f8946.map new file mode 100644 index 00000000..a89a52b8 --- /dev/null +++ b/gfx/surfing_pikachu/unknown_f8946.map @@ -0,0 +1 @@ +           \ No newline at end of file diff --git a/gfx/surfing_pikachu/unknown_f90bc.map b/gfx/surfing_pikachu/unknown_f90bc.map new file mode 100644 index 00000000..98b8ba51 Binary files /dev/null and b/gfx/surfing_pikachu/unknown_f90bc.map differ diff --git a/gfx/surfing_pikachu/unknown_f91ac.map b/gfx/surfing_pikachu/unknown_f91ac.map new file mode 100644 index 00000000..8a1f06b7 --- /dev/null +++ b/gfx/surfing_pikachu/unknown_f91ac.map @@ -0,0 +1 @@ +íîïÿðñòóôõöÿ÷øù \ No newline at end of file diff --git a/gfx/surfing_pikachu/unknown_f91bb.map b/gfx/surfing_pikachu/unknown_f91bb.map new file mode 100644 index 00000000..6d8ebb43 --- /dev/null +++ b/gfx/surfing_pikachu/unknown_f91bb.map @@ -0,0 +1,2 @@ +úûÿüýþÿ +ÿ \ No newline at end of file diff --git a/gfx/surfing_pikachu/unknown_f91c8.map b/gfx/surfing_pikachu/unknown_f91c8.map new file mode 100644 index 00000000..20d18de5 --- /dev/null +++ b/gfx/surfing_pikachu/unknown_f91c8.map @@ -0,0 +1 @@ +¶·¸¹ÿÿÿºÿÿÿÿ»¼½¾¿ÀÁÂÃÄÅÿÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÿÿÿÝÞßàáâãäÿÿÿÿåæçèéêëìÿÿ \ No newline at end of file diff --git a/gfx/surfing_pikachu_1a.png b/gfx/surfing_pikachu_1a.png deleted file mode 100644 index 0bc11684..00000000 Binary files a/gfx/surfing_pikachu_1a.png and /dev/null differ diff --git a/gfx/surfing_pikachu_1b.png b/gfx/surfing_pikachu_1b.png deleted file mode 100644 index a64eb4c7..00000000 Binary files a/gfx/surfing_pikachu_1b.png and /dev/null differ diff --git a/gfx/surfing_pikachu_1c.png b/gfx/surfing_pikachu_1c.png deleted file mode 100644 index eeedb243..00000000 Binary files a/gfx/surfing_pikachu_1c.png and /dev/null differ diff --git a/gfx/surfing_pikachu_2.png b/gfx/surfing_pikachu_2.png deleted file mode 100644 index f8752966..00000000 Binary files a/gfx/surfing_pikachu_2.png and /dev/null differ diff --git a/gfx/surfing_pikachu_3.png b/gfx/surfing_pikachu_3.png deleted file mode 100644 index 91d4a607..00000000 Binary files a/gfx/surfing_pikachu_3.png and /dev/null differ diff --git a/gfx/tilesets.asm b/gfx/tilesets.asm index e6db3c21..911ad34f 100644 --- a/gfx/tilesets.asm +++ b/gfx/tilesets.asm @@ -62,3 +62,10 @@ Club_GFX:: INCBIN "gfx/tilesets/club.2bpp" Club_Block:: INCBIN "gfx/blocksets/club.bst" Underground_GFX:: INCBIN "gfx/tilesets/underground.2bpp" Underground_Block:: INCBIN "gfx/blocksets/underground.bst" + + +SECTION "Tilesets 4", ROMX + +BeachHouse_GFX:: INCBIN "gfx/tilesets/beach_house.2bpp" + ds 384 +BeachHouse_Block:: INCBIN "gfx/blocksets/beach_house.bst" diff --git a/gfx/tilesets/beach_house.png b/gfx/tilesets/beach_house.png new file mode 100644 index 00000000..f5dccf7a Binary files /dev/null and b/gfx/tilesets/beach_house.png differ diff --git a/gfx/tilesets/beachhouse.png b/gfx/tilesets/beachhouse.png deleted file mode 100644 index f5dccf7a..00000000 Binary files a/gfx/tilesets/beachhouse.png and /dev/null differ diff --git a/gfx/title/nine.png b/gfx/title/nine.png new file mode 100644 index 00000000..e6fc8911 Binary files /dev/null and b/gfx/title/nine.png differ diff --git a/gfx/title/pika_bubble.tilemap b/gfx/title/pika_bubble.tilemap new file mode 100644 index 00000000..892be3c7 --- /dev/null +++ b/gfx/title/pika_bubble.tilemap @@ -0,0 +1 @@ +$%fghi*PQRSTUVWXYZ[\]m^_`abc \ No newline at end of file diff --git a/gfx/title/pikachu.tilemap b/gfx/title/pikachu.tilemap new file mode 100644 index 00000000..9fc7de6f Binary files /dev/null and b/gfx/title/pikachu.tilemap differ diff --git a/gfx/title/pikachu_bg.png b/gfx/title/pikachu_bg.png new file mode 100644 index 00000000..245fdbf6 Binary files /dev/null and b/gfx/title/pikachu_bg.png differ diff --git a/gfx/title/pikachu_ob.png b/gfx/title/pikachu_ob.png new file mode 100644 index 00000000..066221cb Binary files /dev/null and b/gfx/title/pikachu_ob.png differ diff --git a/gfx/title/pokemon_logo.png b/gfx/title/pokemon_logo.png index 64f9b23f..30b4a46d 100644 Binary files a/gfx/title/pokemon_logo.png and b/gfx/title/pokemon_logo.png differ diff --git a/gfx/title/pokemon_logo.tilemap b/gfx/title/pokemon_logo.tilemap new file mode 100644 index 00000000..92488a1f --- /dev/null +++ b/gfx/title/pokemon_logo.tilemap @@ -0,0 +1,2 @@ +ôôôôôôIôr0ôôôôôôý + ô  !"#$%&'()*+,-./ô123456789:;<=>?ôABCDEFGHôJKLMNOôjklmôôôôôônopqô \ No newline at end of file diff --git a/gfx/title/pokemon_logo_corner.png b/gfx/title/pokemon_logo_corner.png new file mode 100644 index 00000000..ffb2a514 Binary files /dev/null and b/gfx/title/pokemon_logo_corner.png differ diff --git a/gfx/unknown_f8946.map b/gfx/unknown_f8946.map deleted file mode 100644 index a89a52b8..00000000 --- a/gfx/unknown_f8946.map +++ /dev/null @@ -1 +0,0 @@ -           \ No newline at end of file diff --git a/gfx/unknown_f90bc.map b/gfx/unknown_f90bc.map deleted file mode 100644 index 98b8ba51..00000000 Binary files a/gfx/unknown_f90bc.map and /dev/null differ diff --git a/gfx/unknown_f91ac.map b/gfx/unknown_f91ac.map deleted file mode 100644 index 8a1f06b7..00000000 --- a/gfx/unknown_f91ac.map +++ /dev/null @@ -1 +0,0 @@ -íîïÿðñòóôõöÿ÷øù \ No newline at end of file diff --git a/gfx/unknown_f91bb.map b/gfx/unknown_f91bb.map deleted file mode 100644 index 6d8ebb43..00000000 --- a/gfx/unknown_f91bb.map +++ /dev/null @@ -1,2 +0,0 @@ -úûÿüýþÿ -ÿ \ No newline at end of file diff --git a/gfx/unknown_f91c8.map b/gfx/unknown_f91c8.map deleted file mode 100644 index 20d18de5..00000000 --- a/gfx/unknown_f91c8.map +++ /dev/null @@ -1 +0,0 @@ -¶·¸¹ÿÿÿºÿÿÿÿ»¼½¾¿ÀÁÂÃÄÅÿÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÿÿÿÝÞßàáâãäÿÿÿÿåæçèéêëìÿÿ \ No newline at end of file diff --git a/gfx/unknown_f9b6e.map b/gfx/unknown_f9b6e.map deleted file mode 100644 index 3ce924dc..00000000 Binary files a/gfx/unknown_f9b6e.map and /dev/null differ diff --git a/gfx/unknown_f9be6.map b/gfx/unknown_f9be6.map deleted file mode 100644 index 18560135..00000000 --- a/gfx/unknown_f9be6.map +++ /dev/null @@ -1 +0,0 @@ -0123@ABCPQRS \ No newline at end of file diff --git a/gfx/unknown_f9bf2.map b/gfx/unknown_f9bf2.map deleted file mode 100644 index e587b7ce..00000000 --- a/gfx/unknown_f9bf2.map +++ /dev/null @@ -1 +0,0 @@ -"# \ No newline at end of file diff --git a/gfx/unknown_f9c2c.png b/gfx/unknown_f9c2c.png deleted file mode 100644 index b5c68424..00000000 Binary files a/gfx/unknown_f9c2c.png and /dev/null differ diff --git a/gfx/unknown_f9c6c.png b/gfx/unknown_f9c6c.png deleted file mode 100644 index 3725d6cc..00000000 Binary files a/gfx/unknown_f9c6c.png and /dev/null differ diff --git a/gfx/unknown_fd86b.png b/gfx/unknown_fd86b.png deleted file mode 100644 index 20bcf5a7..00000000 Binary files a/gfx/unknown_fd86b.png and /dev/null differ diff --git a/gfx/yellow_intro.asm b/gfx/yellow_intro.asm new file mode 100644 index 00000000..4bdd1a3f --- /dev/null +++ b/gfx/yellow_intro.asm @@ -0,0 +1,4 @@ +YellowIntroGraphics1: INCBIN "gfx/intro/yellow_intro_1.2bpp" +YellowIntroGraphics1End:: +YellowIntroGraphics2: INCBIN "gfx/intro/yellow_intro_2.2bpp" +YellowIntroGraphics2End:: diff --git a/gfx/yellow_intro.png b/gfx/yellow_intro.png deleted file mode 100644 index a9a2773c..00000000 Binary files a/gfx/yellow_intro.png and /dev/null differ diff --git a/gfx/yellow_titlescreen.png b/gfx/yellow_titlescreen.png deleted file mode 100644 index 285309ce..00000000 Binary files a/gfx/yellow_titlescreen.png and /dev/null differ diff --git a/gfx/zero_one_ea597.png b/gfx/zero_one_ea597.png deleted file mode 100644 index 0c11b9da..00000000 Binary files a/gfx/zero_one_ea597.png and /dev/null differ diff --git a/home.asm b/home.asm index 17701681..b21eb4b8 100644 --- a/home.asm +++ b/home.asm @@ -16,70 +16,15 @@ INCLUDE "home/copy.asm" SECTION "Home", ROM0 -PlayPikachuPCM:: - ldh a, [hLoadedROMBank] - push af - ld a, b - call BankswitchCommon - ld a, [hli] - ld c, a - ld a, [hli] - ld b, a -.loop - ld a, [hli] - ld d, a - ld a, $3 -.playSingleSample - dec a - jr nz, .playSingleSample - - rept 7 - call LoadNextSoundClipSample - call PlaySoundClipSample - endr - - call LoadNextSoundClipSample - dec bc - ld a, c - or b - jr nz, .loop - pop af - call BankswitchCommon - ret - -LoadNextSoundClipSample:: - ld a, d - and $80 - srl a - srl a - ldh [rNR32], a - sla d - ret - -PlaySoundClipSample:: - ld a, $3 -.loop - dec a - jr nz, .loop - ret - +INCLUDE "home/pikachu_cries.asm" INCLUDE "home/start.asm" INCLUDE "home/joypad.asm" - INCLUDE "home/overworld.asm" INCLUDE "home/pokemon.asm" INCLUDE "home/print_bcd.asm" INCLUDE "home/pics.asm" - INCLUDE "home/pikachu.asm" - INCLUDE "home/lcdc.asm" - -IsTilePassable:: -; sets carry if tile is passable, resets carry otherwise - homecall_sf _IsTilePassable - ret - INCLUDE "home/copy2.asm" INCLUDE "home/text.asm" INCLUDE "home/vcopy.asm" @@ -98,11 +43,6 @@ INCLUDE "home/overworld_text.asm" INCLUDE "home/uncompress.asm" INCLUDE "home/reset_player_sprite.asm" INCLUDE "home/fade_audio.asm" - -UnknownText_2812:: - text_far _PokemonText - text_end - INCLUDE "home/text_script.asm" INCLUDE "home/start_menu.asm" INCLUDE "home/count_set_bits.asm" @@ -112,89 +52,7 @@ INCLUDE "home/names.asm" INCLUDE "home/reload_tiles.asm" INCLUDE "home/item.asm" INCLUDE "home/textbox.asm" - -UpdateGBCPal_BGP:: - push af - ldh a, [hGBC] - and a - jr z, .notGBC - push bc - push de - push hl - ldh a, [rBGP] - ld b, a - ld a, [wLastBGP] - cp b - jr z, .noChangeInBGP - farcall _UpdateGBCPal_BGP -.noChangeInBGP - pop hl - pop de - pop bc -.notGBC - pop af - ret - -UpdateGBCPal_OBP0:: - push af - ldh a, [hGBC] - and a - jr z, .notGBC - push bc - push de - push hl - ldh a, [rOBP0] - ld b, a - ld a, [wLastOBP0] - cp b - jr z, .noChangeInOBP0 - ld b, BANK(_UpdateGBCPal_OBP) - ld hl, _UpdateGBCPal_OBP - ld c, CONVERT_OBP0 - call Bankswitch -.noChangeInOBP0 - pop hl - pop de - pop bc -.notGBC - pop af - ret - -UpdateGBCPal_OBP1:: - push af - ldh a, [hGBC] - and a - jr z, .notGBC - push bc - push de - push hl - ldh a, [rOBP1] - ld b, a - ld a, [wLastOBP1] - cp b - jr z, .noChangeInOBP1 - ld b, BANK(_UpdateGBCPal_OBP) - ld hl, _UpdateGBCPal_OBP - ld c, CONVERT_OBP1 - call Bankswitch -.noChangeInOBP1 - pop hl - pop de - pop bc -.notGBC - pop af - ret - -Func_3082:: - ldh a, [hLoadedROMBank] - push af - call FadeOutAudio - callbs Music_DoLowHealthAlarm - callbs Audio1_UpdateMusic - pop af - call BankswitchCommon - ret - +INCLUDE "home/cgb_palettes.asm" INCLUDE "home/npc_movement.asm" INCLUDE "home/trainers.asm" INCLUDE "home/map_objects.asm" @@ -217,69 +75,13 @@ INCLUDE "home/array.asm" INCLUDE "home/compare.asm" INCLUDE "home/oam.asm" INCLUDE "home/window.asm" - -FarPrintText:: -; print text b:hl at (1, 14) - ldh a, [hLoadedROMBank] - push af - ld a, b - call BankswitchCommon - call PrintText - pop af - call BankswitchCommon - ret - INCLUDE "home/print_num.asm" INCLUDE "home/array2.asm" - -InitMapSprites:: - jpfar _InitMapSprites - INCLUDE "home/palettes.asm" INCLUDE "home/reload_sprites.asm" INCLUDE "home/give.asm" INCLUDE "home/random.asm" - -BankswitchCommon:: - ldh [hLoadedROMBank], a - ld [MBC1RomBank], a - ret - -Bankswitch:: -; self-contained bankswitch, use this when not in the home bank -; switches to the bank in b - ldh a, [hLoadedROMBank] - push af - ld a, b - ldh [hLoadedROMBank], a - ld [MBC1RomBank], a - call JumpToAddress - pop bc - ld a, b - ldh [hLoadedROMBank], a - ld [MBC1RomBank], a - ret -JumpToAddress:: - jp hl - -SwitchSRAMBankAndLatchClockData:: - push af - ld a, $1 - ld [MBC1SRamBankingMode], a - ld a, SRAM_ENABLE - ld [MBC1SRamEnable], a - pop af - ld [MBC1SRamBank], a - ret - -PrepareRTCDataAndDisableSRAM:: - push af - ld a, $0 - ld [MBC1SRamBankingMode], a - ld [MBC1SRamEnable], a - pop af - ret - +INCLUDE "home/bankswitch2.asm" INCLUDE "home/predef.asm" INCLUDE "home/hidden_objects.asm" INCLUDE "home/predef_text.asm" diff --git a/home/bankswitch2.asm b/home/bankswitch2.asm new file mode 100644 index 00000000..cc7169cd --- /dev/null +++ b/home/bankswitch2.asm @@ -0,0 +1,39 @@ +BankswitchCommon:: + ldh [hLoadedROMBank], a + ld [MBC1RomBank], a + ret + +Bankswitch:: +; self-contained bankswitch, use this when not in the home bank +; switches to the bank in b + ldh a, [hLoadedROMBank] + push af + ld a, b + ldh [hLoadedROMBank], a + ld [MBC1RomBank], a + call JumpToAddress + pop bc + ld a, b + ldh [hLoadedROMBank], a + ld [MBC1RomBank], a + ret +JumpToAddress:: + jp hl + +SwitchSRAMBankAndLatchClockData:: + push af + ld a, $1 + ld [MBC1SRamBankingMode], a + ld a, SRAM_ENABLE + ld [MBC1SRamEnable], a + pop af + ld [MBC1SRamBank], a + ret + +PrepareRTCDataAndDisableSRAM:: + push af + ld a, $0 + ld [MBC1SRamBankingMode], a + ld [MBC1SRamEnable], a + pop af + ret diff --git a/home/cgb_palettes.asm b/home/cgb_palettes.asm new file mode 100644 index 00000000..24738ae2 --- /dev/null +++ b/home/cgb_palettes.asm @@ -0,0 +1,81 @@ +UpdateGBCPal_BGP:: + push af + ldh a, [hGBC] + and a + jr z, .notGBC + push bc + push de + push hl + ldh a, [rBGP] + ld b, a + ld a, [wLastBGP] + cp b + jr z, .noChangeInBGP + farcall _UpdateGBCPal_BGP +.noChangeInBGP + pop hl + pop de + pop bc +.notGBC + pop af + ret + +UpdateGBCPal_OBP0:: + push af + ldh a, [hGBC] + and a + jr z, .notGBC + push bc + push de + push hl + ldh a, [rOBP0] + ld b, a + ld a, [wLastOBP0] + cp b + jr z, .noChangeInOBP0 + ld b, BANK(_UpdateGBCPal_OBP) + ld hl, _UpdateGBCPal_OBP + ld c, CONVERT_OBP0 + call Bankswitch +.noChangeInOBP0 + pop hl + pop de + pop bc +.notGBC + pop af + ret + +UpdateGBCPal_OBP1:: + push af + ldh a, [hGBC] + and a + jr z, .notGBC + push bc + push de + push hl + ldh a, [rOBP1] + ld b, a + ld a, [wLastOBP1] + cp b + jr z, .noChangeInOBP1 + ld b, BANK(_UpdateGBCPal_OBP) + ld hl, _UpdateGBCPal_OBP + ld c, CONVERT_OBP1 + call Bankswitch +.noChangeInOBP1 + pop hl + pop de + pop bc +.notGBC + pop af + ret + +Func_3082:: + ldh a, [hLoadedROMBank] + push af + call FadeOutAudio + callbs Music_DoLowHealthAlarm + callbs Audio1_UpdateMusic + pop af + call BankswitchCommon + ret diff --git a/home/copy2.asm b/home/copy2.asm index bff26570..6245ad5d 100644 --- a/home/copy2.asm +++ b/home/copy2.asm @@ -1,3 +1,8 @@ +IsTilePassable:: +; sets carry if tile is passable, resets carry otherwise + homecall_sf _IsTilePassable + ret + FarCopyDataDouble:: ; Expand bc bytes of 1bpp image data ; from a:de to 2bpp data at hl. diff --git a/home/init.asm b/home/init.asm index 878f329a..331a3657 100644 --- a/home/init.asm +++ b/home/init.asm @@ -128,7 +128,7 @@ ClearVram:: StopAllSounds:: - ld a, BANK(AudioEngine1) + ld a, BANK("Audio Engine 1") ld [wAudioROMBank], a ld [wAudioSavedROMBank], a xor a diff --git a/home/lcdc.asm b/home/lcdc.asm index dd3fb2fb..4b350cc2 100644 --- a/home/lcdc.asm +++ b/home/lcdc.asm @@ -7,7 +7,7 @@ LCDC:: ; [C700 + [rLY]] --> [FF00 + [hLCDCPointer]] ldh a, [rLY] ld l, a - ld h, wLYOverrides / $100 + ld h, HIGH(wLYOverrides) ld h, [hl] ; h != not part of pointer ldh a, [hLCDCPointer] ld l, a diff --git a/home/overworld.asm b/home/overworld.asm index 0cd63cf7..2909b01e 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -1801,7 +1801,7 @@ LoadMapHeader:: jr asm_0dbd Func_0db5:: ; XXX - farcall LoadUnusedBluesHouseMissableObjectData + farcall LoadMissableObjectData asm_0dbd: ld a, [wCurMapTileset] ld [wUnusedD119], a @@ -2009,7 +2009,7 @@ ReloadMapAfterSurfingMinigame:: call ReloadMapSpriteTilePatterns pop af call BankswitchCommon - jr asm_0f4d + jr FinishReloadingMap ReloadMapAfterPrinter:: ldh a, [hLoadedROMBank] @@ -2019,9 +2019,9 @@ ReloadMapAfterPrinter:: call LoadTileBlockMap pop af call BankswitchCommon -asm_0f4d: +FinishReloadingMap: jpfar SetMapSpecificScriptFlagsOnMapReload - ret ; useless? + ret ; useless ResetMapVariables:: ld a, $98 diff --git a/home/palettes.asm b/home/palettes.asm index 3b944a03..af66e74b 100644 --- a/home/palettes.asm +++ b/home/palettes.asm @@ -1,3 +1,6 @@ +InitMapSprites:: + jpfar _InitMapSprites + RestoreScreenTilesAndReloadTilePatterns:: call ClearSprites ld a, $1 diff --git a/home/pikachu.asm b/home/pikachu.asm index c276b3d4..c9c94635 100755 --- a/home/pikachu.asm +++ b/home/pikachu.asm @@ -56,7 +56,7 @@ SpawnPikachu:: dec a swap a ldh [hTilePlayerStandingOn], a - homecall SpawnPikachu_ ; 3f:46d5 + homecall SpawnPikachu_ ret Pikachu_IsInArray:: diff --git a/home/pikachu_cries.asm b/home/pikachu_cries.asm new file mode 100644 index 00000000..84889ef9 --- /dev/null +++ b/home/pikachu_cries.asm @@ -0,0 +1,46 @@ +PlayPikachuPCM:: + ldh a, [hLoadedROMBank] + push af + ld a, b + call BankswitchCommon + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a +.loop + ld a, [hli] + ld d, a + ld a, $3 +.playSingleSample + dec a + jr nz, .playSingleSample + +REPT 7 + call LoadNextSoundClipSample + call PlaySoundClipSample +ENDR + + call LoadNextSoundClipSample + dec bc + ld a, c + or b + jr nz, .loop + pop af + call BankswitchCommon + ret + +LoadNextSoundClipSample:: + ld a, d + and $80 + srl a + srl a + ldh [rNR32], a + sla d + ret + +PlaySoundClipSample:: + ld a, $3 +.loop + dec a + jr nz, .loop + ret diff --git a/home/print_num.asm b/home/print_num.asm index e2628b1f..d86527a6 100644 --- a/home/print_num.asm +++ b/home/print_num.asm @@ -1,3 +1,14 @@ +FarPrintText:: +; print text b:hl at (1, 14) + ldh a, [hLoadedROMBank] + push af + ld a, b + call BankswitchCommon + call PrintText + pop af + call BankswitchCommon + ret + PrintNumber:: ; Print the c-digit, b-byte value at de. ; Allows 2 to 7 digits. For 1-digit numbers, add diff --git a/home/text_script.asm b/home/text_script.asm index 1847e23b..20cfb71d 100644 --- a/home/text_script.asm +++ b/home/text_script.asm @@ -1,3 +1,7 @@ +UnknownText_2812:: ; unreferenced + text_far _PokemonText + text_end + ; this function is used to display sign messages, sprite dialog, etc. ; INPUT: [hSpriteIndexOrTextID] = sprite ID or text ID DisplayTextID:: diff --git a/layout.link b/layout.link index 1e1b7085..ef6da300 100644 --- a/layout.link +++ b/layout.link @@ -44,7 +44,7 @@ ROMX $2 ROMX $3 "bank3" ROMX $4 - "Font Graphics" + "bank4" "NPC Sprites 1" "Battle Engine 1" ROMX $5 @@ -57,7 +57,7 @@ ROMX $6 "Doors and Ledges" ROMX $7 "Maps 3" - "Pokémon Names" + "bank7" "Maps 4" "Hidden Objects 1" ROMX $8 @@ -83,7 +83,7 @@ ROMX $D "Pics 5" "Slot Machines" ROMX $E - "Battle Engine 7" + "Battle Engine 6" ROMX $F "Battle Core" ROMX $10 @@ -104,13 +104,13 @@ ROMX $14 "Hidden Objects 2" ROMX $15 "Maps 11" - "Battle Engine 9" + "Battle Engine 7" "Maps 12" "Diploma" "Trainer Sight" ROMX $16 "Maps 13" - "Battle Engine 10" + "bank16" "Maps 14" "Saffron Guards" ROMX $17 @@ -126,7 +126,7 @@ ROMX $18 ROMX $19 "Tilesets 1" ROMX $1A - "Battle Engine 11" + "Version Graphics" "Tilesets 2" ROMX $1B "Tilesets 3" @@ -184,7 +184,7 @@ ROMX $2E ROMX $2f "Move Names" org $5000 - "bank2f" + "BG Map Attributes" ROMX $30 "bank30" ROMX $31 @@ -204,18 +204,27 @@ ROMX $37 ROMX $38 "Pikachu Cries 13" ROMX $39 - "bank39" + "Pikachu Graphics 1" ROMX $3A "bank3A" -; bank $3b is empty +; bank $3B is empty ROMX $3C - "bank3C" + "Pikachu PCM" + "Tilesets 4" + "Try Pikachu Movement" + "Pikachu Graphics 2" + "Credits" + "Maps 22" + "Hidden Objects Core" ROMX $3D - "bank3D" + "Battle Engine 8" + "Pics 7" + "Battle Engine 9" ROMX $3E - "bank3E" + "Surfing Minigame" ROMX $3F - "bank3F" + "Overworld Pikachu" + "NPC Sprites 3" WRAM0 "WRAM" org $c100 diff --git a/macros.asm b/macros.asm index 3da4a691..cf7f21ef 100644 --- a/macros.asm +++ b/macros.asm @@ -10,105 +10,4 @@ INCLUDE "macros/scripts/audio.asm" INCLUDE "macros/scripts/maps.asm" INCLUDE "macros/scripts/events.asm" INCLUDE "macros/scripts/text.asm" - -SHADE_BLACK EQU %11 -SHADE_DARK EQU %10 -SHADE_LIGHT EQU %01 -SHADE_WHITE EQU %00 - -setpal: MACRO - ld a, \1 << 6 | \2 << 4 | \3 << 2 | \4 -ENDM - -setpalBGP: MACRO - setpal SHADE_BLACK, SHADE_DARK, SHADE_LIGHT, SHADE_WHITE -ENDM - -setpalOBP: MACRO - setpal SHADE_BLACK, SHADE_DARK, SHADE_WHITE, SHADE_WHITE -ENDM - -homecall_jump: MACRO - ldh a, [hLoadedROMBank] - push af - ld a, BANK(\1) - call BankswitchCommon - call \1 - pop af - jp BankswitchCommon -ENDM - -homecall_jump_sf: MACRO - ldh a, [hLoadedROMBank] - push af - ld a, BANK(\1) - call BankswitchCommon - call \1 - pop bc - ld a, b - jp BankswitchCommon -ENDM - -homecall_sf: MACRO ; homecall but save flags by popping into bc instead of af - ldh a, [hLoadedROMBank] - push af - ld a, BANK(\1) - call BankswitchCommon - call \1 - pop bc - ld a, b - call BankswitchCommon -ENDM - -switchbank: MACRO - ld a, BANK(\1) - call BankswitchCommon -ENDM - -callbs: MACRO - ld a, BANK(\1) - call BankswitchCommon - call \1 -ENDM - -calladb_ModifyPikachuHappiness: MACRO - ld hl, ModifyPikachuHappiness - ld d, \1 - ld b, BANK(ModifyPikachuHappiness) - call Bankswitch -ENDM - -callabd_ModifyPikachuHappiness: MACRO - ld hl, ModifyPikachuHappiness - ld b, BANK(ModifyPikachuHappiness) - ld d, \1 - call Bankswitch -ENDM - -sine_wave: MACRO -; \1: amplitude - -x = 0 - rept $20 - ; Round up. - dw (sin(x) + (sin(x) & $ff)) >> 8 -x = x + (\1) * $40000 - endr -ENDM - -ANIM_OBJ_INDEX EQUS "wAnimatedObject0Index - wAnimatedObject0" -ANIM_OBJ_FRAME_SET EQUS "wAnimatedObject0FramesetID - wAnimatedObject0" -ANIM_OBJ_CALLBACK EQUS "wAnimatedObject0AnimSeqID - wAnimatedObject0" -ANIM_OBJ_TILE EQUS "wAnimatedObject0TileID - wAnimatedObject0" -ANIM_OBJ_X_COORD EQUS "wAnimatedObject0XCoord - wAnimatedObject0" -ANIM_OBJ_Y_COORD EQUS "wAnimatedObject0YCoord - wAnimatedObject0" -ANIM_OBJ_X_OFFSET EQUS "wAnimatedObject0XOffset - wAnimatedObject0" -ANIM_OBJ_Y_OFFSET EQUS "wAnimatedObject0YOffset - wAnimatedObject0" -ANIM_OBJ_DURATION EQUS "wAnimatedObject0Duration - wAnimatedObject0" -ANIM_OBJ_DURATION_OFFSET EQUS "wAnimatedObject0DurationOffset - wAnimatedObject0" -ANIM_OBJ_FRAME_IDX EQUS "wAnimatedObject0FrameIndex - wAnimatedObject0" -ANIM_OBJ_FIELD_B EQU $b -ANIM_OBJ_FIELD_C EQU $c -ANIM_OBJ_FIELD_D EQU $d -ANIM_OBJ_FIELD_E EQU $e -ANIM_OBJ_FIELD_F EQU $f +INCLUDE "macros/scripts/gfx_anims.asm" diff --git a/macros/data.asm b/macros/data.asm index 16742d53..3f18fb6e 100755 --- a/macros/data.asm +++ b/macros/data.asm @@ -78,3 +78,12 @@ dbbw: MACRO db \1, \2 dw \3 ENDM + +sine_wave: MACRO +; \1: amplitude +x = 0 +REPT $20 + dw (sin(x) + (sin(x) & $ff)) >> 8 ; round up +x = x + (\1) * $40000 +ENDR +ENDM diff --git a/macros/farcall.asm b/macros/farcall.asm index b4af8b2d..e6ecdaae 100644 --- a/macros/farcall.asm +++ b/macros/farcall.asm @@ -31,3 +31,60 @@ homecall: MACRO pop af call BankswitchCommon ENDM + +homecall_jump: MACRO + ldh a, [hLoadedROMBank] + push af + ld a, BANK(\1) + call BankswitchCommon + call \1 + pop af + jp BankswitchCommon +ENDM + +homecall_jump_sf: MACRO + ldh a, [hLoadedROMBank] + push af + ld a, BANK(\1) + call BankswitchCommon + call \1 + pop bc + ld a, b + jp BankswitchCommon +ENDM + +homecall_sf: MACRO ; homecall but save flags by popping into bc instead of af + ldh a, [hLoadedROMBank] + push af + ld a, BANK(\1) + call BankswitchCommon + call \1 + pop bc + ld a, b + call BankswitchCommon +ENDM + +switchbank: MACRO + ld a, BANK(\1) + call BankswitchCommon +ENDM + +callbs: MACRO + ld a, BANK(\1) + call BankswitchCommon + call \1 +ENDM + +calladb_ModifyPikachuHappiness: MACRO + ld hl, ModifyPikachuHappiness + ld d, \1 + ld b, BANK(ModifyPikachuHappiness) + call Bankswitch +ENDM + +callabd_ModifyPikachuHappiness: MACRO + ld hl, ModifyPikachuHappiness + ld b, BANK(ModifyPikachuHappiness) + ld d, \1 + call Bankswitch +ENDM diff --git a/macros/gfx.asm b/macros/gfx.asm index 98eabec4..ad428eb0 100644 --- a/macros/gfx.asm +++ b/macros/gfx.asm @@ -16,6 +16,18 @@ color EQUS "+ PAL_COLOR_SIZE *" tiles EQUS "* LEN_2BPP_TILE" tile EQUS "+ LEN_2BPP_TILE *" +setpal: MACRO + ld a, \1 << 6 | \2 << 4 | \3 << 2 | \4 +ENDM + +setpalBGP: MACRO + setpal SHADE_BLACK, SHADE_DARK, SHADE_LIGHT, SHADE_WHITE +ENDM + +setpalOBP: MACRO + setpal SHADE_BLACK, SHADE_DARK, SHADE_WHITE, SHADE_WHITE +ENDM + dbsprite: MACRO ; x tile, y tile, x pixel, y pixel, vtile offset, attributes db (\2 * TILE_WIDTH) % $100 + \4, (\1 * TILE_WIDTH) % $100 + \3, \5, \6 diff --git a/macros/scripts/gfx_anims.asm b/macros/scripts/gfx_anims.asm new file mode 100644 index 00000000..f475ad8d --- /dev/null +++ b/macros/scripts/gfx_anims.asm @@ -0,0 +1,37 @@ +; pic + oam animations + +frame: MACRO + db \1 +x = \2 +IF _NARG > 2 +REPT _NARG - 2 +x = x | (\3 << 1) + shift +ENDR +ENDC + db x +ENDM + + const_def -1, -1 + + const endanim_command ; $ff +endanim: MACRO + db endanim_command +ENDM + + const dorestart_command ; $fe +dorestart: MACRO + db dorestart_command +ENDM + + const dorepeat_command ; $fd +dorepeat: MACRO + db dorepeat_command + db \1 ; command offset to jump to +ENDM + + const delanim_command ; $fc +delanim: MACRO +; Removes the object from the screen, as opposed to `endanim` which just stops all motion + db delanim_command +ENDM diff --git a/macros/wram.asm b/macros/wram.asm index 41fd1dad..10163692 100644 --- a/macros/wram.asm +++ b/macros/wram.asm @@ -95,3 +95,23 @@ spritestatedata2: MACRO ds 1 \1End:: ENDM + +animated_object: MACRO +\1Index:: db ; 0 +\1FramesetID:: db ; 1 +\1AnimSeqID:: db ; 2 +\1TileID:: db ; 3 +\1XCoord:: db ; 4 +\1YCoord:: db ; 5 +\1XOffset:: db ; 6 +\1YOffset:: db ; 7 +\1Duration:: db ; 8 +\1DurationOffset:: db ; 9 +\1FrameIndex:: db ; a +\1FieldB:: db ; b +\1FieldC:: db ; c +\1FieldD:: db ; d +\1FieldE:: db ; e +\1FieldF:: db ; f +\1End:: +ENDM diff --git a/main.asm b/main.asm index e94dc292..795204dd 100755 --- a/main.asm +++ b/main.asm @@ -70,10 +70,9 @@ INCLUDE "engine/events/hidden_objects/town_map.asm" INCLUDE "engine/events/hidden_objects/pokemon_stuff.asm" -SECTION "Font Graphics", ROMX +SECTION "bank4", ROMX INCLUDE "gfx/font.asm" - INCLUDE "engine/pokemon/status_screen.asm" INCLUDE "engine/menus/party_menu.asm" INCLUDE "gfx/player.asm" @@ -97,6 +96,7 @@ INCLUDE "engine/overworld/map_sprites.asm" SECTION "Battle Engine 2", ROMX + INCLUDE "engine/battle/move_effects/substitute.asm" INCLUDE "engine/menus/pc.asm" @@ -108,7 +108,7 @@ INCLUDE "engine/overworld/doors.asm" INCLUDE "engine/overworld/ledges.asm" -SECTION "Pokémon Names", ROMX +SECTION "bank7", ROMX INCLUDE "engine/movie/oak_speech/clear_save.asm" INCLUDE "engine/events/elevator.asm" @@ -147,26 +147,19 @@ SECTION "Battle Engine 5", ROMX INCLUDE "engine/battle/display_effectiveness.asm" INCLUDE "engine/items/tmhm.asm" - -Func_2fd6a: - callfar IsThisPartymonStarterPikachu_Party - ret nc - ld a, $3 - ld [wPikachuSpawnState], a - ret - +INCLUDE "engine/pikachu/respawn_overworld_pikachu.asm" INCLUDE "engine/battle/scale_sprites.asm" INCLUDE "engine/slots/game_corner_slots2.asm" SECTION "Slot Machines", ROMX -INCLUDE "engine/movie/title2.asm" +INCLUDE "engine/movie/title_rb.asm" INCLUDE "engine/slots/slot_machine.asm" INCLUDE "engine/slots/game_corner_slots.asm" -SECTION "Battle Engine 7", ROMX +SECTION "Battle Engine 6", ROMX INCLUDE "data/moves/moves.asm" INCLUDE "data/pokemon/base_stats.asm" @@ -212,7 +205,7 @@ INCLUDE "engine/events/hidden_objects/fighting_dojo.asm" INCLUDE "engine/events/hidden_objects/indigo_plateau_hq.asm" -SECTION "Battle Engine 9", ROMX +SECTION "Battle Engine 7", ROMX INCLUDE "engine/battle/experience.asm" @@ -227,7 +220,7 @@ SECTION "Trainer Sight", ROMX INCLUDE "engine/overworld/trainer_sight.asm" -SECTION "Battle Engine 10", ROMX +SECTION "bank16", ROMX INCLUDE "engine/pokemon/experience.asm" INCLUDE "engine/pokemon/status_ailments.asm" @@ -270,7 +263,7 @@ INCLUDE "engine/events/hidden_objects/blues_room.asm" INCLUDE "engine/events/hidden_objects/pokecenter_pc.asm" -SECTION "Battle Engine 11", ROMX +SECTION "Version Graphics", ROMX INCLUDE "gfx/version.asm" @@ -312,172 +305,112 @@ SECTION "bank1E", ROMX INCLUDE "engine/battle/animations.asm" INCLUDE "engine/overworld/cut2.asm" INCLUDE "engine/overworld/dust_smoke.asm" - INCLUDE "gfx/fishing.asm" INCLUDE "data/moves/animations.asm" INCLUDE "data/battle_anims/subanimations.asm" INCLUDE "data/battle_anims/frame_blocks.asm" -SECTION "bank2f", ROMX +SECTION "BG Map Attributes", ROMX -INCLUDE "engine/bg_map_attributes.asm" +INCLUDE "engine/gfx/bg_map_attributes.asm" SECTION "bank30", ROMX ; This whole bank is garbage data. -INCBIN "engine/bank30.bin" - - -SECTION "bank39", ROMX - -Pic_e4000: -INCBIN "gfx/pikachu/unknown_e4000.pic" -GFX_e40cc: -INCBIN "gfx/pikachu/unknown_e40cc.2bpp" -Pic_e411c: -INCBIN "gfx/pikachu/unknown_e411c.pic" -GFX_e41d2: -INCBIN "gfx/pikachu/unknown_e41d2.2bpp" -Pic_e4272: -INCBIN "gfx/pikachu/unknown_e4272.pic" -GFX_e4323: -INCBIN "gfx/pikachu/unknown_e4323.2bpp" -Pic_e4383: -INCBIN "gfx/pikachu/unknown_e4383.pic" -GFX_e444b: -INCBIN "gfx/pikachu/unknown_e444b.2bpp" -Pic_e458b: -INCBIN "gfx/pikachu/unknown_e458b.pic" -GFX_e463b: -INCBIN "gfx/pikachu/unknown_e463b.2bpp" -Pic_e467b: -INCBIN "gfx/pikachu/unknown_e467b.pic" -GFX_e472e: -INCBIN "gfx/pikachu/unknown_e472e.2bpp" -Pic_e476e: -INCBIN "gfx/pikachu/unknown_e476e.pic" -GFX_e4841: -INCBIN "gfx/pikachu/unknown_e4841.2bpp" -Pic_e49d1: -INCBIN "gfx/pikachu/unknown_e49d1.pic" -GFX_e4a99: -INCBIN "gfx/pikachu/unknown_e4a99.2bpp" -Pic_e4b39: -INCBIN "gfx/pikachu/unknown_e4b39.pic" -GFX_e4bde: -INCBIN "gfx/pikachu/unknown_e4bde.2bpp" -Pic_e4c3e: -INCBIN "gfx/pikachu/unknown_e4c3e.pic" -GFX_e4ce0: -INCBIN "gfx/pikachu/unknown_e4ce0.2bpp" -GFX_e4e70: -INCBIN "gfx/pikachu/unknown_e4e70.2bpp" -Pic_e5000: -INCBIN "gfx/pikachu/unknown_e5000.pic" -GFX_e50af: -INCBIN "gfx/pikachu/unknown_e50af.2bpp" -Pic_e523f: -INCBIN "gfx/pikachu/unknown_e523f.pic" -GFX_e52fe: -INCBIN "gfx/pikachu/unknown_e52fe.2bpp" -Pic_e548e: -INCBIN "gfx/pikachu/unknown_e548e.pic" -GFX_e5541: -INCBIN "gfx/pikachu/unknown_e5541.2bpp" -Pic_e56d1: -INCBIN "gfx/pikachu/unknown_e56d1.pic" -GFX_e5794: -INCBIN "gfx/pikachu/unknown_e5794.2bpp" -Pic_e5924: -INCBIN "gfx/pikachu/unknown_e5924.pic" -GFX_e59ed: -INCBIN "gfx/pikachu/unknown_e59ed.2bpp" -Pic_e5b7d: -INCBIN "gfx/pikachu/unknown_e5b7d.pic" -GFX_e5c4d: -INCBIN "gfx/pikachu/unknown_e5c4d.2bpp" -Pic_e5ddd: -INCBIN "gfx/pikachu/unknown_e5ddd.pic" -GFX_e5e90: -INCBIN "gfx/pikachu/unknown_e5e90.2bpp" -GFX_e6020: -INCBIN "gfx/pikachu/unknown_e6020.2bpp" -GFX_e61b0: -INCBIN "gfx/pikachu/unknown_e61b0.2bpp" -Pic_e6340: -INCBIN "gfx/pikachu/unknown_e6340.pic" -GFX_e63f7: -INCBIN "gfx/pikachu/unknown_e63f7.2bpp" -Pic_e6587: -INCBIN "gfx/pikachu/unknown_e6587.pic" -GFX_e6646: -INCBIN "gfx/pikachu/unknown_e6646.2bpp" -Pic_e67d6: -INCBIN "gfx/pikachu/unknown_e67d6.pic" -GFX_e682f: -INCBIN "gfx/pikachu/unknown_e682f.2bpp" -GFX_e69bf: -INCBIN "gfx/pikachu/unknown_e69bf.2bpp" -GFX_e6b4f: -INCBIN "gfx/pikachu/unknown_e6b4f.2bpp" -GFX_e6cdf: -INCBIN "gfx/pikachu/unknown_e6cdf.2bpp" -GFX_e6e6f: -INCBIN "gfx/pikachu/unknown_e6e6f.2bpp" -GFX_e6fff: -INCBIN "gfx/pikachu/unknown_e6fff.2bpp" -GFX_e718f: -INCBIN "gfx/pikachu/unknown_e718f.2bpp" -GFX_e731f: -INCBIN "gfx/pikachu/unknown_e731f.2bpp" -GFX_e74af: -INCBIN "gfx/pikachu/unknown_e74af.2bpp" -GFX_e763f: -INCBIN "gfx/pikachu/unknown_e763f.2bpp" -Pic_e77cf: -INCBIN "gfx/pikachu/unknown_e77cf.pic" -GFX_e7863: -INCBIN "gfx/pikachu/unknown_e7863.2bpp" -GFX_e79f3: -INCBIN "gfx/pikachu/unknown_e79f3.2bpp" -GFX_e7b83: -INCBIN "gfx/pikachu/unknown_e7b83.2bpp" -GFX_e7d13: -INCBIN "gfx/pikachu/unknown_e7d13.2bpp" +INCBIN "garbage/bank30.bin" SECTION "bank3A", ROMX INCLUDE "data/pokemon/names.asm" INCLUDE "engine/overworld/is_player_just_outside_map.asm" -INCLUDE "engine/printer.asm" -INCLUDE "engine/diploma_3a.asm" +INCLUDE "engine/printer/serial.asm" +INCLUDE "engine/printer/printer.asm" +INCLUDE "engine/events/diploma2.asm" +INCLUDE "engine/printer/printer2.asm" +INCLUDE "engine/overworld/npc_movement_2.asm" -SurfingPikachu3Graphics: INCBIN "gfx/surfing_pikachu_3.2bpp" -SurfingPikachu3GraphicsEnd: -INCLUDE "engine/unknown_ea3ea.asm" -INCLUDE "engine/overworld/npc_movement_2.asm" +SECTION "Pikachu PCM", ROMX + +INCLUDE "engine/pikachu/pikachu_pcm.asm" +INCLUDE "engine/overworld/advance_player_sprite.asm" +INCLUDE "engine/events/black_out.asm" +INCLUDE "engine/overworld/specific_script_flags.asm" + -; bank $3b is empty +SECTION "Try Pikachu Movement", ROMX -SECTION "bank3C", ROMX +INCLUDE "engine/overworld/unused_load_missable_object_data.asm" +INCLUDE "engine/events/try_pikachu_movement.asm" -INCLUDE "engine/bank3c.asm" +SECTION "Credits", ROMX -SECTION "bank3D", ROMX +INCLUDE "engine/events/pokecenter_chansey.asm" +INCLUDE "engine/movie/credits.asm" -INCLUDE "engine/bank3d.asm" +SECTION "Hidden Objects Core", ROMX -SECTION "bank3E", ROMX +INCLUDE "engine/overworld/hidden_objects.asm" +INCLUDE "engine/events/hidden_objects/vermilion_gym_trash2.asm" -INCLUDE "engine/bank3e.asm" +SECTION "Battle Engine 8", ROMX -SECTION "bank3F", ROMX +INCLUDE "engine/battle/common_text.asm" +INCLUDE "engine/battle/link_battle_versus_text.asm" +INCLUDE "engine/battle/unused_stats_functions.asm" +INCLUDE "engine/battle/scroll_draw_trainer_pic.asm" +INCLUDE "engine/battle/pikachu_entrance_anim.asm" +INCLUDE "engine/battle/decrement_pp.asm" +INCLUDE "engine/events/pikachu_happiness.asm" + + +SECTION "Battle Engine 9", ROMX -INCLUDE "engine/bank3f.asm" +INCLUDE "engine/movie/title_yellow.asm" +INCLUDE "engine/menus/link_menu.asm" +INCLUDE "engine/menus/unused_input.asm" +INCLUDE "engine/overworld/field_move_messages.asm" +INCLUDE "engine/items/inventory.asm" +INCLUDE "gfx/trainer_card.asm" +INCLUDE "engine/items/super_rod.asm" +INCLUDE "engine/battle/init_battle.asm" +INCLUDE "engine/battle/init_battle_variables.asm" +INCLUDE "engine/battle/move_effects/focus_energy.asm" +INCLUDE "engine/battle/move_effects/heal.asm" +INCLUDE "engine/battle/move_effects/transform.asm" +INCLUDE "engine/battle/move_effects/reflect_light_screen.asm" +INCLUDE "engine/battle/move_effects/mist.asm" +INCLUDE "engine/battle/move_effects/one_hit_ko.asm" +INCLUDE "engine/battle/move_effects/pay_day.asm" +INCLUDE "engine/battle/move_effects/paralyze.asm" +INCLUDE "engine/items/tm_prices.asm" +INCLUDE "engine/math/multiply_divide.asm" +INCLUDE "engine/events/give_pokemon.asm" +INCLUDE "engine/battle/get_trainer_name.asm" +INCLUDE "engine/math/random.asm" +INCLUDE "engine/predefs.asm" + + +SECTION "Surfing Minigame", ROMX + +INCLUDE "engine/minigame/surfing_pikachu.asm" +INCLUDE "engine/movie/intro_yellow.asm" +INCLUDE "engine/gfx/animated_objects.asm" + + +SECTION "Overworld Pikachu", ROMX + +INCLUDE "data/maps/songs.asm" +INCLUDE "data/maps/map_header_pointers.asm" +INCLUDE "data/maps/map_header_banks.asm" +INCLUDE "engine/pikachu/pikachu_follow.asm" +INCLUDE "engine/pikachu/pikachu_status.asm" +INCLUDE "engine/pikachu/pikachu_emotions.asm" +INCLUDE "engine/pikachu/pikachu_movement.asm" +INCLUDE "engine/pikachu/pikachu_pic_animation.asm" diff --git a/maps.asm b/maps.asm index 2a7e3392..8a282e63 100644 --- a/maps.asm +++ b/maps.asm @@ -1224,3 +1224,38 @@ INCLUDE "data/maps/headers/AgathasRoom.asm" INCLUDE "scripts/AgathasRoom.asm" INCLUDE "data/maps/objects/AgathasRoom.asm" AgathasRoom_Blocks: INCBIN "maps/AgathasRoom.blk" + + +SECTION "Maps 22", ROMX + +INCLUDE "scripts/ViridianCity2.asm" +INCLUDE "scripts/VermilionCity2.asm" +INCLUDE "scripts/CeladonCity2.asm" +INCLUDE "scripts/Route1_2.asm" +INCLUDE "scripts/Route22_2.asm" +INCLUDE "scripts/RedsHouse1F2.asm" +INCLUDE "scripts/OaksLab2.asm" +INCLUDE "scripts/ViridianSchoolHouse2.asm" +INCLUDE "scripts/Museum1F2.asm" +INCLUDE "scripts/PewterPokecenter2.asm" +INCLUDE "scripts/PokemonTower2F_2.asm" +INCLUDE "scripts/CeladonMart3F_2.asm" +INCLUDE "scripts/CeladonMansion1F_2.asm" +INCLUDE "scripts/CeladonMansion3F_2.asm" +INCLUDE "scripts/GameCorner2.asm" +INCLUDE "scripts/CeladonDiner2.asm" +INCLUDE "scripts/SafariZoneGate2.asm" +INCLUDE "scripts/CinnabarGym3.asm" +INCLUDE "scripts/MtMoonPokecenter2.asm" + +INCLUDE "data/maps/headers/SummerBeachHouse.asm" +INCLUDE "scripts/SummerBeachHouse.asm" +SummerBeachHouse_Blocks: +INCBIN "maps/SummerBeachHouse.blk" +INCLUDE "data/maps/objects/SummerBeachHouse.asm" +INCLUDE "scripts/SummerBeachHouse2.asm" + +INCLUDE "scripts/BillsHouse2.asm" +INCLUDE "scripts/ViridianForest2.asm" +INCLUDE "scripts/SSAnne2FRooms_2.asm" +INCLUDE "scripts/SilphCo11F_2.asm" diff --git a/maps/BeachHouse.blk b/maps/BeachHouse.blk deleted file mode 100644 index 5bcdb58a..00000000 --- a/maps/BeachHouse.blk +++ /dev/null @@ -1 +0,0 @@ -      \ No newline at end of file diff --git a/maps/SummerBeachHouse.blk b/maps/SummerBeachHouse.blk new file mode 100644 index 00000000..5bcdb58a --- /dev/null +++ b/maps/SummerBeachHouse.blk @@ -0,0 +1 @@ +      \ No newline at end of file diff --git a/replace.sh b/replace.sh deleted file mode 100644 index fe0e1ffb..00000000 --- a/replace.sh +++ /dev/null @@ -1,3 +0,0 @@ -sed -i 's/\<'$1'\>/'$2'/' $(grep -lwr --include "*.asm" --exclude-dir=".git" --exclude-dir="extras" --exclude-dir="pic" --exclude-dir="gfx" $1) -# $1: phrase to find -# $2: phrase to replace $1 \ No newline at end of file diff --git a/scripts/BeachHouse.asm b/scripts/BeachHouse.asm deleted file mode 100644 index 2059f59d..00000000 --- a/scripts/BeachHouse.asm +++ /dev/null @@ -1,193 +0,0 @@ -BeachHouse_Script: - call EnableAutoTextBoxDrawing - ret - -BeachHouse_TextPointers: - dw SurfinDudeText - dw BeachHousePikachuText - dw BeachHouseSign1Text - dw BeachHouseSign2Text - dw BeachHouseSign3Text - dw BeachHouseSign4Text - -SurfinDudeText: - text_asm - ld a, [wd472] - bit 6, a - jr nz, .next - ld hl, .SurfinDudeText4 - call PrintText - jr .done -.next - ld hl, wd492 - bit 0, [hl] - set 0, [hl] - jr nz, .next2 - ld hl, .SurfinDudeText1 - jr .next3 -.next2 - ld hl, .SurfinDudeText3 -.next3 - call PrintText - call YesNoChoice - ld a, [wCurrentMenuItem] - and a - jr nz, .asm_f226b - ld a, 1 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a - farcall SurfingPikachuMinigame - ld hl, wd492 - set 1, [hl] - jr .done -.asm_f226b - ld hl, .SurfinDudeText2 - call PrintText -.done - jp TextScriptEnd - -.SurfinDudeText1 - text_far _SurfinDudeText1 - text_end -.SurfinDudeText2 - text_far _SurfinDudeText2 - text_end -.SurfinDudeText3 - text_far _SurfinDudeText3 - text_end -.SurfinDudeText4 - text_far _SurfinDudeText4 - text_end - -BeachHousePikachuText: - text_asm - ld hl, .BeachHousePikachuText - call PrintText - ld a, PIKACHU - call PlayCry - call WaitForSoundToFinish - jp TextScriptEnd - -.BeachHousePikachuText - text_far _BeachHousePikachuText - text_end - -BeachHouseSign1Text: - text_asm - ld hl, .BeachHouseSign1Text2 - ld a, [wd472] - bit 6, a - jr z, .next - ld hl, .BeachHouseSign1Text1 -.next - call PrintText - jp TextScriptEnd - -.BeachHouseSign1Text1 - text_far _BeachHouseSign1Text1 - text_end -.BeachHouseSign1Text2 - text_far _BeachHouseSign1Text2 - text_end - -BeachHouseSign2Text: - text_asm - ld hl, .BeachHouseSign2Text2 - ld a, [wd472] - bit 6, a - jr z, .next - ld hl, .BeachHouseSign2Text1 -.next - call PrintText - jp TextScriptEnd - -.BeachHouseSign2Text1 - text_far _BeachHouseSign2Text1 - text_end -.BeachHouseSign2Text2 - text_far _BeachHouseSign2Text2 - text_end - -BeachHouseSign3Text: - text_asm - ld hl, .BeachHouseSign3Text2 - ld a, [wd472] - bit 6, a - jr z, .next - ld hl, .BeachHouseSign3Text1 -.next - call PrintText - jp TextScriptEnd - -.BeachHouseSign3Text1 - text_far _BeachHouseSign3Text1 - text_end -.BeachHouseSign3Text2 - text_far _BeachHouseSign3Text2 - text_end - -BeachHouseSign4Text: - text_asm - ld a, 1 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a - ld a, [wd472] - bit 6, a - jr z, .asm_f2369 - - ld hl, wd492 - bit 1, [hl] - jr z, .next2 - ld a, 0 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a -.next2 - ld hl, .BeachHousePrinterText2 - call PrintText - ld a, [wd492] - bit 1, a - jr z, .asm_f236f - - ld a, 1 - ld [wDoNotWaitForButtonPressAfterDisplayingText], a - ld hl, .BeachHousePrinterText3 - call PrintText - call YesNoChoice - ld a, [wCurrentMenuItem] - and a - jp z, Func_f23d0 - call SaveScreenTilesToBuffer2 - ld hl, wd730 - set 6, [hl] - xor a - ld [wUpdateSpritesEnabled], a - callfar Printer_PrepareSurfingMinigameHighScoreTileMap - call WaitForTextScrollButtonPress - ld hl, wd730 - res 6, [hl] - call GBPalWhiteOutWithDelay3 - call ReloadTilesetTilePatterns - call RestoreScreenTilesAndReloadTilePatterns - call LoadScreenTilesFromBuffer2 - call Delay3 - call GBPalNormal - ld a, 1 - ld [wUpdateSpritesEnabled], a - jr .asm_f236f -.asm_f2369 - ld hl, .BeachHousePrinterText1 - call PrintText -.asm_f236f - jp TextScriptEnd - -.BeachHousePrinterText1 - text_far _BeachHousePrinterText1 - text_waitbutton - text_end -.BeachHousePrinterText2 - text_far _BeachHousePrinterText2 - text_waitbutton - text_end -.BeachHousePrinterText3 - text_far _BeachHousePrinterText3 - text_end -.BeachHousePrinterText4 - text_far _BeachHousePrinterText4 - text_end diff --git a/scripts/BeachHouse2.asm b/scripts/BeachHouse2.asm deleted file mode 100755 index 1cf570bc..00000000 --- a/scripts/BeachHouse2.asm +++ /dev/null @@ -1,33 +0,0 @@ -Func_f23d0: - call SaveScreenTilesToBuffer2 - xor a - ld [wUpdateSpritesEnabled], a - ld hl, wd730 - set 6, [hl] - callfar PrintSurfingMinigameHighScore - ld hl, wd730 - res 6, [hl] - call GBPalWhiteOutWithDelay3 - call ReloadTilesetTilePatterns - call RestoreScreenTilesAndReloadTilePatterns - call LoadScreenTilesFromBuffer2 - call Delay3 - call GBPalNormal - ld hl, Text_f2412 - ldh a, [hOaksAideResult] - and a - jr nz, .asm_f2406 - ld hl, Text_f240c -.asm_f2406 - call PrintText - jp TextScriptEnd - -Text_f240c: - text_far _BeachHousePrinterText5 - text_waitbutton - text_end - -Text_f2412: - text_far _BeachHousePrinterText6 - text_waitbutton - text_end diff --git a/scripts/BillsHouse2.asm b/scripts/BillsHouse2.asm index b1c6e820..ca1a56ad 100755 --- a/scripts/BillsHouse2.asm +++ b/scripts/BillsHouse2.asm @@ -83,7 +83,7 @@ BillsHouseText_f24a9: text_far _BillsHouseText_1e8da text_end -Func_f24ae: +Func_f24ae:: ld a, [wCurMap] cp BILLS_HOUSE jr nz, .asm_f24d2 diff --git a/scripts/SSAnneCaptainsRoom.asm b/scripts/SSAnneCaptainsRoom.asm index 593cd872..9af4744e 100755 --- a/scripts/SSAnneCaptainsRoom.asm +++ b/scripts/SSAnneCaptainsRoom.asm @@ -45,7 +45,7 @@ SSAnne7RubText: text_far _SSAnne7RubText text_asm ld a, [wAudioROMBank] - cp BANK(AudioEngine3) + cp BANK("Audio Engine 3") ld [wAudioSavedROMBank], a jr nz, .asm_61908 call StopAllMusic diff --git a/scripts/SummerBeachHouse.asm b/scripts/SummerBeachHouse.asm new file mode 100644 index 00000000..45e8032d --- /dev/null +++ b/scripts/SummerBeachHouse.asm @@ -0,0 +1,196 @@ +SummerBeachHouse_Script: + call EnableAutoTextBoxDrawing + ret + +SummerBeachHouse_TextPointers: + dw SurfinDudeText + dw SummerBeachHousePikachuText + dw SummerBeachHouseSign1Text + dw SummerBeachHouseSign2Text + dw SummerBeachHouseSign3Text + dw SummerBeachHouseSign4Text + +SurfinDudeText: + text_asm + ld a, [wd472] + bit 6, a + jr nz, .next + ld hl, .SurfinDudeText4 + call PrintText + jr .done +.next + ld hl, wd492 + bit 0, [hl] + set 0, [hl] + jr nz, .next2 + ld hl, .SurfinDudeText1 + jr .next3 +.next2 + ld hl, .SurfinDudeText3 +.next3 + call PrintText + call YesNoChoice + ld a, [wCurrentMenuItem] + and a + jr nz, .asm_f226b + ld a, 1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + farcall SurfingPikachuMinigame + ld hl, wd492 + set 1, [hl] + jr .done +.asm_f226b + ld hl, .SurfinDudeText2 + call PrintText +.done + jp TextScriptEnd + +.SurfinDudeText1 + text_far _SurfinDudeText1 + text_end +.SurfinDudeText2 + text_far _SurfinDudeText2 + text_end +.SurfinDudeText3 + text_far _SurfinDudeText3 + text_end +.SurfinDudeText4 + text_far _SurfinDudeText4 + text_end + +SummerBeachHousePikachuText: + text_asm + ld hl, .SummerBeachHousePikachuText + call PrintText + ld a, PIKACHU + call PlayCry + call WaitForSoundToFinish + jp TextScriptEnd + +.SummerBeachHousePikachuText + text_far _SummerBeachHousePikachuText + text_end + +SummerBeachHouseSign1Text: + text_asm + ld hl, .SummerBeachHouseSign1Text2 + ld a, [wd472] + bit 6, a + jr z, .next + ld hl, .SummerBeachHouseSign1Text1 +.next + call PrintText + jp TextScriptEnd + +.SummerBeachHouseSign1Text1 + text_far _SummerBeachHouseSign1Text1 + text_end +.SummerBeachHouseSign1Text2 + text_far _SummerBeachHouseSign1Text2 + text_end + +SummerBeachHouseSign2Text: + text_asm + ld hl, .SummerBeachHouseSign2Text2 + ld a, [wd472] + bit 6, a + jr z, .next + ld hl, .SummerBeachHouseSign2Text1 +.next + call PrintText + jp TextScriptEnd + +.SummerBeachHouseSign2Text1 + text_far _SummerBeachHouseSign2Text1 + text_end +.SummerBeachHouseSign2Text2 + text_far _SummerBeachHouseSign2Text2 + text_end + +SummerBeachHouseSign3Text: + text_asm + ld hl, .SummerBeachHouseSign3Text2 + ld a, [wd472] + bit 6, a + jr z, .next + ld hl, .SummerBeachHouseSign3Text1 +.next + call PrintText + jp TextScriptEnd + +.SummerBeachHouseSign3Text1 + text_far _SummerBeachHouseSign3Text1 + text_end +.SummerBeachHouseSign3Text2 + text_far _SummerBeachHouseSign3Text2 + text_end + +SummerBeachHouseSign4Text: + text_asm + ld a, 1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + ld a, [wd472] + bit 6, a + jr z, .asm_f2369 + + ld hl, wd492 + bit 1, [hl] + jr z, .next2 + ld a, 0 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a +.next2 + ld hl, .SummerBeachHousePrinterText2 + call PrintText + ld a, [wd492] + bit 1, a + jr z, .asm_f236f + + ld a, 1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + ld hl, .SummerBeachHousePrinterText3 + call PrintText + call YesNoChoice + ld a, [wCurrentMenuItem] + and a + jp z, Func_f23d0 + call SaveScreenTilesToBuffer2 + ld hl, wd730 + set 6, [hl] + xor a + ld [wUpdateSpritesEnabled], a + callfar Printer_PrepareSurfingMinigameHighScoreTileMap + call WaitForTextScrollButtonPress + ld hl, wd730 + res 6, [hl] + call GBPalWhiteOutWithDelay3 + call ReloadTilesetTilePatterns + call RestoreScreenTilesAndReloadTilePatterns + call LoadScreenTilesFromBuffer2 + call Delay3 + call GBPalNormal + ld a, 1 + ld [wUpdateSpritesEnabled], a + jr .asm_f236f +.asm_f2369 + ld hl, .SummerBeachHousePrinterText1 + call PrintText +.asm_f236f + jp TextScriptEnd + +.SummerBeachHousePrinterText1 + text_far _SummerBeachHousePrinterText1 + text_waitbutton + text_end + +.SummerBeachHousePrinterText2 + text_far _SummerBeachHousePrinterText2 + text_waitbutton + text_end + +.SummerBeachHousePrinterText3 + text_far _SummerBeachHousePrinterText3 + text_end + +.SummerBeachHousePrinterText4 + text_far _SummerBeachHousePrinterText4 + text_end diff --git a/scripts/SummerBeachHouse2.asm b/scripts/SummerBeachHouse2.asm new file mode 100755 index 00000000..4ac1f705 --- /dev/null +++ b/scripts/SummerBeachHouse2.asm @@ -0,0 +1,33 @@ +Func_f23d0: + call SaveScreenTilesToBuffer2 + xor a + ld [wUpdateSpritesEnabled], a + ld hl, wd730 + set 6, [hl] + callfar PrintSurfingMinigameHighScore + ld hl, wd730 + res 6, [hl] + call GBPalWhiteOutWithDelay3 + call ReloadTilesetTilePatterns + call RestoreScreenTilesAndReloadTilePatterns + call LoadScreenTilesFromBuffer2 + call Delay3 + call GBPalNormal + ld hl, Text_f2412 + ldh a, [hOaksAideResult] + and a + jr nz, .asm_f2406 + ld hl, Text_f240c +.asm_f2406 + call PrintText + jp TextScriptEnd + +Text_f240c: + text_far _SummerBeachHousePrinterText5 + text_waitbutton + text_end + +Text_f2412: + text_far _SummerBeachHousePrinterText6 + text_waitbutton + text_end diff --git a/text.asm b/text.asm index 3f76cc98..cb021819 100644 --- a/text.asm +++ b/text.asm @@ -96,7 +96,7 @@ INCLUDE "text/Route16Gate2F.asm" INCLUDE "text/Route16FlyHouse.asm" INCLUDE "text/Route18Gate1F.asm" INCLUDE "text/Route18Gate2F.asm" -INCLUDE "text/BeachHouse.asm" +INCLUDE "text/SummerBeachHouse.asm" INCLUDE "text/Route22Gate.asm" INCLUDE "text/VictoryRoad2F.asm" INCLUDE "text/BillsHouse.asm" diff --git a/text/BeachHouse.asm b/text/BeachHouse.asm deleted file mode 100644 index d15e0b9a..00000000 --- a/text/BeachHouse.asm +++ /dev/null @@ -1,107 +0,0 @@ -_SurfinDudeText1:: - text "Whoa!" - - para "Your PIKACHU knows" - line "how to SURF! So," - cont "I'm not alone..." - - para "Great! You earned" - line "the right to SURF" - cont "with the DUDE!" - - para "Give it a go?" - done - -_SurfinDudeText2:: - text "Come SURF anytime," - line "my friend!" - done - -_SurfinDudeText3:: - text "Wanna go SURF?" - done - -_SurfinDudeText4:: - text "Dogs and burgers" - line "on special today!" - done - -_BeachHousePikachuText:: - text "PIKACHU: Pikaa" - done - -_BeachHouseSign1Text1:: - text "SURFIN' DUDE's" - line "scribbles..." - - para "When I shoot the" - line "tube, the tunes" - cont "hit the groove!" - done - -_BeachHouseSign1Text2:: - text "30 years of waves!" - line "SURFIN' DUDE" - done - -_BeachHouseSign2Text1:: - text "SURFING TIP 1!" - - para "After flips, line" - line "the board up with" - cont "a wave for a cool" - cont "effect!" - done - -_BeachHouseSign2Text2:: - text "SUMMER BEACH HOUSE" - line "#MON welcome!" - done - -_BeachHouseSign3Text1:: - text "SURFING TIP 2!" - - para "Pulling flips in" - line "a jump is totally" - cont "rad!" - done - -_BeachHouseSign3Text2:: - text "The sea unites" - line "all in surfdom!" - done - -_BeachHousePrinterText1:: - text "It's some sort of" - line "a machine...@" - text_end - -_BeachHousePrinterText2:: - text "SUMMER BEACH HOUSE" - line "PRINTER, it says.@" - text_end - -_BeachHousePrinterText3:: - text "The Hi-Score is" - line "shown." - - para "PRINT it out?" - done - -_BeachHousePrinterText4:: - text "SUMMER BEACH HOUSE" - line "PRINTER, it says." - - para "The Hi-Score is" - line "shown." - - para "PRINT it out?" - done - -_BeachHousePrinterText5:: - text "PRINT completed.@" - text_end - -_BeachHousePrinterText6:: - text "PRINT error!@" - text_end diff --git a/text/SummerBeachHouse.asm b/text/SummerBeachHouse.asm new file mode 100644 index 00000000..ed28fe06 --- /dev/null +++ b/text/SummerBeachHouse.asm @@ -0,0 +1,107 @@ +_SurfinDudeText1:: + text "Whoa!" + + para "Your PIKACHU knows" + line "how to SURF! So," + cont "I'm not alone..." + + para "Great! You earned" + line "the right to SURF" + cont "with the DUDE!" + + para "Give it a go?" + done + +_SurfinDudeText2:: + text "Come SURF anytime," + line "my friend!" + done + +_SurfinDudeText3:: + text "Wanna go SURF?" + done + +_SurfinDudeText4:: + text "Dogs and burgers" + line "on special today!" + done + +_SummerBeachHousePikachuText:: + text "PIKACHU: Pikaa" + done + +_SummerBeachHouseSign1Text1:: + text "SURFIN' DUDE's" + line "scribbles..." + + para "When I shoot the" + line "tube, the tunes" + cont "hit the groove!" + done + +_SummerBeachHouseSign1Text2:: + text "30 years of waves!" + line "SURFIN' DUDE" + done + +_SummerBeachHouseSign2Text1:: + text "SURFING TIP 1!" + + para "After flips, line" + line "the board up with" + cont "a wave for a cool" + cont "effect!" + done + +_SummerBeachHouseSign2Text2:: + text "SUMMER BEACH HOUSE" + line "#MON welcome!" + done + +_SummerBeachHouseSign3Text1:: + text "SURFING TIP 2!" + + para "Pulling flips in" + line "a jump is totally" + cont "rad!" + done + +_SummerBeachHouseSign3Text2:: + text "The sea unites" + line "all in surfdom!" + done + +_SummerBeachHousePrinterText1:: + text "It's some sort of" + line "a machine...@" + text_end + +_SummerBeachHousePrinterText2:: + text "SUMMER BEACH HOUSE" + line "PRINTER, it says.@" + text_end + +_SummerBeachHousePrinterText3:: + text "The Hi-Score is" + line "shown." + + para "PRINT it out?" + done + +_SummerBeachHousePrinterText4:: + text "SUMMER BEACH HOUSE" + line "PRINTER, it says." + + para "The Hi-Score is" + line "shown." + + para "PRINT it out?" + done + +_SummerBeachHousePrinterText5:: + text "PRINT completed.@" + text_end + +_SummerBeachHousePrinterText6:: + text "PRINT error!@" + text_end diff --git a/wram.asm b/wram.asm index ed482c64..5ff2cebe 100755 --- a/wram.asm +++ b/wram.asm @@ -260,23 +260,8 @@ wAnimatedObjectsData:: wAnimatedObjectStartTileOffsets:: ds 10 * 2 -wAnimatedObjectDataStructs:: -animated_object: macro -\1Index:: db ; 0 -\1FramesetID:: db ; 1 -\1AnimSeqID:: db ; 2 -\1TileID:: db ; 3 -\1XCoord:: db ; 4 -\1YCoord:: db ; 5 -\1XOffset:: db ; 6 -\1YOffset:: db ; 7 -\1Duration:: db ; 8 -\1DurationOffset:: db ; 9 -\1FrameIndex:: db ; a - ds 5 -\1End:: - endm +wAnimatedObjectDataStructs:: wAnimatedObject0:: animated_object wAnimatedObject0 wAnimatedObject1:: animated_object wAnimatedObject1 wAnimatedObject2:: animated_object wAnimatedObject2 @@ -771,7 +756,7 @@ wPikaPicAnimObjectDataBuffer:: wNumStepsToTake:: ; used in Pallet Town scripted movement ds 23 -wPikaPicAnimObjectDataBufferEnd:: ;ccb8 +wPikaPicAnimObjectDataBufferEnd:: ds 26 wRLEByteCount:: @@ -3506,12 +3491,12 @@ wBoxMonNicksEnd:: wBoxDataEnd:: wGBCBasePalPointers:: ds NUM_ACTIVE_PALS * 2 -wGBCPal:: ds PAL_SIZE +wGBCPal:: ds PALETTE_SIZE wLastBGP:: ds 1 wLastOBP0:: ds 1 wLastOBP1:: ds 1 wdef5:: ds 1 -wBGPPalsBuffer:: ds NUM_ACTIVE_PALS * PAL_SIZE +wBGPPalsBuffer:: ds NUM_ACTIVE_PALS * PALETTE_SIZE SECTION "Stack", WRAMX wStack:: -- cgit v1.2.3