diff --git a/constants.asm b/constants.asm index ea0182e..cd5a022 100644 --- a/constants.asm +++ b/constants.asm @@ -15,6 +15,7 @@ INCLUDE "macros/queue.asm" INCLUDE "macros/maps.asm" INCLUDE "macros/battle_commands.asm" +INCLUDE "macros/oam_anims.asm" INCLUDE "macros/asserts.asm" INCLUDE "constants/audio_constants.asm" diff --git a/constants/misc_constants.asm b/constants/misc_constants.asm index 588f012..8ae929a 100644 --- a/constants/misc_constants.asm +++ b/constants/misc_constants.asm @@ -17,9 +17,22 @@ const_def shift_const MORN ; 3 DEF NUM_DAYTIMES EQU const_value +; FlagAction arguments (see home/flag.asm) +const_def +const RESET_FLAG +const SET_FLAG +const CHECK_FLAG + ; RedrawRowOrColumn functions DEF REDRAW_COL EQU 1 DEF REDRAW_ROW EQU 2 ; significant money values DEF MAX_COINS EQU 9999 + +; LoadMenuMonIcon.Jumptable indexes (see engine/gfx/mon_icons.asm) +const_def +const MONICON_PARTYMENU +const MONICON_NAMINGSCREEN +const MONICON_MOVES +const MONICON_TRADE diff --git a/constants/pokemon_constants.asm b/constants/pokemon_constants.asm index 82cec681..a0f6a2b 100644 --- a/constants/pokemon_constants.asm +++ b/constants/pokemon_constants.asm @@ -192,6 +192,66 @@ const MON_BELLSPROUT ; bc const MON_WEEPINBELL ; bd const MON_VICTREEBEL ; be + const MON_HAPPA ; bf CHIKORITA + const MON_HANAMOGURA ; c0 BAYLEEF + const MON_HANARYU ; c1 MEGANIUM + const MON_HONOGUMA ; c2 + const MON_VOLBEAR ; c3 + const MON_DYNABEAR ; c4 + const MON_KURUSU ; c5 + const MON_AQUA ; c6 + const MON_AQUARIA ; c7 + const MON_HOHO ; c8 HOOTHOOT + const MON_BOBO ; c9 NOCTOWL + const MON_PACHIMEE ; ca MAREEP + const MON_MOKOKO ; cb FLAAFY + const MON_DENRYU ; cc AMPHAROS + const MON_MIKON ; cd (baby VULPIX) + const MON_MONJA ; ce (baby TANGELA) + const MON_JARANJA ; cf TANGROWTH (evolved TANGELA) + const MON_HANEEI ; d0 MANTINE + const MON_PUKU ; d1 QWILFISH + const MON_SHIBIREFUGU ; d2 (evolved QWILFISH) + const MON_PICHU ; d3 + const MON_PY ; d4 CLEFFA + const MON_PUPURIN ; d5 IGGLYBUFF + const MON_MIZUUO ; d6 QUAGSIRE + const MON_NATY ; d7 NATU + const MON_NATIO ; d8 XATU + const MON_GYOPIN ; d9 (baby GOLDEEN) + const MON_MARIL ; da MARILL + const MON_MANBO1 ; db + const MON_IKARI ; dc + const MON_GROTESS ; dd + const MON_EKSING ; de CROBAT + const MON_PARA ; df (baby PARAS) + const MON_KOKUMO ; e0 SPINARAK + const MON_TWOHEAD ; e1 ARIADOS + const MON_YOROIDORI ; e2 SKARMORY + const MON_ANIMON ; e3 (evolved DITTO) + const MON_HINAZU ; e4 (baby DODUO) + const MON_SUNNY ; e5 SUNFLORA + const MON_PAON ; e6 PHANPHY + const MON_DONPHAN ; e7 + const MON_TWINZ ; e8 (baby GIRAFARIG) + const MON_KIRINRIKI ; e9 GIRAFARIG + const MON_PAINTER ; ea SMEARGLE + const MON_KOUNYA ; eb (baby MEOWTH) + const MON_RINRIN ; ec + const MON_BERURUN ; ed + const MON_NYOROTONO ; ee POLITOED + const MON_YADOKING ; ef SLOWKING + const MON_ANNON ; f0 UNOWN + const MON_REDIBA ; f1 LEDYBA + const MON_MITSUBOSHI ; f2 LEDIAN + const MON_PUCHICORN ; f3 (baby PONYTA) + const MON_EIFIE ; f4 ESPEON + const MON_BLACKY ; f5 UMBREON + const MON_TURBAN ; f6 + const MON_BETBABY ; f7 (baby GRIMER) + const MON_TEPPOUO ; f8 REMORAID + const MON_OKUTANK ; f9 OCTILLERY + const MON_GONGU ; fa TYROGUE ; Unown forms const_def 1 diff --git a/constants/pokemon_data_constants.asm b/constants/pokemon_data_constants.asm index 4ab05e2..5bf0f82 100644 --- a/constants/pokemon_data_constants.asm +++ b/constants/pokemon_data_constants.asm @@ -120,7 +120,7 @@ DEF NUM_HOF_TEAMS EQU 30 ; wild data -DEF NUM_GRASSMON EQU 7 ; data/wild/*_grass.asm table size +DEF NUM_GRASSMON EQU 6 ; data/wild/*_grass.asm table size DEF NUM_WATERMON EQU 3 ; data/wild/*_water.asm table size DEF GRASS_WILDDATA_LENGTH EQU (NUM_GRASSMON * 2 + 1) * 3 + 2 diff --git a/constants/sprite_anim_constants.asm b/constants/sprite_anim_constants.asm index b8eb359..ebbf084 100755 --- a/constants/sprite_anim_constants.asm +++ b/constants/sprite_anim_constants.asm @@ -12,66 +12,307 @@ 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_VAR1 ; c + const SPRITEANIMSTRUCT_VAR2 ; d + const SPRITEANIMSTRUCT_VAR3 ; e + const SPRITEANIMSTRUCT_VAR4 ; f DEF SPRITEANIMSTRUCT_LENGTH EQU const_value DEF NUM_SPRITE_ANIM_STRUCTS EQU 10 ; see wSpriteAnimationStructs ; wSpriteAnimDict keys -DEF SPRITE_ANIM_DICT_DEFAULT EQU $00 -DEF SPRITE_ANIM_DICT_10 EQU $10 -DEF SPRITE_ANIM_DICT_22 EQU $22 -DEF SPRITE_ANIM_DICT_25 EQU $25 -DEF SPRITE_ANIM_DICT_GS_SPLASH EQU $27 -DEF SPRITE_ANIM_DICT_29 EQU $29 + const_def + const SPRITE_ANIM_DICT_NULL ; 00 + const SPRITE_ANIM_DICT_POLIWAG_ICON ; 01 + const SPRITE_ANIM_DICT_JIGGLYPUFF_ICON ; 02 + const SPRITE_ANIM_DICT_DIGLETT_ICON ; 03 + const SPRITE_ANIM_DICT_PIKACHU_ICON ; 04 + const SPRITE_ANIM_DICT_STARYU_ICON ; 05 + const SPRITE_ANIM_DICT_MAGIKARP_ICON ; 06 + const SPRITE_ANIM_DICT_PIDGEY_ICON ; 07 + const SPRITE_ANIM_DICT_RHYDON_ICON ; 08 + const SPRITE_ANIM_DICT_CLEFAIRY_ICON ; 09 + const SPRITE_ANIM_DICT_ODDISH_ICON ; 0a + const SPRITE_ANIM_DICT_MUSHI_ICON ; 0b + const SPRITE_ANIM_DICT_GENGAR_ICON ; 0c + const SPRITE_ANIM_DICT_LAPRAS_ICON ; 0d + const SPRITE_ANIM_DICT_MRMIME_ICON ; 0e + const SPRITE_ANIM_DICT_LOKON_ICON ; 0f + const SPRITE_ANIM_DICT_TAUROS_ICON ; 10 + const SPRITE_ANIM_DICT_SHELLDER_ICON ; 11 + const SPRITE_ANIM_DICT_DITTO_ICON ; 12 + const SPRITE_ANIM_DICT_ONIX_ICON ; 13 + const SPRITE_ANIM_DICT_VOLTORB_ICON ; 14 + const SPRITE_ANIM_DICT_SQUIRTLE_ICON ; 15 + const SPRITE_ANIM_DICT_BULBASAUR_ICON ; 16 + const SPRITE_ANIM_DICT_CHARMANDER_ICON ; 17 + const SPRITE_ANIM_DICT_WEEDLE_ICON ; 18 + const SPRITE_ANIM_DICT_ANNON_ICON ; 19 + const SPRITE_ANIM_DICT_GEODUDE_ICON ; 1a + const SPRITE_ANIM_DICT_MACHOP_ICON ; 1b + const SPRITE_ANIM_DICT_EGG_ICON ; 1c + const SPRITE_ANIM_DICT_TENTACOOL_ICON ; 1d + const SPRITE_ANIM_DICT_BUTTERFREE_ICON ; 1e + const SPRITE_ANIM_DICT_ZUBAT_ICON ; 1f + const SPRITE_ANIM_DICT_SNORLAX_ICON ; 20 + const SPRITE_ANIM_DICT_GS_INTRO ; 21 + const SPRITE_ANIM_DICT_GS_INTRO_2 ; 22 + const SPRITE_ANIM_DICT_GS_INTRO_3 ; 23 + const SPRITE_ANIM_DICT_TITLE_FLAME_NOTE ; 24 + const SPRITE_ANIM_DICT_MINIGAME_PICROSS ; 25 + const SPRITE_ANIM_DICT_TEXT_CURSOR ; 26 + const SPRITE_ANIM_DICT_GS_SPLASH ; 27 + const SPRITE_ANIM_DICT_SLOTS ; 28 + const SPRITE_ANIM_DICT_ARROW_CURSOR ; 29 +DEF NUM_SPRITE_ANIM_GFX EQU const_value + +DEF SPRITE_ANIM_DICT_DEFAULT EQU $08 ; wSpriteAnimDict size (see ram/wram.asm) DEF NUM_SPRITEANIMDICT_ENTRIES EQU 10 ; SpriteAnimSeqData indexes -DEF SPRITE_ANIM_INDEX_08 EQU $08 + const_def + const SPRITE_ANIM_OBJ_00 ; 00 + const SPRITE_ANIM_OBJ_POLIWAG_ICON ; 01 + const SPRITE_ANIM_OBJ_JIGGLYPUFF_ICON ; 02 + const SPRITE_ANIM_OBJ_DIGLETT_ICON ; 03 + const SPRITE_ANIM_OBJ_PIKACHU_ICON ; 04 + const SPRITE_ANIM_OBJ_STARYU_ICON ; 05 + const SPRITE_ANIM_OBJ_MAGIKARP_ICON ; 06 + const SPRITE_ANIM_OBJ_PIDGEY_ICON ; 07 + const SPRITE_ANIM_OBJ_RHYDON_ICON ; 08 + const SPRITE_ANIM_OBJ_CLEFAIRY_ICON ; 09 + const SPRITE_ANIM_OBJ_ODDISH_ICON ; 0a + const SPRITE_ANIM_OBJ_MUSHI_ICON ; 0b + const SPRITE_ANIM_OBJ_GENGAR_ICON ; 0c + const SPRITE_ANIM_OBJ_LAPRAS_ICON ; 0d + const SPRITE_ANIM_OBJ_MRMIME_ICON ; 0e + const SPRITE_ANIM_OBJ_LOKON_ICON ; 0f + const SPRITE_ANIM_OBJ_TAUROS_ICON ; 10 + const SPRITE_ANIM_OBJ_SHELLDER_ICON ; 11 + const SPRITE_ANIM_OBJ_DITTO_ICON ; 12 + const SPRITE_ANIM_OBJ_ONIX_ICON ; 13 + const SPRITE_ANIM_OBJ_VOLTORB_ICON ; 14 + const SPRITE_ANIM_OBJ_SQUIRTLE_ICON ; 15 + const SPRITE_ANIM_OBJ_BULBASAUR_ICON ; 16 + const SPRITE_ANIM_OBJ_CHARMANDER_ICON ; 17 + const SPRITE_ANIM_OBJ_WEEDLE_ICON ; 18 + const SPRITE_ANIM_OBJ_ANNON_ICON ; 19 + const SPRITE_ANIM_OBJ_GEODUDE_ICON ; 1a + const SPRITE_ANIM_OBJ_MACHOP_ICON ; 1b + const SPRITE_ANIM_OBJ_EGG_ICON ; 1c + const SPRITE_ANIM_OBJ_TENTACOOL_ICON ; 1d + const SPRITE_ANIM_OBJ_BUTTERFREE_ICON ; 1e + const SPRITE_ANIM_OBJ_ZUBAT_ICON ; 1f + const SPRITE_ANIM_OBJ_SNORLAX_ICON ; 20 + const SPRITE_ANIM_OBJ_GS_INTRO_BUBBLE ; 21 + const SPRITE_ANIM_OBJ_GS_INTRO_OMANYTE ; 22 + const SPRITE_ANIM_OBJ_GS_INTRO_MAGIKARP ; 23 + const SPRITE_ANIM_OBJ_UNUSED_INTRO_AERODACTYL ; 24 + const SPRITE_ANIM_OBJ_GS_INTRO_LAPRAS ; 25 + const SPRITE_ANIM_OBJ_GS_INTRO_NOTE ; 26 + const SPRITE_ANIM_OBJ_GS_INTRO_SMALLER_NOTE ; 27 + const SPRITE_ANIM_OBJ_GS_INTRO_JIGGLYPUFF ; 28 + const SPRITE_ANIM_OBJ_GS_INTRO_PIKACHU ; 29 + const SPRITE_ANIM_OBJ_GS_INTRO_PIKACHU_TAIL ; 2a + const SPRITE_ANIM_OBJ_GS_INTRO_FIREBALL ; 2b + const SPRITE_ANIM_OBJ_GS_INTRO_BLASTOISE ; 2c + const SPRITE_ANIM_OBJ_GS_INTRO_VENUSAUR ; 2d + const SPRITE_ANIM_OBJ_GS_TITLE_FLAME_NOTE ; 2e + const SPRITE_ANIM_OBJ_MINIGAME_PIKACHU ; 2f + const SPRITE_ANIM_OBJ_MINIGAME_PIKACHU_TAIL ; 30 + const SPRITE_ANIM_OBJ_MINIGAME_NOTE ; 31 + const SPRITE_ANIM_OBJ_MINIGAME_JIGGLYPUFF ; 32 + const SPRITE_ANIM_OBJ_MINIGAME_PICROSS_CURSOR ; 33 + const SPRITE_ANIM_OBJ_MINIGAME_PICROSS_DUST ; 34 + const SPRITE_ANIM_OBJ_MINIGAME_PICROSS_GOLD ; 35 + const SPRITE_ANIM_OBJ_POKEDEX_HAND_CURSOR ; 36 + const SPRITE_ANIM_OBJ_POKEDEX_CURSOR ; 37 + const SPRITE_ANIM_OBJ_POKEDEX_SLOWPOKE ; 38 + const SPRITE_ANIM_OBJ_NAMING_SCREEN_CURSOR ; 39 + const SPRITE_ANIM_OBJ_GAMEFREAK_LOGO ; 3a + const SPRITE_ANIM_OBJ_GS_INTRO_STAR ; 3b + const SPRITE_ANIM_OBJ_GS_INTRO_SPARKLE ; 3c + const SPRITE_ANIM_OBJ_SLOTS_GOLEM ; 3d + const SPRITE_ANIM_OBJ_SLOTS_CHANSEY ; 3e + const SPRITE_ANIM_OBJ_SLOTS_EGG ; 3f + const SPRITE_ANIM_OBJ_MAIL_WRITING_CURSOR ; 40 + const SPRITE_ANIM_OBJ_MAP_CHARACTER_ICON ; 41 + const SPRITE_ANIM_OBJ_POKER_CURSOR ; 42 + const SPRITE_ANIM_OBJ_MEMORY_GAME_CURSOR ; 43 + const SPRITE_ANIM_OBJ_TRAINERGEAR_POINTER ; 44 + const SPRITE_ANIM_OBJ_TRADE_POKE_BALL ; 45 + const SPRITE_ANIM_OBJ_TRADE_POOF ; 46 + const SPRITE_ANIM_OBJ_TRADE_TUBE_BULGE ; 47 + const SPRITE_ANIM_OBJ_TRADEMON_ICON ; 48 + const SPRITE_ANIM_OBJ_TRADEMON_BUBBLE ; 49 + const SPRITE_ANIM_OBJ_4A ; 4a + const SPRITE_ANIM_OBJ_RADIO_FREQUENCY_METER ; 4b +DEF NUM_SPRITE_ANIM_OBJS EQU const_value -DEF SPRITE_ANIM_INDEX_20 EQU $20 +; DoSpriteAnimFrame.Jumptable indexes (see engine/sprite_anims/functions.asm) +const_def + const SPRITE_ANIM_FUNC_NULL ; 00 + const SPRITE_ANIM_FUNC_PARTY_MON ; 01 + const SPRITE_ANIM_FUNC_PARTY_MON_SWITCH ; 02 + const SPRITE_ANIM_FUNC_PARTY_MON_SELECTED ; 03 + const SPRITE_ANIM_FUNC_GS_INTRO_BUBBLE ; 04 + const SPRITE_ANIM_FUNC_GS_INTRO_OMANYTE ; 05 + const SPRITE_ANIM_FUNC_GS_INTRO_MAGIKARP ; 06 + const SPRITE_ANIM_FUNC_UNUSED_INTRO_AERODACTYL ; 07 + const SPRITE_ANIM_FUNC_GS_INTRO_LAPRAS ; 08 + const SPRITE_ANIM_FUNC_GS_INTRO_NOTE ; 09 + const SPRITE_ANIM_FUNC_GS_INTRO_JIGGLYPUFF ; 0a + const SPRITE_ANIM_FUNC_GS_INTRO_PIKACHU ; 0b + const SPRITE_ANIM_FUNC_GS_INTRO_PIKACHU_TAIL ; 0c + const SPRITE_ANIM_FUNC_GS_INTRO_FIREBALL ; 0d + const SPRITE_ANIM_FUNC_GS_INTRO_BLASTOISE ; 0e + const SPRITE_ANIM_FUNC_GS_INTRO_VENUSAUR ; 0f + const SPRITE_ANIM_FUNC_GS_TITLE_FLAME_NOTE ; 10 + const SPRITE_ANIM_FUNC_MINIGAME_PIKACHU ; 11 + const SPRITE_ANIM_FUNC_MINIGAME_PIKACHU_TAIL ; 12 + const SPRITE_ANIM_FUNC_MINIGAME_NOTE ; 13 + const SPRITE_ANIM_FUNC_MINIGAME_JIGGLYPUFF ; 14 + const SPRITE_ANIM_FUNC_MINIGAME_PICROSS_CURSOR ; 15 + const SPRITE_ANIM_FUNC_MINIGAME_PICROSS_DUST ; 16 + const SPRITE_ANIM_FUNC_POKEDEX_HAND_CURSOR ; 17 + const SPRITE_ANIM_FUNC_POKEDEX_CURSOR ; 18 + const SPRITE_ANIM_FUNC_POKEDEX_SLOWPOKE ; 19 + const SPRITE_ANIM_FUNC_NAMING_SCREEN_CURSOR ; 1a + const SPRITE_ANIM_FUNC_GAMEFREAK_LOGO ; 1b + const SPRITE_ANIM_FUNC_GS_GAMEFREAK_LOGO_STAR ; 1c + const SPRITE_ANIM_FUNC_GS_GAMEFREAK_LOGO_SPARKLE ; 1d + const SPRITE_ANIM_FUNC_SLOTS_GOLEM ; 1e + const SPRITE_ANIM_FUNC_SLOTS_CHANSEY ; 1f + const SPRITE_ANIM_FUNC_SLOTS_EGG ; 20 + const SPRITE_ANIM_FUNC_MAIL_CURSOR ; 21 + const SPRITE_ANIM_FUNC_POKER_CURSOR ; 22 + const SPRITE_ANIM_FUNC_MEMORY_GAME_CURSOR ; 23 + const SPRITE_ANIM_FUNC_TRAINERGEAR_POINTER ; 24 + const SPRITE_ANIM_FUNC_TRADE_POKE_BALL ; 25 + const SPRITE_ANIM_FUNC_TRADE_TUBE_BULGE ; 26 + const SPRITE_ANIM_FUNC_TRADEMON_IN_TUBE ; 27 + const SPRITE_ANIM_FUNC_UNKNOWN ; 28 + const SPRITE_ANIM_FUNC_RADIO_FREQUENCY_METER ; 29 +DEF NUM_SPRITE_ANIM_FUNCS EQU const_value -DEF SPRITE_ANIM_INDEX_GS_INTRO_BUBBLE EQU $21 -DEF SPRITE_ANIM_INDEX_GS_INTRO_OMANYTE EQU $22 -DEF SPRITE_ANIM_INDEX_GS_INTRO_MAGIKARP EQU $23 -DEF SPRITE_ANIM_INDEX_UNUSED_INTRO_AERODACTYL EQU $24 -DEF SPRITE_ANIM_INDEX_GS_INTRO_LAPRAS EQU $25 -DEF SPRITE_ANIM_INDEX_GS_INTRO_NOTE EQU $26 -DEF SPRITE_ANIM_INDEX_GS_INTRO_SMALLER_NOTE EQU $27 -DEF SPRITE_ANIM_INDEX_GS_INTRO_JIGGLYPUFF EQU $28 -DEF SPRITE_ANIM_INDEX_28 EQU $28 -DEF SPRITE_ANIM_INDEX_GS_INTRO_PIKACHU EQU $29 -DEF SPRITE_ANIM_INDEX_GS_INTRO_PIKACHU_TAIL EQU $2a -DEF SPRITE_ANIM_INDEX_GS_INTRO_FIREBALL EQU $2b -DEF SPRITE_ANIM_INDEX_GS_INTRO_BLASTOISE EQU $2c -DEF SPRITE_ANIM_INDEX_GS_INTRO_VENUSAUR EQU $2d +; SpriteAnimFrameData indexes (see data/sprite_anims/framesets.asm) + const_def + const SPRITE_ANIM_FRAMESET_00 ; 00 + const SPRITE_ANIM_FRAMESET_PARTY_MON ; 01 + const SPRITE_ANIM_FRAMESET_GS_INTRO_BUBBLE ; 02 + const SPRITE_ANIM_FRAMESET_GS_INTRO_OMANYTE ; 03 + const SPRITE_ANIM_FRAMESET_GS_INTRO_MAGIKARP ; 04 + const SPRITE_ANIM_FRAMESET_UNUSED_INTRO_AERODACTYL ; 05 + const SPRITE_ANIM_FRAMESET_GS_INTRO_LAPRAS ; 06 + const SPRITE_ANIM_FRAMESET_GS_INTRO_NOTE ; 07 + const SPRITE_ANIM_FRAMESET_GS_INTRO_SMALLER_NOTE ; 08 + const SPRITE_ANIM_FRAMESET_GS_INTRO_JIGGLYPUFF ; 09 + const SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU ; 0a + const SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_2 ; 0b + const SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_TAIL ; 0c + const SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_TAIL_2 ; 0d + const SPRITE_ANIM_FRAMESET_GS_INTRO_FIREBALL ; 0e + const SPRITE_ANIM_FRAMESET_GS_INTRO_BLASTOISE ; 0f + const SPRITE_ANIM_FRAMESET_GS_INTRO_VENUSAUR ; 10 + const SPRITE_ANIM_FRAMESET_GS_TITLE_FLAME_NOTE ; 11 + const SPRITE_ANIM_FRAMESET_GS_MINIGAME_PIKACHU ; 12 + const SPRITE_ANIM_FRAMESET_GS_MINIGAME_PIKACHU_2 ; 13 + const SPRITE_ANIM_FRAMESET_GS_MINIGAME_PIKACHU_3 ; 14 + const SPRITE_ANIM_FRAMESET_MINIGAME_PICROSS_CURSOR ; 15 + const SPRITE_ANIM_FRAMESET_MINIGAME_PICROSS_DUST ; 16 + const SPRITE_ANIM_FRAMESET_MINIGAME_PICROSS_GOLD ; 17 + const SPRITE_ANIM_FRAMESET_MINIGAME_PICROSS_GOLD_2 ; 18 + const SPRITE_ANIM_FRAMESET_POKEDEX_CURSOR ; 19 + const SPRITE_ANIM_FRAMESET_POKEDEX_SLOWPOKE ; 1a + const SPRITE_ANIM_FRAMESET_POKEDEX_SLOWPOKE_2 ; 1b + const SPRITE_ANIM_FRAMESET_POKEDEX_SLOWPOKE_3 ; 1c + const SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR ; 1d + const SPRITE_ANIM_FRAMESET_GAMEFREAK_LOGO ; 1e + const SPRITE_ANIM_FRAMESET_GS_GAMEFREAK_LOGO_STAR ; 1f + const SPRITE_ANIM_FRAMESET_GS_GAMEFREAK_LOGO_SPARKLE ; 20 + const SPRITE_ANIM_FRAMESET_SLOTS_GOLEM ; 21 + const SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY ; 22 + const SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY_2 ; 23 + const SPRITE_ANIM_FRAMESET_SLOTS_EGG ; 24 + const SPRITE_ANIM_FRAMESET_WALK ; 25 + const SPRITE_ANIM_FRAMESET_STILL_CURSOR ; 26 + const SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL ; 27 + const SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL_WOBBLE ; 28 + const SPRITE_ANIM_FRAMESET_TRADE_POOF ; 29 + const SPRITE_ANIM_FRAMESET_TRADE_TUBE_BULGE ; 2a + const SPRITE_ANIM_FRAMESET_TRADEMON_ICON ; 2b + const SPRITE_ANIM_FRAMESET_TRADEMON_BUBBLE ; 2c + const SPRITE_ANIM_FRAMESET_UNKNOWN ; 2d + const SPRITE_ANIM_FRAMESET_RADIO_FREQUENCY_METER ; 2e +DEF NUM_SPRITE_ANIM_FRAMESETS EQU const_value -DEF SPRITE_ANIM_INDEX_GS_TITLE_FLAME_NOTE EQU $2e - -DEF SPRITE_ANIM_INDEX_MINIGAME_PIKACHU EQU $2f -DEF SPRITE_ANIM_INDEX_MINIGAME_PIKACHU_TAIL EQU $30 -DEF SPRITE_ANIM_INDEX_MINIGAME_NOTE EQU $31 -DEF SPRITE_ANIM_INDEX_MINIGAME_JIGGLYPUFF EQU $32 - -DEF SPRITE_ANIM_INDEX_MINIGAME_PICROSS_CURSOR EQU $33 -DEF SPRITE_ANIM_INDEX_MINIGAME_PICROSS_DUST EQU $34 -DEF SPRITE_ANIM_INDEX_MINIGAME_PICROSS_GOLD EQU $35 - -DEF SPRITE_ANIM_INDEX_39 EQU $39 -DEF SPRITE_ANIM_INDEX_GAMEFREAK_LOGO EQU $3a -DEF SPRITE_ANIM_INDEX_GS_INTRO_STAR EQU $3b -DEF SPRITE_ANIM_INDEX_GS_INTRO_SPARKLE EQU $3c -DEF SPRITE_ANIM_INDEX_SLOTS_GOLEM EQU $3d -DEF SPRITE_ANIM_INDEX_SLOTS_CHANSEY EQU $3e -DEF SPRITE_ANIM_INDEX_SLOTS_EGG EQU $3f - -DEF SPRITE_ANIM_INDEX_40 EQU $40 -DEF SPRITE_ANIM_INDEX_41 EQU $41 -DEF SPRITE_ANIM_INDEX_MEMORY_GAME_CURSOR EQU $43 - -DEF SPRITE_ANIM_INDEX_TRAINERGEAR_POINTER EQU $44 -DEF SPRITE_ANIM_INDEX_RADIO_TUNING_KNOB EQU $4b +; SpriteAnimOAMData indexes (see data/sprite_anims/oam.asm) + const_def + const SPRITE_ANIM_OAMSET_WALK_1 ; 00 + const SPRITE_ANIM_OAMSET_WALK_2 ; 01 + const SPRITE_ANIM_OAMSET_GS_INTRO_BUBBLE_1 ; 02 + const SPRITE_ANIM_OAMSET_GS_INTRO_BUBBLE_2 ; 03 + const SPRITE_ANIM_OAMSET_GS_INTRO_OMANYTE_1 ; 04 + const SPRITE_ANIM_OAMSET_GS_INTRO_OMANYTE_2 ; 05 + const SPRITE_ANIM_OAMSET_GS_INTRO_MAGIKARP_1 ; 06 + const SPRITE_ANIM_OAMSET_GS_INTRO_MAGIKARP_2 ; 07 + const SPRITE_ANIM_OAMSET_UNUSED_INTRO_AERODACTYL ; 08 + const SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_1 ; 09 + const SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_2 ; 0a + const SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_3 ; 0b + const SPRITE_ANIM_OAMSET_GS_INTRO_NOTE ; 0c + const SPRITE_ANIM_OAMSET_GS_INTRO_SMALLER_NOTE ; 0d + const SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_1 ; 0e + const SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_2 ; 0f + const SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_3 ; 10 + const SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_1 ; 11 + const SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_2 ; 12 + const SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_3 ; 13 + const SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_4 ; 14 + const SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_1 ; 15 + const SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_2 ; 16 + const SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_3 ; 17 + const SPRITE_ANIM_OAMSET_GS_INTRO_SMALL_FIREBALL ; 18 + const SPRITE_ANIM_OAMSET_GS_INTRO_MED_FIREBALL ; 19 + const SPRITE_ANIM_OAMSET_GS_INTRO_BIG_FIREBALL ; 1a + const SPRITE_ANIM_OAMSET_GS_INTRO_BLASTOISE ; 1b + const SPRITE_ANIM_OAMSET_GS_INTRO_VENUSAUR ; 1c + const SPRITE_ANIM_OAMSET_GS_TITLE_FLAME_NOTE_1 ; 1d + const SPRITE_ANIM_OAMSET_GS_TITLE_FLAME_NOTE_2 ; 1e + const SPRITE_ANIM_OAMSET_MINIGAME_PICROSS_CURSOR ; 1f + const SPRITE_ANIM_OAMSET_MINIGAME_PICROSS_DUST_1 ; 20 + const SPRITE_ANIM_OAMSET_MINIGAME_PICROSS_DUST_2 ; 21 + const SPRITE_ANIM_OAMSET_POKEDEX_CURSOR ; 22 + const SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_1 ; 23 + const SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_2 ; 24 + const SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_3 ; 25 + const SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_4 ; 26 + const SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_5 ; 27 + const SPRITE_ANIM_OAMSET_TEXT_ENTRY_CURSOR ; 28 + const SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO ; 29 + const SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO_STAR ; 2a + const SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO_SPARKLE_1 ; 2b + const SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO_SPARKLE_2 ; 2c + const SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO_SPARKLE_3 ; 2d + const SPRITE_ANIM_OAMSET_SLOTS_GOLEM_1 ; 2e + const SPRITE_ANIM_OAMSET_SLOTS_GOLEM_2 ; 2f + const SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_1 ; 30 + const SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_2 ; 31 + const SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_3 ; 32 + const SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_4 ; 33 + const SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_5 ; 34 + const SPRITE_ANIM_OAMSET_SLOTS_EGG ; 35 + const SPRITE_ANIM_OAMSET_STILL_CURSOR ; 36 + const SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_1 ; 37 + const SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_2 ; 38 + const SPRITE_ANIM_OAMSET_TRADE_POOF_1 ; 39 + const SPRITE_ANIM_OAMSET_TRADE_POOF_2 ; 3a + const SPRITE_ANIM_OAMSET_TRADE_POOF_3 ; 3b + const SPRITE_ANIM_OAMSET_TRADE_TUBE_BULGE_1 ; 3c + const SPRITE_ANIM_OAMSET_TRADE_TUBE_BULGE_2 ; 3d + const SPRITE_ANIM_OAMSET_TRADEMON_ICON_1 ; 3e + const SPRITE_ANIM_OAMSET_TRADEMON_ICON_2 ; 3f + const SPRITE_ANIM_OAMSET_TRADEMON_BUBBLE ; 40 + const SPRITE_ANIM_OAMSET_UNKNOWN_41 ; 41 + const SPRITE_ANIM_OAMSET_RADIO_FREQUENCY_METER ; 42 diff --git a/constants/type_constants.asm b/constants/type_constants.asm index a8bd17f..1d7d5b0 100644 --- a/constants/type_constants.asm +++ b/constants/type_constants.asm @@ -37,3 +37,5 @@ DEF SPECIAL_TYPES EQU const_value ; 14 DEF TYPES_END EQU const_value ; 1c DEF NUM_TYPES EQU TYPES_END + UNUSED_TYPES - UNUSED_TYPES_END ; 12 + +DEF POKEDEX_TYPE_STRING_LENGTH EQU 5 \ No newline at end of file diff --git a/constants/wram_constants.asm b/constants/wram_constants.asm index 1a21050..237b5b7 100644 --- a/constants/wram_constants.asm +++ b/constants/wram_constants.asm @@ -82,6 +82,15 @@ DEF PLAYER_SURF_PIKA EQU 8 const DEBUG_FIELD_F const CONTINUED_F +; wJumptableIndex:: +DEF JUMPTABLE_INDEX_MASK EQU %01111111 + const_def 7 + shift_const JUMPTABLE_EXIT + +; wCurDexMode:: + const_def + const DEXMODE_NUMBERED + const DEXMODE_ABC ; wToolgearFlags:: DEF SHOW_TOOLGEAR_F EQU 0 @@ -91,3 +100,6 @@ DEF HIDE_TOOLGEAR_F EQU 7 ; wd153:: DEF TOOLGEAR_COORDS_F EQU 0 DEF OVERWORLD_MINUTE_TIME_F EQU 7 + +; wTimeOfDayPalFlags:: +DEF CLEAR_PALSET_F EQU 7 \ No newline at end of file diff --git a/data/moves/effects.inc b/data/moves/effects.inc index c6036e3..c3d0cca 100644 --- a/data/moves/effects.inc +++ b/data/moves/effects.inc @@ -1,5 +1,5 @@ INCLUDE "data/moves/effects_pointers.inc" -;;;; Currently on: $10 ;;;; + NormalHit: checkobedience usedmovetext diff --git a/data/pokemon/cries.asm b/data/pokemon/cries.asm index 1a01957..c6d6b6c 100644 --- a/data/pokemon/cries.asm +++ b/data/pokemon/cries.asm @@ -198,69 +198,69 @@ PokemonCries:: mon_cry CRY_21, 85, 129 ; MON_BELLSPROUT mon_cry CRY_25, 68, 160 ; MON_WEEPINBELL mon_cry CRY_25, 102, 332 ; MON_VICTREEBEL - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 - mon_cry CRY_00, 0, 256 + mon_cry CRY_00, 0, 256 ; MON_HAPPA + mon_cry CRY_00, 0, 256 ; MON_HANAMOGURA + mon_cry CRY_00, 0, 256 ; MON_HANARYU + mon_cry CRY_00, 0, 256 ; MON_HONOGUMA + mon_cry CRY_00, 0, 256 ; MON_VOLBEAR + mon_cry CRY_00, 0, 256 ; MON_DYNABEAR + mon_cry CRY_00, 0, 256 ; MON_KURUSU + mon_cry CRY_00, 0, 256 ; MON_AQUA + mon_cry CRY_00, 0, 256 ; MON_AQUARIA + mon_cry CRY_00, 0, 256 ; MON_HOHO + mon_cry CRY_00, 0, 256 ; MON_BOBO + mon_cry CRY_00, 0, 256 ; MON_PACHIMEE + mon_cry CRY_00, 0, 256 ; MON_MOKOKO + mon_cry CRY_00, 0, 256 ; MON_DENRYU + mon_cry CRY_00, 0, 256 ; MON_MIKON + mon_cry CRY_00, 0, 256 ; MON_MONJA + mon_cry CRY_00, 0, 256 ; MON_JARANJA + mon_cry CRY_00, 0, 256 ; MON_HANEEI + mon_cry CRY_00, 0, 256 ; MON_PUKU + mon_cry CRY_00, 0, 256 ; MON_SHIBIREFUGU + mon_cry CRY_00, 0, 256 ; MON_PICHU + mon_cry CRY_00, 0, 256 ; MON_PY + mon_cry CRY_00, 0, 256 ; MON_PUPURIN + mon_cry CRY_00, 0, 256 ; MON_MIZUUO + mon_cry CRY_00, 0, 256 ; MON_NATY + mon_cry CRY_00, 0, 256 ; MON_NATIO + mon_cry CRY_00, 0, 256 ; MON_GYOPIN + mon_cry CRY_00, 0, 256 ; MON_MARIL + mon_cry CRY_00, 0, 256 ; MON_MANBO1 + mon_cry CRY_00, 0, 256 ; MON_IKARI + mon_cry CRY_00, 0, 256 ; MON_GROTESS + mon_cry CRY_00, 0, 256 ; MON_EKSING + mon_cry CRY_00, 0, 256 ; MON_PARA + mon_cry CRY_00, 0, 256 ; MON_KOKUMO + mon_cry CRY_00, 0, 256 ; MON_TWOHEAD + mon_cry CRY_00, 0, 256 ; MON_YOROIDORI + mon_cry CRY_00, 0, 256 ; MON_ANIMON + mon_cry CRY_00, 0, 256 ; MON_HINAZU + mon_cry CRY_00, 0, 256 ; MON_SUNNY + mon_cry CRY_00, 0, 256 ; MON_PAON + mon_cry CRY_00, 0, 256 ; MON_DONPHAN + mon_cry CRY_00, 0, 256 ; MON_TWINZ + mon_cry CRY_00, 0, 256 ; MON_KIRINRIKI + mon_cry CRY_00, 0, 256 ; MON_PAINTER + mon_cry CRY_00, 0, 256 ; MON_KOUNYA + mon_cry CRY_00, 0, 256 ; MON_RINRIN + mon_cry CRY_00, 0, 256 ; MON_BERURUN + mon_cry CRY_00, 0, 256 ; MON_NYOROTONO + mon_cry CRY_00, 0, 256 ; MON_YADOKING + mon_cry CRY_00, 0, 256 ; MON_ANNON + mon_cry CRY_00, 0, 256 ; MON_REDIBA + mon_cry CRY_00, 0, 256 ; MON_MITSUBOSHI + mon_cry CRY_00, 0, 256 ; MON_PUCHICORN + mon_cry CRY_00, 0, 256 ; MON_EIFIE + mon_cry CRY_00, 0, 256 ; MON_BLACKY + mon_cry CRY_00, 0, 256 ; MON_TURBAN + mon_cry CRY_00, 0, 256 ; MON_BETBABY + mon_cry CRY_00, 0, 256 ; MON_TEPPOUO + mon_cry CRY_00, 0, 256 ; MON_OKUTANK + mon_cry CRY_00, 0, 256 ; MON_GONGU + mon_cry CRY_00, 0, 256 ; fb + mon_cry CRY_00, 0, 256 ; fc + mon_cry CRY_00, 0, 256 ; fd + mon_cry CRY_00, 0, 256 ; fe + mon_cry CRY_00, 0, 256 ; ff diff --git a/data/pokemon/dex_order_alpha.asm b/data/pokemon/dex_order_alpha.inc similarity index 98% rename from data/pokemon/dex_order_alpha.asm rename to data/pokemon/dex_order_alpha.inc index 363316e..193ba09 100644 --- a/data/pokemon/dex_order_alpha.asm +++ b/data/pokemon/dex_order_alpha.inc @@ -1,7 +1,3 @@ -INCLUDE "constants.asm" - -SECTION "data/pokemon/dex_order_alpha.asm", ROMX - ; Every Pokémon sorted alphabetically by name (gojūon order). AlphabeticalPokedexOrder: diff --git a/data/pokemon/menu_icons.asm b/data/pokemon/menu_icons.inc similarity index 99% rename from data/pokemon/menu_icons.asm rename to data/pokemon/menu_icons.inc index 545d82a..4b1a9f9 100644 --- a/data/pokemon/menu_icons.asm +++ b/data/pokemon/menu_icons.inc @@ -1,6 +1,4 @@ -INCLUDE "constants.asm" - -SECTION "data/pokemon/menu_icons.asm", ROMX +; party menu icons MonMenuIcons:: db ICON_BULBASAUR ; 01 BULBASAUR diff --git a/data/predef_pointers.inc b/data/predef_pointers.inc index 0603a78..1166cc9 100644 --- a/data/predef_pointers.inc +++ b/data/predef_pointers.inc @@ -58,8 +58,8 @@ GiveItemPredef:: add_predef Function41fa1 add_predef Function28da4 add_predef Function28d6e - add_predef Function40ac7 - add_predef Function40000 + add_predef NewPokedexEntry + add_predef Pokedex add_predef ConvertMon_1to2 ; 30 add_predef CopyMonToTempMon add_predef ListMoves @@ -89,7 +89,7 @@ GiveItemPredef:: add_predef Function143e0 add_predef CheckSGB add_predef LoadSGBLayout - add_predef Function8786 + add_predef Pokedex_GetArea add_predef DoBattleTransition add_predef Function8c9c6 add_predef Function8c940 ; 50 diff --git a/data/sprite_anims/framesets.inc b/data/sprite_anims/framesets.inc new file mode 100644 index 0000000..f45a1dc --- /dev/null +++ b/data/sprite_anims/framesets.inc @@ -0,0 +1,284 @@ +SpriteAnimFrameData: + dw .Frameset_00 ; SPRITE_ANIM_FRAMESET_00 + dw .Frameset_PartyMon ; SPRITE_ANIM_FRAMESET_PARTY_MON + dw .Frameset_GSIntroBubble ; SPRITE_ANIM_FRAMESET_GS_INTRO_BUBBLE + dw .Frameset_GSIntroOmanyte ; SPRITE_ANIM_FRAMESET_GS_INTRO_OMANYTE + dw .Frameset_GSIntroMagikarp ; SPRITE_ANIM_FRAMESET_GS_INTRO_MAGIKARP + dw .Frameset_UnusedIntroAerodactyl ; SPRITE_ANIM_FRAMESET_UNUSED_INTRO_AERODACTYL + dw .Frameset_GSIntroLapras ; SPRITE_ANIM_FRAMESET_GS_INTRO_LAPRAS + dw .Frameset_GSIntroNote ; SPRITE_ANIM_FRAMESET_GS_INTRO_NOTE + dw .Frameset_GSIntroSmallerNote ; SPRITE_ANIM_FRAMESET_GS_INTRO_SMALLER_NOTE + dw .Frameset_GSIntroJigglypuff ; SPRITE_ANIM_FRAMESET_GS_INTRO_JIGGLYPUFF + dw .Frameset_GSIntroPikachu ; SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU + dw .Frameset_GSIntroPikachu2 ; SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_2 + dw .Frameset_GSIntroPikachuTail ; SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_TAIL + dw .Frameset_GSIntroPikachuTail2 ; SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_TAIL_2 + dw .Frameset_GSIntroFireball ; SPRITE_ANIM_FRAMESET_GS_INTRO_FIREBALL + dw .Frameset_GSIntroBlastoise ; SPRITE_ANIM_FRAMESET_GS_INTRO_BLASTOISE + dw .Frameset_GSIntroVenusaur ; SPRITE_ANIM_FRAMESET_GS_INTRO_VENUSAUR + dw .Frameset_GSTitleFlameNote ; SPRITE_ANIM_FRAMESET_GS_TITLE_FLAME_NOTE + dw .Frameset_GSIntroPikachu ; SPRITE_ANIM_FRAMESET_GS_MINIGAME_PIKACHU + dw .Frameset_GSIntroPikachu2 ; SPRITE_ANIM_FRAMESET_GS_MINIGAME_PIKACHU_2 + dw .Frameset_GSIntroPikachu3 ; SPRITE_ANIM_FRAMESET_GS_MINIGAME_PIKACHU_3 + dw .Frameset_MinigamePicrossCursor ; SPRITE_ANIM_FRAMESET_MINIGAME_PICROSS_CURSOR + dw .Frameset_MinigamePicrossDust ; SPRITE_ANIM_FRAMESET_MINIGAME_PICROSS_DUST + dw .Frameset_MinigamePicrossGold1 ; SPRITE_ANIM_FRAMESET_MINIGAME_PICROSS_GOLD + dw .Frameset_MinigamePicrossGold2 ; SPRITE_ANIM_FRAMESET_MINIGAME_PICROSS_GOLD_2 + dw .Frameset_PokedexCursor ; SPRITE_ANIM_FRAMESET_POKEDEX_CURSOR + dw .Frameset_PokedexSlowpoke1 ; SPRITE_ANIM_FRAMESET_POKEDEX_SLOWPOKE + dw .Frameset_PokedexSlowpoke2 ; SPRITE_ANIM_FRAMESET_POKEDEX_SLOWPOKE_2 + dw .Frameset_PokedexSlowpoke3 ; SPRITE_ANIM_FRAMESET_POKEDEX_SLOWPOKE_3 + dw .Frameset_TextEntryCursor ; SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR + dw .Frameset_GSGameFreakLogo ; SPRITE_ANIM_FRAMESET_GAMEFREAK_LOGO + dw .Frameset_GSGameFreakLogoStar ; SPRITE_ANIM_FRAMESET_GS_GAMEFREAK_LOGO_STAR + dw .Frameset_GSGameFreakLogoSparkle ; SPRITE_ANIM_FRAMESET_GS_GAMEFREAK_LOGO_SPARKLE + dw .Frameset_SlotsGolem ; SPRITE_ANIM_FRAMESET_SLOTS_GOLEM + dw .Frameset_SlotsChansey ; SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY + dw .Frameset_SlotsChansey2 ; SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY_2 + dw .Frameset_SlotsEgg ; SPRITE_ANIM_FRAMESET_SLOTS_EGG + dw .Frameset_Walk ; SPRITE_ANIM_FRAMESET_WALK + dw .Frameset_StillCursor ; SPRITE_ANIM_FRAMESET_STILL_CURSOR + dw .Frameset_TradePokeBall ; SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL + dw .Frameset_TradePokeBallWobble ; SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL_WOBBLE + dw .Frameset_TradePoof ; SPRITE_ANIM_FRAMESET_TRADE_POOF + dw .Frameset_TradeTubeBulge ; SPRITE_ANIM_FRAMESET_TRADE_TUBE_BULGE + dw .Frameset_TrademonIcon ; SPRITE_ANIM_FRAMESET_TRADEMON_ICON + dw .Frameset_TrademonBubble ; SPRITE_ANIM_FRAMESET_TRADEMON_BUBBLE + dw .Frameset_Unknown ; SPRITE_ANIM_FRAMESET_UNKNOWN + dw .Frameset_RadioFrequencyMeter ; SPRITE_ANIM_FRAMESET_RADIO_FREQUENCY_METER + +.Frameset_00: + oamframe SPRITE_ANIM_OAMSET_WALK_1, 32 + oamend + +.Frameset_PartyMon: + oamframe SPRITE_ANIM_OAMSET_WALK_1, 8 + oamframe SPRITE_ANIM_OAMSET_WALK_2, 8 + oamrestart + +.Frameset_Walk: + oamframe SPRITE_ANIM_OAMSET_WALK_1, 8 + oamframe SPRITE_ANIM_OAMSET_WALK_2, 8 + oamframe SPRITE_ANIM_OAMSET_WALK_1, 8 + oamframe SPRITE_ANIM_OAMSET_WALK_2, 8, OAM_X_FLIP + oamrestart + +.Frameset_GSIntroBubble: + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_BUBBLE_1, 8 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_BUBBLE_2, 8 + oamrestart + +.Frameset_GSIntroOmanyte: + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_OMANYTE_1, 8 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_OMANYTE_2, 8 + oamrestart + +.Frameset_GSIntroMagikarp: + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_MAGIKARP_1, 1, OAM_X_FLIP + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_MAGIKARP_2, 1, OAM_X_FLIP + oamrestart + +.Frameset_UnusedIntroAerodactyl: + oamframe SPRITE_ANIM_OAMSET_UNUSED_INTRO_AERODACTYL, 7, OAM_X_FLIP + oamend + +.Frameset_GSIntroLapras: + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_1, 7 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_2, 7 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_3, 15 + oamrestart + +.Frameset_GSIntroNote: + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_NOTE, 8 + oamend + +.Frameset_GSIntroSmallerNote: + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_SMALLER_NOTE, 8 + oamend + +.Frameset_GSIntroJigglypuff: + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_1, 23, OAM_X_FLIP + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_2, 3, OAM_X_FLIP + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_3, 7 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_2, 3 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_1, 23 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_2, 3 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_3, 7 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_2, 3, OAM_X_FLIP + oamrestart + +.Frameset_GSIntroPikachu: + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_1, 3 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_2, 3 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_3, 3 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_4, 3 + oamrestart + +.Frameset_GSIntroPikachu2: + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_2, 8 + oamend + +.Frameset_GSIntroPikachuTail: + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_1, 3 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_2, 3 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_3, 3 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_2, 3 + oamrestart + +.Frameset_GSIntroPikachuTail2: + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_1, 31 + oamend + +.Frameset_GSIntroFireball: + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_SMALL_FIREBALL, 1 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_MED_FIREBALL, 1 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_BIG_FIREBALL, 1 + oamdelete + +.Frameset_GSIntroBlastoise: + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_BLASTOISE, 24 + oamdelete + +.Frameset_GSIntroVenusaur: + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_VENUSAUR, 24, OAM_X_FLIP + oamdelete + +.Frameset_GSTitleFlameNote: + oamframe SPRITE_ANIM_OAMSET_GS_TITLE_FLAME_NOTE_1, 3 + oamframe SPRITE_ANIM_OAMSET_GS_TITLE_FLAME_NOTE_2, 3 + oamrestart + +.Frameset_GSIntroPikachu3: + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_2, 0 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_3, 15 + oamframe SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_4, 15 + oamend + +.Frameset_MinigamePicrossCursor: + oamframe SPRITE_ANIM_OAMSET_MINIGAME_PICROSS_CURSOR, 8 + oamwait 8 + oamrestart + +.Frameset_MinigamePicrossDust: + oamframe SPRITE_ANIM_OAMSET_MINIGAME_PICROSS_DUST_1, 1 + oamframe SPRITE_ANIM_OAMSET_MINIGAME_PICROSS_DUST_2, 1 + oamdelete + +.Frameset_MinigamePicrossGold2: + oamframe SPRITE_ANIM_OAMSET_WALK_2, 3, OAM_X_FLIP + oamframe SPRITE_ANIM_OAMSET_WALK_1, 3 + oamframe SPRITE_ANIM_OAMSET_WALK_2, 3, OAM_X_FLIP + ; fallthrough +.Frameset_MinigamePicrossGold1: + oamframe SPRITE_ANIM_OAMSET_WALK_1, 8 + oamend + +.Frameset_PokedexCursor: + oamframe SPRITE_ANIM_OAMSET_POKEDEX_CURSOR, 1 + oamwait 1 + oamrestart + +.Frameset_PokedexSlowpoke1: + oamframe SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_1, 3 + oamframe SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_2, 3 + oamframe SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_3, 3 + oamframe SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_4, 3 + oamrestart + +.Frameset_PokedexSlowpoke2: + oamframe SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_5, 32 + oamdelete + +.Frameset_PokedexSlowpoke3: + oamframe SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_1, 32 + oamdelete + +.Frameset_TextEntryCursor: + oamframe SPRITE_ANIM_OAMSET_TEXT_ENTRY_CURSOR, 1 + oamwait 1 + oamrestart + +.Frameset_GSGameFreakLogo: + oamframe SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO, 8 + oamend + +.Frameset_GSGameFreakLogoStar: + oamframe SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO_STAR, 3 + oamframe SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO_STAR, 3, OAM_Y_FLIP + oamrestart + +.Frameset_GSGameFreakLogoSparkle: + oamframe SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO_SPARKLE_1, 2 + oamframe SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO_SPARKLE_2, 2 + oamframe SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO_SPARKLE_3, 2 + oamframe SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO_SPARKLE_2, 2 + oamrestart + +.Frameset_SlotsGolem: + oamframe SPRITE_ANIM_OAMSET_SLOTS_GOLEM_1, 7 + oamframe SPRITE_ANIM_OAMSET_SLOTS_GOLEM_2, 7 + oamframe SPRITE_ANIM_OAMSET_SLOTS_GOLEM_1, 7, OAM_Y_FLIP + oamframe SPRITE_ANIM_OAMSET_SLOTS_GOLEM_2, 7, OAM_X_FLIP + oamrestart + +.Frameset_SlotsChansey: + oamframe SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_1, 7 + oamframe SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_2, 7 + oamframe SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_1, 7 + oamframe SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_3, 7 + oamrestart + +.Frameset_SlotsChansey2: + oamframe SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_1, 7 + oamframe SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_4, 7 + oamframe SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_5, 7 + oamframe SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_4, 7 + oamframe SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_1, 7 + oamend + +.Frameset_SlotsEgg: + oamframe SPRITE_ANIM_OAMSET_SLOTS_EGG, 20 + oamend + +.Frameset_StillCursor: + oamframe SPRITE_ANIM_OAMSET_STILL_CURSOR, 32 + oamend + +.Frameset_TradePokeBall: + oamframe SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_1, 32 + oamend + +.Frameset_TradePokeBallWobble: + oamframe SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_1, 3 + oamframe SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_2, 3 + oamframe SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_1, 3 + oamframe SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_2, 3, OAM_X_FLIP + oamrestart + +.Frameset_TradePoof + oamframe SPRITE_ANIM_OAMSET_TRADE_POOF_1, 4 + oamframe SPRITE_ANIM_OAMSET_TRADE_POOF_2, 4 + oamframe SPRITE_ANIM_OAMSET_TRADE_POOF_3, 4 + oamdelete + +.Frameset_TradeTubeBulge: + oamframe SPRITE_ANIM_OAMSET_TRADE_TUBE_BULGE_1, 3 + oamframe SPRITE_ANIM_OAMSET_TRADE_TUBE_BULGE_2, 3 + oamrestart + +.Frameset_TrademonIcon: + oamframe SPRITE_ANIM_OAMSET_TRADEMON_ICON_1, 7 + oamframe SPRITE_ANIM_OAMSET_TRADEMON_ICON_2, 7 + oamrestart + +.Frameset_TrademonBubble: + oamframe SPRITE_ANIM_OAMSET_TRADEMON_BUBBLE, 32 + oamend + +.Frameset_Unknown: + oamframe SPRITE_ANIM_OAMSET_UNKNOWN_41, 32 + oamend + +.Frameset_RadioFrequencyMeter: + oamframe SPRITE_ANIM_OAMSET_RADIO_FREQUENCY_METER, 32 + oamend diff --git a/data/sprite_anims/gfx.inc b/data/sprite_anims/gfx.inc new file mode 100644 index 0000000..5aba7b3 --- /dev/null +++ b/data/sprite_anims/gfx.inc @@ -0,0 +1,61 @@ +MACRO sprite_anim_obj_gfx +; # tiles, gfx pointer + db \1 + dbw \2, \3 +ENDM + +; entries correspond to SPRITE_ANIM_DICT_* constants +SpriteAnimGFX: + ; # tiles, gfx bank, gfx pointer + ; (good chunk of pointers were dummied out to either .DeletedGFX or MenuMonIconGFX) + sprite_anim_obj_gfx 16, $31, MenuMonIconGFX + sprite_anim_obj_gfx 8, BANK(PoliwagIcon), PoliwagIcon ; SPRITE_ANIM_DICT_POLIWAG_ICON + sprite_anim_obj_gfx 8, BANK(JigglypuffIcon), JigglypuffIcon ; SPRITE_ANIM_DICT_JIGGLYPUFF_ICON + sprite_anim_obj_gfx 8, BANK(DiglettIcon), DiglettIcon ; SPRITE_ANIM_DICT_DIGLETT_ICON + sprite_anim_obj_gfx 8, BANK(PikachuIcon), PikachuIcon ; SPRITE_ANIM_DICT_PIKACHU_ICON + sprite_anim_obj_gfx 8, BANK(StaryuIcon), StaryuIcon ; SPRITE_ANIM_DICT_STARYU_ICON + sprite_anim_obj_gfx 8, BANK(MagikarpIcon), MagikarpIcon ; SPRITE_ANIM_DICT_MAGIKARP_ICON + sprite_anim_obj_gfx 8, BANK(PidgeyIcon), PidgeyIcon ; SPRITE_ANIM_DICT_PIDGEY_ICON + sprite_anim_obj_gfx 8, BANK(RhydonIcon), RhydonIcon ; SPRITE_ANIM_DICT_RHYDON_ICON + sprite_anim_obj_gfx 8, BANK(ClefairyIcon), ClefairyIcon ; SPRITE_ANIM_DICT_CLEFAIRY_ICON + sprite_anim_obj_gfx 8, BANK(OddishIcon), OddishIcon ; SPRITE_ANIM_DICT_ODDISH_ICON + sprite_anim_obj_gfx 8, BANK(MushiIcon), MushiIcon ; SPRITE_ANIM_DICT_MUSHI_ICON + sprite_anim_obj_gfx 8, BANK(GengarIcon), GengarIcon ; SPRITE_ANIM_DICT_GENGAR_ICON + sprite_anim_obj_gfx 8, BANK(LaprasIcon), LaprasIcon ; SPRITE_ANIM_DICT_LAPRAS_ICON + sprite_anim_obj_gfx 8, BANK(MrMimeIcon), MrMimeIcon ; SPRITE_ANIM_DICT_MRMIME_ICON + sprite_anim_obj_gfx 8, BANK(LokonIcon), LokonIcon ; SPRITE_ANIM_DICT_LOKON_ICON + sprite_anim_obj_gfx 8, BANK(TaurosIcon), TaurosIcon ; SPRITE_ANIM_DICT_TAUROS_ICON + sprite_anim_obj_gfx 8, BANK(ShellderIcon), ShellderIcon ; SPRITE_ANIM_DICT_SHELLDER_ICON + sprite_anim_obj_gfx 8, BANK(DittoIcon), DittoIcon ; SPRITE_ANIM_DICT_DITTO_ICON + sprite_anim_obj_gfx 8, BANK(OnixIcon), OnixIcon ; SPRITE_ANIM_DICT_ONIX_ICON + sprite_anim_obj_gfx 8, BANK(VoltorbIcon), VoltorbIcon ; SPRITE_ANIM_DICT_VOLTORB_ICON + sprite_anim_obj_gfx 8, BANK(SquirtleIcon), SquirtleIcon ; SPRITE_ANIM_DICT_SQUIRTLE_ICON + sprite_anim_obj_gfx 8, BANK(BulbasaurIcon), BulbasaurIcon ; SPRITE_ANIM_DICT_BULBASAUR_ICON + sprite_anim_obj_gfx 8, BANK(CharmanderIcon), CharmanderIcon ; SPRITE_ANIM_DICT_CHARMANDER_ICON + sprite_anim_obj_gfx 8, BANK(WeedleIcon), WeedleIcon ; SPRITE_ANIM_DICT_WEEDLE_ICON + sprite_anim_obj_gfx 8, BANK(AnnonIcon), AnnonIcon ; SPRITE_ANIM_DICT_ANNON_ICON + sprite_anim_obj_gfx 8, BANK(GeodudeIcon), GeodudeIcon ; SPRITE_ANIM_DICT_GEODUDE_ICON + sprite_anim_obj_gfx 8, BANK(MachopIcon), MachopIcon ; SPRITE_ANIM_DICT_MACHOP_ICON + sprite_anim_obj_gfx 8, BANK(EggIcon), EggIcon ; SPRITE_ANIM_DICT_EGG_ICON + sprite_anim_obj_gfx 8, BANK(TentacoolIcon), TentacoolIcon ; SPRITE_ANIM_DICT_TENTACOOL_ICON + sprite_anim_obj_gfx 8, BANK(ButterfreeIcon), ButterfreeIcon ; SPRITE_ANIM_DICT_BUTTERFREE_ICON + sprite_anim_obj_gfx 8, BANK(ZubatIcon), ZubatIcon ; SPRITE_ANIM_DICT_ZUBAT_ICON + sprite_anim_obj_gfx 8, BANK(SnorlaxIcon), SnorlaxIcon ; SPRITE_ANIM_DICT_SNORLAX_ICON + sprite_anim_obj_gfx 128, $01, .DeletedGFX ; SPRITE_ANIM_DICT_GS_INTRO + sprite_anim_obj_gfx 128, $01, .DeletedGFX ; SPRITE_ANIM_DICT_GS_INTRO_2 + sprite_anim_obj_gfx 128, $01, .DeletedGFX ; SPRITE_ANIM_DICT_GS_INTRO_3 + sprite_anim_obj_gfx 128, $01, .DeletedGFX ; SPRITE_ANIM_DICT_TITLE_FLAME_NOTE + sprite_anim_obj_gfx 16, $37, .DeletedGFX ; SPRITE_ANIM_DICT_MINIGAME_PICROSS + sprite_anim_obj_gfx 16, $11, .DeletedGFX ; SPRITE_ANIM_DICT_TEXT_CURSOR + sprite_anim_obj_gfx 16, $39, .DeletedGFX ; SPRITE_ANIM_DICT_GS_SPLASH + sprite_anim_obj_gfx 16, $24, .DeletedGFX ; SPRITE_ANIM_DICT_SLOTS + sprite_anim_obj_gfx 16, $21, .DeletedGFX ; SPRITE_ANIM_DICT_ARROW_CURSOR + + ; Unused placeholders + sprite_anim_obj_gfx 16, $31, MenuMonIconGFX + sprite_anim_obj_gfx 16, $31, MenuMonIconGFX + sprite_anim_obj_gfx 16, $31, MenuMonIconGFX + sprite_anim_obj_gfx 16, $31, MenuMonIconGFX + sprite_anim_obj_gfx 16, $31, MenuMonIconGFX + +.DeletedGFX diff --git a/data/sprite_anims/oam.inc b/data/sprite_anims/oam.inc new file mode 100644 index 0000000..8d7e2fd --- /dev/null +++ b/data/sprite_anims/oam.inc @@ -0,0 +1,568 @@ +MACRO spriteanimoam +; vtile offset, data pointer + db \1 + dw \2 +ENDM + +SpriteAnimOAMData: + spriteanimoam $00, .OAMData_Walk ; SPRITE_ANIM_OAMSET_WALK_1 + spriteanimoam $04, .OAMData_Walk ; SPRITE_ANIM_OAMSET_WALK_2 + spriteanimoam $4c, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_GS_INTRO_BUBBLE_1 + spriteanimoam $5c, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_GS_INTRO_BUBBLE_2 + spriteanimoam $6c, .OAMData_GSIntroOmanyte ; SPRITE_ANIM_OAMSET_GS_INTRO_OMANYTE_1 + spriteanimoam $6e, .OAMData_GSIntroOmanyte ; SPRITE_ANIM_OAMSET_GS_INTRO_OMANYTE_2 + spriteanimoam $2d, .OAMData_GSIntroMagikarp ; SPRITE_ANIM_OAMSET_GS_INTRO_MAGIKARP_1 + spriteanimoam $4d, .OAMData_GSIntroMagikarp ; SPRITE_ANIM_OAMSET_GS_INTRO_MAGIKARP_2 + spriteanimoam $60, .OAMData_UnusedIntroAerodactyl ; SPRITE_ANIM_OAMSET_UNUSED_INTRO_AERODACTYL + spriteanimoam $00, .OAMData_GSIntroLapras1 ; SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_1 + spriteanimoam $00, .OAMData_GSIntroLapras2 ; SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_2 + spriteanimoam $06, .OAMData_GSIntroLapras3 ; SPRITE_ANIM_OAMSET_GS_INTRO_LAPRAS_3 + spriteanimoam $0c, .OAMData_GSIntroNote ; SPRITE_ANIM_OAMSET_GS_INTRO_NOTE + spriteanimoam $0d, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_GS_INTRO_SMALLER_NOTE + spriteanimoam $00, .OAMData_GSIntroJigglypuffPikachu ; SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_1 + spriteanimoam $04, .OAMData_GSIntroJigglypuffPikachu ; SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_2 + spriteanimoam $08, .OAMData_GSIntroJigglypuffPikachu ; SPRITE_ANIM_OAMSET_GS_INTRO_JIGGLYPUFF_3 + spriteanimoam $40, .OAMData_GSIntroJigglypuffPikachu ; SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_1 + spriteanimoam $44, .OAMData_GSIntroJigglypuffPikachu ; SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_2 + spriteanimoam $48, .OAMData_GSIntroJigglypuffPikachu ; SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_3 + spriteanimoam $4c, .OAMData_GSIntroJigglypuffPikachu ; SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_4 + spriteanimoam $80, .OAMData_GSIntroPikachuTail ; SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_1 + spriteanimoam $85, .OAMData_GSIntroPikachuTail ; SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_2 + spriteanimoam $8a, .OAMData_GSIntroPikachuTail ; SPRITE_ANIM_OAMSET_GS_INTRO_PIKACHU_TAIL_3 + spriteanimoam $00, .OAMData_GSIntroSmallFireball ; SPRITE_ANIM_OAMSET_GS_INTRO_SMALL_FIREBALL + spriteanimoam $01, .OAMData_TradePoofBubble ; SPRITE_ANIM_OAMSET_GS_INTRO_MED_FIREBALL + spriteanimoam $09, .OAMData_GSIntroBigFireball ; SPRITE_ANIM_OAMSET_GS_INTRO_BIG_FIREBALL + spriteanimoam $10, .OAMData_GSIntroVenusaurBlastoise ; SPRITE_ANIM_OAMSET_GS_INTRO_BLASTOISE + spriteanimoam $40, .OAMData_GSIntroVenusaurBlastoise ; SPRITE_ANIM_OAMSET_GS_INTRO_VENUSAUR + spriteanimoam $00, .OAMData_Walk ; SPRITE_ANIM_OAMSET_GS_TITLE_FLAME_NOTE_1 + spriteanimoam $04, .OAMData_Walk ; SPRITE_ANIM_OAMSET_GS_TITLE_FLAME_NOTE_2 + spriteanimoam $00, .OAMData_MinigamePicrossCursor ; SPRITE_ANIM_OAMSET_MINIGAME_PICROSS_CURSOR + spriteanimoam $01, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_MINIGAME_PICROSS_DUST_1 + spriteanimoam $02, .OAMData_Walk ; SPRITE_ANIM_OAMSET_MINIGAME_PICROSS_DUST_1 + spriteanimoam $04, .OAMData_PokedexCursor ; SPRITE_ANIM_OAMSET_POKEDEX_CURSOR + spriteanimoam $00, .OAMData_PokedexSlowpoke1 ; SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_1 + spriteanimoam $00, .OAMData_PokedexSlowpoke2 ; SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_2 + spriteanimoam $00, .OAMData_PokedexSlowpoke3 ; SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_3 + spriteanimoam $00, .OAMData_PokedexSlowpoke4 ; SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_4 + spriteanimoam $00, .OAMData_PokedexSlowpoke5 ; SPRITE_ANIM_OAMSET_POKEDEX_SLOWPOKE_5 + spriteanimoam $00, .OAMData_TextEntryCursor ; SPRITE_ANIM_OAMSET_TEXT_ENTRY_CURSOR + spriteanimoam $00, .OAMData_GSGameFreakLogo ; SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO + spriteanimoam $0f, .OAMData_GSGameFreakLogoStar ; SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO_STAR + spriteanimoam $11, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO_SPARKLE_1 + spriteanimoam $12, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO_SPARKLE_2 + spriteanimoam $13, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_GS_GAMEFREAK_LOGO_SPARKLE_3 + spriteanimoam $00, .OAMData_SlotsGolem ; SPRITE_ANIM_OAMSET_SLOTS_GOLEM_1 + spriteanimoam $08, .OAMData_SlotsGolem ; SPRITE_ANIM_OAMSET_SLOTS_GOLEM_2 + spriteanimoam $10, .OAMData_SlotsChansey1 ; SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_1 + spriteanimoam $10, .OAMData_SlotsChansey2 ; SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_2 + spriteanimoam $10, .OAMData_SlotsChansey3 ; SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_3 + spriteanimoam $10, .OAMData_SlotsChansey4 ; SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_4 + spriteanimoam $10, .OAMData_SlotsChansey5 ; SPRITE_ANIM_OAMSET_SLOTS_CHANSEY_5 + spriteanimoam $3a, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_SLOTS_EGG + spriteanimoam $00, .OAMData_Walk ; SPRITE_ANIM_OAMSET_STILL_CURSOR + spriteanimoam $00, .OAMData_TradePokeBall1 ; SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_1 + spriteanimoam $02, .OAMData_WalkPriority ; SPRITE_ANIM_OAMSET_TRADE_POKE_BALL_2 + spriteanimoam $06, .OAMData_TradePoofBubble ; SPRITE_ANIM_OAMSET_TRADE_POOF_1 + spriteanimoam $0a, .OAMData_TradePoofBubble ; SPRITE_ANIM_OAMSET_TRADE_POOF_2 + spriteanimoam $0e, .OAMData_TradePoofBubble ; SPRITE_ANIM_OAMSET_TRADE_POOF_3 + spriteanimoam $12, .OAMData_GSIntroSmallFireball ; SPRITE_ANIM_OAMSET_TRADE_TUBE_BULGE_1 + spriteanimoam $13, .OAMData_GSIntroSmallFireball ; SPRITE_ANIM_OAMSET_TRADE_TUBE_BULGE_2 + spriteanimoam $00, .OAMData_Walk ; SPRITE_ANIM_OAMSET_TRADEMON_ICON_1 + spriteanimoam $04, .OAMData_Walk ; SPRITE_ANIM_OAMSET_TRADEMON_ICON_2 + spriteanimoam $10, .OAMData_TradePoofBubble ; SPRITE_ANIM_OAMSET_TRADEMON_BUBBLE + spriteanimoam $00, .OAMData_Unknown1 ; SPRITE_ANIM_OAMSET_UNKNOWN_41 + spriteanimoam $00, .OAMData_RadioFrequencyMeter ; SPRITE_ANIM_OAMSET_RADIO_FREQUENCY_METER + +.OAMData_1x1_Palette0: + db 1 + dbsprite -1, -1, 4, 4, $00, 0 + +.OAMData_GSIntroOmanyte: + 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_GSGameFreakLogoStar: + 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 + +; Unreferenced in pokegold +.OAMData_Unknown1: + 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_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 + +; Known as .OAMData_Unknown2 in pokegold +.OAMData_GSIntroVenusaurBlastoise: + 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_Walk: + db 4 + dbsprite -1, -1, 0, 0, $00, 0 + dbsprite 0, -1, 0, 0, $01, 0 + dbsprite -1, 0, 0, 0, $02, 0 + dbsprite 0, 0, 0, 0, $03, 0 + +.OAMData_WalkPriority: + db 4 + dbsprite -1, -1, 0, 0, $00, 0 | PRIORITY + dbsprite 0, -1, 0, 0, $01, 0 | PRIORITY + dbsprite -1, 0, 0, 0, $02, 0 | PRIORITY + dbsprite 0, 0, 0, 0, $03, 0 | PRIORITY + +.OAMData_GSIntroMagikarp: + db 6 + dbsprite -2, -1, 4, 0, $00, 0 + dbsprite -1, -1, 4, 0, $01, 0 + dbsprite 0, -1, 4, 0, $02, 0 + dbsprite -2, 0, 4, 0, $10, 0 + dbsprite -1, 0, 4, 0, $11, 0 + dbsprite 0, 0, 4, 0, $12, 0 + +.OAMData_UnusedIntroAerodactyl: + 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_GSIntroLapras1: +db 27 + dbsprite -3, -3, 0, 0, $00, 0 | PRIORITY + dbsprite -2, -3, 0, 0, $01, 0 | PRIORITY + dbsprite -1, -3, 0, 0, $02, 0 | PRIORITY + dbsprite -3, -2, 0, 0, $10, 0 | PRIORITY + dbsprite -2, -2, 0, 0, $11, 0 | PRIORITY + dbsprite -1, -2, 0, 0, $12, 0 | PRIORITY + dbsprite -3, -1, 0, 0, $20, 0 | PRIORITY + dbsprite -2, -1, 0, 0, $21, 0 | PRIORITY + dbsprite -1, -1, 0, 0, $22, 0 | PRIORITY + dbsprite 0, -1, 0, 0, $23, 0 | PRIORITY + 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_GSIntroLapras2: + db 27 + dbsprite -3, -3, 0, 0, $0d, 0 | PRIORITY + dbsprite -2, -3, 0, 0, $0e, 0 | PRIORITY + dbsprite -1, -3, 0, 0, $0f, 0 | PRIORITY + dbsprite -3, -2, 0, 0, $1d, 0 | PRIORITY + dbsprite -2, -2, 0, 0, $1e, 0 | PRIORITY + dbsprite -1, -2, 0, 0, $1f, 0 | PRIORITY + dbsprite -3, -1, 0, 0, $20, 0 | PRIORITY + dbsprite -2, -1, 0, 0, $21, 0 | PRIORITY + dbsprite -1, -1, 0, 0, $22, 0 | PRIORITY + dbsprite 0, -1, 0, 0, $23, 0 | PRIORITY + 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 29 + dbsprite -3, -3, 0, 0, $00, 0 | PRIORITY + dbsprite -2, -3, 0, 0, $01, 0 | PRIORITY + dbsprite -1, -3, 0, 0, $02, 0 | PRIORITY + dbsprite 0, -3, 0, 0, $03, 0 | PRIORITY + dbsprite -3, -2, 0, 0, $10, 0 | PRIORITY + dbsprite -2, -2, 0, 0, $11, 0 | PRIORITY + dbsprite -1, -2, 0, 0, $12, 0 | PRIORITY + dbsprite 0, -2, 0, 0, $13, 0 | PRIORITY + dbsprite -3, -1, 0, 0, $20, 0 | PRIORITY + dbsprite -2, -1, 0, 0, $21, 0 | PRIORITY + dbsprite -1, -1, 0, 0, $22, 0 | PRIORITY + dbsprite 0, -1, 0, 0, $23, 0 | PRIORITY + dbsprite 1, -1, 0, 0, $24, 0 | PRIORITY + 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_MinigamePicrossCursor: + db 1 + dbsprite -1, -1, 7, 7, $00, 0 + +.OAMData_PokedexCursor: + db 10 + dbsprite 0, -1, 0, 0, $00, 0 + dbsprite 1, -1, 0, 0, $01, 0 + dbsprite 2, -1, 0, 0, $01, 0 + dbsprite 3, -1, 0, 0, $01, 0 + dbsprite 4, -1, 0, 0, $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_PokedexSlowpoke1: + db 15 + dbsprite -2, -2, 4, 0, $06, 0 + dbsprite -1, -2, 4, 0, $07, 0 + dbsprite 0, -2, 4, 0, $08, 0 + dbsprite -2, -1, 4, 0, $09, 0 + dbsprite -1, -1, 4, 0, $0a, 0 + dbsprite 0, -1, 4, 0, $0b, 0 + dbsprite -2, 0, 4, 0, $0c, 0 + dbsprite -1, 0, 4, 0, $0d, 0 + dbsprite 0, 0, 4, 0, $0e, 0 + dbsprite -2, 1, 4, 0, $10, 0 + dbsprite -1, 1, 4, 0, $11, 0 + dbsprite 0, 1, 4, 0, $12, 0 + dbsprite 1, -2, 4, 0, $16, 0 + dbsprite 1, -1, 4, 0, $17, 0 + dbsprite 1, 0, 4, 0, $18, 0 + +.OAMData_PokedexSlowpoke2: + db 15 + dbsprite -2, -2, 4, 0, $06, 0 + dbsprite -1, -2, 4, 0, $07, 0 + dbsprite 0, -2, 4, 0, $08, 0 + dbsprite -2, -1, 4, 0, $09, 0 + dbsprite -1, -1, 4, 0, $0a, 0 + dbsprite 0, -1, 4, 0, $0b, 0 + dbsprite -2, 0, 4, 0, $0c, 0 + dbsprite -1, 0, 4, 0, $0d, 0 + dbsprite 0, 0, 4, 0, $0e, 0 + dbsprite -2, 1, 4, 0, $13, 0 + dbsprite -1, 1, 4, 0, $14, 0 + dbsprite 0, 1, 4, 0, $15, 0 + dbsprite 1, -2, 4, 0, $16, 0 + dbsprite 1, -1, 4, 0, $17, 0 + dbsprite 1, 0, 4, 0, $18, 0 + +.OAMData_PokedexSlowpoke3: + db 15 + dbsprite -2, -2, 4, 0, $08, 0 | X_FLIP + dbsprite -1, -2, 4, 0, $07, 0 | X_FLIP + dbsprite 0, -2, 4, 0, $06, 0 | X_FLIP + dbsprite -2, -1, 4, 0, $09, 0 + dbsprite -1, -1, 4, 0, $0a, 0 + dbsprite 0, -1, 4, 0, $0b, 0 + dbsprite -2, 0, 4, 0, $0c, 0 + dbsprite -1, 0, 4, 0, $0d, 0 + dbsprite 0, 0, 4, 0, $0e, 0 + dbsprite -2, 1, 4, 0, $20, 0 + dbsprite -1, 1, 4, 0, $21, 0 + dbsprite 0, 1, 4, 0, $22, 0 + dbsprite 1, -2, 4, 0, $19, 0 + dbsprite 1, -1, 4, 0, $1a, 0 + dbsprite 1, 0, 4, 0, $18, 0 + +.OAMData_PokedexSlowpoke4: + db 15 + dbsprite -2, -2, 4, 0, $08, 0 | X_FLIP + dbsprite -1, -2, 4, 0, $07, 0 | X_FLIP + dbsprite 0, -2, 4, 0, $06, 0 | X_FLIP + dbsprite -2, -1, 4, 0, $09, 0 + dbsprite -1, -1, 4, 0, $0a, 0 + dbsprite 0, -1, 4, 0, $0b, 0 + dbsprite -2, 0, 4, 0, $0c, 0 + dbsprite -1, 0, 4, 0, $0d, 0 + dbsprite 0, 0, 4, 0, $0e, 0 + dbsprite -2, 1, 4, 0, $10, 0 + dbsprite -1, 1, 4, 0, $11, 0 + dbsprite 0, 1, 4, 0, $12, 0 + dbsprite 1, -2, 4, 0, $19, 0 + dbsprite 1, -1, 4, 0, $1a, 0 + dbsprite 1, 0, 4, 0, $18, 0 + +.OAMData_PokedexSlowpoke5: + db 17 + dbsprite -2, -2, 4, 0, $08, 0 | X_FLIP + dbsprite -1, -2, 4, 0, $07, 0 | X_FLIP + dbsprite 0, -2, 4, 0, $06, 0 | X_FLIP + dbsprite -2, -1, 4, 0, $09, 0 + dbsprite -1, -1, 4, 0, $0f, 0 + dbsprite 0, -1, 4, 0, $0b, 0 + dbsprite -2, 0, 4, 0, $0c, 0 + dbsprite -1, 0, 4, 0, $0d, 0 + dbsprite 0, 0, 4, 0, $0e, 0 + dbsprite -2, 1, 4, 0, $10, 0 + dbsprite -1, 1, 4, 0, $11, 0 + dbsprite 0, 1, 4, 0, $12, 0 + dbsprite 1, -2, 4, 0, $19, 0 + dbsprite 1, -1, 4, 0, $1a, 0 + dbsprite 1, 0, 4, 0, $18, 0 + ; Light bulb + dbsprite -1, -4, 4, 0, $23, 0 + dbsprite -1, -3, 4, 0, $24, 0 + +.OAMData_TextEntryCursor: + db 4 + dbsprite -1, -1, 7, 7, $00, 0 + dbsprite 0, -1, 1, 7, $00, 0 | X_FLIP + dbsprite -1, 0, 7, 1, $00, 0 | Y_FLIP + dbsprite 0, 0, 1, 1, $00, 0 | X_FLIP | Y_FLIP + +.OAMData_GSGameFreakLogo: + db 15 + dbsprite -2, -3, 4, 4, $00, 0 | OBP_NUM + dbsprite -1, -3, 4, 4, $01, 0 | OBP_NUM + dbsprite 0, -3, 4, 4, $02, 0 | OBP_NUM + dbsprite -2, -2, 4, 4, $03, 0 | OBP_NUM + dbsprite -1, -2, 4, 4, $04, 0 | OBP_NUM + dbsprite 0, -2, 4, 4, $05, 0 | OBP_NUM + dbsprite -2, -1, 4, 4, $06, 0 | OBP_NUM + dbsprite -1, -1, 4, 4, $07, 0 | OBP_NUM + dbsprite 0, -1, 4, 4, $08, 0 | OBP_NUM + dbsprite -2, 0, 4, 4, $09, 0 | OBP_NUM + dbsprite -1, 0, 4, 4, $0a, 0 | OBP_NUM + dbsprite 0, 0, 4, 4, $0b, 0 | OBP_NUM + dbsprite -2, 1, 4, 4, $0c, 0 | OBP_NUM + dbsprite -1, 1, 4, 4, $0d, 0 | OBP_NUM + dbsprite 0, 1, 4, 4, $0e, 0 | OBP_NUM + +.OAMData_SlotsGolem: + db 6 + dbsprite -2, -2, 4, 4, $00, 0 | OBP_NUM + dbsprite -1, -2, 4, 4, $02, 0 | OBP_NUM + dbsprite 0, -2, 4, 4, $00, 0 | OBP_NUM | X_FLIP + dbsprite -2, 0, 4, 4, $04, 0 | OBP_NUM + dbsprite -1, 0, 4, 4, $06, 0 | OBP_NUM + dbsprite 0, 0, 4, 4, $04, 0 | OBP_NUM | X_FLIP + +.OAMData_SlotsChansey1: + db 6 + dbsprite -2, -2, 4, 4, $00, 0 | OBP_NUM + dbsprite -1, -2, 4, 4, $02, 0 | OBP_NUM + dbsprite 0, -2, 4, 4, $04, 0 | OBP_NUM + dbsprite -2, 0, 4, 4, $06, 0 | OBP_NUM + dbsprite -1, 0, 4, 4, $08, 0 | OBP_NUM + dbsprite 0, 0, 4, 4, $0a, 0 | OBP_NUM + +.OAMData_SlotsChansey2: + db 6 + dbsprite -2, -2, 4, 4, $00, 0 | OBP_NUM + dbsprite -1, -2, 4, 4, $02, 0 | OBP_NUM + dbsprite 0, -2, 4, 4, $04, 0 | OBP_NUM + dbsprite -2, 0, 4, 4, $0c, 0 | OBP_NUM + dbsprite -1, 0, 4, 4, $0e, 0 | OBP_NUM + dbsprite 0, 0, 4, 4, $10, 0 | OBP_NUM + +.OAMData_SlotsChansey3: + db 6 + dbsprite -2, -2, 4, 4, $00, 0 | OBP_NUM + dbsprite -1, -2, 4, 4, $02, 0 | OBP_NUM + dbsprite 0, -2, 4, 4, $04, 0 | OBP_NUM + dbsprite -2, 0, 4, 4, $12, 0 | OBP_NUM + dbsprite -1, 0, 4, 4, $14, 0 | OBP_NUM + dbsprite 0, 0, 4, 4, $16, 0 | OBP_NUM + +.OAMData_SlotsChansey4: + db 6 + dbsprite -2, -2, 4, 4, $00, 0 | OBP_NUM + dbsprite -1, -2, 4, 4, $02, 0 | OBP_NUM + dbsprite 0, -2, 4, 4, $04, 0 | OBP_NUM + dbsprite -2, 0, 4, 4, $18, 0 | OBP_NUM + dbsprite -1, 0, 4, 4, $1a, 0 | OBP_NUM + dbsprite 0, 0, 4, 4, $1c, 0 | OBP_NUM + +.OAMData_SlotsChansey5: + db 6 + dbsprite -2, -2, 4, 4, $1e, 0 | OBP_NUM + dbsprite -1, -2, 4, 4, $20, 0 | OBP_NUM + dbsprite 0, -2, 4, 4, $22, 0 | OBP_NUM + dbsprite -2, 0, 4, 4, $24, 0 | OBP_NUM + dbsprite -1, 0, 4, 4, $26, 0 | OBP_NUM + dbsprite 0, 0, 4, 4, $28, 0 | OBP_NUM + +.OAMData_RadioFrequencyMeter: + db 4 + dbsprite -1, -2, 4, 0, $00, 0 | OBP_NUM + dbsprite -1, -1, 4, 0, $00, 0 | OBP_NUM + dbsprite -1, 0, 4, 0, $00, 0 | OBP_NUM + dbsprite -1, 1, 4, 0, $00, 0 | OBP_NUM diff --git a/data/sprite_anims/objects.inc b/data/sprite_anims/objects.inc new file mode 100644 index 0000000..f9b8e17 --- /dev/null +++ b/data/sprite_anims/objects.inc @@ -0,0 +1,155 @@ +; Entries correspond to SPRITE_ANIM_OBJ_* constants +SpriteAnimObjects: + ; frameset, sequence, dict +; SPRITE_ANIM_OBJ_00 + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_DEFAULT +; SPRITE_ANIM_OBJ_POLIWAG_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_POLIWAG_ICON +; SPRITE_ANIM_OBJ_JIGGLYPUFF_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_JIGGLYPUFF_ICON +; SPRITE_ANIM_OBJ_DIGLETT_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_DIGLETT_ICON +; SPRITE_ANIM_OBJ_PIKACHU_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_PIKACHU_ICON +; SPRITE_ANIM_OBJ_STARYU_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_STARYU_ICON +; SPRITE_ANIM_OBJ_MAGIKARP_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_MAGIKARP_ICON +; SPRITE_ANIM_OBJ_PIDGEY_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_PIDGEY_ICON +; SPRITE_ANIM_OBJ_RHYDON_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_RHYDON_ICON +; SPRITE_ANIM_OBJ_CLEFAIRY_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_CLEFAIRY_ICON +; SPRITE_ANIM_OBJ_ODDISH_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_ODDISH_ICON +; SPRITE_ANIM_OBJ_MUSHI_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_MUSHI_ICON +; SPRITE_ANIM_OBJ_GENGAR_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_GENGAR_ICON +; SPRITE_ANIM_OBJ_LAPRAS_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_LAPRAS_ICON +; SPRITE_ANIM_OBJ_MRMIME_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_MRMIME_ICON +; SPRITE_ANIM_OBJ_LOKON_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_LOKON_ICON +; SPRITE_ANIM_OBJ_TAUROS_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_TAUROS_ICON +; SPRITE_ANIM_OBJ_SHELLDER_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_SHELLDER_ICON +; SPRITE_ANIM_OBJ_DITTO_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_DITTO_ICON +; SPRITE_ANIM_OBJ_ONIX_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_ONIX_ICON +; SPRITE_ANIM_OBJ_VOLTORB_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_VOLTORB_ICON +; SPRITE_ANIM_OBJ_SQUIRTLE_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_SQUIRTLE_ICON +; SPRITE_ANIM_OBJ_BULBASAUR_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_BULBASAUR_ICON +;SPRITE_ANIM_OBJ_CHARMANDER_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_CHARMANDER_ICON +; SPRITE_ANIM_OBJ_WEEDLE_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_WEEDLE_ICON +; SPRITE_ANIM_OBJ_ANNON_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_ANNON_ICON +; SPRITE_ANIM_OBJ_GEODUDE_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_GEODUDE_ICON +; SPRITE_ANIM_OBJ_MACHOP_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_MACHOP_ICON +; SPRITE_ANIM_OBJ_EGG_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_EGG_ICON +; SPRITE_ANIM_OBJ_TENTACOOL_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_TENTACOOL_ICON +; SPRITE_ANIM_OBJ_BUTTERFREE_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_BUTTERFREE_ICON +; SPRITE_ANIM_OBJ_ZUBAT_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_ZUBAT_ICON +; SPRITE_ANIM_OBJ_SNORLAX_ICON + db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_FUNC_PARTY_MON, SPRITE_ANIM_DICT_SNORLAX_ICON +; SPRITE_ANIM_OBJ_GS_INTRO_BUBBLE + db SPRITE_ANIM_FRAMESET_GS_INTRO_BUBBLE, SPRITE_ANIM_FUNC_GS_INTRO_BUBBLE, SPRITE_ANIM_DICT_GS_INTRO +; SPRITE_ANIM_OBJ_GS_INTRO_OMANYTE + db SPRITE_ANIM_FRAMESET_GS_INTRO_OMANYTE, SPRITE_ANIM_FUNC_GS_INTRO_OMANYTE, SPRITE_ANIM_DICT_GS_INTRO +; SPRITE_ANIM_OBJ_GS_INTRO_MAGIKARP + db SPRITE_ANIM_FRAMESET_GS_INTRO_MAGIKARP, SPRITE_ANIM_FUNC_GS_INTRO_MAGIKARP, SPRITE_ANIM_DICT_GS_INTRO +; SPRITE_ANIM_OBJ_UNUSED_INTRO_AERODACTYL + db SPRITE_ANIM_FRAMESET_UNUSED_INTRO_AERODACTYL, SPRITE_ANIM_FUNC_UNUSED_INTRO_AERODACTYL, SPRITE_ANIM_DICT_GS_INTRO +; SPRITE_ANIM_OBJ_GS_INTRO_LAPRAS + db SPRITE_ANIM_FRAMESET_GS_INTRO_LAPRAS, SPRITE_ANIM_FUNC_GS_INTRO_LAPRAS, SPRITE_ANIM_DICT_GS_INTRO +; SPRITE_ANIM_OBJ_GS_INTRO_NOTE + db SPRITE_ANIM_FRAMESET_GS_INTRO_NOTE, SPRITE_ANIM_FUNC_GS_INTRO_NOTE, SPRITE_ANIM_DICT_GS_INTRO_2 +; SPRITE_ANIM_OBJ_GS_INTRO_SMALLER_NOTE + db SPRITE_ANIM_FRAMESET_GS_INTRO_SMALLER_NOTE, SPRITE_ANIM_FUNC_GS_INTRO_NOTE, SPRITE_ANIM_DICT_GS_INTRO_2 +; SPRITE_ANIM_OBJ_GS_INTRO_JIGGLYPUFF + db SPRITE_ANIM_FRAMESET_GS_INTRO_JIGGLYPUFF, SPRITE_ANIM_FUNC_GS_INTRO_JIGGLYPUFF, SPRITE_ANIM_DICT_GS_INTRO_2 +; SPRITE_ANIM_OBJ_GS_INTRO_PIKACHU + db SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU, SPRITE_ANIM_FUNC_GS_INTRO_PIKACHU, SPRITE_ANIM_DICT_GS_INTRO_2 +; SPRITE_ANIM_OBJ_GS_INTRO_PIKACHU_TAIL + db SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_TAIL, SPRITE_ANIM_FUNC_GS_INTRO_PIKACHU_TAIL, SPRITE_ANIM_DICT_GS_INTRO_2 +; SPRITE_ANIM_OBJ_GS_INTRO_FIREBALL + db SPRITE_ANIM_FRAMESET_GS_INTRO_FIREBALL, SPRITE_ANIM_FUNC_GS_INTRO_FIREBALL, SPRITE_ANIM_DICT_GS_INTRO_3 +; SPRITE_ANIM_OBJ_GS_INTRO_BLASTOISE + db SPRITE_ANIM_FRAMESET_GS_INTRO_BLASTOISE, SPRITE_ANIM_FUNC_GS_INTRO_BLASTOISE, SPRITE_ANIM_DICT_GS_INTRO_3 +; SPRITE_ANIM_OBJ_GS_INTRO_VENUSAUR + db SPRITE_ANIM_FRAMESET_GS_INTRO_VENUSAUR, SPRITE_ANIM_FUNC_GS_INTRO_VENUSAUR, SPRITE_ANIM_DICT_GS_INTRO_3 +; SPRITE_ANIM_OBJ_GS_TITLE_FLAME_NOTE + db SPRITE_ANIM_FRAMESET_GS_TITLE_FLAME_NOTE, SPRITE_ANIM_FUNC_GS_TITLE_FLAME_NOTE, SPRITE_ANIM_DICT_TITLE_FLAME_NOTE +; SPRITE_ANIM_OBJ_MINIGAME_PIKACHU + db SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU, SPRITE_ANIM_FUNC_MINIGAME_PIKACHU, SPRITE_ANIM_DICT_GS_INTRO_2 +; SPRITE_ANIM_OBJ_MINIGAME_PIKACHU_TAIL + db SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_TAIL, SPRITE_ANIM_FUNC_MINIGAME_PIKACHU_TAIL, SPRITE_ANIM_DICT_GS_INTRO_2 +; SPRITE_ANIM_OBJ_MINIGAME_NOTE + db SPRITE_ANIM_FRAMESET_GS_INTRO_NOTE, SPRITE_ANIM_FUNC_MINIGAME_NOTE, SPRITE_ANIM_DICT_GS_INTRO_2 +; SPRITE_ANIM_OBJ_MINIGAME_JIGGLYPUFF + db SPRITE_ANIM_FRAMESET_GS_INTRO_JIGGLYPUFF, SPRITE_ANIM_FUNC_MINIGAME_JIGGLYPUFF, SPRITE_ANIM_DICT_GS_INTRO_2 +; SPRITE_ANIM_OBJ_MINIGAME_PICROSS_CURSOR + db SPRITE_ANIM_FRAMESET_MINIGAME_PICROSS_CURSOR, SPRITE_ANIM_FUNC_MINIGAME_PICROSS_CURSOR, SPRITE_ANIM_DICT_MINIGAME_PICROSS +; SPRITE_ANIM_OBJ_MINIGAME_PICROSS_DUST + db SPRITE_ANIM_FRAMESET_MINIGAME_PICROSS_DUST, SPRITE_ANIM_FUNC_NULL, SPRITE_ANIM_DICT_MINIGAME_PICROSS +; SPRITE_ANIM_OBJ_MINIGAME_PICROSS_GOLD + db SPRITE_ANIM_FRAMESET_MINIGAME_PICROSS_GOLD, SPRITE_ANIM_FUNC_MINIGAME_PICROSS_DUST, SPRITE_ANIM_DICT_GS_INTRO_2 +; SPRITE_ANIM_OBJ_POKEDEX_HAND_CURSOR + db SPRITE_ANIM_FRAMESET_MINIGAME_PICROSS_GOLD, SPRITE_ANIM_FUNC_POKEDEX_HAND_CURSOR, SPRITE_ANIM_DICT_TEXT_CURSOR +; SPRITE_ANIM_OBJ_POKEDEX_CURSOR + db SPRITE_ANIM_FRAMESET_POKEDEX_CURSOR, SPRITE_ANIM_FUNC_POKEDEX_CURSOR, SPRITE_ANIM_DICT_TEXT_CURSOR +; SPRITE_ANIM_OBJ_POKEDEX_SLOWPOKE + db SPRITE_ANIM_FRAMESET_POKEDEX_SLOWPOKE, SPRITE_ANIM_FUNC_POKEDEX_SLOWPOKE, SPRITE_ANIM_DICT_TEXT_CURSOR +; SPRITE_ANIM_OBJ_NAMING_SCREEN_CURSOR + db SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR, SPRITE_ANIM_FUNC_NAMING_SCREEN_CURSOR, SPRITE_ANIM_DICT_TEXT_CURSOR +; SPRITE_ANIM_OBJ_GAMEFREAK_LOGO + db SPRITE_ANIM_FRAMESET_GAMEFREAK_LOGO, SPRITE_ANIM_FUNC_GAMEFREAK_LOGO, SPRITE_ANIM_DICT_GS_SPLASH +; SPRITE_ANIM_OBJ_GS_INTRO_STAR + db SPRITE_ANIM_FRAMESET_GS_GAMEFREAK_LOGO_STAR, SPRITE_ANIM_FUNC_GS_GAMEFREAK_LOGO_STAR, SPRITE_ANIM_DICT_GS_SPLASH +; SPRITE_ANIM_OBJ_GS_INTRO_SPARKLE + db SPRITE_ANIM_FRAMESET_GS_GAMEFREAK_LOGO_SPARKLE, SPRITE_ANIM_FUNC_GS_GAMEFREAK_LOGO_SPARKLE, SPRITE_ANIM_DICT_GS_SPLASH +; SPRITE_ANIM_OBJ_SLOTS_GOLEM + db SPRITE_ANIM_FRAMESET_SLOTS_GOLEM, SPRITE_ANIM_FUNC_SLOTS_GOLEM, SPRITE_ANIM_DICT_SLOTS +; SPRITE_ANIM_OBJ_SLOTS_CHANSEY + db SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY, SPRITE_ANIM_FUNC_SLOTS_CHANSEY, SPRITE_ANIM_DICT_SLOTS +; SPRITE_ANIM_OBJ_SLOTS_EGG + db SPRITE_ANIM_FRAMESET_SLOTS_EGG, SPRITE_ANIM_FUNC_SLOTS_EGG, SPRITE_ANIM_DICT_SLOTS +; SPRITE_ANIM_OBJ_MAIL_WRITING_CURSOR + db SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR, SPRITE_ANIM_FUNC_MAIL_CURSOR, SPRITE_ANIM_DICT_TEXT_CURSOR +; SPRITE_ANIM_OBJ_MAP_CHARACTER_ICON + db SPRITE_ANIM_FRAMESET_WALK, SPRITE_ANIM_FUNC_NULL, SPRITE_ANIM_DICT_DEFAULT +; SPRITE_ANIM_OBJ_POKER_CURSOR + db SPRITE_ANIM_FRAMESET_STILL_CURSOR, SPRITE_ANIM_FUNC_POKER_CURSOR, SPRITE_ANIM_DICT_ARROW_CURSOR +; SPRITE_ANIM_OBJ_MEMORY_GAME_CURSOR + db SPRITE_ANIM_FRAMESET_STILL_CURSOR, SPRITE_ANIM_FUNC_MEMORY_GAME_CURSOR, SPRITE_ANIM_DICT_ARROW_CURSOR +; SPRITE_ANIM_OBJ_TRAINERGEAR_POINTER + db SPRITE_ANIM_FRAMESET_STILL_CURSOR, SPRITE_ANIM_FUNC_TRAINERGEAR_POINTER, SPRITE_ANIM_DICT_ARROW_CURSOR +; SPRITE_ANIM_OBJ_TRADE_POKE_BALL + db SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL, SPRITE_ANIM_FUNC_TRADE_POKE_BALL, SPRITE_ANIM_DICT_DEFAULT +; SPRITE_ANIM_OBJ_TRADE_POOF + db SPRITE_ANIM_FRAMESET_TRADE_POOF, SPRITE_ANIM_FUNC_NULL, SPRITE_ANIM_DICT_DEFAULT +; SPRITE_ANIM_OBJ_TRADE_TUBE_BULGE + db SPRITE_ANIM_FRAMESET_TRADE_TUBE_BULGE, SPRITE_ANIM_FUNC_TRADE_TUBE_BULGE, SPRITE_ANIM_DICT_DEFAULT +; SPRITE_ANIM_OBJ_TRADEMON_ICON + db SPRITE_ANIM_FRAMESET_TRADEMON_ICON, SPRITE_ANIM_FUNC_TRADEMON_IN_TUBE, SPRITE_ANIM_DICT_DEFAULT +; SPRITE_ANIM_OBJ_TRADEMON_BUBBLE + db SPRITE_ANIM_FRAMESET_TRADEMON_BUBBLE, SPRITE_ANIM_FUNC_TRADEMON_IN_TUBE, SPRITE_ANIM_DICT_DEFAULT +; SPRITE_ANIM_OBJ_4A + db SPRITE_ANIM_FRAMESET_UNKNOWN, SPRITE_ANIM_FUNC_UNKNOWN, SPRITE_ANIM_DICT_DEFAULT +; SPRITE_ANIM_OBJ_RADIO_FREQUENCY_METER + db SPRITE_ANIM_FRAMESET_RADIO_FREQUENCY_METER, SPRITE_ANIM_FUNC_RADIO_FREQUENCY_METER, SPRITE_ANIM_DICT_DEFAULT diff --git a/data/types/search_strings.asm b/data/types/search_strings.inc similarity index 86% rename from data/types/search_strings.asm rename to data/types/search_strings.inc index 5d33134..c817fef 100644 --- a/data/types/search_strings.asm +++ b/data/types/search_strings.inc @@ -1,6 +1,6 @@ -INCLUDE "constants.asm" +;INCLUDE "constants.asm" -SECTION "data/types/search_strings.asm", ROMX +;SECTION "data/types/search_strings.asm", ROMX PokedexTypeSearchStrings:: db "ノーマル@" ; NORMAL diff --git a/data/types/search_types.asm b/data/types/search_types.inc similarity index 79% rename from data/types/search_types.asm rename to data/types/search_types.inc index abcb0db..630af15 100644 --- a/data/types/search_types.asm +++ b/data/types/search_types.inc @@ -1,7 +1,3 @@ -INCLUDE "constants.asm" - -SECTION "data/types/search_types.asm", ROMX - PokedexTypeSearchConversionTable:: db TYPE_NORMAL db TYPE_FIRE diff --git a/engine/dumps/bank02.asm b/engine/dumps/bank02.asm index d146b26..d5803ae 100755 --- a/engine/dumps/bank02.asm +++ b/engine/dumps/bank02.asm @@ -917,9 +917,9 @@ Data8660: dw $19 Function86a0: - call Function881e - ld hl, InitEffectObject - ld a, BANK(InitEffectObject) + call InitTownMap + ld hl, ClearSpriteAnims + ld a, BANK(ClearSpriteAnims) call FarCall_hl call PlaceGoldInMap call WaitBGMap @@ -927,8 +927,8 @@ Function86a0: .sub_86b4 call DelayFrame call GetJoypadDebounced - ld hl, EffectObjectJumpNoDelay - ld a, BANK(EffectObjectJumpNoDelay) + ld hl, PlaySpriteAnimations + ld a, BANK(PlaySpriteAnimations) call FarCall_hl ld hl, hJoyDown ld a, [hl] @@ -937,13 +937,13 @@ Function86a0: ret FlyMap: - ld hl, hJoyDebounceSrc + ld hl, hInMenu ld a, [hl] push af ld [hl], $01 - call Function881e - ld hl, InitEffectObject - ld a, BANK(InitEffectObject) + call InitTownMap + ld hl, ClearSpriteAnims + ld a, BANK(ClearSpriteAnims) call FarCall_hl call PlaceGoldInMap call Function88b3 @@ -962,7 +962,7 @@ FlyMap: call DelayFrame call GetJoypadDebounced - callfar EffectObjectJumpNoDelay + callfar PlaySpriteAnimations ld hl, hJoyDown ld a, [hl] @@ -998,10 +998,11 @@ FlyMap: ld [wFlyDestination], a .sub_8743 pop af - ldh [hJoyDebounceSrc], a + ldh [hInMenu], a ret -Function8747: ; Choose fly destination based on D-Pad input +; Choose fly destination based on D-Pad input +Function8747: ld a, [wFlyDestination] ld l, a ld h, $00 @@ -1036,61 +1037,66 @@ Function8747: ; Choose fly destination based on D-Pad input Text8776: db "とびさき を えらんでください@" -Function8786: - ld a, [wFlyDestination] +Pokedex_GetArea: + ld a, [wNestIconBlinkCounter] push af xor a - ld [wFlyDestination], a - call Function881e + ld [wNestIconBlinkCounter], a + + call InitTownMap ld de, PokedexNestIconGFX - ld hl, vChars0 + $7f0 - lb bc, BANK(PokedexNestIconGFX), $01 + ld hl, vChars0 + 127 tiles + lb bc, BANK(PokedexNestIconGFX), 1 call Request1bpp + call GetPokemonName - coord hl, 4, 15 + hlcoord 4, 15 call PlaceString - coord hl, 9, 15 - ld de, Text87e4 + + hlcoord 9, 15 + ld de, .String_SNest call PlaceString + call WaitBGMap call SetPalettes xor a ldh [hBGMapMode], a ld hl, wTileMap - ld bc, $0168 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT xor a call ByteFill - ld hl, Function3e9dc - ld a, BANK(Function3e9dc) - call FarCall_hl -.sub_87ca - call Function87ea + callfar FindNest +.loop + call .PlaceNest call GetJoypadDebounced ldh a, [hJoyDown] - and $03 - jr nz, .sub_87df - ld hl, wFlyDestination + and A_BUTTON | B_BUTTON + jr nz, .done + + ld hl, wNestIconBlinkCounter inc [hl] call DelayFrame - jr .sub_87ca -.sub_87df + jr .loop +.done pop af - ld [wFlyDestination], a + ld [wNestIconBlinkCounter], a ret -Text87e4: +.String_SNest: db "の すみか@" -Function87ea: - ld a, [wFlyDestination] +.PlaceNest: + ld a, [wNestIconBlinkCounter] and $10 - jr z, .sub_881a + jr z, .done_nest + ld de, wTileMap - ld hl, wShadowOAM -.sub_87f7 + ld hl, wShadowOAMSprite00 +.nestloop ld a, [de] and a ret z + push de push hl ld e, a @@ -1100,89 +1106,105 @@ Function87ea: add hl, de ld e, l ld d, h + + ; load into OAM pop hl +; X position ld a, [de] inc de - sub $04 + sub 4 ld [hli], a +; Y position ld a, [de] inc de - sub $04 + sub 4 ld [hli], a +; Nest icon -> Tile ID ld a, $7f ld [hli], a +; Blank out attributes xor a ld [hli], a + pop de inc de - jr .sub_87f7 -.sub_881a + jr .nestloop +.done_nest call ClearSprites ret -Function881e: +InitTownMap: call ClearBGPalettes call ClearTileMap call UpdateSprites call DisableLCD + ld hl, TownMapGFX ld de, vTilesetEnd ld bc, TownMapGFX.End - TownMapGFX ld a, BANK(TownMapGFX) call FarCopyData + ld hl, wTileMap call DecompTownMapTilemap - coord hl, 0, 13 - ld b, $03 - ld c, $12 + hlcoord 0, 13 + ld b, 3 + ld c, 18 call DrawTextBox - ld a, $03 + + ld a, 3 call UpdateSoundNTimes call EnableLCD - ld b, $02 + ld b, SGB_TOWN_MAP call GetSGBLayout ret DecompTownMapTilemap: ld de, TownMapTilemap -.sub_8859 +.loop ld a, [de] and a ret z + ld b, a inc de ld a, [de] ld c, a ld a, b add $60 -.sub_8863 +.keep_placing_tile ld [hli], a dec c - jr nz, .sub_8863 + jr nz, .keep_placing_tile inc de - jr .sub_8859 + jr .loop PlaceGoldInMap: ld de, GoldSpriteGFX ld hl, vChars0 lb bc, BANK(GoldSpriteGFX), $04 call Request2bpp - ld de, GoldSpriteGFX + LEN_2BPP_TILE * 12 ; Gold's front-facing walking sprite + + ld de, GoldSpriteGFX + 12 tiles ld hl, vChars0 + $40 lb bc, BANK(GoldSpriteGFX), $04 call Request2bpp + depixel 0, 0 - ld a, SPRITE_ANIM_INDEX_41 + ld a, SPRITE_ANIM_OBJ_MAP_CHARACTER_ICON call InitSpriteAnimStruct - ld hl, $0003 + + ld hl, SPRITEANIMSTRUCT_TILE_ID add hl, bc ld [hl], $00 + push bc ld a, [wMapGroup] ld b, a ld a, [wMapId] ld c, a call GetWorldMapLocation + ld e, a ld d, $00 ld hl, LandmarkPositions @@ -1192,29 +1214,32 @@ PlaceGoldInMap: inc hl ld e, [hl] pop bc - ld hl, $0004 + ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc ld [hl], e - ld hl, $0005 + ld hl, SPRITEANIMSTRUCT_YCOORD add hl, bc ld [hl], d ret Function88b3: ld de, PidgeySpriteGFX - ld hl, vChars0 + $80 - lb bc, BANK(PidgeySpriteGFX), $04 + ld hl, vChars0 + 8 tiles + lb bc, BANK(PidgeySpriteGFX), 4 call Request2bpp - ld de, PidgeySpriteGFX + $c0 - ld hl, vChars0 + $c0 - lb bc, BANK(PidgeySpriteGFX), $04 + + ld de, PidgeySpriteGFX + 12 tiles + ld hl, vChars0 + 12 tiles + lb bc, BANK(PidgeySpriteGFX), 4 call Request2bpp + depixel 0, 0 - ld a, SPRITE_ANIM_INDEX_41 + ld a, SPRITE_ANIM_OBJ_MAP_CHARACTER_ICON call InitSpriteAnimStruct - ld hl, $0003 + + ld hl, SPRITEANIMSTRUCT_TILE_ID add hl, bc - ld [hl], $08 + ld [hl], 8 ret TownMapTilemap: diff --git a/engine/dumps/bank03.asm b/engine/dumps/bank03.asm index 49b7980..c302ad6 100755 --- a/engine/dumps/bank03.asm +++ b/engine/dumps/bank03.asm @@ -2088,7 +2088,7 @@ Function60a0: call ClearSprites ld a, [wCurPartySpecies] ld [wce37], a - predef Function40ac7 + predef NewPokedexEntry call LoadTilesetGFX_LCDOff .sub_e10d ld hl, GotItText @@ -2780,8 +2780,8 @@ Function6734: ld a, BANK(LoadPokeDexGraphics) call FarCall_hl call ClearTileMap - ld hl, Function40b07 - ld a, BANK(Function40b07) + ld hl, _NewPokedexEntry + ld a, BANK(_NewPokedexEntry) call FarCall_hl call ClearBGPalettes ld hl, wVramState @@ -3247,7 +3247,7 @@ PokeBallEffect: call ClearSprites ld a, [wEnemyMonSpecies] ld [wce37], a - predef Function40ac7 + predef NewPokedexEntry .sub_eac7 ld a, [wPartyCount] cp $06 diff --git a/engine/dumps/bank09.asm b/engine/dumps/bank09.asm index 8b02d9c..9d52ff4 100644 --- a/engine/dumps/bank09.asm +++ b/engine/dumps/bank09.asm @@ -395,7 +395,7 @@ _InitScrollingMenu:: ld [wMenuJoypad], a ldh [hBGMapMode], a inc a - ldh [hJoyDebounceSrc], a + ldh [hInMenu], a ld hl, wce5f set 4, [hl] call asm_243c3 @@ -415,7 +415,7 @@ _ScrollingMenu:: .asm_24296 ld [wMenuJoypad], a ld a, $00 - ldh [hJoyDebounceSrc], a + ldh [hInMenu], a ld hl, wce5f res 4, [hl] ret @@ -1910,13 +1910,13 @@ asm_24ca0: asm_24ca2: call DelayFrame - ldh a, [hJoyDebounceSrc] + ldh a, [hInMenu] push af ld a, $01 - ldh [hJoyDebounceSrc], a + ldh [hInMenu], a call GetJoypadDebounced pop af - ldh [hJoyDebounceSrc], a + ldh [hInMenu], a ldh a, [hJoyDown] bit 1, a jr nz, asm_24cd0 diff --git a/engine/dumps/bank0b.asm b/engine/dumps/bank0b.asm index 15ac5c7..139ad8d 100644 --- a/engine/dumps/bank0b.asm +++ b/engine/dumps/bank0b.asm @@ -21,10 +21,10 @@ INCLUDE "data/items/descriptions.inc" Function2d2fc: ld a, $1 - ldh [hJoyDebounceSrc], a + ldh [hInMenu], a call sub_2d436 ld a, $0 - ldh [hJoyDebounceSrc], a + ldh [hInMenu], a ret nc call PlaceHollowCursor call WaitBGMap diff --git a/engine/dumps/bank0e.asm b/engine/dumps/bank0e.asm index 8247d48..e4ac2e9 100644 --- a/engine/dumps/bank0e.asm +++ b/engine/dumps/bank0e.asm @@ -2,6 +2,59 @@ INCLUDE "constants.asm" SECTION "engine/dumps/bank0e.asm", ROMX +StageBallTilesData: + ld a, [de] + push af + ld de, wBattleHUDTiles + ld c, PARTY_LENGTH + ld a, $34 ; empty slot +.loop1 + ld [de], a + inc de + dec c + jr nz, .loop1 + pop af + + ld de, wBattleHUDTiles +.loop2 + push af + call .GetHUDTile + inc de + pop af + dec a + jr nz, .loop2 + ret + +.GetHUDTile: + ld a, [hli] + and a + jr nz, .got_hp + ld a, [hl] + and a + ld b, $33 ; fainted + jr z, .fainted +.got_hp + dec hl + dec hl + dec hl + ld a, [hl] + and a + ld b, $32 ; statused + jr nz, .load + dec b + jr .load + +.fainted + dec hl + dec hl + dec hl +.load + ld a, b + ld [de], a + ld bc, PARTYMON_STRUCT_LENGTH + MON_HP - MON_STATUS + add hl, bc + ret + DrawPlayerHUDBorder:: ld hl, .tiles ld de, wTrainerHUDTiles @@ -69,11 +122,11 @@ PlaceHUDBorderTiles:: ld [hl], a ret -Function38431:: - call $4488 +LinkBattle_TrainerHuds:: + call LoadBallIconGFX ld hl, wPartyMon1HP ld de, wPartyCount - call $4391 + call StageBallTilesData ld hl, wPlaceBallsX ld a, 10 * TILE_WIDTH ld [hli], a @@ -81,11 +134,11 @@ Function38431:: ld a, TILE_WIDTH ld [wPlaceBallsDirection], a ld hl, wShadowOAMSprite00 - call $4467 + call LoadTrainerHudOAM ld hl, wOTPartyMon1HP ld de, wOTPartyCount - call $4391 + call StageBallTilesData ld hl, wPlaceBallsX ld a, 10 * TILE_WIDTH @@ -115,3 +168,9 @@ LoadTrainerHudOAM: dec c jr nz, .loop ret + +LoadBallIconGFX: + ld de, PokeBallsGFX + ld hl, vChars0 + 49 tiles + lb bc, 14, 4 + jp Request2bpp diff --git a/engine/dumps/bank0f.asm b/engine/dumps/bank0f.asm index f4f10e3..1a82c80 100644 --- a/engine/dumps/bank0f.asm +++ b/engine/dumps/bank0f.asm @@ -5724,13 +5724,13 @@ asm_3e999: _LoadWildMons: xor a ld hl, wWildMons - ld bc, $29 + ld bc, GRASS_WILDDATA_LENGTH call ByteFill ld a, [wMapGroup] ld d, a ld a, [wMapId] ld e, a - ld bc, $29 + ld bc, GRASS_WILDDATA_LENGTH ld hl, GrassWildMons .find ld a, [hl] @@ -5750,88 +5750,90 @@ _LoadWildMons: inc hl inc hl ld de, wWildMons - ld bc, $27 + ld bc, GRASS_WILDDATA_LENGTH - 2 jp CopyBytes -Function3e9dc: - ld hl, wTileMap - ld bc, $0168 +; Load nest landmarks into wTilemap[0,0] +FindNest: + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT xor a call ByteFill ld hl, GrassWildMons - ld de, wTileMap + decoord 0, 0 -asm_3e9ec: +.FindGrass: ld a, [hl] - cp $ff - jr z, asm_3ea0d + cp -1 + jr z, .done + push hl ld b, a inc hl ld c, [hl] - call sub_3ea0e - jr nc, asm_3ea06 + call .SearchMapForMon + jr nc, .next_grass + push de call GetWorldMapLocation - call sub_3ea27 + call .AppendNest pop de - jr c, asm_3ea06 + jr c, .next_grass ld [de], a inc de -asm_3ea06: +.next_grass pop hl - ld bc, $29 + ld bc, GRASS_WILDDATA_LENGTH add hl, bc - jr asm_3e9ec + jr .FindGrass -asm_3ea0d: +.done: ret -sub_3ea0e: +.SearchMapForMon: +rept 5 inc hl - inc hl - inc hl - inc hl - inc hl - ld a, $12 +endr + ld a, NUM_GRASSMON * 3 -asm_3ea15: +.ScanMapLoop: push af - ld a, [wNumSetBits] + ld a, [wNamedObjectIndexBuffer] cp [hl] - jr z, asm_3ea24 + jr z, .found inc hl inc hl pop af dec a - jr nz, asm_3ea15 + jr nz, .ScanMapLoop and a ret -asm_3ea24: +.found pop af scf ret -sub_3ea27: +.AppendNest: ld c, a ld hl, wTileMap - ld de, $0168 - -asm_3ea2e: + ld de, SCREEN_WIDTH * SCREEN_HEIGHT +.AppendNestLoop: ld a, [hli] cp c - jr z, asm_3ea3a + jr z, .found_nest + dec de ld a, e or d - jr nz, asm_3ea2e + jr nz, .AppendNestLoop + ld a, c and a ret -asm_3ea3a: +.found_nest scf ret @@ -6727,7 +6729,7 @@ sub_3f60c: ld a, $69 ld [hli], a ld [hl], $6a - callfar Function38431 + callfar LinkBattle_TrainerHuds ld c, 150 jp DelayFrames diff --git a/engine/dumps/bank10.asm b/engine/dumps/bank10.asm index 17b7b1f..d3c40e6 100644 --- a/engine/dumps/bank10.asm +++ b/engine/dumps/bank10.asm @@ -1,11 +1,1785 @@ INCLUDE "constants.asm" -SECTION "engine/dumps/bank10.asm@ConvertMon_2to1", ROMX +; Pokedex_RunJumptable.Jumptable indexes + const_def + const DEXSTATE_INIT + const DEXSTATE_MAIN_SCR + const DEXSTATE_UPDATE_MAIN_SCR + const DEXSTATE_A_BUTTON_MENU_SCR + const DEXSTATE_UPDATE_A_BUTTON_MENU_SCR + const DEXSTATE_SELECT_BUTTON_MENU_SCR + const DEXSTATE_UPDATE_SELECT_BUTTON_MENU_SCR + const DEXSTATE_EXIT +; wPokedexInputFlags + const_def + const PRESSED_B_F ; 0 + const PRESSED_A_F ; 1 + const PRESSED_UP_F ; 2 + const PRESSED_DOWN_F ; 3 + const PRESSED_LEFT_F ; 4 + const PRESSED_RIGHT_F ; 5 + const PRESSED_SELECT_F ; 6 + +; wPokedexInputFlags when in a submenu + const_def + shift_const EXIT_POKEDEX ; 0 + shift_const BREAK_LOOP ; 1 + shift_const VIEW_DEX_ENTRY ; 2 + shift_const PLAY_CRY ; 3 + shift_const VIEW_AREA ; 4 + shift_const NUMBERED_DEX_ORDER ; 5 + shift_const ALPHABETICAL_DEX_ORDER ; 6 + shift_const SEARCH_TYPE ; 7 +DEF UNOWN_MODE_F EQU 5 +DEF NEXT_MENU_F EQU 7 + +; Values of 'a' prior to running ShowPokedexMenu, which determines the buttons drawn + const_def + const DEX_SCROLL_BUTTONS + const A_BUTTON_MENU_NO_UNOWN + const SELECT_BUTTON_MENU + const A_BUTTON_MENU_UNOWN + +SECTION "engine/dumps/bank10.asm", ROMX + +Pokedex: + ld hl, wOptions + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + + ldh a, [hMapAnims] + push af + xor a + ldh [hMapAnims], a + + ld a, [wVramState] + push af + xor a + ld [wVramState], a + + ldh a, [hJoypadSum] + push af + + call InitPokedex + call DelayFrame +.loop + call Pokedex_Main + jr nc, .loop + + pop af + ldh [hJoypadSum], a + pop af + ld [wVramState], a + pop af + ldh [hMapAnims], a + pop af + ld [wOptions], a + call ClearJoypad + ret + +InitPokedex: + call ClearBGPalettes + callfar LoadPokeDexGraphics + call DisableLCD + call ClearSprites + ld b, SGB_POKEDEX_SELECTION + call GetSGBLayout + callfar ClearSpriteAnims + call Pokedex_InitUIGraphics + + xor a + ldh [hSCY], a + ld [wGlobalAnimYOffset], a + ldh [hSCX], a + ld [wGlobalAnimXOffset], a + ld [wJumptableIndex], a + ld [wDexListingScrollOffset], a + ld [wCurDexMode], a + ld [wPokedexInputFlags], a + ldh [hBGMapMode], a + + ld a, 7 + ldh [hWX], a + call Pokedex_OrderMonsByMode + ld a, 12 + call UpdateSoundNTimes + + ld a, LCDC_DEFAULT + ldh [rLCDC], a + + xor a + call ShowPokedexMenu + ld a, (1 << rLCDC_ENABLE) | (1 << rLCDC_WINDOW_TILEMAP) | (1 << rLCDC_WINDOW_ENABLE) | (1 << rLCDC_SPRITE_SIZE) + ldh [rBGP], a + ld a, %11010000 + ldh [rOBP0], a + ret + +Pokedex_InitUIGraphics: + call Pokedex_CopyButtonsGFX + ld de, vChars0 + ld hl, PokedexCursorGFX + ld bc, $30 tiles + ld a, BANK(PokedexCursorGFX) + call FarCopyData + + ld a, SPRITE_ANIM_DICT_TEXT_CURSOR + ld hl, wSpriteAnimDict + ld [hli], a + ld [hl], $00 + ret + +ShowPokedexMenu: + push af + call WaitForAutoBgMapTransfer + call Pokedex_ClearScreen + call Pokedex_PrintListing + pop af + call Pokedex_PlaceStartOrSelectString + call Pokedex_PlaceButtons + + ld hl, wPokedexSeen + ld b, wEndPokedexSeen - wPokedexSeen + call CountSetBits + ld de, wNumSetBits + hlcoord 16, 13 + lb bc, 1, 3 + call PrintNumber + + ld hl, wPokedexCaught + ld b, wEndPokedexCaught - wPokedexCaught + call CountSetBits + ld de, wNumSetBits + hlcoord 16, 16 + lb bc, 1, 3 + call PrintNumber + + hlcoord 12, 12 + ld de, String_SEEN + call PlaceString + hlcoord 12, 15 + ld de, String_OWN + call PlaceString + + call WaitBGMap + call WaitForAutoBgMapTransfer + ret + +String_SEEN: + db "みつけたかず@" + +String_OWN: + db "つかまえたかず@" + +Pokedex_PlaceStartOrSelectString: + hlcoord 11, 9 + and a + jr z, .Select_SEARCH + cp $03 + jr z, .Start_TYPE + ret + +.Select_SEARCH: + ld de, String_SELECT_SEARCH + call PlaceString + xor a + ret + +.Start_TYPE: + ld de, String_START_VARIANTS + call PlaceString + ld a, $03 + ret + +String_SELECT_SEARCH: + db "セレクト▶けんさく@" + +String_START_VARIANTS: + db "スタート▶しゅるい@" + +Pokedex_ClearScreen: + ld hl, wTileMap + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH +.loop: + ld [hl], $6B + inc hl + dec bc + ld a, c + or b + jr nz, .loop + + hlcoord 0, 0 + lb bc, 18, 11 + call Pokedex_PlaceBorder + hlcoord 11, 10 + lb bc, 8, 9 + call Pokedex_PlaceBorder + ret + +Pokedex_Main: + call Pokedex_CopyJoypadSum + ld a, [wJumptableIndex] + bit JUMPTABLE_EXIT_F, a + jr nz, .exit + + call Pokedex_RunJumptable + farcall PlaySpriteAnimationsAndDelayFrame + call DelayFrame + and a + ret + +.exit + callfar ClearSpriteAnims + call ClearSprites + xor a + ldh [hSCX], a + ldh [hSCY], a + scf + ret + +Pokedex_CopyJoypadSum: + ld a, [wVBlankJoyFrameCounter] + and a + jr nz, .waiting_for_vblank + + ldh a, [hJoypadSum] + ldh [hJoyDown], a + + xor a + ldh [hJoypadSum], a + + ldh a, [hJoypadState] + ldh [hJoySum], a + + ld a, 8 + ld [wVBlankJoyFrameCounter], a + ret + +.waiting_for_vblank + xor a + ldh [hJoySum], a + ldh [hJoyDown], a + ret + +Pokedex_ClearJoypad: + xor a + ldh [hJoypadSum], a + ldh [hJoyDown], a + ldh [hJoySum], a + ret + +Pokedex_RunJumptable: + jumptable .Jumptable, wJumptableIndex + +.Jumptable: + dw .Init + dw Pokedex_InitList + dw Pokedex_List + dw Pokedex_InitAButtonMenu + dw Pokedex_AButtonMenu + dw Pokedex_InitSelectButtonMenu + dw Pokedex_SelectButtonMenu + dw Pokedex_Exit + +.Init: + depixel 4, 6, 4, 0 + ld a, SPRITE_ANIM_OBJ_POKEDEX_CURSOR + call InitSpriteAnimStruct + + ld a, c + ld [wPokedexCursorStructAddress], a + ld a, b + ld [wPokedexCursorStructAddress + 1], a + ld a, DEXSTATE_MAIN_SCR + ld [wJumptableIndex], a + ret + +Pokedex_InitList: + xor a + call ShowPokedexMenu + call Pokedex_ClearJoypad + ld a, DEXSTATE_UPDATE_MAIN_SCR + ld [wJumptableIndex], a + ret + +Pokedex_List: + ld hl, wPokedexInputFlags + ld a, [hl] + bit PRESSED_B_F, a + jr nz, .Close + + bit PRESSED_A_F, a + jr nz, .PressedA + + bit PRESSED_SELECT_F, a + jr nz, .Select + + bit PRESSED_UP_F, a + jr nz, .Up + + bit PRESSED_DOWN_F, a + jr nz, .Down + + bit PRESSED_LEFT_F, a + jr nz, .Left + + bit PRESSED_RIGHT_F, a + jr nz, .Right + ret + +.Close + ld a, DEXSTATE_EXIT + ld [wJumptableIndex], a + + ld hl, wPokedexInputFlags + ld [hl], $00 + ret + +.PressedA + ld hl, wPokedexInputFlags + ld [hl], $00 + call Pokedex_GetSelectedMon + call Pokedex_CheckSeen + ret z + + ld a, DEXSTATE_A_BUTTON_MENU_SCR + ld [wJumptableIndex], a + ret + +.Select + ld a, DEXSTATE_SELECT_BUTTON_MENU_SCR + ld [wJumptableIndex], a + + ld hl, wPokedexInputFlags + ld [hl], $00 + ret + +.Up + ld hl, wDexListingScrollOffset + ld a, [hl] + and a + jr z, .ClearInputFlags + + dec a + jr .ReorderDex + +.Down + ld hl, wDexListingScrollOffset + ld a, [wDexListingEnd] + cp 9 + jr c, .ClearInputFlags + + sub 8 + ld e, a + ld a, [hl] + cp e + jr nc, .ClearInputFlags + inc a + jr .ReorderDex + +.Left + ld hl, wDexListingScrollOffset + ld a, [hl] + and a + jr z, .ClearInputFlags + cp 8 + jr nc, .more_than_eight + ld a, 8 +.more_than_eight + sub 8 + jr .ReorderDex + +.Right + ld hl, wDexListingScrollOffset + ld a, [wDexListingEnd] + cp 9 + jr c, .ClearInputFlags + + sub 8 + ld e, a + cp 8 + jr c, .greater_than_end + + sub 8 + ld d, a + ld a, [hl] + cp e + jr nc, .ClearInputFlags + + cp d + jr c, .less_than_eight + ld a, d +.less_than_eight + add 8 + jr .ReorderDex + +.greater_than_end + ld a, [hl] + cp e + jr nc, .ClearInputFlags + ld a, e +.ReorderDex: + ld [hl], a + call Pokedex_PressButtonSprites + call WaitBGMap + call WaitForAutoBgMapTransfer + xor a + call ShowPokedexMenu +.ClearInputFlags: + ld hl, wPokedexInputFlags + ld [hl], $00 + ret + +Pokedex_InitAButtonMenu: + ld a, [wTempSpecies] + cp DEX_ANNON + jr nz, .not_annon + + ld a, A_BUTTON_MENU_UNOWN + jr .DisplayButtons + +.not_annon + ld a, A_BUTTON_MENU_NO_UNOWN +.DisplayButtons + call ShowPokedexMenu + depixel 4, 16, 4, 4 + ld a, SPRITE_ANIM_OBJ_POKEDEX_HAND_CURSOR + call InitSpriteAnimStruct + ld a, c + ld [wPokedexHandCursorStructAddress], a + ld a, b + ld [wPokedexHandCursorStructAddress + 1], a + xor a + ld [wPokedexHandCursorPosIndex], a + call Pokedex_ClearJoypad + ld a, DEXSTATE_UPDATE_A_BUTTON_MENU_SCR + ld [wJumptableIndex], a + ret + +Pokedex_AButtonMenu: + ld hl, wPokedexInputFlags + ld a, [hl] + ld [hl], $00 + bit VIEW_DEX_ENTRY_F, a + jp nz, .Data + + bit PLAY_CRY_F, a + jp nz, .Cry + + bit BREAK_LOOP_F, a + jr nz, .Back + + bit NEXT_MENU_F, a + jr nz, .NextMenu + + bit UNOWN_MODE_F, a + jr nz, .UnownMode + ret + +.Back: + ld hl, wPokedexHandCursorStructAddress + call Pokedex_GetSpriteAnimStruct + ld [hl], $00 + + ld a, DEXSTATE_MAIN_SCR + ld [wJumptableIndex], a + ret + +.NextMenu: + ld hl, wPokedexHandCursorStructAddress + call Pokedex_GetSpriteAnimStruct + ld [hl], $00 + + ld a, DEXSTATE_SELECT_BUTTON_MENU_SCR + ld [wJumptableIndex], a + ld hl, wPokedexInputFlags + ld [hl], $00 + ret + +.UnownMode: + call Pokedex_GetSelectedMon + ld a, [wTempSpecies] + cp DEX_ANNON + ret nz + + call Pokedex_UnownMode + hlcoord 12, 10 + lb bc, 7, 7 + call ClearBox + call WaitBGMap + call WaitForAutoBgMapTransfer + + ld b, SGB_POKEDEX_SELECTION + call GetSGBLayout + call Pokedex_CopyButtonsGFX + ld a, A_BUTTON_MENU_UNOWN + call ShowPokedexMenu + xor a + ldh [hJoyDown], a + ldh [hJoypadSum], a + ret + +.Data: + call Pokedex_GetSelectedMon + call Pokedex_DexEntryScreen + call WaitForAutoBgMapTransfer + hlcoord 1, 1 + lb bc, 7, 7 + call ClearBox + call WaitBGMap + call WaitForAutoBgMapTransfer + ld b, SGB_POKEDEX_SELECTION + call GetSGBLayout + call Pokedex_CopyButtonsGFX + call .ReturnButtons + xor a + ldh [hJoyDown], a + ldh [hJoypadSum], a + ret + +.Cry: + call Pokedex_GetSelectedMon + ld a, [wApplyStatLevelMultipliersToEnemy] + call GetCryIndex + ld e, c + ld d, b + call PlayCryHeader + ret + +; Unreferenced, presumably dummied out for the demo +.Area: + call Pokedex_GetSelectedMon + predef Pokedex_GetArea + + call ClearBGPalettes + callfar LoadPokeDexGraphics + call DisableLCD + call ClearSprites + ld b, SGB_POKEDEX_SELECTION + call GetSGBLayout + call Pokedex_InitUIGraphics + ld a, 8 + call UpdateSoundNTimes + + ld a, LCDC_DEFAULT + ldh [rLCDC], a + call .ReturnButtons + ld a, (1 << rLCDC_ENABLE) | (1 << rLCDC_WINDOW_TILEMAP) | (1 << rLCDC_WINDOW_ENABLE) | (1 << rLCDC_SPRITE_SIZE) + ldh [rBGP], a + ld a, %11010000 + ldh [rOBP0], a + xor a + ldh [hJoyDown], a + ldh [hJoypadSum], a + ret + +.ReturnButtons: + ld a, [wTempSpecies] + cp DEX_ANNON + jr nz, .unown + ld a, A_BUTTON_MENU_UNOWN + jr .show_pokedex_menu + +.unown + ld a, A_BUTTON_MENU_NO_UNOWN +.show_pokedex_menu + call ShowPokedexMenu + ret + +Pokedex_InitSelectButtonMenu: + xor a + ld [wDexListingScrollOffset], a + ld hl, wPokedexCursorStructAddress + call Pokedex_GetSpriteAnimYOffset + ld [hl], $00 + call Pokedex_OrderMonsByMode + ld a, SELECT_BUTTON_MENU + call ShowPokedexMenu + + depixel 4, 16, 4, 4 + ld a, SPRITE_ANIM_OBJ_POKEDEX_HAND_CURSOR + call InitSpriteAnimStruct + + ld a, c + ld [wPokedexHandCursorStructAddress], a + ld a, b + ld [wPokedexHandCursorStructAddress + 1], a + xor a + ld [wPokedexHandCursorPosIndex], a + call Pokedex_ClearJoypad + + ld a, DEXSTATE_UPDATE_SELECT_BUTTON_MENU_SCR + ld [wJumptableIndex], a + ret + +Pokedex_SelectButtonMenu: + ld hl, wPokedexInputFlags + ld a, [hl] + ld [hl], $00 + bit BREAK_LOOP_F, a ; BACK + jr nz, .Back + + bit NUMBERED_DEX_ORDER_F, a + jr nz, .Number + + bit ALPHABETICAL_DEX_ORDER_F, a ; + jr nz, .ABC + + bit SEARCH_TYPE_F, a + jr nz, .SearchType + ret + +.Number: + ld a, DEXMODE_NUMBERED + ld [wCurDexMode], a + call Pokedex_OrderMonsByMode + jr .ReorderDex + +.ABC: + ld a, DEXMODE_ABC + ld [wCurDexMode], a + call Pokedex_OrderMonsByMode + jr .ReorderDex + +.SearchType: + call Pokedex_SearchByTypeScreen + xor a + ldh [hJoyDown], a + ldh [hJoypadSum], a + ld a, [wDexPlaySlowpokeAnimation] + and a + jr z, .no_slowpoke + + call Pokedex_SlowpokeAnimation + ld a, [wDexListingEnd] + and a + jr nz, .Back +.no_slowpoke + ld a, DEXSTATE_UPDATE_SELECT_BUTTON_MENU_SCR + ld [wJumptableIndex], a + + xor a + ld [wDexListingScrollOffset], a + ld hl, wPokedexCursorStructAddress + + call Pokedex_GetSpriteAnimYOffset + ld [hl], 0 + call Pokedex_OrderMonsByMode +.ReorderDex: + ld a, SELECT_BUTTON_MENU + call ShowPokedexMenu + ret + +.Back: + ld hl, wPokedexHandCursorStructAddress + call Pokedex_GetSpriteAnimStruct + ld [hl], $00 + ld a, DEXSTATE_MAIN_SCR + ld [wJumptableIndex], a + ret + +Pokedex_Exit: + ld hl, wJumptableIndex + set JUMPTABLE_EXIT_F, [hl] + ret + +Pokedex_PrintListing: + ld a, [wDexListingScrollOffset] + ld e, a + ld d, $00 + ld hl, wPokedexOrder + add hl, de + ld e, l + ld d, h + hlcoord 1, 2 + ld a, 8 +.loop + push af + ld a, [de] + ld [wTempByteValue], a + push de + push hl + and a + jr z, .unidentified + + ld de, wTempByteValue + lb bc, (%10000000 | 1), 3 + call PrintNumber + +; Here, only seen Pokémon are listed in the first place, so this effectively does nothing. + call Pokedex_PlaceDefaultStringIfNotSeen + jr c, .unidentified + + call Pokedex_PlaceCaughtSymbolIfCaught + push hl + call GetPokemonName + pop hl + call PlaceString + +.unidentified + pop hl + ld de, SCREEN_WIDTH * 2 + add hl, de + + pop de + inc de + pop af + dec a + jr nz, .loop + ret + +Pokedex_PlaceCaughtSymbolIfCaught: + call Pokedex_CheckCaught + jr nz, .place_caught_symbol + xor a + ld [hli], a + ret + +.place_caught_symbol + ld a, $6c + ld [hli], a + ret + +Pokedex_PlaceDefaultStringIfNotSeen: + ld a, [wCurDexMode] + and a + ret nz + + call Pokedex_CheckSeen + ret nz + inc hl + + ld de, .NameNotSeen + call PlaceString + scf + ret + +.NameNotSeen: +db "ーーーーー@" + +; Gets the species of the currently selected Pokémon. This corresponds to the +; position of the cursor in the main listing. +Pokedex_GetSelectedMon: + ld hl, wPokedexCursorStructAddress + call Pokedex_GetSpriteAnimYOffset + ld a, [hl] + swap a + and $f + ld hl, wDexListingScrollOffset + add [hl] + ld e, a + ld d, 0 + ld hl, wPokedexOrder + add hl, de + ld a, [hl] + ld [wTempSpecies], a + ret + +Pokedex_CheckCaught: + push de + push hl + ld hl, wPokedexCaught + ld a, [wTempSpecies] + dec a + ld c, a + ld b, CHECK_FLAG + ld d, 0 + predef SmallFarFlagAction + + pop hl + pop de + ld a, c + and a + ret + +Pokedex_CheckSeen: + push de + push hl + ld hl, wPokedexSeen + ld a, [wTempSpecies] + dec a + ld c, a + ld b, CHECK_FLAG + ld d, 0 + predef SmallFarFlagAction + + pop hl + pop de + ld a, c + and a + ret + +Pokedex_PlaceBorder: + dec c + dec c + dec b + dec b + ld de, SCREEN_WIDTH + push bc + push hl + + ; Top-left corner + ld a, $63 + ld [hli], a + ; Top border + ld a, $64 +.fill_top + ld [hli], a + dec c + jr nz, .fill_top + + ; Top-right corner + ld a, $65 + ld [hl], a + + pop hl + pop bc + add hl, de + +.middle_loop + push bc + push hl + + ; Left border + ld a, $66 + ld [hli], a + ld a, " " +.fill_middle + ld [hli], a + dec c + jr nz, .fill_middle + + ; Right border + ld a, $67 + ld [hli], a + pop hl + add hl, de + pop bc + dec b + jr nz, .middle_loop + + ; Bottom-left corner + ld a, $68 + ld [hli], a + ; Bottom border + ld a, $69 +.fill_bottom + ld [hli], a + dec c + jr nz, .fill_bottom + + ; Bottom-right corner + ld a, $6a + ld [hli], a + ret + +Pokedex_PlaceButtons: +; Fill 6-by-6 tile area with gray/orange space. + push af + hlcoord 12, 2 + ld a, $10 + ld de, SCREEN_WIDTH - 6 + ld b, 6 +.next_row + ld c, 6 +.next_tile + ld [hli], a + dec c + jr nz, .next_tile + + add hl, de + dec b + jr nz, .next_row + +; Decide what buttons to draw next. + pop af + and a ; DEX_SCROLL_BUTTONS + jr z, PlaceArrowButtons + cp A_BUTTON_MENU_NO_UNOWN + jr z, PlaceOptionButtons_A + cp SELECT_BUTTON_MENU + jr z, PlaceOptionButtons_Select + cp A_BUTTON_MENU_UNOWN + jr z, PlaceOptionButtons_A + ret + +PlaceArrowButtons: +; Up + hlcoord 14, 6 + ld a, $40 + call .PutButton + +; Down + hlcoord 14, 2 + ld a, $42 + call .PutButton + +; Previous page + hlcoord 16, 4 + ld a, $44 + call .PutButton + +; Next page + hlcoord 12, 4 + ld a, $46 + call .PutButton + ret + +.PutButton: + ld [hli], a + inc a + ld [hl], a + ld de, SCREEN_WIDTH - 1 + + add hl, de + add $f + ld [hli], a + inc a + ld [hl], a + ret + +PlaceOptionButtons_A: +; DATA + hlcoord 12, 2 + ld a, $5 + call PutOptionButton +; CRY + hlcoord 15, 2 + ld a, $8 + call PutOptionButton +; AREA + hlcoord 12, 4 + ld a, $b + call PutOptionButton +; Notably uses the Select Button menu's BACK button, instead of とじる ("CLOSE"), +; likely due to how it's split in the graphics data. + hlcoord 15, 4 + ld a, $2a + call PutOptionButton + ret + +PlaceOptionButtons_Select: +; NUMBER + hlcoord 12, 2 + ld a, $24 + call PutOptionButton +; ABCDE + hlcoord 15, 2 + ld a, $27 + call PutOptionButton +; SEARCH + hlcoord 12, 4 + ld a, $21 + call PutOptionButton +; BACK + hlcoord 15, 4 + ld a, $2a + call PutOptionButton + ret + +PutOptionButton: + ld [hli], a + inc a + ld [hli], a + inc a + ld [hl], a + ld de, SCREEN_WIDTH - 2 + + add hl, de + add $e + ld [hli], a + inc a + ld [hli], a + inc a + ld [hl], a + ret + +Pokedex_HandCursorControls: + ld hl, wPokedexInputFlags + ld de, hJoyDown + ld a, [de] + and A_BUTTON + jr nz, .a_pressed + + ld a, [de] + and B_BUTTON + jp nz, .b_pressed + + ld a, [de] + and D_UP + jr nz, .up + + ld a, [de] + and D_DOWN + jr nz, .down + + ld a, [de] + and D_LEFT + jr nz, .left + + ld a, [de] + and D_RIGHT + jr nz, .right + + ld a, [de] + and SELECT + jr nz, .select + + ld a, [de] + and START + jr nz, .start + ret + +.a_pressed + call HandCursor_PressButton + ret + +.select + ld a, [wJumptableIndex] + cp DEXSTATE_UPDATE_SELECT_BUTTON_MENU_SCR + jr z, .b_pressed + + set NEXT_MENU_F, [hl] + ret + +.b_pressed + set BREAK_LOOP_F, [hl] + ret + +.start + set UNOWN_MODE_F, [hl] + ret + +.up + ld hl, wPokedexHandCursorPosIndex + ld a, [hl] + and $1 + ret z + + dec [hl] + jr .GetPositionOffsets + +.down + ld hl, wPokedexHandCursorPosIndex + ld a, [hl] + and $1 + ret nz + inc [hl] + jr .GetPositionOffsets + +.left + ld hl, wPokedexHandCursorPosIndex + ld a, [hl] + bit 1, a ; and %10 + ret z + + sub 2 + ld [hl], a + jr .GetPositionOffsets + +.right + ld hl, wPokedexHandCursorPosIndex + ld a, [hl] + bit 1, a ; and %10 + ret nz + + add 2 + ld [hl], a +.GetPositionOffsets: + ld a, [wPokedexHandCursorPosIndex] + ld e, a + ld d, $00 + ld hl, .PositionOffsetTable + add hl, de + add hl, de + ld e, l + ld d, h + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld a, [de] + ld [hl], a + inc de + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld a, [de] + ld [hl], a + ret + +.PositionOffsetTable: + ; x offset, y offset + db 0, 0 + db 0, 8 * 2 + db 8 * 3, 0 + db 8 * 3, 8 * 2 + +HandCursor_PressButton: + push hl + ld a, [wJumptableIndex] + cp DEXSTATE_UPDATE_SELECT_BUTTON_MENU_SCR + jr z, .pressed_select + + ld hl, .MenuJumptable + jr .pressed_a + +.pressed_select + ld hl, .SelectJumptable +.pressed_a + ld a, [wPokedexHandCursorPosIndex] + ld e, a + ld d, 0 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.MenuJumptable +dw .Data, .Area, .Cry, .Back + +.SelectJumptable +dw .Number, .Search, .ABC, .Back + +; Unreferenced +.Close: + pop hl + set EXIT_POKEDEX_F, [hl] + ret + +.Back: + pop hl + set BREAK_LOOP_F, [hl] + ret + +.Data: + pop hl + set VIEW_DEX_ENTRY_F, [hl] + ret + +.Cry: + pop hl + set PLAY_CRY_F, [hl] + ret + +.Area: + pop hl + set VIEW_AREA_F, [hl] + ret + +.Number: + pop hl + set NUMBERED_DEX_ORDER_F, [hl] + ret + +.ABC: + pop hl + set ALPHABETICAL_DEX_ORDER_F, [hl] + ret + +.Search: + pop hl + set SEARCH_TYPE_F, [hl] + ret + +Pokedex_CursorControls: + ld a, [wJumptableIndex] + cp DEXSTATE_UPDATE_MAIN_SCR + jr z, .CheckInput + + ld hl, SPRITEANIMSTRUCT_DURATION + add hl, bc + ld [hl], 1 + ld hl, SPRITEANIMSTRUCT_FRAME + + add hl, bc + ld [hl], 0 + ret + +.CheckInput: + ld hl, hJoyDown + ld a, [hl] + and A_BUTTON + jr nz, .a_pressed + + ld a, [hl] + and SELECT + jr nz, .select_pressed + + ld a, [hl] + and B_BUTTON + jr nz, .b_pressed + + ld a, [hl] + and D_UP + jr nz, .up + + ld a, [hl] + and D_DOWN + jr nz, .down + + ld a, [hl] + and D_LEFT + jr nz, .left + + ld a, [hl] + and D_RIGHT + jr nz, .right + + ld hl, hJoySum + ld a, [hl] + and D_UP + jr nz, .up + + ld a, [hl] + and D_DOWN + jr nz, .down + + ld a, [hl] + and D_LEFT + jr nz, .left + + ld a, [hl] + and D_RIGHT + jr nz, .right + ret + +.a_pressed + ld hl, wPokedexInputFlags + set PRESSED_A_F, [hl] + ret + +.select_pressed + ld hl, wPokedexInputFlags + set PRESSED_SELECT_F, [hl] + ret + +.b_pressed + ld hl, wPokedexInputFlags + set PRESSED_B_F, [hl] + ret + +.up + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld a, [hl] + and a + jr z, .cursor_at_top + sub 8 * 2 + ld [hl], a + ret + +.cursor_at_top + ld hl, wPokedexInputFlags + set PRESSED_UP_F, [hl] + ret + +.down + ld a, [wDexListingEnd] + cp 8 + jr nc, .at_dex_listing_end + cp 2 + ret c + + dec a + and $f + swap a + ld d, a + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld a, [hl] + cp d + ret nc + + add 8 * 2 + ld [hl], a + ret + +.at_dex_listing_end + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld a, [hl] + cp 8 * 14 + jr nc, .cursor_at_bottom + + add 8 * 2 + ld [hl], a + ret + +.cursor_at_bottom + ld hl, wPokedexInputFlags + set PRESSED_DOWN_F, [hl] + ret + +.left + ld hl, wPokedexInputFlags + set PRESSED_LEFT_F, [hl] + ret + +.right + ld hl, wPokedexInputFlags + set PRESSED_RIGHT_F, [hl] + ret + +Pokedex_PressButtonSprites: + ld a, [wPokedexInputFlags] + + hlcoord 14, 6 + bit PRESSED_DOWN_F, a + jr nz, .PressButton + + hlcoord 14, 2 + bit PRESSED_UP_F, a + jr nz, .PressButton + + hlcoord 16, 4 + bit PRESSED_RIGHT_F, a + jr nz, .PressButton + + hlcoord 12, 4 + bit PRESSED_LEFT_F, a + jr nz, .PressButton + ret + +.PressButton: + call .ChangeTile + call .ChangeTile + ld de, SCREEN_WIDTH - 2 + add hl, de + call .ChangeTile + call .ChangeTile + ret + +; The pressed button graphics are exactly eight tiles to the right of the unpressed graphics +.ChangeTile: + ld a, [hl] + add $08 + ld [hli], a + ret + +Pokedex_DexEntryScreen: + call LowVolume + call ClearSprites +.loop + call WaitForAutoBgMapTransfer + ld a, [wUnownDex] + ld [wAnnonID], a + ld hl, wTileMap + lb bc, SCREEN_HEIGHT, SCREEN_WIDTH + call Pokedex_PlaceBorder + + call WaitBGMap + call WaitForAutoBgMapTransfer + ld a, [wTempSpecies] + ld [wCurPartySpecies], a + + push af + ld b, SGB_POKEDEX + call GetSGBLayout + pop af + + ld [wTempSpecies], a + call Pokedex_DisplayDexEntry + + call WaitBGMap + call GetBaseData + hlcoord 1, 1 + call PrepMonFrontpic + + ld a, [wCurPartySpecies] + call PlayCry + call Pokedex_DexEntryInput + jr c, .loop + + call MaxVolume + ret + +Pokedex_DexEntryInput: + ld hl, wPokedexCursorStructAddress + call Pokedex_GetSpriteAnimYOffset + + ld a, [hl] + ld [wDexTempCursorY], a + ld a, [wDexListingScrollOffset] + ld [wDexTempListingScrollOffset], a +.CheckInput: + call Pokedex_CopyJoypadSum + ld hl, hJoyDown + ld a, [hl] + and B_BUTTON | A_BUTTON + jr z, .GotInput + and a + ret + +.GotInput: + ld hl, hJoySum + ld a, [hl] + and D_UP + jr nz, .up + + ld a, [hl] + and D_DOWN + jr nz, .down + jp .no_more_entries + +.up + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld a, [hl] + and a + jr z, .top_of_list + + sub 2 * TILE_WIDTH + ld [hl], a + call .NextMonIsSeen + jr z, .up + + jr .Scrolled + +.top_of_list: + ld hl, wDexListingScrollOffset + ld a, [hl] + and a + jr z, .no_more_entries + + dec a + ld [hl], a + call .NextMonIsSeen + jr z, .top_of_list + + jr .Scrolled + +.down + ld a, [wDexListingEnd] + cp 8 + jr nc, .more_than_eight + + cp 2 + jr c, .no_more_entries + + dec a + and $f + swap a + ld d, a + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld a, [hl] + cp d + jr nc, .no_more_entries + + add 2 * TILE_WIDTH + ld [hl], a + call .NextMonIsSeen + jr z, .down + + jr .Scrolled + +.more_than_eight + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld a, [hl] + cp 14 * TILE_WIDTH + jr nc, .bottom_of_list + + add 2 * TILE_WIDTH + ld [hl], a + call .NextMonIsSeen + jr z, .more_than_eight + jr .Scrolled + +.bottom_of_list + ld a, [wDexListingEnd] + sub 8 + ld e, a + ld hl, wDexListingScrollOffset + ld a, [hl] + cp e + jr nc, .no_more_entries + + inc a + ld [hl], a + call .NextMonIsSeen + jr z, .bottom_of_list + +.Scrolled: + scf + ret + +.no_more_entries + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld a, [wDexTempCursorY] + ld [hl], a + ld a, [wDexTempListingScrollOffset] + ld [wDexListingScrollOffset], a + jp .CheckInput + +.NextMonIsSeen: + push bc + call Pokedex_GetSelectedMon + call Pokedex_CheckSeen + pop bc + ret + +Pokedex_DisplayDexEntry: + callfar _DisplayDexEntry + ret + +Pokedex_OrderMonsByMode: + ld hl, wPokedexOrder + ld c, 0 + xor a +.loop + ld [hli], a + dec c + jr nz, .loop + + ld a, [wCurDexMode] + and $1 + 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 .Numbered, Pokedex_ABCMode + +.Numbered: + xor a + ld [wDexListingEnd], a + ld hl, wPokedexOrder + ld a, 1 + ld [wTempSpecies], a + ld c, NUM_POKEMON + +.loop_numbered + push bc + call Pokedex_CheckSeen + jr z, .not_seen + + ld a, [wTempSpecies] + ld [hli], a + ld a, [wDexListingEnd] + inc a + ld [wDexListingEnd], a + +.not_seen + ld a, [wTempSpecies] + inc a + ld [wTempSpecies], a + pop bc + dec c + jr nz, .loop_numbered + + ld a, [wDexListingEnd] + ld c, 0 + +.FindLastSeen: + cp NUM_POKEMON + jr z, .done + ld [hl], c + inc hl + inc a + jr .FindLastSeen +.done + ret + +Pokedex_ABCMode: + xor a + ld [wDexListingEnd], a + ld hl, wPokedexOrder + ld de, AlphabeticalPokedexOrder + ld c, NUM_POKEMON + +.loop_abc + push bc + ld a, [de] + ld [wTempSpecies], a + call Pokedex_CheckSeen + jr z, .not_seen + + ld a, [wTempSpecies] + ld [hli], a + ld a, [wDexListingEnd] + inc a + ld [wDexListingEnd], a + +.not_seen + inc de + pop bc + dec c + jr nz, .loop_abc + + ld a, [wDexListingEnd] + ld c, 0 + +.FindLastSeen: + cp NUM_POKEMON + jr z, .done + ld [hl], c + inc hl + inc a + jr .FindLastSeen +.done + ret + +INCLUDE "data/pokemon/dex_order_alpha.inc" + +Pokedex_SlowpokeAnimation: + call Pokedex_PlaceSlowpoke + + ld hl, wPokedexCursorStructAddress + call Pokedex_GetSpriteAnimStruct + ld a, [hl] + ld [hl], 0 + push af + + ld hl, wPokedexHandCursorStructAddress + call Pokedex_GetSpriteAnimStruct + ld a, [hl] + ld [hl], 0 + push af + + ld a, %11100100 + ldh [rOBP0], a + call Pokedex_AnimateDexSearchSlowpoke + +; Restore cursor positions after animation + ld hl, wPokedexHandCursorStructAddress + call Pokedex_GetSpriteAnimStruct + pop af + ld [hl], a + + ld hl, wPokedexCursorStructAddress + call Pokedex_GetSpriteAnimStruct + pop af + ld [hl], a + + ld a, %11010000 + ldh [rOBP0], a + ret + +Pokedex_PlaceSlowpoke: + call WaitForAutoBgMapTransfer + call Pokedex_ClearScreen + call WaitBGMap + call WaitForAutoBgMapTransfer + ld a, [wDexListingEnd] + ld [wPokedexSlowpokeNumSearchEntries], a + depixel 9, 6, 4, 0 + ld a, SPRITE_ANIM_OBJ_POKEDEX_SLOWPOKE + call InitSpriteAnimStruct + ld a, c + ld [wPokedexSlowpokeAnimStructAddress], a + ld a, b + ld [wPokedexSlowpokeAnimStructAddress + 1], a + ret + +; Loop Slowpoke reading animation until it deletes itself +Pokedex_AnimateDexSearchSlowpoke: + ld hl, wPokedexSlowpokeAnimStructAddress + call Pokedex_GetSpriteAnimStruct + ld a, [hl] + and a + ret z + farcall PlaySpriteAnimationsAndDelayFrame + call DelayFrame + jr Pokedex_AnimateDexSearchSlowpoke + +; Get index of sprite animation struct at 'hl' +Pokedex_GetSpriteAnimStruct: + ld c, [hl] + inc hl + ld b, [hl] + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc + ret + +; Get Y Offset from sprite animation struct at 'hl' +Pokedex_GetSpriteAnimYOffset: + ld c, [hl] + inc hl + ld b, [hl] + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ret + +Pokedex_CopyButtonsGFX: + ld de, PokedexButtonsGFX + ld hl, vChars2 + lb bc, BANK(PokedexButtonsGFX), 96 + call Get2bpp + ret + +NewPokedexEntry: + call LowVolume + call ClearBGPalettes + call ClearTileMap + call UpdateSprites + callfar LoadPokeDexGraphics + call ClearSprites + ld hl, wd4a7 + set 1, [hl] + ldh a, [hMapAnims] + push af + xor a + ldh [hMapAnims], a + call _NewPokedexEntry + + pop af + ldh [hMapAnims], a + call ClearPalettes + call ClearTileMap + call GetMemSGBLayout + call LoadFontExtra + call SetPalettes + ld hl, wd4a7 + res 1, [hl] + call MaxVolume + ret + +_NewPokedexEntry: + call WaitForAutoBgMapTransfer + ld hl, wTileMap + lb bc, SCREEN_HEIGHT, SCREEN_WIDTH + call Pokedex_PlaceBorder + ld a, [wTempSpecies] + ld [wCurPartySpecies], a + push af + ld b, SGB_POKEDEX + call GetSGBLayout + pop af + ld [wTempSpecies], a + call Pokedex_DisplayDexEntry + call SetPalettes + call WaitBGMap + call GetBaseData + hlcoord 1, 1 + call PrepMonFrontpic + ld a, [wCurPartySpecies] + call PlayCry +.wait_for_input + call GetJoypadDebounced + ldh a, [hJoySum] + and A_BUTTON | B_BUTTON + jr z, .wait_for_input + ret + +; Takes the DEX_* index stored in wTempSpecies, +; finds its MON_* in the Pokered_MonIndices table, +; and returns its index in wTempSpecies. ConvertMon_2to1:: push bc push hl - ld a, [wce37] ; wMoveGrammar = $CE37 + ld a, [wTempSpecies] ld b, a ld c, $00 ld hl, Pokered_MonIndices @@ -15,27 +1789,35 @@ ConvertMon_2to1:: cp b jr nz, .loop ld a, c - ld [wce37], a ; wMoveGrammar = $CE37 + ld [wTempSpecies], a pop hl pop bc ret +; Takes the MON_* value stored in wTempSpecies +; and returns the corresponding DEX_* value from Pokered_MonIndices in wTempSpecies. ConvertMon_1to2:: push bc push hl - ld a, [wMoveGrammar] ; wMoveGrammar = $CE37 + ld a, [wTempSpecies] dec a ld hl, Pokered_MonIndices ld b, $00 ld c, a add hl, bc ld a, [hl] - ld [wce37], a ; wMoveGrammar = $CE37 + ld [wTempSpecies], a pop hl pop bc ret Pokered_MonIndices:: +; BUG: Notice anything odd about this list? There are only 250 entries; Riifi is missing! +; Presumably, it was such a recent addition that it hadn't yet been included in this list. +; This causes ConvertMon_2to1 to search out of bounds for byte $FB, eventually finding it and loading Nidorina's cry. + +; Note that in the final game, Celebi is also missing from this list, meaning that they never actually fixed this +; before they switched the cry order to match the Pokédex order. db DEX_RHYDON ; 01 db DEX_KANGASKHAN ; 02 db DEX_NIDORAN_M ; 03 @@ -189,69 +1971,1084 @@ Pokered_MonIndices:: db DEX_WEEZING ; 8f db DEX_PERSIAN ; 90 - db $69, $ED, $5D, $3F, $41, $11, $12, $79, $01, $03, $49, $EE, $76, $77, $EF, $F0 - db $F1, $F2, $4D, $4E, $13, $14, $21, $1E, $4A, $89, $8E, $F3, $51, $F4, $F5, $04 - db $07, $05, $08, $06, $F6, $F7, $F8, $F9, $2B, $2C, $2D, $45, $46, $47, $98, $99 - db $9A, $9B, $9C, $9D, $9E, $9F, $A0, $A1, $A2, $A3, $A4, $A5, $A6, $A7, $A8, $A9 - db $AA, $AB, $AC, $AD, $AE, $AF, $B0, $B1, $B2, $B3, $B4, $B5, $B6, $B7, $B8, $B9 - db $BA, $BB, $BC, $BD, $BE, $BF, $C0, $C1, $C2, $C3, $C4, $C5, $C6, $C7, $C8, $C9 - db $CA, $CB, $CC, $CD, $CE, $CF, $D0, $D1, $D2, $D3, $CA, $CA, $21, $5E, $CB, $7E - db $F5, $AF, $77, $21, $A5, $FF, $7E, $F5, $3E, $01, $77, $CD, $DC, $32, $CD, $98 - db $4C, $FA, $5E, $CB, $CB, $7F, $20, $08, $CD, $A3, $4C, $CD, $17, $03, $18, $F1 - db $F1, $E0, $A5, $F1, $EA, $5E, $CB, $C9, $21, $DD, $C5, $0E, $0A, $AF, $22, $0D - db $20, $FC, $C9, $FA, $5E, $CB, $5F, $16, $00, $21, $B2, $4C, $19, $19, $2A, $66 - db $6F, $E9, $C6, $4C, $D5, $4C, $E5, $4C, $EC, $4C, $25, $4D, $34, $4D, $44, $4D - db $4B, $4D, $87, $4D, $91, $4D, $AF, $21, $DE, $C5, $22, $22, $22, $CD, $E6, $4D - db $21, $5E, $CB, $34, $C9, $CD, $84, $08, $11, $DE, $C5, $CD, $9C, $4D, $D0, $3E - db $08, $EA, $5E, $CB, $C9, $11, $57, $4E, $CD, $C5, $4D, $C9, $CD, $84, $08, $21 - db $A2, $FF, $7E, $E6, $01, $20, $0F, $7E, $E6, $02, $20, $04, $CD, $A8, $4F, $C9 - db $3E, $00, $EA, $5E, $CB, $C9, $FA, $E0, $C5, $A7, $28, $0A, $FE, $01, $28, $0F - db $3E, $08, $EA, $5E, $CB, $C9, $CD, $F2, $4F, $3E, $09, $EA, $5E, $CB, $C9, $3E - db $04, $EA, $5E, $CB, $C9, $AF, $EA, $DF, $C5, $EA, $E0, $C5, $CD, $E6, $4D, $21 - db $5E, $CB, $34, $C9, $CD, $84, $08, $11, $DF, $C5, $CD, $9C, $4D, $D0, $3E, $02 - db $EA, $5E, $CB, $C9, $11, $65, $4E, $CD, $C5, $4D, $C9, $CD, $84, $08, $21, $A2 - db $FF, $7E, $E6, $01, $20, $0F, $7E, $E6, $02, $20, $04, $CD, $A8, $4F, $C9, $3E - db $04, $EA, $5E, $CB, $C9, $FA, $E0, $C5, $A7, $28, $0A, $FE, $01, $28, $12, $3E - db $08, $EA, $5E, $CB, $C9, $CD, $F2, $4F, $3E, $09, $EA, $5E, $CB, $C9, $CD, $B6 - db $48, $3E, $00, $EA, $5E, $CB, $C9, $AF, $EA, $E7, $C5, $21, $5E, $CB, $CB, $FE - db $C9, $3E, $01, $EA, $E7, $C5, $21, $5E, $CB, $CB, $FE, $C9, $21, $A2, $FF, $7E - db $E6, $01, $20, $0C, $7E, $E6, $02, $20, $05, $CD, $17, $4F, $A7, $C9, $37, $C9 - db $21, $DD, $C5, $FA, $E0, $C5, $86, $3C, $12, $CD, $94, $4E, $CD, $77, $50, $21 - db $5E, $CB, $34, $A7, $C9, $D5, $FA, $E0, $C5, $CD, $8E, $4F, $36, $7F, $21, $9D - db $C3, $36, $ED, $AF, $EA, $E0, $C5, $D1, $21, $9E, $C3, $CD, $93, $0E, $CD, $77 - db $50, $21, $5E, $CB, $34, $C9, $AF, $E0, $DE, $21, $A0, $C2, $01, $68, $01, $36 - db $6B, $23, $0B, $79, $B0, $20, $F8, $21, $A1, $C2, $01, $0A, $02, $CD, $18, $0E - db $21, $AD, $C2, $01, $06, $02, $CD, $18, $0E, $21, $C8, $C2, $01, $0C, $10, $CD - db $09, $45, $21, $D4, $C2, $01, $08, $06, $CD, $09, $45, $21, $74, $C3, $01, $08 - db $08, $CD, $09, $45, $21, $B5, $C2, $11, $45, $4E, $CD, $93, $0E, $21, $C1, $C2 - db $11, $50, $4E, $CD, $93, $0E, $CD, $73, $4E, $CD, $94, $4E, $21, $F2, $C2, $36 - db $ED, $CD, $77, $50, $C9, $2F, $B8, $BE, $B2, $7F, $33, $7F, $BB, $26, $BD, $50 - db $B4, $D7, $DE, $30, $D3, $C9, $50, $BB, $26, $BD, $4E, $D3, $B3, $CB, $C4, $C2 - db $4E, $D4, $D2, $D9, $50, $BB, $26, $BD, $4E, $D4, $D8, $C5, $B5, $BC, $4E, $D4 - db $D2, $D9, $50, $FA, $DD, $C5, $CD, $BE, $4E, $21, $F3, $C2, $0E, $07, $C5, $D5 - db $E5, $CD, $93, $0E, $E1, $11, $28, $00, $19, $D1, $13, $13, $13, $13, $13, $C1 - db $0D, $20, $EB, $C9, $FA, $DE, $C5, $CD, $AD, $4E, $21, $FE, $C2, $CD, $93, $0E - db $FA, $DF, $C5, $CD, $AD, $4E, $21, $26, $C3, $CD, $93, $0E, $C9, $A7, $28, $05 - db $3D, $CD, $BE, $4E, $C9, $11, $B9, $4E, $C9, $E3, $E3, $E3, $E3, $50, $5F, $16 - db $00, $21, $CC, $4E, $19, $19, $19, $19, $19, $5D, $54, $C9 + db DEX_MAROWAK ; 91 + db DEX_WOLFMAN ; 92 + db DEX_HAUNTER ; 93 + db DEX_ABRA ; 94 + db DEX_ALAKAZAM ; 95 + db DEX_PIDGEOTTO ; 96 + db DEX_PIDGEOT ; 97 + db DEX_STARMIE ; 98 + db DEX_BULBASAUR ; 99 + db DEX_VENUSAUR ; 9a + db DEX_TENTACRUEL ; 9b + db DEX_WARWOLF ; 9c + db DEX_GOLDEEN ; 9d + db DEX_SEAKING ; 9e + db DEX_PORYGON2 ; 9f + db DEX_NAMEIL ; a0 - /* - db DEX_ ; 31 - db DEX_ ; 32 - db DEX_ ; 33 - db DEX_ ; 34 - db DEX_ ; 35 - db DEX_ ; 36 - db DEX_ ; 37 - db DEX_ ; 38 - db DEX_ ; 39 - db DEX_ ; 3a - db DEX_ ; 3b - db DEX_ ; 3c - db DEX_ ; 3d - db DEX_ ; 3e - db DEX_ ; 3f - db DEX_ ; 40 - */ + db DEX_HAGANEIL ; a1 + db DEX_KINGDRA ; a2 + db DEX_PONYTA ; a3 + db DEX_RAPIDASH ; a4 + db DEX_RATTATA ; a5 + db DEX_RATICATE ; a6 + db DEX_NIDORINO ; a7 + db DEX_NIDORINA ; a8 + db DEX_GEODUDE ; a9 + db DEX_PORYGON ; aa + db DEX_AERODACTYL ; ab + db DEX_RAI ; ac + db DEX_MAGNEMITE ; ad + db DEX_EN ; ae + db DEX_SUI ; af + db DEX_CHARMANDER ; b0 - \ No newline at end of file + db DEX_SQUIRTLE ; b1 + db DEX_CHARMELEON ; b2 + db DEX_WARTORTLE ; b3 + db DEX_CHARIZARD ; b4 + db DEX_NYULA ; b5 + db DEX_HOUOU ; b6 + db DEX_TOGEPY ; b7 + db DEX_BULU ; b8 + db DEX_ODDISH ; b9 + db DEX_GLOOM ; ba + db DEX_VILEPLUME ; bb + db DEX_BELLSPROUT ; bc + db DEX_WEEPINBELL ; bd + db DEX_VICTREEBEL ; be + db DEX_HAPPA ; bf + db DEX_HANAMOGURA ; c0 + + db DEX_HANARYU ; c1 + db DEX_HONOGUMA ; c2 + db DEX_VOLBEAR ; c3 + db DEX_DYNABEAR ; c4 + db DEX_KURUSU ; c5 + db DEX_AQUA ; c6 + db DEX_AQUARIA ; c7 + db DEX_HOHO ; c8 + db DEX_BOBO ; c9 + db DEX_PACHIMEE ; ca + db DEX_MOKOKO ; cb + db DEX_DENRYU ; cc + db DEX_MIKON ; cd + db DEX_MONJA ; ce + db DEX_JARANRA ; cf + db DEX_HANEEI ; d0 + + db DEX_PUKU ; d1 + db DEX_SHIBIREFUGU ; d2 + db DEX_PICHU ; d3 + db DEX_PY ; d4 + db DEX_PUPURIN ; d5 + db DEX_MIZUUO ; d6 + db DEX_NATY ; d7 + db DEX_NATIO ; d8 + db DEX_GYOPIN ; d9 + db DEX_MARIL ; da + db DEX_MANBO1 ; db + db DEX_IKARI ; dc + db DEX_GROTESS ; dd + db DEX_EKSING ; de + db DEX_PARA ; df + db DEX_KOKUMO ; e0 + + db DEX_TWOHEAD ; e1 + db DEX_YOROIDORI ; e2 + db DEX_ANIMON ; e3 + db DEX_HINAZU ; e4 + db DEX_SUNNY ; e5 + db DEX_PAON ; e6 + db DEX_DONPHAN ; e7 + db DEX_TWINZ ; e8 + db DEX_KIRINRIKI ; e9 + db DEX_PAINTER ; ea + db DEX_KOUNYA ; eb + db DEX_RINRIN ; ec + db DEX_BERURUN ; ed + db DEX_NYOROTONO ; ee + db DEX_YADOKING ; ef + db DEX_ANNON ; f0 + + db DEX_REDIBA ; f1 + db DEX_MITSUBOSHI ; f2 + db DEX_PUCHICORN ; f3 + db DEX_EIFIE ; f4 + db DEX_BLACKY ; f5 + db DEX_TURBAN ; f6 + db DEX_BETBABY ; f7 + db DEX_TEPPOUO ; f8 + db DEX_OKUTANK ; f9 + db DEX_GONGU ; fa + db DEX_REDIBA ; fb + db DEX_REDIBA ; fc + +; Pokedex_UpdateSearchScreen.Jumptable indexes + const_def + const SEARCHSTATE_INIT_FIRST_MON_TYPE + const SEARCHSTATE_UPDATE_FIRST_MON_TYPE + const SEARCHSTATE_INIT_FIRST_TYPE_SELECTED_MENU + const SEARCHSTATE_UPDATE_FIRST_TYPE_SELECTED_MENU + const SEARCHSTATE_INIT_SECOND_MON_TYPE + const SEARCHSTATE_UPDATE_SECOND_MON_TYPE + const SEARCHSTATE_INIT_SECOND_TYPE_SELECTED_MENU + const SEARCHSTATE_UPDATE_SECOND_TYPE_SELECTED_MENU + const SEARCHSTATE_EXIT_NO_SLOWPOKE_ANIM + const SEARCHSTATE_EXIT_PLAY_SLOWPOKE_ANIM + +Pokedex_SearchByTypeScreen:: + ld hl, wJumptableIndex + ld a, [hl] + push af + xor a + ld [hl], a + + ld hl, hInMenu + ld a, [hl] + push af + ld a, 1 + ld [hl], a + call ClearSprites + call .Init + +.loop + ld a, [wJumptableIndex] + bit JUMPTABLE_EXIT_F, a + jr nz, .return + call Pokedex_UpdateSearchScreen + call DelayFrame + jr .loop + +.return + pop af + ldh [hInMenu], a + pop af + ld [wJumptableIndex], a + ret + +.Init + ld hl, wDexListingCursor + ld c, wDexPlaySlowpokeAnimation - wDexListingCursor + xor a +.init_loop: + ld [hli], a + dec c + jr nz, .init_loop + ret + +Pokedex_UpdateSearchScreen: + jumptable .SearchScreenJumptable, wJumptableIndex + +.SearchScreenJumptable: + dw Pokedex_InitSearchMonType, Pokedex_UpdateSearchMonType + dw Pokedex_InitFirstTypeSelectedMenu, Pokedex_UpdateFirstTypeSelectedMenu + dw Pokedex_InitNextSearchMonType, Pokedex_UpdateNextSearchMonType + dw Pokedex_InitSecondTypeSelectedMenu, Pokedex_UpdateSecondTypeSelectedMenu + dw Pokedex_ExitSearch_NoSlowpokeAnimation, Pokedex_ExitSearch_PlaySlowpokeAnimation + +Pokedex_InitSearchMonType: + xor a + ld hl, wDexSearchMonType1 + ld [hli], a + ld [hli], a + ld [hli], a + call Pokedex_DisplayTypeSearch + ld hl, wJumptableIndex ; SEARCHSTATE_UPDATE_FIRST_MON_TYPE + inc [hl] + ret + +Pokedex_UpdateSearchMonType: + call GetJoypadDebounced + ld de, wDexSearchMonType1 + call Pokedex_GetSearchMenuJoyDown + ret nc + ld a, SEARCHSTATE_EXIT_NO_SLOWPOKE_ANIM + ld [wJumptableIndex], a + ret + +Pokedex_InitFirstTypeSelectedMenu: + ld de, FirstTypeSelectedMenu + call Pokedex_DisplaySearchOptions + ret + +Pokedex_UpdateFirstTypeSelectedMenu: + call GetJoypadDebounced + ld hl, hJoyDown + ld a, [hl] + and A_BUTTON + jr nz, .a_pressed + + ld a, [hl] + and B_BUTTON + jr nz, .b_pressed + + call Pokedex_MoveTypeSelectedMenuCursor + ret + +.b_pressed + ld a, SEARCHSTATE_INIT_FIRST_MON_TYPE + ld [wJumptableIndex], a + ret + +.a_pressed + ld a, [wDexArrowCursorPosIndex] + and a + jr z, .search + + cp 1 + jr z, .select_next_type + + ld a, SEARCHSTATE_EXIT_NO_SLOWPOKE_ANIM + ld [wJumptableIndex], a + ret + +.search + call Pokedex_SearchForMons + ld a, SEARCHSTATE_EXIT_PLAY_SLOWPOKE_ANIM + ld [wJumptableIndex], a + ret + +.select_next_type + ld a, SEARCHSTATE_INIT_SECOND_MON_TYPE + ld [wJumptableIndex], a + ret + +Pokedex_InitNextSearchMonType: + xor a + ld [wDexSearchMonType2], a + ld [wDexArrowCursorPosIndex], a + call Pokedex_DisplayTypeSearch + ld hl, wJumptableIndex ; SEARCHSTATE_UPDATE_SECOND_MON_TYPE + inc [hl] + ret + +Pokedex_UpdateNextSearchMonType: + call GetJoypadDebounced + ld de, wDexSearchMonType2 + call Pokedex_GetSearchMenuJoyDown + ret nc + + ld a, SEARCHSTATE_INIT_FIRST_TYPE_SELECTED_MENU + ld [wJumptableIndex], a + ret + +Pokedex_InitSecondTypeSelectedMenu: + ld de, SecondTypeSelectedMenu + call Pokedex_DisplaySearchOptions + ret + +Pokedex_UpdateSecondTypeSelectedMenu: + call GetJoypadDebounced + ld hl, hJoyDown + ld a, [hl] + and A_BUTTON + jr nz, .a_pressed + + ld a, [hl] + and B_BUTTON + jr nz, .b_pressed + call Pokedex_MoveTypeSelectedMenuCursor + ret + +.b_pressed + ld a, SEARCHSTATE_INIT_SECOND_MON_TYPE + ld [wJumptableIndex], a + ret + +.a_pressed + ld a, [wDexArrowCursorPosIndex] + and a + jr z, .search + + cp 1 + jr z, .back_to_first_type + + ld a, SEARCHSTATE_EXIT_NO_SLOWPOKE_ANIM + ld [wJumptableIndex], a + ret + +.search + call Pokedex_SearchForMons + ld a, SEARCHSTATE_EXIT_PLAY_SLOWPOKE_ANIM + ld [wJumptableIndex], a + ret + +; Unreferenced +.reorder_dex + call Pokedex_OrderMonsByMode + +.back_to_first_type + ld a, SEARCHSTATE_INIT_FIRST_MON_TYPE + ld [wJumptableIndex], a + ret + +Pokedex_ExitSearch_NoSlowpokeAnimation: + xor a + ld [wDexPlaySlowpokeAnimation], a + ld hl, wJumptableIndex + set JUMPTABLE_EXIT_F, [hl] + ret + +Pokedex_ExitSearch_PlaySlowpokeAnimation: + ld a, SEARCHSTATE_UPDATE_FIRST_MON_TYPE + ld [wDexPlaySlowpokeAnimation], a + ld hl, wJumptableIndex + set JUMPTABLE_EXIT_F, [hl] + ret + +Pokedex_GetSearchMenuJoyDown: + ld hl, hJoyDown + ld a, [hl] + and A_BUTTON + jr nz, .a_pressed + + ld a, [hl] + and B_BUTTON + jr nz, .b_pressed + + call Pokedex_MoveSearchMenuCursor + and a + ret + +.b_pressed + scf + ret + +.a_pressed + ld hl, wDexListingCursor + ld a, [wDexArrowCursorPosIndex] + add [hl] + inc a + ld [de], a + call Pokedex_PlaceSearchScreenTypeStrings + call Pokedex_WaitBGMap + + ld hl, wJumptableIndex + inc [hl] + and a + ret + +Pokedex_DisplaySearchOptions: + ; Erase old cursor + push de + ld a, [wDexArrowCursorPosIndex] + call Pokedex_GetSearchScreenCursorPos + ld [hl], " " + + ; Place new cursor + hlcoord 13, 12 + ld [hl], "▶" + xor a + ld [wDexArrowCursorPosIndex], a + pop de + + ; Place the options loaded at de + hlcoord 14, 12 + call PlaceString + call Pokedex_WaitBGMap + + ; Move to update code for next Jumptable loop + ld hl, wJumptableIndex + inc [hl] + ret + +Pokedex_DisplayTypeSearch: + xor a + ldh [hBGMapMode], a + ld hl, wTileMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT +.fill_screen + ld [hl], $6b + inc hl + dec bc + ld a, c + or b + jr nz, .fill_screen + + hlcoord 1, 0 + lb bc, 2, 10 + call ClearBox + + hlcoord 13, 0 + lb bc, 2, 6 + call ClearBox + + hlcoord 0, 2 + lb bc, 16, 12 + call Pokedex_PlaceBorder + + hlcoord 12, 2 + lb bc, 6, 8 + call Pokedex_PlaceBorder + + hlcoord 12, 10 + lb bc, 8, 8 + call Pokedex_PlaceBorder + + hlcoord 1, 1 + ld de, .SearchByTypeString + call PlaceString + + hlcoord 13, 1 + ld de, .SelectedString + call PlaceString + + call Pokedex_PlaceSearchScreenTypeList + call Pokedex_PlaceSearchScreenTypeStrings + hlcoord 2, 4 + ld [hl], "▶" + call Pokedex_WaitBGMap + ret + +.SearchByTypeString: + db "ぞくせい で さがす@" + +.SelectedString: + db "えらんだもの@" + +FirstTypeSelectedMenu: + db "さがす" + next "もうひとつ" + next "やめる@" + +SecondTypeSelectedMenu: + db "さがす" + next "やりなおし" + next "やめる@" + +Pokedex_PlaceSearchScreenTypeList: + ld a, [wDexListingCursor] + call Pokedex_GetTypeString + hlcoord 3, 4 + ld c, 7 +.loop + push bc + push de + push hl + call PlaceString + pop hl + ld de, SCREEN_WIDTH * 2 + add hl, de + pop de +rept POKEDEX_TYPE_STRING_LENGTH + inc de +endr + pop bc + dec c + jr nz, .loop + ret + +Pokedex_PlaceSearchScreenTypeStrings: + ld a, [wDexSearchMonType1] + call .check_type + hlcoord 14, 4 + call PlaceString + + ld a, [wDexSearchMonType2] + call .check_type + hlcoord 14, 6 + call PlaceString + ret + +.check_type + and a + jr z, .no_type_selected + dec a + call Pokedex_GetTypeString + ret + +.no_type_selected + ld de, .NoTypeString + ret + +.NoTypeString +db "ーーーー@" + +Pokedex_GetTypeString: + ld e, a + ld d, $00 + ld hl, PokedexTypeSearchStrings +rept POKEDEX_TYPE_STRING_LENGTH + add hl, de +endr + ld e, l + ld d, h + ret + +INCLUDE "data/types/search_strings.inc" + +Pokedex_MoveSearchMenuCursor: + ld hl, hJoySum + ld a, [hl] + and D_UP + jr nz, .up + + ld a, [hl] + and D_DOWN + jr nz, .down + ret + +.up + call .MoveUp + ret nc + + ld hl, wDexListingCursor + ld a, [hl] + and a + ret z + + dec [hl] + hlcoord 3, 3 + lb bc, 14, 8 + call ClearBox + call Pokedex_PlaceSearchScreenTypeList + call Pokedex_WaitBGMap + ret + +.down + call .MoveDown + ret nc + + ld hl, wDexListingCursor + ld a, [hl] + cp $8 + ret nc + + inc [hl] + hlcoord 3, 3 + lb bc, 14, 8 + call ClearBox + call Pokedex_PlaceSearchScreenTypeList + call Pokedex_WaitBGMap + ret + +.MoveUp: + ld a, [wDexArrowCursorPosIndex] + and a + jr z, .set_carry_flag_up + + call Pokedex_GetSearchScreenCursorPos + ld [hl], " " + ld hl, wDexArrowCursorPosIndex + dec [hl] + jr .PutArrow + +.set_carry_flag_up + scf + ret + +.MoveDown: + ld a, [wDexArrowCursorPosIndex] + cp 6 + jr nc, .set_carry_flag_down + + call Pokedex_GetSearchScreenCursorPos + ld [hl], " " + ld hl, wDexArrowCursorPosIndex + inc [hl] + jr .PutArrow + +.set_carry_flag_down + scf + ret + +.PutArrow: + ld a, [hl] + call Pokedex_GetSearchScreenCursorPos + ld [hl], "▶" + call Pokedex_WaitBGMap + and a + ret + +Pokedex_GetSearchScreenCursorPos: + ld e, a + ld d, $00 + ld hl, .CursorPosTable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ret + +.CursorPosTable: + dwcoord 2, 4 + dwcoord 2, 6 + dwcoord 2, 8 + dwcoord 2, 10 + dwcoord 2, 12 + dwcoord 2, 14 + dwcoord 2, 16 + +Pokedex_MoveTypeSelectedMenuCursor: + ld hl, hJoyDown + ld a, [hl] + and D_UP + jr nz, .up + + ld a, [hl] + and D_DOWN + jr nz, .down + ret + +.up + ld a, [wDexArrowCursorPosIndex] + and a + ret z + + call Pokedex_GetTypeSelectedMenuCursorPos + ld [hl], " " + ld hl, wDexArrowCursorPosIndex + dec [hl] + jr .PutArrow + +.down + ld a, [wDexArrowCursorPosIndex] + cp $2 + ret nc + + call Pokedex_GetTypeSelectedMenuCursorPos + ld [hl], " " + ld hl, wDexArrowCursorPosIndex + inc [hl] + +.PutArrow: + ld a, [hl] + call Pokedex_GetTypeSelectedMenuCursorPos + ld [hl], "▶" + call Pokedex_WaitBGMap + and a + ret + +Pokedex_GetTypeSelectedMenuCursorPos: + ld e, a + ld d, 0 + ld hl, .CursorPosTable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ret + +.CursorPosTable: + dwcoord 13, 12 + dwcoord 13, 14 + dwcoord 13, 16 + +Pokedex_SearchForMons: + ld a, [wDexSearchMonType2] + and a + jr z, .next_type + call .Search +.next_type + ld a, [wDexSearchMonType1] + and a + ret z + call .Search + ret + +.Search: + dec a + ld e, a + ld d, $00 + ld hl, PokedexTypeSearchConversionTable + add hl, de + ld a, [hl] + ld [wDexConvertedMonType], a + ld hl, wPokedexOrder + ld de, wPokedexOrder + ld c, NUM_POKEMON + xor a + ld [wDexSearchResultCount], a +.loop + push bc + ld a, [hl] + and a + jr z, .next_mon + ld [wTempSpecies], a + ld [wCurSpecies], a + + call Pokedex_CheckCaught + jr z, .next_mon + push hl + push de + call GetBaseData + pop de + pop hl + + ld a, [wDexConvertedMonType] + ld b, a + ld a, [wMonHType1] + cp b + jr z, .match_found + + ld a, [wMonHType2] + cp b + jr nz, .next_mon + +.match_found + ld a, [wTempSpecies] + ld [de], a + inc de + ld a, [wDexSearchResultCount] + inc a + ld [wDexSearchResultCount], a +.next_mon + inc hl + pop bc + dec c + jr nz, .loop + + ld l, e + ld h, d + ld a, [wDexSearchResultCount] + ld [wDexListingEnd], a + ld c, $00 + +.zero_remaining_mons + cp NUM_POKEMON + jr z, .done + ld [hl], c + inc hl + inc a + jr .zero_remaining_mons + +.done + ret + +INCLUDE "data/types/search_types.inc" + +Pokedex_WaitBGMap: + call WaitBGMap + xor a + ldh [hBGMapMode], a + ret + +Pokedex_UnownMode: + ld hl, wJumptableIndex + ld a, [hl] + push af + xor a + ld [hl], a + + ld hl, hInMenu + ld a, [hl] + push af + ld a, $01 + ld [hl], a + + call ClearSprites + call GetDexUnownCount + +.Loop + ld a, [wJumptableIndex] + bit JUMPTABLE_EXIT_F, a + jr nz, .done + + call Pokedex_RunUnownModeJumptable + call DelayFrame + jr .Loop + +.done: + pop af + ldh [hInMenu], a + pop af + ld [wJumptableIndex], a + ret + +GetDexUnownCount: + ld hl, wDexListingCursor + ld bc, wDexPlaySlowpokeAnimation - wDexListingCursor + xor a + call ByteFill + ld hl, wUnownDex + ld bc, NUM_UNOWN +.annon_loop: + ld a, [hli] + and a + jr z, .no_annon + inc b +.no_annon + dec c + jr nz, .annon_loop + + ld a, b + ld [wDexUnownCount], a + ret + +Pokedex_RunUnownModeJumptable: + jumptable .Jumptable, wJumptableIndex + +.Jumptable +dw .Init, .Update, .ShowUnownLetter + +.Init: + ld hl, wJumptableIndex + inc [hl] + call Pokedex_InitUnownMode + ret + +.Update: + call GetJoypadDebounced + ld hl, hJoyDown + ld a, [hl] + and A_BUTTON + jr nz, .selected_unown + ld a, [hl] + and B_BUTTON + jr nz, .exit + call Pokedex_UnownModeHandleDPadInput + ret + +.exit + ld hl, wJumptableIndex + set JUMPTABLE_EXIT_F, [hl] + ret + +.selected_unown + ld hl, wJumptableIndex + inc [hl] + ret + +.ShowUnownLetter: + ld hl, wDexListingCursor + ld a, [wDexArrowCursorPosIndex] + add [hl] + ld e, a + inc a + ld [wDexCurUnownIndex], a + ld d, $00 + ld hl, wUnownDex + add hl, de + ld a, [hl] + ld [wAnnonID], a + ld a, DEX_ANNON + ld [wCurPartySpecies], a + ld [wCurSpecies], a + call GetBaseData + + xor a + ld [wSpriteFlipped], a + hlcoord 12, 10 + call _PrepMonFrontpic + + hlcoord 12, 8 + call PrintUnownListEntry + + call Pokedex_WaitBGMap + ld hl, wJumptableIndex + dec [hl] + ret + +Pokedex_InitUnownMode: + xor a + ldh [hBGMapMode], a + ld hl, wTileMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, $6b + call ByteFill + + hlcoord 0, 2 + lb bc, 16, 11 + call Pokedex_PlaceBorder + + hlcoord 11, 2 + lb bc, 6, 9 + call Pokedex_PlaceBorder + + hlcoord 11, 9 + lb bc, 9, 9 + call Pokedex_PlaceBorder + + hlcoord 4, 1 + ld de, .UnownVariantsString + call PlaceString + + hlcoord 13, 4 + ld de, .VariantsDiscoveredString + call PlaceString + + hlcoord 13, 4 + ld de, wDexUnownCount + lb bc, 1, 2 + call PrintNumber + + hlcoord 12, 8 + call PrintUnownListEntry + hlcoord 17, 8 + ld a, "?" + ld [hli], a + ld [hl], a + call PrintUnownList + hlcoord 2, 4 + ld [hl], "▶" + call Pokedex_WaitBGMap + ret + +.UnownVariantsString: + db "アンノーン の しゅるい@" + +.VariantsDiscoveredString: + db "  しゅるい はっけん!@" + + +PrintUnownList: + ld a, [wDexUnownCount] + cp 7 + jr c, .max_length + ld a, 7 + +.max_length + ld [wDexUnownModeListLength], a + ld a, [wDexListingCursor] + inc a + ld [wDexCurUnownIndex], a + hlcoord 3, 4 + ld a, [wDexUnownModeListLength] + +.loop + push af + push hl + call PrintUnownListEntry + ld hl, wDexCurUnownIndex + inc [hl] + pop hl + ld de, SCREEN_WIDTH * 2 + add hl, de + pop af + dec a + jr nz, .loop + ret + +PrintUnownListEntry: + ld de, .UnownString + call PlaceString + ld l, c + ld h, b + ld de, wDexCurUnownIndex + lb bc, 1 | %10000000, 2 + call PrintNumber + ret + +.UnownString: + db "アンノーン@" + +Pokedex_UnownModeHandleDPadInput: + ld hl, hJoySum + ld a, [hl] + and D_UP + jr nz, .up + + ld a, [hl] + and D_DOWN + jr nz, .down + ret + +.up + call .ScrollListUp + ret nc + ld hl, wDexListingCursor + ld a, [hl] + and a + ret z + + dec [hl] + hlcoord 3, 3 + lb bc, 14, 7 + call ClearBox + call PrintUnownList + call Pokedex_WaitBGMap + ret + +.down + call .ScrollListDown + ret nc + ld a, [wDexUnownCount] + cp 7 + ret c + + ld a, [wDexUnownCount] + sub 7 + ld e, a + ld hl, wDexListingCursor + ld a, [hl] + cp e + ret nc + + inc [hl] + hlcoord 3, 3 + lb bc, 14, 7 + call ClearBox + call PrintUnownList + call Pokedex_WaitBGMap + ret + +.ScrollListUp: + ld a, [wDexArrowCursorPosIndex] + and a + jr z, .top_of_list + + call .GetCursorPos + ld [hl], " " + ld hl, wDexArrowCursorPosIndex + dec [hl] + jr .PlaceArrow + +.top_of_list + scf + ret + +.ScrollListDown: + ld a, [wDexUnownCount] + cp 7 + jr c, .longer_than_7_entries + ld a, 7 + +.longer_than_7_entries + dec a + ld e, a + ld a, [wDexArrowCursorPosIndex] + cp e + jr nc, .bottom_of_list + + call .GetCursorPos + ld [hl], " " + ld hl, wDexArrowCursorPosIndex + inc [hl] + jr .PlaceArrow + +.bottom_of_list + scf + ret + +.PlaceArrow: + ld a, [hl] + call Pokedex_GetSearchScreenCursorPos + ld [hl], "▶" + call Pokedex_WaitBGMap + and a + ret + +.GetCursorPos: + ld e, a + ld d, $00 + ld hl, .CursorPosTable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ret + +.CursorPosTable: + dwcoord 2, 4 + dwcoord 2, 6 + dwcoord 2, 8 + dwcoord 2, 10 + dwcoord 2, 12 + dwcoord 2, 14 + dwcoord 2, 16 diff --git a/engine/dumps/bank14.asm b/engine/dumps/bank14.asm index 8c0c8e2..b696c2a 100644 --- a/engine/dumps/bank14.asm +++ b/engine/dumps/bank14.asm @@ -499,7 +499,7 @@ Function50340:: hlcoord 18, 1 ld [hl], $41 - ld hl, wccd9 + ld hl, wCurHPPal call SetHPPal ld b, SGB_STATS_SCREEN_HP_PALS call GetSGBLayout @@ -1142,7 +1142,7 @@ Function5081f:: ld a, [wPartyMenuActionText] cp PARTYMENUACTION_MOVE jp z, Function509dd - callfar Function8f0cc + callfar LoadOverworldMonIcon call Function50eca callfar Function95f8 hlcoord 3, 1 @@ -1160,13 +1160,13 @@ Function5081f:: call Function508c4 pop de ld a, [wCurPartyMon] - ldh [hEventID], a + ldh [hObjectStructIndex], a push hl push de - ld hl, Function8f0e3 - ld a, BANK(Function8f0e3) ; ...What macro do I use here? - ld e, 0 + ld hl, LoadMenuMonIcon + ld a, BANK(LoadMenuMonIcon) ; ...What macro do I use here? + ld e, MONICON_PARTYMENU call FarCall_hl pop de @@ -1540,7 +1540,7 @@ Text_50b4e: ; leveled up db "@" Function50b66:: - ld hl, wccd3 + ld hl, wHPPals ld a, [wcce1] ld c, a ld b, $00 diff --git a/engine/dumps/bank23.asm b/engine/dumps/bank23.asm index 18302e8..a3cc62e 100644 --- a/engine/dumps/bank23.asm +++ b/engine/dumps/bank23.asm @@ -27,3 +27,47 @@ AnimateTilesetImpl: ld h, [hl] ld l, a jp hl + +SECTION "engine/dumps/bank23.asm@RestoreOverworldMapTiles", ROMX + +RestoreOverworldMapTiles:: + xor a + call OpenSRAM + ld hl, wTileMap + ld de, sScratch + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + call CopyBytes + call CloseSRAM + farcall ReanchorBGMap_NoOAMUpdate + + xor a + call OpenSRAM + ld hl, sScratch + ld de, wTileMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT +.loop + ld a, [hl] + cp $61 + jr c, .next + ld [de], a +.next + inc hl + inc de + dec bc + ld a, c + or b + jr nz, .loop + + call CloseSRAM + call UpdateSprites + call WaitBGMap + ld a, 144 + ldh [hWY], a + call DelayFrame + + xor a + ldh [hBGMapMode], a + call InitToolgearBuffer + ld b, SGB_MAP_PALS + call GetSGBLayout + ret diff --git a/engine/games/memory_minigame.asm b/engine/games/memory_minigame.asm index caedba2..0b95fbe 100644 --- a/engine/games/memory_minigame.asm +++ b/engine/games/memory_minigame.asm @@ -35,7 +35,7 @@ MemoryMinigame: call DisableLCD ld b, SGB_DIPLOMA call GetSGBLayout - callfar InitEffectObject + callfar ClearSpriteAnims ld hl, MemoryGameGFX ld de, vChars2 @@ -49,7 +49,7 @@ MemoryMinigame: ld a, BANK(PointerGFX) call FarCopyData - ld a, SPRITE_ANIM_DICT_29 + ld a, SPRITE_ANIM_DICT_ARROW_CURSOR ld hl, wSpriteAnimDict ld [hli], a ld [hl], 0 @@ -79,7 +79,7 @@ MemoryMinigame: bit MEMORYGAME_END_LOOP_F, a jr nz, .quit call .ExecuteJumptable - callfar EffectObjectJumpNoDelay + callfar PlaySpriteAnimations call DelayFrame and a ret @@ -142,7 +142,7 @@ endr .spawn_object depixel 6, 3, 4, 4 - ld a, SPRITE_ANIM_INDEX_MEMORY_GAME_CURSOR + ld a, SPRITE_ANIM_OBJ_MEMORY_GAME_CURSOR call InitSpriteAnimStruct ld a, 5 ld [wMemoryGameNumberTriesRemaining], a @@ -531,7 +531,8 @@ MemoryGame_Card2Coord: add hl, de ret -MemoryGame_AnimateCursor: ; Called from sprite animation routine? +; Called from sprite animation routine? +MemoryGame_AnimateCursor: ld a, [wJumptableIndex] cp MEMORYGAME_REVEAL_ALL jr nc, .quit @@ -561,7 +562,7 @@ MemoryGame_AnimateCursor: ; Called from sprite animation routine? ret .pressed_a - ld hl, SPRITEANIMSTRUCT_0C + ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] inc a @@ -576,7 +577,7 @@ MemoryGame_AnimateCursor: ; Called from sprite animation routine? ret z sub 1 tiles ld [hl], a - ld hl, SPRITEANIMSTRUCT_0C + ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc dec [hl] ret @@ -589,7 +590,7 @@ MemoryGame_AnimateCursor: ; Called from sprite animation routine? ret z add 1 tiles ld [hl], a - ld hl, SPRITEANIMSTRUCT_0C + ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc inc [hl] ret @@ -602,7 +603,7 @@ MemoryGame_AnimateCursor: ; Called from sprite animation routine? ret z sub 1 tiles ld [hl], a - ld hl, SPRITEANIMSTRUCT_0C + ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] sub 9 @@ -617,7 +618,7 @@ MemoryGame_AnimateCursor: ; Called from sprite animation routine? ret z add a, $10 ld [hl], a - ld hl, SPRITEANIMSTRUCT_0C + ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] add a, 9 diff --git a/engine/games/picross_minigame.asm b/engine/games/picross_minigame.asm index 1986023..391353d 100644 --- a/engine/games/picross_minigame.asm +++ b/engine/games/picross_minigame.asm @@ -43,13 +43,13 @@ PicrossMinigame: .Init: call DisableLCD - farcall InitEffectObject + farcall ClearSpriteAnims call .InitGFX call .PlacePlayerBG call .InitRAM depixel 8, 8, 0, 0 - ld a, SPRITE_ANIM_INDEX_MINIGAME_PICROSS_CURSOR + ld a, SPRITE_ANIM_OBJ_MINIGAME_PICROSS_CURSOR call InitSpriteAnimStruct ld a, c @@ -58,7 +58,7 @@ PicrossMinigame: ld [wPicrossCursorSpritePointer+1], a depixel 5, 4, 4, 4 - ld a, SPRITE_ANIM_INDEX_MINIGAME_PICROSS_GOLD + ld a, SPRITE_ANIM_OBJ_MINIGAME_PICROSS_GOLD call InitSpriteAnimStruct ld a, -1 @@ -214,14 +214,14 @@ PicrossMinigame: ld a, BANK(GoldSpriteGFX) call FarCopyData - ld a, SPRITE_ANIM_DICT_25 + ld a, SPRITE_ANIM_DICT_MINIGAME_PICROSS ld hl, wSpriteAnimDict ld [hli], a - ld [hl], SPRITE_ANIM_DICT_DEFAULT + ld [hl], SPRITE_ANIM_DICT_NULL inc hl - ld a, SPRITE_ANIM_DICT_22 + ld a, SPRITE_ANIM_DICT_GS_INTRO_2 ld [hli], a - ld [hl], SPRITE_ANIM_DICT_10 + ld [hl], SPRITE_ANIM_DICT_TAUROS_ICON ret .PlacePlayerBG: @@ -265,7 +265,7 @@ PicrossMinigame: jr nz, .quit call .ExecuteJumptable - farcall EffectObjectJumpNoDelay + farcall PlaySpriteAnimations call DelayFrame and a ret @@ -277,14 +277,14 @@ PicrossMinigame: .GetJoypadState: call GetJoypadDebounced ldh a, [hJoyState] - ld [wc606], a - ld hl, wc607 + ld [wPicrossJoyStateBuffer], a + ld hl, wPicrossCursorMovementDelay ld a, [hl] and a ret z dec [hl] xor a - ld [wc606], a + ld [wPicrossJoyStateBuffer], a ret .ExecuteJumptable: @@ -555,7 +555,7 @@ Picross_ProcessJoypad: .mark_cell ld [wPicrossJoypadAction], a ld a, 1 - ld [wca59], a + ld [wPicrossAnimateDust], a call Picross_DetermineGridCoord call Picross_MarkCell call Picross_InitDustObject @@ -582,7 +582,7 @@ Picross_InitDustObject: ret nz ; Make dust object only if we are marking a cell - ld a, SPRITE_ANIM_INDEX_MINIGAME_PICROSS_DUST + ld a, SPRITE_ANIM_OBJ_MINIGAME_PICROSS_DUST call InitSpriteAnimStruct ret diff --git a/engine/games/pikachu_minigame.asm b/engine/games/pikachu_minigame.asm index 88121fa..8d621d2 100644 --- a/engine/games/pikachu_minigame.asm +++ b/engine/games/pikachu_minigame.asm @@ -38,7 +38,7 @@ PikachuMiniGame:: call DisableLCD ld b, SGB_PIKACHU_MINIGAME call GetSGBLayout - callfar InitEffectObject + callfar ClearSpriteAnims call PikachuMiniGame_ClearBothTilemaps ld hl, IntroForestGFX @@ -75,9 +75,9 @@ PikachuMiniGame:: call PikachuMiniGame_DrawBackground ld hl, wSpriteAnimDict - ld a, SPRITE_ANIM_INDEX_GS_INTRO_OMANYTE + ld a, SPRITE_ANIM_OBJ_GS_INTRO_OMANYTE ld [hli], a - ld a, SPRITE_ANIM_DICT_DEFAULT + ld a, SPRITE_ANIM_DICT_NULL ld [hli], a call PikachuMiniGame_LoadFont @@ -136,7 +136,7 @@ PikachuMiniGame:: .load_pikachu depixel 14, 11 - ld a, SPRITE_ANIM_INDEX_MINIGAME_PIKACHU + ld a, SPRITE_ANIM_OBJ_MINIGAME_PIKACHU call InitSpriteAnimStruct ; Save pointer to the newly initialized Pikachu object @@ -147,7 +147,7 @@ PikachuMiniGame:: ; load Pikachu's tail object depixel 14, 11 - ld a, SPRITE_ANIM_INDEX_MINIGAME_PIKACHU_TAIL + ld a, SPRITE_ANIM_OBJ_MINIGAME_PIKACHU_TAIL call InitSpriteAnimStruct ld a, c @@ -362,7 +362,7 @@ PikachuMiniGame_RunFrame: .skip_playing_sfx call PikachuMiniGame_PerformGameFunction - farcall EffectObjectJumpNoDelay + farcall PlaySpriteAnimations ld a, 1 ldh [hBGMapMode], a @@ -382,7 +382,7 @@ PikachuMiniGame_RunFrame: ret .Done: - callfar InitEffectObject + callfar ClearSpriteAnims ld hl, wShadowOAM ld c, SPRITEOAMSTRUCT_LENGTH * NUM_SPRITE_OAM_STRUCTS @@ -584,7 +584,7 @@ PikachuMiniGame_WaitAndGotoNextScene: PikachuMiniGame_ShowJigglypuff: depixel 14, 24 - ld a, SPRITE_ANIM_INDEX_MINIGAME_JIGGLYPUFF + ld a, SPRITE_ANIM_OBJ_MINIGAME_JIGGLYPUFF call InitSpriteAnimStruct xor a @@ -687,7 +687,7 @@ PikachuMiniGame_NoteSpawner: ld a, 3 ld [wSpriteAnimCount], a - ld a, SPRITE_ANIM_INDEX_MINIGAME_NOTE + ld a, SPRITE_ANIM_OBJ_MINIGAME_NOTE call InitSpriteAnimStruct ; add one to the note counter diff --git a/engine/games/slot_machine_game.asm b/engine/games/slot_machine_game.asm index bd031cc..db3a514 100644 --- a/engine/games/slot_machine_game.asm +++ b/engine/games/slot_machine_game.asm @@ -111,7 +111,7 @@ SlotMachineGame_Init: call DisableLCD ld b, SGB_SLOT_MACHINE call GetSGBLayout - callfar InitEffectObject + callfar ClearSpriteAnims ld hl, wSlots ld bc, wSlotsDataEnd - wSlots xor a @@ -174,10 +174,10 @@ SlotMachineGame_Init: ld a, %11000000 ldh [rOBP1], a - ld a, SPRITE_ANIM_INDEX_28 + ld a, SPRITE_ANIM_DICT_SLOTS ld hl, wSpriteAnimDict ld [hli], a - ld [hl], SPRITE_ANIM_INDEX_20 + ld [hl], $20 xor a ld [wJumptableIndex], a @@ -192,7 +192,7 @@ SlotsLoop: call SlotsJumptable call Slots_SpinReels ld a, $60 - ld [wc4bd], a + ld [wCurSpriteOAMAddr], a callfar DoNextFrameForFirst16Sprites call Slots_PrintCoinsAndPayout call Slots_FlashPaletteOnMatchingSevens @@ -1228,9 +1228,9 @@ ReelAction_InitGolem: push bc push af depixel 12, 13 - ld a, SPRITE_ANIM_INDEX_SLOTS_GOLEM + ld a, SPRITE_ANIM_OBJ_SLOTS_GOLEM call InitSpriteAnimStruct - ld hl, SPRITEANIMSTRUCT_0E + ld hl, SPRITEANIMSTRUCT_VAR3 add hl, bc pop af ld [hl], a @@ -1282,7 +1282,7 @@ ReelAction_InitChansey: ld [hl], 0 push bc depixel 12, 0 - ld a, SPRITE_ANIM_INDEX_SLOTS_CHANSEY + ld a, SPRITE_ANIM_OBJ_SLOTS_CHANSEY call InitSpriteAnimStruct pop bc xor a @@ -1997,7 +1997,7 @@ Slots_AnimateGolem: dw .roll .init - ld hl, SPRITEANIMSTRUCT_0E + ld hl, SPRITEANIMSTRUCT_VAR3 add hl, bc ld a, [hl] and a @@ -2014,7 +2014,7 @@ Slots_AnimateGolem: ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX add hl, bc inc [hl] - ld hl, SPRITEANIMSTRUCT_0C + ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld [hl], $30 ld hl, SPRITEANIMSTRUCT_XOFFSET @@ -2022,7 +2022,7 @@ Slots_AnimateGolem: ld [hl], 0 .fall - ld hl, SPRITEANIMSTRUCT_0C + ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] cp $20 @@ -2041,7 +2041,7 @@ Slots_AnimateGolem: ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX add hl, bc inc [hl] - ld hl, SPRITEANIMSTRUCT_0D + ld hl, SPRITEANIMSTRUCT_VAR2 add hl, bc ld [hl], 2 ld a, 1 @@ -2058,7 +2058,7 @@ Slots_AnimateGolem: jr nc, .restart and 3 ret nz - ld hl, SPRITEANIMSTRUCT_0D + ld hl, SPRITEANIMSTRUCT_VAR2 add hl, bc ld a, [hl] xor $ff @@ -2121,12 +2121,12 @@ Slots_AnimateChansey: ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX add hl, bc inc [hl] - ld hl, SPRITEANIMSTRUCT_0C + ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld [hl], 8 .two - ld hl, SPRITEANIMSTRUCT_0C + ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] and a @@ -2140,7 +2140,7 @@ Slots_AnimateChansey: dec [hl] push bc depixel 12, 13, 0, 4 - ld a, SPRITE_ANIM_INDEX_SLOTS_EGG + ld a, SPRITE_ANIM_OBJ_SLOTS_EGG call InitSpriteAnimStruct pop bc ret diff --git a/engine/gfx/mon_icons.asm b/engine/gfx/mon_icons.asm new file mode 100644 index 0000000..6d02fc9 --- /dev/null +++ b/engine/gfx/mon_icons.asm @@ -0,0 +1,272 @@ +INCLUDE "constants.asm" + +SECTION "engine/gfx/mon_icons.asm", ROMX + +LoadOverworldMonIcon:: + push hl + push de + push bc + push af + ld hl, wSpriteAnimDict + ld bc, wSpriteAnimDataEnd - wSpriteAnimData +.loop + ld [hl], $00 + inc hl + dec bc + ld a, c + or b + jr nz, .loop + + pop af + pop bc + pop de + pop hl + 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: + ldh a, [hObjectStructIndex] + ld hl, wPartySpecies + ld e, a + ld d, 0 + add hl, de + ld a, [hl] + call ReadMonMenuIcon + ld [wCurIcon], a + call GetMemIconGFX + +; y coord (hObjectStructIndex * 4 + 26) + ldh a, [hObjectStructIndex] +rept 4 + add a +endr + add 3 * TILE_WIDTH + 2 + ld d, a +; x coord + ld e, 2 * TILE_WIDTH + + ld a, [wCurIcon] + call _InitSpriteAnimStruct + +; Get the party mon icon's animation speed + ld hl, wHPPals + ld d, $00 + ldh a, [hObjectStructIndex] + ld e, a + add hl, de + ld e, [hl] + ld hl, .speeds + add hl, de + ld a, [hl] + ld hl, SPRITEANIMSTRUCT_DURATIONOFFSET + add hl, bc + ld [hl], a + ret + +.speeds + db 0 ; HP_GREEN + db 16 ; HP_YELLOW + db 32 ; HP_RED + +NamingScreen_InitAnimatedMonIcon: + ld a, [wTempIconSpecies] + call ReadMonMenuIcon + ld [wCurIcon], a + call GetMemIconGFX + lb de, 36, 32 + ld a, [wCurIcon] + call _InitSpriteAnimStruct + ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID + add hl, bc + ld [hl], SPRITE_ANIM_FUNC_NULL + ret + +MoveList_InitAnimatedMonIcon: + ld a, [wTempIconSpecies] + call ReadMonMenuIcon + ld [wCurIcon], a + call GetMemIconGFX + ld d, 3 * TILE_WIDTH + 2 ; depixel 3, 3, 2, 0 + ld e, 3 * TILE_WIDTH + ld a, [wCurIcon] + call _InitSpriteAnimStruct + ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID + add hl, bc + ld [hl], SPRITE_ANIM_FUNC_NULL + ret + +Trade_LoadMonIconGFX: + ld a, [wTempIconSpecies] + call ReadMonMenuIcon + ld [wCurIcon], a + ld a, $62 + ld [wCurIconTile], a + call GetMemIconGFX + ret + +GetMemIconGFX: + call .CheckSpriteAnimDict + ret c + + ld [hli], a + ld a, [wCurIconTile] + ld [hli], a + ld l, a + ld h, $00 +rept 4 + add hl, hl +endr + ld de, vChars0 + add hl, de + ld a, [wCurIcon] + call LoadSpriteAnimGFX + + ld a, [wCurIconTile] + add c + ld [wCurIconTile], a + ret + +; Scroll through SpriteAnimDict for empty slots to put the requested icon in. +; If sprite space is full, or tile requested is too high, returns carry flag. +.CheckSpriteAnimDict: + push af + ld d, a + ld hl, wSpriteAnimDict + ld e, NUM_SPRITEANIMDICT_ENTRIES +.loop + ld a, [hl] + cp d + jr z, .set_carry_flag + + and a + jr z, .slot_available + + inc hl + inc hl + dec e + jr z, .set_carry_flag + + jr .loop + +.slot_available +; If icon's tile infringes on vChars1, don't get the graphics + ld a, [wCurIconTile] + cp $80 + jr nc, .set_carry_flag + + pop af + and a + ret + +.set_carry_flag + pop af + scf + ret + +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_FUNC_NULL + jr .ok + +.loadwithtwo + ld a, SPRITE_ANIM_FUNC_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, wSpriteAnim2 - wSpriteAnim1 + add hl, bc + dec e + jr nz, .loop + ret + +UnfreezeMonIcons: + ld hl, wSpriteAnimationStructs + ld e, PARTY_LENGTH + ld a, [wSelectedSwapPosition] + ld d, a +.loop + ld a, [hl] + and a + jr z, .next + cp d + jr z, .loadwithtwo + + ld a, SPRITE_ANIM_FUNC_PARTY_MON_SELECTED + jr .ok + +.loadwithtwo + ld a, SPRITE_ANIM_FUNC_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, wSpriteAnim2 - wSpriteAnim1 + add hl, bc + dec e + jr nz, .loop + ret + +ReadMonMenuIcon: + cp DEX_EGG + jr z, .egg + dec a + ld hl, MonMenuIcons + ld e, a + ld d, 0 + add hl, de + ld a, [hl] + ret +.egg +; Even though a proper egg icon exists (ID $1c), the function uses a zeroed-out value as a placeholder + ld a, $00 + ret + +INCLUDE "data/pokemon/menu_icons.inc" diff --git a/engine/gfx/sgb_layouts.asm b/engine/gfx/sgb_layouts.asm index e277361..c7323a1 100644 --- a/engine/gfx/sgb_layouts.asm +++ b/engine/gfx/sgb_layouts.asm @@ -39,7 +39,7 @@ LoadSGBLayout: dw SGB_TrainerCard dw SGB_MoveList dw SGB_PikachuMinigame - dw SGB_PokedexSelection + dw SGB_Pokedex_WaitBGMap dw SGB_Poker dw SGB12 dw SGB_TrainerGear @@ -125,7 +125,7 @@ SGB_StatsScreenHPPals: call Function957e push af ld hl, wcce2 - ld a, [wccd9] + ld a, [wCurHPPal] add $23 ld [hli], a inc hl @@ -153,7 +153,7 @@ SGB_Pokedex: ld de, BlkPacket_Pokedex ret -SGB_PokedexSelection: +SGB_Pokedex_WaitBGMap: ld hl, PalPacket_GSIntroCharizard ld de, BlkPacket_986c ret @@ -540,7 +540,7 @@ Function95f8: jp CopyBytes SGB_ApplyPartyMenuHPPals: - ld hl, wccd3 + ld hl, wHPPals ld a, [wcce1] ld e, a ld d, $00 diff --git a/engine/items/tmhm.asm b/engine/items/tmhm.asm index ae31482..bb7daf2 100644 --- a/engine/items/tmhm.asm +++ b/engine/items/tmhm.asm @@ -30,7 +30,7 @@ CanLearnTMHMMove: .jump pop hl - ld b, 2 ;CHECK_FLAG + ld b, CHECK_FLAG push de ld d, 0 predef SmallFarFlagAction diff --git a/engine/menu/start_menu.asm b/engine/menu/start_menu.asm index 8e5b5c6..241c6ee 100644 --- a/engine/menu/start_menu.asm +++ b/engine/menu/start_menu.asm @@ -236,7 +236,7 @@ _TrainerCard: StartMenu_Pokedex: call LoadStandardMenuHeader - predef Function40000 + predef Pokedex call ClearPalettes call Function360b call ReloadFontAndTileset @@ -908,7 +908,7 @@ PartyPrompt: ld a, [wCurPartyMon] inc a ld [wSelectedSwapPosition], a - callfar Function8f1f2 + callfar UnfreezeMonIcons ld a, PARTYMENUACTION_MOVE ld [wPartyMenuActionText], a predef PartyMenuInBattle @@ -1472,17 +1472,17 @@ PokeSummary: xor a ldh [hBGMapMode], a callfar LoadOnlyPokemonStatsGraphics - callfar Function8f0cc + callfar LoadOverworldMonIcon ld a, [wCurPartyMon] ld e, a ld d, 0 ld hl, wPartySpecies add hl, de ld a, [hl] - ld [wce37], a - ld hl, Function8f0e3 - ld a, BANK(Function8f0e3) - ld e, 2 + ld [wTempIconSpecies], a + ld hl, LoadMenuMonIcon + ld a, BANK(LoadMenuMonIcon) + ld e, MONICON_MOVES call FarCall_hl hlcoord 0, 1 ld b, 8 diff --git a/engine/menu/text_entry.asm b/engine/menu/text_entry.asm index 3b60d2d..fb91b34 100644 --- a/engine/menu/text_entry.asm +++ b/engine/menu/text_entry.asm @@ -21,10 +21,10 @@ NamingScreen: push af xor a ldh [hMapAnims], a - ldh a, [hJoyDebounceSrc] + ldh a, [hInMenu] push af ld a, $01 - ldh [hJoyDebounceSrc], a + ldh [hInMenu], a call .SetUpNamingScreen call DelayFrame .loop @@ -32,7 +32,7 @@ NamingScreen: jr nc, .loop pop af - ldh [hJoyDebounceSrc], a + ldh [hInMenu], a pop af ldh [hMapAnims], a pop af @@ -84,9 +84,9 @@ GetNamingScreenSetup: dw .Pokemon .Pokemon: - ld hl, Function8f0e3 - ld a, BANK(Function8f0e3) - ld e, 1 + ld hl, LoadMenuMonIcon + ld a, BANK(LoadMenuMonIcon) + ld e, MONICON_NAMINGSCREEN call FarCall_hl call GetPokemonName hlcoord 5, 2 @@ -148,7 +148,7 @@ GetNamingScreenSetup: ld [hl+], a ld [hl], $00 depixel 4, 4, 4, 0 - ld a, SPRITE_ANIM_INDEX_41 + ld a, SPRITE_ANIM_OBJ_MAP_CHARACTER_ICON call InitSpriteAnimStruct ld hl, $0001 add hl, bc @@ -181,7 +181,7 @@ GetNamingScreenSetup: ld [hli], a ld [hl], $00 depixel 4, 4, 4, 0 - ld a, SPRITE_ANIM_INDEX_41 + ld a, SPRITE_ANIM_OBJ_MAP_CHARACTER_ICON call InitSpriteAnimStruct ret @@ -255,7 +255,7 @@ NamingScreenJoypadLoop: .leap ; kills sprites and resets screen position - callfar InitEffectObject + callfar ClearSpriteAnims call ClearSprites xor a ldh [hSCX], a @@ -302,7 +302,7 @@ NamingScreenJoypadLoop: .InitCursor: depixel 11, 3, 0, 0 - ld a, SPRITE_ANIM_INDEX_39 + ld a, SPRITE_ANIM_OBJ_NAMING_SCREEN_CURSOR call InitSpriteAnimStruct ld a, c ld [wNamingScreenCursorObjectPointer], a @@ -347,7 +347,7 @@ NamingScreenJoypadLoop: set 7, [hl] ret -.GetDPad: +NamingScreen_AnimateCursor: ld hl, hJoySum ld a, [hl] and D_UP @@ -620,7 +620,7 @@ NamingScreenGetLastCharacter: LoadNamingScreenGFX: call ClearSprites - callfar InitEffectObject + callfar ClearSpriteAnims call LoadFont ld de, TextScreenGFX_End @@ -656,9 +656,9 @@ LoadNamingScreenGFX: ld [hl], $7F xor a ldh [hSCY], a - ld [wc4c7], a + ld [wGlobalAnimYOffset], a ldh [hSCX], a - ld [wc4c8], a + ld [wGlobalAnimXOffset], a ld [wJumptableIndex], a ldh [hBGMapMode], a ld [wNamingScreenCurNameLength], a @@ -678,10 +678,10 @@ ComposeMailMessage: push af xor a ldh [hMapAnims], a - ldh a, [hJoyDebounceSrc] + ldh a, [hInMenu] push af ld a, 1 - ldh [hJoyDebounceSrc], a + ldh [hInMenu], a xor a ld [wFlyDestination], a .outerloop @@ -696,7 +696,7 @@ ComposeMailMessage: jr nz, .outerloop pop af - ldh [hJoyDebounceSrc], a + ldh [hInMenu], a pop af ldh [hMapAnims], a ret @@ -729,20 +729,20 @@ ComposeMailMessage: ld [hli], a ld [hl], 0 depixel 4, 4, 4, 0 - ld a, SPRITE_ANIM_INDEX_08 + ld a, SPRITE_ANIM_OBJ_RHYDON_ICON call InitSpriteAnimStruct ld hl, $0002 add hl, bc ld [hl], 0 depixel 11, 3, 0, 0 - ld a, SPRITE_ANIM_INDEX_39 + ld a, SPRITE_ANIM_OBJ_NAMING_SCREEN_CURSOR call InitSpriteAnimStruct ld a, c ld [wNamingScreenCursorObjectPointer], a ld a, b ld [wNamingScreenCursorObjectPointer + 1], a call InitCharSet - ld a, $E3 + ld a, LCDC_DEFAULT ldh [rLCDC], a call InitMailText call WaitBGMap @@ -818,7 +818,7 @@ DoMailEntry: ret .exit_mail - callfar InitEffectObject + callfar ClearSpriteAnims call ClearSprites xor a ldh [hSCX], a @@ -946,20 +946,20 @@ SetupMail: ld [hli], a ld [hl], 0 depixel 4, 4, 4, 0 - ld a, SPRITE_ANIM_INDEX_08 + ld a, SPRITE_ANIM_OBJ_RHYDON_ICON call InitSpriteAnimStruct - ld hl, $0002 + ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID add hl, bc ld [hl], 0 depixel 12, 3, 0, 0 - ld a, SPRITE_ANIM_INDEX_40 + ld a, SPRITE_ANIM_OBJ_MAIL_WRITING_CURSOR call InitSpriteAnimStruct ld a, c ld [wNamingScreenCursorObjectPointer], a ld a, b ld [wNamingScreenCursorObjectPointer + 1], a call DrawMail - ld a, $E3 + ld a, LCDC_DEFAULT ldh [rLCDC], a call DrawMailLoadedText call WaitBGMap @@ -1047,3 +1047,95 @@ DrawMailTextExtra: MailTextExtra: db "?!12345  67890ー円" + +ComposeMail_AnimateCursor: + ld hl, hJoySum + ld a, [hl] + and D_UP + jr nz, .upJump + ld a, [hl] + and D_DOWN + jr nz, .downJump + ld a, [hl] + and D_LEFT + jr nz, .leftJump + ld a, [hl] + and D_RIGHT + jr nz, .rightJump + ret + +.rightJump + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + cp 13 + jr nc, .skip + inc [hl] + jr .UpdatePositionOffset +.skip + ld [hl], 0 + jr .UpdatePositionOffset +.leftJump + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + and a + jr z, .skip2 + dec [hl] + jr .UpdatePositionOffset +.skip2 + ld [hl], 13 + jr .UpdatePositionOffset +.downJump + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld a, [hl] + cp 4 + jr nc, .skip3 + inc [hl] + jr .UpdatePositionOffset +.skip3 + ld [hl], 00 + jr .UpdatePositionOffset +.upJump + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld a, [hl] + and a + jr z, .skip4 + dec [hl] + jr .UpdatePositionOffset +.skip4 + ld [hl], 4 + jr .UpdatePositionOffset + +.UpdatePositionOffset + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, .XOffsets + add hl, de + ld a, [hl] + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, .YOffsets + add hl, de + ld a, [hl] + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ret + +.XOffsets: + db $00, $08, $10, $18, $20, $28, $30, $48, $50, $58, $60, $68, $70, $78 + +.YOffsets: + db $00, $08, $18, $20, $30 + diff --git a/engine/movie/game_freak_intro.asm b/engine/movie/game_freak_intro.asm index f46aec4..2df5646 100644 --- a/engine/movie/game_freak_intro.asm +++ b/engine/movie/game_freak_intro.asm @@ -77,7 +77,7 @@ GameFreakIntro:: ld a, BANK(GameFreakLogoSparkleGFX) call FarCopyData - farcall InitEffectObject + farcall ClearSpriteAnims ld hl, wSpriteAnimDict ld a, SPRITE_ANIM_DICT_GS_SPLASH @@ -119,7 +119,7 @@ GameFreakIntro:: bit 7, a jr nz, .Finished - farcall EffectObjectJumpNoDelay + farcall PlaySpriteAnimations call GameFreakPresentsScene call DelayFrame @@ -131,7 +131,7 @@ GameFreakIntro:: set 6, [hl] .Finished: - callfar InitEffectObject + callfar ClearSpriteAnims call ClearTileMap call ClearSprites @@ -169,10 +169,10 @@ GameFreakPresents_Star: xor a ld [wIntroSceneFrameCounter], a depixel 10, 11, 4, 0 - ld a, SPRITE_ANIM_INDEX_GS_INTRO_STAR + ld a, SPRITE_ANIM_OBJ_GS_INTRO_STAR call InitSpriteAnimStruct - ld hl, SPRITEANIMSTRUCT_0C + ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld [hl], $a0 ; star path radius @@ -187,7 +187,7 @@ GameFreakPresents_PlaceLogo: ret z depixel 10, 11, 4, 0 - ld a, SPRITE_ANIM_INDEX_GAMEFREAK_LOGO + ld a, SPRITE_ANIM_OBJ_GAMEFREAK_LOGO call InitSpriteAnimStruct call GameFreakPresents_NextScene @@ -293,7 +293,7 @@ GameFreakPresents_Sparkle: ; set up a new sparkle sprite push af depixel 11, 11 - ld a, SPRITE_ANIM_INDEX_GS_INTRO_SPARKLE + ld a, SPRITE_ANIM_OBJ_GS_INTRO_SPARKLE call InitSpriteAnimStruct pop af @@ -314,10 +314,10 @@ GameFreakPresents_Sparkle: ld a, [de] ld [hl], a ; angle inc de - ld hl, SPRITEANIMSTRUCT_0C + ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld [hl], 0 - inc hl ; SPRITEANIMSTRUCT_0D + inc hl ; SPRITEANIMSTRUCT_VAR2 ld a, [de] ld [hl], a ; distance ret diff --git a/engine/movie/opening_cutscene.asm b/engine/movie/opening_cutscene.asm index ac15bcf..5bc1c97 100644 --- a/engine/movie/opening_cutscene.asm +++ b/engine/movie/opening_cutscene.asm @@ -10,7 +10,7 @@ OpeningCutscene:: ret .Init: - farcall InitEffectObject + farcall ClearSpriteAnims xor a ld [wIntroJumptableIndex], a ldh [hBGMapMode], a @@ -27,14 +27,14 @@ OpeningCutscene:: bit 7, a jr nz, .Finish - farcall EffectObjectJumpNoDelay + farcall PlaySpriteAnimations call IntroSceneJumper call DelayFrame and a ret .Finish: - callfar InitEffectObject + callfar ClearSpriteAnims call ClearSprites call DelayFrame xor a @@ -80,7 +80,7 @@ IntroScene1: ld c, 0 call GetSGBLayout - callfar InitEffectObject + callfar ClearSpriteAnims call Intro_ResetLYOverrides @@ -123,9 +123,9 @@ IntroScene1: jr nz, .draw_gfx ld hl, wSpriteAnimDict - ld a, SPRITE_ANIM_INDEX_GS_INTRO_BUBBLE + ld a, SPRITE_ANIM_OBJ_GS_INTRO_BUBBLE ld [hli], a - ld a, SPRITE_ANIM_DICT_DEFAULT + ld a, SPRITE_ANIM_DICT_NULL ld [hli], a xor a @@ -359,7 +359,7 @@ Intro_InitBubble: ld e, [hl] inc hl ld d, [hl] - ld a, SPRITE_ANIM_INDEX_GS_INTRO_BUBBLE + ld a, SPRITE_ANIM_OBJ_GS_INTRO_BUBBLE call InitSpriteAnimStruct ret @@ -409,7 +409,7 @@ Intro_InitMagikarps: ret .PlaceMagikarp: - ld a, SPRITE_ANIM_INDEX_GS_INTRO_MAGIKARP + ld a, SPRITE_ANIM_OBJ_GS_INTRO_MAGIKARP call InitSpriteAnimStruct ret @@ -422,7 +422,7 @@ Intro_InitOmanyte: ; fallthrough .PlaceOmanyte: - ld a, SPRITE_ANIM_INDEX_GS_INTRO_OMANYTE + ld a, SPRITE_ANIM_OBJ_GS_INTRO_OMANYTE call InitSpriteAnimStruct ret @@ -431,13 +431,13 @@ Intro_InitLapras: and %00011111 ret nz depixel 16, 24 - ld a, SPRITE_ANIM_INDEX_GS_INTRO_LAPRAS + ld a, SPRITE_ANIM_OBJ_GS_INTRO_LAPRAS call InitSpriteAnimStruct ret Intro_UnusedInitAerodactyl: ; unreferenced depixel 2, 0 - ld a, SPRITE_ANIM_INDEX_UNUSED_INTRO_AERODACTYL + ld a, SPRITE_ANIM_OBJ_UNUSED_INTRO_AERODACTYL call InitSpriteAnimStruct ret @@ -602,7 +602,7 @@ IntroScene6: ld b, SGB_GS_INTRO ld c, 1 call GetSGBLayout - callfar InitEffectObject + callfar ClearSpriteAnims call Intro_ResetLYOverrides ld hl, vChars2 ld de, IntroForestGFX @@ -636,9 +636,9 @@ IntroScene6: jr nz, .load ld hl, wSpriteAnimDict - ld a, SPRITE_ANIM_INDEX_GS_INTRO_OMANYTE + ld a, SPRITE_ANIM_OBJ_GS_INTRO_OMANYTE ld [hli], a - ld a, SPRITE_ANIM_DICT_DEFAULT + ld a, SPRITE_ANIM_DICT_NULL ld [hli], a xor a ldh [hSCY], a @@ -759,28 +759,28 @@ Intro_InitNote: jr z, .SmallerNote depixel 11, 6, 4, 0 - ld a, SPRITE_ANIM_INDEX_GS_INTRO_NOTE + ld a, SPRITE_ANIM_OBJ_GS_INTRO_NOTE call InitSpriteAnimStruct ret .SmallerNote: depixel 10, 6, 4, 0 - ld a, SPRITE_ANIM_INDEX_GS_INTRO_SMALLER_NOTE + ld a, SPRITE_ANIM_OBJ_GS_INTRO_SMALLER_NOTE call InitSpriteAnimStruct ret Intro_InitJigglypuff: depixel 14, 6 - ld a, SPRITE_ANIM_INDEX_GS_INTRO_JIGGLYPUFF + ld a, SPRITE_ANIM_OBJ_GS_INTRO_JIGGLYPUFF call InitSpriteAnimStruct ret Intro_InitPikachu: depixel 14, 24 - ld a, SPRITE_ANIM_INDEX_GS_INTRO_PIKACHU + ld a, SPRITE_ANIM_OBJ_GS_INTRO_PIKACHU call InitSpriteAnimStruct depixel 14, 24 - ld a, SPRITE_ANIM_INDEX_GS_INTRO_PIKACHU_TAIL + ld a, SPRITE_ANIM_OBJ_GS_INTRO_PIKACHU_TAIL call InitSpriteAnimStruct ret @@ -791,7 +791,7 @@ IntroScene10: ld b, SGB_GS_INTRO ld c, 2 call GetSGBLayout - callfar InitEffectObject + callfar ClearSpriteAnims call Intro_ResetLYOverrides call Intro_BlankTilemapAndBGMap @@ -811,9 +811,9 @@ IntroScene10: call Request2bpp ld hl, wSpriteAnimDict - ld a, SPRITE_ANIM_INDEX_GS_INTRO_OMANYTE + ld a, SPRITE_ANIM_OBJ_GS_INTRO_OMANYTE ld [hli], a - ld a, SPRITE_ANIM_DICT_DEFAULT + ld a, SPRITE_ANIM_DICT_NULL ld [hli], a ld a, 0 @@ -1134,7 +1134,7 @@ Intro_AnimateFireball: and 3 ret nz depixel 12, 10, 4, 4 - ld a, SPRITE_ANIM_INDEX_GS_INTRO_FIREBALL + ld a, SPRITE_ANIM_OBJ_GS_INTRO_FIREBALL call InitSpriteAnimStruct ld hl, hSCX dec [hl] @@ -1144,13 +1144,13 @@ Intro_AnimateFireball: Intro_LoadBlastoiseObject: depixel 22, 1 - ld a, SPRITE_ANIM_INDEX_GS_INTRO_BLASTOISE + ld a, SPRITE_ANIM_OBJ_GS_INTRO_BLASTOISE call InitSpriteAnimStruct ret Intro_LoadVenusaurObject: depixel 22, 20 - ld a, SPRITE_ANIM_INDEX_GS_INTRO_VENUSAUR + ld a, SPRITE_ANIM_OBJ_GS_INTRO_VENUSAUR call InitSpriteAnimStruct ret diff --git a/engine/movie/title.asm b/engine/movie/title.asm index 4938aba..62239d8 100644 --- a/engine/movie/title.asm +++ b/engine/movie/title.asm @@ -64,7 +64,7 @@ TitleSequenceInit:: call DisableLCD call ClearSprites - farcall InitEffectObject + farcall ClearSpriteAnims ld hl, vChars0 ld bc, vBGMap0 - vChars0 @@ -152,7 +152,7 @@ TitleSequenceInit:: ld d, [hl] inc hl push hl - ld a, SPRITE_ANIM_INDEX_GS_TITLE_FLAME_NOTE + ld a, SPRITE_ANIM_OBJ_GS_TITLE_FLAME_NOTE call InitSpriteAnimStruct pop hl pop bc @@ -176,7 +176,7 @@ TitleScreenMain:: bit 7, a jr nz, .exit call TitleScreenSequence - farcall EffectObjectJumpNoDelay + farcall PlaySpriteAnimations call DelayFrame and a ret diff --git a/engine/palettes.asm b/engine/palettes.asm index 73b510b..de15eca 100644 --- a/engine/palettes.asm +++ b/engine/palettes.asm @@ -1,6 +1,60 @@ INCLUDE "constants.asm" -SECTION "engine/palettes.asm@Overworld fade", ROMX +SECTION "engine/palettes.asm", ROMX + +UpdateTimeOfDayPal: + call UpdateTime + call GetTimePalette + ret + +_TimeOfDayPals: + ld hl, wTimeOfDayPalFlags + bit CLEAR_PALSET_F, [hl] + ret nz + + ld a, [wTimeOfDay] + ld hl, wCurTimeOfDay + cp [hl] + ret z + + call OverworldFadeOut + call GetTimePalette + call RestoreOverworldMapTiles + call OverworldFadeIn + ret + +_LABEL_8C2FE_: + ld hl, wTimeOfDayPalFlags + res CLEAR_PALSET_F, [hl] + call OverworldFadeOut + call UpdateTime + call GetTimePalette + call RestoreOverworldMapTiles + call OverworldFadeIn + ret + +_LABEL_8C313_: + ld hl, wTimeOfDayPalFlags + set CLEAR_PALSET_F, [hl] + call OverworldFadeOut + call GetTimePalette + call RestoreOverworldMapTiles + call OverworldFadeIn + ret + +Function8c325: + call OverworldFadeOut + call UpdateTime + call GetTimePalette + call RestoreOverworldMapTiles + call OverworldFadeIn + ret + +_UpdateTimePals: + ld c, $09 + call GetFadeStep + call ApplyPalettesAtHL + ret OverworldFadeIn:: ld c, 0 @@ -16,9 +70,91 @@ OverworldFadeOut:: call FadeTowardsBlack ret +ReplaceTimeOfDayPals:: + ld hl, TimeOfDayPalsets + ld a, [wMapPermissions] ; wMapPermissions = $D661 + cp TOWN + jr z, .get_palset -; TODO: merge this -SECTION "engine/palettes.asm@Palette fading, part 2?", ROMX + cp ROUTE + jr z, .get_palset + + inc hl + cp CAVE + jr z, .get_palset + + ; INDOOR, ENVIRONMENT_5, GATE, DUNGEON + inc hl +.get_palset + ld a, [hl] + ld [wTimeOfDayPalset], a + ret + +TimeOfDayPalsets: +db %11100100, %11100100, %01100000 + +GetTimePalette:: + ld hl, wTimeOfDayPalFlags + bit CLEAR_PALSET_F, [hl] + jr nz, .ClearPalset + + ld a, [wTimeOfDay] + ld [wCurTimeOfDay], a + ld e, a + ld d, $00 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.Jumptable: +dw .Day, .Night, .Darkness, .Morning + +.Day: + xor a + ldh [hOverworldFlashlightEffect], a + ld a, [wTimeOfDayPalset] + and %00000011 + ld [wTimeOfDayPal], a + ret + +.Night: + xor a + ldh [hOverworldFlashlightEffect], a + ld a, [wTimeOfDayPalset] + and %00001100 + srl a + srl a + ld [wTimeOfDayPal], a + ret + +.Darkness: + ld a, $03 + ldh [hOverworldFlashlightEffect], a + ld a, [wTimeOfDayPalset] + and %00110000 + swap a + ld [wTimeOfDayPal], a + ret + +.Morning: + xor a + ldh [hOverworldFlashlightEffect], a + ld a, [wTimeOfDayPalset] + and %11000000 + rlca + rlca + ld [wTimeOfDayPal], a + ret + +.ClearPalset: + xor a + ldh [hOverworldFlashlightEffect], a + ld [wTimeOfDayPal], a + ret ApplyPalettesAtHL:: push hl diff --git a/engine/sprite_anims/core.asm b/engine/sprite_anims/core.asm new file mode 100644 index 0000000..a8ecaf5 --- /dev/null +++ b/engine/sprite_anims/core.asm @@ -0,0 +1,492 @@ +INCLUDE "constants.asm" + +SECTION "engine/dumps/bank23.asm@ClearSpriteAnims", ROMX + +ClearSpriteAnims:: + ld hl, wSpriteAnimData + ld bc, wSpriteAnimDataEnd - wSpriteAnimData +.loop + 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(wShadowOAM) + ld [wCurSpriteOAMAddr], a + call DoNextFrameForFirst16Sprites + + pop af + pop bc + pop de + pop hl + ret + +DoNextFrameForFirst16Sprites:: + ld hl, wSpriteAnimationStructs + ld e, NUM_SPRITE_ANIM_STRUCTS + +.loop + ld a, [hl] + and a + jr z, .next + ld c, l + ld b, h + push hl + push de + call DoSpriteAnimFrame ; 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(wShadowOAM) + +; Clear (wShadowOAM + [wCurSpriteOAMAddr] --> Sprites + $40) +.loop2 + ld a, l + cp LOW(wShadowOAMEnd) + jr nc, .done + xor a + ld [hli], a + jr .loop2 + +.done: + ret + +; Initialize animation a at pixel x=e, y=d +_InitSpriteAnimStruct:: +; 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] + and a + jr z, .found + ld bc, SPRITEANIMSTRUCT_LENGTH + add hl, bc + dec e + jr nz, .loop + pop af + pop de +; We've reached the end. There is no more room here. +; Return carry. + scf + ret + +.found +; Back up the structure address to bc. + pop af + ld c, l + ld b, h + +; Get row a of SpriteAnimObjects, copy the pointer into de + ld hl, wSpriteAnimCount + inc [hl] + ld e, a + ld d, $00 + ld hl, SpriteAnimObjects + 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 ; SPRITEANIMSTRUCT_FRAMESET_ID + inc de + ld a, [de] + ld [hli], a ; SPRITEANIMSTRUCT_ANIM_SEQ_ID + inc de +; Look up the third field in the wSpriteAnimDict mapping. +; Take the mapped value and load it in. + ld a, [de] + call GetSpriteAnimVTile + ld [hli], a ; SPRITEANIMSTRUCT_TILE_ID + 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 ; SPRITEANIMSTRUCT_XCOORD + ld a, d + ld [hli], a ; SPRITEANIMSTRUCT_YCOORD +; load 0 into the next four fields + xor a + ld [hli], a ; SPRITEANIMSTRUCT_XOFFSET + ld [hli], a ; SPRITEANIMSTRUCT_YOFFSET + xor a + ld [hli], a ; SPRITEANIMSTRUCT_DURATION + ld [hli], a ; SPRITEANIMSTRUCT_DURATIONOFFSET +; load -1 into the next field + dec a + ld [hli], a ; SPRITEANIMSTRUCT_FRAME +; load 0 into the last five fields + xor a + ld [hli], a ; SPRITEANIMSTRUCT_JUMPTABLE_INDEX + ld [hli], a ; SPRITEANIMSTRUCT_VAR1 + ld [hli], a ; SPRITEANIMSTRUCT_VAR2 + ld [hli], a ; SPRITEANIMSTRUCT_VAR3 + ld [hl], a ; SPRITEANIMSTRUCT_VAR4 +; back up the address of the first field to wSpriteAnimAddrBackup + ld a, c + ld [wSpriteAnimAddrBackup], a + ld a, b + ld [wSpriteAnimAddrBackup + 1], a + ret + +; Clear the index field of the struct in bc. +DeinitializeSprite:: + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc + ld [hl], $00 + ret + +UpdateAnimFrame:: +; Init RAM and read from memory array + call InitSpriteAnimBuffer + call GetSpriteAnimFrame + cp oamwait_command + jr z, .done + cp oamdelete_command + 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] ; wCurSpriteOAMAddr = $C4BD + ld e, a + ld d, HIGH(wShadowOAM) + ld a, [hli] + ld c, a ; number of objects +.loop + ; 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(wShadowOAMEnd) + jr nc, .reached_the_end + dec c + jr nz, .loop + pop bc + jr .done + +.delete +; Removes the object from the screen, as opposed to `oamend` which just stops all motion + call DeinitializeSprite +.done + 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 + 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 + ret + +GetSpriteOAMAttr: + ld a, [wSpriteAnimAddrBackup] ; wSpriteAnimAddrBackup = $C4C0 + ld b, a + ld a, [hl] + xor b + and PRIORITY | Y_FLIP | X_FLIP + ld b, a + ld a, [hl] + and OBP_NUM + or b + ret + +InitSpriteAnimBuffer:: + xor a + ld [wSpriteAnimAddrBackup], 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 + +; a = wSpriteAnimDict[a] if a in wSpriteAnimDict else vtile offset $00 +GetSpriteAnimVTile:: + push hl + push bc + ld hl, wTileMapBackup + ld b, a + ld c, NUM_SPRITEANIMDICT_ENTRIES +.loop + ld a, [hli] + cp b + jr z, .ok + inc hl + dec c + jr nz, .loop + xor a + jr .done + +.ok + ld a, [hl] + +.done + pop bc + pop hl + ret + +; Unreferenced + ld a, [wSpriteAnimAddrBackup] + +_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, SPRITEANIMSTRUCT_DURATION + add hl, bc + ld a, [hl] + and a + jr z, .next_frame + dec [hl] + call .GetPointer + ld a, [hli] + push af + jr .okay + +.next_frame + ld hl, SPRITEANIMSTRUCT_FRAME + add hl, bc + inc [hl] + call .GetPointer + ld a, [hli] + cp oamrestart_command + jr z, .restart + cp oamend_command + jr z, .repeat_last + + push af + ld a, [hl] + push hl + and ~(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 +; The << 1 is compensated in the "oamframe" macro + ld a, [hl] + and Y_FLIP << 1 | X_FLIP << 1 + 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 GetSpriteAnimFrame + +.restart + 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 GetSpriteAnimFrame + +.GetPointer + ld hl, SPRITEANIMSTRUCT_FRAMESET_ID + add hl, bc + ld e, [hl] + ld d, $00 + 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, $00 + add hl, hl + add hl, de + ret + +GetFrameOAMPointer: + ld e, a + ld d, $00 + ld hl, SpriteAnimOAMData + add hl, de + add hl, de + add hl, de + ret + +; Unreferenced in final game +LoadSpriteAnimGFX:: + push hl + ld l, a + ld h, $00 + add hl, hl + add hl, hl + ld de, SpriteAnimGFX + 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/objects.inc" +INCLUDE "engine/sprite_anims/functions.inc" +INCLUDE "data/sprite_anims/framesets.inc" +INCLUDE "data/sprite_anims/oam.inc" +INCLUDE "data/sprite_anims/gfx.inc" + +Sprites_Cosine: +; a = d * cos(a * pi/32) + add %010000 ; cos(x) = sin(x + pi/2) + ; fallthrough +Sprites_Sine: +; a = d * sin(a * pi/32) + calc_sine_wave diff --git a/engine/sprite_anims/functions.inc b/engine/sprite_anims/functions.inc new file mode 100644 index 0000000..0c367d1 --- /dev/null +++ b/engine/sprite_anims/functions.inc @@ -0,0 +1,1355 @@ +DoSpriteAnimFrame: + ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID + add hl, bc + ld e, [hl] + ld d, $00 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.Jumptable: + dw AnimSeq_Null + dw AnimSeq_PartyMon + dw AnimSeq_PartyMonSwitch + dw AnimSeq_PartyMonSelected + dw AnimSeq_GSIntroBubble + dw AnimSeq_GSIntroOmanyte + dw AnimSeq_GSIntroMagikarp + dw AnimSeq_UnusedIntroAerodactyl + dw AnimSeq_GSIntroLapras + dw AnimSeq_GSIntroNote + dw AnimSeq_GSIntroJigglypuff + dw AnimSeq_GSIntroPikachu + dw AnimSeq_GSIntroPikachuTail + dw AnimSeq_GSIntroFireball + dw AnimSeq_GSIntroBlastoise + dw AnimSeq_GSIntroVenusaur + dw AnimSeq_GSTitleFlameNote + dw AnimSeq_MinigamePikachu + dw AnimSeq_MinigamePikachuTail + dw AnimSeq_MinigameNote + dw AnimSeq_MinigameJigglypuff + dw AnimSeq_MinigamePicrossCursor + dw AnimSeq_MinigamePicrossDust + dw AnimSeq_PokedexHandCursor + dw AnimSeq_PokedexCursor + dw AnimSeq_PokedexSlowpoke + dw AnimSeq_NamingScreenCursor + dw AnimSeq_GameFreakLogo + dw AnimSeq_GSGameFreakLogoStar + dw AnimSeq_GSGameFreakLogoSparkle + dw AnimSeq_SlotsGolem + dw AnimSeq_SlotsChansey + dw AnimSeq_SlotsChanseyEgg + dw AnimSeq_MailCursor + dw AnimSeq_PokerCursor + dw AnimSeq_MemoryGameCursor + dw AnimSeq_TrainerGearPointer + dw AnimSeq_TradePokeBall + dw AnimSeq_TradeTubeBulge + dw AnimSeq_TrademonInTube + dw AnimSeq_Unknown + dw AnimSeq_RadioFrequencyMeter + +AnimSeq_Null: + ret + +AnimSeq_PartyMon: + ld a, [wMenuCursorY] + + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc + cp [hl] + jr z, AnimSeq_PartyMonSwitch + + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld [hl], 2 * TILE_WIDTH + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], 0 + ret + +AnimSeq_PartyMonSwitch: + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld [hl], 3 * TILE_WIDTH + + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + inc [hl] + and $f + ret nz + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld a, [hl] + xor $4 + ld [hl], a + ret + +AnimSeq_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], 2 * TILE_WIDTH + ret + +.three_offset_right + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld [hl], 3 * TILE_WIDTH + ret + +AnimSeq_GSIntroBubble: + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld a, [hl] + inc [hl] + cp $40 + jr nc, .delete + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + dec [hl] + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + add 2 + ld [hl], a + ld d, 8 + call AnimSeqs_Sine + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + ret + +.delete + call DeinitializeSprite + ret + +AnimSeq_GSIntroOmanyte: + ld a, [wGlobalAnimYOffset] + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + add [hl] + cp $b0 + ret c + call DeinitializeSprite + ret + +AnimSeq_GSIntroMagikarp: + call AnimSeqs_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + +.zero: + call AnimSeqs_IncAnonJumptableIndex + + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc + ld a, [hl] + + and $3 + swap a + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld [hl], a +.one + lb de, 2, 1 + ld a, [wSGB] + and a + jr z, .sgb + lb de, 4, 2 +.sgb + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld a, [hl] + cp $f0 + jr nc, .delete + + add d + ld [hl], a + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + add e + ld [hl], a + ld d, 8 + call AnimSeqs_Sine + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ret + +.delete + call DeinitializeSprite + ret + +AnimSeq_UnusedIntroAerodactyl: + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $b0 + jr nc, .delete + + inc [hl] + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + inc [hl] + and $1 + ret z + + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + inc [hl] + ret + +.delete + call DeinitializeSprite + ret + +AnimSeq_GSIntroLapras: + call AnimSeqs_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + +.zero + call .update_y_offset + ret z + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $58 + jr c, .next1 + + dec [hl] + ret + +.next1 + call AnimSeqs_IncAnonJumptableIndex + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld [hl], $80 + ret + +.one + call .update_y_offset + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld a, [hl] + and a + jr z, .next2 + + dec [hl] + ret + +.next2 + call AnimSeqs_IncAnonJumptableIndex + ret + +.two + call .update_y_offset + ret z + + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $D0 + jr z, .delete + dec [hl] + ret + +.delete + call DeinitializeSprite + ld a, TRUE + ld [wIntroSpriteStateFlag], a + ret + +.update_y_offset + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + inc [hl] + ld d, 8 + call AnimSeqs_Sine + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + and $1 + ret + +AnimSeq_GSIntroNote: + call AnimSeqs_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + +.zero + call AnimSeqs_IncAnonJumptableIndex + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc + ld a, [hl] + and $1 + swap a + sla a + + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld [hl], a +.one + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld a, [hl] + cp $80 + jr nc, .delete + inc [hl] + + ld d, 4 + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + add 2 + ld [hl], a + call AnimSeqs_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + and $2 + ret z + + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + dec [hl] + ret + +.delete + call DeinitializeSprite + ret + +AnimSeq_GSIntroJigglypuff: + ld a, [wIntroSpriteStateFlag] + and a + ret z + + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $d0 + jr z, .delete + + dec [hl] + dec [hl] + dec [hl] + dec [hl] + ret + +.delete + call DeinitializeSprite + ret + +AnimSeq_GSIntroPikachu: + call AnimSeqs_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + +.zero + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $80 + jr z, .next1 + dec [hl] + ret + +.next1 + call AnimSeqs_IncAnonJumptableIndex + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld [hl], $40 + ld a, $0b ; SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_2 + call _ReinitSpriteAnimFrame + ret + +.one + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld a, [hl] + and a + jr z, .next2 + dec [hl] + ret + +.next2 + call AnimSeqs_IncAnonJumptableIndex + ld a, $0a ; SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU + call _ReinitSpriteAnimFrame + ret + +.two + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + add 4 + ld [hl], a + ld d, 4 + call AnimSeqs_Sine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $d0 + jr z, .delete + cp $50 + jr z, .intro_sprite_state + + dec [hl] + dec [hl] + ret + +.intro_sprite_state + dec [hl] + dec [hl] + ld a, TRUE + ld [wIntroSpriteStateFlag], a + ret + +.delete + call DeinitializeSprite + ret + +AnimSeq_GSIntroPikachuTail: + call AnimSeqs_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + +.zero + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $80 + jr z, .next1 + dec [hl] + ret + +.next1 + call AnimSeqs_IncAnonJumptableIndex + + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld [hl], $40 + ld a, $0d ; SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_TAIL_2 + call _ReinitSpriteAnimFrame + ret + +.one + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld a, [hl] + and a + jr z, .next2 + + dec [hl] + cp $20 + ret nz + ld a, $0c ; SPRITE_ANIM_FRAMESET_GS_INTRO_PIKACHU_TAIL + call _ReinitSpriteAnimFrame + ret + +.next2 + call AnimSeqs_IncAnonJumptableIndex + ret + +.two + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + add $04 + ld [hl], a + ld d, $04 + call AnimSeqs_Sine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $d0 + jr z, .delete + dec [hl] + dec [hl] + ret + +.delete + call DeinitializeSprite + ret + +AnimSeq_GSIntroFireball: + call AnimSeqs_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + +.zero + call AnimSeqs_IncAnonJumptableIndex + ld hl, SPRITEANIMSTRUCT_INDEX + 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_VAR1 + add hl, bc + ld [hl], a + ret + +.one + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + dec [hl] + dec [hl] + dec [hl] + dec [hl] + + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld a, [hl] + ld d, a + add 8 + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + push af + push de + call AnimSeqs_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + pop de + pop af + call AnimSeqs_Cosine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + ret + +AnimSeq_GSIntroBlastoise: + call AnimSeqs_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + +.zero + call AnimSeqs_IncAnonJumptableIndex + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld [hl], $30 + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld [hl], $30 + ret + +.one +; flash down/right + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + cp $3c + ret nc + + inc [hl] + inc [hl] + ld d, $90 + call AnimSeqs_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld a, [hl] + inc [hl] + inc [hl] + ld d, $90 + call AnimSeqs_Cosine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + ret + +AnimSeq_GSIntroVenusaur: + call AnimSeqs_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + +.zero + call AnimSeqs_IncAnonJumptableIndex + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld [hl], $30 + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld [hl], $10 + ret + +.one +; flash down/left + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + cp $3c + ret nc + + inc [hl] + inc [hl] + ld d, $90 + call AnimSeqs_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld a, [hl] + + inc [hl] + inc [hl] + ld d, $90 + call AnimSeqs_Cosine + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + ret + +AnimSeq_GSTitleFlameNote: + call AnimSeqs_AnonJumptable + jp hl + +.anon_dw + dw .zero + dw .one + +.zero + call AnimSeqs_IncAnonJumptableIndex + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc + ld a, [hl] + + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + and $3 + ld [hl], a + inc [hl] + swap a + + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld [hl], a + +.one + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + sub [hl] + + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld a, [hl] + sla a + sla a + + ld d, a + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + add 2 + ld [hl], a + call AnimSeqs_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ret + +AnimSeq_MinigamePikachu: + push bc + farcall MinigamePikachuDoMovement + pop bc + ld hl, wPikachuMinigamePikachuNextAnim + ld a, [hl] + and $3 + ret z + + ld [hl], 0 + ld e, a + ld d, $00 + ld hl, Data8d40b + add hl, de + ld a, [hl] + call _ReinitSpriteAnimFrame + ret + +; Data from 8D40B to 8D40E (4 bytes) +Data8d40b: + db $12, $13, $12, $14 + +AnimSeq_MinigamePikachuTail: + farcall CopyPikachuObjDataToTailObj + ret + +AnimSeq_MinigameNote: + call AnimSeqs_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + +.zero + call .BounceNotes + ld a, [wPikachuMinigameScrollSpeed] + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + add [hl] + ld [hl], a + cp $c0 + ret nc + + cp $a8 + ret c +.one + call DeinitializeSprite + ld hl, wSpriteAnimCount + dec [hl] + ret + +.BounceNotes: + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + inc [hl] + + and $1f + srl a + ld e, a + ld d, $00 + ld hl, .YOffsets + add hl, de + ld a, [hl] + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ret + +.YOffsets: + db 4, 7, 9, 10, 9, 7, 4, 0, -4, -7, -9, -10, -9, -7, -4, 0 + +AnimSeq_MinigameJigglypuff: + ld a, [wPikachuMinigameScrollSpeed] + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + add [hl] + ld [hl], a + cp $30 + ret nz + + xor a + ld [wPikachuMinigameScrollSpeed], a + ret + +AnimSeq_MinigamePicrossCursor: + ld hl, wPicrossJoyStateBuffer + ld a, [hl] + and D_UP + jr nz, .Up + + ld a, [hl] + and D_DOWN + jr nz, .Down + + ld a, [hl] + and D_LEFT + jr nz, .Left + + ld a, [hl] + and D_RIGHT + jr nz, .Right + ret + +.Up + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + ld a, [hl] + cp $40 + ret z + sub 6 + jr .done + +.Down + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + ld a, [hl] + cp $9a + ret z + add 6 + jr .done + +.Left + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $40 + ret z + sub 6 + jr .done + +.Right + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $9a + ret z + add 6 + jr .done + +.done + ld [hl], a + ld a, 8 + ld [wPicrossCursorMovementDelay], a + + ld hl, hJoypadState + ld a, [hl] + and ~(A_BUTTON | B_BUTTON) + ld [hl], a + ret + +AnimSeq_MinigamePicrossDust: + ld hl, wPicrossAnimateDust + ld a, [hl] + and a + ret z + + ld [hl], $00 + ld a, $18 ; SPRITE_ANIM_FRAMESET_MINIGAME_PICROSS_DUST + call _ReinitSpriteAnimFrame + ret + +AnimSeq_PokedexHandCursor: + callfar Pokedex_HandCursorControls + ret + +AnimSeq_PokedexCursor: + callfar Pokedex_CursorControls + ret + +AnimSeq_PokedexSlowpoke: + call AnimSeqs_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + +.zero + call AnimSeqs_IncAnonJumptableIndex + ld a, [wPokedexSlowpokeNumSearchEntries] + cp $08 + jr c, .init_slow + + cp $20 + jr c, .init_medium + ld a, $20 + jr .init_fast + +.init_medium + ld a, $40 + jr .init_fast + +.init_slow + ld a, $80 +.init_fast + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld [hl], a + ret + +.one + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + and a + jr z, .check_results + + dec [hl] + ret + +.check_results + ld a, [wPokedexSlowpokeNumSearchEntries] + and a + jr z, .nothing_found + + ld a, $1b ; SPRITE_ANIM_FRAMESET_POKEDEX_SLOWPOKE_FOUND + jr .reinit_sprite + +.nothing_found + ld a, $1c ; SPRITE_ANIM_FRAMESET_POKEDEX_SLOWPOKE_NOT_FOUND +.reinit_sprite + call _ReinitSpriteAnimFrame + call AnimSeqs_IncAnonJumptableIndex +.two + ret + +AnimSeq_NamingScreenCursor: + callfar NamingScreen_AnimateCursor + ret + +AnimSeq_MailCursor: + callfar ComposeMail_AnimateCursor + ret + +AnimSeq_GameFreakLogo: + callfar GameFreakPresents_UpdateLogoPal + ret + +AnimSeq_GSGameFreakLogoStar: + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + and a + jr z, .delete + + dec [hl] + dec [hl] + ld d, a + and $1f + jr nz, .stay + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + dec [hl] +.stay + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld a, [hl] + push af + push de + call AnimSeqs_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + pop de + pop af + call AnimSeqs_Cosine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld a, [hl] + + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + add [hl] + ld [hl], a + ret + +.delete + ld a, 1 + ld [wIntroSceneFrameCounter], a + call DeinitializeSprite + ret + +AnimSeq_GSGameFreakLogoSparkle: + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hli] + or [hl] + jr z, .delete + + ld hl, SPRITEANIMSTRUCT_VAR4 + add hl, bc + ld d, [hl] + + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld a, [hl] + push af + push de + call AnimSeqs_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + pop de + pop af + call AnimSeqs_Cosine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + + ld hl, SPRITEANIMSTRUCT_VAR3 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + add hl, de + ld e, l + ld d, h + + ld hl, SPRITEANIMSTRUCT_VAR3 + add hl, bc + ld [hl], e + inc hl + ld [hl], d + + ld hl, SPRITEANIMSTRUCT_VAR1 + 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_VAR1 + 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 + +.delete + call DeinitializeSprite + ret + +AnimSeq_SlotsGolem: + callfar Slots_AnimateGolem + ret + +AnimSeq_SlotsChansey: + callfar Slots_AnimateChansey + ld hl, wSlotsDelay + ld a, [hl] + cp $2 + ret nz + ld [hl], $03 + ld a, $23 ; SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY_2 + call _ReinitSpriteAnimFrame + ret + +AnimSeq_SlotsChanseyEgg: + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld a, [hl] + dec [hl] + ld e, a + and $01 + jr z, .move_vertical + + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp 15 * TILE_WIDTH + jr c, .move_right + + call DeinitializeSprite + ld a, 4 + ld [wSlotsDelay], a + ret + +.move_right + inc [hl] +.move_vertical + ld a, e + ld d, 32 + call AnimSeqs_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ret + +AnimSeq_PokerCursor: + callfar Functione1054 + ret + +AnimSeq_TrainerGearPointer: + callfar AnimateTrainerGearModeIndicatorPointer + ret + +AnimSeq_MemoryGameCursor: + callfar MemoryGame_AnimateCursor + ret + +AnimSeq_TradePokeBall: + call AnimSeqs_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + dw .three + dw .four + dw .delete + +.zero + ld a, $28 ; SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL_WOBBLE + call _ReinitSpriteAnimFrame + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld [hl], 2 ; .two + + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld [hl], $20 + ret + +.two + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + and a + jr z, .next + dec [hl] + ret + +.next + call AnimSeqs_IncAnonJumptableIndex + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld [hl], $40 + +.three + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + cp 48 + jr c, .delete + dec [hl] + ld d, 40 + call AnimSeqs_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + ret + +.one + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld [hl], 4 + + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld [hl], $30 + + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld [hl], $24 + ret + +.four + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld a, [hl] + and a + jr z, .done2 + + ld d, a + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + call Sprites_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + inc [hl] + ld a, [hl] + and $3f + ret nz + + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld [hl], $20 + + ld hl, SPRITEANIMSTRUCT_VAR2 + add hl, bc + ld a, [hl] + sub $c + ld [hl], a + ret + +.done2 + xor a + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + call AnimSeqs_IncAnonJumptableIndex + ret + +.delete + call DeinitializeSprite + ret + +AnimSeq_TradeTubeBulge: + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + inc [hl] + cp $b0 + ret c + call DeinitializeSprite + ret + +AnimSeq_TrademonInTube: + callfar TradeAnim_AnimateTrademonInTube + ret + +; Appears to resemble the final game's AnimSeq_RevealNewMon, but it doesn't seem to be used in this build... +; Who knows what it was used for? +AnimSeq_Unknown: + ld hl, SPRITEANIMSTRUCT_VAR1 + add hl, bc + ld a, [hl] + cp $50 + jr nc, .finish_EggShell + ld d, a + add 8 + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld a, [hl] + push af + push de + call AnimSeqs_Sine + + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], a + pop de + pop af + call AnimSeqs_Cosine + + ld hl, SPRITEANIMSTRUCT_XOFFSET + add hl, bc + ld [hl], a + ret + +.finish_EggShell + call DeinitializeSprite + ret + +AnimSeq_RadioFrequencyMeter: + callfar TrainerGear_RadioJumptable + ret + +AnimSeqs_AnonJumptable: + 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 + +AnimSeqs_IncAnonJumptableIndex: + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + inc [hl] + ret + +AnimSeqs_Sine: + call Sprites_Sine + ret + +AnimSeqs_Cosine: + call Sprites_Cosine + ret diff --git a/engine/trainer_gear.asm b/engine/trainer_gear.asm index a205353..2b27c91 100644 --- a/engine/trainer_gear.asm +++ b/engine/trainer_gear.asm @@ -169,13 +169,13 @@ TrainerGear_Loop: bit TRAINERGEAR_END_LOOP_F, a jr nz, .done call TrainerGear_Jumptable - farcall EffectObjectJumpNoDelay + farcall PlaySpriteAnimations call TrainerGear_UpdateTime call DelayFrame and a ret .done - callfar InitEffectObject + callfar ClearSpriteAnims call ClearSprites xor a ldh [hSCX], a @@ -224,17 +224,17 @@ TrainerGear_Next: ret TrainerGear_InitPointerSprite: - callfar InitEffectObject + callfar ClearSpriteAnims ld de, PointerGFX ld hl, vChars0 tile TRAINERGEAR_GFX_POINTER lb bc, BANK(PointerGFX), 4 call Request2bpp - ld a, SPRITE_ANIM_DICT_29 + ld a, SPRITE_ANIM_DICT_ARROW_CURSOR ld hl, wSpriteAnimDict ld [hli], a ld [hl], TRAINERGEAR_GFX_POINTER depixel 4, 3, 4, 4 - ld a, SPRITE_ANIM_INDEX_TRAINERGEAR_POINTER + ld a, SPRITE_ANIM_OBJ_TRAINERGEAR_POINTER call InitSpriteAnimStruct call TrainerGear_Next ret @@ -373,7 +373,7 @@ TrainerGear_Radio: call WaitBGMap depixel 9, 4, 4, 3 - ld a, SPRITE_ANIM_INDEX_TRAINERGEAR_POINTER + ld a, SPRITE_ANIM_OBJ_TRAINERGEAR_POINTER call InitSpriteAnimStruct ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID add hl, bc @@ -382,7 +382,7 @@ TrainerGear_Radio: add hl, bc ld [hl], TRAINERGEAR_GFX_POINTER depixel 8, 6 - ld a, SPRITE_ANIM_INDEX_RADIO_TUNING_KNOB + ld a, SPRITE_ANIM_OBJ_RADIO_FREQUENCY_METER call InitSpriteAnimStruct ld hl, SPRITEANIMSTRUCT_TILE_ID add hl, bc @@ -428,7 +428,7 @@ TrainerGear_RadioJumptable: ret .AdvanceDial: - ld hl, SPRITEANIMSTRUCT_0C + ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] and a @@ -457,7 +457,7 @@ TrainerGear_RadioJumptable: ret .TurnBackDial: - ld hl, SPRITEANIMSTRUCT_0C + ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] and a @@ -487,14 +487,14 @@ TrainerGear_RadioJumptable: ld hl, SPRITEANIMSTRUCT_XOFFSET add hl, bc ld d, [hl] - ld hl, SPRITEANIMSTRUCT_0C + ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld e, [hl] pop hl add hl, de ld e, l ld d, h - ld hl, SPRITEANIMSTRUCT_0C + ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld [hl], e ld hl, SPRITEANIMSTRUCT_XOFFSET @@ -623,7 +623,7 @@ TrainerGear_PhoneJoypad: ret TrainerGear_ClearView: - callfar InitEffectObject + callfar ClearSpriteAnims call ClearSprites call WaitForAutoBgMapTransfer coord hl, 0, 3 diff --git a/engine/unknown11d32.asm b/engine/unknown11d32.asm deleted file mode 100644 index 01eed07..0000000 --- a/engine/unknown11d32.asm +++ /dev/null @@ -1,92 +0,0 @@ -INCLUDE "constants.asm" - -SECTION "engine/unknown11d32.asm", ROMX - -Unknown11d32: - ld hl, hJoySum - ld a, [hl] - and D_UP - jr nz, .upJump - ld a, [hl] - and D_DOWN - jr nz, .downJump - ld a, [hl] - and D_LEFT - jr nz, .leftJump - ld a, [hl] - and D_RIGHT - jr nz, .rightJump - ret - -.rightJump - ld hl, $000C - add hl, bc - ld a, [hl] - cp $0D - jr nc, .skip - inc [hl] - jr .escape -.skip - ld [hl], 0 - jr .escape -.leftJump - ld hl, $000C - add hl, bc - ld a, [hl] - and a - jr z, .skip2 - dec [hl] - jr .escape -.skip2 - ld [hl], $0D - jr .escape -.downJump - ld hl, $000D - add hl, bc - ld a, [hl] - cp 4 - jr nc, .skip3 - inc [hl] - jr .escape -.skip3 - ld [hl], 00 - jr .escape -.upJump - ld hl, $000D - add hl, bc - ld a, [hl] - and a - jr z, .skip4 - dec [hl] - jr .escape -.skip4 - ld [hl], 4 - jr .escape -.escape - ld hl, $000C - add hl, bc - ld e, [hl] - ld d, 0 - ld hl, .Offsets1 - add hl, de - ld a, [hl] - ld hl, $0006 - add hl, bc - ld [hl], a - ld hl, $000D - add hl, bc - ld e, [hl] - ld d, 0 - ld hl, .Offsets2 - add hl, de - ld a, [hl] - ld hl, $0007 - add hl, bc - ld [hl], a - ret - -.Offsets1: - db $00, $08, $10, $18, $20, $28, $30, $48, $50, $58, $60, $68, $70, $78 - -.Offsets2: - db $00, $08, $18, $20, $30 diff --git a/gfx/gfx.asm b/gfx/gfx.asm index 16ded8a..3af0072 100644 --- a/gfx/gfx.asm +++ b/gfx/gfx.asm @@ -379,6 +379,7 @@ INCBIN "gfx/battle_anims/pointer.2bpp" INCBIN "gfx/battle_anims/attack_animations_2.2bpp" SECTION "gfx.asm@Pokemon Party Sprites", ROMX +MenuMonIconGFX:: PoliwagIcon:: INCBIN "gfx/icons/poliwag.2bpp" JigglypuffIcon:: INCBIN "gfx/icons/jigglypuff.2bpp" DiglettIcon:: INCBIN "gfx/icons/diglett.2bpp" diff --git a/home/joypad.asm b/home/joypad.asm index af38bc7..1751736 100644 --- a/home/joypad.asm +++ b/home/joypad.asm @@ -136,12 +136,12 @@ JoyTitleScreenInput:: GetJoypadDebounced:: ; Update hJoySum joypad input from either hJoyDown or -; hJoyState depending on hJoyDebounceSrc. +; hJoyState depending on hInMenu. ; hJoyState is only updated every 5 frames and ; the update is delayed by 15 frames after any button ; press. call GetJoypad - ldh a, [hJoyDebounceSrc] + ldh a, [hInMenu] and a ldh a, [hJoyDown] jr z, .joyDownSrc diff --git a/home/misc_3c43.asm b/home/misc_3c43.asm index b4741ce..28ccb23 100644 --- a/home/misc_3c43.asm +++ b/home/misc_3c43.asm @@ -76,12 +76,12 @@ GetBattleAnimByte:: ret InitSpriteAnimStruct:: - ld [wSpriteAnimIDBuffer], a + ld [wSpriteAnimAddrBackup], a ldh a, [hROMBank] push af ld a, BANK(_InitSpriteAnimStruct) call Bankswitch - ld a, [wSpriteAnimIDBuffer] + ld a, [wSpriteAnimAddrBackup] call _InitSpriteAnimStruct pop af call Bankswitch diff --git a/layout.link b/layout.link index ca5e84c..01ed8a8 100644 --- a/layout.link +++ b/layout.link @@ -174,7 +174,6 @@ ROMX $04 "engine/menu/text_entry.asm@mail" "gfx.asm@Mail Icon GFX" "engine/menu/text_entry.asm@mail2" - "engine/unknown11d32.asm" "engine/menu/start_menu.asm" "gfx.asm@Trainer Card GFX" @@ -257,7 +256,7 @@ ROMX $0d ROMX $0e org $4000 - org $43cd + org $4391 "engine/dumps/bank0e.asm" org $4494 "gfx.asm@PokeBalls GFX" @@ -276,14 +275,7 @@ ROMX $0f ROMX $10 org $4000 - org $4943 - "data/pokemon/dex_order_alpha.asm" - org $4b45 - "engine/dumps/bank10.asm@ConvertMon_2to1" - org $4ecc - "data/types/search_strings.asm" - org $5068 - "data/types/search_types.asm" + "engine/dumps/bank10.asm" org $52a1 "data/moves/names.asm" org $58b6 @@ -379,16 +371,18 @@ ROMX $21 ROMX $23 org $4000 "engine/dumps/bank23.asm@AnimateTilesetImpl" - org $433e - "engine/palettes.asm@Overworld fade" - org $43d1 - "engine/palettes.asm@Palette fading, part 2?" + org $42dc + "engine/palettes.asm" + org $446d + "engine/dumps/bank23.asm@RestoreOverworldMapTiles" org $44be "engine/battle/battle_transitions.asm" + org $4cfd + "engine/dumps/bank23.asm@ClearSpriteAnims" org $60cc "gfx.asm@Pokemon Party Sprites" - org $722a - "data/pokemon/menu_icons.asm" + org $70cc + "engine/gfx/mon_icons.asm" ROMX $24 org $4000 diff --git a/macros/gfx.asm b/macros/gfx.asm index 705e8df..91a754d 100644 --- a/macros/gfx.asm +++ b/macros/gfx.asm @@ -15,3 +15,8 @@ DEF color EQUS "+ PAL_COLOR_SIZE *" DEF tiles EQUS "* LEN_2BPP_TILE" DEF tile EQUS "+ LEN_2BPP_TILE *" + +MACRO dbsprite +; x tile, y tile, x pixel, y pixel, vtile offset, attributes + db (\2 * TILE_WIDTH) % $100 + \4, (\1 * TILE_WIDTH) % $100 + \3, \5, \6 +ENDM \ No newline at end of file diff --git a/macros/oam_anims.asm b/macros/oam_anims.asm new file mode 100644 index 0000000..f3fa9bf --- /dev/null +++ b/macros/oam_anims.asm @@ -0,0 +1,38 @@ +; Battle and sprite OAM animations + +MACRO oamframe + db \1 ; duration + DEF x = \2 + assert !(x & (1 << (OAM_X_FLIP + 1) | 1 << (OAM_Y_FLIP + 1))), \ + "oamframe duration overflows into X/Y flip bits" + if _NARG > 2 + rept _NARG - 2 + DEF x |= 1 << (\3 + 1) + shift + endr + endc + db x ; flags +ENDM + + const_def -1, -1 + + const oamend_command ; $ff +MACRO oamend + db oamend_command +ENDM + + const oamrestart_command ; $fe +MACRO oamrestart + db oamrestart_command +ENDM + + const oamwait_command ; $fd +MACRO oamwait + db oamwait_command + db \1 ; frames +ENDM + + const oamdelete_command ; $fc +MACRO oamdelete + db oamdelete_command +ENDM diff --git a/ram/hram.asm b/ram/hram.asm index d575ae8..bd8ba70 100644 --- a/ram/hram.asm +++ b/ram/hram.asm @@ -52,7 +52,7 @@ hJoyDown:: db hJoyState:: db hJoySum:: db -hJoyDebounceSrc:: db +hInMenu:: db ; hJoySum will be updated from ; 00 - hJoyDown ; <> - hJoyState diff --git a/ram/sram.asm b/ram/sram.asm index 5200979..b1bee41 100644 --- a/ram/sram.asm +++ b/ram/sram.asm @@ -2,9 +2,13 @@ INCLUDE "constants.asm" SECTION "Sprite Buffers", SRAM +UNION +sScratch:: ds SCREEN_WIDTH * SCREEN_HEIGHT +NEXTU sSpriteBuffer0:: ds SPRITEBUFFERSIZE sSpriteBuffer1:: ds SPRITEBUFFERSIZE sSpriteBuffer2:: ds SPRITEBUFFERSIZE +ENDU SECTION "Unknown, bank 0", SRAM diff --git a/ram/wram.asm b/ram/wram.asm index 52721ab..5c12f79 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -109,8 +109,12 @@ wc408:: db wc409:: db NEXTU - -wSpriteAnimDict:: ds NUM_SPRITEANIMDICT_ENTRIES * 2 +wSpriteAnimData:: +; wSpriteAnimDict pairs keys with values +; keys: SPRITE_ANIM_DICT_* indexes (taken from SpriteAnimObjects) +; values: vTiles0 offsets +wSpriteAnimDict:: + ds NUM_SPRITEANIMDICT_ENTRIES * 2 wSpriteAnimationStructs:: ; field 0: index @@ -157,17 +161,31 @@ wHourBuffer:: db wMinuteBuffer:: db ds 150 -wc4bd:: db - ds 2 -wSpriteAnimIDBuffer:: db +UNION + wCurSpriteOAMAddr:: dw +NEXTU + ds 1 + wCurIcon:: db +ENDU + wCurIconTile:: db - ds 6 +UNION +wCurSpriteOAMFlags:: db +NEXTU +wSpriteAnimAddrBackup:: dw +ENDU -wGlobalAnimYOffset:: -wc4c7:: db +wCurAnimVTile:: db -wGlobalAnimXOffset:: -wc4c8:: db +wCurAnimXCoord:: db +wCurAnimYCoord:: db +wCurAnimXOffset:: db +wCurAnimYOffset:: db + +wGlobalAnimYOffset:: db +wGlobalAnimXOffset:: db + +wSpriteAnimDataEnd:: ds 7 @@ -224,8 +242,45 @@ wMemoryGameLastMatches:: ds 5 wMemoryGameCounter:: db wMemoryGameNumCardsMatched:: db -ENDU +NEXTU + ds 200 + +wPokedexOrder:: ds $100 +wPokedexOrderEnd:: + +wDexListingScrollOffset:: db +wPokedexHandCursorPosIndex:: db +wCurDexMode:: db +wPokedexInputFlags:: db +wPokedexHandCursorStructAddress:: dw + +wPokedexCursorStructAddress:: dw +wPokedexSlowpokeAnimStructAddress:: dw + +wDexListingEnd:: db +wDexTempCursorY:: db +wDexTempListingScrollOffset:: db +wDexListingCursor:: db + +wDexUnownCount:: +wDexSearchMonType1:: db + +wDexUnownModeListLength:: +wDexSearchMonType2:: db +wDexArrowCursorPosIndex:: db + +wDexCurUnownIndex:: +wDexConvertedMonType:: db + +wDexSearchResultCount:: db +wc5e3:: db +wc5e4:: db +wc5e5:: db +wc5e6:: db +wDexPlaySlowpokeAnimation:: db + +ENDU SECTION "Map Buffer", WRAM0 @@ -311,8 +366,9 @@ wPicrossCurrentGridNumber:: ds 1 wPicrossCurrentCellNumber:: ds 1 wPicrossCurrentCellType:: ds 1 wPicrossJoypadAction:: ds 1 - ds 1 -wc607:: ds 1 +wPicrossJoyStateBuffer:: ds 1 + +wPicrossCursorMovementDelay:: ds 1 wPicrossMarkedCells:: ds 4*4*4*4 ds 1 wPicrossLayoutBuffer:: ds $20 @@ -466,7 +522,7 @@ wEnemyDamageTaken:: dw UNION wBattleReward:: ds 3 NEXTU -wca59:: ds 1 +wPicrossAnimateDust:: ds 1 ENDU wBattleAnimParam:: @@ -645,6 +701,8 @@ wMemoryGameCardChoice:: wFlyDestination:: wIntroSceneFrameCounter:: wTrainerGearPointerPosition:: +wPokedexSlowpokeNumSearchEntries:: +wNestIconBlinkCounter:: wBattleTransitionCounter:: db wBattleTransitionSineWaveOffset:: @@ -856,13 +914,12 @@ SECTION "CCD0", WRAM0[$CCD0] wccd0:: ds 1 wPlayerHPPal:: ds 1 wEnemyHPPal:: ds 1 -wccd3:: ds 1 - ds 5 +wHPPals:: ds PARTY_LENGTH +wCurHPPal:: db -wccd9:: ds 1 + ds 7 -SECTION "CCE1", WRAM0[$CCE1] ; Todo: Replace instances of wcce1-f4 with "wSGBPals + #" wSGBPals:: ; ds PALPACKET_LENGTH * 3 wcce1:: ds 1 @@ -1189,6 +1246,8 @@ wBattleHasJustStarted:: db wNamedObjectIndexBuffer:: wNumSetBits:: wTextDecimalByte:: +wTempIconSpecies:: +wTempSpecies:: wMoveGrammar:: wTypeMatchup:: wCurType:: diff --git a/shim.sym b/shim.sym index 27b9e0b..a557dc7 100644 --- a/shim.sym +++ b/shim.sym @@ -28,6 +28,7 @@ 0A:4C98 LinkTextboxAtHL 0A:4D6E Function28d6e 0A:4DA4 Function28da4 +0A:533B TradeAnim_AnimateTrademonInTube 0A:5A1F Function29a1f ; prints text 0A:5ABF Function29abf ; prints text @@ -42,43 +43,23 @@ ;0E:43CD DrawPlayerHUDBorder ;0E:43FD DrawEnemyHUDBorder ;0E:4415 PlaceHUDBorderTiles -;0E:4431 Function38431 +;0E:4431 LinkBattle_TrainerHuds 0E:44D4 Function384d4 0E:4F45 Function38f45 0E:50E9 Battle_GetTrainerName -10:4000 Function40000 -10:40A6 ShowPokedexMenu -10:4AC7 Function40ac7 -10:4B07 Function40b07 -;10:4B45 ConvertMon_2to1 -;10:4B5C ConvertMon_1to2 10:5F93 Function4af93 10:5FA1 Function41fa1 10:61F8 Function421f8 10:6252 FillMoves 10:58B8 Data418b8 +11:4000 _DisplayDexEntry + 14:7274 Unknown53274 -23:4325 Function8c325 -23:42DC UpdateTimeOfDayPal -23:42E3 _TimeOfDayPals -23:4335 _UpdateTimePals -23:4354 ReplaceTimeOfDayPals -23:4370 GetTimePalette 23:4940 Function8c940 23:49C6 Function8c9c6 -23:4CFD InitEffectObject -23:4D0C PlaySpriteAnimationsAndDelayFrame -23:4d13 EffectObjectJumpNoDelay -23:4D24 DoNextFrameForFirst16Sprites -23:4d52 _InitSpriteAnimStruct -23:60cc MenuMonIconGfx -23:70CC Function8f0cc -23:70E3 Function8f0e3 -23:71CB FreezeMonIcons -23:71F2 Function8f1f2 32:76FF Functioncb6ff 32:7710 Functioncb710 @@ -100,6 +81,9 @@ 38:4E5F Cursor_AnimateCursor 38:4EA8 Cursor_InterpretJoypad +; Poker Cursor AnimSeq Function +38:5054 Functione1054 + ; Cry header shims 3C:57C5 CryHeader_f17c5