diff options
author | entrpntr <12521136+entrpntr@users.noreply.github.com> | 2020-06-03 19:58:45 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-03 19:58:45 -0400 |
commit | d3a6668b1ce4336f9a4443c70376039b700ee012 (patch) | |
tree | 954c9cf0cbfad8207399563d36fd64d02c6f16ce | |
parent | 7cc52fe23bac6ab9b2d58667e825aef62dd74e03 (diff) | |
parent | 1210a5ef54141eeeebf79132a3124a8392c35c4e (diff) |
Merge pull request #41 from libjet/bank23
Disassemble bank $23
114 files changed, 6710 insertions, 3198 deletions
diff --git a/constants/sprite_anim_constants.asm b/constants/sprite_anim_constants.asm index 79d1155c..3181da67 100644 --- a/constants/sprite_anim_constants.asm +++ b/constants/sprite_anim_constants.asm @@ -1,46 +1,46 @@ ; sprite_anim_struct members (see macros/wram.asm) const_def - const SPRITEANIMSTRUCT_INDEX ; 0 - const SPRITEANIMSTRUCT_FRAMESET_ID ; 1 - const SPRITEANIMSTRUCT_ANIM_SEQ_ID ; 2 - const SPRITEANIMSTRUCT_TILE_ID ; 3 - const SPRITEANIMSTRUCT_XCOORD ; 4 - const SPRITEANIMSTRUCT_YCOORD ; 5 - const SPRITEANIMSTRUCT_XOFFSET ; 6 - const SPRITEANIMSTRUCT_YOFFSET ; 7 - const SPRITEANIMSTRUCT_DURATION ; 8 - const SPRITEANIMSTRUCT_DURATIONOFFSET ; 9 - const SPRITEANIMSTRUCT_FRAME ; a - const SPRITEANIMSTRUCT_JUMPTABLE_INDEX ; b - const SPRITEANIMSTRUCT_0C ; c - const SPRITEANIMSTRUCT_0D ; d - const SPRITEANIMSTRUCT_0E ; e - const SPRITEANIMSTRUCT_0F ; f + const SPRITEANIMSTRUCT_INDEX ; 00 + const SPRITEANIMSTRUCT_FRAMESET_ID ; 01 + const SPRITEANIMSTRUCT_ANIM_SEQ_ID ; 02 + const SPRITEANIMSTRUCT_TILE_ID ; 03 + const SPRITEANIMSTRUCT_XCOORD ; 04 + const SPRITEANIMSTRUCT_YCOORD ; 05 + const SPRITEANIMSTRUCT_XOFFSET ; 06 + const SPRITEANIMSTRUCT_YOFFSET ; 07 + const SPRITEANIMSTRUCT_DURATION ; 08 + const SPRITEANIMSTRUCT_DURATIONOFFSET ; 09 + const SPRITEANIMSTRUCT_FRAME ; 0a + const SPRITEANIMSTRUCT_JUMPTABLE_INDEX ; 0b + const SPRITEANIMSTRUCT_0C ; 0c + const SPRITEANIMSTRUCT_0D ; 0d + const SPRITEANIMSTRUCT_0E ; 0e + const SPRITEANIMSTRUCT_0F ; 0f SPRITEANIMSTRUCT_LENGTH EQU const_value NUM_SPRITE_ANIM_STRUCTS EQU 10 ; see wSpriteAnimationStructs ; SpriteAnimSeqData indexes (see data/sprite_anims/sequences.asm) const_def const SPRITE_ANIM_INDEX_PARTY_MON ; 00 - const SPRITE_ANIM_INDEX_01 ; 01 - const SPRITE_ANIM_INDEX_02 ; 02 - const SPRITE_ANIM_INDEX_03 ; 03 - const SPRITE_ANIM_INDEX_04 ; 04 - const SPRITE_ANIM_INDEX_05 ; 05 - const SPRITE_ANIM_INDEX_06 ; 06 - const SPRITE_ANIM_INDEX_07 ; 07 - const SPRITE_ANIM_INDEX_08 ; 08 - const SPRITE_ANIM_INDEX_09 ; 09 - const SPRITE_ANIM_INDEX_0A ; 0a - const SPRITE_ANIM_INDEX_0B ; 0b - const SPRITE_ANIM_INDEX_0C ; 0c - const SPRITE_ANIM_INDEX_0D ; 0d - const SPRITE_ANIM_INDEX_0E ; 0e + const SPRITE_ANIM_INDEX_GS_INTRO_BUBBLE ; 01 + const SPRITE_ANIM_INDEX_GS_INTRO_SHELLDER ; 02 + const SPRITE_ANIM_INDEX_GS_INTRO_MAGIKARP ; 03 + const SPRITE_ANIM_INDEX_GS_INTRO_LAPRAS ; 04 + const SPRITE_ANIM_INDEX_GS_INTRO_LAPRAS_2 ; 05 + const SPRITE_ANIM_INDEX_GS_INTRO_NOTE ; 06 + const SPRITE_ANIM_INDEX_GS_INTRO_INVISIBLE_NOTE ; 07 + const SPRITE_ANIM_INDEX_GS_INTRO_JIGGLYPUFF ; 08 + const SPRITE_ANIM_INDEX_GS_INTRO_PIKACHU ; 09 + const SPRITE_ANIM_INDEX_GS_INTRO_PIKACHU_TAIL ; 0a + const SPRITE_ANIM_INDEX_GS_INTRO_FIREBALL ; 0b + const SPRITE_ANIM_INDEX_GS_INTRO_CHIKORITA ; 0c + const SPRITE_ANIM_INDEX_GS_INTRO_CYNDAQUIL ; 0d + const SPRITE_ANIM_INDEX_GS_INTRO_TOTODILE ; 0e const SPRITE_ANIM_INDEX_GS_TITLE_TRAIL ; 0f - const SPRITE_ANIM_INDEX_UNUSED_10 ; 10 - const SPRITE_ANIM_INDEX_UNUSED_11 ; 11 - const SPRITE_ANIM_INDEX_UNUSED_12 ; 12 - const SPRITE_ANIM_INDEX_UNUSED_13 ; 13 + const SPRITE_ANIM_INDEX_UNUSED_PIKACHU ; 10 + const SPRITE_ANIM_INDEX_UNUSED_PIKACHU_TAIL ; 11 + const SPRITE_ANIM_INDEX_UNUSED_NOTE ; 12 + const SPRITE_ANIM_INDEX_UNUSED_JIGGLYPUFF ; 13 const SPRITE_ANIM_INDEX_NAMING_SCREEN_CURSOR ; 14 const SPRITE_ANIM_INDEX_GAMEFREAK_LOGO ; 15 const SPRITE_ANIM_INDEX_GS_INTRO_STAR ; 16 @@ -70,7 +70,49 @@ NUM_SPRITE_ANIM_STRUCTS EQU 10 ; see wSpriteAnimationStructs const SPRITE_ANIM_INDEX_EGG_HATCH ; 2e ; DoAnimFrame.Jumptable indexes (see engine/gfx/sprite_anims.asm) -SPRITE_ANIM_SEQ_NULL EQU $00 + const_def + const SPRITE_ANIM_SEQ_NULL ; 00 + const SPRITE_ANIM_SEQ_PARTY_MON ; 01 + const SPRITE_ANIM_SEQ_PARTY_MON_SWITCH ; 02 + const SPRITE_ANIM_SEQ_PARTY_MON_SELECTED ; 03 + const SPRITE_ANIM_SEQ_GS_INTRO_BUBBLE ; 04 + const SPRITE_ANIM_SEQ_GS_INTRO_SHELLDER ; 05 + const SPRITE_ANIM_SEQ_GS_INTRO_MAGIKARP ; 06 + const SPRITE_ANIM_SEQ_GS_INTRO_LAPRAS ; 07 + const SPRITE_ANIM_SEQ_GS_INTRO_LAPRAS_2 ; 08 + const SPRITE_ANIM_SEQ_GS_INTRO_NOTE ; 09 + const SPRITE_ANIM_SEQ_GS_INTRO_JIGGLYPUFF ; 0a + const SPRITE_ANIM_SEQ_GS_INTRO_PIKACHU ; 0b + const SPRITE_ANIM_SEQ_GS_INTRO_PIKACHU_TAIL ; 0c + const SPRITE_ANIM_SEQ_GS_INTRO_FIREBALL ; 0d + const SPRITE_ANIM_SEQ_GS_INTRO_CHIKORITA_TOTODILE ; 0e + const SPRITE_ANIM_SEQ_GS_INTRO_CYNDAQUIL ; 0f + const SPRITE_ANIM_SEQ_GS_TITLE_TRAIL ; 10 + const SPRITE_ANIM_SEQ_UNUSED_PIKACHU ; 11 + const SPRITE_ANIM_SEQ_UNUSED_PIKACHU_TAIL ; 12 + const SPRITE_ANIM_SEQ_UNUSED_NOTE ; 13 + const SPRITE_ANIM_SEQ_UNUSED_JIGGLYPUFF ; 14 + const SPRITE_ANIM_SEQ_NAMING_SCREEN_CURSOR ; 15 + const SPRITE_ANIM_SEQ_GAMEFREAK_LOGO ; 16 + const SPRITE_ANIM_SEQ_GS_INTRO_STAR ; 17 + const SPRITE_ANIM_SEQ_GS_INTRO_SPARKLE ; 18 + const SPRITE_ANIM_SEQ_SLOTS_GOLEM ; 19 + const SPRITE_ANIM_SEQ_SLOTS_CHANSEY ; 1a + const SPRITE_ANIM_SEQ_SLOTS_EGG ; 1b + const SPRITE_ANIM_SEQ_MAIL_CURSOR ; 1c + const SPRITE_ANIM_SEQ_UNUSED_CURSOR ; 1d + const SPRITE_ANIM_SEQ_DUMMY_GAME_CURSOR ; 1e + const SPRITE_ANIM_SEQ_POKEGEAR_ARROW ; 1f + const SPRITE_ANIM_SEQ_TRADE_POKE_BALL ; 20 + const SPRITE_ANIM_SEQ_TRADE_TUBE_BULGE ; 21 + const SPRITE_ANIM_SEQ_TRADEMON_IN_TUBE ; 22 + const SPRITE_ANIM_SEQ_REVEAL_NEW_MON ; 23 + const SPRITE_ANIM_SEQ_RADIO_TUNING_KNOB ; 24 + const SPRITE_ANIM_SEQ_CUT_LEAVES ; 25 + const SPRITE_ANIM_SEQ_FLY_FROM ; 26 + const SPRITE_ANIM_SEQ_FLY_LEAF ; 27 + const SPRITE_ANIM_SEQ_FLY_TO ; 28 + const SPRITE_ANIM_SEQ_GS_INTRO_HO_OH_LUGIA ; 29 ; SpriteAnimFrameData indexes (see data/sprite_anims/framesets.asm) const_def @@ -78,49 +120,58 @@ SPRITE_ANIM_SEQ_NULL EQU $00 const SPRITE_ANIM_FRAMESET_PARTY_MON ; 01 const SPRITE_ANIM_FRAMESET_PARTY_MON_WITH_MAIL ; 02 const SPRITE_ANIM_FRAMESET_PARTY_MON_WITH_ITEM ; 03 - const SPRITE_ANIM_FRAMESET_PARTY_MON_FAST ; 04 - const SPRITE_ANIM_FRAMESET_PARTY_MON_WITH_MAIL_FAST ; 05 - const SPRITE_ANIM_FRAMESET_PARTY_MON_WITH_ITEM_FAST ; 06 - const SPRITE_ANIM_FRAMESET_GS_TITLE_TRAIL ; 07 - const SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR ; 08 - const SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR_BIG ; 09 - const SPRITE_ANIM_FRAMESET_GAMEFREAK_LOGO ; 0a - const SPRITE_ANIM_FRAMESET_GS_INTRO_STAR ; 0b - const SPRITE_ANIM_FRAMESET_GS_INTRO_SPARKLE ; 0c - const SPRITE_ANIM_FRAMESET_SLOTS_GOLEM ; 0d - const SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY ; 0e - const SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY_2 ; 0f - const SPRITE_ANIM_FRAMESET_SLOTS_EGG ; 10 - const SPRITE_ANIM_FRAMESET_RED_WALK ; 11 - const SPRITE_ANIM_FRAMESET_STILL_CURSOR ; 12 - const SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL ; 13 - const SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL_WOBBLE ; 14 - const SPRITE_ANIM_FRAMESET_TRADE_POOF ; 15 - const SPRITE_ANIM_FRAMESET_TRADE_TUBE_BULGE ; 16 - const SPRITE_ANIM_FRAMESET_TRADEMON_ICON ; 17 - const SPRITE_ANIM_FRAMESET_TRADEMON_BUBBLE ; 18 - const SPRITE_ANIM_FRAMESET_EVOLUTION_BALL_OF_LIGHT ; 19 - const SPRITE_ANIM_FRAMESET_RADIO_TUNING_KNOB ; 1a - const SPRITE_ANIM_FRAMESET_MAGNET_TRAIN_RED ; 1b - const SPRITE_ANIM_FRAMESET_UNUSED_1C ; 1c - const SPRITE_ANIM_FRAMESET_LEAF ; 1d - const SPRITE_ANIM_FRAMESET_CUT_TREE ; 1e - const SPRITE_ANIM_FRAMESET_EGG_CRACK ; 1f - const SPRITE_ANIM_FRAMESET_EGG_HATCH_1 ; 20 - const SPRITE_ANIM_FRAMESET_EGG_HATCH_2 ; 21 - const SPRITE_ANIM_FRAMESET_EGG_HATCH_3 ; 22 - const SPRITE_ANIM_FRAMESET_EGG_HATCH_4 ; 23 - const SPRITE_ANIM_FRAMESET_GS_INTRO_HO_OH ; 24 - const SPRITE_ANIM_FRAMESET_HEADBUTT ; 25 - const SPRITE_ANIM_FRAMESET_EZCHAT_CURSOR_1 ; 26 - const SPRITE_ANIM_FRAMESET_EZCHAT_CURSOR_2 ; 27 - const SPRITE_ANIM_FRAMESET_EZCHAT_CURSOR_3 ; 28 - const SPRITE_ANIM_FRAMESET_EZCHAT_CURSOR_4 ; 29 - const SPRITE_ANIM_FRAMESET_EZCHAT_CURSOR_5 ; 2a - const SPRITE_ANIM_FRAMESET_EZCHAT_CURSOR_6 ; 2b - const SPRITE_ANIM_FRAMESET_EZCHAT_CURSOR_7 ; 2c - const SPRITE_ANIM_FRAMESET_BLUE_WALK ; 2d - const SPRITE_ANIM_FRAMESET_MAGNET_TRAIN_BLUE ; 2e + const SPRITE_ANIM_FRAMESET_GS_INTRO_BUBBLE ; 04 + const SPRITE_ANIM_FRAMESET_GS_INTRO_SHELLDER ; 05 + const SPRITE_ANIM_FRAMESET_GS_INTRO_MAGIKARP ; 06 + const SPRITE_ANIM_FRAMESET_GS_INTRO_LAPRAS ; 07 + const SPRITE_ANIM_FRAMESET_GS_INTRO_LAPRAS_2 ; 08 + const SPRITE_ANIM_FRAMESET_GS_INTRO_NOTE ; 09 + const SPRITE_ANIM_FRAMESET_GS_INTRO_INVISIBLE_NOTE ; 0a + const SPRITE_ANIM_FRAMESET_GS_INTRO_JIGGLYPUFF ; 0b + const SPRITE_ANIM_FRAMESET_GS_INTRO_JIGGLYPUFF_2 ; 0c + const SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU ; 0d + const SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_2 ; 0e + const SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_3 ; 0f + const SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_TAIL ; 10 + const SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_TAIL_2 ; 11 + const SPRITE_ANIM_FRAMESET_GS_INTRO_FIREBALL ; 12 + const SPRITE_ANIM_FRAMESET_GS_INTRO_CHIKORITA ; 13 + const SPRITE_ANIM_FRAMESET_GS_INTRO_CYNDAQUIL ; 14 + const SPRITE_ANIM_FRAMESET_GS_INTRO_TOTODILE ; 15 + const SPRITE_ANIM_FRAMESET_GS_TITLE_TRAIL ; 16 + const SPRITE_ANIM_FRAMESET_UNUSED_PIKACHU ; 17 + const SPRITE_ANIM_FRAMESET_UNUSED_PIKACHU_2 ; 18 + const SPRITE_ANIM_FRAMESET_UNUSED_PIKACHU_3 ; 19 + const SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR ; 1a + const SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR_BIG ; 1b + const SPRITE_ANIM_FRAMESET_GAMEFREAK_LOGO ; 1c + const SPRITE_ANIM_FRAMESET_GS_INTRO_STAR ; 1d + const SPRITE_ANIM_FRAMESET_GS_INTRO_SPARKLE ; 1e + const SPRITE_ANIM_FRAMESET_SLOTS_GOLEM ; 1f + const SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY ; 20 + const SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY_2 ; 21 + const SPRITE_ANIM_FRAMESET_SLOTS_EGG ; 22 + const SPRITE_ANIM_FRAMESET_RED_WALK ; 23 + const SPRITE_ANIM_FRAMESET_STILL_CURSOR ; 24 + const SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL ; 25 + const SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL_WOBBLE ; 26 + const SPRITE_ANIM_FRAMESET_TRADE_POOF ; 27 + const SPRITE_ANIM_FRAMESET_TRADE_TUBE_BULGE ; 28 + const SPRITE_ANIM_FRAMESET_TRADEMON_ICON ; 29 + const SPRITE_ANIM_FRAMESET_TRADEMON_BUBBLE ; 2a + const SPRITE_ANIM_FRAMESET_EVOLUTION_BALL_OF_LIGHT ; 2b + const SPRITE_ANIM_FRAMESET_RADIO_TUNING_KNOB ; 2c + const SPRITE_ANIM_FRAMESET_MAGNET_TRAIN_RED ; 2d + const SPRITE_ANIM_FRAMESET_UNUSED_1C ; 2e + const SPRITE_ANIM_FRAMESET_LEAF ; 2f + const SPRITE_ANIM_FRAMESET_CUT_TREE ; 30 + const SPRITE_ANIM_FRAMESET_EGG_CRACK ; 31 + const SPRITE_ANIM_FRAMESET_EGG_HATCH_1 ; 32 + const SPRITE_ANIM_FRAMESET_EGG_HATCH_2 ; 33 + const SPRITE_ANIM_FRAMESET_EGG_HATCH_3 ; 34 + const SPRITE_ANIM_FRAMESET_EGG_HATCH_4 ; 35 + const SPRITE_ANIM_FRAMESET_GS_INTRO_HO_OH_LUGIA ; 36 + const SPRITE_ANIM_FRAMESET_HEADBUTT ; 37 ; SpriteAnimOAMData indexes (see data/sprite_anims/oam.asm) const_def @@ -210,20 +261,9 @@ SPRITE_ANIM_SEQ_NULL EQU $00 const SPRITE_ANIM_OAMSET_CUT_TREE_4 ; 53 const SPRITE_ANIM_OAMSET_EGG_CRACK ; 54 const SPRITE_ANIM_OAMSET_EGG_HATCH ; 55 - const SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_1 ; 56 - const SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_2 ; 57 - const SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_3 ; 58 - const SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_4 ; 59 - const SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_5 ; 5a + const SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_1 ; 56 + const SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_2 ; 57 + const SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_3 ; 58 + const SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_4 ; 59 + const SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_5 ; 5a const SPRITE_ANIM_OAMSET_HEADBUTT_TREE_2 ; 5b - const SPRITE_ANIM_OAMSET_EZCHAT_CURSOR_1 ; 5c - const SPRITE_ANIM_OAMSET_EZCHAT_CURSOR_2 ; 5d - const SPRITE_ANIM_OAMSET_EZCHAT_CURSOR_3 ; 5e - const SPRITE_ANIM_OAMSET_EZCHAT_CURSOR_4 ; 5f - const SPRITE_ANIM_OAMSET_EZCHAT_CURSOR_5 ; 60 - const SPRITE_ANIM_OAMSET_EZCHAT_CURSOR_6 ; 61 - const SPRITE_ANIM_OAMSET_EZCHAT_CURSOR_7 ; 62 - const SPRITE_ANIM_OAMSET_BLUE_WALK_1 ; 63 - const SPRITE_ANIM_OAMSET_BLUE_WALK_2 ; 64 - const SPRITE_ANIM_OAMSET_MAGNET_TRAIN_BLUE_1 ; 65 - const SPRITE_ANIM_OAMSET_MAGNET_TRAIN_BLUE_2 ; 66 diff --git a/data/icon_pointers.asm b/data/icon_pointers.asm new file mode 100755 index 00000000..bfe07abb --- /dev/null +++ b/data/icon_pointers.asm @@ -0,0 +1,41 @@ +IconPointers: +; entries correspond to ICON_* constants + dw NullIcon + dw PoliwagIcon + dw JigglypuffIcon + dw DiglettIcon + dw PikachuIcon + dw StaryuIcon + dw FishIcon + dw BirdIcon + dw MonsterIcon + dw ClefairyIcon + dw OddishIcon + dw BugIcon + dw GhostIcon + dw LaprasIcon + dw HumanshapeIcon + dw FoxIcon + dw EquineIcon + dw ShellIcon + dw BlobIcon + dw SerpentIcon + dw VoltorbIcon + dw SquirtleIcon + dw BulbasaurIcon + dw CharmanderIcon + dw CaterpillarIcon + dw UnownIcon + dw GeodudeIcon + dw FighterIcon + dw EggIcon + dw JellyfishIcon + dw MothIcon + dw BatIcon + dw SnorlaxIcon + dw HoOhIcon + dw LugiaIcon + dw GyaradosIcon + dw SlowpokeIcon + dw SudowoodoIcon + dw BigmonIcon diff --git a/data/pokemon/menu_icons.asm b/data/pokemon/menu_icons.asm new file mode 100755 index 00000000..f378cbfb --- /dev/null +++ b/data/pokemon/menu_icons.asm @@ -0,0 +1,254 @@ +; party menu icons + +MonMenuIcons: + db ICON_BULBASAUR ; BULBASAUR + db ICON_BULBASAUR ; IVYSAUR + db ICON_BULBASAUR ; VENUSAUR + db ICON_CHARMANDER ; CHARMANDER + db ICON_CHARMANDER ; CHARMELEON + db ICON_BIGMON ; CHARIZARD + db ICON_SQUIRTLE ; SQUIRTLE + db ICON_SQUIRTLE ; WARTORTLE + db ICON_SQUIRTLE ; BLASTOISE + db ICON_CATERPILLAR ; CATERPIE + db ICON_CATERPILLAR ; METAPOD + db ICON_MOTH ; BUTTERFREE + db ICON_CATERPILLAR ; WEEDLE + db ICON_CATERPILLAR ; KAKUNA + db ICON_BUG ; BEEDRILL + db ICON_BIRD ; PIDGEY + db ICON_BIRD ; PIDGEOTTO + db ICON_BIRD ; PIDGEOT + db ICON_FOX ; RATTATA + db ICON_FOX ; RATICATE + db ICON_BIRD ; SPEAROW + db ICON_BIRD ; FEAROW + db ICON_SERPENT ; EKANS + db ICON_SERPENT ; ARBOK + db ICON_PIKACHU ; PIKACHU + db ICON_PIKACHU ; RAICHU + db ICON_MONSTER ; SANDSHREW + db ICON_MONSTER ; SANDSLASH + db ICON_FOX ; NIDORAN_F + db ICON_FOX ; NIDORINA + db ICON_MONSTER ; NIDOQUEEN + db ICON_FOX ; NIDORAN_M + db ICON_FOX ; NIDORINO + db ICON_MONSTER ; NIDOKING + db ICON_CLEFAIRY ; CLEFAIRY + db ICON_CLEFAIRY ; CLEFABLE + db ICON_FOX ; VULPIX + db ICON_FOX ; NINETALES + db ICON_JIGGLYPUFF ; JIGGLYPUFF + db ICON_JIGGLYPUFF ; WIGGLYTUFF + db ICON_BAT ; ZUBAT + db ICON_BAT ; GOLBAT + db ICON_ODDISH ; ODDISH + db ICON_ODDISH ; GLOOM + db ICON_ODDISH ; VILEPLUME + db ICON_BUG ; PARAS + db ICON_BUG ; PARASECT + db ICON_CATERPILLAR ; VENONAT + db ICON_MOTH ; VENOMOTH + db ICON_DIGLETT ; DIGLETT + db ICON_DIGLETT ; DUGTRIO + db ICON_FOX ; MEOWTH + db ICON_FOX ; PERSIAN + db ICON_MONSTER ; PSYDUCK + db ICON_MONSTER ; GOLDUCK + db ICON_FIGHTER ; MANKEY + db ICON_FIGHTER ; PRIMEAPE + db ICON_FOX ; GROWLITHE + db ICON_FOX ; ARCANINE + db ICON_POLIWAG ; POLIWAG + db ICON_POLIWAG ; POLIWHIRL + db ICON_POLIWAG ; POLIWRATH + db ICON_HUMANSHAPE ; ABRA + db ICON_HUMANSHAPE ; KADABRA + db ICON_HUMANSHAPE ; ALAKAZAM + db ICON_FIGHTER ; MACHOP + db ICON_FIGHTER ; MACHOKE + db ICON_FIGHTER ; MACHAMP + db ICON_ODDISH ; BELLSPROUT + db ICON_ODDISH ; WEEPINBELL + db ICON_ODDISH ; VICTREEBEL + db ICON_JELLYFISH ; TENTACOOL + db ICON_JELLYFISH ; TENTACRUEL + db ICON_GEODUDE ; GEODUDE + db ICON_GEODUDE ; GRAVELER + db ICON_GEODUDE ; GOLEM + db ICON_EQUINE ; PONYTA + db ICON_EQUINE ; RAPIDASH + db ICON_SLOWPOKE ; SLOWPOKE + db ICON_SLOWPOKE ; SLOWBRO + db ICON_VOLTORB ; MAGNEMITE + db ICON_VOLTORB ; MAGNETON + db ICON_BIRD ; FARFETCH_D + db ICON_BIRD ; DODUO + db ICON_BIRD ; DODRIO + db ICON_LAPRAS ; SEEL + db ICON_LAPRAS ; DEWGONG + db ICON_BLOB ; GRIMER + db ICON_BLOB ; MUK + db ICON_SHELL ; SHELLDER + db ICON_SHELL ; CLOYSTER + db ICON_GHOST ; GASTLY + db ICON_GHOST ; HAUNTER + db ICON_GHOST ; GENGAR + db ICON_SERPENT ; ONIX + db ICON_HUMANSHAPE ; DROWZEE + db ICON_HUMANSHAPE ; HYPNO + db ICON_SHELL ; KRABBY + db ICON_SHELL ; KINGLER + db ICON_VOLTORB ; VOLTORB + db ICON_VOLTORB ; ELECTRODE + db ICON_ODDISH ; EXEGGCUTE + db ICON_ODDISH ; EXEGGUTOR + db ICON_MONSTER ; CUBONE + db ICON_MONSTER ; MAROWAK + db ICON_FIGHTER ; HITMONLEE + db ICON_FIGHTER ; HITMONCHAN + db ICON_MONSTER ; LICKITUNG + db ICON_BLOB ; KOFFING + db ICON_BLOB ; WEEZING + db ICON_EQUINE ; RHYHORN + db ICON_MONSTER ; RHYDON + db ICON_CLEFAIRY ; CHANSEY + db ICON_ODDISH ; TANGELA + db ICON_MONSTER ; KANGASKHAN + db ICON_FISH ; HORSEA + db ICON_FISH ; SEADRA + db ICON_FISH ; GOLDEEN + db ICON_FISH ; SEAKING + db ICON_STARYU ; STARYU + db ICON_STARYU ; STARMIE + db ICON_HUMANSHAPE ; MR__MIME + db ICON_BUG ; SCYTHER + db ICON_HUMANSHAPE ; JYNX + db ICON_HUMANSHAPE ; ELECTABUZZ + db ICON_HUMANSHAPE ; MAGMAR + db ICON_BUG ; PINSIR + db ICON_EQUINE ; TAUROS + db ICON_FISH ; MAGIKARP + db ICON_GYARADOS ; GYARADOS + db ICON_LAPRAS ; LAPRAS + db ICON_BLOB ; DITTO + db ICON_FOX ; EEVEE + db ICON_FOX ; VAPOREON + db ICON_FOX ; JOLTEON + db ICON_FOX ; FLAREON + db ICON_VOLTORB ; PORYGON + db ICON_SHELL ; OMANYTE + db ICON_SHELL ; OMASTAR + db ICON_SHELL ; KABUTO + db ICON_SHELL ; KABUTOPS + db ICON_BIRD ; AERODACTYL + db ICON_SNORLAX ; SNORLAX + db ICON_BIRD ; ARTICUNO + db ICON_BIRD ; ZAPDOS + db ICON_BIRD ; MOLTRES + db ICON_SERPENT ; DRATINI + db ICON_SERPENT ; DRAGONAIR + db ICON_BIGMON ; DRAGONITE + db ICON_HUMANSHAPE ; MEWTWO + db ICON_HUMANSHAPE ; MEW + db ICON_ODDISH ; CHIKORITA + db ICON_ODDISH ; BAYLEEF + db ICON_ODDISH ; MEGANIUM + db ICON_FOX ; CYNDAQUIL + db ICON_FOX ; QUILAVA + db ICON_FOX ; TYPHLOSION + db ICON_MONSTER ; TOTODILE + db ICON_MONSTER ; CROCONAW + db ICON_MONSTER ; FERALIGATR + db ICON_FOX ; SENTRET + db ICON_FOX ; FURRET + db ICON_BIRD ; HOOTHOOT + db ICON_BIRD ; NOCTOWL + db ICON_BUG ; LEDYBA + db ICON_BUG ; LEDIAN + db ICON_BUG ; SPINARAK + db ICON_BUG ; ARIADOS + db ICON_BAT ; CROBAT + db ICON_FISH ; CHINCHOU + db ICON_FISH ; LANTURN + db ICON_PIKACHU ; PICHU + db ICON_CLEFAIRY ; CLEFFA + db ICON_JIGGLYPUFF ; IGGLYBUFF + db ICON_CLEFAIRY ; TOGEPI + db ICON_BIRD ; TOGETIC + db ICON_BIRD ; NATU + db ICON_BIRD ; XATU + db ICON_FOX ; MAREEP + db ICON_MONSTER ; FLAAFFY + db ICON_MONSTER ; AMPHAROS + db ICON_ODDISH ; BELLOSSOM + db ICON_JIGGLYPUFF ; MARILL + db ICON_JIGGLYPUFF ; AZUMARILL + db ICON_SUDOWOODO ; SUDOWOODO + db ICON_POLIWAG ; POLITOED + db ICON_ODDISH ; HOPPIP + db ICON_ODDISH ; SKIPLOOM + db ICON_ODDISH ; JUMPLUFF + db ICON_MONSTER ; AIPOM + db ICON_ODDISH ; SUNKERN + db ICON_ODDISH ; SUNFLORA + db ICON_BUG ; YANMA + db ICON_MONSTER ; WOOPER + db ICON_MONSTER ; QUAGSIRE + db ICON_FOX ; ESPEON + db ICON_FOX ; UMBREON + db ICON_BIRD ; MURKROW + db ICON_SLOWPOKE ; SLOWKING + db ICON_GHOST ; MISDREAVUS + db ICON_UNOWN ; UNOWN + db ICON_GHOST ; WOBBUFFET + db ICON_EQUINE ; GIRAFARIG + db ICON_BUG ; PINECO + db ICON_BUG ; FORRETRESS + db ICON_SERPENT ; DUNSPARCE + db ICON_BUG ; GLIGAR + db ICON_SERPENT ; STEELIX + db ICON_MONSTER ; SNUBBULL + db ICON_MONSTER ; GRANBULL + db ICON_FISH ; QWILFISH + db ICON_BUG ; SCIZOR + db ICON_BUG ; SHUCKLE + db ICON_BUG ; HERACROSS + db ICON_FOX ; SNEASEL + db ICON_MONSTER ; TEDDIURSA + db ICON_MONSTER ; URSARING + db ICON_BLOB ; SLUGMA + db ICON_BLOB ; MAGCARGO + db ICON_EQUINE ; SWINUB + db ICON_EQUINE ; PILOSWINE + db ICON_SHELL ; CORSOLA + db ICON_FISH ; REMORAID + db ICON_FISH ; OCTILLERY + db ICON_MONSTER ; DELIBIRD + db ICON_FISH ; MANTINE + db ICON_BIRD ; SKARMORY + db ICON_FOX ; HOUNDOUR + db ICON_FOX ; HOUNDOOM + db ICON_BIGMON ; KINGDRA + db ICON_EQUINE ; PHANPY + db ICON_EQUINE ; DONPHAN + db ICON_VOLTORB ; PORYGON2 + db ICON_EQUINE ; STANTLER + db ICON_MONSTER ; SMEARGLE + db ICON_FIGHTER ; TYROGUE + db ICON_FIGHTER ; HITMONTOP + db ICON_HUMANSHAPE ; SMOOCHUM + db ICON_HUMANSHAPE ; ELEKID + db ICON_HUMANSHAPE ; MAGBY + db ICON_EQUINE ; MILTANK + db ICON_CLEFAIRY ; BLISSEY + db ICON_FOX ; RAIKOU + db ICON_FOX ; ENTEI + db ICON_FOX ; SUICUNE + db ICON_MONSTER ; LARVITAR + db ICON_MONSTER ; PUPITAR + db ICON_MONSTER ; TYRANITAR + db ICON_LUGIA ; LUGIA + db ICON_HO_OH ; HO_OH + db ICON_HUMANSHAPE ; CELEBI diff --git a/data/sprite_anims/framesets.asm b/data/sprite_anims/framesets.asm index e53b1c47..0f05fdda 100755 --- a/data/sprite_anims/framesets.asm +++ b/data/sprite_anims/framesets.asm @@ -1,1038 +1,402 @@ -AnimatedObjectFrameData: ; 8dbfe - dw .data_8dc6e - dw .data_8dc71 - dw .data_8dc76 - dw .data_8dc7b - dw .data_8dc89 - dw .data_8dc8e - dw .data_8dc93 - dw .data_8dc98 - dw .data_8dc9b - dw .data_8dca4 - dw .data_8dca7 - dw .data_8dcaa - dw .data_8dcb3 - dw .data_8dcb6 - dw .data_8dcbd - dw .data_8dcc0 - dw .data_8dcc3 - dw .data_8dccc - dw .data_8dccf - dw .data_8dcd6 - dw .data_8dcd9 - dw .data_8dcdc - dw .data_8dcdf - dw .data_8dcb6 - dw .data_8dcbd - dw .data_8dce4 - dw .data_8dceb - dw .data_8dcf0 - dw .data_8dcf5 - dw .data_8dcf8 - dw .data_8dcfd - dw .data_8dd06 - dw .data_8dd0f - dw .data_8dd18 - dw .data_8dd23 - dw .data_8dc80 - dw .data_8dd26 - dw .data_8dd29 - dw .data_8dd2c - dw .data_8dd35 - dw .data_8dd3c - dw .data_8dd41 - dw .data_8dd46 - dw .data_8dd49 - dw .data_8dd50 - dw .data_8dd53 - dw .data_8dd85 - dw .data_8dd88 - dw .data_8dd8b - dw .data_8dd98 - dw .data_8dd9b - dw .data_8dd9e - dw .data_8dda1 - dw .data_8dda4 - dw .data_8dda7 - dw .data_8ddb4 - -.data_8dc6e ; 8dc6e - db $00,$20 - db $ff - -.data_8dc71 ; 8dc71 - db $00,$08, $01,$08 - db $fe - -.data_8dc76 ; 8dc76 - db $3d,$08, $3e,$08 - db $fe - -.data_8dc7b ; 8dc7b - db $3f,$08, $40,$08 - db $fe - -.data_8dc80 ; 8dc80 - db $00,$08, $01,$08, $00,$08, $01,$48 - db $fe - -.data_8dc89 ; 8dc89 - db $02,$08, $03,$08 - db $fe - -.data_8dc8e ; 8dc8e - db $04,$08, $05,$08 - db $fe - -.data_8dc93 ; 8dc93 - db $06,$41, $07,$41 - db $fe - -.data_8dc98 ; 8dc98 - db $08,$47 - db $ff - -.data_8dc9b ; 8dc9b - db $09,$07, $0a,$07, $0b,$07, $09,$07 - db $fe - -.data_8dca4 ; 8dca4 - db $0c,$08 - db $ff - -.data_8dca7 ; 8dca7 - db $0d,$08 - db $ff - -.data_8dcaa ; 8dcaa - db $0e,$59, $10,$09, $0e,$19, $10,$09 - db $fe - -.data_8dcb3 ; 8dcb3 - db $0f,$20 - db $ff - -.data_8dcb6 ; 8dcb6 - db $11,$04, $12,$05, $14,$04 - db $fe - -.data_8dcbd ; 8dcbd - db $12,$08 - db $ff - -.data_8dcc0 ; 8dcc0 - db $13,$20 - db $ff - -.data_8dcc3 ; 8dcc3 - db $15,$03, $16,$03, $17,$03, $16,$03 - db $fe - -.data_8dccc ; 8dccc - db $15,$1f - db $ff - -.data_8dccf ; 8dccf - db $18,$01, $19,$01, $1a,$01 - db $fc - -.data_8dcd6 ; 8dcd6 - db $1b,$18 - db $fc - -.data_8dcd9 ; 8dcd9 - db $1c,$58 - db $fc - -.data_8dcdc ; 8dcdc - db $1d,$18 - db $fc - -.data_8dcdf ; 8dcdf - db $1e,$01, $1f,$01 - db $fe - -.data_8dce4 ; 8dce4 - db $12,$00, $13,$0f, $14,$0f - db $ff - -.data_8dceb ; 8dceb - db $20,$01, $fd,$01 - db $fe - -.data_8dcf0 ; 8dcf0 - db $21,$01, $fd,$01 - db $fe - -.data_8dcf5 ; 8dcf5 - db $22,$08 - db $ff - -.data_8dcf8 ; 8dcf8 - db $23,$03, $23,$83 - db $fe - -.data_8dcfd ; 8dcfd - db $24,$02, $25,$02, $26,$02, $25,$02 - db $fe - -.data_8dd06 ; 8dd06 - db $27,$07, $28,$07, $27,$87, $28,$47 - db $fe - -.data_8dd0f ; 8dd0f - db $29,$07, $2a,$07, $29,$07, $2b,$07 - db $fe - -.data_8dd18 ; 8dd18 - db $29,$07, $2c,$07, $2d,$07, $2c,$07, $29,$07 - db $ff - -.data_8dd23 ; 8dd23 - db $2e,$14 - db $ff - -.data_8dd26 ; 8dd26 - db $2f,$20 - db $ff - -.data_8dd29 ; 8dd29 - db $30,$20 - db $ff - -.data_8dd2c ; 8dd2c - db $30,$03, $31,$03, $30,$03, $31,$43 - db $fe - -.data_8dd35 ; 8dd35 - db $32,$04, $33,$04, $34,$04 - db $fc - -.data_8dd3c ; 8dd3c - db $35,$03, $36,$03 - db $fe - -.data_8dd41 ; 8dd41 - db $37,$07, $38,$07 - db $fe - -.data_8dd46 ; 8dd46 - db $39,$20 - db $ff - -.data_8dd49 ; 8dd49 - db $3b,$02, $3a,$02, $3b,$02 - db $ff - -.data_8dd50 ; 8dd50 - db $3c,$20 - db $ff - -.data_8dd53 ; 8dd53 - db $41,$08, $42,$08, $41,$08, $42,$48 - db $fe - -; --- BEGIN UNUSED BLOCK --- -.data_8dd5c ; 8dd5c - db $43,$08, $44,$08 - db $fe - -.data_8dd61 ; 8dd61 - db $45,$08, $46,$08 - db $fe - -.data_8dd66 ; 8dd66 - db $47,$08, $48,$08 - db $fe - -.data_8dd6b ; 8dd6b - db $49,$01, $49,$41, $49,$c1, $49,$81 - db $fe - -.data_8dd74 ; 8dd74 - db $4a,$20 - db $ff - -.data_8dd77 ; 8dd77 - db $4b,$20 - db $ff - -.data_8dd7a ; 8dd7a - db $4c,$20 - db $ff - -.data_8dd7d ; 8dd7d - db $4d,$20 - db $ff - -.data_8dd80 ; 8dd80 - db $4e,$03, $fd,$03 - db $fe -; --- END UNUSED BLOCK ;;; - -.data_8dd85 ; 8dd85 - db $fd,$20 - db $ff - -.data_8dd88 ; 8dd88 - db $4f,$20 - db $ff - -.data_8dd8b ; 8dd8b - db $50,$02, $51,$10, $fd,$01, $52,$01, $fd,$01, $53,$01 - db $fc - -.data_8dd98 ; 8dd98 - db $54,$20 - db $ff - -.data_8dd9b ; 8dd9b - db $55,$20 - db $ff - -.data_8dd9e ; 8dd9e - db $55,$60 - db $ff - -.data_8dda1 ; 8dda1 - db $55,$a0 - db $ff - -.data_8dda4 ; 8dda4 - db $55,$e0 - db $ff - -.data_8dda7 ; 8dda7 - db $56,$0a, $57,$09, $58,$0a, $59,$0a, $58,$09, $5a,$0a - db $fe - -.data_8ddb4 ; 8ddb4 - db $50,$02, $5b,$02, $50,$02, $5b,$42 - db $fe - -AnimatedObjectOAMData: ; 8ddbc - dbw $00, .data_8e16a - dbw $04, .data_8e16a - dbw $4c, .data_8ded1 - dbw $5c, .data_8ded1 - dbw $6c, .data_8ded6 - dbw $6e, .data_8ded6 - dbw $2d, .data_8e1d0 - dbw $4d, .data_8e1d0 - dbw $60, .data_8e1e9 - dbw $00, .data_8e212 - dbw $00, .data_8e27f - dbw $06, .data_8e2ec - dbw $0c, .data_8e361 - dbw $0d, .data_8ded1 - dbw $00, .data_8e033 - dbw $04, .data_8e033 - dbw $08, .data_8e033 - dbw $40, .data_8e033 - dbw $44, .data_8e033 - dbw $48, .data_8e033 - dbw $4c, .data_8e033 - dbw $80, .data_8e36a - dbw $85, .data_8e36a - dbw $8a, .data_8e36a - dbw $00, .data_8df09 - dbw $01, .data_8df3c - dbw $09, .data_8df7d - dbw $10, .data_8e074 - dbw $29, .data_8e074 - dbw $42, .data_8e074 - dbw $f8, .data_8e661 - dbw $fa, .data_8e661 - dbw $00, .data_8e395 - dbw $00, .data_8e3a6 - dbw $00, .data_8e3cf - dbw $0f, .data_8dee7 - dbw $11, .data_8ded1 - dbw $12, .data_8ded1 - dbw $13, .data_8ded1 - dbw $00, .data_8e40c - dbw $08, .data_8e40c - dbw $10, .data_8e425 - dbw $10, .data_8e43e - dbw $10, .data_8e457 - dbw $10, .data_8e470 - dbw $10, .data_8e489 - dbw $3a, .data_8ded1 - dbw $00, .data_8e16a - dbw $00, .data_8def8 - dbw $02, .data_8e17b - dbw $06, .data_8df3c - dbw $0a, .data_8df3c - dbw $0e, .data_8df3c - dbw $12, .data_8df1a - dbw $13, .data_8df1a - dbw $00, .data_8e16a - dbw $04, .data_8e16a - dbw $10, .data_8df3c - dbw $00, .data_8e17b - dbw $04, .data_8ded1 - dbw $00, .data_8e4a2 - dbw $00, .data_8e18c - dbw $00, .data_8e19d - dbw $00, .data_8e1ae - dbw $00, .data_8e1bf - dbw $00, .data_8e17b - dbw $04, .data_8e17b - dbw $00, .data_8e00e - dbw $30, .data_8e00e - dbw $03, .data_8e00e - dbw $33, .data_8e00e - dbw $06, .data_8e00e - dbw $36, .data_8e00e - dbw $09, .data_8e00e - dbw $39, .data_8e00e - dbw $0c, .data_8e4af - dbw $0c, .data_8e4c8 - dbw $3c, .data_8ded1 - dbw $3e, .data_8ded1 - dbw $00, .data_8e37f - dbw $00, .data_8e384 - dbw $00, .data_8e4d9 - dbw $00, .data_8e4ea - dbw $00, .data_8e4fb - dbw $00, .data_8ded1 - dbw $01, .data_8ded1 - dbw $00, .data_8e50c - dbw $00, .data_8e559 - dbw $00, .data_8e59a - dbw $00, .data_8e5d7 - dbw $00, .data_8e61c - dbw $04, .data_8e384 - -; 23:5ed1 -.data_8ded1 ; 8ded1 - db $01 - db $fc, $fc, $00, $00 - -.data_8ded6 ; 8ded6 - db $04 - db $f8, $f8, $00, $00 - db $f8, $00, $01, $00 - db $00, $f8, $10, $00 - db $00, $00, $11, $00 - -.data_8dee7 ; 8dee7 - db $04 - db $f8, $f8, $00, $00 - db $f8, $00, $00, $20 - db $00, $f8, $01, $00 - db $00, $00, $01, $20 - -.data_8def8 ; 8def8 - db $04 - db $f8, $f8, $00, $80 - db $f8, $00, $00, $a0 - db $00, $f8, $01, $80 - db $00, $00, $01, $a0 - -.data_8df09 ; 8df09 - db $04 - db $f8, $f8, $00, $00 - db $f8, $00, $00, $20 - db $00, $f8, $00, $40 - db $00, $00, $00, $60 - -.data_8df1a ; 8df1a - db $04 - db $f8, $f8, $00, $07 - db $f8, $00, $00, $27 - db $00, $f8, $00, $47 - db $00, $00, $00, $67 - -.data_8df2b ; 8df2b - db $04 - db $f8, $f8, $00, $80 - db $f8, $00, $00, $a0 - db $00, $f8, $00, $c0 - db $00, $00, $00, $e0 - -.data_8df3c ; 8df3c - db $10 - db $f0, $f0, $00, $00 - db $f0, $f8, $01, $00 - db $f8, $f0, $02, $00 - db $f8, $f8, $03, $00 - db $f0, $00, $01, $20 - db $f0, $08, $00, $20 - db $f8, $00, $03, $20 - db $f8, $08, $02, $20 - db $00, $f0, $02, $40 - db $00, $f8, $03, $40 - db $08, $f0, $00, $40 - db $08, $f8, $01, $40 - db $00, $00, $03, $60 - db $00, $08, $02, $60 - db $08, $00, $01, $60 - db $08, $08, $00, $60 - -.data_8df7d ; 8df7d - db $24 - db $e8, $e8, $00, $00 - db $e8, $f0, $01, $00 - db $e8, $f8, $02, $00 - db $f0, $e8, $03, $00 - db $f0, $f0, $04, $00 - db $f0, $f8, $05, $00 - db $f8, $e8, $06, $00 - db $f8, $f0, $05, $00 - db $f8, $f8, $05, $00 - db $e8, $00, $02, $20 - db $e8, $08, $01, $20 - db $e8, $10, $00, $20 - db $f0, $00, $05, $20 - db $f0, $08, $04, $20 - db $f0, $10, $03, $20 - db $f8, $00, $05, $20 - db $f8, $08, $05, $20 - db $f8, $10, $06, $20 - db $00, $e8, $06, $40 - db $00, $f0, $05, $40 - db $00, $f8, $05, $40 - db $08, $e8, $03, $40 - db $08, $f0, $04, $40 - db $08, $f8, $05, $40 - db $10, $e8, $00, $40 - db $10, $f0, $01, $40 - db $10, $f8, $02, $40 - db $00, $00, $05, $60 - db $00, $08, $05, $60 - db $00, $10, $06, $60 - db $08, $00, $05, $60 - db $08, $08, $04, $60 - db $08, $10, $03, $60 - db $10, $00, $02, $60 - db $10, $08, $01, $60 - db $10, $10, $00, $60 - -.data_8e00e ; 8e00e - db $09 - 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 - -.data_8e033 ; 8e033 - db $10 - db $f0, $f0, $00, $00 - db $f0, $f8, $01, $00 - db $f0, $00, $02, $00 - db $f0, $08, $03, $00 - db $f8, $f0, $10, $00 - db $f8, $f8, $11, $00 - db $f8, $00, $12, $00 - db $f8, $08, $13, $00 - db $00, $f0, $20, $00 - db $00, $f8, $21, $00 - db $00, $00, $22, $00 - db $00, $08, $23, $00 - db $08, $f0, $30, $00 - db $08, $f8, $31, $00 - db $08, $00, $32, $00 - db $08, $08, $33, $00 - -.data_8e074 ; 8e074 - db $19 - db $ec, $ec, $00, $00 - db $f4, $ec, $01, $00 - db $fc, $ec, $02, $00 - db $04, $ec, $03, $00 - db $0c, $ec, $04, $00 - db $ec, $f4, $05, $00 - db $f4, $f4, $06, $00 - db $fc, $f4, $07, $00 - db $04, $f4, $08, $00 - db $0c, $f4, $09, $00 - db $ec, $fc, $0a, $00 - db $f4, $fc, $0b, $00 - db $fc, $fc, $0c, $00 - db $04, $fc, $0d, $00 - db $0c, $fc, $0e, $00 - db $ec, $04, $0f, $00 - db $f4, $04, $10, $00 - db $fc, $04, $11, $00 - db $04, $04, $12, $00 - db $0c, $04, $13, $00 - db $ec, $0c, $14, $00 - db $f4, $0c, $15, $00 - db $fc, $0c, $16, $00 - db $04, $0c, $17, $00 - db $0c, $0c, $18, $00 - -.data_8e0d9 ; unreferenced - db $24 - 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, $06, $00 - db $f0, $f0, $07, $00 - db $f0, $f8, $08, $00 - db $f0, $00, $09, $00 - db $f0, $08, $0a, $00 - db $f0, $10, $0b, $00 - db $f8, $e8, $0c, $00 - db $f8, $f0, $0d, $00 - db $f8, $f8, $0e, $00 - db $f8, $00, $0f, $00 - db $f8, $08, $10, $00 - db $f8, $10, $11, $00 - db $00, $e8, $12, $00 - db $00, $f0, $13, $00 - db $00, $f8, $14, $00 - db $00, $00, $15, $00 - db $00, $08, $16, $00 - db $00, $10, $17, $00 - db $08, $e8, $18, $00 - db $08, $f0, $19, $00 - db $08, $f8, $1a, $00 - db $08, $00, $1b, $00 - db $08, $08, $1c, $00 - db $08, $10, $1d, $00 - db $10, $e8, $1e, $00 - db $10, $f0, $1f, $00 - db $10, $f8, $20, $00 - db $10, $00, $21, $00 - db $10, $08, $22, $00 - db $10, $10, $23, $00 - -.data_8e16a ; 8e16a - db $04 - db $f8, $f8, $00, $00 - db $f8, $00, $01, $00 - db $00, $f8, $02, $00 - db $00, $00, $03, $00 - -.data_8e17b ; 8e17b - db $04 - db $f8, $f8, $00, $80 - db $f8, $00, $01, $80 - db $00, $f8, $02, $80 - db $00, $00, $03, $80 - -.data_8e18c ; 8e18c - db $04 - db $f8, $f8, $00, $00 - db $f8, $00, $01, $00 - db $00, $f8, $08, $00 - db $00, $00, $03, $00 - -.data_8e19d ; 8e19d - db $04 - db $f8, $f8, $04, $00 - db $f8, $00, $05, $00 - db $00, $f8, $08, $00 - db $00, $00, $07, $00 - -.data_8e1ae ; 8e1ae - db $04 - db $f8, $f8, $00, $00 - db $f8, $00, $01, $00 - db $00, $f8, $09, $00 - db $00, $00, $03, $00 - -.data_8e1bf ; 8e1bf - db $04 - db $f8, $f8, $04, $00 - db $f8, $00, $05, $00 - db $00, $f8, $09, $00 - db $00, $00, $07, $00 - -.data_8e1d0 ; 8e1d0 - db $06 - db $f8, $f4, $00, $01 - db $f8, $fc, $01, $01 - db $f8, $04, $02, $01 - db $00, $f4, $10, $01 - db $00, $fc, $11, $01 - db $00, $04, $12, $01 - -.data_8e1e9 ; 8e1e9 - db $0a - db $f4, $f0, $00, $00 - db $f4, $f8, $01, $00 - db $f4, $00, $02, $00 - db $f4, $08, $03, $00 - db $fc, $f0, $04, $00 - db $fc, $f8, $05, $00 - db $fc, $00, $06, $00 - db $04, $f0, $08, $00 - db $04, $f8, $09, $00 - db $04, $00, $0a, $00 - -.data_8e212 ; 8e212 - db $1b - db $e8, $e8, $00, $00 - db $e8, $f0, $01, $00 - db $e8, $f8, $02, $00 - db $f0, $e8, $10, $00 - db $f0, $f0, $11, $00 - db $f0, $f8, $12, $00 - db $f8, $e8, $20, $00 - db $f8, $f0, $21, $00 - db $f8, $f8, $22, $00 - db $f8, $00, $23, $00 - db $00, $e8, $30, $80 - db $00, $f0, $31, $80 - db $00, $f8, $32, $80 - db $00, $00, $33, $80 - db $00, $08, $34, $80 - db $08, $e8, $40, $80 - db $08, $f0, $41, $80 - db $08, $f8, $42, $80 - db $08, $00, $43, $80 - db $08, $08, $44, $80 - db $08, $10, $45, $80 - db $10, $e8, $50, $80 - db $10, $f0, $51, $80 - db $10, $f8, $52, $80 - db $10, $00, $53, $80 - db $10, $08, $54, $80 - db $10, $10, $55, $80 - -.data_8e27f ; 8e27f - db $1b - db $e8, $e8, $0d, $00 - db $e8, $f0, $0e, $00 - db $e8, $f8, $0f, $00 - db $f0, $e8, $1d, $00 - db $f0, $f0, $1e, $00 - db $f0, $f8, $1f, $00 - db $f8, $e8, $20, $00 - db $f8, $f0, $21, $00 - db $f8, $f8, $22, $00 - db $f8, $00, $23, $00 - db $00, $e8, $30, $80 - db $00, $f0, $31, $80 - db $00, $f8, $32, $80 - db $00, $00, $33, $80 - db $00, $08, $34, $80 - db $08, $e8, $40, $80 - db $08, $f0, $41, $80 - db $08, $f8, $42, $80 - db $08, $00, $43, $80 - db $08, $08, $44, $80 - db $08, $10, $45, $80 - db $10, $e8, $50, $80 - db $10, $f0, $51, $80 - db $10, $f8, $52, $80 - db $10, $00, $53, $80 - db $10, $08, $54, $80 - db $10, $10, $55, $80 - -.data_8e2ec ; 8e2ec - db $1d - db $e8, $e8, $00, $00 - db $e8, $f0, $01, $00 - db $e8, $f8, $02, $00 - db $e8, $00, $03, $00 - db $f0, $e8, $10, $00 - db $f0, $f0, $11, $00 - db $f0, $f8, $12, $00 - db $f0, $00, $13, $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 $00, $e8, $30, $80 - db $00, $f0, $31, $80 - db $00, $f8, $32, $80 - db $00, $00, $33, $80 - db $00, $08, $34, $80 - db $08, $e8, $40, $80 - db $08, $f0, $41, $80 - db $08, $f8, $42, $80 - db $08, $00, $43, $80 - db $08, $08, $44, $80 - db $08, $10, $45, $80 - db $10, $f0, $51, $80 - db $10, $f8, $52, $80 - db $10, $00, $53, $80 - db $10, $08, $54, $80 - db $10, $10, $55, $80 - -.data_8e361 ; 8e361 - db $02 - db $f8, $fc, $00, $00 - db $00, $fc, $10, $00 - -.data_8e36a ; 8e36a - db $05 - db $f0, $18, $00, $00 - db $f0, $20, $01, $00 - db $f8, $10, $02, $00 - db $f8, $18, $03, $00 - db $00, $10, $04, $00 - -.data_8e37f ; 8e37f - db $01 - db $fc, $fc, $00, $06 - -.data_8e384 ; 8e384 - db $04 - db $f8, $f8, $00, $06 - db $f8, $00, $01, $06 - db $00, $f8, $02, $06 - db $00, $00, $03, $06 - -.data_8e395 ; 8e395 - db $04 - db $ff, $ff, $00, $00 - db $ff, $00, $00, $20 - db $00, $ff, $00, $40 - db $00, $00, $00, $60 - -.data_8e3a6 ; 8e3a6 - db $0a - db $ff, $00, $00, $00 - db $ff, $08, $01, $00 - db $ff, $10, $01, $00 - db $ff, $18, $01, $00 - db $ff, $20, $00, $20 - db $00, $00, $00, $40 - db $00, $08, $01, $40 - db $00, $10, $01, $40 - db $00, $18, $01, $40 - db $00, $20, $00, $60 - -.data_8e3cf ; 8e3cf - db $0f - db $ec, $f4, $00, $11 - db $ec, $fc, $01, $11 - db $ec, $04, $02, $11 - db $f4, $f4, $03, $11 - db $f4, $fc, $04, $11 - db $f4, $04, $05, $11 - db $fc, $f4, $06, $11 - db $fc, $fc, $07, $11 - db $fc, $04, $08, $11 - db $04, $f4, $09, $11 - db $04, $fc, $0a, $11 - db $04, $04, $0b, $11 - db $0c, $f4, $0c, $11 - db $0c, $fc, $0d, $11 - db $0c, $04, $0e, $11 - -.data_8e40c ; 8e40c - db $06 - db $f4, $f4, $00, $15 - db $f4, $fc, $02, $15 - db $f4, $04, $00, $35 - db $04, $f4, $04, $15 - db $04, $fc, $06, $15 - db $04, $04, $04, $35 - -.data_8e425 ; 8e425 - db $06 - db $f4, $f4, $00, $16 - db $f4, $fc, $02, $16 - db $f4, $04, $04, $16 - db $04, $f4, $06, $16 - db $04, $fc, $08, $16 - db $04, $04, $0a, $16 - -.data_8e43e ; 8e43e - db $06 - db $f4, $f4, $00, $16 - db $f4, $fc, $02, $16 - db $f4, $04, $04, $16 - db $04, $f4, $0c, $16 - db $04, $fc, $0e, $16 - db $04, $04, $10, $16 - -.data_8e457 ; 8e457 - db $06 - db $f4, $f4, $00, $16 - db $f4, $fc, $02, $16 - db $f4, $04, $04, $16 - db $04, $f4, $12, $16 - db $04, $fc, $14, $16 - db $04, $04, $16, $16 - -.data_8e470 ; 8e470 - db $06 - db $f4, $f4, $00, $16 - db $f4, $fc, $02, $16 - db $f4, $04, $04, $16 - db $04, $f4, $18, $16 - db $04, $fc, $1a, $16 - db $04, $04, $1c, $16 - -.data_8e489 ; 8e489 - db $06 - db $f4, $f4, $1e, $16 - db $f4, $fc, $20, $16 - db $f4, $04, $22, $16 - db $04, $f4, $24, $16 - db $04, $fc, $26, $16 - db $04, $04, $28, $16 - -.data_8e4a2 ; 8e4a2 - db $03 - db $f4, $fc, $00, $10 - db $fc, $fc, $00, $10 - db $04, $fc, $00, $10 - -.data_8e4af ; 8e4af - db $06 - db $00, $00, $00, $00 - db $00, $08, $01, $00 - db $00, $10, $01, $00 - db $00, $18, $01, $00 - db $00, $20, $02, $00 - db $00, $28, $03, $00 - -.data_8e4c8 ; 8e4c8 - db $04 - db $00, $00, $00, $00 - db $00, $08, $01, $00 - db $00, $10, $02, $00 - db $00, $18, $03, $00 - -.data_8e4d9 ; 8e4d9 - db $04 - db $f8, $f6, $00, $06 - db $f8, $02, $01, $06 - db $00, $f6, $02, $06 - db $00, $02, $03, $06 - -.data_8e4ea ; 8e4ea - db $04 - db $f8, $f4, $00, $06 - db $f8, $04, $01, $06 - db $00, $f4, $02, $06 - db $00, $04, $03, $06 - -.data_8e4fb ; 8e4fb - db $04 - db $f8, $f0, $00, $06 - db $f8, $08, $01, $06 - db $00, $f0, $02, $06 - db $00, $08, $03, $06 - -.data_8e50c ; 8e50c - db $13 - db $f8, $e0, $00, $00 - db $f0, $e8, $02, $00 - db $00, $e8, $04, $00 - db $e8, $f0, $06, $00 - db $f8, $f0, $08, $00 - db $08, $f0, $0a, $00 - db $e8, $f8, $0c, $00 - db $f8, $f8, $0e, $00 - db $08, $f8, $10, $00 - db $e8, $00, $12, $00 - db $f8, $00, $14, $00 - db $08, $00, $16, $00 - db $e8, $08, $18, $00 - db $f8, $08, $1a, $00 - db $08, $08, $1c, $00 - db $f8, $10, $1e, $00 - db $08, $10, $20, $00 - db $f0, $18, $22, $00 - db $00, $18, $24, $00 - -.data_8e559 ; 8e559 - db $10 - db $f8, $e0, $00, $00 - db $f0, $e8, $02, $00 - db $00, $e8, $04, $00 - db $f8, $f0, $26, $00 - db $08, $f0, $0a, $00 - db $e8, $f8, $28, $00 - db $f8, $f8, $2a, $00 - db $08, $f8, $10, $00 - db $f8, $00, $2c, $00 - db $08, $00, $16, $00 - db $f8, $08, $30, $00 - db $08, $08, $1c, $00 - db $f8, $10, $1e, $00 - db $08, $10, $20, $00 - db $f0, $18, $22, $00 - db $00, $18, $24, $00 - -.data_8e59a ; 8e59a - db $0f - db $f8, $e0, $00, $00 - db $f0, $e8, $02, $00 - db $00, $e8, $32, $00 - db $f8, $f0, $34, $00 - db $08, $f0, $36, $00 - db $f8, $f8, $38, $00 - db $08, $f8, $3a, $00 - db $f8, $00, $3c, $00 - db $08, $00, $3e, $00 - db $f8, $08, $30, $00 - db $08, $08, $1c, $00 - db $f8, $10, $1e, $00 - db $08, $10, $20, $00 - db $f0, $18, $22, $00 - db $00, $18, $24, $00 - -.data_8e5d7 ; 8e5d7 - db $11 - db $f8, $e0, $00, $00 - db $f0, $e8, $02, $00 - db $00, $e8, $04, $00 - db $f8, $f0, $40, $00 - db $08, $f0, $42, $00 - db $18, $f0, $44, $00 - db $f8, $f8, $46, $00 - db $08, $f8, $48, $00 - db $18, $f8, $4a, $00 - db $f8, $00, $4c, $00 - db $08, $00, $4e, $00 - db $f8, $08, $30, $00 - db $08, $08, $1c, $00 - db $f8, $10, $1e, $00 - db $08, $10, $20, $00 - db $f0, $18, $22, $00 - db $00, $18, $24, $00 - -.data_8e61c ; 8e61c - db $11 - db $f8, $e0, $00, $00 - db $f0, $e8, $02, $00 - db $00, $e8, $04, $00 - db $f8, $f0, $50, $00 - db $08, $f0, $0a, $00 - db $e8, $f8, $52, $00 - db $f8, $f8, $54, $00 - db $08, $f8, $10, $00 - db $e8, $00, $56, $00 - db $f8, $00, $2e, $00 - db $08, $00, $16, $00 - db $f8, $08, $30, $00 - db $08, $08, $1c, $00 - db $f8, $10, $1e, $00 - db $08, $10, $20, $00 - db $f0, $18, $22, $00 - db $00, $18, $24, $00 - -.data_8e661 ; 8e661 - db $01 - db $fc, $fc, $00, $11 - -BrokenStdGFXPointers: ; 23:6666 - dbbw $80, $01, .deleted - dbbw $80, $01, .deleted - dbbw $80, $01, .deleted - dbbw $80, $01, .deleted - dbbw $10, $37, .deleted - dbbw $10, $11, .deleted - dbbw $10, $39, .deleted - dbbw $10, $24, .deleted - dbbw $10, $21, .deleted -.deleted +SpriteAnimFrameData: +; entries correspond to SPRITE_ANIM_FRAMESET_* constants + dw .Frameset_00 + dw .Frameset_PartyMon + dw .Frameset_PartyMonWithMail + dw .Frameset_PartyMonWithItem + dw .Frameset_GSIntroBubble + dw .Frameset_GSIntroShellder + dw .Frameset_GSIntroMagikarp + dw .Frameset_GSIntroLapras + dw .Frameset_GSIntroLapras2 + dw .Frameset_GSIntroNote + dw .Frameset_GSIntroInvisibleNote + dw .Frameset_GSIntroJigglypuff + dw .Frameset_GSIntroJigglypuff2 + dw .Frameset_GSIntroPikachu + dw .Frameset_GSIntroPikachu2 + dw .Frameset_GSIntroPikachu3 + dw .Frameset_GSIntroPikachuTail + dw .Frameset_GSIntroPikachuTail2 + dw .Frameset_GSIntroFireball + dw .Frameset_GSIntroChikorita + dw .Frameset_GSIntroCyndaquil + dw .Frameset_GSIntroTotodile + dw .Frameset_GSTitleTrail + dw .Frameset_GSIntroPikachu ; SPRITE_ANIM_FRAMESET_UNUSED_PIKACHU + dw .Frameset_GSIntroPikachu2 ; SPRITE_ANIM_FRAMESET_UNUSED_PIKACHU_2 + dw .Frameset_GSIntroPikachu4 ; SPRITE_ANIM_FRAMESET_UNUSED_PIKACHU_3 + dw .Frameset_TextEntryCursor + dw .Frameset_TextEntryCursorBig + dw .Frameset_GameFreakLogo + dw .Frameset_GSIntroStar + dw .Frameset_GSIntroSparkle + dw .Frameset_SlotsGolem + dw .Frameset_SlotsChansey + dw .Frameset_SlotsChansey2 + dw .Frameset_SlotsEgg + dw .Frameset_RedWalk + dw .Frameset_StillCursor + dw .Frameset_TradePokeBall + dw .Frameset_TradePokeBallWobble + dw .Frameset_TradePoof + dw .Frameset_TradeTubeBulge + dw .Frameset_TrademonIcon + dw .Frameset_TrademonBubble + dw .Frameset_EvolutionBallOfLight + dw .Frameset_RadioTuningKnob + dw .Frameset_MagnetTrainRed + dw .Frameset_Unused1C + dw .Frameset_Leaf + dw .Frameset_CutTree + dw .Frameset_EggCrack + dw .Frameset_EggHatch1 + dw .Frameset_EggHatch2 + dw .Frameset_EggHatch3 + dw .Frameset_EggHatch4 + dw .Frameset_GSIntroHoOhLugia + dw .Frameset_HeadbuttTree + +.Frameset_00: + frame SPRITE_ANIM_OAMSET_RED_WALK_1, 32 + endanim + +.Frameset_PartyMon: + frame SPRITE_ANIM_OAMSET_RED_WALK_1, 8 + frame SPRITE_ANIM_OAMSET_RED_WALK_2, 8 + dorestart + +.Frameset_PartyMonWithMail: + frame SPRITE_ANIM_OAMSET_PARTY_MON_WITH_MAIL_1, 8 + frame SPRITE_ANIM_OAMSET_PARTY_MON_WITH_MAIL_2, 8 + dorestart + +.Frameset_PartyMonWithItem: + frame SPRITE_ANIM_OAMSET_PARTY_MON_WITH_ITEM_1, 8 + frame SPRITE_ANIM_OAMSET_PARTY_MON_WITH_ITEM_2, 8 + dorestart + +.Frameset_RedWalk: + frame SPRITE_ANIM_OAMSET_RED_WALK_1, 8 + frame SPRITE_ANIM_OAMSET_RED_WALK_2, 8 + frame SPRITE_ANIM_OAMSET_RED_WALK_1, 8 + frame SPRITE_ANIM_OAMSET_RED_WALK_2, 8, OAM_X_FLIP + dorestart + +.Frameset_GSIntroBubble: + frame SPRITE_ANIM_OAMSET_GS_INTRO_BUBBLE_1, 8 + frame SPRITE_ANIM_OAMSET_GS_INTRO_BUBBLE_2, 8 + dorestart + +.Frameset_GSIntroShellder: + frame SPRITE_ANIM_OAMSET_GS_INTRO_SHELLDER_1, 8 + frame SPRITE_ANIM_OAMSET_GS_INTRO_SHELLDER_2, 8 + dorestart + +.Frameset_GSIntroMagikarp: + frame SPRITE_ANIM_OAMSET_GS_INTRO_MAGIKARP_1, $41 + frame SPRITE_ANIM_OAMSET_GS_INTRO_MAGIKARP_2, $41 + dorestart + +.Frameset_GSIntroLapras: + frame SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_1, $47 + endanim + +.Frameset_GSIntroLapras2: + frame SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_2, 7 + frame SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_3, 7 + frame SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_4, 7 + frame SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_2, 7 + dorestart + +.Frameset_GSIntroNote: + frame SPRITE_ANIM_OAMSET_GS_INTRO_NOTE, 8 + endanim + +.Frameset_GSIntroInvisibleNote: + frame SPRITE_ANIM_OAMSET_GS_INTRO_INVISIBLE_NOTE, 8 + endanim + +.Frameset_GSIntroJigglypuff: + frame SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_1, $59 + frame SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_3, 9 + frame SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_1, $19 + frame SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_3, 9 + dorestart + +.Frameset_GSIntroJigglypuff2: + frame SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_2, 32 + endanim + +.Frameset_GSIntroPikachu: + frame SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_1, 4 + frame SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_2, 5 + frame SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_4, 4 + dorestart + +.Frameset_GSIntroPikachu2: + frame SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_2, 8 + endanim + +.Frameset_GSIntroPikachu3: + frame SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_3, 32 + endanim + +.Frameset_GSIntroPikachuTail: + frame SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_1, 3 + frame SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_2, 3 + frame SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_3, 3 + frame SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_2, 3 + dorestart + +.Frameset_GSIntroPikachuTail2: + frame SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_1, $1f + endanim + +.Frameset_GSIntroFireball: + frame SPRITE_ANIM_OAMSET_GS_INTRO_SMALL_FIREBALL, 1 + frame SPRITE_ANIM_OAMSET_GS_INTRO_MED_FIREBALL, 1 + frame SPRITE_ANIM_OAMSET_GS_INTRO_BIG_FIREBALL, 1 + delanim + +.Frameset_GSIntroChikorita: + frame SPRITE_ANIM_OAMSET_GS_INTRO_CHIKORITA, $18 + delanim + +.Frameset_GSIntroCyndaquil: + frame SPRITE_ANIM_OAMSET_GS_INTRO_CYNDAQUIL, $58 + delanim + +.Frameset_GSIntroTotodile: + frame SPRITE_ANIM_OAMSET_GS_INTRO_TOTODILE, $18 + delanim + +.Frameset_GSTitleTrail: +IF DEF(_GOLD) + frame SPRITE_ANIM_OAMSET_GS_TITLE_TRAIL_1, 1 + frame SPRITE_ANIM_OAMSET_GS_TITLE_TRAIL_2, 1 + dorestart +ELIF DEF(_SILVER) + frame SPRITE_ANIM_OAMSET_GS_TITLE_TRAIL_1, 32 + endanim +ENDC + +.Frameset_GSIntroPikachu4: + frame SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_2, 0 + frame SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_3, 15 + frame SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_4, 15 + endanim + +.Frameset_TextEntryCursor: + frame SPRITE_ANIM_OAMSET_TEXT_ENTRY_CURSOR, 1 + dowait 1 + dorestart + +.Frameset_TextEntryCursorBig: + frame SPRITE_ANIM_OAMSET_TEXT_ENTRY_CURSOR_BIG, 1 + dowait 1 + dorestart + +.Frameset_GameFreakLogo: + frame SPRITE_ANIM_OAMSET_GS_INTRO_GAMEFREAK_LOGO, 8 + endanim + +.Frameset_GSIntroStar: + frame SPRITE_ANIM_OAMSET_GS_INTRO_STAR, 3 + frame SPRITE_ANIM_OAMSET_GS_INTRO_STAR, 3, OAM_Y_FLIP + dorestart + +.Frameset_GSIntroSparkle: + frame SPRITE_ANIM_OAMSET_GS_INTRO_SPARKLE_1, 2 + frame SPRITE_ANIM_OAMSET_GS_INTRO_SPARKLE_2, 2 + frame SPRITE_ANIM_OAMSET_GS_INTRO_SPARKLE_3, 2 + frame SPRITE_ANIM_OAMSET_GS_INTRO_SPARKLE_2, 2 + dorestart + +.Frameset_SlotsGolem: + frame SPRITE_ANIM_OAMSET_SLOTS_GOLEM_1, 7 + frame SPRITE_ANIM_OAMSET_SLOTS_GOLEM_2, 7 + frame SPRITE_ANIM_OAMSET_SLOTS_GOLEM_1, 7, OAM_Y_FLIP + frame SPRITE_ANIM_OAMSET_SLOTS_GOLEM_2, 7, OAM_X_FLIP + dorestart + +.Frameset_SlotsChansey: + frame SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_1, 7 + frame SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_2, 7 + frame SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_1, 7 + frame SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_3, 7 + dorestart + +.Frameset_SlotsChansey2: + frame SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_1, 7 + frame SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_4, 7 + frame SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_5, 7 + frame SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_4, 7 + frame SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_1, 7 + endanim + +.Frameset_SlotsEgg: + frame SPRITE_ANIM_OAMSET_SLOTS_EGG, 20 + endanim + +.Frameset_StillCursor: + frame SPRITE_ANIM_OAMSET_STILL_CURSOR, 32 + endanim + +.Frameset_TradePokeBall: + frame SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_1, 32 + endanim + +.Frameset_TradePokeBallWobble: + frame SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_1, 3 + frame SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_2, 3 + frame SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_1, 3 + frame SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_2, 3, OAM_X_FLIP + dorestart + +.Frameset_TradePoof: + frame SPRITE_ANIM_OAMSET_TRADE_POOF_1, 4 + frame SPRITE_ANIM_OAMSET_TRADE_POOF_2, 4 + frame SPRITE_ANIM_OAMSET_TRADE_POOF_3, 4 + delanim + +.Frameset_TradeTubeBulge: + frame SPRITE_ANIM_OAMSET_TRADE_TUBE_BULGE_1, 3 + frame SPRITE_ANIM_OAMSET_TRADE_TUBE_BULGE_2, 3 + dorestart + +.Frameset_TrademonIcon: + frame SPRITE_ANIM_OAMSET_TRADEMON_ICON_1, 7 + frame SPRITE_ANIM_OAMSET_TRADEMON_ICON_2, 7 + dorestart + +.Frameset_TrademonBubble: + frame SPRITE_ANIM_OAMSET_TRADEMON_BUBBLE, 32 + endanim + +.Frameset_EvolutionBallOfLight: + frame SPRITE_ANIM_OAMSET_EVOLUTION_BALL_OF_LIGHT_2, 2 + frame SPRITE_ANIM_OAMSET_EVOLUTION_BALL_OF_LIGHT_1, 2 + frame SPRITE_ANIM_OAMSET_EVOLUTION_BALL_OF_LIGHT_2, 2 + endanim + +.Frameset_RadioTuningKnob: + frame SPRITE_ANIM_OAMSET_RADIO_TUNING_KNOB, 32 + endanim + +.Frameset_MagnetTrainRed: + frame SPRITE_ANIM_OAMSET_MAGNET_TRAIN_RED_1, 8 + frame SPRITE_ANIM_OAMSET_MAGNET_TRAIN_RED_2, 8 + frame SPRITE_ANIM_OAMSET_MAGNET_TRAIN_RED_1, 8 + frame SPRITE_ANIM_OAMSET_MAGNET_TRAIN_RED_2, 8, OAM_X_FLIP + dorestart + +; unused + frame SPRITE_ANIM_OAMSET_UNUSED_43, 8 + frame SPRITE_ANIM_OAMSET_UNUSED_44, 8 + dorestart + +; unused + frame SPRITE_ANIM_OAMSET_UNUSED_45, 8 + frame SPRITE_ANIM_OAMSET_UNUSED_46, 8 + dorestart + +; unused + frame SPRITE_ANIM_OAMSET_UNUSED_47, 8 + frame SPRITE_ANIM_OAMSET_UNUSED_48, 8 + dorestart + +; unused + frame SPRITE_ANIM_OAMSET_UNUSED_49, 1 + frame SPRITE_ANIM_OAMSET_UNUSED_49, 1, OAM_X_FLIP + frame SPRITE_ANIM_OAMSET_UNUSED_49, 1, OAM_X_FLIP, OAM_Y_FLIP + frame SPRITE_ANIM_OAMSET_UNUSED_49, 1, OAM_Y_FLIP + dorestart + +; unused + frame SPRITE_ANIM_OAMSET_UNUSED_4A, 32 + endanim + +; unused + frame SPRITE_ANIM_OAMSET_UNUSED_4B, 32 + endanim + +; unused + frame SPRITE_ANIM_OAMSET_UNUSED_4C, 32 + endanim + +; unused + frame SPRITE_ANIM_OAMSET_UNUSED_4D, 32 + endanim + +; unused + frame SPRITE_ANIM_OAMSET_UNUSED_4E, 3 + dowait 3 + dorestart + +.Frameset_Unused1C: + dowait 32 + endanim + +.Frameset_Leaf: + frame SPRITE_ANIM_OAMSET_LEAF, 32 + endanim + +.Frameset_CutTree: + frame SPRITE_ANIM_OAMSET_TREE_1, 2 + frame SPRITE_ANIM_OAMSET_CUT_TREE_2, 16 + dowait 1 + frame SPRITE_ANIM_OAMSET_CUT_TREE_3, 1 + dowait 1 + frame SPRITE_ANIM_OAMSET_CUT_TREE_4, 1 + delanim + +.Frameset_EggCrack: + frame SPRITE_ANIM_OAMSET_EGG_CRACK, 32 + endanim + +.Frameset_EggHatch1: + frame SPRITE_ANIM_OAMSET_EGG_HATCH, 32 + endanim + +.Frameset_EggHatch2: + frame SPRITE_ANIM_OAMSET_EGG_HATCH, 32, OAM_X_FLIP + endanim + +.Frameset_EggHatch3: + frame SPRITE_ANIM_OAMSET_EGG_HATCH, 32, OAM_Y_FLIP + endanim + +.Frameset_EggHatch4: + frame SPRITE_ANIM_OAMSET_EGG_HATCH, 32, OAM_X_FLIP, OAM_Y_FLIP + endanim + +.Frameset_GSIntroHoOhLugia: +IF DEF(_GOLD) + frame SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_1, 10 + frame SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_2, 9 + frame SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_3, 10 + frame SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_4, 10 + frame SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_3, 9 + frame SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_5, 10 + dorestart + +ELIF DEF(_SILVER) + frame SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_2, 3 + frame SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_1, 7 + frame SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_2, 7 + frame SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_3, 7 + frame SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_3, 7 + frame SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_4, 7 + frame SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_4, 7 + frame SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_3, 7 + frame SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_LUGIA_2, 3 + dorestart +ENDC + +.Frameset_HeadbuttTree: + frame SPRITE_ANIM_OAMSET_TREE_1, 2 + frame SPRITE_ANIM_OAMSET_HEADBUTT_TREE_2, 2 + frame SPRITE_ANIM_OAMSET_TREE_1, 2 + frame SPRITE_ANIM_OAMSET_HEADBUTT_TREE_2, 2, OAM_X_FLIP + dorestart diff --git a/data/sprite_anims/oam.asm b/data/sprite_anims/oam.asm new file mode 100755 index 00000000..dde96fca --- /dev/null +++ b/data/sprite_anims/oam.asm @@ -0,0 +1,830 @@ +SpriteAnimOAMData: +; entries correspond to SPRITE_ANIM_OAMSET_* constants + ; vtile offset, data pointer + dbw $00, .OAMData_RedWalk ; SPRITE_ANIM_OAMSET_RED_WALK_1 + dbw $04, .OAMData_RedWalk ; SPRITE_ANIM_OAMSET_RED_WALK_2 + dbw $4c, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_GS_INTRO_BUBBLE_1 + dbw $5c, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_GS_INTRO_BUBBLE_2 + dbw $6c, .OAMData_GSIntroShellder ; SPRITE_ANIM_OAMSET_GS_INTRO_SHELLDER_1 + dbw $6e, .OAMData_GSIntroShellder ; SPRITE_ANIM_OAMSET_GS_INTRO_SHELLDER_2 + dbw $2d, .OAMData_GSIntroMagikarp ; SPRITE_ANIM_OAMSET_GS_INTRO_MAGIKARP_1 + dbw $4d, .OAMData_GSIntroMagikarp ; SPRITE_ANIM_OAMSET_GS_INTRO_MAGIKARP_2 + dbw $60, .OAMData_GSIntroLapras1 ; SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_1 + dbw $00, .OAMData_GSIntroLapras2 ; SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_2 + dbw $00, .OAMData_GSIntroLapras3 ; SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_3 + dbw $06, .OAMData_GSIntroLapras4 ; SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_4 + dbw $0c, .OAMData_GSIntroNote ; SPRITE_ANIM_OAMSET_GS_INTRO_NOTE + dbw $0d, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_GS_INTRO_INVISIBLE_NOTE + dbw $00, .OAMData_GSIntroJigglypuffPikachu ; SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_1 + dbw $04, .OAMData_GSIntroJigglypuffPikachu ; SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_2 + dbw $08, .OAMData_GSIntroJigglypuffPikachu ; SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_3 + dbw $40, .OAMData_GSIntroJigglypuffPikachu ; SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_1 + dbw $44, .OAMData_GSIntroJigglypuffPikachu ; SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_2 + dbw $48, .OAMData_GSIntroJigglypuffPikachu ; SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_3 + dbw $4c, .OAMData_GSIntroJigglypuffPikachu ; SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_4 + dbw $80, .OAMData_GSIntroPikachuTail ; SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_1 + dbw $85, .OAMData_GSIntroPikachuTail ; SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_2 + dbw $8a, .OAMData_GSIntroPikachuTail ; SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_3 + dbw $00, .OAMData_GSIntroSmallFireball ; SPRITE_ANIM_OAMSET_GS_INTRO_SMALL_FIREBALL + dbw $01, .OAMData_TradePoofBubble ; SPRITE_ANIM_OAMSET_GS_INTRO_MED_FIREBALL + dbw $09, .OAMData_GSIntroBigFireball ; SPRITE_ANIM_OAMSET_GS_INTRO_BIG_FIREBALL + dbw $10, .OAMData_GSIntroStarter ; SPRITE_ANIM_OAMSET_GS_INTRO_CHIKORITA + dbw $29, .OAMData_GSIntroStarter ; SPRITE_ANIM_OAMSET_GS_INTRO_CYNDAQUIL + dbw $42, .OAMData_GSIntroStarter ; SPRITE_ANIM_OAMSET_GS_INTRO_TOTODILE + dbw $f8, .OAMData_GSTitleTrail ; SPRITE_ANIM_OAMSET_GS_TITLE_TRAIL_1 + dbw $fa, .OAMData_GSTitleTrail ; SPRITE_ANIM_OAMSET_GS_TITLE_TRAIL_2 + dbw $00, .OAMData_TextEntryCursor ; SPRITE_ANIM_OAMSET_TEXT_ENTRY_CURSOR + dbw $00, .OAMData_TextEntryCursorBig ; SPRITE_ANIM_OAMSET_TEXT_ENTRY_CURSOR_BIG + dbw $00, .OAMData_GSIntroGameFreakLogo ; SPRITE_ANIM_OAMSET_GS_INTRO_GAMEFREAK_LOGO + dbw $0f, .OAMData_GSIntroStar ; SPRITE_ANIM_OAMSET_GS_INTRO_STAR + dbw $11, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_GS_INTRO_SPARKLE_1 + dbw $12, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_GS_INTRO_SPARKLE_2 + dbw $13, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_GS_INTRO_SPARKLE_3 + dbw $00, .OAMData_SlotsGolem ; SPRITE_ANIM_OAMSET_SLOTS_GOLEM_1 + dbw $08, .OAMData_SlotsGolem ; SPRITE_ANIM_OAMSET_SLOTS_GOLEM_2 + dbw $10, .OAMData_SlotsChansey1 ; SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_1 + dbw $10, .OAMData_SlotsChansey2 ; SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_2 + dbw $10, .OAMData_SlotsChansey3 ; SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_3 + dbw $10, .OAMData_SlotsChansey4 ; SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_4 + dbw $10, .OAMData_SlotsChansey5 ; SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_5 + dbw $3a, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_SLOTS_EGG + dbw $00, .OAMData_RedWalk ; SPRITE_ANIM_OAMSET_STILL_CURSOR + dbw $00, .OAMData_TradePokeBall1 ; SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_1 + dbw $02, .OAMData_MagnetTrainRed ; SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_2 + dbw $06, .OAMData_TradePoofBubble ; SPRITE_ANIM_OAMSET_TRADE_POOF_1 + dbw $0a, .OAMData_TradePoofBubble ; SPRITE_ANIM_OAMSET_TRADE_POOF_2 + dbw $0e, .OAMData_TradePoofBubble ; SPRITE_ANIM_OAMSET_TRADE_POOF_3 + dbw $12, .OAMData_TradeTubeBulge ; SPRITE_ANIM_OAMSET_TRADE_TUBE_BULGE_1 + dbw $13, .OAMData_TradeTubeBulge ; SPRITE_ANIM_OAMSET_TRADE_TUBE_BULGE_2 + dbw $00, .OAMData_RedWalk ; SPRITE_ANIM_OAMSET_TRADEMON_ICON_1 + dbw $04, .OAMData_RedWalk ; SPRITE_ANIM_OAMSET_TRADEMON_ICON_2 + dbw $10, .OAMData_TradePoofBubble ; SPRITE_ANIM_OAMSET_TRADEMON_BUBBLE + dbw $00, .OAMData_MagnetTrainRed ; SPRITE_ANIM_OAMSET_EVOLUTION_BALL_OF_LIGHT_1 + dbw $04, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_EVOLUTION_BALL_OF_LIGHT_2 + dbw $00, .OAMData_RadioTuningKnob ; SPRITE_ANIM_OAMSET_RADIO_TUNING_KNOB + dbw $00, .OAMData_PartyMonWithMail1 ; SPRITE_ANIM_OAMSET_PARTY_MON_WITH_MAIL_1 + dbw $00, .OAMData_PartyMonWithMail2 ; SPRITE_ANIM_OAMSET_PARTY_MON_WITH_MAIL_2 + dbw $00, .OAMData_PartyMonWithItem1 ; SPRITE_ANIM_OAMSET_PARTY_MON_WITH_ITEM_1 + dbw $00, .OAMData_PartyMonWithItem2 ; SPRITE_ANIM_OAMSET_PARTY_MON_WITH_ITEM_2 + dbw $00, .OAMData_MagnetTrainRed ; SPRITE_ANIM_OAMSET_MAGNET_TRAIN_RED_1 + dbw $04, .OAMData_MagnetTrainRed ; SPRITE_ANIM_OAMSET_MAGNET_TRAIN_RED_2 + dbw $00, .OAMData_Unused43_4A ; SPRITE_ANIM_OAMSET_UNUSED_43 + dbw $30, .OAMData_Unused43_4A ; SPRITE_ANIM_OAMSET_UNUSED_44 + dbw $03, .OAMData_Unused43_4A ; SPRITE_ANIM_OAMSET_UNUSED_45 + dbw $33, .OAMData_Unused43_4A ; SPRITE_ANIM_OAMSET_UNUSED_46 + dbw $06, .OAMData_Unused43_4A ; SPRITE_ANIM_OAMSET_UNUSED_47 + dbw $36, .OAMData_Unused43_4A ; SPRITE_ANIM_OAMSET_UNUSED_48 + dbw $09, .OAMData_Unused43_4A ; SPRITE_ANIM_OAMSET_UNUSED_49 + dbw $39, .OAMData_Unused43_4A ; SPRITE_ANIM_OAMSET_UNUSED_4A + dbw $0c, .OAMData_Unused4B ; SPRITE_ANIM_OAMSET_UNUSED_4B + dbw $0c, .OAMData_Unused4C ; SPRITE_ANIM_OAMSET_UNUSED_4C + dbw $3c, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_UNUSED_4D + dbw $3e, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_UNUSED_4E + dbw $00, .OAMData_Leaf ; SPRITE_ANIM_OAMSET_LEAF + dbw $00, .OAMData_Tree ; SPRITE_ANIM_OAMSET_TREE_1 + dbw $00, .OAMData_CutTree2 ; SPRITE_ANIM_OAMSET_CUT_TREE_2 + dbw $00, .OAMData_CutTree3 ; SPRITE_ANIM_OAMSET_CUT_TREE_3 + dbw $00, .OAMData_CutTree4 ; SPRITE_ANIM_OAMSET_CUT_TREE_4 + dbw $00, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_EGG_CRACK + dbw $01, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_EGG_HATCH +IF DEF(_GOLD) + dbw $00, .OAMData_GSIntroHoOh1 ; SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_1 + dbw $00, .OAMData_GSIntroHoOh2 ; SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_2 + dbw $00, .OAMData_GSIntroHoOh3 ; SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_3 + dbw $00, .OAMData_GSIntroHoOh4 ; SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_4 + dbw $00, .OAMData_GSIntroHoOh5 ; SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_5 +ELIF DEF(_SILVER) + dbw $00, .OAMData_GSIntroLugia1 ; SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_1 + dbw $20, .OAMData_GSIntroLugia1 ; SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_2 + dbw $40, .OAMData_GSIntroLugia2 ; SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_3 + dbw $60, .OAMData_GSIntroLugia2 ; SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_4 + dbw $00, .OAMData_GSIntroLugia1 ; SPRITE_ANIM_OAMSET_GS_INTRO_HO_OH_5 +ENDC + dbw $04, .OAMData_Tree ; SPRITE_ANIM_OAMSET_HEADBUTT_TREE_2 + +.OAMData_1x1_Palette0: + db 1 + dbsprite -1, -1, 4, 4, $00, 0 + +.OAMData_GSIntroShellder: + db 4 + dbsprite -1, -1, 0, 0, $00, 0 + dbsprite 0, -1, 0, 0, $01, 0 + dbsprite -1, 0, 0, 0, $10, 0 + dbsprite 0, 0, 0, 0, $11, 0 + +.OAMData_GSIntroStar: + db 4 + dbsprite -1, -1, 0, 0, $00, 0 + dbsprite 0, -1, 0, 0, $00, 0 | X_FLIP + dbsprite -1, 0, 0, 0, $01, 0 + dbsprite 0, 0, 0, 0, $01, 0 | X_FLIP + +.OAMData_TradePokeBall1: + db 4 + dbsprite -1, -1, 0, 0, $00, 0 | PRIORITY + dbsprite 0, -1, 0, 0, $00, 0 | X_FLIP | PRIORITY + dbsprite -1, 0, 0, 0, $01, 0 | PRIORITY + dbsprite 0, 0, 0, 0, $01, 0 | X_FLIP | PRIORITY + +.OAMData_GSIntroSmallFireball: + db 4 + dbsprite -1, -1, 0, 0, $00, 0 + dbsprite 0, -1, 0, 0, $00, 0 | X_FLIP + dbsprite -1, 0, 0, 0, $00, 0 | Y_FLIP + dbsprite 0, 0, 0, 0, $00, 0 | X_FLIP | Y_FLIP + +.OAMData_TradeTubeBulge: + db 4 + dbsprite -1, -1, 0, 0, $00, 7 + dbsprite 0, -1, 0, 0, $00, 7 | X_FLIP + dbsprite -1, 0, 0, 0, $00, 7 | Y_FLIP + dbsprite 0, 0, 0, 0, $00, 7 | X_FLIP | Y_FLIP + +; unused + db 4 + dbsprite -1, -1, 0, 0, $00, 0 | PRIORITY + dbsprite 0, -1, 0, 0, $00, 0 | X_FLIP | PRIORITY + dbsprite -1, 0, 0, 0, $00, 0 | Y_FLIP | PRIORITY + dbsprite 0, 0, 0, 0, $00, 0 | X_FLIP | Y_FLIP | PRIORITY + +.OAMData_TradePoofBubble: + db 16 + dbsprite -2, -2, 0, 0, $00, 0 + dbsprite -1, -2, 0, 0, $01, 0 + dbsprite -2, -1, 0, 0, $02, 0 + dbsprite -1, -1, 0, 0, $03, 0 + dbsprite 0, -2, 0, 0, $01, 0 | X_FLIP + dbsprite 1, -2, 0, 0, $00, 0 | X_FLIP + dbsprite 0, -1, 0, 0, $03, 0 | X_FLIP + dbsprite 1, -1, 0, 0, $02, 0 | X_FLIP + dbsprite -2, 0, 0, 0, $02, 0 | Y_FLIP + dbsprite -1, 0, 0, 0, $03, 0 | Y_FLIP + dbsprite -2, 1, 0, 0, $00, 0 | Y_FLIP + dbsprite -1, 1, 0, 0, $01, 0 | Y_FLIP + dbsprite 0, 0, 0, 0, $03, 0 | X_FLIP | Y_FLIP + dbsprite 1, 0, 0, 0, $02, 0 | X_FLIP | Y_FLIP + dbsprite 0, 1, 0, 0, $01, 0 | X_FLIP | Y_FLIP + dbsprite 1, 1, 0, 0, $00, 0 | X_FLIP | Y_FLIP + +.OAMData_GSIntroBigFireball: + db 36 + dbsprite -3, -3, 0, 0, $00, 0 + dbsprite -2, -3, 0, 0, $01, 0 + dbsprite -1, -3, 0, 0, $02, 0 + dbsprite -3, -2, 0, 0, $03, 0 + dbsprite -2, -2, 0, 0, $04, 0 + dbsprite -1, -2, 0, 0, $05, 0 + dbsprite -3, -1, 0, 0, $06, 0 + dbsprite -2, -1, 0, 0, $05, 0 + dbsprite -1, -1, 0, 0, $05, 0 + dbsprite 0, -3, 0, 0, $02, 0 | X_FLIP + dbsprite 1, -3, 0, 0, $01, 0 | X_FLIP + dbsprite 2, -3, 0, 0, $00, 0 | X_FLIP + dbsprite 0, -2, 0, 0, $05, 0 | X_FLIP + dbsprite 1, -2, 0, 0, $04, 0 | X_FLIP + dbsprite 2, -2, 0, 0, $03, 0 | X_FLIP + dbsprite 0, -1, 0, 0, $05, 0 | X_FLIP + dbsprite 1, -1, 0, 0, $05, 0 | X_FLIP + dbsprite 2, -1, 0, 0, $06, 0 | X_FLIP + dbsprite -3, 0, 0, 0, $06, 0 | Y_FLIP + dbsprite -2, 0, 0, 0, $05, 0 | Y_FLIP + dbsprite -1, 0, 0, 0, $05, 0 | Y_FLIP + dbsprite -3, 1, 0, 0, $03, 0 | Y_FLIP + dbsprite -2, 1, 0, 0, $04, 0 | Y_FLIP + dbsprite -1, 1, 0, 0, $05, 0 | Y_FLIP + dbsprite -3, 2, 0, 0, $00, 0 | Y_FLIP + dbsprite -2, 2, 0, 0, $01, 0 | Y_FLIP + dbsprite -1, 2, 0, 0, $02, 0 | Y_FLIP + dbsprite 0, 0, 0, 0, $05, 0 | X_FLIP | Y_FLIP + dbsprite 1, 0, 0, 0, $05, 0 | X_FLIP | Y_FLIP + dbsprite 2, 0, 0, 0, $06, 0 | X_FLIP | Y_FLIP + dbsprite 0, 1, 0, 0, $05, 0 | X_FLIP | Y_FLIP + dbsprite 1, 1, 0, 0, $04, 0 | X_FLIP | Y_FLIP + dbsprite 2, 1, 0, 0, $03, 0 | X_FLIP | Y_FLIP + dbsprite 0, 2, 0, 0, $02, 0 | X_FLIP | Y_FLIP + dbsprite 1, 2, 0, 0, $01, 0 | X_FLIP | Y_FLIP + dbsprite 2, 2, 0, 0, $00, 0 | X_FLIP | Y_FLIP + +.OAMData_Unused43_4A: + db 9 + dbsprite -2, -2, 4, 4, $00, 0 + dbsprite -1, -2, 4, 4, $01, 0 + dbsprite 0, -2, 4, 4, $02, 0 + dbsprite -2, -1, 4, 4, $10, 0 + dbsprite -1, -1, 4, 4, $11, 0 + dbsprite 0, -1, 4, 4, $12, 0 + dbsprite -2, 0, 4, 4, $20, 0 + dbsprite -1, 0, 4, 4, $21, 0 + dbsprite 0, 0, 4, 4, $22, 0 + +.OAMData_GSIntroJigglypuffPikachu: + db 16 + dbsprite -2, -2, 0, 0, $00, 0 + dbsprite -1, -2, 0, 0, $01, 0 + dbsprite 0, -2, 0, 0, $02, 0 + dbsprite 1, -2, 0, 0, $03, 0 + dbsprite -2, -1, 0, 0, $10, 0 + dbsprite -1, -1, 0, 0, $11, 0 + dbsprite 0, -1, 0, 0, $12, 0 + dbsprite 1, -1, 0, 0, $13, 0 + dbsprite -2, 0, 0, 0, $20, 0 + dbsprite -1, 0, 0, 0, $21, 0 + dbsprite 0, 0, 0, 0, $22, 0 + dbsprite 1, 0, 0, 0, $23, 0 + dbsprite -2, 1, 0, 0, $30, 0 + dbsprite -1, 1, 0, 0, $31, 0 + dbsprite 0, 1, 0, 0, $32, 0 + dbsprite 1, 1, 0, 0, $33, 0 + +.OAMData_GSIntroStarter: + db 25 + dbsprite -3, -3, 4, 4, $00, 0 + dbsprite -3, -2, 4, 4, $01, 0 + dbsprite -3, -1, 4, 4, $02, 0 + dbsprite -3, 0, 4, 4, $03, 0 + dbsprite -3, 1, 4, 4, $04, 0 + dbsprite -2, -3, 4, 4, $05, 0 + dbsprite -2, -2, 4, 4, $06, 0 + dbsprite -2, -1, 4, 4, $07, 0 + dbsprite -2, 0, 4, 4, $08, 0 + dbsprite -2, 1, 4, 4, $09, 0 + dbsprite -1, -3, 4, 4, $0a, 0 + dbsprite -1, -2, 4, 4, $0b, 0 + dbsprite -1, -1, 4, 4, $0c, 0 + dbsprite -1, 0, 4, 4, $0d, 0 + dbsprite -1, 1, 4, 4, $0e, 0 + dbsprite 0, -3, 4, 4, $0f, 0 + dbsprite 0, -2, 4, 4, $10, 0 + dbsprite 0, -1, 4, 4, $11, 0 + dbsprite 0, 0, 4, 4, $12, 0 + dbsprite 0, 1, 4, 4, $13, 0 + dbsprite 1, -3, 4, 4, $14, 0 + dbsprite 1, -2, 4, 4, $15, 0 + dbsprite 1, -1, 4, 4, $16, 0 + dbsprite 1, 0, 4, 4, $17, 0 + dbsprite 1, 1, 4, 4, $18, 0 + +; unused + db 36 + dbsprite -3, -3, 0, 0, $00, 0 + dbsprite -2, -3, 0, 0, $01, 0 + dbsprite -1, -3, 0, 0, $02, 0 + dbsprite 0, -3, 0, 0, $03, 0 + dbsprite 1, -3, 0, 0, $04, 0 + dbsprite 2, -3, 0, 0, $05, 0 + dbsprite -3, -2, 0, 0, $06, 0 + dbsprite -2, -2, 0, 0, $07, 0 + dbsprite -1, -2, 0, 0, $08, 0 + dbsprite 0, -2, 0, 0, $09, 0 + dbsprite 1, -2, 0, 0, $0a, 0 + dbsprite 2, -2, 0, 0, $0b, 0 + dbsprite -3, -1, 0, 0, $0c, 0 + dbsprite -2, -1, 0, 0, $0d, 0 + dbsprite -1, -1, 0, 0, $0e, 0 + dbsprite 0, -1, 0, 0, $0f, 0 + dbsprite 1, -1, 0, 0, $10, 0 + dbsprite 2, -1, 0, 0, $11, 0 + dbsprite -3, 0, 0, 0, $12, 0 + dbsprite -2, 0, 0, 0, $13, 0 + dbsprite -1, 0, 0, 0, $14, 0 + dbsprite 0, 0, 0, 0, $15, 0 + dbsprite 1, 0, 0, 0, $16, 0 + dbsprite 2, 0, 0, 0, $17, 0 + dbsprite -3, 1, 0, 0, $18, 0 + dbsprite -2, 1, 0, 0, $19, 0 + dbsprite -1, 1, 0, 0, $1a, 0 + dbsprite 0, 1, 0, 0, $1b, 0 + dbsprite 1, 1, 0, 0, $1c, 0 + dbsprite 2, 1, 0, 0, $1d, 0 + dbsprite -3, 2, 0, 0, $1e, 0 + dbsprite -2, 2, 0, 0, $1f, 0 + dbsprite -1, 2, 0, 0, $20, 0 + dbsprite 0, 2, 0, 0, $21, 0 + dbsprite 1, 2, 0, 0, $22, 0 + dbsprite 2, 2, 0, 0, $23, 0 + +.OAMData_RedWalk: + db 4 + dbsprite -1, -1, 0, 0, $00, PAL_OW_RED + dbsprite 0, -1, 0, 0, $01, PAL_OW_RED + dbsprite -1, 0, 0, 0, $02, PAL_OW_RED + dbsprite 0, 0, 0, 0, $03, PAL_OW_RED + +.OAMData_MagnetTrainRed: + db 4 + dbsprite -1, -1, 0, 0, $00, PAL_OW_RED | PRIORITY + dbsprite 0, -1, 0, 0, $01, PAL_OW_RED | PRIORITY + dbsprite -1, 0, 0, 0, $02, PAL_OW_RED | PRIORITY + dbsprite 0, 0, 0, 0, $03, PAL_OW_RED | PRIORITY + +.OAMData_PartyMonWithMail1: + db 4 + dbsprite -1, -1, 0, 0, $00, PAL_OW_RED + dbsprite 0, -1, 0, 0, $01, PAL_OW_RED + dbsprite -1, 0, 0, 0, $08, PAL_OW_RED + dbsprite 0, 0, 0, 0, $03, PAL_OW_RED + +.OAMData_PartyMonWithMail2: + db 4 + dbsprite -1, -1, 0, 0, $04, PAL_OW_RED + dbsprite 0, -1, 0, 0, $05, PAL_OW_RED + dbsprite -1, 0, 0, 0, $08, PAL_OW_RED + dbsprite 0, 0, 0, 0, $07, PAL_OW_RED + +.OAMData_PartyMonWithItem1: + db 4 + dbsprite -1, -1, 0, 0, $00, PAL_OW_RED + dbsprite 0, -1, 0, 0, $01, PAL_OW_RED + dbsprite -1, 0, 0, 0, $09, PAL_OW_RED + dbsprite 0, 0, 0, 0, $03, PAL_OW_RED + +.OAMData_PartyMonWithItem2: + db 4 + dbsprite -1, -1, 0, 0, $04, PAL_OW_RED + dbsprite 0, -1, 0, 0, $05, PAL_OW_RED + dbsprite -1, 0, 0, 0, $09, PAL_OW_RED + dbsprite 0, 0, 0, 0, $07, PAL_OW_RED + +.OAMData_GSIntroMagikarp: + db 6 + dbsprite -2, -1, 4, 0, $00, 1 + dbsprite -1, -1, 4, 0, $01, 1 + dbsprite 0, -1, 4, 0, $02, 1 + dbsprite -2, 0, 4, 0, $10, 1 + dbsprite -1, 0, 4, 0, $11, 1 + dbsprite 0, 0, 4, 0, $12, 1 + +.OAMData_GSIntroLapras1: + db 10 + dbsprite -2, -2, 0, 4, $00, 0 + dbsprite -1, -2, 0, 4, $01, 0 + dbsprite 0, -2, 0, 4, $02, 0 + dbsprite 1, -2, 0, 4, $03, 0 + dbsprite -2, -1, 0, 4, $04, 0 + dbsprite -1, -1, 0, 4, $05, 0 + dbsprite 0, -1, 0, 4, $06, 0 + dbsprite -2, 0, 0, 4, $08, 0 + dbsprite -1, 0, 0, 4, $09, 0 + dbsprite 0, 0, 0, 4, $0a, 0 + +.OAMData_GSIntroLapras2: + db 27 + dbsprite -3, -3, 0, 0, $00, 0 + dbsprite -2, -3, 0, 0, $01, 0 + dbsprite -1, -3, 0, 0, $02, 0 + dbsprite -3, -2, 0, 0, $10, 0 + dbsprite -2, -2, 0, 0, $11, 0 + dbsprite -1, -2, 0, 0, $12, 0 + dbsprite -3, -1, 0, 0, $20, 0 + dbsprite -2, -1, 0, 0, $21, 0 + dbsprite -1, -1, 0, 0, $22, 0 + dbsprite 0, -1, 0, 0, $23, 0 + dbsprite -3, 0, 0, 0, $30, 0 | PRIORITY + dbsprite -2, 0, 0, 0, $31, 0 | PRIORITY + dbsprite -1, 0, 0, 0, $32, 0 | PRIORITY + dbsprite 0, 0, 0, 0, $33, 0 | PRIORITY + dbsprite 1, 0, 0, 0, $34, 0 | PRIORITY + dbsprite -3, 1, 0, 0, $40, 0 | PRIORITY + dbsprite -2, 1, 0, 0, $41, 0 | PRIORITY + dbsprite -1, 1, 0, 0, $42, 0 | PRIORITY + dbsprite 0, 1, 0, 0, $43, 0 | PRIORITY + dbsprite 1, 1, 0, 0, $44, 0 | PRIORITY + dbsprite 2, 1, 0, 0, $45, 0 | PRIORITY + dbsprite -3, 2, 0, 0, $50, 0 | PRIORITY + dbsprite -2, 2, 0, 0, $51, 0 | PRIORITY + dbsprite -1, 2, 0, 0, $52, 0 | PRIORITY + dbsprite 0, 2, 0, 0, $53, 0 | PRIORITY + dbsprite 1, 2, 0, 0, $54, 0 | PRIORITY + dbsprite 2, 2, 0, 0, $55, 0 | PRIORITY + +.OAMData_GSIntroLapras3: + db 27 + dbsprite -3, -3, 0, 0, $0d, 0 + dbsprite -2, -3, 0, 0, $0e, 0 + dbsprite -1, -3, 0, 0, $0f, 0 + dbsprite -3, -2, 0, 0, $1d, 0 + dbsprite -2, -2, 0, 0, $1e, 0 + dbsprite -1, -2, 0, 0, $1f, 0 + dbsprite -3, -1, 0, 0, $20, 0 + dbsprite -2, -1, 0, 0, $21, 0 + dbsprite -1, -1, 0, 0, $22, 0 + dbsprite 0, -1, 0, 0, $23, 0 + dbsprite -3, 0, 0, 0, $30, 0 | PRIORITY + dbsprite -2, 0, 0, 0, $31, 0 | PRIORITY + dbsprite -1, 0, 0, 0, $32, 0 | PRIORITY + dbsprite 0, 0, 0, 0, $33, 0 | PRIORITY + dbsprite 1, 0, 0, 0, $34, 0 | PRIORITY + dbsprite -3, 1, 0, 0, $40, 0 | PRIORITY + dbsprite -2, 1, 0, 0, $41, 0 | PRIORITY + dbsprite -1, 1, 0, 0, $42, 0 | PRIORITY + dbsprite 0, 1, 0, 0, $43, 0 | PRIORITY + dbsprite 1, 1, 0, 0, $44, 0 | PRIORITY + dbsprite 2, 1, 0, 0, $45, 0 | PRIORITY + dbsprite -3, 2, 0, 0, $50, 0 | PRIORITY + dbsprite -2, 2, 0, 0, $51, 0 | PRIORITY + dbsprite -1, 2, 0, 0, $52, 0 | PRIORITY + dbsprite 0, 2, 0, 0, $53, 0 | PRIORITY + dbsprite 1, 2, 0, 0, $54, 0 | PRIORITY + dbsprite 2, 2, 0, 0, $55, 0 | PRIORITY + +.OAMData_GSIntroLapras4: + db 29 + dbsprite -3, -3, 0, 0, $00, 0 + dbsprite -2, -3, 0, 0, $01, 0 + dbsprite -1, -3, 0, 0, $02, 0 + dbsprite 0, -3, 0, 0, $03, 0 + dbsprite -3, -2, 0, 0, $10, 0 + dbsprite -2, -2, 0, 0, $11, 0 + dbsprite -1, -2, 0, 0, $12, 0 + dbsprite 0, -2, 0, 0, $13, 0 + dbsprite -3, -1, 0, 0, $20, 0 + dbsprite -2, -1, 0, 0, $21, 0 + dbsprite -1, -1, 0, 0, $22, 0 + dbsprite 0, -1, 0, 0, $23, 0 + dbsprite 1, -1, 0, 0, $24, 0 + dbsprite -3, 0, 0, 0, $30, 0 | PRIORITY + dbsprite -2, 0, 0, 0, $31, 0 | PRIORITY + dbsprite -1, 0, 0, 0, $32, 0 | PRIORITY + dbsprite 0, 0, 0, 0, $33, 0 | PRIORITY + dbsprite 1, 0, 0, 0, $34, 0 | PRIORITY + dbsprite -3, 1, 0, 0, $40, 0 | PRIORITY + dbsprite -2, 1, 0, 0, $41, 0 | PRIORITY + dbsprite -1, 1, 0, 0, $42, 0 | PRIORITY + dbsprite 0, 1, 0, 0, $43, 0 | PRIORITY + dbsprite 1, 1, 0, 0, $44, 0 | PRIORITY + dbsprite 2, 1, 0, 0, $45, 0 | PRIORITY + dbsprite -2, 2, 0, 0, $51, 0 | PRIORITY + dbsprite -1, 2, 0, 0, $52, 0 | PRIORITY + dbsprite 0, 2, 0, 0, $53, 0 | PRIORITY + dbsprite 1, 2, 0, 0, $54, 0 | PRIORITY + dbsprite 2, 2, 0, 0, $55, 0 | PRIORITY + +.OAMData_GSIntroNote: + db 2 + dbsprite -1, -1, 4, 0, $00, 0 + dbsprite -1, 0, 4, 0, $10, 0 + +.OAMData_GSIntroPikachuTail: + db 5 + dbsprite 3, -2, 0, 0, $00, 0 + dbsprite 4, -2, 0, 0, $01, 0 + dbsprite 2, -1, 0, 0, $02, 0 + dbsprite 3, -1, 0, 0, $03, 0 + dbsprite 2, 0, 0, 0, $04, 0 + +.OAMData_Leaf: + db 1 + dbsprite -1, -1, 4, 4, $00, PAL_OW_TREE + +.OAMData_Tree: + db 4 + dbsprite -1, -1, 0, 0, $00, PAL_OW_TREE + dbsprite 0, -1, 0, 0, $01, PAL_OW_TREE + dbsprite -1, 0, 0, 0, $02, PAL_OW_TREE + dbsprite 0, 0, 0, 0, $03, PAL_OW_TREE + +.OAMData_TextEntryCursor: + db 4 + dbsprite -1, -1, 7, 7, $00, 0 + dbsprite 0, -1, 0, 7, $00, 0 | X_FLIP + dbsprite -1, 0, 7, 0, $00, 0 | Y_FLIP + dbsprite 0, 0, 0, 0, $00, 0 | X_FLIP | Y_FLIP + +.OAMData_TextEntryCursorBig: + db 10 + dbsprite 0, -1, 0, 7, $00, 0 + dbsprite 1, -1, 0, 7, $01, 0 + dbsprite 2, -1, 0, 7, $01, 0 + dbsprite 3, -1, 0, 7, $01, 0 + dbsprite 4, -1, 0, 7, $00, 0 | X_FLIP + dbsprite 0, 0, 0, 0, $00, 0 | Y_FLIP + dbsprite 1, 0, 0, 0, $01, 0 | Y_FLIP + dbsprite 2, 0, 0, 0, $01, 0 | Y_FLIP + dbsprite 3, 0, 0, 0, $01, 0 | Y_FLIP + dbsprite 4, 0, 0, 0, $00, 0 | X_FLIP | Y_FLIP + +.OAMData_GSIntroGameFreakLogo: + db 15 + dbsprite -2, -3, 4, 4, $00, 1 | OBP_NUM + dbsprite -1, -3, 4, 4, $01, 1 | OBP_NUM + dbsprite 0, -3, 4, 4, $02, 1 | OBP_NUM + dbsprite -2, -2, 4, 4, $03, 1 | OBP_NUM + dbsprite -1, -2, 4, 4, $04, 1 | OBP_NUM + dbsprite 0, -2, 4, 4, $05, 1 | OBP_NUM + dbsprite -2, -1, 4, 4, $06, 1 | OBP_NUM + dbsprite -1, -1, 4, 4, $07, 1 | OBP_NUM + dbsprite 0, -1, 4, 4, $08, 1 | OBP_NUM + dbsprite -2, 0, 4, 4, $09, 1 | OBP_NUM + dbsprite -1, 0, 4, 4, $0a, 1 | OBP_NUM + dbsprite 0, 0, 4, 4, $0b, 1 | OBP_NUM + dbsprite -2, 1, 4, 4, $0c, 1 | OBP_NUM + dbsprite -1, 1, 4, 4, $0d, 1 | OBP_NUM + dbsprite 0, 1, 4, 4, $0e, 1 | OBP_NUM + +.OAMData_SlotsGolem: + db 6 + dbsprite -2, -2, 4, 4, $00, 5 | OBP_NUM + dbsprite -1, -2, 4, 4, $02, 5 | OBP_NUM + dbsprite 0, -2, 4, 4, $00, 5 | OBP_NUM | X_FLIP + dbsprite -2, 0, 4, 4, $04, 5 | OBP_NUM + dbsprite -1, 0, 4, 4, $06, 5 | OBP_NUM + dbsprite 0, 0, 4, 4, $04, 5 | OBP_NUM | X_FLIP + +.OAMData_SlotsChansey1: + db 6 + dbsprite -2, -2, 4, 4, $00, 6 | OBP_NUM + dbsprite -1, -2, 4, 4, $02, 6 | OBP_NUM + dbsprite 0, -2, 4, 4, $04, 6 | OBP_NUM + dbsprite -2, 0, 4, 4, $06, 6 | OBP_NUM + dbsprite -1, 0, 4, 4, $08, 6 | OBP_NUM + dbsprite 0, 0, 4, 4, $0a, 6 | OBP_NUM + +.OAMData_SlotsChansey2: + db 6 + dbsprite -2, -2, 4, 4, $00, 6 | OBP_NUM + dbsprite -1, -2, 4, 4, $02, 6 | OBP_NUM + dbsprite 0, -2, 4, 4, $04, 6 | OBP_NUM + dbsprite -2, 0, 4, 4, $0c, 6 | OBP_NUM + dbsprite -1, 0, 4, 4, $0e, 6 | OBP_NUM + dbsprite 0, 0, 4, 4, $10, 6 | OBP_NUM + +.OAMData_SlotsChansey3: + db 6 + dbsprite -2, -2, 4, 4, $00, 6 | OBP_NUM + dbsprite -1, -2, 4, 4, $02, 6 | OBP_NUM + dbsprite 0, -2, 4, 4, $04, 6 | OBP_NUM + dbsprite -2, 0, 4, 4, $12, 6 | OBP_NUM + dbsprite -1, 0, 4, 4, $14, 6 | OBP_NUM + dbsprite 0, 0, 4, 4, $16, 6 | OBP_NUM + +.OAMData_SlotsChansey4: + db 6 + dbsprite -2, -2, 4, 4, $00, 6 | OBP_NUM + dbsprite -1, -2, 4, 4, $02, 6 | OBP_NUM + dbsprite 0, -2, 4, 4, $04, 6 | OBP_NUM + dbsprite -2, 0, 4, 4, $18, 6 | OBP_NUM + dbsprite -1, 0, 4, 4, $1a, 6 | OBP_NUM + dbsprite 0, 0, 4, 4, $1c, 6 | OBP_NUM + +.OAMData_SlotsChansey5: + db 6 + dbsprite -2, -2, 4, 4, $1e, 6 | OBP_NUM + dbsprite -1, -2, 4, 4, $20, 6 | OBP_NUM + dbsprite 0, -2, 4, 4, $22, 6 | OBP_NUM + dbsprite -2, 0, 4, 4, $24, 6 | OBP_NUM + dbsprite -1, 0, 4, 4, $26, 6 | OBP_NUM + dbsprite 0, 0, 4, 4, $28, 6 | OBP_NUM + +.OAMData_RadioTuningKnob: + db 3 + dbsprite -1, -2, 4, 4, $00, 0 | OBP_NUM + dbsprite -1, -1, 4, 4, $00, 0 | OBP_NUM + dbsprite -1, 0, 4, 4, $00, 0 | OBP_NUM + +.OAMData_Unused4B: + db 6 + dbsprite 0, 0, 0, 0, $00, 0 + dbsprite 1, 0, 0, 0, $01, 0 + dbsprite 2, 0, 0, 0, $01, 0 + dbsprite 3, 0, 0, 0, $01, 0 + dbsprite 4, 0, 0, 0, $02, 0 + dbsprite 5, 0, 0, 0, $03, 0 + +.OAMData_Unused4C: + db 4 + dbsprite 0, 0, 0, 0, $00, 0 + dbsprite 1, 0, 0, 0, $01, 0 + dbsprite 2, 0, 0, 0, $02, 0 + dbsprite 3, 0, 0, 0, $03, 0 + +.OAMData_CutTree2: + db 4 + dbsprite -2, -1, 6, 0, $00, PAL_OW_TREE + dbsprite 0, -1, 2, 0, $01, PAL_OW_TREE + dbsprite -2, 0, 6, 0, $02, PAL_OW_TREE + dbsprite 0, 0, 2, 0, $03, PAL_OW_TREE + +.OAMData_CutTree3: + db 4 + dbsprite -2, -1, 4, 0, $00, PAL_OW_TREE + dbsprite 0, -1, 4, 0, $01, PAL_OW_TREE + dbsprite -2, 0, 4, 0, $02, PAL_OW_TREE + dbsprite 0, 0, 4, 0, $03, PAL_OW_TREE + +.OAMData_CutTree4: + db 4 + dbsprite -2, -1, 0, 0, $00, PAL_OW_TREE + dbsprite 1, -1, 0, 0, $01, PAL_OW_TREE + dbsprite -2, 0, 0, 0, $02, PAL_OW_TREE + dbsprite 1, 0, 0, 0, $03, PAL_OW_TREE + +IF DEF(_GOLD) +.OAMData_GSIntroHoOh1: + db 19 + dbsprite -4, -1, 0, 0, $00, 0 + dbsprite -3, -2, 0, 0, $02, 0 + dbsprite -3, 0, 0, 0, $04, 0 + dbsprite -2, -3, 0, 0, $06, 0 + dbsprite -2, -1, 0, 0, $08, 0 + dbsprite -2, 1, 0, 0, $0a, 0 + dbsprite -1, -3, 0, 0, $0c, 0 + dbsprite -1, -1, 0, 0, $0e, 0 + dbsprite -1, 1, 0, 0, $10, 0 + dbsprite 0, -3, 0, 0, $12, 0 + dbsprite 0, -1, 0, 0, $14, 0 + dbsprite 0, 1, 0, 0, $16, 0 + dbsprite 1, -3, 0, 0, $18, 0 + dbsprite 1, -1, 0, 0, $1a, 0 + dbsprite 1, 1, 0, 0, $1c, 0 + dbsprite 2, -1, 0, 0, $1e, 0 + dbsprite 2, 1, 0, 0, $20, 0 + dbsprite 3, -2, 0, 0, $22, 0 + dbsprite 3, 0, 0, 0, $24, 0 + +.OAMData_GSIntroHoOh2: + db 16 + dbsprite -4, -1, 0, 0, $00, 0 + dbsprite -3, -2, 0, 0, $02, 0 + dbsprite -3, 0, 0, 0, $04, 0 + dbsprite -2, -1, 0, 0, $26, 0 + dbsprite -2, 1, 0, 0, $0a, 0 + dbsprite -1, -3, 0, 0, $28, 0 + dbsprite -1, -1, 0, 0, $2a, 0 + dbsprite -1, 1, 0, 0, $10, 0 + dbsprite 0, -1, 0, 0, $2c, 0 + dbsprite 0, 1, 0, 0, $16, 0 + dbsprite 1, -1, 0, 0, $30, 0 + dbsprite 1, 1, 0, 0, $1c, 0 + dbsprite 2, -1, 0, 0, $1e, 0 + dbsprite 2, 1, 0, 0, $20, 0 + dbsprite 3, -2, 0, 0, $22, 0 + dbsprite 3, 0, 0, 0, $24, 0 + +.OAMData_GSIntroHoOh3: + db 15 + dbsprite -4, -1, 0, 0, $00, 0 + dbsprite -3, -2, 0, 0, $02, 0 + dbsprite -3, 0, 0, 0, $32, 0 + dbsprite -2, -1, 0, 0, $34, 0 + dbsprite -2, 1, 0, 0, $36, 0 + dbsprite -1, -1, 0, 0, $38, 0 + dbsprite -1, 1, 0, 0, $3a, 0 + dbsprite 0, -1, 0, 0, $3c, 0 + dbsprite 0, 1, 0, 0, $3e, 0 + dbsprite 1, -1, 0, 0, $30, 0 + dbsprite 1, 1, 0, 0, $1c, 0 + dbsprite 2, -1, 0, 0, $1e, 0 + dbsprite 2, 1, 0, 0, $20, 0 + dbsprite 3, -2, 0, 0, $22, 0 + dbsprite 3, 0, 0, 0, $24, 0 + +.OAMData_GSIntroHoOh4: + db 17 + dbsprite -4, -1, 0, 0, $00, 0 + dbsprite -3, -2, 0, 0, $02, 0 + dbsprite -3, 0, 0, 0, $04, 0 + dbsprite -2, -1, 0, 0, $40, 0 + dbsprite -2, 1, 0, 0, $42, 0 + dbsprite -2, 3, 0, 0, $44, 0 + dbsprite -1, -1, 0, 0, $46, 0 + dbsprite -1, 1, 0, 0, $48, 0 + dbsprite -1, 3, 0, 0, $4a, 0 + dbsprite 0, -1, 0, 0, $4c, 0 + dbsprite 0, 1, 0, 0, $4e, 0 + dbsprite 1, -1, 0, 0, $30, 0 + dbsprite 1, 1, 0, 0, $1c, 0 + dbsprite 2, -1, 0, 0, $1e, 0 + dbsprite 2, 1, 0, 0, $20, 0 + dbsprite 3, -2, 0, 0, $22, 0 + dbsprite 3, 0, 0, 0, $24, 0 + +.OAMData_GSIntroHoOh5: + db 17 + dbsprite -4, -1, 0, 0, $00, 0 + dbsprite -3, -2, 0, 0, $02, 0 + dbsprite -3, 0, 0, 0, $04, 0 + dbsprite -2, -1, 0, 0, $50, 0 + dbsprite -2, 1, 0, 0, $0a, 0 + dbsprite -1, -3, 0, 0, $52, 0 + dbsprite -1, -1, 0, 0, $54, 0 + dbsprite -1, 1, 0, 0, $10, 0 + dbsprite 0, -3, 0, 0, $56, 0 + dbsprite 0, -1, 0, 0, $2e, 0 + dbsprite 0, 1, 0, 0, $16, 0 + dbsprite 1, -1, 0, 0, $30, 0 + dbsprite 1, 1, 0, 0, $1c, 0 + dbsprite 2, -1, 0, 0, $1e, 0 + dbsprite 2, 1, 0, 0, $20, 0 + dbsprite 3, -2, 0, 0, $22, 0 + dbsprite 3, 0, 0, 0, $24, 0 + +.OAMData_GSTitleTrail: + db 1 + dbsprite -1, -1, 4, 4, $00, 1 | OBP_NUM + +ELIF DEF(_SILVER) +.OAMData_GSIntroLugia1: + db 16 + dbsprite -5, -2, 0, 0, $00, 0 + dbsprite -5, 0, 0, 0, $02, 0 + dbsprite -4, -2, 0, 0, $04, 0 + dbsprite -4, 0, 0, 0, $06, 0 + dbsprite -3, -1, 0, 0, $08, 0 + dbsprite -2, -1, 0, 0, $0a, 0 + dbsprite -1, -2, 0, 0, $0c, 0 + dbsprite -1, 0, 0, 0, $0e, 0 + dbsprite 0, -2, 0, 0, $10, 0 + dbsprite 0, 0, 0, 0, $12, 0 + dbsprite 1, -2, 0, 0, $14, 0 + dbsprite 1, 0, 0, 0, $16, 0 + dbsprite 2, -2, 0, 0, $18, 0 + dbsprite 2, 0, 0, 0, $1a, 0 + dbsprite 3, -1, 0, 0, $1c, 0 + dbsprite 4, -1, 0, 0, $1e, 0 + +.OAMData_GSIntroLugia2: + db 16 + dbsprite -5, -2, 0, 0, $00, 0 + dbsprite -5, 0, 0, 0, $02, 0 + dbsprite -4, -2, 0, 0, $04, 0 + dbsprite -4, 0, 0, 0, $06, 0 + dbsprite -3, -1, 0, 0, $08, 0 + dbsprite -2, -1, 0, 0, $0a, 0 + dbsprite -1, -2, 0, 0, $0c, 0 + dbsprite -1, 0, 0, 0, $0e, 0 + dbsprite 0, -2, 0, 0, $10, 0 + dbsprite 0, 0, 0, 0, $12, 0 + dbsprite 1, -2, 0, 0, $14, 0 + dbsprite 1, 0, 0, 0, $16, 0 + dbsprite 2, -2, 0, 0, $18, 0 + dbsprite 2, 0, 0, 0, $1a, 0 + dbsprite 3, -2, 0, 0, $1c, 0 + dbsprite 4, -2, 0, 0, $1e, 0 + +.OAMData_GSIntroLugia3: + db 17 + dbsprite -5, -2, 0, 0, $3c, 0 + dbsprite -5, 0, 0, 0, $3e, 0 + dbsprite -4, -2, 0, 0, $40, 0 + dbsprite -4, 0, 0, 0, $42, 0 + dbsprite -3, -1, 0, 0, $44, 0 + dbsprite -2, -2, 0, 0, $46, 0 + dbsprite -2, 0, 0, 0, $48, 0 + dbsprite -1, -2, 0, 0, $4a, 0 + dbsprite -1, 0, 0, 0, $78, 0 + dbsprite 0, -2, 0, 0, $4c, 0 + dbsprite 0, 0, 0, 0, $7a, 0 + dbsprite 1, -2, 0, 0, $4e, 0 + dbsprite 1, 0, 0, 0, $50, 0 + dbsprite 2, -2, 0, 0, $52, 0 + dbsprite 2, 0, 0, 0, $54, 0 + dbsprite 3, -1, 0, 0, $56, 0 + dbsprite 4, -1, 0, 0, $58, 0 + +.OAMData_GSIntroLugia4: + db 17 + dbsprite -5, -2, 0, 0, $5a, 0 + dbsprite -5, 0, 0, 0, $5c, 0 + dbsprite -4, -2, 0, 0, $5e, 0 + dbsprite -4, 0, 0, 0, $60, 0 + dbsprite -3, -1, 0, 0, $62, 0 + dbsprite -2, -2, 0, 0, $64, 0 + dbsprite -2, 0, 0, 0, $66, 0 + dbsprite -1, -2, 0, 0, $68, 0 + dbsprite -1, 0, 0, 0, $78, 0 + dbsprite 0, -2, 0, 0, $6a, 0 + dbsprite 0, 0, 0, 0, $7a, 0 + dbsprite 1, -2, 0, 0, $6c, 0 + dbsprite 1, 0, 0, 0, $6e, 0 + dbsprite 2, -2, 0, 0, $70, 0 + dbsprite 2, 0, 0, 0, $72, 0 + dbsprite 3, -1, 0, 0, $74, 0 + dbsprite 4, -1, 0, 0, $76, 0 + +; unused / copy of intro4 +.OAMData_GSIntroLugia5: + db 17 + dbsprite -5, -2, 0, 0, $5a, 0 + dbsprite -5, 0, 0, 0, $5c, 0 + dbsprite -4, -2, 0, 0, $5e, 0 + dbsprite -4, 0, 0, 0, $60, 0 + dbsprite -3, -1, 0, 0, $62, 0 + dbsprite -2, -2, 0, 0, $64, 0 + dbsprite -2, 0, 0, 0, $66, 0 + dbsprite -1, -2, 0, 0, $68, 0 + dbsprite -1, 0, 0, 0, $78, 0 + dbsprite 0, -2, 0, 0, $6a, 0 + dbsprite 0, 0, 0, 0, $7a, 0 + dbsprite 1, -2, 0, 0, $6c, 0 + dbsprite 1, 0, 0, 0, $6e, 0 + dbsprite 2, -2, 0, 0, $70, 0 + dbsprite 2, 0, 0, 0, $72, 0 + dbsprite 3, -1, 0, 0, $74, 0 + dbsprite 4, -1, 0, 0, $76, 0 + +.OAMData_GSTitleTrail: + db 2 + dbsprite -1, -1, 0, 0, $00, 0 + dbsprite 0, -1, 0, 0, $02, 0 +ENDC diff --git a/data/sprite_anims/sequences.asm b/data/sprite_anims/sequences.asm new file mode 100755 index 00000000..2c240d24 --- /dev/null +++ b/data/sprite_anims/sequences.asm @@ -0,0 +1,50 @@ +SpriteAnimSeqData: +; entries correspond to SPRITE_ANIM_INDEX_* constants + ; frameset, sequence, tile + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_SEQ_PARTY_MON, $00 ; SPRITE_ANIM_INDEX_PARTY_MON + db SPRITE_ANIM_FRAMESET_GS_INTRO_BUBBLE, SPRITE_ANIM_SEQ_GS_INTRO_BUBBLE, $00 ; SPRITE_ANIM_INDEX_GS_INTRO_BUBBLE + db SPRITE_ANIM_FRAMESET_GS_INTRO_SHELLDER, SPRITE_ANIM_SEQ_GS_INTRO_SHELLDER, $00 ; SPRITE_ANIM_INDEX_GS_INTRO_SHELLDER + db SPRITE_ANIM_FRAMESET_GS_INTRO_MAGIKARP, SPRITE_ANIM_SEQ_GS_INTRO_MAGIKARP, $00 ; SPRITE_ANIM_INDEX_GS_INTRO_MAGIKARP + db SPRITE_ANIM_FRAMESET_GS_INTRO_LAPRAS, SPRITE_ANIM_SEQ_GS_INTRO_LAPRAS, $00 ; SPRITE_ANIM_INDEX_GS_INTRO_LAPRAS + db SPRITE_ANIM_FRAMESET_GS_INTRO_LAPRAS_2, SPRITE_ANIM_SEQ_GS_INTRO_LAPRAS_2, $00 ; SPRITE_ANIM_INDEX_GS_INTRO_LAPRAS_2 + db SPRITE_ANIM_FRAMESET_GS_INTRO_NOTE, SPRITE_ANIM_SEQ_GS_INTRO_NOTE, $01 ; SPRITE_ANIM_INDEX_GS_INTRO_NOTE + db SPRITE_ANIM_FRAMESET_GS_INTRO_INVISIBLE_NOTE, SPRITE_ANIM_SEQ_GS_INTRO_NOTE, $01 ; SPRITE_ANIM_INDEX_GS_INTRO_INVISIBLE_NOTE + db SPRITE_ANIM_FRAMESET_GS_INTRO_JIGGLYPUFF, SPRITE_ANIM_SEQ_GS_INTRO_JIGGLYPUFF, $01 ; SPRITE_ANIM_INDEX_GS_INTRO_JIGGLYPUFF + db SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU, SPRITE_ANIM_SEQ_GS_INTRO_PIKACHU, $01 ; SPRITE_ANIM_INDEX_GS_INTRO_PIKACHU + db SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_TAIL, SPRITE_ANIM_SEQ_GS_INTRO_PIKACHU_TAIL, $01 ; SPRITE_ANIM_INDEX_GS_INTRO_PIKACHU_TAIL + db SPRITE_ANIM_FRAMESET_GS_INTRO_FIREBALL, SPRITE_ANIM_SEQ_GS_INTRO_FIREBALL, $02 ; SPRITE_ANIM_INDEX_GS_INTRO_FIREBALL + db SPRITE_ANIM_FRAMESET_GS_INTRO_CHIKORITA, SPRITE_ANIM_SEQ_GS_INTRO_CHIKORITA_TOTODILE, $02 ; SPRITE_ANIM_INDEX_GS_INTRO_CHIKORITA + db SPRITE_ANIM_FRAMESET_GS_INTRO_CYNDAQUIL, SPRITE_ANIM_SEQ_GS_INTRO_CYNDAQUIL, $02 ; SPRITE_ANIM_INDEX_GS_INTRO_CYNDAQUIL + db SPRITE_ANIM_FRAMESET_GS_INTRO_TOTODILE, SPRITE_ANIM_SEQ_GS_INTRO_CHIKORITA_TOTODILE, $02 ; SPRITE_ANIM_INDEX_GS_INTRO_TOTODILE + db SPRITE_ANIM_FRAMESET_GS_TITLE_TRAIL, SPRITE_ANIM_SEQ_GS_TITLE_TRAIL, $00 ; SPRITE_ANIM_INDEX_GS_TITLE_TRAIL + db SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU, SPRITE_ANIM_SEQ_UNUSED_PIKACHU, $01 ; SPRITE_ANIM_INDEX_UNUSED_PIKACHU + db SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_TAIL, SPRITE_ANIM_SEQ_UNUSED_PIKACHU_TAIL, $01 ; SPRITE_ANIM_INDEX_UNUSED_PIKACHU_TAIL + db SPRITE_ANIM_FRAMESET_GS_INTRO_NOTE, SPRITE_ANIM_SEQ_UNUSED_NOTE, $01 ; SPRITE_ANIM_INDEX_UNUSED_NOTE + db SPRITE_ANIM_FRAMESET_GS_INTRO_JIGGLYPUFF, SPRITE_ANIM_SEQ_UNUSED_JIGGLYPUFF, $01 ; SPRITE_ANIM_INDEX_UNUSED_JIGGLYPUFF + db SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR, SPRITE_ANIM_SEQ_NAMING_SCREEN_CURSOR, $05 ; SPRITE_ANIM_INDEX_NAMING_SCREEN_CURSOR + db SPRITE_ANIM_FRAMESET_GAMEFREAK_LOGO, SPRITE_ANIM_SEQ_GAMEFREAK_LOGO, $06 ; SPRITE_ANIM_INDEX_GAMEFREAK_LOGO + db SPRITE_ANIM_FRAMESET_GS_INTRO_STAR, SPRITE_ANIM_SEQ_GS_INTRO_STAR, $06 ; SPRITE_ANIM_INDEX_GS_INTRO_STAR + db SPRITE_ANIM_FRAMESET_GS_INTRO_SPARKLE, SPRITE_ANIM_SEQ_GS_INTRO_SPARKLE, $06 ; SPRITE_ANIM_INDEX_GS_INTRO_SPARKLE + db SPRITE_ANIM_FRAMESET_SLOTS_GOLEM, SPRITE_ANIM_SEQ_SLOTS_GOLEM, $07 ; SPRITE_ANIM_INDEX_SLOTS_GOLEM + db SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY, SPRITE_ANIM_SEQ_SLOTS_CHANSEY, $07 ; SPRITE_ANIM_INDEX_SLOTS_CHANSEY + db SPRITE_ANIM_FRAMESET_SLOTS_EGG, SPRITE_ANIM_SEQ_SLOTS_EGG, $07 ; SPRITE_ANIM_INDEX_SLOTS_EGG + db SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR, SPRITE_ANIM_SEQ_MAIL_CURSOR, $05 ; SPRITE_ANIM_INDEX_COMPOSE_MAIL_CURSOR + db SPRITE_ANIM_FRAMESET_RED_WALK, SPRITE_ANIM_SEQ_NULL, $00 ; SPRITE_ANIM_INDEX_RED_WALK + db SPRITE_ANIM_FRAMESET_STILL_CURSOR, SPRITE_ANIM_SEQ_UNUSED_CURSOR, $08 ; SPRITE_ANIM_INDEX_UNUSED_CURSOR + db SPRITE_ANIM_FRAMESET_STILL_CURSOR, SPRITE_ANIM_SEQ_DUMMY_GAME_CURSOR, $08 ; SPRITE_ANIM_INDEX_DUMMY_GAME + db SPRITE_ANIM_FRAMESET_STILL_CURSOR, SPRITE_ANIM_SEQ_POKEGEAR_ARROW, $08 ; SPRITE_ANIM_INDEX_POKEGEAR_ARROW + db SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL, SPRITE_ANIM_SEQ_TRADE_POKE_BALL, $00 ; SPRITE_ANIM_INDEX_TRADE_POKE_BALL + db SPRITE_ANIM_FRAMESET_TRADE_POOF, SPRITE_ANIM_SEQ_NULL, $00 ; SPRITE_ANIM_INDEX_TRADE_POOF + db SPRITE_ANIM_FRAMESET_TRADE_TUBE_BULGE, SPRITE_ANIM_SEQ_TRADE_TUBE_BULGE, $00 ; SPRITE_ANIM_INDEX_TRADE_TUBE_BULGE + db SPRITE_ANIM_FRAMESET_TRADEMON_ICON, SPRITE_ANIM_SEQ_TRADEMON_IN_TUBE, $00 ; SPRITE_ANIM_INDEX_TRADEMON_ICON + db SPRITE_ANIM_FRAMESET_TRADEMON_BUBBLE, SPRITE_ANIM_SEQ_TRADEMON_IN_TUBE, $00 ; SPRITE_ANIM_INDEX_TRADEMON_BUBBLE + db SPRITE_ANIM_FRAMESET_EVOLUTION_BALL_OF_LIGHT, SPRITE_ANIM_SEQ_REVEAL_NEW_MON, $00 ; SPRITE_ANIM_INDEX_EVOLUTION_BALL_OF_LIGHT + db SPRITE_ANIM_FRAMESET_RADIO_TUNING_KNOB, SPRITE_ANIM_SEQ_RADIO_TUNING_KNOB, $00 ; SPRITE_ANIM_INDEX_RADIO_TUNING_KNOB + db SPRITE_ANIM_FRAMESET_MAGNET_TRAIN_RED, SPRITE_ANIM_SEQ_NULL, $00 ; SPRITE_ANIM_INDEX_MAGNET_TRAIN_RED + db SPRITE_ANIM_FRAMESET_LEAF, SPRITE_ANIM_SEQ_CUT_LEAVES, $00 ; SPRITE_ANIM_INDEX_LEAF + db SPRITE_ANIM_FRAMESET_CUT_TREE, SPRITE_ANIM_SEQ_NULL, $00 ; SPRITE_ANIM_INDEX_CUT_TREE + db SPRITE_ANIM_FRAMESET_LEAF, SPRITE_ANIM_SEQ_FLY_LEAF, $00 ; SPRITE_ANIM_INDEX_FLY_LEAF + db SPRITE_ANIM_FRAMESET_EGG_CRACK, SPRITE_ANIM_SEQ_NULL, $00 ; SPRITE_ANIM_INDEX_EGG_CRACK + db SPRITE_ANIM_FRAMESET_GS_INTRO_HO_OH_LUGIA, SPRITE_ANIM_SEQ_GS_INTRO_HO_OH_LUGIA, $00 ; SPRITE_ANIM_INDEX_GS_INTRO_HO_OH + db SPRITE_ANIM_FRAMESET_HEADBUTT, SPRITE_ANIM_SEQ_NULL, $00 ; SPRITE_ANIM_INDEX_HEADBUTT + db SPRITE_ANIM_FRAMESET_EGG_HATCH_1, SPRITE_ANIM_SEQ_REVEAL_NEW_MON, $00 ; SPRITE_ANIM_INDEX_EGG_HATCH diff --git a/engine/battle/battle_transition.asm b/engine/battle/battle_transition.asm new file mode 100755 index 00000000..4de4d347 --- /dev/null +++ b/engine/battle/battle_transition.asm @@ -0,0 +1,747 @@ +; BattleTransitionJumptable.Jumptable indexes +BATTLETRANSITION_CAVE EQU $01 +BATTLETRANSITION_CAVE_STRONGER EQU $09 +BATTLETRANSITION_NO_CAVE EQU $10 +BATTLETRANSITION_NO_CAVE_STRONGER EQU $18 +BATTLETRANSITION_FINISH EQU $20 +BATTLETRANSITION_END EQU $80 + +BATTLETRANSITION_SQUARE EQU "8" ; $fe +BATTLETRANSITION_BLACK EQU "9" ; $ff + +DoBattleTransition: + call .InitGFX + ldh a, [rBGP] + ld [wBGP], a + ldh a, [rOBP0] + ld [wOBP0], a + ldh a, [rOBP1] + ld [wOBP1], a + call DelayFrame + ld hl, hVBlank + ld a, [hl] + push af + ld [hl], 1 + +.loop + ld a, [wJumptableIndex] + bit 7, a ; BATTLETRANSITION_END? + jr nz, .done + call BattleTransitionJumptable + call DelayFrame + jr .loop + +.done + ld hl, wBGPals1 + ld bc, 8 palettes + xor a + call ByteFill + + ld a, %11111111 + ld [wBGP], a + call DmgToCgbBGPals + call DelayFrame + xor a + ldh [hLCDCPointer], a + ldh [hLYOverrideStart], a + ldh [hLYOverrideEnd], a + ldh [hSCY], a + + pop af + ldh [hVBlank], a + call DelayFrame + ret + +.InitGFX: + farcall ReanchorBGMap_NoOAMUpdate + call UpdateSprites + call DelayFrame + call ConvertTrainerBattlePokeballTilesTo2bpp + call CGBOnly_CopyTilemapAtOnce + + ld a, SCREEN_HEIGHT_PX + ldh [hWY], a + call DelayFrame + xor a + ldh [hBGMapMode], a + ld hl, wJumptableIndex + xor a + ld [hli], a + ld [hli], a + ld [hl], a + call WipeLYOverrides + ret + +ConvertTrainerBattlePokeballTilesTo2bpp: + ld hl, wDecompressScratch + ld bc, $28 tiles +.loop + ld [hl], -1 + inc hl + dec bc + ld a, c + or b + jr nz, .loop + + ld de, wDecompressScratch + ld hl, vBGMap2 + ld b, BANK(@) + ld c, $28 + call Request2bpp + + ld de, TrainerBattlePokeballTiles + ld hl, vTiles3 tile BATTLETRANSITION_SQUARE + ld b, BANK(TrainerBattlePokeballTiles) + ld c, 2 + call Request2bpp + ret + +TrainerBattlePokeballTiles: +INCBIN "gfx/overworld/trainer_battle_pokeball_tiles.2bpp" + +BattleTransitionJumptable: + jumptable .Jumptable, wJumptableIndex + +.Jumptable + dw StartTrainerBattle_DetermineWhichAnimation ; 00 + + ; BATTLETRANSITION_CAVE + dw StartTrainerBattle_LoadPokeBallGraphics ; 01 + dw StartTrainerBattle_SetUpBGMap ; 02 + dw StartTrainerBattle_Flash ; 03 + dw StartTrainerBattle_Flash ; 04 + dw StartTrainerBattle_Flash ; 05 + dw StartTrainerBattle_NextScene ; 06 + dw StartTrainerBattle_SetUpForWavyOutro ; 07 + dw StartTrainerBattle_SineWave ; 08 + + ; BATTLETRANSITION_CAVE_STRONGER + dw StartTrainerBattle_LoadPokeBallGraphics ; 09 + dw StartTrainerBattle_SetUpBGMap ; 0a + dw StartTrainerBattle_Flash ; 0b + dw StartTrainerBattle_Flash ; 0c + dw StartTrainerBattle_Flash ; 0d + dw StartTrainerBattle_NextScene ; 0e + ; There is no setup for this one + dw StartTrainerBattle_ZoomToBlack ; 0f + + ; BATTLETRANSITION_NO_CAVE + dw StartTrainerBattle_LoadPokeBallGraphics ; 10 + dw StartTrainerBattle_SetUpBGMap ; 11 + dw StartTrainerBattle_Flash ; 12 + dw StartTrainerBattle_Flash ; 13 + dw StartTrainerBattle_Flash ; 14 + dw StartTrainerBattle_NextScene ; 15 + dw StartTrainerBattle_SetUpForSpinOutro ; 16 + dw StartTrainerBattle_SpinToBlack ; 17 + + ; BATTLETRANSITION_NO_CAVE_STRONGER + dw StartTrainerBattle_LoadPokeBallGraphics ; 18 + dw StartTrainerBattle_SetUpBGMap ; 19 + dw StartTrainerBattle_Flash ; 1a + dw StartTrainerBattle_Flash ; 1b + dw StartTrainerBattle_Flash ; 1c + dw StartTrainerBattle_NextScene ; 1d + dw StartTrainerBattle_SetUpForRandomScatterOutro ; 1e + dw StartTrainerBattle_SpeckleToBlack ; 1f + + ; BATTLETRANSITION_FINISH + dw StartTrainerBattle_Finish ; 20 + +; transition animations + const_def + const TRANS_CAVE + const TRANS_CAVE_STRONGER + const TRANS_NO_CAVE + const TRANS_NO_CAVE_STRONGER + +; transition animation bits +TRANS_STRONGER_F EQU 0 ; bit set in TRANS_CAVE_STRONGER and TRANS_NO_CAVE_STRONGER +TRANS_NO_CAVE_F EQU 1 ; bit set in TRANS_NO_CAVE and TRANS_NO_CAVE_STRONGER + +StartTrainerBattle_DetermineWhichAnimation: +; The screen flashes a different number of times depending on the level of +; your lead Pokemon relative to the opponent's. +; BUG: wBattleMonLevel and wEnemyMonLevel are not set at this point, so whatever +; values happen to be there will determine the animation. + ld de, 0 + ld a, [wBattleMonLevel] + add 3 + ld hl, wEnemyMonLevel + cp [hl] + jr nc, .not_stronger + set TRANS_STRONGER_F, e +.not_stronger + ld a, [wEnvironment] + cp CAVE + jr z, .cave + cp ENVIRONMENT_5 + jr z, .cave + cp DUNGEON + jr z, .cave + set TRANS_NO_CAVE_F, e +.cave + ld hl, .StartingPoints + add hl, de + ld a, [hl] + ld [wJumptableIndex], a + ret + +.StartingPoints: +; entries correspond to TRANS_* constants + db BATTLETRANSITION_CAVE + db BATTLETRANSITION_CAVE_STRONGER + db BATTLETRANSITION_NO_CAVE + db BATTLETRANSITION_NO_CAVE_STRONGER + +StartTrainerBattle_Finish: + call ClearSprites + ld a, BATTLETRANSITION_END + ld [wJumptableIndex], a + ret + +StartTrainerBattle_NextScene: + ld hl, wJumptableIndex + inc [hl] + ret + +StartTrainerBattle_SetUpBGMap: + call StartTrainerBattle_NextScene + xor a + ld [wce64], a + ldh [hBGMapMode], a + ret + +StartTrainerBattle_Flash: + call .DoFlashAnimation + ret nc + call StartTrainerBattle_NextScene + ret + +.DoFlashAnimation: + ld a, [wTimeOfDayPalset] + cp %11111111 ; dark cave + jr z, .done + ld hl, wce64 + ld a, [hl] + inc [hl] + srl a + ld e, a + ld d, 0 + ld hl, .pals + add hl, de + ld a, [hl] + cp %00000001 + jr z, .done + ld [wBGP], a + call DmgToCgbBGPals + and a + ret + +.done + xor a + ld [wce64], a + scf + ret + +.pals + dc 3, 3, 2, 1 + dc 3, 3, 3, 2 + dc 3, 3, 3, 3 + dc 3, 3, 3, 2 + dc 3, 3, 2, 1 + dc 3, 2, 1, 0 + dc 2, 1, 0, 0 + dc 1, 0, 0, 0 + dc 0, 0, 0, 0 + dc 1, 0, 0, 0 + dc 2, 1, 0, 0 + dc 3, 2, 1, 0 + dc 0, 0, 0, 1 + +StartTrainerBattle_SetUpForWavyOutro: + farcall Function55a1 + + call StartTrainerBattle_NextScene + + ld a, LOW(rSCX) + ldh [hLCDCPointer], a + xor a + ldh [hLYOverrideStart], a + ld a, $90 + ldh [hLYOverrideEnd], a + xor a + ld [wce64], a + ld [wce65], a + ret + +StartTrainerBattle_SineWave: + ld a, [wce64] + cp $60 + jr nc, .end + call .DoSineWave + ret + +.end + ld a, BATTLETRANSITION_FINISH + ld [wJumptableIndex], a + ret + +.DoSineWave: + ld hl, wce65 + ld a, [hl] + inc [hl] + ld hl, wce64 + ld d, [hl] + add [hl] + ld [hl], a + ld a, wLYOverridesEnd - wLYOverrides + ld bc, wLYOverrides + ld e, 0 + +.loop + push af + push de + ld a, e + call StartTrainerBattle_DrawSineWave + ld [bc], a + inc bc + pop de + ld a, e + add 2 + ld e, a + pop af + dec a + jr nz, .loop + ret + +StartTrainerBattle_SetUpForSpinOutro: + farcall Function55a1 + call StartTrainerBattle_NextScene + xor a + ld [wce64], a + ret + +StartTrainerBattle_SpinToBlack: + xor a + ldh [hBGMapMode], a + ld a, [wce64] + ld e, a + ld d, 0 + ld hl, .spintable +rept 5 + add hl, de +endr + ld a, [hli] + cp -1 + jr z, .end + ld [wce65], a + call .load + ld a, 1 + ldh [hBGMapMode], a + call DelayFrame + call DelayFrame + ld hl, wce64 + inc [hl] + ret + +.end + ld a, 1 + ldh [hBGMapMode], a + call DelayFrame + call DelayFrame + call DelayFrame + xor a + ldh [hBGMapMode], a + ld a, BATTLETRANSITION_FINISH + ld [wJumptableIndex], a + ret + +; quadrants + const_def + const UPPER_LEFT + const UPPER_RIGHT + const LOWER_LEFT + const LOWER_RIGHT + +; quadrant bits +RIGHT_QUADRANT_F EQU 0 ; bit set in UPPER_RIGHT and LOWER_RIGHT +LOWER_QUADRANT_F EQU 1 ; bit set in LOWER_LEFT and LOWER_RIGHT + +.spintable +spintable_entry: MACRO + db \1 + dw .wedge\2 + dwcoord \3, \4 +ENDM + spintable_entry UPPER_LEFT, 1, 1, 6 + spintable_entry UPPER_LEFT, 2, 0, 3 + spintable_entry UPPER_LEFT, 3, 1, 0 + spintable_entry UPPER_LEFT, 4, 5, 0 + spintable_entry UPPER_LEFT, 5, 9, 0 + spintable_entry UPPER_RIGHT, 5, 10, 0 + spintable_entry UPPER_RIGHT, 4, 14, 0 + spintable_entry UPPER_RIGHT, 3, 18, 0 + spintable_entry UPPER_RIGHT, 2, 19, 3 + spintable_entry UPPER_RIGHT, 1, 18, 6 + spintable_entry LOWER_RIGHT, 1, 18, 11 + spintable_entry LOWER_RIGHT, 2, 19, 14 + spintable_entry LOWER_RIGHT, 3, 18, 17 + spintable_entry LOWER_RIGHT, 4, 14, 17 + spintable_entry LOWER_RIGHT, 5, 10, 17 + spintable_entry LOWER_LEFT, 5, 9, 17 + spintable_entry LOWER_LEFT, 4, 5, 17 + spintable_entry LOWER_LEFT, 3, 1, 17 + spintable_entry LOWER_LEFT, 2, 0, 14 + spintable_entry LOWER_LEFT, 1, 1, 11 + db -1 + +.load + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + ld h, [hl] + ld l, a +.loop + push hl + ld a, [de] + ld c, a + inc de +.loop1 + ld [hl], BATTLETRANSITION_BLACK + ld a, [wce65] + bit RIGHT_QUADRANT_F, a + jr z, .leftside + inc hl + jr .okay1 +.leftside + dec hl +.okay1 + dec c + jr nz, .loop1 + pop hl + ld a, [wce65] + bit LOWER_QUADRANT_F, a + ld bc, SCREEN_WIDTH + jr z, .upper + ld bc, -SCREEN_WIDTH +.upper + add hl, bc + ld a, [de] + inc de + cp -1 + ret z + and a + jr z, .loop + ld c, a +.loop2 + ld a, [wce65] + bit RIGHT_QUADRANT_F, a + jr z, .leftside2 + dec hl + jr .okay2 +.leftside2 + inc hl +.okay2 + dec c + jr nz, .loop2 + jr .loop + +.wedge1 db 2, 3, 5, 4, 9, -1 +.wedge2 db 1, 1, 2, 2, 4, 2, 4, 2, 3, -1 +.wedge3 db 2, 1, 3, 1, 4, 1, 4, 1, 4, 1, 3, 1, 2, 1, 1, 1, 1, -1 +.wedge4 db 4, 1, 4, 0, 3, 1, 3, 0, 2, 1, 2, 0, 1, -1 +.wedge5 db 4, 0, 3, 0, 3, 0, 2, 0, 2, 0, 1, 0, 1, 0, 1, -1 + +StartTrainerBattle_SetUpForRandomScatterOutro: + farcall Function55a1 + call StartTrainerBattle_NextScene + ld a, $10 + ld [wce64], a + ld a, 1 + ldh [hBGMapMode], a + ret + +StartTrainerBattle_SpeckleToBlack: + ld hl, wce64 + ld a, [hl] + and a + jr z, .done + dec [hl] + ld c, 12 +.loop + push bc + call .BlackOutRandomTile + pop bc + dec c + jr nz, .loop + ret + +.done + ld a, 1 + ldh [hBGMapMode], a + call DelayFrame + call DelayFrame + call DelayFrame + xor a + ldh [hBGMapMode], a + ld a, BATTLETRANSITION_FINISH + ld [wJumptableIndex], a + ret + +.BlackOutRandomTile: +.y_loop + call Random + cp SCREEN_HEIGHT + jr nc, .y_loop + ld b, a + +.x_loop + call Random + cp SCREEN_WIDTH + jr nc, .x_loop + ld c, a + + hlcoord 0, -1 + ld de, SCREEN_WIDTH + inc b + +.row_loop + add hl, de + dec b + jr nz, .row_loop + add hl, bc + +; If the tile has already been blacked out, +; sample a new tile + ld a, [hl] + cp BATTLETRANSITION_BLACK + jr z, .y_loop + ld [hl], BATTLETRANSITION_BLACK + ret + +StartTrainerBattle_LoadPokeBallGraphics: + ld a, [wOtherTrainerClass] + and a + jr z, .nextscene ; don't need to be here if wild + + xor a + ldh [hBGMapMode], a + + hlcoord 2, 1 + ld de, .PokeBallTransition + ld b, SCREEN_WIDTH - 4 +.loop + push hl + ld c, 2 +.loop2 + push hl + ld a, [de] + inc de +.loop3 +; Loading is done bit by bit + and a + jr z, .done + sla a + jr nc, .no_load + ld [hl], BATTLETRANSITION_SQUARE +.no_load + inc hl + jr .loop3 + +.done + pop hl + push bc + ld bc, (SCREEN_WIDTH - 4) / 2 + add hl, bc + pop bc + dec c + jr nz, .loop2 + + pop hl + push bc + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .loop + + ldh a, [hCGB] + and a + jr nz, .cgb + ld a, 1 + ldh [hBGMapMode], a + call DelayFrame + call DelayFrame + jr .nextscene + +.cgb + ld hl, .daypals + ld a, [wTimeOfDayPal] + maskbits NUM_DAYTIMES + cp DARKNESS_F + jr nz, .daytime + ld hl, .nightpals +.daytime + call .copypals + push hl + ld de, wBGPals1 palette PAL_BG_TEXT + ld bc, 1 palettes + call CopyBytes + pop hl + ld de, wBGPals2 palette PAL_BG_TEXT + ld bc, 1 palettes + call CopyBytes + hlcoord 0, 0, wAttrmap + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + ld a, %00000111 + call ByteFill + ld a, 1 + ldh [hCGBPalUpdate], a + call DelayFrame + call CGBOnly_CopyTilemapAtOnce + +.nextscene + call StartTrainerBattle_NextScene + ret + +.PokeBallTransition: + ; 16x16 overlay of a Poke Ball +pusho +opt b.X ; . = 0, X = 1 + bigdw %......XXXX...... + bigdw %....XXXXXXXX.... + bigdw %..XXXX....XXXX.. + bigdw %..XX........XX.. + bigdw %.XX..........XX. + bigdw %.XX...XXXX...XX. + bigdw %XX...XX..XX...XX + bigdw %XXXXXX....XXXXXX + bigdw %XXXXXX....XXXXXX + bigdw %XX...XX..XX...XX + bigdw %.XX...XXXX...XX. + bigdw %.XX..........XX. + bigdw %..XX........XX.. + bigdw %..XXXX....XXXX.. + bigdw %....XXXXXXXX.... + bigdw %......XXXX...... +popo + +.copypals + ld de, wBGPals1 palette PAL_BG_TEXT + call .copy + ld de, wBGPals2 palette PAL_BG_TEXT + call .copy + ld de, wOBPals1 palette PAL_OW_TREE + call .copy + ld de, wOBPals2 palette PAL_OW_TREE + call .copy + ld de, wOBPals1 palette PAL_OW_ROCK + call .copy + ld de, wOBPals2 palette PAL_OW_ROCK + +.copy + push hl + ld bc, 1 palettes + call CopyBytes + pop hl + ret + +.daypals +INCLUDE "gfx/overworld/trainer_battle_day.pal" + +.nightpals +INCLUDE "gfx/overworld/trainer_battle_nite.pal" + +WipeLYOverrides: + ld hl, wLYOverrides + call .wipe + ld hl, wLYOverridesBackup +.wipe + xor a + ld c, SCREEN_HEIGHT_PX +.loop + ld [hli], a + dec c + jr nz, .loop + ret + +StartTrainerBattle_DrawSineWave: + calc_sine_wave .SineWave + +.SineWave: + sine_table 256 + +StartTrainerBattle_ZoomToBlack: + farcall Function55a1 + ld de, .boxes + +.loop + ld a, [de] + cp -1 + jr z, .done + inc de + ld c, a + ld a, [de] + inc de + ld b, a + ld a, [de] + inc de + ld l, a + ld a, [de] + inc de + ld h, a + xor a + ldh [hBGMapMode], a + call .Copy + call WaitBGMap + jr .loop + +.done + ld a, BATTLETRANSITION_FINISH + ld [wJumptableIndex], a + ret + +.boxes +zoombox: MACRO +; width, height, start y, start x + db \1, \2 + dwcoord \3, \4 +ENDM + zoombox 4, 2, 8, 8 + zoombox 6, 4, 7, 7 + zoombox 8, 6, 6, 6 + zoombox 10, 8, 5, 5 + zoombox 12, 10, 4, 4 + zoombox 14, 12, 3, 3 + zoombox 16, 14, 2, 2 + zoombox 18, 16, 1, 1 + zoombox 20, 18, 0, 0 + db -1 + +.Copy: + ld a, BATTLETRANSITION_BLACK +.row + push bc + push hl +.col + 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 + +Unreferenced_Function8ca53: + ld a, 1 + ldh [hBGMapMode], a + call WaitBGMap + xor a + ldh [hBGMapMode], a + ret diff --git a/engine/events/field_moves.asm b/engine/events/field_moves.asm new file mode 100755 index 00000000..3423f840 --- /dev/null +++ b/engine/events/field_moves.asm @@ -0,0 +1,449 @@ +FIELDMOVE_GRASS EQU $80 +FIELDMOVE_TREE EQU $84 +FIELDMOVE_FLY EQU $84 + +PlayWhirlpoolSound: + call WaitSFX + ld de, SFX_SURF + call PlaySFX + call WaitSFX + ret + +BlindingFlash: + farcall FadeOutPalettes + ld hl, wStatusFlags + set STATUSFLAGS_FLASH_F, [hl] + farcall ReplaceTimeOfDayPals + farcall UpdateTimeOfDayPal + ld b, SCGB_MAPPALS + call GetSGBLayout + farcall FadeInPalettes + ret + +ShakeHeadbuttTree: + farcall ClearSpriteAnims + ld de, CutGrassGFX + ld hl, vTiles0 tile FIELDMOVE_GRASS + lb bc, BANK(CutGrassGFX), 4 + call Request2bpp + ld de, HeadbuttTreeGFX + ld hl, vTiles0 tile FIELDMOVE_TREE + lb bc, BANK(HeadbuttTreeGFX), 8 + call Request2bpp + call Cut_Headbutt_GetPixelFacing + ld a, SPRITE_ANIM_INDEX_HEADBUTT + call InitSpriteAnimStruct + ld hl, SPRITEANIMSTRUCT_TILE_ID + add hl, bc + ld [hl], FIELDMOVE_TREE + ld a, 36 * SPRITEOAMSTRUCT_LENGTH + ld [wCurSpriteOAMAddr], a + farcall DoNextFrameForAllSprites + call HideHeadbuttTree + ld a, 32 + ld [wFrameCounter], a + call WaitSFX + ld de, SFX_SANDSTORM + call PlaySFX +.loop + ld hl, wFrameCounter + ld a, [hl] + and a + jr z, .done + dec [hl] + ld a, 36 * SPRITEOAMSTRUCT_LENGTH + ld [wCurSpriteOAMAddr], a + farcall DoNextFrameForAllSprites + call DelayFrame + jr .loop + +.done + call OverworldTextModeSwitch + call WaitBGMap + xor a + ldh [hBGMapMode], a + farcall ClearSpriteAnims + ld hl, wVirtualOAMSprite36 + ld bc, wVirtualOAMEnd - wVirtualOAMSprite36 + xor a + call ByteFill + call ReplaceChrisSprite + ret + +HeadbuttTreeGFX: +INCBIN "gfx/overworld/headbutt_tree.2bpp" + +HideHeadbuttTree: + xor a + ldh [hBGMapMode], a + ld a, [wPlayerDirection] + and %00001100 + srl a + ld e, a + ld d, 0 + ld hl, TreeRelativeLocationTable + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + + ld a, 5 ; grass block + ld [hli], a + ld [hld], a + ld bc, SCREEN_WIDTH + add hl, bc + ld [hli], a + ld [hld], a + call WaitBGMap + xor a + ldh [hBGMapMode], a + ret + +TreeRelativeLocationTable: + dwcoord 8, 8 + 2 ; RIGHT + dwcoord 8, 8 - 2 ; LEFT + dwcoord 8 - 2, 8 ; DOWN + dwcoord 8 + 2, 8 ; UP + +OWCutAnimation: + ; Animation index in e + ; 0: Split tree in half + ; 1: Mow the lawn + ld a, e + and 1 + ld [wJumptableIndex], a + call .LoadCutGFX + call WaitSFX + ld de, SFX_PLACE_PUZZLE_PIECE_DOWN + call PlaySFX +.loop + ld a, [wJumptableIndex] + bit 7, a + jr nz, .finish + ld a, 36 * SPRITEOAMSTRUCT_LENGTH + ld [wCurSpriteOAMAddr], a + callfar DoNextFrameForAllSprites + call OWCutJumptable + call DelayFrame + jr .loop + +.finish + ret + +.LoadCutGFX: + callfar ClearSpriteAnims ; pointless to farcall + ld de, CutGrassGFX + ld hl, vTiles0 tile FIELDMOVE_GRASS + lb bc, BANK(CutGrassGFX), 4 + call Request2bpp + ld de, CutTreeGFX + ld hl, vTiles0 tile FIELDMOVE_TREE + lb bc, BANK(CutTreeGFX), 4 + call Request2bpp + ret + +CutTreeGFX: +INCBIN "gfx/overworld/cut_tree.2bpp" + +CutGrassGFX: +INCBIN "gfx/overworld/cut_grass.2bpp" + +OWCutJumptable: + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, .dw + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.dw + dw Cut_SpawnAnimateTree + dw Cut_SpawnAnimateLeaves + dw Cut_StartWaiting + dw Cut_WaitAnimSFX + +Cut_SpawnAnimateTree: + call Cut_Headbutt_GetPixelFacing + ld a, SPRITE_ANIM_INDEX_CUT_TREE ; cut tree + call InitSpriteAnimStruct + ld hl, SPRITEANIMSTRUCT_TILE_ID + add hl, bc + ld [hl], FIELDMOVE_TREE + ld a, 32 + ld [wFrameCounter], a +; Cut_StartWaiting + ld hl, wJumptableIndex + inc [hl] + inc [hl] + ret + +Cut_SpawnAnimateLeaves: + call Cut_GetLeafSpawnCoords + xor a + call Cut_SpawnLeaf + ld a, $10 + call Cut_SpawnLeaf + ld a, $20 + call Cut_SpawnLeaf + ld a, $30 + call Cut_SpawnLeaf + ld a, 32 ; frames + ld [wFrameCounter], a +; Cut_StartWaiting + ld hl, wJumptableIndex + inc [hl] + ret + +Cut_StartWaiting: + ld a, 1 + ldh [hBGMapMode], a +; Cut_WaitAnimSFX + ld hl, wJumptableIndex + inc [hl] + +Cut_WaitAnimSFX: + ld hl, wFrameCounter + ld a, [hl] + and a + jr z, .finished + dec [hl] + ret + +.finished + ld hl, wJumptableIndex + set 7, [hl] + ret + +Cut_SpawnLeaf: + push de + push af + ld a, SPRITE_ANIM_INDEX_LEAF ; leaf + call InitSpriteAnimStruct + ld hl, SPRITEANIMSTRUCT_TILE_ID + add hl, bc + ld [hl], FIELDMOVE_GRASS + ld hl, SPRITEANIMSTRUCT_0E + add hl, bc + ld [hl], 4 + pop af + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], a + pop de + ret + +Cut_GetLeafSpawnCoords: + ld de, 0 + ld a, [wMetatileStandingX] + bit 0, a + jr z, .left_side + set 0, e +.left_side + ld a, [wMetatileStandingY] + bit 0, a + jr z, .top_side + set 1, e +.top_side + ld a, [wPlayerDirection] + and %00001100 + add e + ld e, a + ld hl, .Coords + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ret + +.Coords: + dbpixel 11, 12 ; facing down, top left + dbpixel 9, 12 ; facing down, top right + dbpixel 11, 14 ; facing down, bottom left + dbpixel 9, 14 ; facing down, bottom right + + dbpixel 11, 8 ; facing up, top left + dbpixel 9, 8 ; facing up, top right + dbpixel 11, 10 ; facing up, bottom left + dbpixel 9, 10 ; facing up, bottom right + + dbpixel 7, 12 ; facing left, top left + dbpixel 9, 12 ; facing left, top right + dbpixel 7, 10 ; facing left, bottom left + dbpixel 9, 10 ; facing left, bottom right + + dbpixel 11, 12 ; facing right, top left + dbpixel 13, 12 ; facing right, top right + dbpixel 11, 10 ; facing right, bottom left + dbpixel 13, 10 ; facing right, bottom right + +Cut_Headbutt_GetPixelFacing: + ld a, [wPlayerDirection] + and %00001100 + srl a + ld e, a + ld d, 0 + ld hl, .Coords + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ret + +.Coords: + dbpixel 10, 13 + dbpixel 10, 9 + dbpixel 8, 11 + dbpixel 12, 11 + +FlyFromAnim: + call DelayFrame + ld a, [wVramState] + push af + xor a + ld [wVramState], a + call FlyFunction_InitGFX + depixel 10, 10, 4, 0 + ld a, SPRITE_ANIM_INDEX_RED_WALK + call InitSpriteAnimStruct + ld hl, SPRITEANIMSTRUCT_TILE_ID + add hl, bc + ld [hl], FIELDMOVE_FLY + ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID + add hl, bc + ld [hl], SPRITE_ANIM_SEQ_FLY_FROM + ld a, 128 + ld [wFrameCounter], a +.loop + ld a, [wJumptableIndex] + bit 7, a + jr nz, .exit + ld a, 0 * SPRITEOAMSTRUCT_LENGTH + ld [wCurSpriteOAMAddr], a + callfar DoNextFrameForAllSprites + call FlyFunction_FrameTimer + call DelayFrame + jr .loop + +.exit + pop af + ld [wVramState], a + ret + +FlyToAnim: + call DelayFrame + ld a, [wVramState] + push af + xor a + ld [wVramState], a + call FlyFunction_InitGFX + depixel 31, 10, 4, 0 + ld a, SPRITE_ANIM_INDEX_RED_WALK + call InitSpriteAnimStruct + ld hl, SPRITEANIMSTRUCT_TILE_ID + add hl, bc + ld [hl], FIELDMOVE_FLY + ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID + add hl, bc + ld [hl], SPRITE_ANIM_SEQ_FLY_TO + ld hl, SPRITEANIMSTRUCT_0F + add hl, bc + ld [hl], 11 * 8 + ld a, 64 + ld [wFrameCounter], a +.loop + ld a, [wJumptableIndex] + bit 7, a + jr nz, .exit + ld a, 0 * SPRITEOAMSTRUCT_LENGTH + ld [wCurSpriteOAMAddr], a + callfar DoNextFrameForAllSprites + call FlyFunction_FrameTimer + call DelayFrame + jr .loop + +.exit + pop af + ld [wVramState], a + call .RestorePlayerSprite_DespawnLeaves + ret + +.RestorePlayerSprite_DespawnLeaves: + ld hl, wVirtualOAMSprite00TileID + xor a + ld c, 4 +.OAMloop + ld [hli], a ; tile id +rept SPRITEOAMSTRUCT_LENGTH - 1 + inc hl +endr + inc a + dec c + jr nz, .OAMloop + ld hl, wVirtualOAMSprite04 + ld bc, wVirtualOAMEnd - wVirtualOAMSprite04 + xor a + call ByteFill + ret + +FlyFunction_InitGFX: + callfar ClearSpriteAnims + ld de, CutGrassGFX + ld hl, vTiles0 tile FIELDMOVE_GRASS + lb bc, BANK(CutGrassGFX), 4 + call Request2bpp + ld a, [wCurPartyMon] + ld hl, wPartySpecies + ld e, a + ld d, 0 + add hl, de + ld a, [hl] + ld [wTempIconSpecies], a + ld e, FIELDMOVE_FLY + farcall GetSpeciesIcon + xor a + ld [wJumptableIndex], a + ret + +FlyFunction_FrameTimer: + call .SpawnLeaf + ld hl, wFrameCounter + ld a, [hl] + and a + jr z, .exit + dec [hl] + cp $40 + ret c + and 7 + ret nz + ld de, SFX_FLY + call PlaySFX + ret + +.exit + ld hl, wJumptableIndex + set 7, [hl] + ret + +.SpawnLeaf: + ld hl, wce65 + ld a, [hl] + inc [hl] + and 7 + ret nz + ld a, [hl] + and (6 * 8) >> 1 + sla a + add 8 * 8 ; gives a number in [$40, $50, $60, $70] + ld d, a + ld e, 0 + ld a, SPRITE_ANIM_INDEX_FLY_LEAF ; fly land + call InitSpriteAnimStruct + ld hl, SPRITEANIMSTRUCT_TILE_ID + add hl, bc + ld [hl], FIELDMOVE_GRASS + ret diff --git a/engine/events/magnet_train.asm b/engine/events/magnet_train.asm new file mode 100755 index 00000000..715c801c --- /dev/null +++ b/engine/events/magnet_train.asm @@ -0,0 +1,387 @@ +MagnetTrain: + ld a, [wScriptVar] + and a + jr nz, .ToGoldenrod + ld a, 1 ; forwards + lb bc, 8 * TILE_WIDTH, 12 * TILE_WIDTH + lb de, (11 * TILE_WIDTH) - (11 * TILE_WIDTH + 4), -12 * TILE_WIDTH + jr .continue + +.ToGoldenrod: + ld a, -1 ; backwards + lb bc, -8 * TILE_WIDTH, -12 * TILE_WIDTH + lb de, (11 * TILE_WIDTH) + (11 * TILE_WIDTH + 4), 12 * TILE_WIDTH + +.continue + ld [wMagnetTrainDirection], a + ld a, c + ld [wMagnetTrainInitPosition], a + ld a, b + ld [wMagnetTrainHoldPosition], a + ld a, e + ld [wMagnetTrainFinalPosition], a + ld a, d + ld [wMagnetTrainPlayerSpriteInitX], a + + ldh a, [hSCX] + push af + ldh a, [hSCY] + push af + call MagnetTrain_LoadGFX_PlayMusic + ld hl, hVBlank + ld a, [hl] + push af + ld [hl], 1 +.loop + ld a, [wJumptableIndex] + bit 7, a + jr nz, .done + callfar PlaySpriteAnimations + call MagnetTrain_Jumptable + call MagnetTrain_UpdateLYOverrides + call PushLYOverrides + call DelayFrame + jr .loop + +.done + pop af + ldh [hVBlank], a + call ClearBGPalettes + xor a + ldh [hLCDCPointer], a + ldh [hLYOverrideStart], a + ldh [hLYOverrideEnd], a + ldh [hSCX], a + ld [wRequested2bppSource], a + ld [wRequested2bppSource + 1], a + ld [wRequested2bppDest], a + ld [wRequested2bppDest + 1], a + ld [wRequested2bpp], a + call ClearTilemap + + pop af + ldh [hSCY], a + pop af + ldh [hSCX], a + xor a + ldh [hBGMapMode], a + ret + +MagnetTrain_UpdateLYOverrides: + ld hl, wLYOverridesBackup + ld c, 6 * TILE_WIDTH - 1 + ld a, [wMagnetTrainOffset] + add a + ldh [hSCX], a + call .loadloop + ld c, 6 * TILE_WIDTH + ld a, [wMagnetTrainPosition] + call .loadloop + ld c, 6 * TILE_WIDTH + 1 + ld a, [wMagnetTrainOffset] + add a + call .loadloop + + ld a, [wMagnetTrainDirection] + ld d, a + ld hl, wMagnetTrainOffset + ld a, [hl] + add d + add d + ld [hl], a + ret + +.loadloop + ld [hli], a + dec c + jr nz, .loadloop + ret + +MagnetTrain_LoadGFX_PlayMusic: + call ClearBGPalettes + call ClearSprites + call DisableLCD + callfar ClearSpriteAnims + call SetMagnetTrainPals + call DrawMagnetTrain + ld a, SCREEN_HEIGHT_PX + ldh [hWY], a + call EnableLCD + xor a + ldh [hBGMapMode], a + ldh [hSCX], a + ldh [hSCY], a + + ld de, ChrisSpriteGFX + ld hl, vTiles0 + lb bc, BANK(ChrisSpriteGFX), 4 + call Request2bpp + + ld de, ChrisSpriteGFX + 12 tiles + ld hl, vTiles0 tile $04 + lb bc, BANK(ChrisSpriteGFX), 4 + call Request2bpp + + call MagnetTrain_InitLYOverrides + + ld a, [wTimeOfDayPal] + push af + ld a, [wEnvironment] + push af + + ld a, [wTimeOfDay] + maskbits NUM_DAYTIMES + ld [wTimeOfDayPal], a + ld a, TOWN + ld [wEnvironment], a + ld b, SCGB_MAPPALS + call GetSGBLayout + call UpdateTimePals + + ldh a, [rBGP] + ld [wBGP], a + ldh a, [rOBP0] + ld [wOBP0], a + ldh a, [rOBP1] + ld [wOBP1], a + + pop af + ld [wEnvironment], a + pop af + ld [wTimeOfDayPal], a + + ld hl, wJumptableIndex + xor a + ld [hli], a ; wJumptableIndex + ld a, [wMagnetTrainInitPosition] + ld [hli], a ; wMagnetTrainOffset + ld [hli], a ; wMagnetTrainPosition + ld [hli], a ; wMagnetTrainWaitCounter + + ld de, MUSIC_MAGNET_TRAIN + call PlayMusic2 + ret + +DrawMagnetTrain: + hlbgcoord 0, 0 + xor a +.loop + call GetMagnetTrainBGTiles + ld b, BG_MAP_WIDTH / 2 + call .FillAlt + inc a + cp SCREEN_HEIGHT + jr c, .loop + + hlbgcoord 0, 6 + ld de, MagnetTrainTilemap + ld c, SCREEN_WIDTH + call .FillLine + hlbgcoord 0, 7 + ld de, MagnetTrainTilemap + SCREEN_WIDTH + ld c, SCREEN_WIDTH + call .FillLine + hlbgcoord 0, 8 + ld de, MagnetTrainTilemap + (SCREEN_WIDTH * 2) + ld c, SCREEN_WIDTH + call .FillLine + hlbgcoord 0, 9 + ld de, MagnetTrainTilemap + (SCREEN_WIDTH * 3) + ld c, SCREEN_WIDTH + call .FillLine + ret + +.FillLine: + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .FillLine + ret + +.FillAlt: + ld [hl], e + inc hl + ld [hl], d + inc hl + dec b + jr nz, .FillAlt + ret + +GetMagnetTrainBGTiles: + push hl + ld e, a + ld d, 0 + ld hl, MagnetTrainBGTiles + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + pop hl + ret + +MagnetTrainBGTiles: +; 2x18 tilemap, repeated in vertical strips for the background. +INCBIN "gfx/overworld/magnet_train_bg.tilemap" + +MagnetTrain_InitLYOverrides: + ld hl, wLYOverrides + ld bc, wLYOverridesEnd - wLYOverrides + ld a, [wMagnetTrainInitPosition] + call ByteFill + ld hl, wLYOverridesBackup + ld bc, wLYOverridesBackupEnd - wLYOverridesBackup + ld a, [wMagnetTrainInitPosition] + call ByteFill + ld a, LOW(rSCX) + ldh [hLCDCPointer], a + ret + +SetMagnetTrainPals: + ld a, 1 + ldh [rVBK], a + + ; bushes + hlbgcoord 0, 0 + ld bc, 4 * BG_MAP_WIDTH + ld a, PAL_BG_GREEN + call ByteFill + + ; train + hlbgcoord 0, 4 + ld bc, 10 * BG_MAP_WIDTH + xor a ; PAL_BG_GRAY + call ByteFill + + ; more bushes + hlbgcoord 0, 14 + ld bc, 4 * BG_MAP_WIDTH + ld a, PAL_BG_GREEN + call ByteFill + + ; train window + hlbgcoord 7, 8 + ld bc, 6 + ld a, PAL_BG_YELLOW + call ByteFill + + ld a, 0 + ldh [rVBK], a + ret + +MagnetTrain_Jumptable: + ld a, [wJumptableIndex] + 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 .InitPlayerSpriteAnim + dw .WaitScene + dw .MoveTrain1 + dw .WaitScene + dw .MoveTrain2 + dw .WaitScene + dw .TrainArrived + +.Next: + ld hl, wJumptableIndex + inc [hl] + ret + +.InitPlayerSpriteAnim: + ld d, (8 + 2) * TILE_WIDTH + 5 + ld a, [wMagnetTrainPlayerSpriteInitX] + ld e, a + ld a, SPRITE_ANIM_INDEX_MAGNET_TRAIN_RED + call InitSpriteAnimStruct + ld hl, SPRITEANIMSTRUCT_TILE_ID + add hl, bc + ld [hl], 0 + call .Next + ld a, 128 + ld [wMagnetTrainWaitCounter], a + ret + +.MoveTrain1: + ld hl, wMagnetTrainHoldPosition + ld a, [wMagnetTrainPosition] + cp [hl] + jr z, .PrepareToHoldTrain + ld e, a + ld a, [wMagnetTrainDirection] + xor $ff + inc a + add e + ld [wMagnetTrainPosition], a + ld hl, wGlobalAnimXOffset + ld a, [wMagnetTrainDirection] + add [hl] + ld [hl], a + ret + +.PrepareToHoldTrain: + call .Next + ld a, 128 + ld [wMagnetTrainWaitCounter], a + ret + +.WaitScene: + ld hl, wMagnetTrainWaitCounter + ld a, [hl] + and a + jr z, .DoneWaiting + dec [hl] + ret + +.DoneWaiting: + call .Next + ret + +.MoveTrain2: + ld hl, wMagnetTrainFinalPosition + ld a, [wMagnetTrainPosition] + cp [hl] + jr z, .PrepareToFinishAnim + ld e, a + ld a, [wMagnetTrainDirection] + xor $ff + inc a + ld d, a + ld a, e + add d + add d + ld [wMagnetTrainPosition], a + ld hl, wGlobalAnimXOffset + ld a, [wMagnetTrainDirection] + ld d, a + ld a, [hl] + add d + add d + ld [hl], a + ret + + ret + +.PrepareToFinishAnim: + call .Next + ret + +.TrainArrived: + ld a, $80 + ld [wJumptableIndex], a + ld de, SFX_TRAIN_ARRIVED + call PlaySFX + ret + + +MagnetTrainTilemap: +; 20x4 tilemap +INCBIN "gfx/overworld/magnet_train_fg.tilemap" diff --git a/engine/gfx/mon_icons.asm b/engine/gfx/mon_icons.asm new file mode 100755 index 00000000..d0d3856e --- /dev/null +++ b/engine/gfx/mon_icons.asm @@ -0,0 +1,337 @@ +LoadOverworldMonIcon: + ld a, e + call ReadMonMenuIcon + ld l, a + ld h, 0 + add hl, hl + ld de, IconPointers + add hl, de + ld a, [hli] + ld e, a + ld d, [hl] + ld b, BANK(Icons) + ld c, 8 + ret + +LoadMenuMonIcon: + push hl + push de + push bc + call .LoadIcon + pop bc + pop de + pop hl + ret + +.LoadIcon: + ld d, 0 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.Jumptable: +; entries correspond to MONICON_* constants + dw PartyMenu_InitAnimatedMonIcon ; MONICON_PARTYMENU + dw NamingScreen_InitAnimatedMonIcon ; MONICON_NAMINGSCREEN + dw MoveList_InitAnimatedMonIcon ; MONICON_MOVES + dw Trade_LoadMonIconGFX ; MONICON_TRADE + +PartyMenu_InitAnimatedMonIcon: + ld a, [wCurIconTile] + push af + ldh a, [hObjectStructIndexBuffer] + ld hl, wPartySpecies + ld e, a + ld d, 0 + add hl, de + ld a, [hl] + call ReadMonMenuIcon + ld [wCurIcon], a + call GetMemIconGFX + ldh a, [hObjectStructIndexBuffer] +; y coord + add a + add a + add a + add a + add $1c + ld d, a +; x coord + ld e, $10 +; type is partymon icon + ld a, SPRITE_ANIM_INDEX_PARTY_MON + call _InitSpriteAnimStruct + pop af + ld hl, SPRITEANIMSTRUCT_TILE_ID + add hl, bc + ld [hl], a + + call .SpawnItemIcon + call SetPartyMonIconAnimSpeed + ret + +.SpawnItemIcon: + push bc + ldh a, [hObjectStructIndexBuffer] + ld hl, wPartyMon1Item + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + pop bc + ld a, [hl] + and a + ret z + push hl + push bc + ld d, a + callfar ItemIsMail + pop bc + pop hl + jr c, .mail + ld a, SPRITE_ANIM_FRAMESET_PARTY_MON_WITH_ITEM + jr .okay + +.mail + ld a, SPRITE_ANIM_FRAMESET_PARTY_MON_WITH_MAIL +.okay + ld hl, SPRITEANIMSTRUCT_FRAMESET_ID + add hl, bc + ld [hl], a + ret + +SetPartyMonIconAnimSpeed: + push bc + ldh a, [hObjectStructIndexBuffer] + ld b, a + call .getspeed + ld a, b + pop bc + ld hl, SPRITEANIMSTRUCT_DURATIONOFFSET + add hl, bc + ld [hl], a + rlca + rlca + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld [hl], a + ret + +.getspeed + farcall PlacePartymonHPBar + call GetHPPal + ld e, d + ld d, 0 + ld hl, .speeds + add hl, de + ld b, [hl] + ret + +.speeds + db $00 ; HP_GREEN + db $40 ; HP_YELLOW + db $80 ; HP_RED + +NamingScreen_InitAnimatedMonIcon: + ld a, [wTempIconSpecies] + call ReadMonMenuIcon + ld [wCurIcon], a + xor a + call GetIconGFX + depixel 4, 4, 4, 0 + ld a, SPRITE_ANIM_INDEX_PARTY_MON + call _InitSpriteAnimStruct + ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID + add hl, bc + ld [hl], SPRITE_ANIM_SEQ_NULL + ret + +MoveList_InitAnimatedMonIcon: + ld a, [wTempIconSpecies] + call ReadMonMenuIcon + ld [wCurIcon], a + xor a + call GetIconGFX + ld d, 3 * 8 + 2 ; depixel 3, 4, 2, 4 + ld e, 4 * 8 + 4 + ld a, SPRITE_ANIM_INDEX_PARTY_MON + call _InitSpriteAnimStruct + ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID + add hl, bc + ld [hl], SPRITE_ANIM_SEQ_NULL + ret + +Trade_LoadMonIconGFX: + ld a, [wTempIconSpecies] + call ReadMonMenuIcon + ld [wCurIcon], a + ld a, $62 + ld [wCurIconTile], a + call GetMemIconGFX + ret + +GetSpeciesIcon: +; Load species icon into VRAM at tile a + push de + ld a, [wTempIconSpecies] + call ReadMonMenuIcon + ld [wCurIcon], a + pop de + ld a, e + call GetIconGFX + ret + +GetMemIconGFX: + ld a, [wCurIconTile] +GetIconGFX: +; Load icon graphics into VRAM starting from tile a. + ld l, a + ld h, 0 + +; One tile is 16 bytes long. +rept 4 + add hl, hl +endr + + ld de, vTiles0 + add hl, de + push hl + +; The icons are contiguous, in order and of the same +; size, so the pointer table is somewhat redundant. + ld a, [wCurIcon] + push hl + ld l, a + ld h, 0 + add hl, hl + ld de, IconPointers + add hl, de + ld a, [hli] + ld e, a + ld d, [hl] + pop hl + + lb bc, BANK(Icons), 8 + call Request2bpp + + pop hl + ld de, 8 tiles + add hl, de + ld de, HeldItemIcons + lb bc, BANK(HeldItemIcons), 2 + call Request2bpp + ld a, [wCurIconTile] + add 10 + ld [wCurIconTile], a + ret + +HeldItemIcons: +INCBIN "gfx/icons/mail.2bpp" +INCBIN "gfx/icons/item.2bpp" + +FreezeMonIcons: + ld hl, wSpriteAnimationStructs + ld e, PARTY_LENGTH + ld a, [wMenuCursorY] + ld d, a +.loop + ld a, [hl] + and a + jr z, .next + cp d + jr z, .loadwithtwo + ld a, SPRITE_ANIM_SEQ_NULL + jr .ok + +.loadwithtwo + ld a, SPRITE_ANIM_SEQ_PARTY_MON_SWITCH + +.ok + push hl + ld c, l + ld b, h + ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID + add hl, bc + ld [hl], a + pop hl + +.next + ld bc, $10 + add hl, bc + dec e + jr nz, .loop + ret + +UnfreezeMonIcons: + ld hl, wSpriteAnimationStructs + ld e, PARTY_LENGTH +.loop + ld a, [hl] + and a + jr z, .next + push hl + ld c, l + ld b, h + ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID + add hl, bc + ld [hl], SPRITE_ANIM_SEQ_PARTY_MON + pop hl +.next + ld bc, $10 + add hl, bc + dec e + jr nz, .loop + ret + +HoldSwitchmonIcon: + ld hl, wSpriteAnimationStructs + ld e, PARTY_LENGTH + ld a, [wSwitchMon] + ld d, a +.loop + ld a, [hl] + and a + jr z, .next + cp d + jr z, .is_switchmon + ld a, SPRITE_ANIM_SEQ_PARTY_MON_SELECTED + jr .join_back + +.is_switchmon + ld a, SPRITE_ANIM_SEQ_PARTY_MON_SWITCH +.join_back + push hl + ld c, l + ld b, h + ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID + add hl, bc + ld [hl], a + pop hl +.next + ld bc, $10 + add hl, bc + dec e + jr nz, .loop + ret + +ReadMonMenuIcon: + cp EGG + jr z, .egg + dec a + ld hl, MonMenuIcons + ld e, a + ld d, 0 + add hl, de + ld a, [hl] + ret +.egg + ld a, ICON_EGG + ret + +INCLUDE "data/pokemon/menu_icons.asm" + +INCLUDE "data/icon_pointers.asm" + +INCLUDE "gfx/icons.asm" diff --git a/engine/gfx/sprite_anims.asm b/engine/gfx/sprite_anims.asm index 2877539d..a6e717e8 100755 --- a/engine/gfx/sprite_anims.asm +++ b/engine/gfx/sprite_anims.asm @@ -1,1361 +1,1497 @@ -DoAnimFrame: ; 8d463 - ld hl, $2 ; 23:5463 - add hl, bc ; 23:5466 - ld e, [hl] ; 23:5467 - ld d, $0 ; 23:5468 - ld hl, .Jumptable ; 23:546a - add hl, de ; 23:546d - add hl, de ; 23:546e - ld a, [hli] ; 23:546f - ld h, [hl] ; 23:5470 - ld l, a ; 23:5471 - jp hl ; 23:5472 - -.Jumptable: ; 23:5473 - dw Function8d4c7 - dw Function8d4c8 - dw Function8d4df - dw Function8d510 - dw Function8d528 - dw Function8d54e - dw Function8d55d - dw Function8d5a2 - dw Function8d5bf - dw Function8d623 - dw Function8d66b - dw Function8d690 - dw Function8d702 - dw Function8d765 - dw Function8d7b1 - dw Function8d7ef - dw Function8d82d - dw Function8d897 - dw Function8d8b8 - dw Function8d8bf - dw Function8d909 - dw Function8d91a - dw Function8d928 - dw Function8d92f - dw Function8d971 - dw Function8d9d0 - dw Function8d9d7 - dw Function8d9ec - dw Function8d921 - dw Function8da1c - dw Function8da2a - dw Function8da23 - dw Function8da31 - dw Function8dad8 - dw Function8daf0 - dw Function8daf7 - dw Function8db25 - dw Function8db2c - dw Function8db5d - dw Function8db8f - dw Function8dbb4 - dw Function8d885 - -Function8d4c7: ; 8d4c7 - ret ; 23:54c7 - -Function8d4c8: ; 8d4c8 - ld a, [$cee0] ; 23:54c8 - ld hl, $0 ; 23:54cb - add hl, bc ; 23:54ce - cp [hl] ; 23:54cf - jr z, Function8d4df ; 23:54d0 - ld hl, $4 ; 23:54d2 - add hl, bc ; 23:54d5 - ld [hl], $10 ; 23:54d6 - ld hl, $7 ; 23:54d8 - add hl, bc ; 23:54db - ld [hl], $0 ; 23:54dc - ret ; 23:54de - -Function8d4df: ; 8d4df - ld hl, $4 ; 23:54df - add hl, bc ; 23:54e2 - ld [hl], $18 ; 23:54e3 - ld hl, $c ; 23:54e5 - add hl, bc ; 23:54e8 - ld a, [hl] ; 23:54e9 - ld d, a ; 23:54ea - inc [hl] ; 23:54eb - and $f ; 23:54ec - ret nz ; 23:54ee - ld hl, $d ; 23:54ef - add hl, bc ; 23:54f2 - ld e, [hl] ; 23:54f3 - ld hl, $7 ; 23:54f4 - add hl, bc ; 23:54f7 - ld a, d ; 23:54f8 - and $10 ; 23:54f9 - jr z, .asm_8d505 ; 23:54fb - ld a, e ; 23:54fd - and a ; 23:54fe - jr z, Function8d50c ; 23:54ff - cp $1 ; 23:5501 - jr z, Function8d508 ; 23:5503 -.asm_8d505 - xor a ; 23:5505 - ld [hl], a ; 23:5506 - ret ; 23:5507 - -Function8d508: ; 8d508 - ld a, $ff ; 23:5508 - ld [hl], a ; 23:550a - ret ; 23:550b - -Function8d50c: ; 8d50c - ld a, $fe ; 23:550c - ld [hl], a ; 23:550e - ret ; 23:550f - -Function8d510: ; 8d510 - ld a, [$cee0] ; 23:5510 - ld hl, $0 ; 23:5513 - add hl, bc ; 23:5516 - cp [hl] ; 23:5517 - jr z, Function8d521 ; 23:5518 - ld hl, $4 ; 23:551a - add hl, bc ; 23:551d - ld [hl], $10 ; 23:551e - ret ; 23:5520 - -Function8d521: ; 8d521 - ld hl, $4 ; 23:5521 - add hl, bc ; 23:5524 - ld [hl], $18 ; 23:5525 - ret ; 23:5527 - -Function8d528: ; 8d528 - ld hl, $d ; 23:5528 - add hl, bc ; 23:552b - ld a, [hl] ; 23:552c - inc [hl] ; 23:552d - cp $40 ; 23:552e - jr nc, Function8d54a ; 23:5530 - ld hl, $7 ; 23:5532 - add hl, bc ; 23:5535 - dec [hl] ; 23:5536 - ld hl, $c ; 23:5537 - add hl, bc ; 23:553a - ld a, [hl] ; 23:553b - add a, $2 ; 23:553c - ld [hl], a ; 23:553e - ld d, $8 ; 23:553f - call Function8dbf6 ; 23:5541 - ld hl, $6 ; 23:5544 - add hl, bc ; 23:5547 - ld [hl], a ; 23:5548 - ret ; 23:5549 - -Function8d54a: ; 8d54a - call DeinitializeSprite ; 23:554a - ret ; 23:554d - -Function8d54e: ; 8d54e - ld a, [$c5c7] ; 23:554e - ld hl, $5 ; 23:5551 - add hl, bc ; 23:5554 - add [hl] ; 23:5555 - cp $b0 ; 23:5556 - ret c ; 23:5558 - call DeinitializeSprite ; 23:5559 - ret ; 23:555c - -Function8d55d: ; 8d55d - call Function8dbdd ; 23:555d - jp hl ; 23:5560 - -; anonymous jumptable - dw Function8d565 - dw Function8d576 - -Function8d565: ; 8d565 - call Function8dbf0 ; 23:5565 - ld hl, $0 ; 23:5568 - add hl, bc ; 23:556b - ld a, [hl] ; 23:556c - and $3 ; 23:556d - swap a ; 23:556f - ld hl, $c ; 23:5571 - add hl, bc ; 23:5574 - ld [hl], a ; 23:5575 -Function8d576: ; 8d576 - ld de, $201 ; 23:5576 - ldh a, [$ffe9] ; 23:5579 - and a ; 23:557b - jr z, .asm_8d581 ; 23:557c - ld de, $402 ; 23:557e +DoAnimFrame: + ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.Jumptable: +; entries correspond to SPRITE_ANIM_SEQ_* constants + dw .Null + dw .PartyMon + dw .PartyMonSwitch + dw .PartyMonSelected + dw .GSIntroBubble + dw .GSIntroShellder + dw .GSIntroMagikarp + dw .GSIntroLapras + dw .GSIntroLapras2 + dw .GSIntroNote + dw .GSIntroJigglypuff + dw .GSIntroPikachu + dw .GSIntroPikachuTail + dw .GSIntroFireball + dw .GSIntroChikoritaTotodile + dw .GSIntroCyndaquil + dw .GSTitleTrail + dw .UnusedPikachu + dw .UnusedPikachuTail + dw .UnusedNote + dw .UnusedJigglypuff + dw .NamingScreenCursor + dw .GameFreakLogo + dw .GSIntroStar + dw .GSIntroSparkle + dw .SlotsGolem + dw .SlotsChansey + dw .SlotsChanseyEgg + dw .MailCursor + dw .UnusedCursor + dw .DummyGameCursor + dw .PokegearArrow + dw .TradePokeBall + dw .TradeTubeBulge + dw .TrademonInTube + dw .RevealNewMon + dw .RadioTuningKnob + dw .CutLeaves + dw .FlyFrom + dw .FlyLeaf + dw .FlyTo + dw .GSIntroHoOhLugia + +.Null: + ret + +.PartyMon + ld a, [wMenuCursorY] + + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc + cp [hl] + jr z, .PartyMonSwitch + + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld [hl], 8 * 2 + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], 0 + ret + +.PartyMonSwitch + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld [hl], 8 * 3 + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + ld d, a + inc [hl] + and $f + ret nz + + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld e, [hl] + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld a, d + and $10 ; bit 4 + jr z, .load_zero + ld a, e + and a + jr z, .load_minus_two + cp $1 + jr z, .load_minus_one +.load_zero + xor a + ld [hl], a + ret + +.load_minus_one + ld a, -1 + ld [hl], a + ret + +.load_minus_two + ld a, -2 + ld [hl], a + ret + +.PartyMonSelected + ld a, [wMenuCursorY] + + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc + cp [hl] + jr z, .three_offset_right + + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld [hl], 8 * 2 + ret + +.three_offset_right + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld [hl], 8 * 3 + ret + +.GSIntroBubble + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld a, [hl] + inc [hl] + cp $40 + jr nc, .asm_8d54a + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + dec [hl] + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + add $02 + ld [hl], a + ld d, $08 + call .Sprites_Sine + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + ret + +.asm_8d54a + call DeinitializeSprite + ret + +.GSIntroShellder + ld a, [wGlobalAnimYOffset] + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + add [hl] + cp $b0 + ret c + call DeinitializeSprite + ret + +.GSIntroMagikarp + call .AnonymousJumptable + jp hl + +; Anonymous dw (see .AnonymousJumptable) + dw .Function8d565 + dw .Function8d576 + +.Function8d565 + call .IncrementJumptableIndex + + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc + ld a, [hl] + + and $03 + swap a + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], a + +.Function8d576 + ld de, $0201 + ldh a, [hSGB] + and a + jr z, .asm_8d581 + ld de, $0402 + .asm_8d581 - ld hl, $6 ; 23:5581 - add hl, bc ; 23:5584 - ld a, [hl] ; 23:5585 - cp $f0 ; 23:5586 - jr nc, Function8d59e ; 23:5588 - add d ; 23:558a - ld [hl], a ; 23:558b - ld hl, $c ; 23:558c - add hl, bc ; 23:558f - ld a, [hl] ; 23:5590 - add e ; 23:5591 - ld [hl], a ; 23:5592 - ld d, $8 ; 23:5593 - call Function8dbf6 ; 23:5595 - ld hl, $7 ; 23:5598 - add hl, bc ; 23:559b - ld [hl], a ; 23:559c - ret ; 23:559d - -Function8d59e: ; 8d59e - call DeinitializeSprite ; 23:559e - ret ; 23:55a1 - -Function8d5a2: ; 8d5a2 - ld hl, $4 ; 23:55a2 - add hl, bc ; 23:55a5 - ld a, [hl] ; 23:55a6 - cp $b0 ; 23:55a7 - jr nc, Function8d5bb ; 23:55a9 - inc [hl] ; 23:55ab - ld hl, $c ; 23:55ac - add hl, bc ; 23:55af - ld a, [hl] ; 23:55b0 - inc [hl] ; 23:55b1 - and $1 ; 23:55b2 - ret z ; 23:55b4 - ld hl, $5 ; 23:55b5 - add hl, bc ; 23:55b8 - inc [hl] ; 23:55b9 - ret ; 23:55ba - -Function8d5bb: ; 8d5bb - call DeinitializeSprite ; 23:55bb - ret ; 23:55be - -Function8d5bf: ; 8d5bf - call Function8dbdd ; 23:55bf - jp hl ; 23:55c2 + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld a, [hl] + cp $f0 + jr nc, .asm_8d59e + + add d + ld [hl], a + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + add e + ld [hl], a + ld d, $08 + call .Sprites_Sine + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ret + +.asm_8d59e + call DeinitializeSprite + ret + +.GSIntroLapras + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $b0 + jr nc, .asm_8d5bb + + inc [hl] + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + inc [hl] + and $1 + ret z + + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + inc [hl] + ret + +.asm_8d5bb + call DeinitializeSprite + ret + +.GSIntroLapras2 + call .AnonymousJumptable + jp hl ; anonymous jumptable - dw Function8d5c9 - dw Function8d5e2 - dw Function8d5f3 - -Function8d5c9: ; 8d5c9 - call Function8d60b ; 23:55c9 - ret z ; 23:55cc - ld hl, $4 ; 23:55cd - add hl, bc ; 23:55d0 - ld a, [hl] ; 23:55d1 - cp $58 ; 23:55d2 - jr c, Function8d5d8 ; 23:55d4 - dec [hl] ; 23:55d6 - ret ; 23:55d7 - -Function8d5d8: ; 8d5d8 - call Function8dbf0 ; 23:55d8 - ld hl, $d ; 23:55db - add hl, bc ; 23:55de - ld [hl], $b0 ; 23:55df - ret ; 23:55e1 - -Function8d5e2: ; 8d5e2 - call Function8d60b ; 23:55e2 - ld hl, $d ; 23:55e5 - add hl, bc ; 23:55e8 - ld a, [hl] ; 23:55e9 - and a ; 23:55ea - jr z, Function8d5ef ; 23:55eb - dec [hl] ; 23:55ed - ret ; 23:55ee - -Function8d5ef: ; 8d5ef - call Function8dbf0 ; 23:55ef - ret ; 23:55f2 - -Function8d5f3: ; 8d5f3 - call Function8d60b ; 23:55f3 - ret z ; 23:55f6 - ld hl, $4 ; 23:55f7 - add hl, bc ; 23:55fa - ld a, [hl] ; 23:55fb - cp $d0 ; 23:55fc - jr z, Function8d602 ; 23:55fe - dec [hl] ; 23:5600 - ret ; 23:5601 - -Function8d602: ; 8d602 - call DeinitializeSprite ; 23:5602 - ld a, $1 ; 23:5605 - ld [$cb19], a ; 23:5607 - ret ; 23:560a - -Function8d60b: ; 8d60b - ld hl, $c ; 23:560b - add hl, bc ; 23:560e - ld a, [hl] ; 23:560f - inc [hl] ; 23:5610 - ld d, $4 ; 23:5611 - call Function8dbf6 ; 23:5613 - ld hl, $7 ; 23:5616 - add hl, bc ; 23:5619 - ld [hl], a ; 23:561a - ld hl, $c ; 23:561b - add hl, bc ; 23:561e - ld a, [hl] ; 23:561f - and $1 ; 23:5620 - ret ; 23:5622 - -Function8d623: ; 8d623 - call Function8dbdd ; 23:5623 - jp hl ; 23:5626 + dw .Function8d5c9 + dw .Function8d5e2 + dw .Function8d5f3 + +.Function8d5c9 + call .Function8d60b + ret z + + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $58 + jr c, .asm_8d5d8 + + dec [hl] + ret + + +.asm_8d5d8 + call .IncrementJumptableIndex + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld [hl], $b0 + ret + +.Function8d5e2 + call .Function8d60b + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld a, [hl] + and a + jr z, .asm_8d5ef + + dec [hl] + ret + +.asm_8d5ef + call .IncrementJumptableIndex + ret + +.Function8d5f3 + call .Function8d60b + ret z + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $d0 + jr z, .asm_8d602 + dec [hl] + ret + +.asm_8d602 + call DeinitializeSprite + ld a, $1 + ld [wBattleMonLevel], a + ret + +.Function8d60b + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + inc [hl] + ld d, 4 + call .Sprites_Sine + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + and $1 + ret + +.GSIntroNote + call .AnonymousJumptable + jp hl ; anonymous jumptable - dw Function8d62b - dw Function8d63e - -Function8d62b: ; 8d62b - call Function8dbf0 ; 23:562b - ld hl, $0 ; 23:562e - add hl, bc ; 23:5631 - ld a, [hl] ; 23:5632 - and $1 ; 23:5633 - swap a ; 23:5635 - sla a ; 23:5637 - ld hl, $c ; 23:5639 - add hl, bc ; 23:563c - ld [hl], a ; 23:563d -Function8d63e: ; 8d63e - ld hl, $6 ; 23:563e - add hl, bc ; 23:5641 - ld a, [hl] ; 23:5642 - cp $80 ; 23:5643 - jr nc, Function8d667 ; 23:5645 - inc [hl] ; 23:5647 - ld d, $4 ; 23:5648 - ld hl, $c ; 23:564a - add hl, bc ; 23:564d - ld a, [hl] ; 23:564e - add a, $2 ; 23:564f - ld [hl], a ; 23:5651 - call Function8dbf6 ; 23:5652 - ld hl, $7 ; 23:5655 - add hl, bc ; 23:5658 - ld [hl], a ; 23:5659 - ld hl, $c ; 23:565a - add hl, bc ; 23:565d - and $2 ; 23:565e - ret z ; 23:5660 - ld hl, $5 ; 23:5661 - add hl, bc ; 23:5664 - dec [hl] ; 23:5665 - ret ; 23:5666 - -Function8d667: ; 8d667 - call DeinitializeSprite ; 23:5667 - ret ; 23:566a - -Function8d66b: ; 8d66b - call Function8dbdd ; 23:566b - jp hl ; 23:566e + dw .Function8d62b + dw .Function8d63e + +.Function8d62b + call .IncrementJumptableIndex + ld hl, 0 + add hl, bc + ld a, [hl] + and $1 + swap a + sla a + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], a +.Function8d63e + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld a, [hl] + cp $80 + jr nc, .asm_8d667 + inc [hl] + ld d, $04 + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + add $02 + ld [hl], a + call .Sprites_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + and $2 + ret z + + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + dec [hl] + ret + +.asm_8d667 + call DeinitializeSprite + ret + +.GSIntroJigglypuff + call .AnonymousJumptable + jp hl ; anonymous jumptable - dw Function8d673 - dw Function8d680 - -Function8d673: ; 8d673 - ld a, [$cb19] ; 23:5673 - and a ; 23:5676 - ret z ; 23:5677 - call Function8dbf0 ; 23:5678 - ld a, $c ; 23:567b - call Function8d332 ; 23:567d -Function8d680: ; 8d680 - ld hl, $4 ; 23:5680 - add hl, bc ; 23:5683 - ld a, [hl] ; 23:5684 - cp $d0 ; 23:5685 - jr z, Function8d68c ; 23:5687 - dec [hl] ; 23:5689 - dec [hl] ; 23:568a - ret ; 23:568b - -Function8d68c: ; 8d68c - call DeinitializeSprite ; 23:568c - ret ; 23:568f - -Function8d690: ; 8d690 - call Function8dbdd ; 23:5690 - jp hl ; 23:5693 + dw .Function8d673 + dw .Function8d680 + +.Function8d673 + ld a, [wBattleMonLevel] + and a + ret z + call .IncrementJumptableIndex + ld a, SPRITE_ANIM_FRAMESET_GS_INTRO_JIGGLYPUFF_2 + call _ReinitSpriteAnimFrame +.Function8d680 + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $d0 + jr z, .asm_8d68c + dec [hl] + dec [hl] + ret + +.asm_8d68c + call DeinitializeSprite + ret + +.GSIntroPikachu + call .AnonymousJumptable + jp hl ; anonymous jumptable - dw Function8d69c - dw Function8d6b6 - dw Function8d6c9 - dw Function8d6f2 -Function8d69c: - ld hl, $4 ; 23:569c - add hl, bc ; 23:569f - ld a, [hl] ; 23:56a0 - cp $80 ; 23:56a1 - jr z, Function8d6a7 ; 23:56a3 - dec [hl] ; 23:56a5 - ret ; 23:56a6 - -Function8d6a7: ; 8d6a7 - call Function8dbf0 ; 23:56a7 - ld hl, $d ; 23:56aa - add hl, bc ; 23:56ad - ld [hl], $30 ; 23:56ae - ld a, $e ; 23:56b0 - call Function8d332 ; 23:56b2 - ret ; 23:56b5 - -Function8d6b6: ; 8d6b6 - ld hl, $d ; 23:56b6 - add hl, bc ; 23:56b9 - ld a, [hl] ; 23:56ba - and a ; 23:56bb - jr z, Function8d6c0 ; 23:56bc - dec [hl] ; 23:56be - ret ; 23:56bf - -Function8d6c0: ; 8d6c0 - call Function8dbf0 ; 23:56c0 - ld a, $f ; 23:56c3 - call Function8d332 ; 23:56c5 - ret ; 23:56c8 - -Function8d6c9: ; 8d6c9 - ld hl, $c ; 23:56c9 - add hl, bc ; 23:56cc - ld a, [hl] ; 23:56cd - add a, $4 ; 23:56ce - ld [hl], a ; 23:56d0 - ld d, $4 ; 23:56d1 - call Function8dbf6 ; 23:56d3 - ld hl, $7 ; 23:56d6 - add hl, bc ; 23:56d9 - ld [hl], a ; 23:56da - ld hl, $4 ; 23:56db - add hl, bc ; 23:56de - ld a, [hl] ; 23:56df - cp $50 ; 23:56e0 - jr z, Function8d6e9 ; 23:56e2 - dec [hl] ; 23:56e4 - dec [hl] ; 23:56e5 - dec [hl] ; 23:56e6 - dec [hl] ; 23:56e7 - ret ; 23:56e8 - -Function8d6e9: ; 8d6e9 - ld a, $1 ; 23:56e9 - ld [$cb19], a ; 23:56eb - call Function8dbf0 ; 23:56ee - ret ; 23:56f1 - -Function8d6f2: ; 8d6f2 - ld hl, $4 ; 23:56f2 - add hl, bc ; 23:56f5 - ld a, [hl] ; 23:56f6 - cp $d0 ; 23:56f7 - jr z, Function8d6fe ; 23:56f9 - dec [hl] ; 23:56fb - dec [hl] ; 23:56fc - ret ; 23:56fd - -Function8d6fe: ; 8d6fe - call DeinitializeSprite ; 23:56fe - ret ; 23:5701 - -Function8d702: ; 8d702 - call Function8dbdd ; 23:5702 - jp hl ; 23:5705 + dw .Function8d69c + dw .Function8d6b6 + dw .Function8d6c9 + dw .Function8d6f2 + +.Function8d69c + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $80 + jr z, .asm_8d6a7 + dec [hl] + ret + +.asm_8d6a7 + call .IncrementJumptableIndex + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld [hl], $30 + ld a, SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_2 + call _ReinitSpriteAnimFrame + ret + +.Function8d6b6 + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld a, [hl] + and a + jr z, .asm_8d6c0 + dec [hl] + ret + +.asm_8d6c0 + call .IncrementJumptableIndex + ld a, SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_3 + call _ReinitSpriteAnimFrame + ret + +.Function8d6c9 + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + add $04 + ld [hl], a + ld d, $04 + call .Sprites_Sine + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $50 + jr z, .asm_8d6e9 + dec [hl] + dec [hl] + dec [hl] + dec [hl] + ret + +.asm_8d6e9 + ld a, 1 + ld [wBattleMonLevel], a + call .IncrementJumptableIndex + ret + +.Function8d6f2 + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $d0 + jr z, .asm_8d6fe + dec [hl] + dec [hl] + ret + +.asm_8d6fe + call DeinitializeSprite + ret + +.GSIntroPikachuTail + call .AnonymousJumptable + jp hl ; anonymous jumptable - dw Function8d70c - dw Function8d726 - dw Function8d73c - -Function8d70c: ; 8d70c - ld hl, $4 ; 23:570c - add hl, bc ; 23:570f - ld a, [hl] ; 23:5710 - cp $80 ; 23:5711 - jr z, Function8d717 ; 23:5713 - dec [hl] ; 23:5715 - ret ; 23:5716 - -Function8d717: ; 8d717 - call Function8dbf0 ; 23:5717 - ld hl, $d ; 23:571a - add hl, bc ; 23:571d - ld [hl], $30 ; 23:571e - ld a, $11 ; 23:5720 - call Function8d332 ; 23:5722 - ret ; 23:5725 - -Function8d726: ; 8d726 - ld hl, $d ; 23:5726 - add hl, bc ; 23:5729 - ld a, [hl] ; 23:572a - and a ; 23:572b - jr z, Function8d738 ; 23:572c - dec [hl] ; 23:572e - cp $20 ; 23:572f - ret nz ; 23:5731 - ld a, $10 ; 23:5732 - call Function8d332 ; 23:5734 - ret ; 23:5737 - -Function8d738: ; 8d738 - call Function8dbf0 ; 23:5738 - ret ; 23:573b - -Function8d73c: ; 8d73c - ld hl, $c ; 23:573c - add hl, bc ; 23:573f - ld a, [hl] ; 23:5740 - add a, $4 ; 23:5741 - ld [hl], a ; 23:5743 - ld d, $4 ; 23:5744 - call Function8dbf6 ; 23:5746 - ld hl, $7 ; 23:5749 - add hl, bc ; 23:574c - ld [hl], a ; 23:574d - ld hl, $4 ; 23:574e - add hl, bc ; 23:5751 - ld a, [hl] ; 23:5752 - cp $d0 ; 23:5753 - jr z, Function8d761 ; 23:5755 - dec [hl] ; 23:5757 - dec [hl] ; 23:5758 - ld a, [$cb19] ; 23:5759 - and a ; 23:575c - ret nz ; 23:575d - dec [hl] ; 23:575e - dec [hl] ; 23:575f - ret ; 23:5760 - -Function8d761: ; 8d761 - call DeinitializeSprite ; 23:5761 - ret ; 23:5764 - -Function8d765: ; 8d765 - call Function8dbdd ; 23:5765 - jp hl ; 23:5768 + dw .Function8d70c + dw .Function8d726 + dw .Function8d73c + +.Function8d70c + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $80 + jr z, .asm_8d717 + dec [hl] + ret + +.asm_8d717 + call .IncrementJumptableIndex + + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld [hl], $30 + ld a, SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_TAIL_2 + call _ReinitSpriteAnimFrame + ret + +.Function8d726 + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld a, [hl] + and a + jr z, .asm_8d738 + dec [hl] + cp $20 + ret nz + ld a, SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_TAIL + call _ReinitSpriteAnimFrame + ret + +.asm_8d738 + call .IncrementJumptableIndex + ret + +.Function8d73c + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + add $04 + ld [hl], a + ld d, $04 + call .Sprites_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $d0 + jr z, .asm_8d761 + dec [hl] + dec [hl] + ld a, [wBattleMonLevel] + and a + ret nz + dec [hl] + dec [hl] + ret + +.asm_8d761 + call DeinitializeSprite + ret + +.GSIntroFireball + call .AnonymousJumptable + jp hl ; anonymous jumptable - dw Function8d76d - dw Function8d786 - -Function8d76d: ; 8d76d - call Function8dbf0 ; 23:576d - ld hl, $0 ; 23:5770 - add hl, bc ; 23:5773 - ld a, [hl] ; 23:5774 - and $4 ; 23:5775 - sla a ; 23:5777 - ld e, a ; 23:5779 - ld a, [hl] ; 23:577a - and $3 ; 23:577b - swap a ; 23:577d - add e ; 23:577f - ld hl, $c ; 23:5780 - add hl, bc ; 23:5783 - ld [hl], a ; 23:5784 - ret ; 23:5785 - -Function8d786: ; 8d786 - ld hl, $4 ; 23:5786 - add hl, bc ; 23:5789 - dec [hl] ; 23:578a - dec [hl] ; 23:578b - dec [hl] ; 23:578c - dec [hl] ; 23:578d - ld hl, $d ; 23:578e - add hl, bc ; 23:5791 - ld a, [hl] ; 23:5792 - ld d, a ; 23:5793 - add a, $8 ; 23:5794 - ld [hl], a ; 23:5796 - ld hl, $c ; 23:5797 - add hl, bc ; 23:579a - ld a, [hl] ; 23:579b - push af ; 23:579c - push de ; 23:579d - call Function8dbf6 ; 23:579e - ld hl, $7 ; 23:57a1 - add hl, bc ; 23:57a4 - ld [hl], a ; 23:57a5 - pop de ; 23:57a6 - pop af ; 23:57a7 - call Function8dbfa ; 23:57a8 - ld hl, $6 ; 23:57ab - add hl, bc ; 23:57ae - ld [hl], a ; 23:57af - ret ; 23:57b0 - -Function8d7b1: ; 8d7b1 - call Function8dbdd ; 23:57b1 - jp hl ; 23:57b4 + dw .Function8d76d + dw .Function8d786 + +.Function8d76d + call .IncrementJumptableIndex + ld hl, 0 + add hl, bc + ld a, [hl] + and $4 + sla a + ld e, a + ld a, [hl] + and $3 + swap a + add e + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], a + ret + +.Function8d786 + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + dec [hl] + dec [hl] + dec [hl] + dec [hl] + + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld a, [hl] + ld d, a + add $8 + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + push af + push de + call .Sprites_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + pop de + pop af + call .Sprites_Cosine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + ret + +; flash down/right +.GSIntroChikoritaTotodile + call .AnonymousJumptable + jp hl ; anonymous jumptable - dw Function8d7b9 - dw Function8d7c9 - -Function8d7b9: ; 8d7b9 - call Function8dbf0 ; 23:57b9 - ld hl, $c ; 23:57bc - add hl, bc ; 23:57bf - ld [hl], $30 ; 23:57c0 - ld hl, $d ; 23:57c2 - add hl, bc ; 23:57c5 - ld [hl], $30 ; 23:57c6 - ret ; 23:57c8 - -Function8d7c9: ; 8d7c9 - ld hl, $c ; 23:57c9 - add hl, bc ; 23:57cc - ld a, [hl] ; 23:57cd - cp $3c ; 23:57ce - ret nc ; 23:57d0 - inc [hl] ; 23:57d1 - inc [hl] ; 23:57d2 - ld d, $90 ; 23:57d3 - call Function8dbf6 ; 23:57d5 - ld hl, $7 ; 23:57d8 - add hl, bc ; 23:57db - ld [hl], a ; 23:57dc - ld hl, $d ; 23:57dd - add hl, bc ; 23:57e0 - ld a, [hl] ; 23:57e1 - inc [hl] ; 23:57e2 - inc [hl] ; 23:57e3 - ld d, $90 ; 23:57e4 - call Function8dbfa ; 23:57e6 - ld hl, $6 ; 23:57e9 - add hl, bc ; 23:57ec - ld [hl], a ; 23:57ed - ret ; 23:57ee - -Function8d7ef: ; 8d7ef - call Function8dbdd ; 23:57ef - jp hl ; 23:57f2 + dw .Function8d7b9 + dw .Function8d7c9 + +.Function8d7b9 + call .IncrementJumptableIndex + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], $30 + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld [hl], $30 + ret + +.Function8d7c9 + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + cp $3c + ret nc + + inc [hl] + inc [hl] + ld d, $90 + call .Sprites_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld a, [hl] + inc [hl] + inc [hl] + ld d, $90 + call .Sprites_Cosine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + ret + +; flash down/left +.GSIntroCyndaquil + call .AnonymousJumptable + jp hl ; anonymous jumptable - dw Function8d7f7 - dw Function8d807 - -Function8d7f7: ; 8d7f7 - call Function8dbf0 ; 23:57f7 - ld hl, $c ; 23:57fa - add hl, bc ; 23:57fd - ld [hl], $30 ; 23:57fe - ld hl, $d ; 23:5800 - add hl, bc ; 23:5803 - ld [hl], $10 ; 23:5804 - ret ; 23:5806 - -Function8d807: ; 8d807 - ld hl, $c ; 23:5807 - add hl, bc ; 23:580a - ld a, [hl] ; 23:580b - cp $3c ; 23:580c - ret nc ; 23:580e - inc [hl] ; 23:580f - inc [hl] ; 23:5810 - ld d, $90 ; 23:5811 - call Function8dbf6 ; 23:5813 - ld hl, $7 ; 23:5816 - add hl, bc ; 23:5819 - ld [hl], a ; 23:581a - ld hl, $d ; 23:581b - add hl, bc ; 23:581e - ld a, [hl] ; 23:581f - inc [hl] ; 23:5820 - inc [hl] ; 23:5821 - ld d, $90 ; 23:5822 - call Function8dbfa ; 23:5824 - ld hl, $6 ; 23:5827 - add hl, bc ; 23:582a - ld [hl], a ; 23:582b - ret ; 23:582c - -Function8d82d: ; 8d82d - call Function8dbdd ; 23:582d - jp hl ; 23:5830 + dw .Function8d7f7 + dw .Function8d807 + +.Function8d7f7 + call .IncrementJumptableIndex + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], $30 + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld [hl], $10 + ret + +.Function8d807 + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + cp $3c + ret nc + inc [hl] + inc [hl] + ld d, $90 + call .Sprites_Sine + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld a, [hl] + inc [hl] + inc [hl] + ld d, $90 + call .Sprites_Cosine + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + ret +.GSTitleTrail + call .AnonymousJumptable + jp hl + +IF DEF(_GOLD) ; anonymous jumptable - dw Function8d835 - dw Function8d84c - -Function8d835: ; 8d835 - call Function8dbf0 ; 23:5835 - ld hl, $0 ; 23:5838 - add hl, bc ; 23:583b - ld a, [hl] ; 23:583c - ld hl, $d ; 23:583d - add hl, bc ; 23:5840 - and $3 ; 23:5841 - ld [hl], a ; 23:5843 - inc [hl] ; 23:5844 - swap a ; 23:5845 - ld hl, $c ; 23:5847 - add hl, bc ; 23:584a - ld [hl], a ; 23:584b -Function8d84c: ; 8d84c - ld hl, $4 ; 23:584c - add hl, bc ; 23:584f - ld a, [hl] ; 23:5850 - cp $a4 ; 23:5851 - jr nc, Function8d881 ; 23:5853 - ld hl, $d ; 23:5855 - add hl, bc ; 23:5858 - add a, $4 ; 23:5859 - ld hl, $4 ; 23:585b - add hl, bc ; 23:585e - ld [hl], a ; 23:585f - ld hl, $5 ; 23:5860 - add hl, bc ; 23:5863 - inc [hl] ; 23:5864 - ld hl, $d ; 23:5865 - add hl, bc ; 23:5868 - ld a, [hl] ; 23:5869 - sla a ; 23:586a - sla a ; 23:586c - ld d, $2 ; 23:586e - ld hl, $c ; 23:5870 - add hl, bc ; 23:5873 - ld a, [hl] ; 23:5874 - add a, $3 ; 23:5875 - ld [hl], a ; 23:5877 - call Function8dbf6 ; 23:5878 - ld hl, $7 ; 23:587b - add hl, bc ; 23:587e - ld [hl], a ; 23:587f - ret ; 23:5880 - -Function8d881: ; 8d881 - call DeinitializeSprite ; 23:5881 - ret ; 23:5884 - -Function8d885: ; 8d885 - ld hl, $c ; 23:5885 - add hl, bc ; 23:5888 - ld a, [hl] ; 23:5889 - inc a ; 23:588a - ld [hl], a ; 23:588b - ld d, $2 ; 23:588c - call Function8dbf6 ; 23:588e - ld hl, $7 ; 23:5891 - add hl, bc ; 23:5894 - ld [hl], a ; 23:5895 - ret ; 23:5896 - -Function8d897: ; 8d897 - push bc ; 23:5897 - callba_hc $38, $4000 ; 23:5898 ; 23:589d - pop bc ; 23:589e - ld hl, $c704 ; 23:589f - ld a, [hl] ; 23:58a2 - and $3 ; 23:58a3 - ret z ; 23:58a5 - ld [hl], $0 ; 23:58a6 - ld e, a ; 23:58a8 - ld d, $0 ; 23:58a9 - ld hl, $58b4 ; 23:58ab - add hl, de ; 23:58ae - ld a, [hl] ; 23:58af - call Function8d332 ; 23:58b0 - ret ; 23:58b3 - -Function8d8b4: ; 8d8b4 - db $17 - db $18 - db $17 - db $19 - -Function8d8b8: ; 8d8b8 - callba_hc $38, $4000 ; 23:58b8 ; 23:58bd - ret ; 23:58be - -Function8d8bf: ; 8d8bf - call Function8dbdd ; 23:58bf - jp hl ; 23:58c2 + dw .Function8d835 + dw .Function8d84c + +.Function8d835 + call .IncrementJumptableIndex + + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc + ld a, [hl] + + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + and $3 + ld [hl], a + inc [hl] + swap a + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], a + +.Function8d84c + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $a4 + jr nc, .asm_8d881 + + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + add $4 + + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + inc [hl] + + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld a, [hl] + sla a + sla a + ld d, 2 + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + add $3 + ld [hl], a + call .Sprites_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ret + +.asm_8d881 + call DeinitializeSprite + ret + +ELIF DEF(_SILVER) +; anonymous jumptable + dw .Function8d835 + dw .Function8d856 + +.Function8d835 + ld a, [wIntroSceneTimer] + and $30 + swap a + add $3 + ld d, a + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [wIntroSceneTimer] + and $30 + swap a + add $07 + add [hl] + ld [hl], a + call .Sprites_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a +.Function8d856 + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $a4 + jr nc, .asm_8d863 + add $4 + ld [hl], a + ret + +.asm_8d863 + call DeinitializeSprite + ret +ENDC + +.GSIntroHoOhLugia + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] +IF DEF(_GOLD) + inc a + ld [hl], a + ld d, 2 +ELIF DEF(_SILVER) + dec a + ld [hl], a + ld d, 8 +ENDC + call .Sprites_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ret + +.UnusedPikachu + push bc + farcall ret_e0000 + pop bc + ld hl, wc704 + ld a, [hl] + and $3 + ret z + ld [hl], 0 + ld e, a + ld d, 0 + ld hl, .Data_8d8b4 + add hl, de + ld a, [hl] + call _ReinitSpriteAnimFrame + ret + +.Data_8d8b4 + db SPRITE_ANIM_FRAMESET_UNUSED_PIKACHU + db SPRITE_ANIM_FRAMESET_UNUSED_PIKACHU_2 + db SPRITE_ANIM_FRAMESET_UNUSED_PIKACHU + db SPRITE_ANIM_FRAMESET_UNUSED_PIKACHU_3 + +.UnusedPikachuTail + farcall ret_e0000 + ret + +.UnusedNote + call .AnonymousJumptable + jp hl ; anonymous jumptable - dw Function8d8c7 - dw Function8d8d9 - -Function8d8c7: ; 8d8c7 - call Function8d8e1 ; 23:58c7 - ld a, [$c717] ; 23:58ca - ld hl, $4 ; 23:58cd - add hl, bc ; 23:58d0 - add [hl] ; 23:58d1 - ld [hl], a ; 23:58d2 - cp $c0 ; 23:58d3 - ret nc ; 23:58d5 - cp $a8 ; 23:58d6 - ret c ; 23:58d8 -Function8d8d9: - call DeinitializeSprite ; 23:58d9 - ld hl, $c5bc ; 23:58dc - dec [hl] ; 23:58df - ret ; 23:58e0 - -Function8d8e1: ; 8d8e1 - ld hl, $c ; 23:58e1 - add hl, bc ; 23:58e4 - ld a, [hl] ; 23:58e5 - inc [hl] ; 23:58e6 - and $1f ; 23:58e7 - srl a ; 23:58e9 - ld e, a ; 23:58eb - ld d, $0 ; 23:58ec - ld hl, Data_8d8f9 ; 23:58ee - add hl, de ; 23:58f1 - ld a, [hl] ; 23:58f2 - ld hl, $7 ; 23:58f3 - add hl, bc ; 23:58f6 - ld [hl], a ; 23:58f7 - ret ; 23:58f8 - -Data_8d8f9: ; 8d8f9 - db $04 - db $07 - db $09 - db $0a - db $09 - db $07 - db $04 - db $00 - db $fc - db $f9 - db $f7 - db $f6 - db $f7 - db $f9 - db $fc - db $00 - -Function8d909: ; 8d909 - ld a, [$c717] - ld hl, $4 + dw .Function8d8c7 + dw .Function8d8d9 + +.Function8d8c7 + call .Function8d8e1 + ld a, [wc717] + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + add [hl] + ld [hl], a + cp $c0 + ret nc + cp $a8 + ret c +.Function8d8d9 + call DeinitializeSprite + ld hl, wSpriteAnimCount + dec [hl] + ret + +.Function8d8e1 + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + inc [hl] + and $1f + srl a + ld e, a + ld d, 0 + ld hl, .Data_8d8f9 + add hl, de + ld a, [hl] + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ret + +.Data_8d8f9 + db 4, 7, 9, 10, 9, 7, 4, 0 + db -4, -7, -9, -10, -9, -7, -4, 0 + +.UnusedJigglypuff + ld a, [wc717] + + ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc add [hl] ld [hl], a cp $30 ret nz xor a - ld [$c717], a - ret ; 23:5919 - -Function8d91a: ; 8d91a - callab_hc $4, $5dfa ; 23:591a ; 23:591f - ret ; 23:5920 - -Function8d921: ; 8d921 - callab_hc $4, $648e ; 23:5921 ; 23:5926 - ret ; 23:5927 - -Function8d928: ; 8d928 - callab_hc $39, $4b20 ; 23:5928 ; 23:592d - ret ; 23:592e - -Function8d92f: ; 8d92f - ld hl, $c ; 23:592f - add hl, bc ; 23:5932 - ld a, [hl] ; 23:5933 - and a ; 23:5934 - jr z, Function8d968 ; 23:5935 - dec [hl] ; 23:5937 - dec [hl] ; 23:5938 - ld d, a ; 23:5939 - and $1f ; 23:593a - jr nz, .asm_8d943 ; 23:593c - ld hl, $d ; 23:593e - add hl, bc ; 23:5941 - dec [hl] ; 23:5942 + ld [wc717], a + ret + +.NamingScreenCursor + callfar NamingScreen_AnimateCursor + ret + +.MailCursor + callfar ComposeMail_AnimateCursor + ret + +.GameFreakLogo: + callfar GFPresents_UpdateLogoPal + ret + +.GSIntroStar + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + and a + jr z, .asm_8d968 + dec [hl] + dec [hl] + ld d, a + and $1f + jr nz, .asm_8d943 + + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + dec [hl] .asm_8d943 - ld hl, $b ; 23:5943 - add hl, bc ; 23:5946 - ld a, [hl] ; 23:5947 - push af ; 23:5948 - push de ; 23:5949 - call Function8dbf6 ; 23:594a - ld hl, $7 ; 23:594d - add hl, bc ; 23:5950 - ld [hl], a ; 23:5951 - pop de ; 23:5952 - pop af ; 23:5953 - call Function8dbfa ; 23:5954 - ld hl, $6 ; 23:5957 - add hl, bc ; 23:595a - ld [hl], a ; 23:595b - ld hl, $d ; 23:595c - add hl, bc ; 23:595f - ld a, [hl] ; 23:5960 - ld hl, $b ; 23:5961 - add hl, bc ; 23:5964 - add [hl] ; 23:5965 - ld [hl], a ; 23:5966 - ret ; 23:5967 - -Function8d968: ; 8d968 - ld a, $1 ; 23:5968 - ld [$ce64], a ; 23:596a - call DeinitializeSprite ; 23:596d - ret ; 23:5970 - -Function8d971: ; 8d971 - ld hl, $c ; 23:5971 - add hl, bc ; 23:5974 - ld a, [hli] ; 23:5975 - or [hl] ; 23:5976 - jr z, Function8d9cc ; 23:5977 - ld hl, $f ; 23:5979 - add hl, bc ; 23:597c - ld d, [hl] ; 23:597d - ld hl, $b ; 23:597e - add hl, bc ; 23:5981 - ld a, [hl] ; 23:5982 - push af ; 23:5983 - push de ; 23:5984 - call Function8dbf6 ; 23:5985 - ld hl, $7 ; 23:5988 - add hl, bc ; 23:598b - ld [hl], a ; 23:598c - pop de ; 23:598d - pop af ; 23:598e - call Function8dbfa ; 23:598f - ld hl, $6 ; 23:5992 - add hl, bc ; 23:5995 - ld [hl], a ; 23:5996 - ld hl, $c ; 23:5997 - add hl, bc ; 23:599a - ld e, [hl] ; 23:599b - inc hl ; 23:599c - ld d, [hl] ; 23:599d - ld hl, $e ; 23:599e - add hl, bc ; 23:59a1 - ld a, [hli] ; 23:59a2 - ld h, [hl] ; 23:59a3 - ld l, a ; 23:59a4 - add hl, de ; 23:59a5 - ld e, l ; 23:59a6 - ld d, h ; 23:59a7 - ld hl, $e ; 23:59a8 - add hl, bc ; 23:59ab - ld [hl], e ; 23:59ac - inc hl ; 23:59ad - ld [hl], d ; 23:59ae - ld hl, $c ; 23:59af - add hl, bc ; 23:59b2 - ld a, [hli] ; 23:59b3 - ld h, [hl] ; 23:59b4 - ld l, a ; 23:59b5 - ld de, $fff0 ; 23:59b6 - add hl, de ; 23:59b9 - ld e, l ; 23:59ba - ld d, h ; 23:59bb - ld hl, $c ; 23:59bc - add hl, bc ; 23:59bf - ld [hl], e ; 23:59c0 - inc hl ; 23:59c1 - ld [hl], d ; 23:59c2 - ld hl, $b ; 23:59c3 - add hl, bc ; 23:59c6 - ld a, [hl] ; 23:59c7 - xor $20 ; 23:59c8 - ld [hl], a ; 23:59ca - ret ; 23:59cb - -Function8d9cc: ; 8d9cc - call DeinitializeSprite ; 23:59cc - ret ; 23:59cf - -Function8d9d0: ; 8d9d0 - callab_hc $24, $7772 ; 23:59d0 ; 23:59d5 - ret ; 23:59d6 - -Function8d9d7: ; 8d9d7 - callab_hc $24, $7801 ; 23:59d7 ; 23:59dc - ld hl, $ce64 ; 23:59dd - ld a, [hl] ; 23:59e0 - cp $2 ; 23:59e1 - ret nz ; 23:59e3 - ld [hl], $3 ; 23:59e4 - ld a, $21 ; 23:59e6 - call Function8d332 ; 23:59e8 - ret ; 23:59eb - -Function8d9ec: ; 8d9ec - ld hl, $b ; 23:59ec - add hl, bc ; 23:59ef - ld a, [hl] ; 23:59f0 - dec [hl] ; 23:59f1 - ld e, a ; 23:59f2 - and $1 ; 23:59f3 - jr z, .asm_8da10 ; 23:59f5 - ld hl, $4 ; 23:59f7 - add hl, bc ; 23:59fa - ld a, [hl] ; 23:59fb - cp $78 ; 23:59fc - jr c, asm_8da0f ; 23:59fe - call DeinitializeSprite ; 23:5a00 - ld a, $4 ; 23:5a03 - ld [$ce64], a ; 23:5a05 - ld de, $1e ; 23:5a08 - call $3e24 ; 23:5a0b - ret ; 23:5a0e - -.asm_8da0f - inc [hl] ; 23:5a0f -.asm_8da10 - ld a, e ; 23:5a10 - ld d, $20 ; 23:5a11 - call Function8dbf6 ; 23:5a13 - ld hl, $7 ; 23:5a16 - add hl, bc ; 23:5a19 - ld [hl], a ; 23:5a1a - ret ; 23:5a1b - -Function8da1c: ; 8da1c - callab_hc $38, $4908 ; 23:5a1c ; 23:5a21 - ret ; 23:5a22 - -Function8da23: ; 8da23 - callab_hc $24, $4d0b ; 23:5a23 ; 23:5a28 - ret ; 23:5a29 - -Function8da2a: ; 8da2a - callab_hc $38, $69ae ; 23:5a2a ; 23:5a2f - ret ; 23:5a30 - -Function8da31: ; 8da31 - call Function8dbdd ; 23:5a31 - jp hl ; 23:5a34 - ld b, c ; 23:5a35 - ld e, d ; 23:5a36 - add e ; 23:5a37 - ld e, d ; 23:5a38 - ld d, e ; 23:5a39 - ld e, d ; 23:5a3a - ld h, [hl] ; 23:5a3b - ld e, d ; 23:5a3c - sub [hl] ; 23:5a3d - ld e, d ; 23:5a3e - call nc, $3e5a ; 23:5a3f - ld h, $cd ; 23:5a42 - ld [hld], a ; 23:5a44 - ld d, e ; 23:5a45 - ld hl, $b ; 23:5a46 - add hl, bc ; 23:5a49 - ld [hl], $2 ; 23:5a4a - ld hl, $c ; 23:5a4c - add hl, bc ; 23:5a4f - ld [hl], $20 ; 23:5a50 - ret ; 23:5a52 - -Function8da53: ; 8da53 - ld hl, $c ; 23:5a53 - add hl, bc ; 23:5a56 - ld a, [hl] ; 23:5a57 - and a ; 23:5a58 - jr z, Function8da5d ; 23:5a59 - dec [hl] ; 23:5a5b - ret ; 23:5a5c - -Function8da5d: ; 8da5d - call Function8dbf0 ; 23:5a5d - ld hl, $c ; 23:5a60 - add hl, bc ; 23:5a63 - ld [hl], $40 ; 23:5a64 - ld hl, $c ; 23:5a66 - add hl, bc ; 23:5a69 - ld a, [hl] ; 23:5a6a - cp $30 ; 23:5a6b - jr c, Function8da7b ; 23:5a6d - dec [hl] ; 23:5a6f - ld d, $28 ; 23:5a70 - call Function8dbf6 ; 23:5a72 - ld hl, $7 ; 23:5a75 - add hl, bc ; 23:5a78 - ld [hl], a ; 23:5a79 - ret ; 23:5a7a - -Function8da7b: ; 8da7b - ld de, $c ; 23:5a7b - call $3e24 ; 23:5a7e - jr Function8dad4 ; 23:5a81 - ld hl, $b ; 23:5a83 - add hl, bc ; 23:5a86 - ld [hl], $4 ; 23:5a87 - ld hl, $c ; 23:5a89 - add hl, bc ; 23:5a8c - ld [hl], $30 ; 23:5a8d - ld hl, $d ; 23:5a8f - add hl, bc ; 23:5a92 - ld [hl], $24 ; 23:5a93 - ret ; 23:5a95 - -Function8da96: ; 8da96 - ld hl, $d ; 23:5a96 - add hl, bc ; 23:5a99 - ld a, [hl] ; 23:5a9a - and a ; 23:5a9b - jr z, Function8daca ; 23:5a9c - ld d, a ; 23:5a9e - ld hl, $c ; 23:5a9f - add hl, bc ; 23:5aa2 - ld a, [hl] ; 23:5aa3 - call Sprites_Sine ; 23:5aa4 - ld hl, $7 ; 23:5aa7 - add hl, bc ; 23:5aaa - ld [hl], a ; 23:5aab - ld hl, $c ; 23:5aac - add hl, bc ; 23:5aaf - inc [hl] ; 23:5ab0 - ld a, [hl] ; 23:5ab1 - and $3f ; 23:5ab2 - ret nz ; 23:5ab4 - ld hl, $c ; 23:5ab5 - add hl, bc ; 23:5ab8 - ld [hl], $20 ; 23:5ab9 - ld hl, $d ; 23:5abb - add hl, bc ; 23:5abe - ld a, [hl] ; 23:5abf - sub a, $c ; 23:5ac0 - ld [hl], a ; 23:5ac2 - ld de, $20 ; 23:5ac3 - call $3e24 ; 23:5ac6 - ret ; 23:5ac9 - -Function8daca: ; 8daca - xor a ; 23:5aca - ld hl, $7 ; 23:5acb - add hl, bc ; 23:5ace - ld [hl], a ; 23:5acf - call Function8dbf0 ; 23:5ad0 - ret ; 23:5ad3 - -Function8dad4: ; 8dad4 - call DeinitializeSprite ; 23:5ad4 - ret ; 23:5ad7 - -Function8dad8: ; 8dad8 - ld hl, $4 ; 23:5ad8 - add hl, bc ; 23:5adb - ld a, [hl] ; 23:5adc - inc [hl] ; 23:5add - cp $b0 ; 23:5ade - jr nc, Function8daec ; 23:5ae0 - and $3 ; 23:5ae2 - ret nz ; 23:5ae4 - ld de, $3 ; 23:5ae5 - call $3e24 ; 23:5ae8 - ret ; 23:5aeb - -Function8daec: ; 8daec - call DeinitializeSprite ; 23:5aec - ret ; 23:5aef - -Function8daf0: ; 8daf0 - callab_hc $a, $54cf ; 23:5af0 ; 23:5af5 - ret ; 23:5af6 - -Function8daf7: ; 8daf7 - ld hl, $c ; 23:5af7 - add hl, bc ; 23:5afa - ld a, [hl] ; 23:5afb - cp $80 ; 23:5afc - jr nc, Function8db21 ; 23:5afe - ld d, a ; 23:5b00 - add a, $8 ; 23:5b01 - ld [hl], a ; 23:5b03 - ld hl, $b ; 23:5b04 - add hl, bc ; 23:5b07 - ld a, [hl] ; 23:5b08 - xor $20 ; 23:5b09 - ld [hl], a ; 23:5b0b - push af ; 23:5b0c - push de ; 23:5b0d - call Function8dbf6 ; 23:5b0e - ld hl, $7 ; 23:5b11 - add hl, bc ; 23:5b14 - ld [hl], a ; 23:5b15 - pop de ; 23:5b16 - pop af ; 23:5b17 - call Function8dbfa ; 23:5b18 - ld hl, $6 ; 23:5b1b - add hl, bc ; 23:5b1e - ld [hl], a ; 23:5b1f - ret ; 23:5b20 - -Function8db21: ; 8db21 - call DeinitializeSprite ; 23:5b21 - ret ; 23:5b24 - -Function8db25: ; 8db25 - callab_hc $24, $55ff ; 23:5b25 ; 23:5b2a - ret ; 23:5b2b - -Function8db2c: ; 8db2c - ld hl, $d ; 23:5b2c - add hl, bc ; 23:5b2f - ld e, [hl] ; 23:5b30 - inc hl ; 23:5b31 - ld d, [hl] ; 23:5b32 - ld hl, $80 ; 23:5b33 - add hl, de ; 23:5b36 - ld e, l ; 23:5b37 - ld d, h ; 23:5b38 - ld hl, $d ; 23:5b39 - add hl, bc ; 23:5b3c - ld [hl], e ; 23:5b3d - inc hl ; 23:5b3e - ld [hl], d ; 23:5b3f - ld hl, $c ; 23:5b40 - add hl, bc ; 23:5b43 - ld a, [hl] ; 23:5b44 - inc [hl] ; 23:5b45 - inc [hl] ; 23:5b46 - inc [hl] ; 23:5b47 - push af ; 23:5b48 - push de ; 23:5b49 - call Function8dbf6 ; 23:5b4a - ld hl, $7 ; 23:5b4d - add hl, bc ; 23:5b50 - ld [hl], a ; 23:5b51 - pop de ; 23:5b52 - pop af ; 23:5b53 - call Function8dbfa ; 23:5b54 - ld hl, $6 ; 23:5b57 - add hl, bc ; 23:5b5a - ld [hl], a ; 23:5b5b - ret ; 23:5b5c - -Function8db5d: ; 8db5d - ld hl, $5 ; 23:5b5d - add hl, bc ; 23:5b60 - ld a, [hl] ; 23:5b61 - and a ; 23:5b62 - ret z ; 23:5b63 - ld hl, $d ; 23:5b64 - add hl, bc ; 23:5b67 - ld a, [hl] ; 23:5b68 - inc [hl] ; 23:5b69 - cp $40 ; 23:5b6a - ret c ; 23:5b6c - ld hl, $5 ; 23:5b6d - add hl, bc ; 23:5b70 - dec [hl] ; 23:5b71 - dec [hl] ; 23:5b72 - ld hl, $f ; 23:5b73 - add hl, bc ; 23:5b76 - ld a, [hl] ; 23:5b77 - ld d, a ; 23:5b78 - cp $40 ; 23:5b79 - jr nc, .asm_8db80 ; 23:5b7b - add a, $8 ; 23:5b7d - ld [hl], a ; 23:5b7f -.asm_8db80 - ld hl, $e ; 23:5b80 - add hl, bc ; 23:5b83 - ld a, [hl] ; 23:5b84 - inc [hl] ; 23:5b85 - call Function8dbfa ; 23:5b86 - ld hl, $6 ; 23:5b89 - add hl, bc ; 23:5b8c - ld [hl], a ; 23:5b8d - ret ; 23:5b8e - -Function8db8f: ; 8db8f - ld hl, $4 ; 23:5b8f - add hl, bc ; 23:5b92 - ld a, [hl] ; 23:5b93 - cp $b8 ; 23:5b94 - jr nc, Function8dbb0 ; 23:5b96 - inc [hl] ; 23:5b98 - inc [hl] ; 23:5b99 - ld hl, $5 ; 23:5b9a - add hl, bc ; 23:5b9d - dec [hl] ; 23:5b9e - ld d, $40 ; 23:5b9f - ld hl, $c ; 23:5ba1 - add hl, bc ; 23:5ba4 - ld a, [hl] ; 23:5ba5 - inc [hl] ; 23:5ba6 - call Function8dbfa ; 23:5ba7 - ld hl, $6 ; 23:5baa - add hl, bc ; 23:5bad - ld [hl], a ; 23:5bae - ret ; 23:5baf - -Function8dbb0: ; 8dbb0 - call DeinitializeSprite ; 23:5bb0 - ret ; 23:5bb3 - -Function8dbb4: ; 8dbb4 - ld hl, $5 ; 23:5bb4 - add hl, bc ; 23:5bb7 - ld a, [hl] ; 23:5bb8 - cp $54 ; 23:5bb9 - ret z ; 23:5bbb - ld hl, $5 ; 23:5bbc - add hl, bc ; 23:5bbf - inc [hl] ; 23:5bc0 - inc [hl] ; 23:5bc1 - ld hl, $f ; 23:5bc2 - add hl, bc ; 23:5bc5 - ld a, [hl] ; 23:5bc6 - ld d, a ; 23:5bc7 - and a ; 23:5bc8 - jr z, .asm_8dbce ; 23:5bc9 - sub a, $2 ; 23:5bcb - ld [hl], a ; 23:5bcd + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld a, [hl] + push af + push de + call .Sprites_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + pop de + pop af + call .Sprites_Cosine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld a, [hl] + + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + add [hl] + ld [hl], a + ret + +.asm_8d968 + ld a, 1 + ld [wce64], a + call DeinitializeSprite + ret + +.GSIntroSparkle + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hli] + or [hl] + jr z, .asm_8d9cc + + ld hl, SPRITEANIMSTRUCT_0F + add hl, bc + ld d, [hl] + + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld a, [hl] + push af + push de + call .Sprites_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + pop de + pop af + call .Sprites_Cosine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + + ld hl, SPRITEANIMSTRUCT_0E + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + add hl, de + ld e, l + ld d, h + + ld hl, SPRITEANIMSTRUCT_0E + add hl, bc + ld [hl], e + inc hl + ld [hl], d + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld de, -$10 + add hl, de + ld e, l + ld d, h + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], e + inc hl + ld [hl], d + + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld a, [hl] + xor $20 + ld [hl], a + ret + +.asm_8d9cc + call DeinitializeSprite + ret + +.SlotsGolem: + callfar Slots_AnimateGolem + ret + +.SlotsChansey: + callfar Slots_AnimateChansey + ld hl, wce64 + ld a, [hl] + cp 2 + ret nz + ld [hl], 3 + ld a, SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY_2 + call _ReinitSpriteAnimFrame + ret + +.SlotsChanseyEgg: + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld a, [hl] + dec [hl] + ld e, a + and 1 + jr z, .move_vertical + + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp 15 * 8 + jr c, .move_right + call DeinitializeSprite + ld a, 4 + ld [wce64], a + ld de, SFX_PLACE_PUZZLE_PIECE_DOWN + call PlaySFX + ret + +.move_right + inc [hl] +.move_vertical + ld a, e + ld d, $20 + call .Sprites_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ret + +.UnusedCursor + callfar ret_e0908 + ret + +.PokegearArrow + callfar AnimatePokegearModeIndicatorArrow + ret + +.DummyGameCursor + callfar DummyGame_InterpretJoypad_AnimateCursor + ret + +.TradePokeBall + call .AnonymousJumptable + jp hl + +; Anonymous dw (see .AnonymousJumptable) + dw .TradePokeBall_zero + dw .TradePokeBall_one + dw .TradePokeBall_two + dw .TradePokeBall_three + dw .TradePokeBall_four + dw .TradePokeBall_five + +.TradePokeBall_zero + ld a, SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL_WOBBLE + call _ReinitSpriteAnimFrame + + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld [hl], $2 + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], $20 + ret + +.TradePokeBall_two + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + and a + jr z, .asm_8da5d + dec [hl] + ret + +.asm_8da5d + call .IncrementJumptableIndex + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], $40 + +.TradePokeBall_three + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + cp $30 + jr c, .asm_8da7b + dec [hl] + ld d, $28 + call .Sprites_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ret + +.asm_8da7b + ld de, SFX_GOT_SAFARI_BALLS + call PlaySFX + jr .TradePokeBall_five + +.TradePokeBall_one + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld [hl], $4 + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], $30 + + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld [hl], $24 + ret + +.TradePokeBall_four + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld a, [hl] + and a + jr z, .asm_8daca + ld d, a + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + call Sprites_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + inc [hl] + ld a, [hl] + and $3f + ret nz + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], $20 + + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld a, [hl] + sub $c + ld [hl], a + ld de, SFX_SWITCH_POKEMON + call PlaySFX + ret + +.asm_8daca + xor a + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + call .IncrementJumptableIndex + ret + +.TradePokeBall_five + call DeinitializeSprite + ret + +.TradeTubeBulge + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + inc [hl] + cp $b0 + jr nc, .delete + and $3 + ret nz + ld de, SFX_POKEBALLS_PLACED_ON_TABLE + call PlaySFX + ret + +.delete + call DeinitializeSprite + ret + +.TrademonInTube + callfar TradeAnim_AnimateTrademonInTube + ret + +.RevealNewMon: + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + cp $80 + jr nc, .finish_EggShell + ld d, a + add $8 + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld a, [hl] + xor $20 + ld [hl], a + + push af + push de + call .Sprites_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + + pop de + pop af + call .Sprites_Cosine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + ret + +.finish_EggShell + call DeinitializeSprite + ret + +.RadioTuningKnob: + callfar AnimateTuningKnob + ret + +.CutLeaves + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $80 + add hl, de + ld e, l + ld d, h + + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld [hl], e + inc hl + ld [hl], d + + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + inc [hl] + inc [hl] + inc [hl] + push af + push de + call .Sprites_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + pop de + pop af + call .Sprites_Cosine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + ret + +.FlyFrom: + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + ld a, [hl] + and a + ret z + + ld hl, SPRITEANIMSTRUCT_0D + add hl, bc + ld a, [hl] + inc [hl] + cp $40 + ret c + + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + dec [hl] + dec [hl] + + ld hl, SPRITEANIMSTRUCT_0F + add hl, bc + ld a, [hl] + ld d, a + cp $40 + jr nc, .skip + add $8 + ld [hl], a +.skip + ld hl, SPRITEANIMSTRUCT_0E + add hl, bc + ld a, [hl] + inc [hl] + call .Sprites_Cosine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + ret + +.FlyLeaf: + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp -9 * 8 + jr nc, .delete_leaf + inc [hl] + inc [hl] + + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + dec [hl] + + ld d, $40 + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + inc [hl] + call .Sprites_Cosine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + ret + +.delete_leaf + call DeinitializeSprite + ret + +.FlyTo: + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + ld a, [hl] + cp 10 * 8 + 4 + ret z + + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + inc [hl] + inc [hl] + + ld hl, SPRITEANIMSTRUCT_0F + add hl, bc + ld a, [hl] + ld d, a + and a + jr z, .asm_8dbce + sub 2 + ld [hl], a .asm_8dbce - ld hl, $e ; 23:5bce - add hl, bc ; 23:5bd1 - ld a, [hl] ; 23:5bd2 - inc [hl] ; 23:5bd3 - call Function8dbfa ; 23:5bd4 - ld hl, $6 ; 23:5bd7 - add hl, bc ; 23:5bda - ld [hl], a ; 23:5bdb - ret ; 23:5bdc - -Function8dbdd: ; 8dbdd - ld hl, [sp+$0] ; 23:5bdd - ld e, [hl] ; 23:5bdf - inc hl ; 23:5be0 - ld d, [hl] ; 23:5be1 - inc de ; 23:5be2 - ld hl, $b ; 23:5be3 - add hl, bc ; 23:5be6 - ld l, [hl] ; 23:5be7 - ld h, $0 ; 23:5be8 - add hl, hl ; 23:5bea - add hl, de ; 23:5beb - ld a, [hli] ; 23:5bec - ld h, [hl] ; 23:5bed - ld l, a ; 23:5bee - ret ; 23:5bef - -Function8dbf0: ; 8dbf0 - ld hl, $b ; 23:5bf0 - add hl, bc ; 23:5bf3 - inc [hl] ; 23:5bf4 - ret ; 23:5bf5 - -Function8dbf6: ; 8dbf6 - call Sprites_Sine ; 23:5bf6 - ret ; 23:5bf9 - -Function8dbfa: ; 8dbfa - call Sprites_Cosine ; 23:5bfa - ret ; 23:5bfd + ld hl, SPRITEANIMSTRUCT_0E + add hl, bc + ld a, [hl] + inc [hl] + call .Sprites_Cosine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + ret + +.AnonymousJumptable: + ld hl, sp+$0 + ld e, [hl] + inc hl + ld d, [hl] + inc de + + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld l, [hl] + ld h, 0 + add hl, hl + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ret + +.IncrementJumptableIndex: + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + inc [hl] + ret + +.Sprites_Sine: + call Sprites_Sine + ret + +.Sprites_Cosine: + call Sprites_Cosine + ret diff --git a/engine/gfx/sprites.asm b/engine/gfx/sprites.asm index b9267d66..824ceac4 100755 --- a/engine/gfx/sprites.asm +++ b/engine/gfx/sprites.asm @@ -1,645 +1,639 @@ -ClearAnimatedObjects: ; 8d174 - ld hl, $c508 ; 23:5174 - ld bc, $c1 ; 23:5177 +ClearSpriteAnims: + ld hl, wSpriteAnimDict + ld bc, wSpriteAnimsEnd - wSpriteAnimDict .loop - ld [hl], $0 ; 23:517a - inc hl ; 23:517c - dec bc ; 23:517d - ld a, c ; 23:517e - or b ; 23:517f - jr nz, .loop ; 23:5180 - ret ; 23:5182 - -PlayAnimatedObjectationsAndDelayFrame: ; 8d182 - call PlayAnimatedObjectations ; 23:5183 - call $32e ; DelayFrame ; 23:5186 - ret ; 23:5189 - -PlayAnimatedObjectations: ; 8d189 - push hl ; 23:518a - push de ; 23:518b - push bc ; 23:518c - push af ; 23:518d - - ld a, $0 ; 23:518e - ld [$c5bd], a ; 23:5190 - call DoNextFrameForAllSprites ; 23:5193 - - pop af ; 23:5196 - pop bc ; 23:5197 - pop de ; 23:5198 - pop hl ; 23:5199 - ret ; 23:519a - -DoNextFrameForAllSprites: ; 8d19b - ld hl, $c51c ; 23:519b - ld e, $a ; 23:519e + ld [hl], 0 + inc hl + dec bc + ld a, c + or b + jr nz, .loop + ret + +PlaySpriteAnimationsAndDelayFrame: + call PlaySpriteAnimations + call DelayFrame + ret + +PlaySpriteAnimations: + push hl + push de + push bc + push af + + ld a, LOW(wVirtualOAM) + ld [wCurSpriteOAMAddr], a + call DoNextFrameForAllSprites + + pop af + pop bc + pop de + pop hl + ret + +DoNextFrameForAllSprites: + ld hl, wSpriteAnimationStructs + ld e, NUM_SPRITE_ANIM_STRUCTS + .loop - ld a, [hl] ; 23:51a0 - and a ; 23:51a1 - jr z, .skip_capacity_check ; 23:51a2 - ld c, l ; 23:51a4 - ld b, h ; 23:51a5 - push hl ; 23:51a6 - push de ; 23:51a7 - call DoAnimFrame ; 23:51a8 - call UpdateAnimFrame ; 23:51ab - pop de ; 23:51ae - pop hl ; 23:51af - jr c, .cancel ; 23:51b0 -.skip_capacity_check - ld bc, $10 ; 23:51b2 - add hl, bc ; 23:51b5 - dec e ; 23:51b6 - jr nz, .loop ; 23:51b7 - ld a, [$c5bd] ; 23:51b9 - ld l, a ; 23:51bc - ld h, $c3 ; 23:51bd -.loop2 - ld a, l ; 23:51bf - cp $a0 ; 23:51c0 - jr nc, .cancel ; 23:51c2 - xor a ; 23:51c4 - ld [hli], a ; 23:51c5 - jr .loop2 ; 23:51c6 - -.cancel - ret ; 23:51c8 - -DoNextFrameForFirst16Sprites: ; 8d1c9 - ld hl, $c51c ; 23:51c9 - ld e, $a ; 23:51cc + ld a, [hl] + and a + jr z, .next ; This struct is deinitialized. + ld c, l + ld b, h + push hl + push de + call DoAnimFrame ; Uses a massive dw + call UpdateAnimFrame + pop de + pop hl + jr c, .done + +.next + ld bc, SPRITEANIMSTRUCT_LENGTH + add hl, bc + dec e + jr nz, .loop + + ld a, [wCurSpriteOAMAddr] + ld l, a + ld h, HIGH(wVirtualOAM) + +.loop2 ; Clear (wVirtualOAM + [wCurSpriteOAMAddr] --> wVirtualOAMEnd) + ld a, l + cp LOW(wVirtualOAMEnd) + jr nc, .done + xor a + ld [hli], a + jr .loop2 + +.done + ret + +DoNextFrameForFirst16Sprites: + ld hl, wSpriteAnimationStructs + ld e, NUM_SPRITE_ANIM_STRUCTS + .loop - ld a, [hl] ; 23:51ce - and a ; 23:51cf - jr z, .skip_capacity_check ; 23:51d0 - ld c, l ; 23:51d2 - ld b, h ; 23:51d3 - push hl ; 23:51d4 - push de ; 23:51d5 - call DoAnimFrame ; 23:51d6 - call UpdateAnimFrame ; 23:51d9 - pop de ; 23:51dc - pop hl ; 23:51dd - jr c, .cancel ; 23:51de -.skip_capacity_check - ld bc, $10 ; 23:51e0 - add hl, bc ; 23:51e3 - dec e ; 23:51e4 - jr nz, .loop ; 23:51e5 - ld a, [$c5bd] ; 23:51e7 - ld l, a ; 23:51ea - ld h, $c3 ; 23:51eb -.loop2 - ld a, l ; 23:51ed - cp $40 ; 23:51ee - jr nc, .cancel ; 23:51f0 - xor a ; 23:51f2 - ld [hli], a ; 23:51f3 - jr .loop2 ; 23:51f4 - -.cancel - ret ; 23:51f6 - -_InitSpriteAnimStruct:: ; 8d1f7 - push de ; 23:51f7 - push af ; 23:51f8 - ld hl, $c51c ; 23:51f9 - ld e, $a ; 23:51fc + ld a, [hl] + and a + jr z, .next + ld c, l + ld b, h + push hl + push de + call DoAnimFrame ; Uses a massive dw + call UpdateAnimFrame + pop de + pop hl + jr c, .done + +.next + ld bc, SPRITEANIMSTRUCT_LENGTH + add hl, bc + dec e + jr nz, .loop + + ld a, [wCurSpriteOAMAddr] + ld l, a + ld h, HIGH(wVirtualOAMSprite16) + +.loop2 ; Clear (wVirtualOAM + [wCurSpriteOAMAddr] --> Sprites + $40) + ld a, l + cp LOW(wVirtualOAMSprite16) + jr nc, .done + xor a + ld [hli], a + jr .loop2 + +.done + ret + +_InitSpriteAnimStruct:: +; Initialize animation a at pixel x=e, y=d +; Find if there's any room in the wSpriteAnimationStructs array, which is 10x16 + push de + push af + ld hl, wSpriteAnimationStructs + ld e, NUM_SPRITE_ANIM_STRUCTS .loop - ld a, [hl] ; 23:51fe - and a ; 23:51ff - jr z, .found ; 23:5200 - ld bc, $10 ; 23:5202 - add hl, bc ; 23:5205 - dec e ; 23:5206 - jr nz, .loop ; 23:5207 - pop af ; 23:5209 - pop de ; 23:520a - scf ; 23:520b - ret ; 23:520c - -.found ; 8d20d - ld c, l ; 23:520d - ld b, h ; 23:520e - ld hl, $c5bc ; 23:520f - inc [hl] ; 23:5212 - ld a, [hl] ; 23:5213 - and a ; 23:5214 - jr nz, .initialized ; 23:5215 - inc [hl] ; 23:5217 + ld a, [hl] + and a + jr z, .found + ld bc, SPRITEANIMSTRUCT_LENGTH + add hl, bc + dec e + jr nz, .loop +; We've reached the end. There is no more room here. +; Return carry. + pop af + pop de + scf + ret + +.found +; Back up the structure address to bc. + ld c, l + ld b, h +; Value [wSpriteAnimCount] is initially set to -1. Set it to +; the number of objects loaded into this array. + ld hl, wSpriteAnimCount + inc [hl] + ld a, [hl] + and a + jr nz, .initialized + inc [hl] + .initialized - pop af ; 23:5218 - ld e, a ; 23:5219 - ld d, $0 ; 23:521a - ld hl, AnimatedObjectSeqData ; 23:521c - add hl, de ; 23:521f - add hl, de ; 23:5220 - add hl, de ; 23:5221 - ld e, l ; 23:5222 - ld d, h ; 23:5223 - ld hl, $0 ; 23:5224 - add hl, bc ; 23:5227 - ld a, [$c5bc] ; 23:5228 - ld [hli], a ; 23:522b - ld a, [de] ; 23:522c - ld [hli], a ; 23:522d - inc de ; 23:522e - ld a, [de] ; 23:522f - ld [hli], a ; 23:5230 - inc de ; 23:5231 - ld a, [de] ; 23:5232 - call GetAnimatedObjectVTile ; 23:5233 - ld [hli], a ; 23:5236 - pop de ; 23:5237 - ld hl, $4 ; 23:5238 - add hl, bc ; 23:523b - ld a, e ; 23:523c - ld [hli], a ; 23:523d - ld a, d ; 23:523e - ld [hli], a ; 23:523f - xor a ; 23:5240 - ld [hli], a ; 23:5241 - ld [hli], a ; 23:5242 - xor a ; 23:5243 - ld [hli], a ; 23:5244 - ld [hli], a ; 23:5245 - dec a ; 23:5246 - ld [hli], a ; 23:5247 - xor a ; 23:5248 - ld [hli], a ; 23:5249 - ld [hli], a ; 23:524a - ld [hli], a ; 23:524b - ld [hli], a ; 23:524c - ld [hl], a ; 23:524d - ld a, c ; 23:524e - ld [$c5c0], a ; 23:524f - ld a, b ; 23:5252 - ld [$c5c1], a ; 23:5253 - ret ; 23:5256 - -DeinitializeSprite: ; 8d257 - ld hl, $0 ; 23:5257 - add hl, bc ; 23:525a - ld [hl], $0 ; 23:525b - ret ; 23:525d - -UpdateAnimFrame: ; 8d25e - call InitAnimatedObjectBuffer ; 23:525e - call GetAnimatedObjectFrame ; 23:5261 - cp $fd ; 23:5264 - jr z, .done ; 23:5266 - cp $fc ; 23:5268 - jr z, .delete ; 23:526a - call GetFrameOAMPointer ; 23:526c - ld a, [$c5c2] ; 23:526f - add [hl] ; 23:5272 - ld [$c5c2], a ; 23:5273 - inc hl ; 23:5276 - ld a, [hli] ; 23:5277 - ld h, [hl] ; 23:5278 - ld l, a ; 23:5279 - push bc ; 23:527a - ld a, [$c5bd] ; 23:527b - ld e, a ; 23:527e - ld d, $c3 ; 23:527f - ld a, [hli] ; 23:5281 - ld c, a ; 23:5282 +; Get row a of SpriteAnimSeqData, copy the pointer into de + pop af + ld e, a + ld d, 0 + ld hl, SpriteAnimSeqData + add hl, de + add hl, de + add hl, de + ld e, l + ld d, h +; Set hl to the first field (field 0) in the current structure. + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc +; Load the index. + ld a, [wSpriteAnimCount] + ld [hli], a +; Copy the table entry to the next two fields. + ld a, [de] + ld [hli], a + inc de + ld a, [de] + ld [hli], a + inc de +; Look up the third field from the table in the wSpriteAnimDict array (10x2). +; Take the value and load it in + ld a, [de] + call GetSpriteAnimVTile + ld [hli], a + pop de +; Set hl to field 4 (X coordinate). Kinda pointless, because we're presumably already here. + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc +; Load the original value of de into here. + ld a, e + ld [hli], a + ld a, d + ld [hli], a +; load 0 into the next four fields + xor a + ld [hli], a + ld [hli], a + xor a + ld [hli], a + ld [hli], a +; load -1 into the next field + dec a + ld [hli], a +; load 0 into the last five fields + xor a +rept 4 + ld [hli], a +endr + ld [hl], a +; back up the address of the first field to wSpriteAnimAddrBackup + ld a, c + ld [wSpriteAnimAddrBackup], a + ld a, b + ld [wSpriteAnimAddrBackup + 1], a + ret + +DeinitializeSprite: +; Clear the index field of the struct in bc. + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc + ld [hl], 0 + ret + +UpdateAnimFrame: + call InitSpriteAnimBuffer ; init WRAM + call GetSpriteAnimFrame ; read from a memory array + cp -3 + jr z, .done + cp -4 + jr z, .delete + call GetFrameOAMPointer + ; add byte to [wCurAnimVTile] + ld a, [wCurAnimVTile] + add [hl] + ld [wCurAnimVTile], a + inc hl + ; load pointer into hl + ld a, [hli] + ld h, [hl] + ld l, a + push bc + ld a, [wCurSpriteOAMAddr] + ld e, a + ld d, HIGH(wVirtualOAM) + ld a, [hli] + ld c, a ; number of objects .loop - ld a, [$c5c4] ; 23:5283 - ld b, a ; 23:5286 - ld a, [$c5c6] ; 23:5287 - add b ; 23:528a - ld b, a ; 23:528b - ld a, [$c5c7] ; 23:528c - add b ; 23:528f - ld b, a ; 23:5290 - call AddOrSubtractX ; 23:5291 - add b ; 23:5294 - ld [de], a ; 23:5295 - inc hl ; 23:5296 - inc de ; 23:5297 - ld a, [$c5c3] ; 23:5298 - ld b, a ; 23:529b - ld a, [$c5c5] ; 23:529c - add b ; 23:529f - ld b, a ; 23:52a0 - ld a, [$c5c8] ; 23:52a1 - add b ; 23:52a4 - ld b, a ; 23:52a5 - call AddOrSubtractY ; 23:52a6 - add b ; 23:52a9 - ld [de], a ; 23:52aa - inc hl ; 23:52ab - inc de ; 23:52ac - ld a, [$c5c2] ; 23:52ad - add [hl] ; 23:52b0 - ld [de], a ; 23:52b1 - inc hl ; 23:52b2 - inc de ; 23:52b3 - call GetSpriteOAMAttr ; 23:52b4 - ld [de], a ; 23:52b7 - inc hl ; 23:52b8 - inc de ; 23:52b9 - ld a, e ; 23:52ba - ld [$c5bd], a ; 23:52bb - cp $a0 ; 23:52be - jr nc, reached_the_end ; 23:52c0 - dec c ; 23:52c2 - jr nz, .loop ; 23:52c3 - pop bc ; 23:52c5 - jr .done ; 23:52c6 + ; first byte: y (px) + ; [de] = [wCurAnimYCoord] + [wCurAnimYOffset] + [wGlobalAnimYOffset] + AddOrSubtractY([hl]) + ld a, [wCurAnimYCoord] + ld b, a + ld a, [wCurAnimYOffset] + add b + ld b, a + ld a, [wGlobalAnimYOffset] + add b + ld b, a + call AddOrSubtractY + add b + ld [de], a + inc hl + inc de + ; second byte: x (px) + ; [de] = [wCurAnimXCoord] + [wCurAnimXOffset] + [wGlobalAnimXOffset] + AddOrSubtractX([hl]) + ld a, [wCurAnimXCoord] + ld b, a + ld a, [wCurAnimXOffset] + add b + ld b, a + ld a, [wGlobalAnimXOffset] + add b + ld b, a + call AddOrSubtractX + add b + ld [de], a + inc hl + inc de + ; third byte: vtile + ; [de] = [wCurAnimVTile] + [hl] + ld a, [wCurAnimVTile] + add [hl] + ld [de], a + inc hl + inc de + ; fourth byte: attributes + ; [de] = GetSpriteOAMAttr([hl]) + call GetSpriteOAMAttr + ld [de], a + inc hl + inc de + ld a, e + ld [wCurSpriteOAMAddr], a + cp LOW(wVirtualOAMEnd) + jr nc, .reached_the_end + dec c + jr nz, .loop + pop bc + jr .done .delete - call DeinitializeSprite ; 23:52c8 + call DeinitializeSprite .done - and a ; 23:52cb - ret ; 23:52cc - -reached_the_end - pop bc ; 23:52cd - scf ; 23:52ce - ret ; 23:52cf - -AddOrSubtractX: ; 8d2d0 - push hl ; 23:52d0 - ld a, [hl] ; 23:52d1 - ld hl, $c5c0 ; 23:52d2 - bit 6, [hl] ; 23:52d5 - jr z, .ok ; 23:52d7 - add a, $8 ; 23:52d9 - xor $ff ; 23:52db - inc a ; 23:52dd + and a + ret + +.reached_the_end + pop bc + scf + ret + +AddOrSubtractY: + push hl + ld a, [hl] + ld hl, wCurSpriteOAMFlags + bit OAM_Y_FLIP, [hl] + jr z, .ok + ; -8 - a + add $8 + xor $ff + inc a + .ok - pop hl ; 23:52de - ret ; 23:52df - -AddOrSubtractY: ; 8d2e0 - push hl ; 23:52e0 - ld a, [hl] ; 23:52e1 - ld hl, $c5c0 ; 23:52e2 - bit 5, [hl] ; 23:52e5 - jr z, .ok ; 23:52e7 - add a, $8 ; 23:52e9 - xor $ff ; 23:52eb - inc a ; 23:52ed + pop hl + ret + +AddOrSubtractX: + push hl + ld a, [hl] + ld hl, wCurSpriteOAMFlags + bit OAM_X_FLIP, [hl] + jr z, .ok + ; -8 - a + add 8 + xor $ff + inc a + .ok - pop hl ; 23:52ee - ret ; 23:52ef - -GetSpriteOAMAttr: ; 8d2f0 - ld a, [$c5c0] ; 23:52f0 - ld b, a ; 23:52f3 - ld a, [hl] ; 23:52f4 - xor b ; 23:52f5 - and $e0 ; 23:52f6 - ld b, a ; 23:52f8 - ld a, [hl] ; 23:52f9 - and $1f ; 23:52fa - or b ; 23:52fc - ret ; 23:52fd - -InitAnimatedObjectBuffer: ; 8d2fe - xor a ; 23:52fe - ld [$c5c0], a ; 23:52ff - ld hl, $3 ; 23:5302 - add hl, bc ; 23:5305 - ld a, [hli] ; 23:5306 - ld [$c5c2], a ; 23:5307 - ld a, [hli] ; 23:530a - ld [$c5c3], a ; 23:530b - ld a, [hli] ; 23:530e - ld [$c5c4], a ; 23:530f - ld a, [hli] ; 23:5312 - ld [$c5c5], a ; 23:5313 - ld a, [hli] ; 23:5316 - ld [$c5c6], a ; 23:5317 - ret ; 23:531a - -GetAnimatedObjectVTile: ; 8d31b - push hl ; 23:531b - push bc ; 23:531c - ld hl, $c508 ; 23:531d - ld b, a ; 23:5320 - ld c, $a ; 23:5321 + pop hl + ret + +GetSpriteOAMAttr: + ld a, [wCurSpriteOAMFlags] + ld b, a + ld a, [hl] + xor b + and PRIORITY | Y_FLIP | X_FLIP + ld b, a + ld a, [hl] + and $ff ^ (PRIORITY | Y_FLIP | X_FLIP) + or b + ret + +InitSpriteAnimBuffer: + xor a + ld [wCurSpriteOAMFlags], a + ld hl, SPRITEANIMSTRUCT_TILE_ID + add hl, bc + ld a, [hli] + ld [wCurAnimVTile], a + ld a, [hli] + ld [wCurAnimXCoord], a + ld a, [hli] + ld [wCurAnimYCoord], a + ld a, [hli] + ld [wCurAnimXOffset], a + ld a, [hli] + ld [wCurAnimYOffset], a + ret + +GetSpriteAnimVTile: +; a = wSpriteAnimDict[a] if a in wSpriteAnimDict else 0 +; vTiles offset + push hl + push bc + ld hl, wSpriteAnimDict + ld b, a + ld c, NUM_SPRITE_ANIM_STRUCTS .loop - ld a, [hli] ; 23:5323 - cp b ; 23:5324 - jr z, .ok ; 23:5325 - inc hl ; 23:5327 - dec c ; 23:5328 - jr nz, .loop ; 23:5329 - xor a ; 23:532b - jr .done ; 23:532c + ld a, [hli] + cp b + jr z, .ok + inc hl + dec c + jr nz, .loop + xor a + jr .done .ok - ld a, [hl] ; 23:532e + ld a, [hl] + .done - pop bc ; 23:532f - pop hl ; 23:5330 - ret ; 23:5331 - -Function8d332: ; 8d332 - ld hl, $1 ; 23:5332 - add hl, bc ; 23:5335 - ld [hl], a ; 23:5336 - ld hl, $8 ; 23:5337 - add hl, bc ; 23:533a - ld [hl], $0 ; 23:533b - ld hl, $a ; 23:533d - add hl, bc ; 23:5340 - ld [hl], $ff ; 23:5341 - ret ; 23:5343 - -GetAnimatedObjectFrame: ; 8d344 + pop bc + pop hl + ret + +_ReinitSpriteAnimFrame:: + ld hl, SPRITEANIMSTRUCT_FRAMESET_ID + add hl, bc + ld [hl], a + ld hl, SPRITEANIMSTRUCT_DURATION + add hl, bc + ld [hl], 0 + ld hl, SPRITEANIMSTRUCT_FRAME + add hl, bc + ld [hl], -1 + ret + +GetSpriteAnimFrame: .loop - ld hl, $8 ; 23:5344 - add hl, bc ; 23:5347 - ld a, [hl] ; 23:5348 - and a ; 23:5349 - jr z, .next_frame ; 23:534a - dec [hl] ; 23:534c - call .GetPointer ; 23:534d - ld a, [hli] ; 23:5350 - push af ; 23:5351 - jr .okay ; 23:5352 + ld hl, SPRITEANIMSTRUCT_DURATION + add hl, bc + ld a, [hl] + and a + jr z, .next_frame ; finished the current sequence + dec [hl] + call .GetPointer ; load pointer from SpriteAnimFrameData + ld a, [hli] + push af + jr .okay .next_frame - ld hl, $a ; 23:5354 - add hl, bc ; 23:5357 - inc [hl] ; 23:5358 - call .GetPointer ; 23:5359 - ld a, [hli] ; 23:535c - cp $fe ; 23:535d - jr z, .restart ; 23:535f - cp $ff ; 23:5361 - jr z, .repeat_last ; 23:5363 - push af ; 23:5365 - ld a, [hl] ; 23:5366 - push hl ; 23:5367 - and $3f ; 23:5368 - ld hl, $9 ; 23:536a - add hl, bc ; 23:536d - add [hl] ; 23:536e - ld hl, $8 ; 23:536f - add hl, bc ; 23:5372 - ld [hl], a ; 23:5373 - pop hl ; 23:5374 + ld hl, SPRITEANIMSTRUCT_FRAME + add hl, bc + inc [hl] + call .GetPointer ; load pointer from SpriteAnimFrameData + ld a, [hli] + cp dorestart_command + jr z, .restart + cp endanim_command + jr z, .repeat_last + + push af + ld a, [hl] + push hl + and $ff ^ (Y_FLIP << 1 | X_FLIP << 1) + ld hl, SPRITEANIMSTRUCT_DURATIONOFFSET + add hl, bc + add [hl] + ld hl, SPRITEANIMSTRUCT_DURATION + add hl, bc + ld [hl], a + pop hl .okay - ld a, [hl] ; 23:5375 - and $c0 ; 23:5376 - srl a ; 23:5378 - ld [$c5c0], a ; 23:537a - pop af ; 23:537d - ret ; 23:537e - -.repeat_last ; 8d37f - xor a ; 23:537f - ld hl, $8 ; 23:5380 - add hl, bc ; 23:5383 - ld [hl], a ; 23:5384 - ld hl, $a ; 23:5385 - add hl, bc ; 23:5388 - dec [hl] ; 23:5389 - dec [hl] ; 23:538a - jr .loop ; 23:538b + ld a, [hl] + and Y_FLIP << 1 | X_FLIP << 1 ; The << 1 is compensated in the "frame" macro + srl a + ld [wCurSpriteOAMFlags], a + pop af + ret + +.repeat_last + xor a + ld hl, SPRITEANIMSTRUCT_DURATION + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_FRAME + add hl, bc + dec [hl] + dec [hl] + jr .loop .restart - xor a ; 23:538d - ld hl, $8 ; 23:538e - add hl, bc ; 23:5391 - ld [hl], a ; 23:5392 - dec a ; 23:5393 - ld hl, $a ; 23:5394 - add hl, bc ; 23:5397 - ld [hl], a ; 23:5398 - jr .loop ; 23:5399 - -.GetPointer - ld hl, $1 ; 23:539b - add hl, bc ; 23:539e - ld e, [hl] ; 23:539f - ld d, $0 ; 23:53a0 - ld hl, AnimatedObjectFrameData ; 23:53a2 - add hl, de ; 23:53a5 - add hl, de ; 23:53a6 - ld e, [hl] ; 23:53a7 - inc hl ; 23:53a8 - ld d, [hl] ; 23:53a9 - ld hl, $a ; 23:53aa - add hl, bc ; 23:53ad - ld l, [hl] ; 23:53ae - ld h, $0 ; 23:53af - add hl, hl ; 23:53b1 - add hl, de ; 23:53b2 - ret ; 23:53b3 - -GetFrameOAMPointer: ; 8d3b4 - ld e, a ; 23:53b4 - ld d, $0 ; 23:53b5 - ld hl, AnimatedObjectOAMData ; 23:53b7 - add hl, de ; 23:53ba - add hl, de ; 23:53bb - add hl, de ; 23:53bc - ret ; 23:53bd - -BrokenGetStdGraphics: ; 8d3be - push hl ; 23:53be - ld l, a ; 23:53bf - ld h, $0 ; 23:53c0 - add hl, hl ; 23:53c2 - add hl, hl ; 23:53c3 - ld de, $6666 ; 23:53c4 - add hl, de ; 23:53c7 - ld c, [hl] ; 23:53c8 - inc hl ; 23:53c9 - ld b, [hl] ; 23:53ca - inc hl ; 23:53cb - ld e, [hl] ; 23:53cc - inc hl ; 23:53cd - ld d, [hl] ; 23:53ce - pop hl ; 23:53cf - push bc ; 23:53d0 - call $dfe ; Request2bpp ; 23:53d1 - pop bc ; 23:53d4 - ret ; 23:53d5 - -AnimatedObjectSeqData: ; 8d3d6 - db $01, $01, $00 - db $04, $04, $00 - db $05, $05, $00 - db $06, $06, $00 - db $07, $07, $00 - db $08, $08, $00 - db $09, $09, $01 - db $0a, $09, $01 - db $0b, $0a, $01 - db $0d, $0b, $01 - db $10, $0c, $01 - db $12, $0d, $02 - db $13, $0e, $02 - db $14, $0f, $02 - db $15, $0e, $02 - db $16, $10, $00 - db $0d, $11, $01 - db $10, $12, $01 - db $09, $13, $01 - db $0b, $14, $01 - db $1a, $15, $05 - db $1c, $16, $06 - db $1d, $17, $06 - db $1e, $18, $06 - db $1f, $19, $07 - db $20, $1a, $07 - db $22, $1b, $07 - db $1a, $1c, $05 - db $23, $00, $00 - db $24, $1d, $08 - db $24, $1e, $08 - db $24, $1f, $08 - db $25, $20, $00 - db $27, $00, $00 - db $28, $21, $00 - db $29, $22, $00 - db $2a, $22, $00 - db $2b, $23, $00 - db $2c, $24, $00 - db $2d, $00, $00 - db $2f, $25, $00 - db $30, $00, $00 - db $2f, $27, $00 - db $31, $00, $00 - db $36, $29, $00 - db $37, $00, $00 - db $32, $23, $00 - -INCLUDE "engine/sprite_anims.asm" -INCLUDE "data/sprite_engine.asm" + xor a + ld hl, SPRITEANIMSTRUCT_DURATION + add hl, bc + ld [hl], a + + dec a + ld hl, SPRITEANIMSTRUCT_FRAME + add hl, bc + ld [hl], a + jr .loop + +.GetPointer: + ; Get the data for the current frame for the current animation sequence + + ; SpriteAnimFrameData[SpriteAnim[SPRITEANIMSTRUCT_FRAMESET_ID]][SpriteAnim[SPRITEANIMSTRUCT_FRAME]] + ld hl, SPRITEANIMSTRUCT_FRAMESET_ID + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, SpriteAnimFrameData + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld hl, SPRITEANIMSTRUCT_FRAME + add hl, bc + ld l, [hl] + ld h, 0 + add hl, hl + add hl, de + ret + +GetFrameOAMPointer: +; Load OAM data pointer + ld e, a + ld d, 0 + ld hl, SpriteAnimOAMData + add hl, de + add hl, de + add hl, de + ret + +Unreferenced_BrokenGetStdGraphics: + push hl + ld l, a + ld h, 0 + add hl, hl + add hl, hl + ld de, BrokenStdGFXPointers ; broken 2bpp pointers + add hl, de + ld c, [hl] + inc hl + ld b, [hl] + inc hl + ld e, [hl] + inc hl + ld d, [hl] + pop hl + push bc + call Request2bpp + pop bc + ret + +INCLUDE "data/sprite_anims/sequences.asm" + +INCLUDE "engine/gfx/sprite_anims.asm" + +INCLUDE "data/sprite_anims/framesets.asm" + +INCLUDE "data/sprite_anims/oam.asm" + +BrokenStdGFXPointers: + ; tile count, bank, pointer + ; (all pointers were dummied out to .deleted) + dbbw 128, $01, .deleted + dbbw 128, $01, .deleted + dbbw 128, $01, .deleted + dbbw 128, $01, .deleted + dbbw 16, $37, .deleted + dbbw 16, $11, .deleted + dbbw 16, $39, .deleted + dbbw 16, $24, .deleted + dbbw 16, $21, .deleted + +.deleted Sprites_Cosine: - add a, $10 ; 23:668a +; a = d * cos(a * pi/32) + add %010000 ; cos(x) = sin(x + pi/2) + ; fallthrough Sprites_Sine: - and $3f ; 23:668c - cp $20 ; 23:668e - jr nc, .negative ; 23:6690 - call .ApplySineWave ; 23:6692 - ld a, h ; 23:6695 - ret ; 23:6696 - -.negative - and $1f ; 23:6697 - call .ApplySineWave ; 23:6699 - ld a, h ; 23:669c - xor $ff ; 23:669d - inc a ; 23:669f - ret ; 23:66a0 - -.ApplySineWave: - ld e, a ; 23:66a1 - ld a, d ; 23:66a2 - ld d, $0 ; 23:66a3 - ld hl, .sinewave ; 23:66a5 - add hl, de ; 23:66a8 - add hl, de ; 23:66a9 - ld e, [hl] ; 23:66aa - inc hl ; 23:66ab - ld d, [hl] ; 23:66ac - ld hl, $0 ; 23:66ad -.multiply - srl a ; 23:66b0 - jr nc, .even ; 23:66b2 - add hl, de ; 23:66b4 -.even - sla e ; 23:66b5 - rl d ; 23:66b7 - and a ; 23:66b9 - jr nz, .multiply ; 23:66ba - ret ; 23:66bc - -.sinewave ; 8e75d - sine_wave $100 +; a = d * sin(a * pi/32) + calc_sine_wave .SineWave + +.SineWave: + sine_table 256 AnimateEndOfExpBar: - ldh a, [$ffe9] ; 23:66fd - ld de, EndOfExpBarGFX ; 23:66ff - and a ; 23:6702 - jr z, .got_gfx ; 23:6703 - ld de, SGBEndOfExpBarGFX ; 23:6705 -.got_gfx - ld hl, VTiles0 tile $00 ; 23:6708 - lb bc, BANK(EndOfExpBarGFX), 1 ; 23:670b - call $dfe ; Request2bpp ; 23:670e - ld c, $8 ; 23:6711 - ld d, $0 ; 23:6713 + ldh a, [hSGB] + ld de, EndOfExpBarGFX + and a + jr z, .load + ld de, SGBEndOfExpBarGFX + +.load + ld hl, vTiles0 tile $00 + lb bc, BANK(EndOfExpBarGFX), 1 + call Request2bpp + ld c, 8 + ld d, 0 .loop - push bc ; 23:6715 - call .AnimateFrame ; 23:6716 - call $32e ; DelayFrame ; 23:6719 - pop bc ; 23:671c - inc d ; 23:671d - inc d ; 23:671e - dec c ; 23:671f - jr nz, .loop ; 23:6720 - call $30ff ; ClearSprites ; 23:6722 - ret ; 23:6725 - -.AnimateFrame - ld hl, $c300 ; 23:6726 - ld c, $8 ; 23:6729 + push bc + call .AnimateFrame + call DelayFrame + pop bc + inc d + inc d + dec c + jr nz, .loop + call ClearSprites + ret + +.AnimateFrame: + ld hl, wVirtualOAMSprite00 + ld c, 8 ; number of animated circles .anim_loop - ld a, c ; 23:672b - and a ; 23:672c - ret z ; 23:672d - dec c ; 23:672e - ld a, c ; 23:672f - sla a ; 23:6730 - sla a ; 23:6732 - sla a ; 23:6734 - push af ; 23:6736 - push de ; 23:6737 - push hl ; 23:6738 - call Sprites_Sine ; 23:6739 - pop hl ; 23:673c - pop de ; 23:673d - add a, $68 ; 23:673e - ld [hli], a ; 23:6740 - pop af ; 23:6741 - push de ; 23:6742 - push hl ; 23:6743 - call Sprites_Cosine ; 23:6744 - pop hl ; 23:6747 - pop de ; 23:6748 - add a, $54 ; 23:6749 - ld [hli], a ; 23:674b - ld a, $0 ; 23:674c - ld [hli], a ; 23:674e - ld a, $6 ; 23:674f - ld [hli], a ; 23:6751 - jr .anim_loop ; 23:6752 + ld a, c + and a + ret z + dec c + ld a, c +; multiply by 8 + sla a + sla a + sla a + push af + + push de + push hl + call Sprites_Sine + pop hl + pop de + add 13 * TILE_WIDTH + ld [hli], a ; y + + pop af + push de + push hl + call Sprites_Cosine + pop hl + pop de + add 10 * TILE_WIDTH + 4 + ld [hli], a ; x + + ld a, $0 + ld [hli], a ; tile id + ld a, PAL_BATTLE_OB_BLUE + ld [hli], a ; attributes + jr .anim_loop EndOfExpBarGFX: - dr $8e754, $8e764 - +INCBIN "gfx/battle/expbarend.2bpp" SGBEndOfExpBarGFX: - dr $8e764, $8e774 - -ClearAnimatedObjects2 - push hl ; 23:6774 - push de ; 23:6775 - push bc ; 23:6776 - push af ; 23:6777 - ld hl, $c508 ; 23:6778 - ld bc, $c1 ; 23:677b +INCBIN "gfx/battle/expbarend_sgb.2bpp" + +ClearSpriteAnims2: + push hl + push de + push bc + push af + ld hl, wSpriteAnimDict + ld bc, wSpriteAnimsEnd - wSpriteAnimDict .loop - ld [hl], $0 ; 23:677e - inc hl ; 23:6780 - dec bc ; 23:6781 - ld a, c ; 23:6782 - or b ; 23:6783 - jr nz, .loop ; 23:6784 - pop af ; 23:6786 - pop bc ; 23:6787 - pop de ; 23:6788 - pop hl ; 23:6789 - ret ; 23:678a -; 8e78a + ld [hl], 0 + inc hl + dec bc + ld a, c + or b + jr nz, .loop + pop af + pop bc + pop de + pop hl + ret diff --git a/engine/menus/delete_save.asm b/engine/menus/delete_save.asm new file mode 100755 index 00000000..a3ea661d --- /dev/null +++ b/engine/menus/delete_save.asm @@ -0,0 +1,34 @@ +_DeleteSaveData: + call ClearTilemap + call GetMemSGBLayout + call LoadStandardFont + call LoadFontsExtra + ld de, MUSIC_MAIN_MENU + call PlayMusic + ld hl, .ClearAllSaveDataText + call PrintText + ld hl, .NoYesMenuHeader + call CopyMenuHeader + call VerticalMenu + ret c + ld a, [wMenuCursorY] + cp 1 + ret z + farcall EmptyAllSRAMBanks + ret + +.ClearAllSaveDataText: + text_far _ClearAllSaveDataText + text_end + +.NoYesMenuHeader: + db 0 ; flags + menu_coords 14, 7, SCREEN_WIDTH - 1, TEXTBOX_Y - 1 + dw .MenuData + db 1 ; default option + +.MenuData: + db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags + db 2 ; items + db "NO@" + db "YES@" diff --git a/engine/menus/savemenu_copytilemapatonce.asm b/engine/menus/savemenu_copytilemapatonce.asm new file mode 100755 index 00000000..4b567a58 --- /dev/null +++ b/engine/menus/savemenu_copytilemapatonce.asm @@ -0,0 +1,84 @@ +SaveMenu_CopyTilemapAtOnce: + ldh a, [hCGB] + and a + jp z, WaitBGMap + +; The following is a modified version of CopyTilemapAtOnce +; that waits for [rLY] to be $60 instead of $80 - 1. + ldh a, [hBGMapMode] + push af + xor a + ldh [hBGMapMode], a + + ldh a, [hMapAnims] + push af + xor a + ldh [hMapAnims], a + +.wait + ldh a, [rLY] + cp $60 + jr c, .wait + + di + ld a, BANK(vBGMap2) + ldh [rVBK], a + hlcoord 0, 0, wAttrmap + call .CopyBGMapViaStack + ld a, BANK(vBGMap0) + ldh [rVBK], a + hlcoord 0, 0 + call .CopyBGMapViaStack + +.wait2 + ldh a, [rLY] + cp $60 + jr c, .wait2 + ei + + pop af + ldh [hMapAnims], a + pop af + ldh [hBGMapMode], a + ret + +.CopyBGMapViaStack: +; Copy all tiles to vBGMap + ld [hSPBuffer], sp + ld sp, hl + ldh a, [hBGMapAddress + 1] + ld h, a + ld l, 0 + ld a, SCREEN_HEIGHT + ldh [hTilesPerCycle], a + ld b, 1 << 1 ; not in v/hblank + ld c, LOW(rSTAT) + +.loop +rept SCREEN_WIDTH / 2 + pop de +; if in v/hblank, wait until not in v/hblank +.loop\@ + ldh a, [c] + and b + jr nz, .loop\@ +; load vBGMap + ld [hl], e + inc l + ld [hl], d + inc l +endr + + ld de, BG_MAP_WIDTH - SCREEN_WIDTH + add hl, de + ldh a, [hTilesPerCycle] + dec a + ldh [hTilesPerCycle], a + jr nz, .loop + + ldh a, [hSPBuffer] + ld l, a + ldh a, [hSPBuffer + 1] + ld h, a + ld sp, hl + ret diff --git a/engine/movie/init_hof_credits.asm b/engine/movie/init_hof_credits.asm new file mode 100755 index 00000000..70a9b6e7 --- /dev/null +++ b/engine/movie/init_hof_credits.asm @@ -0,0 +1,60 @@ +InitDisplayForHallOfFame: + call ClearBGPalettes + call ClearTilemap + call ClearSprites + call DisableLCD + call LoadStandardFont + call LoadFontsBattleExtra + hlbgcoord 0, 0 + ld bc, vBGMap1 - vBGMap0 + ld a, " " + call ByteFill + hlcoord 0, 0, wAttrmap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + xor a + call ByteFill + xor a + ldh [hSCY], a + ldh [hSCX], a + call EnableLCD + ld hl, .SavingRecordText + call PrintText + call WaitBGMap2 + call SetPalettes + ret + +.SavingRecordText: + text_far _SavingRecordText + text_end + +InitDisplayForRedCredits: + call ClearBGPalettes + call ClearTilemap + call ClearSprites + call DisableLCD + call LoadStandardFont + call LoadFontsBattleExtra + hlbgcoord 0, 0 + ld bc, vBGMap1 - vBGMap0 + ld a, " " + call ByteFill + hlcoord 0, 0, wAttrmap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + xor a + call ByteFill + ld hl, wBGPals1 + ld c, 4 tiles +.load_white_palettes + ld a, LOW(PALRGB_WHITE) + ld [hli], a + ld a, HIGH(PALRGB_WHITE) + ld [hli], a + dec c + jr nz, .load_white_palettes + xor a + ldh [hSCY], a + ldh [hSCX], a + call EnableLCD + call WaitBGMap2 + call SetPalettes + ret diff --git a/engine/phone/phonering_copytilemapatonce.asm b/engine/phone/phonering_copytilemapatonce.asm new file mode 100755 index 00000000..6ce141b5 --- /dev/null +++ b/engine/phone/phonering_copytilemapatonce.asm @@ -0,0 +1,87 @@ +PhoneRing_CopyTilemapAtOnce: + ldh a, [hCGB] + and a + jp z, WaitBGMap + ld a, [wSpriteUpdatesEnabled] + cp $0 + jp z, WaitBGMap + +; The following is a modified version of CopyTilemapAtOnce +; that waits for [rLY] to be LY_VBLANK - 1 instead of $80 - 1. + ldh a, [hBGMapMode] + push af + xor a + ldh [hBGMapMode], a + + ldh a, [hMapAnims] + push af + xor a + ldh [hMapAnims], a + +.wait + ldh a, [rLY] + cp LY_VBLANK - 1 + jr c, .wait + + di + ld a, BANK(vBGMap2) + ldh [rVBK], a + hlcoord 0, 0, wAttrmap + call .CopyBGMapViaStack + ld a, BANK(vBGMap0) + ldh [rVBK], a + hlcoord 0, 0 + call .CopyBGMapViaStack + +.wait2 + ldh a, [rLY] + cp LY_VBLANK - 1 + jr c, .wait2 + ei + + pop af + ldh [hMapAnims], a + pop af + ldh [hBGMapMode], a + ret + +.CopyBGMapViaStack: +; Copy all tiles to vBGMap + ld [hSPBuffer], sp + ld sp, hl + ldh a, [hBGMapAddress + 1] + ld h, a + ld l, 0 + ld a, SCREEN_HEIGHT + ldh [hTilesPerCycle], a + ld b, 1 << 1 ; not in v/hblank + ld c, LOW(rSTAT) + +.loop +rept SCREEN_WIDTH / 2 + pop de +; if in v/hblank, wait until not in v/hblank +.loop\@ + ldh a, [c] + and b + jr nz, .loop\@ +; load vBGMap + ld [hl], e + inc l + ld [hl], d + inc l +endr + + ld de, BG_MAP_WIDTH - SCREEN_WIDTH + add hl, de + ldh a, [hTilesPerCycle] + dec a + ldh [hTilesPerCycle], a + jr nz, .loop + + ldh a, [hSPBuffer] + ld l, a + ldh a, [hSPBuffer + 1] + ld h, a + ld sp, hl + ret diff --git a/engine/rtc/reset_password.asm b/engine/rtc/reset_password.asm new file mode 100755 index 00000000..b935d747 --- /dev/null +++ b/engine/rtc/reset_password.asm @@ -0,0 +1,254 @@ +_ResetClock: + call ClearTilemap + call GetMemSGBLayout + call LoadStandardFont + call LoadFontsExtra + ld de, MUSIC_MAIN_MENU + call PlayMusic + ld hl, .PasswordAskResetClockText + call PrintText + ld hl, .NoYes_MenuHeader + call CopyMenuHeader + call VerticalMenu + ret c + ld a, [wMenuCursorY] + cp 1 + ret z + call ClockResetPassword + jr c, .wrongpassword + ld a, BANK(sRTCStatusFlags) + call OpenSRAM + ld a, $80 + ld [sRTCStatusFlags], a + call CloseSRAM + ld hl, .PasswordAskResetText + call PrintText + ret + +.wrongpassword + ld hl, .PasswordWrongText + call PrintText + ret + +.PasswordAskResetText: + text_far _PasswordAskResetText + text_end + +.PasswordWrongText: + text_far _PasswordWrongText + text_end + +.PasswordAskResetClockText: + text_far _PasswordAskResetClockText + text_end + +.NoYes_MenuHeader: + db 0 ; flags + menu_coords 14, 7, SCREEN_WIDTH - 1, TEXTBOX_Y - 1 + dw .NoYes_MenuData + db 1 ; default option + +.NoYes_MenuData: + db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags + db 2 ; items + db "NO@" + db "YES@" + +ClockResetPassword: + call .CalculatePassword + push de + ld hl, wStringBuffer2 + ld bc, 5 + xor a + call ByteFill + ld a, 4 + ld [wStringBuffer2 + 5], a + ld hl, .PasswordAskEnterText + call PrintText +.loop + call .updateIDdisplay +.loop2 + call JoyTextDelay + ldh a, [hJoyLast] + ld b, a + and A_BUTTON + jr nz, .confirm + ld a, b + and D_PAD + jr z, .loop2 + call .dpadinput + ld c, 3 + call DelayFrames + jr .loop + +.confirm + call .ConvertDecIDToBytes + pop de + ld a, e + cp l + jr nz, .nope + ld a, d + cp h + jr nz, .nope + and a + ret + +.nope + scf + ret + +.PasswordAskEnterText: + text_far _PasswordAskEnterText + text_end + +.updateIDdisplay + hlcoord 14, 15 + ld de, wStringBuffer2 + ld c, 5 +.loop3 + ld a, [de] + add "0" + ld [hli], a + inc de + dec c + jr nz, .loop3 + hlcoord 14, 16 + ld bc, 5 + ld a, " " + call ByteFill + hlcoord 14, 16 + ld a, [wStringBuffer2 + 5] + ld e, a + ld d, 0 + add hl, de + ld [hl], "▲" + ret + +.dpadinput + ld a, b + and D_LEFT + jr nz, .left + ld a, b + and D_RIGHT + jr nz, .right + ld a, b + and D_UP + jr nz, .up + ld a, b + and D_DOWN + jr nz, .down + ret + +.left + ld a, [wStringBuffer2 + 5] + and a + ret z + dec a + ld [wStringBuffer2 + 5], a + ret + +.right + ld a, [wStringBuffer2 + 5] + cp 4 + ret z + inc a + ld [wStringBuffer2 + 5], a + ret + +.up + call .getcurrentdigit + ld a, [hl] + cp 9 + jr z, .wraparound_up + inc a + ld [hl], a + ret + +.wraparound_up + ld [hl], 0 + ret + +.down + call .getcurrentdigit + ld a, [hl] + and a + jr z, .wraparound_down + dec a + ld [hl], a + ret + +.wraparound_down + ld [hl], 9 + ret + +.getcurrentdigit + ld a, [wStringBuffer2 + 5] + ld e, a + ld d, $0 + ld hl, wStringBuffer2 + add hl, de + ret + +.ConvertDecIDToBytes: + ld hl, 0 + ld de, wStringBuffer2 + 4 + ld bc, 1 + call .ConvertToBytes + ld bc, 10 + call .ConvertToBytes + ld bc, 100 + call .ConvertToBytes + ld bc, 1000 + call .ConvertToBytes + ld bc, 10000 +.ConvertToBytes: + ld a, [de] + dec de + push hl + ld hl, 0 + call AddNTimes + ld c, l + ld b, h + pop hl + add hl, bc + ret + +.CalculatePassword: + ld a, BANK(sPlayerData) + call OpenSRAM + ld de, 0 + ld hl, sPlayerData + (wPlayerID - wPlayerData) + ld c, 2 + call .ComponentFromNumber + ld hl, sPlayerData + (wPlayerName - wPlayerData) + ld c, NAME_LENGTH_JAPANESE - 1 + call .ComponentFromString + ld hl, sPlayerData + (wMoney - wPlayerData) + ld c, 3 + call .ComponentFromNumber + call CloseSRAM + ret + +.ComponentFromNumber: + ld a, [hli] + add e + ld e, a + ld a, 0 + adc d + ld d, a + dec c + jr nz, .ComponentFromNumber + ret + +.ComponentFromString: + ld a, [hli] + cp "@" + ret z + add e + ld e, a + ld a, 0 + adc d + ld d, a + dec c + jr nz, .ComponentFromString + ret diff --git a/engine/tilesets/timeofday_pals.asm b/engine/tilesets/timeofday_pals.asm new file mode 100755 index 00000000..8a92484a --- /dev/null +++ b/engine/tilesets/timeofday_pals.asm @@ -0,0 +1,317 @@ +DummyPredef35: +DummyPredef36: + ret + +UpdateTimeOfDayPal:: + call UpdateTime + ld a, [wTimeOfDay] + ld [wCurTimeOfDay], a + call GetTimePalette + ld [wTimeOfDayPal], a + ret + +_TimeOfDayPals:: +; return carry if pals are changed + +; forced pals? + ld hl, wTimeOfDayPalFlags + bit 7, [hl] + jr nz, .dontchange + +; do we need to bother updating? + ld a, [wTimeOfDay] + ld hl, wCurTimeOfDay + cp [hl] + jr z, .dontchange + +; if so, the time of day has changed + ld a, [wTimeOfDay] + ld [wCurTimeOfDay], a + +; get palette id + call GetTimePalette + +; same palette as before? + ld hl, wTimeOfDayPal + cp [hl] + jr z, .dontchange + +; update palette id + ld [wTimeOfDayPal], a + +; update sgb pals + ld b, SCGB_MAPPALS + call GetSGBLayout + +; update palettes + call _UpdateTimePals + call DelayFrame + +; successful change + scf + ret + +.dontchange +; no change occurred + and a + ret + +_UpdateTimePals:: + ld c, 9 ; normal + call GetTimePalFade + call DmgToCgbTimePals + ret + +FadeInPalettes:: + ld c, 18 + call GetTimePalFade + ld b, 4 + call ConvertTimePalsDecHL + ret + +FadeOutPalettes:: + call FillWhiteBGColor + ld c, 9 + call GetTimePalFade + ld b, 4 + call ConvertTimePalsIncHL + ret + +FadeInQuickly: + ld c, 0 + call GetTimePalFade + ld b, 4 + call ConvertTimePalsIncHL + ret + +FadeBlackQuickly: + ld c, 9 + call GetTimePalFade + ld b, 4 + call ConvertTimePalsDecHL + ret + +FillWhiteBGColor: + ld hl, wBGPals1 + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld hl, wBGPals1 + 1 palettes + ld c, 6 +.loop + ld a, e + ld [hli], a + ld a, d + ld [hli], a +rept 6 + inc hl +endr + dec c + jr nz, .loop + ret + +ReplaceTimeOfDayPals:: + ld hl, .BrightnessLevels + ld a, [wMapTimeOfDay] + cp 4 ; Dark cave, needs Flash + jr z, .DarkCave + and 7 + add l + ld l, a + ld a, 0 + adc h + ld h, a + ld a, [hl] + ld [wTimeOfDayPalset], a + ret + +.DarkCave: + ld a, [wStatusFlags] + bit STATUSFLAGS_FLASH_F, a + jr nz, .UsedFlash + ld a, %11111111 ; 3, 3, 3, 3 + ld [wTimeOfDayPalset], a + ret + +.UsedFlash: + ld a, %10101010 ; 2, 2, 2, 2 + ld [wTimeOfDayPalset], a + ret + +.BrightnessLevels: + dc 3, 2, 1, 0 + dc 1, 1, 1, 1 + dc 2, 2, 2, 2 + dc 0, 0, 0, 0 + dc 3, 3, 3, 3 + dc 3, 2, 1, 0 + dc 3, 2, 1, 0 + dc 3, 2, 1, 0 + +GetTimePalette: + ld a, [wTimeOfDay] + ld e, a + ld d, 0 + ld hl, .TimePalettes + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.TimePalettes: + dw .MorningPalette + dw .DayPalette + dw .NitePalette + dw .DarknessPalette + +.MorningPalette: + ld a, [wTimeOfDayPalset] + and %00000011 ; 0 + ret + +.DayPalette: + ld a, [wTimeOfDayPalset] + and %00001100 ; 1 + srl a + srl a + ret + +.NitePalette: + ld a, [wTimeOfDayPalset] + and %00110000 ; 2 + swap a + ret + +.DarknessPalette: + ld a, [wTimeOfDayPalset] + and %11000000 ; 3 + rlca + rlca + ret + +DmgToCgbTimePals: + push hl + push de + ld a, [hli] + call DmgToCgbBGPals + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + call DmgToCgbObjPals + pop de + pop hl + ret + +ConvertTimePalsIncHL: +.loop + call DmgToCgbTimePals + inc hl + inc hl + inc hl + ld c, 2 + call DelayFrames + dec b + jr nz, .loop + ret + +ConvertTimePalsDecHL: +.loop + call DmgToCgbTimePals + dec hl + dec hl + dec hl + ld c, 2 + call DelayFrames + dec b + jr nz, .loop + ret + +GetTimePalFade: +; check cgb + ldh a, [hCGB] + and a + jr nz, .cgb + +; else: dmg + +; index + ld a, [wTimeOfDayPal] + and %11 + +; get fade table + push bc + ld c, a + ld b, 0 + ld hl, .dmgfades + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + pop bc + +; get place in fade table + ld b, 0 + add hl, bc + ret + +.cgb + ld hl, .cgbfade + ld b, 0 + add hl, bc + ret + +.dmgfades + dw .morn + dw .day + dw .nite + dw .darkness + +.morn + dc 3,3,3,3, 3,3,3,3, 3,3,3,3 + dc 3,3,3,2, 3,3,3,2, 3,3,3,2 + dc 3,3,2,1, 3,2,1,0, 3,2,1,0 + dc 3,2,1,0, 3,1,0,0, 3,1,0,0 + dc 2,1,0,0, 2,0,0,0, 2,0,0,0 + dc 1,0,0,0, 1,0,0,0, 1,0,0,0 + dc 0,0,0,0, 0,0,0,0, 0,0,0,0 + +.day + dc 3,3,3,3, 3,3,3,3, 3,3,3,3 + dc 3,3,3,2, 3,3,3,2, 3,3,3,2 + dc 3,3,2,1, 3,2,1,0, 3,2,1,0 + dc 3,2,1,0, 3,1,0,0, 3,1,0,0 + dc 2,1,0,0, 2,0,0,0, 2,0,0,0 + dc 1,0,0,0, 1,0,0,0, 1,0,0,0 + dc 0,0,0,0, 0,0,0,0, 0,0,0,0 + +.nite + dc 3,3,3,3, 3,3,3,3, 3,3,3,3 + dc 3,3,3,2, 3,3,3,2, 3,3,3,2 + dc 3,3,2,1, 3,2,1,0, 3,2,1,0 + dc 3,2,2,1, 3,1,0,0, 3,1,0,0 + dc 2,1,0,0, 2,0,0,0, 2,0,0,0 + dc 1,0,0,0, 1,0,0,0, 1,0,0,0 + dc 0,0,0,0, 0,0,0,0, 0,0,0,0 + +.darkness + dc 3,3,3,3, 3,3,3,3, 3,3,3,3 + dc 3,3,3,2, 3,3,3,2, 3,3,3,3 + dc 3,3,3,2, 3,2,1,0, 3,3,3,3 + dc 3,3,3,1, 3,1,0,0, 3,3,3,3 + dc 3,3,3,1, 2,0,0,0, 3,3,3,3 + dc 0,0,0,0, 1,0,0,0, 0,0,0,0 + dc 0,0,0,0, 0,0,0,0, 0,0,0,0 + +.cgbfade + dc 3,3,3,3, 3,3,3,3, 3,3,3,3 + dc 3,3,3,2, 3,3,3,2, 3,3,3,2 + dc 3,3,2,1, 3,3,2,1, 3,3,2,1 + dc 3,2,1,0, 3,2,1,0, 3,2,1,0 + dc 2,1,0,0, 2,1,0,0, 2,1,0,0 + dc 1,0,0,0, 1,0,0,0, 1,0,0,0 + dc 0,0,0,0, 0,0,0,0, 0,0,0,0 diff --git a/gfx/battle/expbarend.2bpp b/gfx/battle/expbarend.2bpp Binary files differnew file mode 100755 index 00000000..24f32e15 --- /dev/null +++ b/gfx/battle/expbarend.2bpp diff --git a/gfx/battle/expbarend.png b/gfx/battle/expbarend.png Binary files differnew file mode 100755 index 00000000..51c0e720 --- /dev/null +++ b/gfx/battle/expbarend.png diff --git a/gfx/battle/expbarend_sgb.2bpp b/gfx/battle/expbarend_sgb.2bpp Binary files differnew file mode 100755 index 00000000..dbeb3fde --- /dev/null +++ b/gfx/battle/expbarend_sgb.2bpp diff --git a/gfx/battle/expbarend_sgb.png b/gfx/battle/expbarend_sgb.png Binary files differnew file mode 100755 index 00000000..25eed4a6 --- /dev/null +++ b/gfx/battle/expbarend_sgb.png diff --git a/gfx/icons.asm b/gfx/icons.asm new file mode 100755 index 00000000..c664516f --- /dev/null +++ b/gfx/icons.asm @@ -0,0 +1,41 @@ +Icons: ; used only for BANK(Icons) + +NullIcon: +PoliwagIcon: INCBIN "gfx/icons/poliwag.2bpp" +JigglypuffIcon: INCBIN "gfx/icons/jigglypuff.2bpp" +DiglettIcon: INCBIN "gfx/icons/diglett.2bpp" +PikachuIcon: INCBIN "gfx/icons/pikachu.2bpp" +StaryuIcon: INCBIN "gfx/icons/staryu.2bpp" +FishIcon: INCBIN "gfx/icons/fish.2bpp" +BirdIcon: INCBIN "gfx/icons/bird.2bpp" +MonsterIcon: INCBIN "gfx/icons/monster.2bpp" +ClefairyIcon: INCBIN "gfx/icons/clefairy.2bpp" +OddishIcon: INCBIN "gfx/icons/oddish.2bpp" +BugIcon: INCBIN "gfx/icons/bug.2bpp" +GhostIcon: INCBIN "gfx/icons/ghost.2bpp" +LaprasIcon: INCBIN "gfx/icons/lapras.2bpp" +HumanshapeIcon: INCBIN "gfx/icons/humanshape.2bpp" +FoxIcon: INCBIN "gfx/icons/fox.2bpp" +EquineIcon: INCBIN "gfx/icons/equine.2bpp" +ShellIcon: INCBIN "gfx/icons/shell.2bpp" +BlobIcon: INCBIN "gfx/icons/blob.2bpp" +SerpentIcon: INCBIN "gfx/icons/serpent.2bpp" +VoltorbIcon: INCBIN "gfx/icons/voltorb.2bpp" +SquirtleIcon: INCBIN "gfx/icons/squirtle.2bpp" +BulbasaurIcon: INCBIN "gfx/icons/bulbasaur.2bpp" +CharmanderIcon: INCBIN "gfx/icons/charmander.2bpp" +CaterpillarIcon: INCBIN "gfx/icons/caterpillar.2bpp" +UnownIcon: INCBIN "gfx/icons/unown.2bpp" +GeodudeIcon: INCBIN "gfx/icons/geodude.2bpp" +FighterIcon: INCBIN "gfx/icons/fighter.2bpp" +EggIcon: INCBIN "gfx/icons/egg.2bpp" +JellyfishIcon: INCBIN "gfx/icons/jellyfish.2bpp" +MothIcon: INCBIN "gfx/icons/moth.2bpp" +BatIcon: INCBIN "gfx/icons/bat.2bpp" +SnorlaxIcon: INCBIN "gfx/icons/snorlax.2bpp" +HoOhIcon: INCBIN "gfx/icons/ho_oh.2bpp" +LugiaIcon: INCBIN "gfx/icons/lugia.2bpp" +GyaradosIcon: INCBIN "gfx/icons/gyarados.2bpp" +SlowpokeIcon: INCBIN "gfx/icons/slowpoke.2bpp" +SudowoodoIcon: INCBIN "gfx/icons/sudowoodo.2bpp" +BigmonIcon: INCBIN "gfx/icons/bigmon.2bpp" diff --git a/gfx/icons/bat.2bpp b/gfx/icons/bat.2bpp Binary files differnew file mode 100755 index 00000000..0e5cd7d4 --- /dev/null +++ b/gfx/icons/bat.2bpp diff --git a/gfx/icons/bat.png b/gfx/icons/bat.png Binary files differnew file mode 100755 index 00000000..3ea2ea83 --- /dev/null +++ b/gfx/icons/bat.png diff --git a/gfx/icons/bigmon.2bpp b/gfx/icons/bigmon.2bpp Binary files differnew file mode 100755 index 00000000..6883bd80 --- /dev/null +++ b/gfx/icons/bigmon.2bpp diff --git a/gfx/icons/bigmon.png b/gfx/icons/bigmon.png Binary files differnew file mode 100755 index 00000000..4a77f1ec --- /dev/null +++ b/gfx/icons/bigmon.png diff --git a/gfx/icons/bird.2bpp b/gfx/icons/bird.2bpp Binary files differnew file mode 100755 index 00000000..fb1793da --- /dev/null +++ b/gfx/icons/bird.2bpp diff --git a/gfx/icons/bird.png b/gfx/icons/bird.png Binary files differnew file mode 100755 index 00000000..e13bc6cb --- /dev/null +++ b/gfx/icons/bird.png diff --git a/gfx/icons/blob.2bpp b/gfx/icons/blob.2bpp Binary files differnew file mode 100755 index 00000000..a855f008 --- /dev/null +++ b/gfx/icons/blob.2bpp diff --git a/gfx/icons/blob.png b/gfx/icons/blob.png Binary files differnew file mode 100755 index 00000000..aef74ae6 --- /dev/null +++ b/gfx/icons/blob.png diff --git a/gfx/icons/bug.2bpp b/gfx/icons/bug.2bpp Binary files differnew file mode 100755 index 00000000..e57e4c80 --- /dev/null +++ b/gfx/icons/bug.2bpp diff --git a/gfx/icons/bug.png b/gfx/icons/bug.png Binary files differnew file mode 100755 index 00000000..97504f72 --- /dev/null +++ b/gfx/icons/bug.png diff --git a/gfx/icons/bulbasaur.2bpp b/gfx/icons/bulbasaur.2bpp Binary files differnew file mode 100755 index 00000000..56dd284c --- /dev/null +++ b/gfx/icons/bulbasaur.2bpp diff --git a/gfx/icons/bulbasaur.png b/gfx/icons/bulbasaur.png Binary files differnew file mode 100755 index 00000000..1de6636f --- /dev/null +++ b/gfx/icons/bulbasaur.png diff --git a/gfx/icons/caterpillar.2bpp b/gfx/icons/caterpillar.2bpp Binary files differnew file mode 100755 index 00000000..964b6a6a --- /dev/null +++ b/gfx/icons/caterpillar.2bpp diff --git a/gfx/icons/caterpillar.png b/gfx/icons/caterpillar.png Binary files differnew file mode 100755 index 00000000..85558104 --- /dev/null +++ b/gfx/icons/caterpillar.png diff --git a/gfx/icons/charmander.2bpp b/gfx/icons/charmander.2bpp Binary files differnew file mode 100755 index 00000000..4e218263 --- /dev/null +++ b/gfx/icons/charmander.2bpp diff --git a/gfx/icons/charmander.png b/gfx/icons/charmander.png Binary files differnew file mode 100755 index 00000000..3d85f131 --- /dev/null +++ b/gfx/icons/charmander.png diff --git a/gfx/icons/clefairy.2bpp b/gfx/icons/clefairy.2bpp Binary files differnew file mode 100755 index 00000000..6a5aed32 --- /dev/null +++ b/gfx/icons/clefairy.2bpp diff --git a/gfx/icons/clefairy.png b/gfx/icons/clefairy.png Binary files differnew file mode 100755 index 00000000..0017d9dd --- /dev/null +++ b/gfx/icons/clefairy.png diff --git a/gfx/icons/diglett.2bpp b/gfx/icons/diglett.2bpp Binary files differnew file mode 100755 index 00000000..6a997c1c --- /dev/null +++ b/gfx/icons/diglett.2bpp diff --git a/gfx/icons/diglett.png b/gfx/icons/diglett.png Binary files differnew file mode 100755 index 00000000..307181f7 --- /dev/null +++ b/gfx/icons/diglett.png diff --git a/gfx/icons/egg.2bpp b/gfx/icons/egg.2bpp Binary files differnew file mode 100755 index 00000000..03a62377 --- /dev/null +++ b/gfx/icons/egg.2bpp diff --git a/gfx/icons/egg.png b/gfx/icons/egg.png Binary files differnew file mode 100755 index 00000000..129346fd --- /dev/null +++ b/gfx/icons/egg.png diff --git a/gfx/icons/equine.2bpp b/gfx/icons/equine.2bpp Binary files differnew file mode 100755 index 00000000..8853b5bd --- /dev/null +++ b/gfx/icons/equine.2bpp diff --git a/gfx/icons/equine.png b/gfx/icons/equine.png Binary files differnew file mode 100755 index 00000000..b3da7181 --- /dev/null +++ b/gfx/icons/equine.png diff --git a/gfx/icons/fighter.2bpp b/gfx/icons/fighter.2bpp Binary files differnew file mode 100755 index 00000000..671b7e8a --- /dev/null +++ b/gfx/icons/fighter.2bpp diff --git a/gfx/icons/fighter.png b/gfx/icons/fighter.png Binary files differnew file mode 100755 index 00000000..9deab976 --- /dev/null +++ b/gfx/icons/fighter.png diff --git a/gfx/icons/fish.2bpp b/gfx/icons/fish.2bpp Binary files differnew file mode 100755 index 00000000..e99315b5 --- /dev/null +++ b/gfx/icons/fish.2bpp diff --git a/gfx/icons/fish.png b/gfx/icons/fish.png Binary files differnew file mode 100755 index 00000000..35dbb1d2 --- /dev/null +++ b/gfx/icons/fish.png diff --git a/gfx/icons/fox.2bpp b/gfx/icons/fox.2bpp Binary files differnew file mode 100755 index 00000000..bbe04c03 --- /dev/null +++ b/gfx/icons/fox.2bpp diff --git a/gfx/icons/fox.png b/gfx/icons/fox.png Binary files differnew file mode 100755 index 00000000..0419c87c --- /dev/null +++ b/gfx/icons/fox.png diff --git a/gfx/icons/geodude.2bpp b/gfx/icons/geodude.2bpp Binary files differnew file mode 100755 index 00000000..ff8bdfde --- /dev/null +++ b/gfx/icons/geodude.2bpp diff --git a/gfx/icons/geodude.png b/gfx/icons/geodude.png Binary files differnew file mode 100755 index 00000000..02db8771 --- /dev/null +++ b/gfx/icons/geodude.png diff --git a/gfx/icons/ghost.2bpp b/gfx/icons/ghost.2bpp Binary files differnew file mode 100755 index 00000000..d47e8b62 --- /dev/null +++ b/gfx/icons/ghost.2bpp diff --git a/gfx/icons/ghost.png b/gfx/icons/ghost.png Binary files differnew file mode 100755 index 00000000..7ecf8ed0 --- /dev/null +++ b/gfx/icons/ghost.png diff --git a/gfx/icons/gyarados.2bpp b/gfx/icons/gyarados.2bpp Binary files differnew file mode 100755 index 00000000..ffe536ad --- /dev/null +++ b/gfx/icons/gyarados.2bpp diff --git a/gfx/icons/gyarados.png b/gfx/icons/gyarados.png Binary files differnew file mode 100755 index 00000000..fad5d8ae --- /dev/null +++ b/gfx/icons/gyarados.png diff --git a/gfx/icons/ho_oh.2bpp b/gfx/icons/ho_oh.2bpp Binary files differnew file mode 100755 index 00000000..db4277a3 --- /dev/null +++ b/gfx/icons/ho_oh.2bpp diff --git a/gfx/icons/ho_oh.png b/gfx/icons/ho_oh.png Binary files differnew file mode 100755 index 00000000..6ee91781 --- /dev/null +++ b/gfx/icons/ho_oh.png diff --git a/gfx/icons/humanshape.2bpp b/gfx/icons/humanshape.2bpp Binary files differnew file mode 100755 index 00000000..4dbbac0c --- /dev/null +++ b/gfx/icons/humanshape.2bpp diff --git a/gfx/icons/humanshape.png b/gfx/icons/humanshape.png Binary files differnew file mode 100755 index 00000000..f5d0b929 --- /dev/null +++ b/gfx/icons/humanshape.png diff --git a/gfx/icons/item.2bpp b/gfx/icons/item.2bpp new file mode 100755 index 00000000..5d47aba7 --- /dev/null +++ b/gfx/icons/item.2bpp @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/gfx/icons/item.png b/gfx/icons/item.png Binary files differnew file mode 100755 index 00000000..a47d5500 --- /dev/null +++ b/gfx/icons/item.png diff --git a/gfx/icons/jellyfish.2bpp b/gfx/icons/jellyfish.2bpp Binary files differnew file mode 100755 index 00000000..cfda6ecc --- /dev/null +++ b/gfx/icons/jellyfish.2bpp diff --git a/gfx/icons/jellyfish.png b/gfx/icons/jellyfish.png Binary files differnew file mode 100755 index 00000000..8583d5cd --- /dev/null +++ b/gfx/icons/jellyfish.png diff --git a/gfx/icons/jigglypuff.2bpp b/gfx/icons/jigglypuff.2bpp Binary files differnew file mode 100755 index 00000000..bc00c535 --- /dev/null +++ b/gfx/icons/jigglypuff.2bpp diff --git a/gfx/icons/jigglypuff.png b/gfx/icons/jigglypuff.png Binary files differnew file mode 100755 index 00000000..70f87b0d --- /dev/null +++ b/gfx/icons/jigglypuff.png diff --git a/gfx/icons/lapras.2bpp b/gfx/icons/lapras.2bpp Binary files differnew file mode 100755 index 00000000..47684bae --- /dev/null +++ b/gfx/icons/lapras.2bpp diff --git a/gfx/icons/lapras.png b/gfx/icons/lapras.png Binary files differnew file mode 100755 index 00000000..89ad063d --- /dev/null +++ b/gfx/icons/lapras.png diff --git a/gfx/icons/lugia.2bpp b/gfx/icons/lugia.2bpp Binary files differnew file mode 100755 index 00000000..fc146754 --- /dev/null +++ b/gfx/icons/lugia.2bpp diff --git a/gfx/icons/lugia.png b/gfx/icons/lugia.png Binary files differnew file mode 100755 index 00000000..56dbf283 --- /dev/null +++ b/gfx/icons/lugia.png diff --git a/gfx/icons/mail.2bpp b/gfx/icons/mail.2bpp new file mode 100755 index 00000000..a04f4eff --- /dev/null +++ b/gfx/icons/mail.2bpp @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/gfx/icons/mail.png b/gfx/icons/mail.png Binary files differnew file mode 100755 index 00000000..53db461e --- /dev/null +++ b/gfx/icons/mail.png diff --git a/gfx/icons/monster.2bpp b/gfx/icons/monster.2bpp Binary files differnew file mode 100755 index 00000000..ce8863cd --- /dev/null +++ b/gfx/icons/monster.2bpp diff --git a/gfx/icons/monster.png b/gfx/icons/monster.png Binary files differnew file mode 100755 index 00000000..f97c67b6 --- /dev/null +++ b/gfx/icons/monster.png diff --git a/gfx/icons/moth.2bpp b/gfx/icons/moth.2bpp Binary files differnew file mode 100755 index 00000000..96d5d42f --- /dev/null +++ b/gfx/icons/moth.2bpp diff --git a/gfx/icons/moth.png b/gfx/icons/moth.png Binary files differnew file mode 100755 index 00000000..f44440f5 --- /dev/null +++ b/gfx/icons/moth.png diff --git a/gfx/icons/oddish.2bpp b/gfx/icons/oddish.2bpp Binary files differnew file mode 100755 index 00000000..c9c7665e --- /dev/null +++ b/gfx/icons/oddish.2bpp diff --git a/gfx/icons/oddish.png b/gfx/icons/oddish.png Binary files differnew file mode 100755 index 00000000..c069bd44 --- /dev/null +++ b/gfx/icons/oddish.png diff --git a/gfx/icons/pikachu.2bpp b/gfx/icons/pikachu.2bpp Binary files differnew file mode 100755 index 00000000..ec73af11 --- /dev/null +++ b/gfx/icons/pikachu.2bpp diff --git a/gfx/icons/pikachu.png b/gfx/icons/pikachu.png Binary files differnew file mode 100755 index 00000000..7b7d23db --- /dev/null +++ b/gfx/icons/pikachu.png diff --git a/gfx/icons/poliwag.2bpp b/gfx/icons/poliwag.2bpp Binary files differnew file mode 100755 index 00000000..3d3da674 --- /dev/null +++ b/gfx/icons/poliwag.2bpp diff --git a/gfx/icons/poliwag.png b/gfx/icons/poliwag.png Binary files differnew file mode 100755 index 00000000..b6b63a81 --- /dev/null +++ b/gfx/icons/poliwag.png diff --git a/gfx/icons/serpent.2bpp b/gfx/icons/serpent.2bpp Binary files differnew file mode 100755 index 00000000..4be1a62a --- /dev/null +++ b/gfx/icons/serpent.2bpp diff --git a/gfx/icons/serpent.png b/gfx/icons/serpent.png Binary files differnew file mode 100755 index 00000000..de575f08 --- /dev/null +++ b/gfx/icons/serpent.png diff --git a/gfx/icons/shell.2bpp b/gfx/icons/shell.2bpp Binary files differnew file mode 100755 index 00000000..9e9dd787 --- /dev/null +++ b/gfx/icons/shell.2bpp diff --git a/gfx/icons/shell.png b/gfx/icons/shell.png Binary files differnew file mode 100755 index 00000000..4daf2763 --- /dev/null +++ b/gfx/icons/shell.png diff --git a/gfx/icons/slowpoke.2bpp b/gfx/icons/slowpoke.2bpp new file mode 100755 index 00000000..045980e5 --- /dev/null +++ b/gfx/icons/slowpoke.2bpp @@ -0,0 +1,2 @@ +88GP|c<+<#@O88|xx? ? ?pp#?(?>1? ?' +><< ? ?pp
\ No newline at end of file diff --git a/gfx/icons/slowpoke.png b/gfx/icons/slowpoke.png Binary files differnew file mode 100755 index 00000000..221f3f7a --- /dev/null +++ b/gfx/icons/slowpoke.png diff --git a/gfx/icons/snorlax.2bpp b/gfx/icons/snorlax.2bpp Binary files differnew file mode 100755 index 00000000..1adb5c84 --- /dev/null +++ b/gfx/icons/snorlax.2bpp diff --git a/gfx/icons/snorlax.png b/gfx/icons/snorlax.png Binary files differnew file mode 100755 index 00000000..f2c1b0b7 --- /dev/null +++ b/gfx/icons/snorlax.png diff --git a/gfx/icons/squirtle.2bpp b/gfx/icons/squirtle.2bpp Binary files differnew file mode 100755 index 00000000..b6558faa --- /dev/null +++ b/gfx/icons/squirtle.2bpp diff --git a/gfx/icons/squirtle.png b/gfx/icons/squirtle.png Binary files differnew file mode 100755 index 00000000..614aa21b --- /dev/null +++ b/gfx/icons/squirtle.png diff --git a/gfx/icons/staryu.2bpp b/gfx/icons/staryu.2bpp Binary files differnew file mode 100755 index 00000000..890cfe20 --- /dev/null +++ b/gfx/icons/staryu.2bpp diff --git a/gfx/icons/staryu.png b/gfx/icons/staryu.png Binary files differnew file mode 100755 index 00000000..52361c78 --- /dev/null +++ b/gfx/icons/staryu.png diff --git a/gfx/icons/sudowoodo.2bpp b/gfx/icons/sudowoodo.2bpp Binary files differnew file mode 100755 index 00000000..1c939093 --- /dev/null +++ b/gfx/icons/sudowoodo.2bpp diff --git a/gfx/icons/sudowoodo.png b/gfx/icons/sudowoodo.png Binary files differnew file mode 100755 index 00000000..d115356b --- /dev/null +++ b/gfx/icons/sudowoodo.png diff --git a/gfx/icons/unown.2bpp b/gfx/icons/unown.2bpp Binary files differnew file mode 100755 index 00000000..b1cddd8b --- /dev/null +++ b/gfx/icons/unown.2bpp diff --git a/gfx/icons/unown.png b/gfx/icons/unown.png Binary files differnew file mode 100755 index 00000000..0a4d0e42 --- /dev/null +++ b/gfx/icons/unown.png diff --git a/gfx/icons/voltorb.2bpp b/gfx/icons/voltorb.2bpp Binary files differnew file mode 100755 index 00000000..b75cafe3 --- /dev/null +++ b/gfx/icons/voltorb.2bpp diff --git a/gfx/icons/voltorb.png b/gfx/icons/voltorb.png Binary files differnew file mode 100755 index 00000000..ef289541 --- /dev/null +++ b/gfx/icons/voltorb.png diff --git a/gfx/overworld/magnet_train_bg.tilemap b/gfx/overworld/magnet_train_bg.tilemap new file mode 100755 index 00000000..3a70aecc --- /dev/null +++ b/gfx/overworld/magnet_train_bg.tilemap @@ -0,0 +1 @@ +LM\]LM\]11
11LM\]LM\]
\ No newline at end of file diff --git a/gfx/overworld/magnet_train_fg.tilemap b/gfx/overworld/magnet_train_fg.tilemap Binary files differnew file mode 100755 index 00000000..2f542683 --- /dev/null +++ b/gfx/overworld/magnet_train_fg.tilemap diff --git a/gfx/overworld/trainer_battle_day.pal b/gfx/overworld/trainer_battle_day.pal new file mode 100755 index 00000000..b7d67891 --- /dev/null +++ b/gfx/overworld/trainer_battle_day.pal @@ -0,0 +1,4 @@ + RGB 31, 18, 29 + RGB 31, 11, 15 + RGB 31, 05, 05 + RGB 07, 07, 07 diff --git a/gfx/overworld/trainer_battle_nite.pal b/gfx/overworld/trainer_battle_nite.pal new file mode 100755 index 00000000..d1a35f33 --- /dev/null +++ b/gfx/overworld/trainer_battle_nite.pal @@ -0,0 +1,4 @@ + RGB 31, 18, 29 + RGB 31, 05, 05 + RGB 31, 05, 05 + RGB 31, 05, 05 diff --git a/gfx/overworld/trainer_battle_pokeball_tiles.2bpp b/gfx/overworld/trainer_battle_pokeball_tiles.2bpp new file mode 100755 index 00000000..09e51fd6 --- /dev/null +++ b/gfx/overworld/trainer_battle_pokeball_tiles.2bpp @@ -0,0 +1 @@ +Áý
\ No newline at end of file diff --git a/gfx/overworld/trainer_battle_pokeball_tiles.png b/gfx/overworld/trainer_battle_pokeball_tiles.png Binary files differnew file mode 100755 index 00000000..a4655d26 --- /dev/null +++ b/gfx/overworld/trainer_battle_pokeball_tiles.png diff --git a/home/tilemap.asm b/home/tilemap.asm index 176d5be2..fac8d372 100755 --- a/home/tilemap.asm +++ b/home/tilemap.asm @@ -70,22 +70,22 @@ CopyTilemapAtOnce:: .wait ldh a, [rLY] - cp $7f + cp $80 - 1 jr c, .wait di - ld a, BANK(vTiles3) + ld a, BANK(vBGMap2) ldh [rVBK], a hlcoord 0, 0, wAttrmap - call .StackPointerMagic - ld a, BANK(vTiles0) + call .CopyBGMapViaStack + ld a, BANK(vBGMap0) ldh [rVBK], a hlcoord 0, 0 - call .StackPointerMagic + call .CopyBGMapViaStack .wait2 ldh a, [rLY] - cp $7f + cp $80 - 1 jr c, .wait2 ei @@ -95,7 +95,7 @@ CopyTilemapAtOnce:: ldh [hBGMapMode], a ret -.StackPointerMagic: +.CopyBGMapViaStack: ; Copy all tiles to vBGMap ld [hSPBuffer], sp ld sp, hl @@ -115,7 +115,7 @@ rept SCREEN_WIDTH / 2 ldh a, [c] and b jr nz, .loop\@ -; load BGMap0 +; load vBGMap ld [hl], e inc l ld [hl], d @@ -14,6 +14,7 @@ INCLUDE "macros/scripts/movement.asm" INCLUDE "macros/scripts/battle_commands.asm" INCLUDE "macros/scripts/battle_anims.asm" INCLUDE "macros/scripts/trade_anims.asm" +INCLUDE "macros/scripts/gfx_anims.asm" ; TODO: Should this be included or not? ; - Leave out for now so no code depending on legacy macros gets introduced diff --git a/macros/scripts/gfx_anims.asm b/macros/scripts/gfx_anims.asm new file mode 100755 index 00000000..a6241a0d --- /dev/null +++ b/macros/scripts/gfx_anims.asm @@ -0,0 +1,53 @@ +; pic + oam animations + +frame: MACRO + db \1 +x = \2 +if _NARG > 2 +rept _NARG - 2 +x = x | (1 << (\3 + 1)) + shift +endr +endc + db x +ENDM + + enum_start $fc + + enum delanim_command ; $fc +delanim: MACRO +; Removes the object from the screen, as opposed to `endanim` which just stops all motion + db delanim_command +ENDM + + enum dowait_command ; $fd +dowait: MACRO + db dowait_command + db \1 ; frames +ENDM + + enum dorestart_command ; $fe +dorestart: MACRO + db dorestart_command +ENDM + + enum endanim_command ; $ff +endanim: MACRO + db endanim_command +ENDM + + +; Used for pic animations +__enum__ = $fd + + enum dorepeat_command ; $fd +dorepeat: MACRO + db dorepeat_command + db \1 ; command offset to jump to +ENDM + + enum setrepeat_command ; $fe +setrepeat: MACRO + db setrepeat_command + db \1 ; amount of times to repeat +ENDM @@ -228,108 +228,17 @@ INCLUDE "engine/events/halloffame.asm" SECTION "bank23", ROMX -SaveMenu_CopyTilemapAtOnce:: - dr $8c000, $8c0b9 -PhoneRing_CopyTilemapAtOnce:: - dr $8c0b9, $8c17a -_ResetClock:: - dr $8c17a, $8c310 -_DeleteSaveData:: - dr $8c310, $8c355 -DummyPredef35:: -DummyPredef36:: - ret -UpdateTimeOfDayPal:: - dr $8c356, $8c366 -_TimeOfDayPals:: - dr $8c366, $8c397 -_UpdateTimePals:: - dr $8c397, $8c3a0 -FadeInPalettes:: - dr $8c3a0, $8c3ab -FadeOutPalettes:: - dr $8c3ab, $8c3b9 -FadeInQuickly:: - dr $8c3b9, $8c3c4 -FadeBlackQuickly:: - dr $8c3c4, $8c3e9 -ReplaceTimeOfDayPals:: - dr $8c3e9, $8c513 -DoBattleTransition:: - dr $8c513, $8ca5e -PlayWhirlpoolSound:: - dr $8ca5e, $8ca6b -BlindingFlash:: - dr $8ca6b, $8ca8e -ShakeHeadbuttTree:: - dr $8ca8e, $8cbb8 -OWCutAnimation:: - dr $8cbb8, $8cd65 -FlyFromAnim:: - dr $8cd65, $8cdab -FlyToAnim:: - dr $8cdab, $8ce7c -MagnetTrain:: - dr $8ce7c, $8d174 - -ClearSpriteAnims:: - dr $8d174, $8d183 -PlaySpriteAnimationsAndDelayFrame:: - dr $8d183, $8d18a -PlaySpriteAnimations:: - dr $8d18a, $8d1c9 -DoNextFrameForFirst16Sprites:: - dr $8d1c9, $8d1f7 -_InitSpriteAnimStruct:: - dr $8d1f7, $8d332 - -_ReinitSpriteAnimFrame:: -IF DEF(_GOLD) - dr $8d332, $8e6fd -AnimateEndOfExpBar:: - dr $8e6fd, $8e774 -ClearSpriteAnims2:: - dr $8e774, $8e78b -LoadOverworldMonIcon:: - dr $8e78b, $8e79f -LoadMenuMonIcon:: - dr $8e79f, $8e88f -GetSpeciesIcon:: - dr $8e88f, $8e8fb -FreezeMonIcons:: - dr $8e8fb, $8e922 -UnfreezeMonIcons:: - dr $8e922, $8e93d -HoldSwitchmonIcon:: - dr $8e93d, $8fdbe -InitDisplayForHallOfFame:: - dr $8fdbe, $8fdff -InitDisplayForRedCredits:: - dr $8fdff, $8fe43 - -ELIF DEF(_SILVER) - dr $8d332, $8e6e3 -AnimateEndOfExpBar:: - dr $8e6e3, $8e75a -ClearSpriteAnims2:: - dr $8e75a, $8e771 -LoadOverworldMonIcon:: - dr $8e771, $8e785 -LoadMenuMonIcon:: - dr $8e785, $8e875 -GetSpeciesIcon:: - dr $8e875, $8e8e1 -FreezeMonIcons:: - dr $8e8e1, $8e908 -UnfreezeMonIcons:: - dr $8e908, $8e923 -HoldSwitchmonIcon:: - dr $8e923, $8fda4 -InitDisplayForHallOfFame:: - dr $8fda4, $8fde5 -InitDisplayForRedCredits:: - dr $8fde5, $8fe43 -ENDC +INCLUDE "engine/menus/savemenu_copytilemapatonce.asm" +INCLUDE "engine/phone/phonering_copytilemapatonce.asm" +INCLUDE "engine/rtc/reset_password.asm" +INCLUDE "engine/menus/delete_save.asm" +INCLUDE "engine/tilesets/timeofday_pals.asm" +INCLUDE "engine/battle/battle_transition.asm" +INCLUDE "engine/events/field_moves.asm" +INCLUDE "engine/events/magnet_train.asm" +INCLUDE "engine/gfx/sprites.asm" +INCLUDE "engine/gfx/mon_icons.asm" +INCLUDE "engine/movie/init_hof_credits.asm" SECTION "bank24", ROMX @@ -422,7 +331,9 @@ INCBIN "gfx/font/font_inversed.1bpp" SECTION "bank38", ROMX +ret_e0000: ret +; unused ret _Diploma:: dr $e0002, $e0009 @@ -431,7 +342,9 @@ PlaceDiplomaOnScreen:: PrintDiplomaPage2:: dr $e00ae, $e081b RotateUnownFrontpic:: - dr $e081b, $e0909 + dr $e081b, $e0908 +ret_e0908:: + ret _CardFlip:: dr $e0909, $e199d @@ -439,7 +352,9 @@ _UnownPuzzle:: dr $e199d, $e2668 _DummyGame:: - dr $e2668, $e2b9e + dr $e2668, $e29ae +DummyGame_InterpretJoypad_AnimateCursor:: + dr $e29ae, $e2b9e _DepositPKMN:: dr $e2b9e, $e2d71 _WithdrawPKMN:: @@ -419,6 +419,10 @@ wOverworldMapBlocks:: ds 1300 ; c700 wOverworldMapBlocksEnd:: NEXTU ; c700 +; decompress buffer in wram +wDecompressScratch:: ds 40 tiles + +NEXTU ; c700 ; GB Printer screen RAM wGameboyPrinterRAM:: wGameboyPrinterScreen:: ds SCREEN_HEIGHT * SCREEN_WIDTH ; c700 @@ -468,6 +472,12 @@ wLinkData:: ds $514 wLinkDataEnd:: NEXTU ; c700 +; unused (engine/gfx/sprite_anims.asm) + ds 4 +wc704:: ds 19 +wc717:: ds 1 + +NEXTU ; c700 ; link data members wLinkPlayerName:: ds NAME_LENGTH wLinkPartyCount:: db @@ -1088,6 +1098,12 @@ wTrainerCardBadgeTileID:: db wTrainerCardBadgeAttributes:: db NEXTU ; ce64 +; magnet train +wMagnetTrainOffset:: db +wMagnetTrainPosition:: db +wMagnetTrainWaitCounter:: db + +NEXTU ; ce64 ; miscellaneous wFrameCounter:: wMomBankDigitCursorPosition:: @@ -1264,6 +1280,15 @@ UNION ; ceed wTempMail:: mailmsg wTempMail NEXTU ; ceed +; magnet train +wMagnetTrain:: ; used only for BANK(wMagnetTrain) +wMagnetTrainDirection:: db +wMagnetTrainInitPosition:: db +wMagnetTrainHoldPosition:: db +wMagnetTrainFinalPosition:: db +wMagnetTrainPlayerSpriteInitX:: db + +NEXTU ; ceed ; credits wCreditsPos:: dw wCreditsTimer:: db @@ -2134,17 +2159,15 @@ wObjectMasks:: ds NUM_OBJECTS ; d545 wVariableSprites:: ds $100 - SPRITE_VARS ; d555 wEnteredMapFromContinue:: db ; d565 -wd566:: ds 1 ; d566 -wd567:: ds 1 ; d567 + ds 2 wTimeOfDayPal:: db -wd569:: ds 1 ; d569 -wd56a:: ds 1 ; d56a -wd56b:: ds 1 ; d56b -wd56c:: ds 1 ; d56c -wd56d:: ds 1 ; d56d + ds 4 +wTimeOfDayPalFlags:: db ; d56d wTimeOfDayPalset:: db ; d56e -wd56f:: ds 1 ; d56f -wd570:: ds 1 ; d570 +wCurTimeOfDay:: db ; d56f + + ds 1 + wPlayerData2End:: wPlayerData3:: wStatusFlags:: |