diff options
author | libjet <libj3t@gmail.com> | 2020-05-19 21:33:58 +0100 |
---|---|---|
committer | libjet <libj3t@gmail.com> | 2020-05-19 21:33:58 +0100 |
commit | f53d5a4c9c49b9de8aab5026b2a74706b587377f (patch) | |
tree | 92140289f98188b6f9d4a70434ab4998089bc6b3 | |
parent | 519fe1eda94386ec39f90331c9b2fe58bbe46e96 (diff) |
Add evolve.asm
-rwxr-xr-x | data/moves/moves.asm | 265 | ||||
-rw-r--r-- | data/text/common_2.asm | 12 | ||||
-rwxr-xr-x | engine/pokemon/evolve.asm | 932 | ||||
-rw-r--r-- | main.asm | 15 |
4 files changed, 1206 insertions, 18 deletions
diff --git a/data/moves/moves.asm b/data/moves/moves.asm new file mode 100755 index 00000000..49c17d9b --- /dev/null +++ b/data/moves/moves.asm @@ -0,0 +1,265 @@ +; Characteristics of each move. + +move: MACRO + db \1 ; animation + db \2 ; effect + db \3 ; power + db \4 ; type + db \5 percent ; accuracy + db \6 ; pp + db \7 percent ; effect chance +ENDM + +Moves: +; entries correspond to constants/move_constants.asm + 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 diff --git a/data/text/common_2.asm b/data/text/common_2.asm index 931605fd..d165559d 100644 --- a/data/text/common_2.asm +++ b/data/text/common_2.asm @@ -1366,13 +1366,15 @@ _PocketIsFullText:: line "is full…" prompt -UnknownText_0x1c4b92:: +_CongratulationsYourPokemonText:: text "Congratulations!" line "Your @" text_ram wStringBuffer2 - db "@@" + text_end + + text_end ; unused -UnknownText_0x1c4baf:: +_EvolvedIntoText:: text_start para "evolved into" @@ -1381,14 +1383,14 @@ UnknownText_0x1c4baf:: text "!" done -UnknownText_0x1c4bc5:: +_StoppedEvolvingText:: text "Huh? @" text_ram wStringBuffer2 text_start line "stopped evolving!" prompt -UnknownText_0x1c4be3:: +_EvolvingText:: text "What? @" text_ram wStringBuffer2 text_start diff --git a/engine/pokemon/evolve.asm b/engine/pokemon/evolve.asm new file mode 100755 index 00000000..dbc1d899 --- /dev/null +++ b/engine/pokemon/evolve.asm @@ -0,0 +1,932 @@ +EvolvePokemon: + ld hl, wEvolvableFlags + xor a + ld [hl], a + ld a, [wCurPartyMon] + ld c, a + ld b, SET_FLAG + call EvoFlagAction +EvolveAfterBattle: + xor a + ld [wMonTriedToEvolve], a + dec a + ld [wCurPartyMon], a + push hl + push bc + push de + ld hl, wPartyCount + + push hl + +EvolveAfterBattle_MasterLoop: + ld hl, wCurPartyMon + inc [hl] + + pop hl + + inc hl + ld a, [hl] + cp $ff + jp z, .ReturnToMap + + ld [wEvolutionOldSpecies], a + + push hl + ld a, [wCurPartyMon] + ld c, a + ld hl, wEvolvableFlags + ld b, CHECK_FLAG + call EvoFlagAction + ld a, c + and a + jp z, EvolveAfterBattle_MasterLoop + + ld a, [wEvolutionOldSpecies] + dec a + ld b, 0 + ld c, a + ld hl, EvosAttacksPointers + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + + push hl + xor a + ld [wMonType], a + predef CopyMonToTempMon + pop hl + +.loop + ld a, [hli] + and a + jr z, EvolveAfterBattle_MasterLoop + + ld b, a + + cp EVOLVE_TRADE + jr z, .trade + + ld a, [wLinkMode] + and a + jp nz, .dont_evolve_2 + + ld a, b + cp EVOLVE_ITEM + jp z, .item + + ld a, [wForceEvolution] + and a + jp nz, .dont_evolve_2 + + ld a, b + cp EVOLVE_LEVEL + jp z, .level + + cp EVOLVE_HAPPINESS + jr z, .happiness + +; EVOLVE_STAT + ld a, [wTempMonLevel] + cp [hl] + jp c, .dont_evolve_1 + + call IsMonHoldingEverstone + jp z, .dont_evolve_1 + + push hl + ld de, wTempMonAttack + ld hl, wTempMonDefense + ld c, 2 + call CompareBytes + ld a, ATK_EQ_DEF + jr z, .got_tyrogue_evo + ld a, ATK_LT_DEF + jr c, .got_tyrogue_evo + ld a, ATK_GT_DEF +.got_tyrogue_evo + pop hl + + inc hl + cp [hl] + jp nz, .dont_evolve_2 + + inc hl + jr .proceed + +.happiness + ld a, [wTempMonHappiness] + cp HAPPINESS_TO_EVOLVE + jp c, .dont_evolve_2 + + call IsMonHoldingEverstone + jp z, .dont_evolve_2 + + ld a, [hli] + cp TR_ANYTIME + jr z, .proceed + cp TR_MORNDAY + jr z, .happiness_daylight + +; TR_NITE + ld a, [wTimeOfDay] + cp NITE_F + jp nz, .dont_evolve_3 + jr .proceed + +.happiness_daylight + ld a, [wTimeOfDay] + cp NITE_F + jp z, .dont_evolve_3 + jr .proceed + +.trade + ld a, [wLinkMode] + and a + jp z, .dont_evolve_2 + + call IsMonHoldingEverstone + jp z, .dont_evolve_2 + + ld a, [hli] + ld b, a + inc a + jr z, .proceed + + ld a, [wLinkMode] + cp LINK_TIMECAPSULE + jp z, .dont_evolve_3 + + ld a, [wTempMonItem] + cp b + jp nz, .dont_evolve_3 + + xor a + ld [wTempMonItem], a + jr .proceed + +.item + ld a, [hli] + ld b, a + ld a, [wCurItem] + cp b + jp nz, .dont_evolve_3 + + ld a, [wForceEvolution] + and a + jp z, .dont_evolve_3 + ld a, [wLinkMode] + and a + jp nz, .dont_evolve_3 + jr .proceed + +.level + ld a, [hli] + ld b, a + ld a, [wTempMonLevel] + cp b + jp c, .dont_evolve_3 + call IsMonHoldingEverstone + jp z, .dont_evolve_3 + +.proceed + ld a, [wTempMonLevel] + ld [wCurPartyLevel], a + ld a, $1 + ld [wMonTriedToEvolve], a + + push hl + + ld a, [hl] + ld [wEvolutionNewSpecies], a + ld a, [wCurPartyMon] + ld hl, wPartyMonNicknames + call GetNick + call CopyName1 + ld hl, EvolvingText + call PrintText + + ld c, 50 + call DelayFrames + + xor a + ldh [hBGMapMode], a + hlcoord 0, 0 + lb bc, 12, 20 + call ClearBox + + ld a, $1 + ldh [hBGMapMode], a + call ClearSprites + call EvolutionAnimation + + push af + call ClearSprites + pop af + jp c, CancelEvolution + + ld hl, CongratulationsYourPokemonText + call PrintText + + pop hl + + ld a, [hl] + ld [wCurSpecies], a + ld [wTempMonSpecies], a + ld [wEvolutionNewSpecies], a + ld [wNamedObjectIndexBuffer], a + call GetPokemonName + + push hl + ld hl, EvolvedIntoText + call PrintTextboxText + push de + + ld de, MUSIC_NONE + call PlayMusic + ld de, SFX_CAUGHT_MON + call PlaySFX + call WaitSFX + + pop de + ld c, 40 + call DelayFrames + + call ClearTilemap + call UpdateSpeciesNameIfNotNicknamed + call GetBaseData + + ld hl, wTempMonExp + 2 + ld de, wTempMonMaxHP + ld b, TRUE + predef CalcMonStats + + ld a, [wCurPartyMon] + ld hl, wPartyMons + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld e, l + ld d, h + ld bc, MON_MAXHP + add hl, bc + ld a, [hli] + ld b, a + ld c, [hl] + ld hl, wTempMonMaxHP + 1 + ld a, [hld] + sub c + ld c, a + ld a, [hl] + sbc b + ld b, a + ld hl, wTempMonHP + 1 + ld a, [hl] + add c + ld [hld], a + ld a, [hl] + adc b + ld [hl], a + + ld hl, wTempMonSpecies + ld bc, PARTYMON_STRUCT_LENGTH + call CopyBytes + + ld a, [wCurSpecies] + ld [wTempSpecies], a + xor a + ld [wMonType], a + call LearnLevelMoves + ld a, [wTempSpecies] + dec a + call SetSeenAndCaughtMon + + ld a, [wTempSpecies] + cp UNOWN + jr nz, .skip_unown + + ld hl, wTempMonDVs + predef GetUnownLetter + callfar UpdateUnownDex + +.skip_unown + pop de + pop hl + ld a, [wTempMonSpecies] + ld [hl], a + push hl + ld l, e + ld h, d + jp EvolveAfterBattle_MasterLoop + +.dont_evolve_1 + inc hl +.dont_evolve_2 + inc hl +.dont_evolve_3 + inc hl + jp .loop + +; unused + pop hl +.ReturnToMap: + pop de + pop bc + pop hl + ld a, [wLinkMode] + and a + ret nz + ld a, [wBattleMode] + and a + ret nz + ld a, [wMonTriedToEvolve] + and a + call nz, RestartMapMusic + ret + +UpdateSpeciesNameIfNotNicknamed: + ld a, [wCurSpecies] + push af + ld a, [wBaseDexNo] + ld [wNamedObjectIndexBuffer], a + call GetPokemonName + pop af + ld [wCurSpecies], a + ld hl, wStringBuffer1 + ld de, wStringBuffer2 +.loop + ld a, [de] + inc de + cp [hl] + inc hl + ret nz + cp "@" + jr nz, .loop + + ld a, [wCurPartyMon] + ld bc, MON_NAME_LENGTH + ld hl, wPartyMonNicknames + call AddNTimes + push hl + ld a, [wCurSpecies] + ld [wNamedObjectIndexBuffer], a + call GetPokemonName + ld hl, wStringBuffer1 + pop de + ld bc, MON_NAME_LENGTH + jp CopyBytes + +CancelEvolution: + ld hl, StoppedEvolvingText + call PrintText + call ClearTilemap + pop hl + jp EvolveAfterBattle_MasterLoop + +IsMonHoldingEverstone: + push hl + ld a, [wCurPartyMon] + ld hl, wPartyMon1Item + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld a, [hl] + cp EVERSTONE + pop hl + ret + +CongratulationsYourPokemonText: + text_far _CongratulationsYourPokemonText + text_end + +EvolvedIntoText: + text_far _EvolvedIntoText + text_end + +StoppedEvolvingText: + text_far _StoppedEvolvingText + text_end + +EvolvingText: + text_far _EvolvingText + text_end + +LearnLevelMoves: + ld a, [wTempSpecies] + ld [wCurPartySpecies], a + dec a + ld b, 0 + ld c, a + ld hl, EvosAttacksPointers + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + +.skip_evos + ld a, [hli] + and a + jr nz, .skip_evos + +.find_move + ld a, [hli] + and a + jr z, .done + + ld b, a + ld a, [wCurPartyLevel] + cp b + ld a, [hli] + jr nz, .find_move + + push hl + ld d, a + ld hl, wPartyMon1Moves + ld a, [wCurPartyMon] + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + + ld b, NUM_MOVES +.check_move + ld a, [hli] + cp d + jr z, .has_move + dec b + jr nz, .check_move + jr .learn +.has_move + + pop hl + jr .find_move + +.learn + ld a, d + ld [wPutativeTMHMMove], a + ld [wNamedObjectIndexBuffer], a + call GetMoveName + call CopyName1 + predef LearnMove + pop hl + jr .find_move + +.done + ld a, [wCurPartySpecies] + ld [wTempSpecies], a + ret + +FillMoves: +; Fill in moves at de for wCurPartySpecies at wCurPartyLevel + + push hl + push de + push bc + ld hl, EvosAttacksPointers + ld b, 0 + ld a, [wCurPartySpecies] + dec a + add a + rl b + ld c, a + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a +.GoToAttacks: + ld a, [hli] + and a + jr nz, .GoToAttacks + jr .GetLevel + +.NextMove: + pop de +.GetMove: + inc hl +.GetLevel: + ld a, [hli] + and a + jp z, .done + ld b, a + ld a, [wCurPartyLevel] + cp b + jp c, .done + ld a, [wEvolutionOldSpecies] + and a + jr z, .CheckMove + ld a, [wceed] + cp b + jr nc, .GetMove + +.CheckMove: + push de + ld c, NUM_MOVES +.CheckRepeat: + ld a, [de] + inc de + cp [hl] + jr z, .NextMove + dec c + jr nz, .CheckRepeat + pop de + push de + ld c, NUM_MOVES +.CheckSlot: + ld a, [de] + and a + jr z, .LearnMove + inc de + dec c + jr nz, .CheckSlot + pop de + push de + push hl + ld h, d + ld l, e + call ShiftMoves + ld a, [wEvolutionOldSpecies] + and a + jr z, .ShiftedMove + push de + ld bc, wPartyMon1PP - (wPartyMon1Moves + NUM_MOVES - 1) + add hl, bc + ld d, h + ld e, l + call ShiftMoves + pop de + +.ShiftedMove: + pop hl + +.LearnMove: + ld a, [hl] + ld [de], a + ld a, [wEvolutionOldSpecies] + and a + jr z, .NextMove + push hl + ld a, [hl] + ld hl, MON_PP - MON_MOVES + add hl, de + push hl + dec a + ld hl, Moves + MOVE_PP + ld bc, MOVE_LENGTH + call AddNTimes + ld a, BANK(Moves) + call GetFarByte + pop hl + ld [hl], a + pop hl + jr .NextMove + +.done + pop bc + pop de + pop hl + ret + +ShiftMoves: + ld c, NUM_MOVES - 1 +.loop + inc de + ld a, [de] + ld [hli], a + dec c + jr nz, .loop + ret + +EvoFlagAction: + push de + ld d, $0 + predef SmallFarFlagAction + pop de + ret + +EvolutionAnimation: + push hl + push de + push bc + ld a, [wCurSpecies] + push af + ldh a, [rOBP0] + push af + ld a, %11100100 + ldh [rOBP0], a + + ld de, MUSIC_NONE + call PlayMusic + + callfar ClearSpriteAnims + + ld de, .GFX + ld hl, vTiles0 + lb bc, BANK(.GFX), 8 + call Request2bpp + xor a + ld [wLowHealthAlarm], a + + ld a, 1 + ldh [hBGMapMode], a + + call WaitBGMap + xor a + ldh [hBGMapMode], a + + ld a, [wEvolutionOldSpecies] + ld [wPlayerHPPal], a + ld c, 0 + call .GetSGBLayout + + ld a, [wEvolutionNewSpecies] + ld [wCurPartySpecies], a + ld [wCurSpecies], a + call .PlaceFrontpic + + ld de, vTiles2 + ld hl, vTiles2 tile $31 + ld bc, 7 * 7 + call Request2bpp + + ld a, [wEvolutionOldSpecies] + ld [wCurPartySpecies], a + ld [wCurSpecies], a + call .PlaceFrontpic + + ld a, 1 + ldh [hBGMapMode], a + + ld a, [wEvolutionOldSpecies] + call PlayMonCry + + ld de, MUSIC_EVOLUTION + call PlayMusic + + ld c, 80 + call DelayFrames + + ld c, 1 + call .GetSGBLayout + +.AnimationSequence: + call ClearJoypad + lb bc, 1, 16 ; flash b times, wait c frames in between +.loop + push bc + call .WaitFrames_CheckPressedB + jr c, .cancel + call .Flash + pop bc + inc b + dec c + dec c + jr nz, .loop + + xor a + ld [wEvolutionCanceled], a + + ld a, 49 + ld [wEvolutionPicOffset], a + call .ReplaceFrontpic + + ld a, [wEvolutionNewSpecies] +.return: + ld [wPlayerHPPal], a + + ld c, 0 + call .GetSGBLayout + call .PlayEvolvedSFX + + callfar ClearSpriteAnims + + ld a, [wPlayerHPPal] + call PlayMonCry + + pop af + ldh [rOBP0], a + pop af + ld [wCurSpecies], a + pop bc + pop de + pop hl + + ld a, [wEvolutionCanceled] + and a + ret z + + scf + ret + +.cancel: + pop bc + ld a, 1 + ld [wEvolutionCanceled], a + + ld a, [wEvolutionOldSpecies] + jr .return + +.GetSGBLayout: + ld b, SCGB_EVOLUTION + jp GetSGBLayout + +.PlaceFrontpic: + call GetBaseData + hlcoord 7, 2 + jp PrepMonFrontpic + +.Flash: + ld a, 7 * 7 ; previous stage + ld [wEvolutionPicOffset], a + call .ReplaceFrontpic + ld a, -7 * 7 ; new stage + ld [wEvolutionPicOffset], a + call .ReplaceFrontpic + dec b + jr nz, .Flash + ret + +.ReplaceFrontpic: + push bc + xor a + ldh [hBGMapMode], a + hlcoord 7, 2 + lb bc, 7, 7 + ld de, SCREEN_WIDTH - 7 +.loop1 + push bc +.loop2 + ld a, [wEvolutionPicOffset] + add [hl] + ld [hli], a + dec c + jr nz, .loop2 + pop bc + add hl, de + dec b + jr nz, .loop1 + ld a, $1 + ldh [hBGMapMode], a + call WaitBGMap + pop bc + ret + +.WaitFrames_CheckPressedB: + call DelayFrame + push bc + call JoyTextDelay + ldh a, [hJoyDown] + pop bc + and B_BUTTON + jr nz, .pressed_b +.loop3 + dec c + jr nz, .WaitFrames_CheckPressedB + and a + ret + +.pressed_b + ld a, [wForceEvolution] + and a + jr nz, .loop3 + scf + ret + +.PlayEvolvedSFX: + ld a, [wEvolutionCanceled] + and a + ret nz + ld de, SFX_EVOLVED + call PlaySFX + ld hl, wJumptableIndex + ld a, [hl] + push af + ld [hl], $0 +.loop4 + call .balls_of_light + jr nc, .done + call .AnimateBallsOfLight + jr .loop4 + +.done + ld c, 32 +.loop5 + call .AnimateBallsOfLight + dec c + jr nz, .loop5 + pop af + ld [wJumptableIndex], a + ret + +.balls_of_light + ld hl, wJumptableIndex + ld a, [hl] + cp 32 + ret nc + ld d, a + inc [hl] + and $1 + jr nz, .done_balls + ld e, $0 + call .GenerateBallOfLight + ld e, $10 + call .GenerateBallOfLight + +.done_balls + scf + ret + +.GenerateBallOfLight: + push de + depixel 9, 11 + ld a, $25 + call InitSpriteAnimStruct + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld a, [wJumptableIndex] + and %1110 + sla a + pop de + add e + ld [hl], a + ld hl, SPRITEANIMSTRUCT_TILE_ID + add hl, bc + ld [hl], $0 + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], $10 + ret + +.AnimateBallsOfLight: + push bc + callfar PlaySpriteAnimations + ; a = (([hVBlankCounter] + 4) / 2) % NUM_PALETTES + ldh a, [hVBlankCounter] + and %1110 + srl a + inc a + inc a + and $7 + ld b, a + ld hl, wVirtualOAMSprite00Attributes + ld c, NUM_SPRITE_OAM_STRUCTS +.loop6 + ld a, [hl] + or b + ld [hli], a ; attributes +rept SPRITEOAMSTRUCT_LENGTH - 1 + inc hl +endr + dec c + jr nz, .loop6 + pop bc + call DelayFrame + ret + +.GFX: + dr $4273d, $4278d + +GetPreEvolution: +; Find the first mon to evolve into wCurPartySpecies. + +; Return carry and the new species in wCurPartySpecies +; if a pre-evolution is found. + + ld c, 0 +.loop ; For each Pokemon... + ld hl, EvosAttacksPointers + ld b, 0 + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a +.loop2 ; For each evolution... + ld a, [hli] + and a + jr z, .no_evolve ; If we jump, this Pokemon does not evolve into wCurPartySpecies. + cp EVOLVE_STAT ; This evolution type has the extra parameter of stat comparison. + jr nz, .not_tyrogue + inc hl + +.not_tyrogue + inc hl + ld a, [wCurPartySpecies] + cp [hl] + jr z, .found_preevo + inc hl + ld a, [hl] + and a + jr nz, .loop2 + +.no_evolve + inc c + ld a, c + cp NUM_POKEMON + jr c, .loop + and a + ret + +.found_preevo + inc c + ld a, c + ld [wCurPartySpecies], a + scf + ret @@ -340,19 +340,8 @@ INCLUDE "data/battle/effect_command_pointers.asm" SECTION "bank10", ROMX INCLUDE "engine/pokedex/pokedex.asm" - -Moves:: - dr $41afe, $421db -EvolvePokemon:: - dr $421db, $421e9 -EvolveAfterBattle:: - dr $421e9, $42483 -LearnLevelMoves:: - dr $42483, $424dd -FillMoves:: - dr $424dd, $4278d -GetPreEvolution:: - dr $4278d, $427bd +INCLUDE "data/moves/moves.asm" +INCLUDE "engine/pokemon/evolve.asm" SECTION "bank11", ROMX |