diff --git a/.github/webhook.sh b/.github/webhook.sh old mode 100755 new mode 100644 diff --git a/constants/battle_constants.asm b/constants/battle_constants.asm index 1d6871e68da..cc1617f95e6 100644 --- a/constants/battle_constants.asm +++ b/constants/battle_constants.asm @@ -266,4 +266,4 @@ DEF BATTLERESULT_BITMASK EQU (1 << BATTLERESULT_CAUGHT_CELEBI) | (1 << BATTLERES ; link_battle_record struct DEF LINK_BATTLE_RECORD_LENGTH EQU 2 + (NAME_LENGTH - 1) + 2 * 3 -DEF NUM_LINK_BATTLE_RECORDS EQU 5 +DEF NUM_LINK_BATTLE_RECORDS EQU 5 \ No newline at end of file diff --git a/constants/item_data_constants.asm b/constants/item_data_constants.asm index faf201dda82..302bab148f9 100644 --- a/constants/item_data_constants.asm +++ b/constants/item_data_constants.asm @@ -130,6 +130,7 @@ DEF MAIL_STRUCT_LENGTH_JP EQU $2a ; mailmsg_jp struct const HELD_DRAGON_BOOST const HELD_DARK_BOOST const HELD_STEEL_BOOST + const HELD_FAIRY_BOOST const_next 70 const HELD_CATCH_CHANCE diff --git a/constants/move_constants.asm b/constants/move_constants.asm index 6112966cb63..8b607866eae 100644 --- a/constants/move_constants.asm +++ b/constants/move_constants.asm @@ -296,4 +296,4 @@ DEF NUM_BATTLE_ANIMS EQU const_value - 1 const BATTLEANIM_PLAYER_DAMAGE const BATTLEANIM_WOBBLE const BATTLEANIM_SHAKE - const BATTLEANIM_HIT_CONFUSION + const BATTLEANIM_HIT_CONFUSION \ No newline at end of file diff --git a/constants/move_effect_constants.asm b/constants/move_effect_constants.asm index 0477a6b8cb8..0d931705e29 100644 --- a/constants/move_effect_constants.asm +++ b/constants/move_effect_constants.asm @@ -157,4 +157,4 @@ const EFFECT_BEAT_UP const EFFECT_FLY const EFFECT_DEFENSE_CURL -DEF NUM_MOVE_EFFECTS EQU const_value +DEF NUM_MOVE_EFFECTS EQU const_value \ No newline at end of file diff --git a/constants/type_constants.asm b/constants/type_constants.asm index 49fa661d851..490174b1e06 100644 --- a/constants/type_constants.asm +++ b/constants/type_constants.asm @@ -4,36 +4,40 @@ ; - PokedexTypeSearchStrings (see data/types/search_strings.asm) ; - TypeMatchups (see data/types/type_matchups.asm) ; - TypeBoostItems (see data/types/type_boost_items.asm) - const_def + const_def -DEF PHYSICAL EQU const_value - const NORMAL - const FIGHTING - const FLYING - const POISON - const GROUND - const ROCK - const BIRD - const BUG - const GHOST - const STEEL + const NORMAL + const FIGHTING + const FLYING + const POISON + const GROUND + const ROCK + const BIRD + const BUG + const GHOST + const STEEL -DEF UNUSED_TYPES EQU const_value - const_next 19 - const CURSE_TYPE -DEF UNUSED_TYPES_END EQU const_value + DEF UNUSED_TYPES EQU const_value + const_next 19 + const CURSE_TYPE + DEF UNUSED_TYPES_END EQU const_value -DEF SPECIAL EQU const_value - const FIRE - const WATER - const GRASS - const ELECTRIC - const PSYCHIC_TYPE - const ICE - const DRAGON - const DARK -DEF TYPES_END EQU const_value + const FIRE + const WATER + const GRASS + const ELECTRIC + const PSYCHIC_TYPE + const ICE + const DRAGON + const DARK + const FAIRY + DEF TYPES_END EQU const_value + +DEF TYPE_MASK EQU %00111111 +DEF PHYSICAL EQU %01000000 +DEF SPECIAL EQU %10000000 +DEF STATUS EQU %11000000 DEF NUM_TYPES EQU TYPES_END + UNUSED_TYPES - UNUSED_TYPES_END - 1 ; discount BIRD DEF POKEDEX_TYPE_STRING_LENGTH EQU 9 diff --git a/data/battle_anims/ball_colors.asm b/data/battle_anims/ball_colors.asm index 0453c14b7e4..68eb22baf31 100644 --- a/data/battle_anims/ball_colors.asm +++ b/data/battle_anims/ball_colors.asm @@ -1,15 +1,29 @@ -; colors of balls thrown in battle + ; colors of balls thrown in battle -BallColors: - db MASTER_BALL, PAL_BATTLE_OB_GREEN - db ULTRA_BALL, PAL_BATTLE_OB_YELLOW - db GREAT_BALL, PAL_BATTLE_OB_BLUE - db POKE_BALL, PAL_BATTLE_OB_RED - db HEAVY_BALL, PAL_BATTLE_OB_GRAY - db LEVEL_BALL, PAL_BATTLE_OB_BROWN - db LURE_BALL, PAL_BATTLE_OB_BLUE - db FAST_BALL, PAL_BATTLE_OB_BLUE - db FRIEND_BALL, PAL_BATTLE_OB_YELLOW - db MOON_BALL, PAL_BATTLE_OB_GRAY - db LOVE_BALL, PAL_BATTLE_OB_RED - db -1, PAL_BATTLE_OB_GRAY + BallColors: + db MASTER_BALL + RGB 31,31,31, 20,08,23 + db ULTRA_BALL + RGB 31,31,31, 10,10,12 + db GREAT_BALL + RGB 31,31,31, 09,13,30 + db POKE_BALL + RGB 31,31,31, 30,08,05 + db HEAVY_BALL + RGB 31,31,31, 06,10,12 + db LEVEL_BALL + RGB 31,31,31, 30,24,00 + db LURE_BALL + RGB 31,31,31, 04,14,30 + db FAST_BALL + RGB 31,31,31, 31,16,04 + db FRIEND_BALL + RGB 31,31,31, 04,17,04 + db MOON_BALL + RGB 31,31,31, 07,19,25 + db LOVE_BALL + RGB 31,31,31, 30,11,22 + db PARK_BALL + RGB 31,31,31, 18,18,05 + db -1 ; end + RGB 31,31,31, 16,16,16 \ No newline at end of file diff --git a/data/events/special_pointers.asm b/data/events/special_pointers.asm index d6c3a1db92b..acbe762912a 100644 --- a/data/events/special_pointers.asm +++ b/data/events/special_pointers.asm @@ -183,3 +183,4 @@ SpecialsPointers:: add_special InitialSetDSTFlag add_special InitialClearDSTFlag add_special UnusedDummySpecial ; unused + add_special MoveRelearner diff --git a/data/items/attributes.asm b/data/items/attributes.asm index c9c7daf6a19..f982292596b 100644 --- a/data/items/attributes.asm +++ b/data/items/attributes.asm @@ -348,7 +348,7 @@ ItemAttributes: ; SUN_STONE item_attribute 2100, HELD_NONE, 0, CANT_SELECT, ITEM, ITEMMENU_PARTY, ITEMMENU_NOUSE ; POLKADOT_BOW - item_attribute 100, HELD_NORMAL_BOOST, 10, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE + item_attribute 100, HELD_FAIRY_BOOST, 10, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE ; ITEM_AB item_attribute $9999, HELD_NONE, 0, NO_LIMITS, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE ; UP_GRADE diff --git a/data/items/descriptions.asm b/data/items/descriptions.asm index 2654a3194b2..8aa5852a71d 100644 --- a/data/items/descriptions.asm +++ b/data/items/descriptions.asm @@ -909,7 +909,7 @@ SunStoneDesc: next "kinds of #MON.@" PolkadotBowDesc: - db "Powers up normal-" + db "Powers up fairy-" next "type moves. (HOLD)@" TeruSama22Desc: diff --git a/data/moves/animations.asm b/data/moves/animations.asm index 46f0685f164..caeb2b13ba9 100644 --- a/data/moves/animations.asm +++ b/data/moves/animations.asm @@ -4823,4 +4823,4 @@ BattleAnim_ShowMon_1: anim_wait 4 anim_incobj 1 anim_wait 1 - anim_ret + anim_ret \ No newline at end of file diff --git a/data/moves/critical_hit_moves.asm b/data/moves/critical_hit_moves.asm index 4a473057437..2343f567185 100644 --- a/data/moves/critical_hit_moves.asm +++ b/data/moves/critical_hit_moves.asm @@ -6,4 +6,4 @@ CriticalHitMoves: db SLASH db AEROBLAST db CROSS_CHOP - db -1 + db -1 \ No newline at end of file diff --git a/data/moves/descriptions.asm b/data/moves/descriptions.asm index 697be13eed3..b735087965e 100644 --- a/data/moves/descriptions.asm +++ b/data/moves/descriptions.asm @@ -1269,4 +1269,4 @@ WhirlpoolDescription: BeatUpDescription: db "Party #MON join" - next "in the attack.@" + next "in the attack.@" \ No newline at end of file diff --git a/data/moves/effects.asm b/data/moves/effects.asm index 02305d8094c..9ccbd4b767f 100644 --- a/data/moves/effects.asm +++ b/data/moves/effects.asm @@ -2076,4 +2076,4 @@ DefenseCurl: raisesub statupmessage statupfailtext - endmove + endmove \ No newline at end of file diff --git a/data/moves/effects_pointers.asm b/data/moves/effects_pointers.asm index c83492602fa..de4940ee434 100644 --- a/data/moves/effects_pointers.asm +++ b/data/moves/effects_pointers.asm @@ -158,4 +158,4 @@ MoveEffectsPointers: dw BeatUp dw Fly dw DefenseCurl - assert_table_length NUM_MOVE_EFFECTS + assert_table_length NUM_MOVE_EFFECTS \ No newline at end of file diff --git a/data/moves/effects_priorities.asm b/data/moves/effects_priorities.asm index dfdb636a747..e26bef4c15b 100644 --- a/data/moves/effects_priorities.asm +++ b/data/moves/effects_priorities.asm @@ -5,4 +5,4 @@ MoveEffectPriorities: db EFFECT_FORCE_SWITCH, 0 db EFFECT_COUNTER, 0 db EFFECT_MIRROR_COAT, 0 - db -1 + db -1 \ No newline at end of file diff --git a/data/moves/moves.asm b/data/moves/moves.asm index f2d3c07d44c..6e002a92453 100644 --- a/data/moves/moves.asm +++ b/data/moves/moves.asm @@ -4,7 +4,7 @@ MACRO move db \1 ; animation db \2 ; effect db \3 ; power - db \4 ; type + db \4 | \8 ; type db \5 percent ; accuracy db \6 ; pp db \7 percent ; effect chance @@ -14,255 +14,255 @@ ENDM Moves: ; entries correspond to move ids (see constants/move_constants.asm) table_width MOVE_LENGTH, Moves - move POUND, EFFECT_NORMAL_HIT, 40, NORMAL, 100, 35, 0 - move KARATE_CHOP, EFFECT_NORMAL_HIT, 50, FIGHTING, 100, 25, 0 - move DOUBLESLAP, EFFECT_MULTI_HIT, 15, NORMAL, 85, 10, 0 - move COMET_PUNCH, EFFECT_MULTI_HIT, 18, NORMAL, 85, 15, 0 - move MEGA_PUNCH, EFFECT_NORMAL_HIT, 80, NORMAL, 85, 20, 0 - move PAY_DAY, EFFECT_PAY_DAY, 40, NORMAL, 100, 20, 0 - move FIRE_PUNCH, EFFECT_BURN_HIT, 75, FIRE, 100, 15, 10 - move ICE_PUNCH, EFFECT_FREEZE_HIT, 75, ICE, 100, 15, 10 - move THUNDERPUNCH, EFFECT_PARALYZE_HIT, 75, ELECTRIC, 100, 15, 10 - move SCRATCH, EFFECT_NORMAL_HIT, 40, NORMAL, 100, 35, 0 - move VICEGRIP, EFFECT_NORMAL_HIT, 55, NORMAL, 100, 30, 0 - move GUILLOTINE, EFFECT_OHKO, 0, NORMAL, 30, 5, 0 - move RAZOR_WIND, EFFECT_RAZOR_WIND, 80, NORMAL, 75, 10, 0 - move SWORDS_DANCE, EFFECT_ATTACK_UP_2, 0, NORMAL, 100, 30, 0 - move CUT, EFFECT_NORMAL_HIT, 50, NORMAL, 95, 30, 0 - move GUST, EFFECT_GUST, 40, FLYING, 100, 35, 0 - move WING_ATTACK, EFFECT_NORMAL_HIT, 60, FLYING, 100, 35, 0 - move WHIRLWIND, EFFECT_FORCE_SWITCH, 0, NORMAL, 100, 20, 0 - move FLY, EFFECT_FLY, 70, FLYING, 95, 15, 0 - move BIND, EFFECT_TRAP_TARGET, 15, NORMAL, 75, 20, 0 - move SLAM, EFFECT_NORMAL_HIT, 80, NORMAL, 75, 20, 0 - move VINE_WHIP, EFFECT_NORMAL_HIT, 35, GRASS, 100, 10, 0 - move STOMP, EFFECT_STOMP, 65, NORMAL, 100, 20, 30 - move DOUBLE_KICK, EFFECT_DOUBLE_HIT, 30, FIGHTING, 100, 30, 0 - move MEGA_KICK, EFFECT_NORMAL_HIT, 120, NORMAL, 75, 5, 0 - move JUMP_KICK, EFFECT_JUMP_KICK, 70, FIGHTING, 95, 25, 0 - move ROLLING_KICK, EFFECT_FLINCH_HIT, 60, FIGHTING, 85, 15, 30 - move SAND_ATTACK, EFFECT_ACCURACY_DOWN, 0, GROUND, 100, 15, 0 - move HEADBUTT, EFFECT_FLINCH_HIT, 70, NORMAL, 100, 15, 30 - move HORN_ATTACK, EFFECT_NORMAL_HIT, 65, NORMAL, 100, 25, 0 - move FURY_ATTACK, EFFECT_MULTI_HIT, 15, NORMAL, 85, 20, 0 - move HORN_DRILL, EFFECT_OHKO, 1, NORMAL, 30, 5, 0 - move TACKLE, EFFECT_NORMAL_HIT, 35, NORMAL, 95, 35, 0 - move BODY_SLAM, EFFECT_PARALYZE_HIT, 85, NORMAL, 100, 15, 30 - move WRAP, EFFECT_TRAP_TARGET, 15, NORMAL, 85, 20, 0 - move TAKE_DOWN, EFFECT_RECOIL_HIT, 90, NORMAL, 85, 20, 0 - move THRASH, EFFECT_RAMPAGE, 90, NORMAL, 100, 20, 0 - move DOUBLE_EDGE, EFFECT_RECOIL_HIT, 120, NORMAL, 100, 15, 0 - move TAIL_WHIP, EFFECT_DEFENSE_DOWN, 0, NORMAL, 100, 30, 0 - move POISON_STING, EFFECT_POISON_HIT, 15, POISON, 100, 35, 30 - move TWINEEDLE, EFFECT_POISON_MULTI_HIT, 25, BUG, 100, 20, 20 - move PIN_MISSILE, EFFECT_MULTI_HIT, 14, BUG, 85, 20, 0 - move LEER, EFFECT_DEFENSE_DOWN, 0, NORMAL, 100, 30, 0 - move BITE, EFFECT_FLINCH_HIT, 60, DARK, 100, 25, 30 - move GROWL, EFFECT_ATTACK_DOWN, 0, NORMAL, 100, 40, 0 - move ROAR, EFFECT_FORCE_SWITCH, 0, NORMAL, 100, 20, 0 - move SING, EFFECT_SLEEP, 0, NORMAL, 55, 15, 0 - move SUPERSONIC, EFFECT_CONFUSE, 0, NORMAL, 55, 20, 0 - move SONICBOOM, EFFECT_STATIC_DAMAGE, 20, NORMAL, 90, 20, 0 - move DISABLE, EFFECT_DISABLE, 0, NORMAL, 55, 20, 0 - move ACID, EFFECT_DEFENSE_DOWN_HIT, 40, POISON, 100, 30, 10 - move EMBER, EFFECT_BURN_HIT, 40, FIRE, 100, 25, 10 - move FLAMETHROWER, EFFECT_BURN_HIT, 95, FIRE, 100, 15, 10 - move MIST, EFFECT_MIST, 0, ICE, 100, 30, 0 - move WATER_GUN, EFFECT_NORMAL_HIT, 40, WATER, 100, 25, 0 - move HYDRO_PUMP, EFFECT_NORMAL_HIT, 120, WATER, 80, 5, 0 - move SURF, EFFECT_NORMAL_HIT, 95, WATER, 100, 15, 0 - move ICE_BEAM, EFFECT_FREEZE_HIT, 95, ICE, 100, 10, 10 - move BLIZZARD, EFFECT_FREEZE_HIT, 120, ICE, 70, 5, 10 - move PSYBEAM, EFFECT_CONFUSE_HIT, 65, PSYCHIC_TYPE, 100, 20, 10 - move BUBBLEBEAM, EFFECT_SPEED_DOWN_HIT, 65, WATER, 100, 20, 10 - move AURORA_BEAM, EFFECT_ATTACK_DOWN_HIT, 65, ICE, 100, 20, 10 - move HYPER_BEAM, EFFECT_HYPER_BEAM, 150, NORMAL, 90, 5, 0 - move PECK, EFFECT_NORMAL_HIT, 35, FLYING, 100, 35, 0 - move DRILL_PECK, EFFECT_NORMAL_HIT, 80, FLYING, 100, 20, 0 - move SUBMISSION, EFFECT_RECOIL_HIT, 80, FIGHTING, 80, 25, 0 - move LOW_KICK, EFFECT_FLINCH_HIT, 50, FIGHTING, 90, 20, 30 - move COUNTER, EFFECT_COUNTER, 1, FIGHTING, 100, 20, 0 - move SEISMIC_TOSS, EFFECT_LEVEL_DAMAGE, 1, FIGHTING, 100, 20, 0 - move STRENGTH, EFFECT_NORMAL_HIT, 80, NORMAL, 100, 15, 0 - move ABSORB, EFFECT_LEECH_HIT, 20, GRASS, 100, 20, 0 - move MEGA_DRAIN, EFFECT_LEECH_HIT, 40, GRASS, 100, 10, 0 - move LEECH_SEED, EFFECT_LEECH_SEED, 0, GRASS, 90, 10, 0 - move GROWTH, EFFECT_SP_ATK_UP, 0, NORMAL, 100, 40, 0 - move RAZOR_LEAF, EFFECT_NORMAL_HIT, 55, GRASS, 95, 25, 0 - move SOLARBEAM, EFFECT_SOLARBEAM, 120, GRASS, 100, 10, 0 - move POISONPOWDER, EFFECT_POISON, 0, POISON, 75, 35, 0 - move STUN_SPORE, EFFECT_PARALYZE, 0, GRASS, 75, 30, 0 - move SLEEP_POWDER, EFFECT_SLEEP, 0, GRASS, 75, 15, 0 - move PETAL_DANCE, EFFECT_RAMPAGE, 70, GRASS, 100, 20, 0 - move STRING_SHOT, EFFECT_SPEED_DOWN, 0, BUG, 95, 40, 0 - move DRAGON_RAGE, EFFECT_STATIC_DAMAGE, 40, DRAGON, 100, 10, 0 - move FIRE_SPIN, EFFECT_TRAP_TARGET, 15, FIRE, 70, 15, 0 - move THUNDERSHOCK, EFFECT_PARALYZE_HIT, 40, ELECTRIC, 100, 30, 10 - move THUNDERBOLT, EFFECT_PARALYZE_HIT, 95, ELECTRIC, 100, 15, 10 - move THUNDER_WAVE, EFFECT_PARALYZE, 0, ELECTRIC, 100, 20, 0 - move THUNDER, EFFECT_THUNDER, 120, ELECTRIC, 70, 10, 30 - move ROCK_THROW, EFFECT_NORMAL_HIT, 50, ROCK, 90, 15, 0 - move EARTHQUAKE, EFFECT_EARTHQUAKE, 100, GROUND, 100, 10, 0 - move FISSURE, EFFECT_OHKO, 1, GROUND, 30, 5, 0 - move DIG, EFFECT_FLY, 60, GROUND, 100, 10, 0 - move TOXIC, EFFECT_TOXIC, 0, POISON, 85, 10, 0 - move CONFUSION, EFFECT_CONFUSE_HIT, 50, PSYCHIC_TYPE, 100, 25, 10 - move PSYCHIC_M, EFFECT_SP_DEF_DOWN_HIT, 90, PSYCHIC_TYPE, 100, 10, 10 - move HYPNOSIS, EFFECT_SLEEP, 0, PSYCHIC_TYPE, 60, 20, 0 - move MEDITATE, EFFECT_ATTACK_UP, 0, PSYCHIC_TYPE, 100, 40, 0 - move AGILITY, EFFECT_SPEED_UP_2, 0, PSYCHIC_TYPE, 100, 30, 0 - move QUICK_ATTACK, EFFECT_PRIORITY_HIT, 40, NORMAL, 100, 30, 0 - move RAGE, EFFECT_RAGE, 20, NORMAL, 100, 20, 0 - move TELEPORT, EFFECT_TELEPORT, 0, PSYCHIC_TYPE, 100, 20, 0 - move NIGHT_SHADE, EFFECT_LEVEL_DAMAGE, 1, GHOST, 100, 15, 0 - move MIMIC, EFFECT_MIMIC, 0, NORMAL, 100, 10, 0 - move SCREECH, EFFECT_DEFENSE_DOWN_2, 0, NORMAL, 85, 40, 0 - move DOUBLE_TEAM, EFFECT_EVASION_UP, 0, NORMAL, 100, 15, 0 - move RECOVER, EFFECT_HEAL, 0, NORMAL, 100, 20, 0 - move HARDEN, EFFECT_DEFENSE_UP, 0, NORMAL, 100, 30, 0 - move MINIMIZE, EFFECT_EVASION_UP, 0, NORMAL, 100, 20, 0 - move SMOKESCREEN, EFFECT_ACCURACY_DOWN, 0, NORMAL, 100, 20, 0 - move CONFUSE_RAY, EFFECT_CONFUSE, 0, GHOST, 100, 10, 0 - move WITHDRAW, EFFECT_DEFENSE_UP, 0, WATER, 100, 40, 0 - move DEFENSE_CURL, EFFECT_DEFENSE_CURL, 0, NORMAL, 100, 40, 0 - move BARRIER, EFFECT_DEFENSE_UP_2, 0, PSYCHIC_TYPE, 100, 30, 0 - move LIGHT_SCREEN, EFFECT_LIGHT_SCREEN, 0, PSYCHIC_TYPE, 100, 30, 0 - move HAZE, EFFECT_RESET_STATS, 0, ICE, 100, 30, 0 - move REFLECT, EFFECT_REFLECT, 0, PSYCHIC_TYPE, 100, 20, 0 - move FOCUS_ENERGY, EFFECT_FOCUS_ENERGY, 0, NORMAL, 100, 30, 0 - move BIDE, EFFECT_BIDE, 0, NORMAL, 100, 10, 0 - move METRONOME, EFFECT_METRONOME, 0, NORMAL, 100, 10, 0 - move MIRROR_MOVE, EFFECT_MIRROR_MOVE, 0, FLYING, 100, 20, 0 - move SELFDESTRUCT, EFFECT_SELFDESTRUCT, 200, NORMAL, 100, 5, 0 - move EGG_BOMB, EFFECT_NORMAL_HIT, 100, NORMAL, 75, 10, 0 - move LICK, EFFECT_PARALYZE_HIT, 20, GHOST, 100, 30, 30 - move SMOG, EFFECT_POISON_HIT, 20, POISON, 70, 20, 40 - move SLUDGE, EFFECT_POISON_HIT, 65, POISON, 100, 20, 30 - move BONE_CLUB, EFFECT_FLINCH_HIT, 65, GROUND, 85, 20, 10 - move FIRE_BLAST, EFFECT_BURN_HIT, 120, FIRE, 85, 5, 10 - move WATERFALL, EFFECT_NORMAL_HIT, 80, WATER, 100, 15, 0 - move CLAMP, EFFECT_TRAP_TARGET, 35, WATER, 75, 10, 0 - move SWIFT, EFFECT_ALWAYS_HIT, 60, NORMAL, 100, 20, 0 - move SKULL_BASH, EFFECT_SKULL_BASH, 100, NORMAL, 100, 15, 0 - move SPIKE_CANNON, EFFECT_MULTI_HIT, 20, NORMAL, 100, 15, 0 - move CONSTRICT, EFFECT_SPEED_DOWN_HIT, 10, NORMAL, 100, 35, 10 - move AMNESIA, EFFECT_SP_DEF_UP_2, 0, PSYCHIC_TYPE, 100, 20, 0 - move KINESIS, EFFECT_ACCURACY_DOWN, 0, PSYCHIC_TYPE, 80, 15, 0 - move SOFTBOILED, EFFECT_HEAL, 0, NORMAL, 100, 10, 0 - move HI_JUMP_KICK, EFFECT_JUMP_KICK, 85, FIGHTING, 90, 20, 0 - move GLARE, EFFECT_PARALYZE, 0, NORMAL, 75, 30, 0 - move DREAM_EATER, EFFECT_DREAM_EATER, 100, PSYCHIC_TYPE, 100, 15, 0 - move POISON_GAS, EFFECT_POISON, 0, POISON, 55, 40, 0 - move BARRAGE, EFFECT_MULTI_HIT, 15, NORMAL, 85, 20, 0 - move LEECH_LIFE, EFFECT_LEECH_HIT, 20, BUG, 100, 15, 0 - move LOVELY_KISS, EFFECT_SLEEP, 0, NORMAL, 75, 10, 0 - move SKY_ATTACK, EFFECT_SKY_ATTACK, 140, FLYING, 90, 5, 0 - move TRANSFORM, EFFECT_TRANSFORM, 0, NORMAL, 100, 10, 0 - move BUBBLE, EFFECT_SPEED_DOWN_HIT, 20, WATER, 100, 30, 10 - move DIZZY_PUNCH, EFFECT_CONFUSE_HIT, 70, NORMAL, 100, 10, 20 - move SPORE, EFFECT_SLEEP, 0, GRASS, 100, 15, 0 - move FLASH, EFFECT_ACCURACY_DOWN, 0, NORMAL, 70, 20, 0 - move PSYWAVE, EFFECT_PSYWAVE, 1, PSYCHIC_TYPE, 80, 15, 0 - move SPLASH, EFFECT_SPLASH, 0, NORMAL, 100, 40, 0 - move ACID_ARMOR, EFFECT_DEFENSE_UP_2, 0, POISON, 100, 40, 0 - move CRABHAMMER, EFFECT_NORMAL_HIT, 90, WATER, 85, 10, 0 - move EXPLOSION, EFFECT_SELFDESTRUCT, 250, NORMAL, 100, 5, 0 - move FURY_SWIPES, EFFECT_MULTI_HIT, 18, NORMAL, 80, 15, 0 - move BONEMERANG, EFFECT_DOUBLE_HIT, 50, GROUND, 90, 10, 0 - move REST, EFFECT_HEAL, 0, PSYCHIC_TYPE, 100, 10, 0 - move ROCK_SLIDE, EFFECT_FLINCH_HIT, 75, ROCK, 90, 10, 30 - move HYPER_FANG, EFFECT_FLINCH_HIT, 80, NORMAL, 90, 15, 10 - move SHARPEN, EFFECT_ATTACK_UP, 0, NORMAL, 100, 30, 0 - move CONVERSION, EFFECT_CONVERSION, 0, NORMAL, 100, 30, 0 - move TRI_ATTACK, EFFECT_TRI_ATTACK, 80, NORMAL, 100, 10, 20 - move SUPER_FANG, EFFECT_SUPER_FANG, 1, NORMAL, 90, 10, 0 - move SLASH, EFFECT_NORMAL_HIT, 70, NORMAL, 100, 20, 0 - move SUBSTITUTE, EFFECT_SUBSTITUTE, 0, NORMAL, 100, 10, 0 - move STRUGGLE, EFFECT_RECOIL_HIT, 50, NORMAL, 100, 1, 0 - move SKETCH, EFFECT_SKETCH, 0, NORMAL, 100, 1, 0 - move TRIPLE_KICK, EFFECT_TRIPLE_KICK, 10, FIGHTING, 90, 10, 0 - move THIEF, EFFECT_THIEF, 40, DARK, 100, 10, 100 - move SPIDER_WEB, EFFECT_MEAN_LOOK, 0, BUG, 100, 10, 0 - move MIND_READER, EFFECT_LOCK_ON, 0, NORMAL, 100, 5, 0 - move NIGHTMARE, EFFECT_NIGHTMARE, 0, GHOST, 100, 15, 0 - move FLAME_WHEEL, EFFECT_FLAME_WHEEL, 60, FIRE, 100, 25, 10 - move SNORE, EFFECT_SNORE, 40, NORMAL, 100, 15, 30 - move CURSE, EFFECT_CURSE, 0, CURSE_TYPE, 100, 10, 0 - move FLAIL, EFFECT_REVERSAL, 1, NORMAL, 100, 15, 0 - move CONVERSION2, EFFECT_CONVERSION2, 0, NORMAL, 100, 30, 0 - move AEROBLAST, EFFECT_NORMAL_HIT, 100, FLYING, 95, 5, 0 - move COTTON_SPORE, EFFECT_SPEED_DOWN_2, 0, GRASS, 85, 40, 0 - move REVERSAL, EFFECT_REVERSAL, 1, FIGHTING, 100, 15, 0 - move SPITE, EFFECT_SPITE, 0, GHOST, 100, 10, 0 - move POWDER_SNOW, EFFECT_FREEZE_HIT, 40, ICE, 100, 25, 10 - move PROTECT, EFFECT_PROTECT, 0, NORMAL, 100, 10, 0 - move MACH_PUNCH, EFFECT_PRIORITY_HIT, 40, FIGHTING, 100, 30, 0 - move SCARY_FACE, EFFECT_SPEED_DOWN_2, 0, NORMAL, 90, 10, 0 - move FAINT_ATTACK, EFFECT_ALWAYS_HIT, 60, DARK, 100, 20, 0 - move SWEET_KISS, EFFECT_CONFUSE, 0, NORMAL, 75, 10, 0 - move BELLY_DRUM, EFFECT_BELLY_DRUM, 0, NORMAL, 100, 10, 0 - move SLUDGE_BOMB, EFFECT_POISON_HIT, 90, POISON, 100, 10, 30 - move MUD_SLAP, EFFECT_ACCURACY_DOWN_HIT, 20, GROUND, 100, 10, 100 - move OCTAZOOKA, EFFECT_ACCURACY_DOWN_HIT, 65, WATER, 85, 10, 50 - move SPIKES, EFFECT_SPIKES, 0, GROUND, 100, 20, 0 - move ZAP_CANNON, EFFECT_PARALYZE_HIT, 100, ELECTRIC, 50, 5, 100 - move FORESIGHT, EFFECT_FORESIGHT, 0, NORMAL, 100, 40, 0 - move DESTINY_BOND, EFFECT_DESTINY_BOND, 0, GHOST, 100, 5, 0 - move PERISH_SONG, EFFECT_PERISH_SONG, 0, NORMAL, 100, 5, 0 - move ICY_WIND, EFFECT_SPEED_DOWN_HIT, 55, ICE, 95, 15, 100 - move DETECT, EFFECT_PROTECT, 0, FIGHTING, 100, 5, 0 - move BONE_RUSH, EFFECT_MULTI_HIT, 25, GROUND, 80, 10, 0 - move LOCK_ON, EFFECT_LOCK_ON, 0, NORMAL, 100, 5, 0 - move OUTRAGE, EFFECT_RAMPAGE, 90, DRAGON, 100, 15, 0 - move SANDSTORM, EFFECT_SANDSTORM, 0, ROCK, 100, 10, 0 - move GIGA_DRAIN, EFFECT_LEECH_HIT, 60, GRASS, 100, 5, 0 - move ENDURE, EFFECT_ENDURE, 0, NORMAL, 100, 10, 0 - move CHARM, EFFECT_ATTACK_DOWN_2, 0, NORMAL, 100, 20, 0 - move ROLLOUT, EFFECT_ROLLOUT, 30, ROCK, 90, 20, 0 - move FALSE_SWIPE, EFFECT_FALSE_SWIPE, 40, NORMAL, 100, 40, 0 - move SWAGGER, EFFECT_SWAGGER, 0, NORMAL, 90, 15, 100 - move MILK_DRINK, EFFECT_HEAL, 0, NORMAL, 100, 10, 0 - move SPARK, EFFECT_PARALYZE_HIT, 65, ELECTRIC, 100, 20, 30 - move FURY_CUTTER, EFFECT_FURY_CUTTER, 10, BUG, 95, 20, 0 - move STEEL_WING, EFFECT_DEFENSE_UP_HIT, 70, STEEL, 90, 25, 10 - move MEAN_LOOK, EFFECT_MEAN_LOOK, 0, NORMAL, 100, 5, 0 - move ATTRACT, EFFECT_ATTRACT, 0, NORMAL, 100, 15, 0 - move SLEEP_TALK, EFFECT_SLEEP_TALK, 0, NORMAL, 100, 10, 0 - move HEAL_BELL, EFFECT_HEAL_BELL, 0, NORMAL, 100, 5, 0 - move RETURN, EFFECT_RETURN, 1, NORMAL, 100, 20, 0 - move PRESENT, EFFECT_PRESENT, 1, NORMAL, 90, 15, 0 - move FRUSTRATION, EFFECT_FRUSTRATION, 1, NORMAL, 100, 20, 0 - move SAFEGUARD, EFFECT_SAFEGUARD, 0, NORMAL, 100, 25, 0 - move PAIN_SPLIT, EFFECT_PAIN_SPLIT, 0, NORMAL, 100, 20, 0 - move SACRED_FIRE, EFFECT_SACRED_FIRE, 100, FIRE, 95, 5, 50 - move MAGNITUDE, EFFECT_MAGNITUDE, 1, GROUND, 100, 30, 0 - move DYNAMICPUNCH, EFFECT_CONFUSE_HIT, 100, FIGHTING, 50, 5, 100 - move MEGAHORN, EFFECT_NORMAL_HIT, 120, BUG, 85, 10, 0 - move DRAGONBREATH, EFFECT_PARALYZE_HIT, 60, DRAGON, 100, 20, 30 - move BATON_PASS, EFFECT_BATON_PASS, 0, NORMAL, 100, 40, 0 - move ENCORE, EFFECT_ENCORE, 0, NORMAL, 100, 5, 0 - move PURSUIT, EFFECT_PURSUIT, 40, DARK, 100, 20, 0 - move RAPID_SPIN, EFFECT_RAPID_SPIN, 20, NORMAL, 100, 40, 0 - move SWEET_SCENT, EFFECT_EVASION_DOWN, 0, NORMAL, 100, 20, 0 - move IRON_TAIL, EFFECT_DEFENSE_DOWN_HIT, 100, STEEL, 75, 15, 30 - move METAL_CLAW, EFFECT_ATTACK_UP_HIT, 50, STEEL, 95, 35, 10 - move VITAL_THROW, EFFECT_ALWAYS_HIT, 70, FIGHTING, 100, 10, 0 - move MORNING_SUN, EFFECT_MORNING_SUN, 0, NORMAL, 100, 5, 0 - move SYNTHESIS, EFFECT_SYNTHESIS, 0, GRASS, 100, 5, 0 - move MOONLIGHT, EFFECT_MOONLIGHT, 0, NORMAL, 100, 5, 0 - move HIDDEN_POWER, EFFECT_HIDDEN_POWER, 1, NORMAL, 100, 15, 0 - move CROSS_CHOP, EFFECT_NORMAL_HIT, 100, FIGHTING, 80, 5, 0 - move TWISTER, EFFECT_TWISTER, 40, DRAGON, 100, 20, 20 - move RAIN_DANCE, EFFECT_RAIN_DANCE, 0, WATER, 90, 5, 0 - move SUNNY_DAY, EFFECT_SUNNY_DAY, 0, FIRE, 90, 5, 0 - move CRUNCH, EFFECT_SP_DEF_DOWN_HIT, 80, DARK, 100, 15, 20 - move MIRROR_COAT, EFFECT_MIRROR_COAT, 1, PSYCHIC_TYPE, 100, 20, 0 - move PSYCH_UP, EFFECT_PSYCH_UP, 0, NORMAL, 100, 10, 0 - move EXTREMESPEED, EFFECT_PRIORITY_HIT, 80, NORMAL, 100, 5, 0 - move ANCIENTPOWER, EFFECT_ALL_UP_HIT, 60, ROCK, 100, 5, 10 - move SHADOW_BALL, EFFECT_SP_DEF_DOWN_HIT, 80, GHOST, 100, 15, 20 - move FUTURE_SIGHT, EFFECT_FUTURE_SIGHT, 80, PSYCHIC_TYPE, 90, 15, 0 - move ROCK_SMASH, EFFECT_DEFENSE_DOWN_HIT, 20, FIGHTING, 100, 15, 50 - move WHIRLPOOL, EFFECT_TRAP_TARGET, 15, WATER, 70, 15, 0 - move BEAT_UP, EFFECT_BEAT_UP, 10, DARK, 100, 10, 0 + move POUND, EFFECT_NORMAL_HIT, 40, NORMAL, 100, 35, 0, PHYSICAL + move KARATE_CHOP, EFFECT_NORMAL_HIT, 50, FIGHTING, 100, 25, 0, PHYSICAL + move DOUBLESLAP, EFFECT_MULTI_HIT, 15, NORMAL, 85, 10, 0, PHYSICAL + move COMET_PUNCH, EFFECT_MULTI_HIT, 18, NORMAL, 85, 15, 0, PHYSICAL + move MEGA_PUNCH, EFFECT_NORMAL_HIT, 80, NORMAL, 85, 20, 0, PHYSICAL + move PAY_DAY, EFFECT_PAY_DAY, 40, NORMAL, 100, 20, 0, PHYSICAL + move FIRE_PUNCH, EFFECT_BURN_HIT, 75, FIRE, 100, 15, 10, PHYSICAL + move ICE_PUNCH, EFFECT_FREEZE_HIT, 75, ICE, 100, 15, 10, PHYSICAL + move THUNDERPUNCH, EFFECT_PARALYZE_HIT, 75, ELECTRIC, 100, 15, 10, PHYSICAL + move SCRATCH, EFFECT_NORMAL_HIT, 40, NORMAL, 100, 35, 0, PHYSICAL + move VICEGRIP, EFFECT_NORMAL_HIT, 55, NORMAL, 100, 30, 0, PHYSICAL + move GUILLOTINE, EFFECT_OHKO, 0, NORMAL, 30, 5, 0, PHYSICAL + move RAZOR_WIND, EFFECT_RAZOR_WIND, 80, NORMAL, 75, 10, 0, SPECIAL + move SWORDS_DANCE, EFFECT_ATTACK_UP_2, 0, NORMAL, 100, 30, 0, STATUS + move CUT, EFFECT_NORMAL_HIT, 50, NORMAL, 95, 30, 0, PHYSICAL + move GUST, EFFECT_GUST, 40, FLYING, 100, 35, 0, SPECIAL + move WING_ATTACK, EFFECT_NORMAL_HIT, 60, FLYING, 100, 35, 0, PHYSICAL + move WHIRLWIND, EFFECT_FORCE_SWITCH, 0, NORMAL, 100, 20, 0, STATUS + move FLY, EFFECT_FLY, 70, FLYING, 95, 15, 0, PHYSICAL + move BIND, EFFECT_TRAP_TARGET, 15, NORMAL, 75, 20, 0, PHYSICAL + move SLAM, EFFECT_NORMAL_HIT, 80, NORMAL, 75, 20, 0, PHYSICAL + move VINE_WHIP, EFFECT_NORMAL_HIT, 35, GRASS, 100, 10, 0, PHYSICAL + move STOMP, EFFECT_STOMP, 65, NORMAL, 100, 20, 30, PHYSICAL + move DOUBLE_KICK, EFFECT_DOUBLE_HIT, 30, FIGHTING, 100, 30, 0, PHYSICAL + move MEGA_KICK, EFFECT_NORMAL_HIT, 120, NORMAL, 75, 5, 0, PHYSICAL + move JUMP_KICK, EFFECT_JUMP_KICK, 70, FIGHTING, 95, 25, 0, PHYSICAL + move ROLLING_KICK, EFFECT_FLINCH_HIT, 60, FIGHTING, 85, 15, 30, PHYSICAL + move SAND_ATTACK, EFFECT_ACCURACY_DOWN, 0, GROUND, 100, 15, 0, STATUS + move HEADBUTT, EFFECT_FLINCH_HIT, 70, NORMAL, 100, 15, 30, PHYSICAL + move HORN_ATTACK, EFFECT_NORMAL_HIT, 65, NORMAL, 100, 25, 0, PHYSICAL + move FURY_ATTACK, EFFECT_MULTI_HIT, 15, NORMAL, 85, 20, 0, PHYSICAL + move HORN_DRILL, EFFECT_OHKO, 1, NORMAL, 30, 5, 0, PHYSICAL + move TACKLE, EFFECT_NORMAL_HIT, 35, NORMAL, 95, 35, 0, PHYSICAL + move BODY_SLAM, EFFECT_PARALYZE_HIT, 85, NORMAL, 100, 15, 30, PHYSICAL + move WRAP, EFFECT_TRAP_TARGET, 15, NORMAL, 85, 20, 0, PHYSICAL + move TAKE_DOWN, EFFECT_RECOIL_HIT, 90, NORMAL, 85, 20, 0, PHYSICAL + move THRASH, EFFECT_RAMPAGE, 90, NORMAL, 100, 20, 0, PHYSICAL + move DOUBLE_EDGE, EFFECT_RECOIL_HIT, 120, NORMAL, 100, 15, 0, PHYSICAL + move TAIL_WHIP, EFFECT_DEFENSE_DOWN, 0, NORMAL, 100, 30, 0, STATUS + move POISON_STING, EFFECT_POISON_HIT, 15, POISON, 100, 35, 30, PHYSICAL + move TWINEEDLE, EFFECT_POISON_MULTI_HIT, 25, BUG, 100, 20, 20, PHYSICAL + move PIN_MISSILE, EFFECT_MULTI_HIT, 14, BUG, 85, 20, 0, PHYSICAL + move LEER, EFFECT_DEFENSE_DOWN, 0, NORMAL, 100, 30, 0, STATUS + move BITE, EFFECT_FLINCH_HIT, 60, DARK, 100, 25, 30, PHYSICAL + move GROWL, EFFECT_ATTACK_DOWN, 0, NORMAL, 100, 40, 0, STATUS + move ROAR, EFFECT_FORCE_SWITCH, 0, NORMAL, 100, 20, 0, STATUS + move SING, EFFECT_SLEEP, 0, NORMAL, 55, 15, 0, STATUS + move SUPERSONIC, EFFECT_CONFUSE, 0, NORMAL, 55, 20, 0, STATUS + move SONICBOOM, EFFECT_STATIC_DAMAGE, 20, NORMAL, 90, 20, 0, SPECIAL + move DISABLE, EFFECT_DISABLE, 0, NORMAL, 55, 20, 0, STATUS + move ACID, EFFECT_DEFENSE_DOWN_HIT, 40, POISON, 100, 30, 10, SPECIAL + move EMBER, EFFECT_BURN_HIT, 40, FIRE, 100, 25, 10, SPECIAL + move FLAMETHROWER, EFFECT_BURN_HIT, 95, FIRE, 100, 15, 10, SPECIAL + move MIST, EFFECT_MIST, 0, ICE, 100, 30, 0, STATUS + move WATER_GUN, EFFECT_NORMAL_HIT, 40, WATER, 100, 25, 0, SPECIAL + move HYDRO_PUMP, EFFECT_NORMAL_HIT, 120, WATER, 80, 5, 0, SPECIAL + move SURF, EFFECT_NORMAL_HIT, 95, WATER, 100, 15, 0, SPECIAL + move ICE_BEAM, EFFECT_FREEZE_HIT, 95, ICE, 100, 10, 10, SPECIAL + move BLIZZARD, EFFECT_FREEZE_HIT, 120, ICE, 70, 5, 10, SPECIAL + move PSYBEAM, EFFECT_CONFUSE_HIT, 65, PSYCHIC_TYPE, 100, 20, 10, SPECIAL + move BUBBLEBEAM, EFFECT_SPEED_DOWN_HIT, 65, WATER, 100, 20, 10, SPECIAL + move AURORA_BEAM, EFFECT_ATTACK_DOWN_HIT, 65, ICE, 100, 20, 10, SPECIAL + move HYPER_BEAM, EFFECT_HYPER_BEAM, 150, NORMAL, 90, 5, 0, SPECIAL + move PECK, EFFECT_NORMAL_HIT, 35, FLYING, 100, 35, 0, PHYSICAL + move DRILL_PECK, EFFECT_NORMAL_HIT, 80, FLYING, 100, 20, 0, PHYSICAL + move SUBMISSION, EFFECT_RECOIL_HIT, 80, FIGHTING, 80, 25, 0, PHYSICAL + move LOW_KICK, EFFECT_FLINCH_HIT, 50, FIGHTING, 90, 20, 30, PHYSICAL + move COUNTER, EFFECT_COUNTER, 1, FIGHTING, 100, 20, 0, PHYSICAL + move SEISMIC_TOSS, EFFECT_LEVEL_DAMAGE, 1, FIGHTING, 100, 20, 0, PHYSICAL + move STRENGTH, EFFECT_NORMAL_HIT, 80, NORMAL, 100, 15, 0, PHYSICAL + move ABSORB, EFFECT_LEECH_HIT, 20, GRASS, 100, 20, 0, SPECIAL + move MEGA_DRAIN, EFFECT_LEECH_HIT, 40, GRASS, 100, 10, 0, SPECIAL + move LEECH_SEED, EFFECT_LEECH_SEED, 0, GRASS, 90, 10, 0, STATUS + move GROWTH, EFFECT_SP_ATK_UP, 0, NORMAL, 100, 40, 0, STATUS + move RAZOR_LEAF, EFFECT_NORMAL_HIT, 55, GRASS, 95, 25, 0, PHYSICAL + move SOLARBEAM, EFFECT_SOLARBEAM, 120, GRASS, 100, 10, 0, SPECIAL + move POISONPOWDER, EFFECT_POISON, 0, POISON, 75, 35, 0, STATUS + move STUN_SPORE, EFFECT_PARALYZE, 0, GRASS, 75, 30, 0, STATUS + move SLEEP_POWDER, EFFECT_SLEEP, 0, GRASS, 75, 15, 0, STATUS + move PETAL_DANCE, EFFECT_RAMPAGE, 70, GRASS, 100, 20, 0, SPECIAL + move STRING_SHOT, EFFECT_SPEED_DOWN, 0, BUG, 95, 40, 0, STATUS + move DRAGON_RAGE, EFFECT_STATIC_DAMAGE, 40, DRAGON, 100, 10, 0, SPECIAL + move FIRE_SPIN, EFFECT_TRAP_TARGET, 15, FIRE, 70, 15, 0, SPECIAL + move THUNDERSHOCK, EFFECT_PARALYZE_HIT, 40, ELECTRIC, 100, 30, 10, SPECIAL + move THUNDERBOLT, EFFECT_PARALYZE_HIT, 95, ELECTRIC, 100, 15, 10, SPECIAL + move THUNDER_WAVE, EFFECT_PARALYZE, 0, ELECTRIC, 100, 20, 0, STATUS + move THUNDER, EFFECT_THUNDER, 120, ELECTRIC, 70, 10, 30, SPECIAL + move ROCK_THROW, EFFECT_NORMAL_HIT, 50, ROCK, 90, 15, 0, PHYSICAL + move EARTHQUAKE, EFFECT_EARTHQUAKE, 100, GROUND, 100, 10, 0, PHYSICAL + move FISSURE, EFFECT_OHKO, 1, GROUND, 30, 5, 0, PHYSICAL + move DIG, EFFECT_FLY, 60, GROUND, 100, 10, 0, PHYSICAL + move TOXIC, EFFECT_TOXIC, 0, POISON, 85, 10, 0, STATUS + move CONFUSION, EFFECT_CONFUSE_HIT, 50, PSYCHIC_TYPE, 100, 25, 10, SPECIAL + move PSYCHIC_M, EFFECT_SP_DEF_DOWN_HIT, 90, PSYCHIC_TYPE, 100, 10, 10, SPECIAL + move HYPNOSIS, EFFECT_SLEEP, 0, PSYCHIC_TYPE, 60, 20, 0, STATUS + move MEDITATE, EFFECT_ATTACK_UP, 0, PSYCHIC_TYPE, 100, 40, 0, STATUS + move AGILITY, EFFECT_SPEED_UP_2, 0, PSYCHIC_TYPE, 100, 30, 0, STATUS + move QUICK_ATTACK, EFFECT_PRIORITY_HIT, 40, NORMAL, 100, 30, 0, PHYSICAL + move RAGE, EFFECT_RAGE, 20, NORMAL, 100, 20, 0, PHYSICAL + move TELEPORT, EFFECT_TELEPORT, 0, PSYCHIC_TYPE, 100, 20, 0, STATUS + move NIGHT_SHADE, EFFECT_LEVEL_DAMAGE, 1, GHOST, 100, 15, 0, SPECIAL + move MIMIC, EFFECT_MIMIC, 0, NORMAL, 100, 10, 0, STATUS + move SCREECH, EFFECT_DEFENSE_DOWN_2, 0, NORMAL, 85, 40, 0, STATUS + move DOUBLE_TEAM, EFFECT_EVASION_UP, 0, NORMAL, 100, 15, 0, STATUS + move RECOVER, EFFECT_HEAL, 0, NORMAL, 100, 20, 0, STATUS + move HARDEN, EFFECT_DEFENSE_UP, 0, NORMAL, 100, 30, 0, STATUS + move MINIMIZE, EFFECT_EVASION_UP, 0, NORMAL, 100, 20, 0, STATUS + move SMOKESCREEN, EFFECT_ACCURACY_DOWN, 0, NORMAL, 100, 20, 0, STATUS + move CONFUSE_RAY, EFFECT_CONFUSE, 0, GHOST, 100, 10, 0, STATUS + move WITHDRAW, EFFECT_DEFENSE_UP, 0, WATER, 100, 40, 0, STATUS + move DEFENSE_CURL, EFFECT_DEFENSE_CURL, 0, NORMAL, 100, 40, 0, STATUS + move BARRIER, EFFECT_DEFENSE_UP_2, 0, PSYCHIC_TYPE, 100, 30, 0, STATUS + move LIGHT_SCREEN, EFFECT_LIGHT_SCREEN, 0, PSYCHIC_TYPE, 100, 30, 0, STATUS + move HAZE, EFFECT_RESET_STATS, 0, ICE, 100, 30, 0, STATUS + move REFLECT, EFFECT_REFLECT, 0, PSYCHIC_TYPE, 100, 20, 0, STATUS + move FOCUS_ENERGY, EFFECT_FOCUS_ENERGY, 0, NORMAL, 100, 30, 0, STATUS + move BIDE, EFFECT_BIDE, 0, NORMAL, 100, 10, 0, PHYSICAL + move METRONOME, EFFECT_METRONOME, 0, NORMAL, 100, 10, 0, STATUS + move MIRROR_MOVE, EFFECT_MIRROR_MOVE, 0, FLYING, 100, 20, 0, STATUS + move SELFDESTRUCT, EFFECT_SELFDESTRUCT, 200, NORMAL, 100, 5, 0, PHYSICAL + move EGG_BOMB, EFFECT_NORMAL_HIT, 100, NORMAL, 75, 10, 0, PHYSICAL + move LICK, EFFECT_PARALYZE_HIT, 20, GHOST, 100, 30, 30, PHYSICAL + move SMOG, EFFECT_POISON_HIT, 20, POISON, 70, 20, 40, SPECIAL + move SLUDGE, EFFECT_POISON_HIT, 65, POISON, 100, 20, 30, SPECIAL + move BONE_CLUB, EFFECT_FLINCH_HIT, 65, GROUND, 85, 20, 10, PHYSICAL + move FIRE_BLAST, EFFECT_BURN_HIT, 120, FIRE, 85, 5, 10, SPECIAL + move WATERFALL, EFFECT_NORMAL_HIT, 80, WATER, 100, 15, 0, PHYSICAL + move CLAMP, EFFECT_TRAP_TARGET, 35, WATER, 75, 10, 0, PHYSICAL + move SWIFT, EFFECT_ALWAYS_HIT, 60, NORMAL, 100, 20, 0, SPECIAL + move SKULL_BASH, EFFECT_SKULL_BASH, 100, NORMAL, 100, 15, 0, PHYSICAL + move SPIKE_CANNON, EFFECT_MULTI_HIT, 20, NORMAL, 100, 15, 0, PHYSICAL + move CONSTRICT, EFFECT_SPEED_DOWN_HIT, 10, NORMAL, 100, 35, 10, PHYSICAL + move AMNESIA, EFFECT_SP_DEF_UP_2, 0, PSYCHIC_TYPE, 100, 20, 0, STATUS + move KINESIS, EFFECT_ACCURACY_DOWN, 0, PSYCHIC_TYPE, 80, 15, 0, STATUS + move SOFTBOILED, EFFECT_HEAL, 0, NORMAL, 100, 10, 0, STATUS + move HI_JUMP_KICK, EFFECT_JUMP_KICK, 85, FIGHTING, 90, 20, 0, PHYSICAL + move GLARE, EFFECT_PARALYZE, 0, NORMAL, 75, 30, 0, STATUS + move DREAM_EATER, EFFECT_DREAM_EATER, 100, PSYCHIC_TYPE, 100, 15, 0, SPECIAL + move POISON_GAS, EFFECT_POISON, 0, POISON, 55, 40, 0, STATUS + move BARRAGE, EFFECT_MULTI_HIT, 15, NORMAL, 85, 20, 0, PHYSICAL + move LEECH_LIFE, EFFECT_LEECH_HIT, 20, BUG, 100, 15, 0, PHYSICAL + move LOVELY_KISS, EFFECT_SLEEP, 0, NORMAL, 75, 10, 0, STATUS + move SKY_ATTACK, EFFECT_SKY_ATTACK, 140, FLYING, 90, 5, 0, PHYSICAL + move TRANSFORM, EFFECT_TRANSFORM, 0, NORMAL, 100, 10, 0, STATUS + move BUBBLE, EFFECT_SPEED_DOWN_HIT, 20, WATER, 100, 30, 10, SPECIAL + move DIZZY_PUNCH, EFFECT_CONFUSE_HIT, 70, NORMAL, 100, 10, 20, PHYSICAL + move SPORE, EFFECT_SLEEP, 0, GRASS, 100, 15, 0, STATUS + move FLASH, EFFECT_ACCURACY_DOWN, 0, NORMAL, 70, 20, 0, STATUS + move PSYWAVE, EFFECT_PSYWAVE, 1, PSYCHIC_TYPE, 80, 15, 0, SPECIAL + move SPLASH, EFFECT_SPLASH, 0, NORMAL, 100, 40, 0, STATUS + move ACID_ARMOR, EFFECT_DEFENSE_UP_2, 0, POISON, 100, 40, 0, STATUS + move CRABHAMMER, EFFECT_NORMAL_HIT, 90, WATER, 85, 10, 0, PHYSICAL + move EXPLOSION, EFFECT_SELFDESTRUCT, 250, NORMAL, 100, 5, 0, PHYSICAL + move FURY_SWIPES, EFFECT_MULTI_HIT, 18, NORMAL, 80, 15, 0, PHYSICAL + move BONEMERANG, EFFECT_DOUBLE_HIT, 50, GROUND, 90, 10, 0, PHYSICAL + move REST, EFFECT_HEAL, 0, PSYCHIC_TYPE, 100, 10, 0, STATUS + move ROCK_SLIDE, EFFECT_FLINCH_HIT, 75, ROCK, 90, 10, 30, PHYSICAL + move HYPER_FANG, EFFECT_FLINCH_HIT, 80, NORMAL, 90, 15, 10, PHYSICAL + move SHARPEN, EFFECT_ATTACK_UP, 0, NORMAL, 100, 30, 0, STATUS + move CONVERSION, EFFECT_CONVERSION, 0, NORMAL, 100, 30, 0, STATUS + move TRI_ATTACK, EFFECT_TRI_ATTACK, 80, NORMAL, 100, 10, 20, SPECIAL + move SUPER_FANG, EFFECT_SUPER_FANG, 1, NORMAL, 90, 10, 0, PHYSICAL + move SLASH, EFFECT_NORMAL_HIT, 70, NORMAL, 100, 20, 0, PHYSICAL + move SUBSTITUTE, EFFECT_SUBSTITUTE, 0, NORMAL, 100, 10, 0, STATUS + move STRUGGLE, EFFECT_RECOIL_HIT, 50, NORMAL, 100, 1, 0, PHYSICAL + move SKETCH, EFFECT_SKETCH, 0, NORMAL, 100, 1, 0, STATUS + move TRIPLE_KICK, EFFECT_TRIPLE_KICK, 10, FIGHTING, 90, 10, 0, PHYSICAL + move THIEF, EFFECT_THIEF, 40, DARK, 100, 10, 100, PHYSICAL + move SPIDER_WEB, EFFECT_MEAN_LOOK, 0, BUG, 100, 10, 0, STATUS + move MIND_READER, EFFECT_LOCK_ON, 0, NORMAL, 100, 5, 0, STATUS + move NIGHTMARE, EFFECT_NIGHTMARE, 0, GHOST, 100, 15, 0, STATUS + move FLAME_WHEEL, EFFECT_FLAME_WHEEL, 60, FIRE, 100, 25, 10, PHYSICAL + move SNORE, EFFECT_SNORE, 40, NORMAL, 100, 15, 30, SPECIAL + move CURSE, EFFECT_CURSE, 0, CURSE_TYPE, 100, 10, 0, STATUS + move FLAIL, EFFECT_REVERSAL, 1, NORMAL, 100, 15, 0, PHYSICAL + move CONVERSION2, EFFECT_CONVERSION2, 0, NORMAL, 100, 30, 0, STATUS + move AEROBLAST, EFFECT_NORMAL_HIT, 100, FLYING, 95, 5, 0, SPECIAL + move COTTON_SPORE, EFFECT_SPEED_DOWN_2, 0, GRASS, 85, 40, 0, STATUS + move REVERSAL, EFFECT_REVERSAL, 1, FIGHTING, 100, 15, 0, PHYSICAL + move SPITE, EFFECT_SPITE, 0, GHOST, 100, 10, 0, STATUS + move POWDER_SNOW, EFFECT_FREEZE_HIT, 40, ICE, 100, 25, 10, SPECIAL + move PROTECT, EFFECT_PROTECT, 0, NORMAL, 100, 10, 0, STATUS + move MACH_PUNCH, EFFECT_PRIORITY_HIT, 40, FIGHTING, 100, 30, 0, PHYSICAL + move SCARY_FACE, EFFECT_SPEED_DOWN_2, 0, NORMAL, 90, 10, 0, STATUS + move FAINT_ATTACK, EFFECT_ALWAYS_HIT, 60, DARK, 100, 20, 0, PHYSICAL + move SWEET_KISS, EFFECT_CONFUSE, 0, FAIRY, 75, 10, 0, STATUS + move BELLY_DRUM, EFFECT_BELLY_DRUM, 0, NORMAL, 100, 10, 0, STATUS + move SLUDGE_BOMB, EFFECT_POISON_HIT, 90, POISON, 100, 10, 30, SPECIAL + move MUD_SLAP, EFFECT_ACCURACY_DOWN_HIT, 20, GROUND, 100, 10, 100, SPECIAL + move OCTAZOOKA, EFFECT_ACCURACY_DOWN_HIT, 65, WATER, 85, 10, 50, SPECIAL + move SPIKES, EFFECT_SPIKES, 0, GROUND, 100, 20, 0, STATUS + move ZAP_CANNON, EFFECT_PARALYZE_HIT, 100, ELECTRIC, 50, 5, 100, SPECIAL + move FORESIGHT, EFFECT_FORESIGHT, 0, NORMAL, 100, 40, 0, STATUS + move DESTINY_BOND, EFFECT_DESTINY_BOND, 0, GHOST, 100, 5, 0, STATUS + move PERISH_SONG, EFFECT_PERISH_SONG, 0, NORMAL, 100, 5, 0, STATUS + move ICY_WIND, EFFECT_SPEED_DOWN_HIT, 55, ICE, 95, 15, 100, SPECIAL + move DETECT, EFFECT_PROTECT, 0, FIGHTING, 100, 5, 0, STATUS + move BONE_RUSH, EFFECT_MULTI_HIT, 25, GROUND, 80, 10, 0, PHYSICAL + move LOCK_ON, EFFECT_LOCK_ON, 0, NORMAL, 100, 5, 0, STATUS + move OUTRAGE, EFFECT_RAMPAGE, 90, DRAGON, 100, 15, 0, PHYSICAL + move SANDSTORM, EFFECT_SANDSTORM, 0, ROCK, 100, 10, 0, STATUS + move GIGA_DRAIN, EFFECT_LEECH_HIT, 60, GRASS, 100, 5, 0, SPECIAL + move ENDURE, EFFECT_ENDURE, 0, NORMAL, 100, 10, 0, STATUS + move CHARM, EFFECT_ATTACK_DOWN_2, 0, FAIRY, 100, 20, 0, STATUS + move ROLLOUT, EFFECT_ROLLOUT, 30, ROCK, 90, 20, 0, PHYSICAL + move FALSE_SWIPE, EFFECT_FALSE_SWIPE, 40, NORMAL, 100, 40, 0, PHYSICAL + move SWAGGER, EFFECT_SWAGGER, 0, NORMAL, 90, 15, 100, STATUS + move MILK_DRINK, EFFECT_HEAL, 0, NORMAL, 100, 10, 0, STATUS + move SPARK, EFFECT_PARALYZE_HIT, 65, ELECTRIC, 100, 20, 30, PHYSICAL + move FURY_CUTTER, EFFECT_FURY_CUTTER, 10, BUG, 95, 20, 0, PHYSICAL + move STEEL_WING, EFFECT_DEFENSE_UP_HIT, 70, STEEL, 90, 25, 10, PHYSICAL + move MEAN_LOOK, EFFECT_MEAN_LOOK, 0, NORMAL, 100, 5, 0, STATUS + move ATTRACT, EFFECT_ATTRACT, 0, NORMAL, 100, 15, 0, STATUS + move SLEEP_TALK, EFFECT_SLEEP_TALK, 0, NORMAL, 100, 10, 0, STATUS + move HEAL_BELL, EFFECT_HEAL_BELL, 0, NORMAL, 100, 5, 0, STATUS + move RETURN, EFFECT_RETURN, 1, NORMAL, 100, 20, 0, PHYSICAL + move PRESENT, EFFECT_PRESENT, 1, NORMAL, 90, 15, 0, PHYSICAL + move FRUSTRATION, EFFECT_FRUSTRATION, 1, NORMAL, 100, 20, 0, PHYSICAL + move SAFEGUARD, EFFECT_SAFEGUARD, 0, NORMAL, 100, 25, 0, STATUS + move PAIN_SPLIT, EFFECT_PAIN_SPLIT, 0, NORMAL, 100, 20, 0, STATUS + move SACRED_FIRE, EFFECT_SACRED_FIRE, 100, FIRE, 95, 5, 50, PHYSICAL + move MAGNITUDE, EFFECT_MAGNITUDE, 1, GROUND, 100, 30, 0, PHYSICAL + move DYNAMICPUNCH, EFFECT_CONFUSE_HIT, 100, FIGHTING, 50, 5, 100, PHYSICAL + move MEGAHORN, EFFECT_NORMAL_HIT, 120, BUG, 85, 10, 0, PHYSICAL + move DRAGONBREATH, EFFECT_PARALYZE_HIT, 60, DRAGON, 100, 20, 30, SPECIAL + move BATON_PASS, EFFECT_BATON_PASS, 0, NORMAL, 100, 40, 0, STATUS + move ENCORE, EFFECT_ENCORE, 0, NORMAL, 100, 5, 0, STATUS + move PURSUIT, EFFECT_PURSUIT, 40, DARK, 100, 20, 0, PHYSICAL + move RAPID_SPIN, EFFECT_RAPID_SPIN, 20, NORMAL, 100, 40, 0, PHYSICAL + move SWEET_SCENT, EFFECT_EVASION_DOWN, 0, NORMAL, 100, 20, 0, STATUS + move IRON_TAIL, EFFECT_DEFENSE_DOWN_HIT, 100, STEEL, 75, 15, 30, PHYSICAL + move METAL_CLAW, EFFECT_ATTACK_UP_HIT, 50, STEEL, 95, 35, 10, PHYSICAL + move VITAL_THROW, EFFECT_ALWAYS_HIT, 70, FIGHTING, 100, 10, 0, PHYSICAL + move MORNING_SUN, EFFECT_MORNING_SUN, 0, NORMAL, 100, 5, 0, STATUS + move SYNTHESIS, EFFECT_SYNTHESIS, 0, GRASS, 100, 5, 0, STATUS + move MOONLIGHT, EFFECT_MOONLIGHT, 0, FAIRY, 100, 5, 0, STATUS + move HIDDEN_POWER, EFFECT_HIDDEN_POWER, 1, NORMAL, 100, 15, 0, SPECIAL + move CROSS_CHOP, EFFECT_NORMAL_HIT, 100, FIGHTING, 80, 5, 0, PHYSICAL + move TWISTER, EFFECT_TWISTER, 40, DRAGON, 100, 20, 20, SPECIAL + move RAIN_DANCE, EFFECT_RAIN_DANCE, 0, WATER, 90, 5, 0, STATUS + move SUNNY_DAY, EFFECT_SUNNY_DAY, 0, FIRE, 90, 5, 0, STATUS + move CRUNCH, EFFECT_SP_DEF_DOWN_HIT, 80, DARK, 100, 15, 20, PHYSICAL + move MIRROR_COAT, EFFECT_MIRROR_COAT, 1, PSYCHIC_TYPE, 100, 20, 0, SPECIAL + move PSYCH_UP, EFFECT_PSYCH_UP, 0, NORMAL, 100, 10, 0, STATUS + move EXTREMESPEED, EFFECT_PRIORITY_HIT, 80, NORMAL, 100, 5, 0, PHYSICAL + move ANCIENTPOWER, EFFECT_ALL_UP_HIT, 60, ROCK, 100, 5, 10, SPECIAL + move SHADOW_BALL, EFFECT_SP_DEF_DOWN_HIT, 80, GHOST, 100, 15, 20, SPECIAL + move FUTURE_SIGHT, EFFECT_FUTURE_SIGHT, 80, PSYCHIC_TYPE, 90, 15, 0, SPECIAL + move ROCK_SMASH, EFFECT_DEFENSE_DOWN_HIT, 20, FIGHTING, 100, 15, 50, PHYSICAL + move WHIRLPOOL, EFFECT_TRAP_TARGET, 15, WATER, 70, 15, 0, SPECIAL + move BEAT_UP, EFFECT_BEAT_UP, 10, DARK, 100, 10, 0, PHYSICAL assert_table_length NUM_ATTACKS diff --git a/data/moves/names.asm b/data/moves/names.asm index 8b6103837e1..119e6178664 100644 --- a/data/moves/names.asm +++ b/data/moves/names.asm @@ -251,4 +251,4 @@ MoveNames:: li "ROCK SMASH" li "WHIRLPOOL" li "BEAT UP" - assert_list_length NUM_ATTACKS + assert_list_length NUM_ATTACKS \ No newline at end of file diff --git a/data/pokemon/base_stats/azumarill.asm b/data/pokemon/base_stats/azumarill.asm index 9b1070656df..5ec647e067b 100644 --- a/data/pokemon/base_stats/azumarill.asm +++ b/data/pokemon/base_stats/azumarill.asm @@ -3,7 +3,7 @@ db 100, 50, 80, 50, 50, 80 ; hp atk def spd sat sdf - db WATER, WATER ; type + db WATER, FAIRY ; type db 75 ; catch rate db 153 ; base exp db NO_ITEM, NO_ITEM ; items diff --git a/data/pokemon/base_stats/clefable.asm b/data/pokemon/base_stats/clefable.asm index 536d1afd2ac..003f7515a0d 100644 --- a/data/pokemon/base_stats/clefable.asm +++ b/data/pokemon/base_stats/clefable.asm @@ -3,7 +3,7 @@ db 95, 70, 73, 60, 85, 90 ; hp atk def spd sat sdf - db NORMAL, NORMAL ; type + db FAIRY, FAIRY ; type db 25 ; catch rate db 129 ; base exp db MYSTERYBERRY, MOON_STONE ; items diff --git a/data/pokemon/base_stats/clefairy.asm b/data/pokemon/base_stats/clefairy.asm index 6c653dca707..b97238bbca1 100644 --- a/data/pokemon/base_stats/clefairy.asm +++ b/data/pokemon/base_stats/clefairy.asm @@ -3,7 +3,7 @@ db 70, 45, 48, 35, 60, 65 ; hp atk def spd sat sdf - db NORMAL, NORMAL ; type + db FAIRY, FAIRY ; type db 150 ; catch rate db 68 ; base exp db MYSTERYBERRY, MOON_STONE ; items diff --git a/data/pokemon/base_stats/cleffa.asm b/data/pokemon/base_stats/cleffa.asm index 4c20b3cc4e5..5d4bd0ac1ad 100644 --- a/data/pokemon/base_stats/cleffa.asm +++ b/data/pokemon/base_stats/cleffa.asm @@ -3,7 +3,7 @@ db 50, 25, 28, 15, 45, 55 ; hp atk def spd sat sdf - db NORMAL, NORMAL ; type + db FAIRY, FAIRY ; type db 150 ; catch rate db 37 ; base exp db MYSTERYBERRY, MOON_STONE ; items diff --git a/data/pokemon/base_stats/granbull.asm b/data/pokemon/base_stats/granbull.asm index 1313d2c30c1..0a60486380d 100644 --- a/data/pokemon/base_stats/granbull.asm +++ b/data/pokemon/base_stats/granbull.asm @@ -3,7 +3,7 @@ db 90, 120, 75, 45, 60, 60 ; hp atk def spd sat sdf - db NORMAL, NORMAL ; type + db FAIRY, FAIRY ; type db 75 ; catch rate db 178 ; base exp db NO_ITEM, NO_ITEM ; items diff --git a/data/pokemon/base_stats/igglybuff.asm b/data/pokemon/base_stats/igglybuff.asm index 9b5e0b305de..6dfb91c3cb5 100644 --- a/data/pokemon/base_stats/igglybuff.asm +++ b/data/pokemon/base_stats/igglybuff.asm @@ -3,7 +3,7 @@ db 90, 30, 15, 15, 40, 20 ; hp atk def spd sat sdf - db NORMAL, NORMAL ; type + db NORMAL, FAIRY ; type db 170 ; catch rate db 39 ; base exp db NO_ITEM, NO_ITEM ; items diff --git a/data/pokemon/base_stats/jigglypuff.asm b/data/pokemon/base_stats/jigglypuff.asm index 2d96cb11a87..22275e5b845 100644 --- a/data/pokemon/base_stats/jigglypuff.asm +++ b/data/pokemon/base_stats/jigglypuff.asm @@ -3,7 +3,7 @@ db 115, 45, 20, 20, 45, 25 ; hp atk def spd sat sdf - db NORMAL, NORMAL ; type + db NORMAL, FAIRY ; type db 170 ; catch rate db 76 ; base exp db NO_ITEM, NO_ITEM ; items diff --git a/data/pokemon/base_stats/marill.asm b/data/pokemon/base_stats/marill.asm index f02d0841b98..d4d43c1650b 100644 --- a/data/pokemon/base_stats/marill.asm +++ b/data/pokemon/base_stats/marill.asm @@ -3,7 +3,7 @@ db 70, 20, 50, 40, 20, 50 ; hp atk def spd sat sdf - db WATER, WATER ; type + db WATER, FAIRY ; type db 190 ; catch rate db 58 ; base exp db NO_ITEM, NO_ITEM ; items diff --git a/data/pokemon/base_stats/mr__mime.asm b/data/pokemon/base_stats/mr__mime.asm index 9d8e9266e03..65ef08ead0a 100644 --- a/data/pokemon/base_stats/mr__mime.asm +++ b/data/pokemon/base_stats/mr__mime.asm @@ -3,7 +3,7 @@ db 40, 45, 65, 90, 100, 120 ; hp atk def spd sat sdf - db PSYCHIC_TYPE, PSYCHIC_TYPE ; type + db PSYCHIC_TYPE, FAIRY ; type db 45 ; catch rate db 136 ; base exp db NO_ITEM, MYSTERYBERRY ; items diff --git a/data/pokemon/base_stats/snubbull.asm b/data/pokemon/base_stats/snubbull.asm index cd4dc6db7bf..916dcd4819e 100644 --- a/data/pokemon/base_stats/snubbull.asm +++ b/data/pokemon/base_stats/snubbull.asm @@ -3,7 +3,7 @@ db 60, 80, 50, 30, 40, 40 ; hp atk def spd sat sdf - db NORMAL, NORMAL ; type + db FAIRY, FAIRY ; type db 190 ; catch rate db 63 ; base exp db NO_ITEM, NO_ITEM ; items diff --git a/data/pokemon/base_stats/togepi.asm b/data/pokemon/base_stats/togepi.asm index 56b57f62b2e..331a15e5561 100644 --- a/data/pokemon/base_stats/togepi.asm +++ b/data/pokemon/base_stats/togepi.asm @@ -3,7 +3,7 @@ db 35, 20, 65, 20, 40, 65 ; hp atk def spd sat sdf - db NORMAL, NORMAL ; type + db FAIRY, FAIRY ; type db 190 ; catch rate db 74 ; base exp db NO_ITEM, NO_ITEM ; items diff --git a/data/pokemon/base_stats/togetic.asm b/data/pokemon/base_stats/togetic.asm index 10897250b49..1fe6cd15e2c 100644 --- a/data/pokemon/base_stats/togetic.asm +++ b/data/pokemon/base_stats/togetic.asm @@ -3,7 +3,7 @@ db 55, 40, 85, 40, 80, 105 ; hp atk def spd sat sdf - db NORMAL, FLYING ; type + db FAIRY, FLYING ; type db 75 ; catch rate db 114 ; base exp db NO_ITEM, NO_ITEM ; items diff --git a/data/pokemon/base_stats/wigglytuff.asm b/data/pokemon/base_stats/wigglytuff.asm index ba1db8e0eb6..b6d7b9479cb 100644 --- a/data/pokemon/base_stats/wigglytuff.asm +++ b/data/pokemon/base_stats/wigglytuff.asm @@ -3,7 +3,7 @@ db 140, 70, 45, 45, 75, 50 ; hp atk def spd sat sdf - db NORMAL, NORMAL ; type + db NORMAL, FAIRY ; type db 50 ; catch rate db 109 ; base exp db NO_ITEM, NO_ITEM ; items diff --git a/data/pokemon/evos_attacks.asm b/data/pokemon/evos_attacks.asm index 54a0689d1ab..d700392b585 100644 --- a/data/pokemon/evos_attacks.asm +++ b/data/pokemon/evos_attacks.asm @@ -14,6 +14,8 @@ SECTION "Evolutions and Attacks", ROMX INCLUDE "data/pokemon/evos_attacks_pointers.asm" +EvosAttacks:: + BulbasaurEvosAttacks: db EVOLVE_LEVEL, 16, IVYSAUR db 0 ; no more evolutions @@ -3354,4 +3356,4 @@ CelebiEvosAttacks: db 30, FUTURE_SIGHT db 40, BATON_PASS db 50, PERISH_SONG - db 0 ; no more level-up moves + db 0 ; no more level-up moves \ No newline at end of file diff --git a/data/types/category_names.asm b/data/types/category_names.asm new file mode 100644 index 00000000000..ac674a1da18 --- /dev/null +++ b/data/types/category_names.asm @@ -0,0 +1,8 @@ +CategoryNames: + dw .Physical + dw .Special + dw .Status + +.Physical: db "PHYSICAL@" +.Special: db "SPECIAL@" +.Status: db "STATUS@" \ No newline at end of file diff --git a/data/types/names.asm b/data/types/names.asm index 2f83ba46492..ef5de68acd5 100644 --- a/data/types/names.asm +++ b/data/types/names.asm @@ -28,6 +28,7 @@ endr dw Ice dw Dragon dw Dark + dw Fairy assert_table_length TYPES_END Normal: db "NORMAL@" @@ -49,3 +50,4 @@ Ghost: db "GHOST@" Steel: db "STEEL@" Dragon: db "DRAGON@" Dark: db "DARK@" +Fairy: db "FAIRY@" diff --git a/data/types/search_strings.asm b/data/types/search_strings.asm index 1345c27cd1c..39e021bb83e 100644 --- a/data/types/search_strings.asm +++ b/data/types/search_strings.asm @@ -19,4 +19,5 @@ PokedexTypeSearchStrings: db " DRAGON @" db " DARK @" db " STEEL @" + db " FAIRY @" assert_table_length NUM_TYPES + 1 diff --git a/data/types/search_types.asm b/data/types/search_types.asm index dd9ea562881..6f0a45418c2 100644 --- a/data/types/search_types.asm +++ b/data/types/search_types.asm @@ -18,4 +18,5 @@ PokedexTypeSearchConversionTable: db DRAGON db DARK db STEEL + db FAIRY assert_table_length NUM_TYPES diff --git a/data/types/type_boost_items.asm b/data/types/type_boost_items.asm index 85a58db1f2e..e41abc9d0ca 100644 --- a/data/types/type_boost_items.asm +++ b/data/types/type_boost_items.asm @@ -16,4 +16,5 @@ TypeBoostItems: db HELD_DRAGON_BOOST, DRAGON ; DRAGON_SCALE db HELD_DARK_BOOST, DARK ; BLACKGLASSES db HELD_STEEL_BOOST, STEEL ; METAL_COAT + db HELD_FAIRY_BOOST, FAIRY ; POLKADOT_BOW db -1 diff --git a/data/types/type_matchups.asm b/data/types/type_matchups.asm index 81906b0f91a..788e30d594e 100644 --- a/data/types/type_matchups.asm +++ b/data/types/type_matchups.asm @@ -49,12 +49,14 @@ TypeMatchups: db FIGHTING, ROCK, SUPER_EFFECTIVE db FIGHTING, DARK, SUPER_EFFECTIVE db FIGHTING, STEEL, SUPER_EFFECTIVE + db FIGHTING, FAIRY, NOT_VERY_EFFECTIVE db POISON, GRASS, SUPER_EFFECTIVE db POISON, POISON, NOT_VERY_EFFECTIVE db POISON, GROUND, NOT_VERY_EFFECTIVE db POISON, ROCK, NOT_VERY_EFFECTIVE db POISON, GHOST, NOT_VERY_EFFECTIVE db POISON, STEEL, NO_EFFECT + db POISON, FAIRY, SUPER_EFFECTIVE db GROUND, FIRE, SUPER_EFFECTIVE db GROUND, ELECTRIC, SUPER_EFFECTIVE db GROUND, GRASS, NOT_VERY_EFFECTIVE @@ -83,6 +85,7 @@ TypeMatchups: db BUG, GHOST, NOT_VERY_EFFECTIVE db BUG, DARK, SUPER_EFFECTIVE db BUG, STEEL, NOT_VERY_EFFECTIVE + db BUG, FAIRY, NOT_VERY_EFFECTIVE db ROCK, FIRE, SUPER_EFFECTIVE db ROCK, ICE, SUPER_EFFECTIVE db ROCK, FIGHTING, NOT_VERY_EFFECTIVE @@ -97,6 +100,7 @@ TypeMatchups: db GHOST, GHOST, SUPER_EFFECTIVE db DRAGON, DRAGON, SUPER_EFFECTIVE db DRAGON, STEEL, NOT_VERY_EFFECTIVE + db DRAGON, FAIRY, NO_EFFECT db DARK, FIGHTING, NOT_VERY_EFFECTIVE db DARK, PSYCHIC_TYPE, SUPER_EFFECTIVE db DARK, GHOST, SUPER_EFFECTIVE @@ -108,6 +112,13 @@ TypeMatchups: db STEEL, ICE, SUPER_EFFECTIVE db STEEL, ROCK, SUPER_EFFECTIVE db STEEL, STEEL, NOT_VERY_EFFECTIVE + db STEEL, FAIRY, SUPER_EFFECTIVE + db FAIRY, FIRE, NOT_VERY_EFFECTIVE + db FAIRY, FIGHTING, SUPER_EFFECTIVE + db FAIRY, POISON, NOT_VERY_EFFECTIVE + db FAIRY, DRAGON, SUPER_EFFECTIVE + db FAIRY, DARK, SUPER_EFFECTIVE + db FAIRY, STEEL, NOT_VERY_EFFECTIVE db -2 ; end (with Foresight) diff --git a/engine/battle/ai/scoring.asm b/engine/battle/ai/scoring.asm index a003495e42e..5f0b3a73380 100644 --- a/engine/battle/ai/scoring.asm +++ b/engine/battle/ai/scoring.asm @@ -193,6 +193,7 @@ AI_Types: push de push bc ld a, [wEnemyMoveStruct + MOVE_TYPE] + and TYPE_MASK ld d, a ld hl, wEnemyMonMoves ld b, NUM_MOVES + 1 @@ -204,9 +205,9 @@ AI_Types: ld a, [hli] and a jr z, .movesdone - call AIGetEnemyMove ld a, [wEnemyMoveStruct + MOVE_TYPE] + and TYPE_MASK cp d jr z, .checkmove2 ld a, [wEnemyMoveStruct + MOVE_POWER] @@ -1115,15 +1116,31 @@ AI_Smart_SpDefenseUp2: jr nc, .discourage ; 80% chance to greatly encourage this move if -; enemy's Special Defense level is lower than +2, and the player is of a special type. +; enemy's Special Defense level is lower than +2, +; and the player's Pokémon is Special-oriented. cp BASE_STAT_LEVEL + 2 ret nc - ld a, [wBattleMonType1] - cp SPECIAL - jr nc, .encourage - ld a, [wBattleMonType2] - cp SPECIAL + push hl +; Get the pointer for the player's Pokémon's base Attack + ld a, [wBattleMonSpecies] + ld hl, BaseData + BASE_ATK + ld bc, BASE_DATA_SIZE + call AddNTimes +; Get the Pokémon's base Attack + ld a, BANK(BaseData) + call GetFarByte + ld d, a +; Get the pointer for the player's Pokémon's base Special Attack + ld bc, BASE_SAT - BASE_ATK + add hl, bc +; Get the Pokémon's base Special Attack + ld a, BANK(BaseData) + call GetFarByte + pop hl +; If its base Attack is greater than its base Special Attack, +; don't encourage this move. + cp d ret c .encourage @@ -1409,6 +1426,7 @@ AI_Smart_Encore: push hl ld a, [wEnemyMoveStruct + MOVE_TYPE] + and TYPE_MASK ld hl, wEnemyMonType1 predef CheckTypeMatchup @@ -1842,11 +1860,6 @@ AI_Smart_Curse: ld a, [wBattleMonType1] cp GHOST jr z, .greatly_encourage - cp SPECIAL - ret nc - ld a, [wBattleMonType2] - cp SPECIAL - ret nc call AI_80_20 ret c dec [hl] diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 55fde7d3a2f..8ebf14eaee2 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -5689,26 +5689,28 @@ MoveInfoBox: ld [wStringBuffer1], a call .PrintPP - hlcoord 1, 9 - ld de, .Type - call PlaceString - - hlcoord 7, 11 - ld [hl], "/" - - callfar UpdateMoveData + farcall UpdateMoveData ld a, [wPlayerMoveStruct + MOVE_ANIM] ld b, a - hlcoord 2, 10 - predef PrintMoveType + farcall GetMoveCategoryName + hlcoord 1, 9 + ld de, wStringBuffer1 + call PlaceString -.done - ret + ld h, b + ld l, c + ld [hl], "/" + + ld a, [wPlayerMoveStruct + MOVE_ANIM] + ld b, a + hlcoord 2, 10 + predef PrintMoveType + + .done + ret -.Disabled: - db "Disabled!@" -.Type: - db "TYPE/@" + .Disabled: + db "Disabled!@" .PrintPP: hlcoord 5, 11 diff --git a/engine/battle/effect_commands.asm b/engine/battle/effect_commands.asm index 82398f7c06f..a7274a16d54 100644 --- a/engine/battle/effect_commands.asm +++ b/engine/battle/effect_commands.asm @@ -41,6 +41,7 @@ DoMove: ; Get the user's move effect. ld a, BATTLE_VARS_MOVE_EFFECT call GetBattleVar + and TYPE_MASK ld c, a ld b, 0 ld hl, MoveEffectsPointers @@ -1243,6 +1244,7 @@ BattleCommand_Stab: .go ld a, BATTLE_VARS_MOVE_TYPE call GetBattleVarAddr + and TYPE_MASK ld [wCurType], a push hl @@ -1290,6 +1292,7 @@ BattleCommand_Stab: .SkipStab: ld a, BATTLE_VARS_MOVE_TYPE call GetBattleVar + and TYPE_MASK ld b, a ld hl, TypeMatchups @@ -1409,6 +1412,7 @@ CheckTypeMatchup: push bc ld a, BATTLE_VARS_MOVE_TYPE call GetBattleVar + and TYPE_MASK ld d, a ld b, [hl] inc hl @@ -3003,6 +3007,7 @@ BattleCommand_DamageCalc: ld b, a ld a, BATTLE_VARS_MOVE_TYPE call GetBattleVar + and TYPE_MASK cp b jr nz, .DoneItem @@ -5921,6 +5926,7 @@ CheckMoveTypeMatchesTarget: ld a, BATTLE_VARS_MOVE_TYPE call GetBattleVar + and TYPE_MASK cp NORMAL jr z, .normal diff --git a/engine/battle/hidden_power.asm b/engine/battle/hidden_power.asm index 2de95ce88cd..69c79f9e5e5 100644 --- a/engine/battle/hidden_power.asm +++ b/engine/battle/hidden_power.asm @@ -96,6 +96,7 @@ HiddenPowerDamage: ld a, BATTLE_VARS_MOVE_TYPE call GetBattleVarAddr pop af + or SPECIAL ld [hl], a ; Get the rest of the damage formula variables diff --git a/engine/battle/misc.asm b/engine/battle/misc.asm index 6bfc4eb24c4..5917ec8dd1c 100644 --- a/engine/battle/misc.asm +++ b/engine/battle/misc.asm @@ -221,4 +221,4 @@ DoBadgeTypeBoosts: pop de ret -INCLUDE "data/types/badge_type_boosts.asm" +INCLUDE "data/types/badge_type_boosts.asm" \ No newline at end of file diff --git a/engine/battle/move_effects/conversion.asm b/engine/battle/move_effects/conversion.asm index 2a7b0799a51..f5bf003bd04 100644 --- a/engine/battle/move_effects/conversion.asm +++ b/engine/battle/move_effects/conversion.asm @@ -23,6 +23,7 @@ BattleCommand_Conversion: dec a ld hl, Moves + MOVE_TYPE call GetMoveAttr + and TYPE_MASK ld [de], a inc de pop bc diff --git a/engine/battle/move_effects/conversion2.asm b/engine/battle/move_effects/conversion2.asm index 7bd6bfef678..3195cdf5cbb 100644 --- a/engine/battle/move_effects/conversion2.asm +++ b/engine/battle/move_effects/conversion2.asm @@ -16,6 +16,7 @@ BattleCommand_Conversion2: dec a ld hl, Moves + MOVE_TYPE call GetMoveAttr + and TYPE_MASK ld d, a pop hl cp CURSE_TYPE @@ -38,6 +39,7 @@ BattleCommand_Conversion2: push hl ld a, BATTLE_VARS_MOVE_TYPE call GetBattleVarAddr + and TYPE_MASK push af push hl ld a, d diff --git a/engine/battle/move_effects/thunder.asm b/engine/battle/move_effects/thunder.asm index 3e9b628dd78..4dd4518aeba 100644 --- a/engine/battle/move_effects/thunder.asm +++ b/engine/battle/move_effects/thunder.asm @@ -1,6 +1,7 @@ BattleCommand_ThunderAccuracy: ld a, BATTLE_VARS_MOVE_TYPE call GetBattleVarAddr + and TYPE_MASK inc hl ld a, [wBattleWeather] cp WEATHER_RAIN @@ -13,4 +14,4 @@ BattleCommand_ThunderAccuracy: .rain ; Redundant with CheckHit guranteeing hit ld [hl], 100 percent - ret + ret \ No newline at end of file diff --git a/engine/battle_anims/functions.asm b/engine/battle_anims/functions.asm index 9b157ed95a2..78169e3e8a8 100644 --- a/engine/battle_anims/functions.asm +++ b/engine/battle_anims/functions.asm @@ -430,33 +430,11 @@ BattleAnimFunc_PokeBallBlocked: call DeinitBattleAnimation ret -GetBallAnimPal: - ld hl, BallColors - ldh a, [rSVBK] - push af - ld a, BANK(wCurItem) - ldh [rSVBK], a - ld a, [wCurItem] - ld e, a - pop af - ldh [rSVBK], a -.IsInArray: - ld a, [hli] - cp -1 - jr z, .load - cp e - jr z, .load - inc hl - jr .IsInArray - -.load - ld a, [hl] - ld hl, BATTLEANIMSTRUCT_PALETTE - add hl, bc - ld [hl], a - ret - -INCLUDE "data/battle_anims/ball_colors.asm" + GetBallAnimPal: + ld hl, BATTLEANIMSTRUCT_PALETTE + add hl, bc + ld [hl], PAL_BATTLE_OB_RED + ret BattleAnimFunc_Ember: call BattleAnim_AnonJumptable diff --git a/engine/battle_anims/helpers.asm b/engine/battle_anims/helpers.asm index 90d9feab41b..2ee84687eb4 100644 --- a/engine/battle_anims/helpers.asm +++ b/engine/battle_anims/helpers.asm @@ -102,27 +102,76 @@ GetBattleAnimOAMPointer: add hl, de ret -LoadBattleAnimGFX: - push hl - ld l, a - ld h, 0 - add hl, hl - add hl, hl - ld de, AnimObjGFX - add hl, de - ld c, [hl] - inc hl - ld b, [hl] - inc hl + LoadBattleAnimGFX: + push hl + cp BATTLE_ANIM_GFX_POKE_BALL + call z, .LoadBallPalette + ld l, a + ld h, 0 + add hl, hl + add hl, hl + ld de, AnimObjGFX + add hl, de + ld c, [hl] + inc hl + ld b, [hl] + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + pop de + push bc + call DecompressRequest2bpp + pop bc + ret + +.LoadBallPalette: + ; save the current WRAM bank + ld a, [rSVBK] + push af + ; switch to the WRAM bank of wCurItem so we can read it + ld a, BANK(wCurItem) + ld [rSVBK], a + ; store the current item in b + ld a, [wCurItem] + ld b, a + ; seek for the BallColors entry matching the current item + ld hl, BallColors +.loop ld a, [hli] - ld h, [hl] - ld l, a - pop de - push bc - call DecompressRequest2bpp - pop bc + cp b ; did we find the current ball? + jr z, .done + cp -1 ; did we reach the end of the list? + jr z, .done +rept PAL_COLOR_SIZE * 2 + inc hl ; skip over the two RGB colors to the next entry +endr + jr .loop +.done + ; switch to the WRAM bank of wOBPals2 so we can write to it + ld a, BANK(wOBPals2) + ld [rSVBK], a + ; load the RGB colors into the middle two colors of PAL_BATTLE_OB_RED + ld de, wOBPals2 palette PAL_BATTLE_OB_RED color 1 +rept PAL_COLOR_SIZE * 2 - 1 + ld a, [hli] + ld [de], a + inc de +endr + ld a, [hl] + ld [de], a + ; apply the updated colors to the palette RAM + ld a, $1 + ldh [hCGBPalUpdate], a + ; restore the previous WRAM bank + pop af + ld [rSVBK], a + ; restore the graphics index to be loaded + ld a, BATTLE_ANIM_GFX_POKE_BALL ret +INCLUDE "data/battle_anims/ball_colors.asm" + INCLUDE "data/battle_anims/framesets.asm" INCLUDE "data/battle_anims/oam.asm" diff --git a/engine/events/move_relearner.asm b/engine/events/move_relearner.asm new file mode 100644 index 00000000000..2d095414855 --- /dev/null +++ b/engine/events/move_relearner.asm @@ -0,0 +1,447 @@ + const_def + const MOVERELEARNERTEXT_INTRO + const MOVERELEARNERTEXT_WHICHMON + const MOVERELEARNERTEXT_WHICHMOVE + const MOVERELEARNERTEXT_COMEAGAIN + const MOVERELEARNERTEXT_EGG + const MOVERELEARNERTEXT_NOTAPOKEMON + const MOVERELEARNERTEXT_NOTENOUGHMONEY + const MOVERELEARNERTEXT_NOMOVESTOLEARN + +MoveRelearner: + ld a, MOVERELEARNERTEXT_INTRO + call PrintMoveRelearnerText + farcall PlaceMoneyTopRight + call YesNoBox + jp c, .cancel + ld hl, .cost_to_relearn + ld de, hMoneyTemp + ld bc, 3 + call CopyBytes + ld bc, hMoneyTemp + ld de, wMoney + farcall CompareMoney + jp c, .not_enough_money + ld a, MOVERELEARNERTEXT_WHICHMON + call PrintMoveRelearnerText + call JoyWaitAorB + + ld b, $6 + farcall SelectMonFromParty + jr c, .cancel + + ld a, [wCurPartySpecies] + cp EGG + jr z, .egg + + call IsAPokemon + jr c, .no_mon + + call GetRelearnableMoves + jr z, .no_moves + + ld a, MOVERELEARNERTEXT_WHICHMOVE + call PrintMoveRelearnerText + call JoyWaitAorB + + call ChooseMoveToLearn + jr c, .skip_learn + ld a, [wMenuSelection] + ld [wTempSpecies], a + call GetMoveName + ld hl, wStringBuffer1 + ld de, wStringBuffer2 + ld bc, wStringBuffer2 - wStringBuffer1 + call CopyBytes + ld b, 0 + predef LearnMove + ld a, b + and a + jr z, .skip_learn + ld hl, .cost_to_relearn + ld de, hMoneyTemp + ld bc, 3 + call CopyBytes + ld bc, hMoneyTemp + ld de, wMoney + farcall TakeMoney + ld de, SFX_TRANSACTION + call PlaySFX + call WaitSFX +.skip_learn + call CloseSubmenu + call SpeechTextbox +.cancel + ld a, MOVERELEARNERTEXT_COMEAGAIN + call PrintMoveRelearnerText + ret +.egg + ld a, MOVERELEARNERTEXT_EGG + call PrintMoveRelearnerText + ret +.not_enough_money + ld a, MOVERELEARNERTEXT_NOTENOUGHMONEY + call PrintMoveRelearnerText + ret +.no_mon + ld a, MOVERELEARNERTEXT_NOTAPOKEMON + call PrintMoveRelearnerText + ret +.no_moves + ld a, MOVERELEARNERTEXT_NOMOVESTOLEARN + call PrintMoveRelearnerText + ret + +.cost_to_relearn + dt 1000 + +GetRelearnableMoves: + ; Get moves relearnable by CurPartyMon + ; Returns z if no moves can be relearned. + ld hl, wd002 + xor a + ld [hli], a + ld [hl], $ff + + ld a, MON_SPECIES + call GetPartyParamLocation + ld a, [hl] + ld [wCurPartySpecies], a + + push af + ld a, MON_LEVEL + call GetPartyParamLocation + ld a, [hl] + ld [wCurPartyLevel], a + + ld b, 0 + ld de, wd002 + 1 +; based on GetEggMove in engine/pokemon/breeding.asm + ld a, [wCurPartySpecies] + dec a + push bc + ld b, 0 + ld c, a + ld hl, EvosAttacksPointers + add hl, bc + add hl, bc + ld a, BANK(EvosAttacksPointers) + call GetFarWord +.skip_evos + ld a, BANK(EvosAttacks) + call GetFarByte + inc hl + and a + jr nz, .skip_evos + +.loop_moves + ld a, BANK(EvosAttacks) + call GetFarByte + inc hl + and a + jr z, .done + ld c, a + ld a, [wCurPartyLevel] + cp c + ld a, BANK(EvosAttacks) + call GetFarByte + inc hl + jr c, .loop_moves + + ld c, a + call CheckAlreadyInList + jr c, .loop_moves + call CheckPokemonAlreadyKnowsMove + jr c, .loop_moves + ld a, c + ld [de], a + inc de + ld a, $ff + ld [de], a + pop bc + inc b + push bc + jr .loop_moves +.done + pop bc + pop af + ld [wCurPartySpecies], a + ld a, b + ld [wd002], a + and a + ret + +CheckAlreadyInList: + push hl + ld hl, wd002 + 1 +.loop + ld a, [hli] + inc a + jr z, .nope + dec a + cp c + jr nz, .loop + pop hl + scf + ret +.nope + pop hl + and a + ret + +CheckPokemonAlreadyKnowsMove: + ; Check if move c is in the selected pokemon's movepool already. + ; Returns c if yes. + push hl + push bc + ld a, MON_MOVES + call GetPartyParamLocation + ld b, 4 +.loop + ld a, [hli] + cp c + jr z, .yes + dec b + jr nz, .loop + pop bc + pop hl + and a + ret +.yes + pop bc + pop hl + scf + ret + +ChooseMoveToLearn: + ; Open a full-screen scrolling menu + ; Number of items stored in wd002 + ; List of items stored in wd002 + 1 + ; Print move names, PP, details, and descriptions + ; Enable Up, Down, A, and B + ; Up scrolls up + ; Down scrolls down + ; A confirms selection + ; B backs out + call FadeToMenu + farcall BlankScreen + call UpdateSprites + ld hl, .MenuHeader + call CopyMenuHeader + xor a + ld [wMenuCursorPosition], a + ld [wMenuScrollPosition], a + call ScrollingMenu + call SpeechTextbox + ld a, [wMenuJoypad] + cp B_BUTTON + jr z, .carry + ld a, [wMenuSelection] + ld [wPutativeTMHMMove], a + and a + ret + +.carry + scf + ret + +.MenuHeader: + db MENU_BACKUP_TILES ; flags + menu_coords 1, 1, SCREEN_WIDTH - 1, 11 + dw .MenuData + db 1 ; default option + +.MenuData: + db SCROLLINGMENU_DISPLAY_ARROWS | SCROLLINGMENU_ENABLE_FUNCTION3 ; item format + db 5, 8 ; rows, columns + db SCROLLINGMENU_ITEMS_NORMAL ; horizontal spacing + dba wd002 + dba .PrintMoveName + dba .PrintDetails + dba .PrintMoveDesc + +.PrintMoveName + push de + ld a, [wMenuSelection] + ld [wTempSpecies], a + call GetMoveName + pop hl + call PlaceString + ret +.PrintDetails + ld hl, wStringBuffer1 + ld bc, wStringBuffer2 - wStringBuffer1 + ld a, " " + call ByteFill + ld a, [wMenuSelection] + inc a + ret z + dec a + push de + dec a + ld bc, MOVE_LENGTH + ld hl, Moves + MOVE_TYPE + call AddNTimes + ld a, BANK(Moves) + call GetFarByte + ld [wTempSpecies], a + ; get move type + ; 6 characters + ld c, a ;character width loaded into c + add a ;double a (two characters) + add c ;add c to a (three charaters) + add a ;double a (six characters) + add c ;add c to a (seven charaters, needed for blank space at the end) + ld c, a + ld b, 0 + ld hl, .Types + add hl, bc + ld d, h + ld e, l + ld hl, wStringBuffer1 + ld bc, 7 + call PlaceString + + ld hl, wStringBuffer1 + 7 + ld [hl], "P" + inc hl + ld [hl], "P" + inc hl + ld [hl], ":" + ld a, [wMenuSelection] + dec a + ld bc, MOVE_LENGTH + ld hl, Moves + MOVE_PP + call AddNTimes + ld a, BANK(Moves) + call GetFarByte + ld [wCurCoordEvent], a ;Changed from wEngineBuffer1 + ld hl, wStringBuffer1 + 10 + ld de, wCurCoordEvent ;Changed from wEngineBuffer1 + ld bc, $102 + call PrintNum + ld hl, wStringBuffer1 + 12 + ld [hl], "@" + + ld hl, SCREEN_WIDTH - 5 + pop de + add hl, de + push de + ld de, wStringBuffer1 + call PlaceString + pop de + ret + +.Types + db "NORMAL@" + db "FIGHT@@" + db "FLYING@" + db "POISON@" + db "GROUND@" + db "ROCK@@@" + db "BIRD@@@" + db "BUG@@@@" + db "GHOST@@" + db "STEEL@@" + db "UNUSED@" + db "UNUSED@" + db "UNUSED@" + db "UNUSED@" + db "UNUSED@" + db "UNUSED@" + db "UNUSED@" + db "UNUSED@" + db "UNUSED@" + db "CURSE@@" + db "FIRE@@@" + db "WATER@@" + db "GRASS@@" + db "ELECTR@" + db "PSYCH@@" + db "ICE@@@@" + db "DRAGON@" + db "DARK@@@" + db "FAIRY@@" + +.PrintMoveDesc + push de + call SpeechTextbox + ld a, [wMenuSelection] + inc a + pop de + ret z + dec a + ld [wCurSpecies], a + hlcoord 1, 14 + predef PrintMoveDescription + ret + +PrintMoveRelearnerText: + ld e, a + ld d, 0 + ld hl, .TextPointers + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call PrintText + ret +.TextPointers + dw .Intro + dw .WhichMon + dw .WhichMove + dw .ComeAgain + dw .Egg + dw .NotMon + dw .NotEnoughMoney + dw .NoMovesToLearn + +.Intro + text "Hello! I am the" + line "MOVE RELEARNER." + + para "I know all the" + line "moves that can be" + + para "learned for each" + line "#MON." + + para "For just ¥1000, I" + line "can share that" + + para "knowledge with" + line "you. How about it?" + done +.WhichMon + text "Excellent! Which" + line "#MON should" + cont "remember a move?" + done +.WhichMove + text "Which move should" + line "it remember?" + done +.ComeAgain + text "If you want your" + line "#MON to remem-" + cont "ber moves, come" + cont "back to me." + done +.Egg + text "An EGG can't learn" + line "moves." + done +.NotMon + text "What?! That's not" + line "a #MON!" + done +.NotEnoughMoney + text "You don't have" + line "enough money." + done +.NoMovesToLearn + text "This #MON can't" + line "learn any moves" + cont "from me." + done \ No newline at end of file diff --git a/engine/overworld/events.asm b/engine/overworld/events.asm index f593e8cc759..186716afa61 100644 --- a/engine/overworld/events.asm +++ b/engine/overworld/events.asm @@ -878,8 +878,6 @@ CountStep: jr c, .doscript ; Count the step for poison and total steps - ld hl, wPoisonStepCount - inc [hl] ld hl, wStepCount inc [hl] ; Every 256 steps, increase the happiness of all your Pokemon. @@ -902,17 +900,7 @@ CountStep: ; Increase the EXP of (both) DayCare Pokemon by 1. farcall DayCareStep - ; Every 4 steps, deal damage to all poisoned Pokemon. - ld hl, wPoisonStepCount - ld a, [hl] - cp 4 - jr c, .skip_poison - ld [hl], 0 - - farcall DoPoisonStep - jr c, .doscript -.skip_poison farcall DoBikeStep .done diff --git a/engine/pokemon/categories.asm b/engine/pokemon/categories.asm new file mode 100644 index 00000000000..8f0332d7a81 --- /dev/null +++ b/engine/pokemon/categories.asm @@ -0,0 +1,31 @@ +GetMoveCategoryName: +; Copy the category name of move b to wStringBuffer1. + + ld a, b + dec a + ld bc, MOVE_LENGTH + ld hl, Moves + MOVE_TYPE + call AddNTimes + ld a, BANK(Moves) + call GetFarByte + +; Mask out the type + and ~TYPE_MASK +; Shift the category bits into the range 0-2 + rlc a + rlc a + dec a + + ld hl, CategoryNames + ld e, a + ld d, 0 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld de, wStringBuffer1 + ld bc, MOVE_NAME_LENGTH + jp CopyBytes + +INCLUDE "data/types/category_names.asm" \ No newline at end of file diff --git a/engine/pokemon/mon_menu.asm b/engine/pokemon/mon_menu.asm index 2d13bd1ba5a..e7106a64b3d 100644 --- a/engine/pokemon/mon_menu.asm +++ b/engine/pokemon/mon_menu.asm @@ -908,7 +908,7 @@ MoveScreenLoop: .moving_move ld a, " " hlcoord 1, 11 - ld bc, 5 + ld bc, 8 call ByteFill hlcoord 1, 12 lb bc, 5, SCREEN_WIDTH - 2 @@ -1177,21 +1177,29 @@ PrepareToPlaceMoveData: jp ClearBox PlaceMoveData: - xor a - ldh [hBGMapMode], a - hlcoord 0, 10 - ld de, String_MoveType_Top - call PlaceString - hlcoord 0, 11 - ld de, String_MoveType_Bottom - call PlaceString - hlcoord 12, 12 - ld de, String_MoveAtk - call PlaceString + xor a + ldh [hBGMapMode], a + hlcoord 0, 10 + ld de, String_MoveType_Top + call PlaceString + hlcoord 0, 11 + ld de, String_MoveType_Bottom + call PlaceString + hlcoord 12, 12 + ld de, String_MoveAtk + call PlaceString ld a, [wCurSpecies] ld b, a - hlcoord 2, 12 - predef PrintMoveType + farcall GetMoveCategoryName + hlcoord 1, 11 + ld de, wStringBuffer1 + call PlaceString + ld a, [wCurSpecies] + ld b, a + hlcoord 1, 12 + ld [hl], "/" + inc hl + predef PrintMoveType ld a, [wCurSpecies] dec a ld hl, Moves + MOVE_POWER @@ -1219,10 +1227,10 @@ PlaceMoveData: ldh [hBGMapMode], a ret -String_MoveType_Top: - db "┌─────┐@" -String_MoveType_Bottom: - db "│TYPE/└@" + String_MoveType_Top: + db "┌────────┐@" + String_MoveType_Bottom: + db "│ └@" String_MoveAtk: db "ATK/@" String_MoveNoPower: diff --git a/engine/pokemon/move_mon.asm b/engine/pokemon/move_mon.asm index 4701705f305..1819ed3cb25 100644 --- a/engine/pokemon/move_mon.asm +++ b/engine/pokemon/move_mon.asm @@ -1819,4 +1819,4 @@ InitNickname: ld a, $4 ; ExitAllMenus is in bank 0; maybe it used to be in bank 4 ld hl, ExitAllMenus rst FarCall - ret + ret \ No newline at end of file diff --git a/engine/pokemon/types.asm b/engine/pokemon/types.asm index 4abaf672fb1..29fa1a43429 100644 --- a/engine/pokemon/types.asm +++ b/engine/pokemon/types.asm @@ -51,6 +51,7 @@ PrintMoveType: ld a, BANK(Moves) call FarCopyBytes ld a, [wStringBuffer1 + MOVE_TYPE] + and TYPE_MASK pop hl ld b, a diff --git a/macros/scripts/battle_commands.asm b/macros/scripts/battle_commands.asm index 180ff857554..eb246f5cc26 100644 --- a/macros/scripts/battle_commands.asm +++ b/macros/scripts/battle_commands.asm @@ -184,4 +184,4 @@ DEF NUM_EFFECT_COMMANDS EQU const_value - 1 const_def -1, -1 command endmove ; ff - command endturn ; fe + command endturn ; fe \ No newline at end of file diff --git a/main.asm b/main.asm index 418538a74f1..a2290ce024c 100644 --- a/main.asm +++ b/main.asm @@ -134,6 +134,7 @@ INCLUDE "engine/battle/trainer_huds.asm" INCLUDE "data/trainers/class_names.asm" INCLUDE "engine/battle/ai/redundant.asm" INCLUDE "engine/events/move_deleter.asm" +INCLUDE "engine/events/move_relearner.asm" INCLUDE "engine/link/mystery_gift_2.asm" INCLUDE "engine/items/tmhm.asm" INCLUDE "engine/pokemon/print_move_description.asm" @@ -238,6 +239,7 @@ INCLUDE "engine/events/basement_key.asm" INCLUDE "engine/events/sacred_ash.asm" INCLUDE "engine/pokemon/tempmon.asm" INCLUDE "engine/pokemon/types.asm" +INCLUDE "engine/pokemon/categories.asm" INCLUDE "engine/battle/getgen1trainerclassname.asm" INCLUDE "engine/pokemon/mon_stats.asm" INCLUDE "engine/link/init_list.asm" diff --git a/maps/BlackthornCity.asm b/maps/BlackthornCity.asm index 888ee19ecd6..0136b29fc5f 100644 --- a/maps/BlackthornCity.asm +++ b/maps/BlackthornCity.asm @@ -290,8 +290,9 @@ BlackthornGymSignText: done MoveDeletersHouseSignText: - text "MOVE DELETER'S" - line "HOUSE" + text "MOVE DELETER AND" + line "MOVE REMINDER'S" + cont "HOUSE" done DragonDensSignText: diff --git a/maps/MoveDeletersHouse.asm b/maps/MoveDeletersHouse.asm index 4786394f175..e73a6f38686 100644 --- a/maps/MoveDeletersHouse.asm +++ b/maps/MoveDeletersHouse.asm @@ -14,6 +14,15 @@ MoveDeleter: closetext end + +MoveRelearnerScript: + faceplayer + opentext + special MoveRelearner + waitbutton + closetext + end + MoveDeletersHouseBookshelf: jumpstd DifficultBookshelfScript @@ -32,3 +41,4 @@ MoveDeletersHouse_MapEvents: def_object_events object_event 2, 3, SPRITE_SUPER_NERD, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, MoveDeleter, -1 + object_event 5, 4, SPRITE_FISHER, SPRITEMOVEDATA_STANDING_DOWN, 2, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, MoveRelearnerScript, -1 diff --git a/tools/compare.sh b/tools/compare.sh old mode 100755 new mode 100644 diff --git a/tools/compare2.sh b/tools/compare2.sh old mode 100755 new mode 100644 diff --git a/tools/consts.py b/tools/consts.py old mode 100755 new mode 100644 diff --git a/tools/dupeframes.py b/tools/dupeframes.py old mode 100755 new mode 100644 diff --git a/tools/free_space.awk b/tools/free_space.awk old mode 100755 new mode 100644 diff --git a/tools/palfix.py b/tools/palfix.py old mode 100755 new mode 100644 diff --git a/tools/png.py b/tools/png.py old mode 100755 new mode 100644 diff --git a/tools/rgb555.py b/tools/rgb555.py old mode 100755 new mode 100644 diff --git a/tools/sym_comments.py b/tools/sym_comments.py old mode 100755 new mode 100644 diff --git a/tools/toc.py b/tools/toc.py old mode 100755 new mode 100644 diff --git a/tools/unique.py b/tools/unique.py old mode 100755 new mode 100644 diff --git a/tools/unnamed.py b/tools/unnamed.py old mode 100755 new mode 100644