-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Evolution Moves
Greetings. With this mod, you will be able to assign moves to Pokemon to be learnt immediately following evolution. This tutorial covers the system, and a few examples of how to use it.
Top Tip: Combine this mod with Allow multiple moves to be learned at the same level to automatically be able to assign multiple evolution moves to the same species.
Define a constant in constants/pokemon_data_constants.asm
; Evolution types
const_def 1
const EVOLVE_LEVEL ; 1
const EVOLVE_ITEM ; 2
const EVOLVE_TRADE ; 3
+; Evolution Moves
+DEF EVOLUTION_MOVE EQU 254
; wMonHGrowthRate values
; GrowthRateTable indexes (see data/growth_rates.asm)
const_def
const GROWTH_MEDIUM_FAST
const GROWTH_SLIGHTLY_FASTModify engine/pokemon/evos_moves.asm
...
.doEvolution
...
ld [wPokedexNum], a
xor a
ld [wMonDataLocation], a
call LearnMoveFromLevelUp
+ call LearnEvolutionMoves
pop hl
predef SetPartyMonTypes
ld a, [wIsInBattle]
...
Evolution_ReloadTilesetTilePatterns:
ld a, [wLinkState]
cp LINK_STATE_TRADING
ret z
jp ReloadTilesetTilePatterns
+LearnEvolutionMoves:
+ ld a, [wCurEnemyLevel]
+ push af
+ ld a, EVOLUTION_MOVE ; 254
+ ld [wCurEnemyLevel], a
+ call LearnMoveFromLevelUp
+ pop af
+ ld [wCurEnemyLevel], a
+ ret
LearnMoveFromLevelUp:
ld hl, EvosMovesPointerTable
ld a, [wPokedexNum] ; species
ld [wCurPartySpecies], a
This function works by reusing the existing LearnMoveFromLevelUp function, but adjusting the input parameters. Before calling the script, wCurEnemyLevel (which contains the level of the Pokemon) is backed up and temporarily replaced with 254. The function is called, causing the Pokemon to learn moves that it would learn at level 254. After it is done, the backed up level is returned to wCurEnemyLevel, allowing the normal LearnMoveFromLevelUp to run just after as usual.
This does mean that if your game allows Pokemon to reach level 254, this implementation will not be suitable.
Evolution moves will be assigned in data/pokemon/evos_moves.asm
First, let's give Metapod the move Harden:
...
MetapodEvosMoves:
; Evolutions
db EVOLVE_LEVEL, 10, BUTTERFREE
db 0
; Learnset
+ db EVOLUTION_MOVE, HARDEN
db 0
...Be careful to keep the db 0 after your learnset data, as this indicates the end of the data and is used by the game.
Evolution moves must come after any normal level-up moves. To illustrate this point, let's give Petal Dance to Venusaur:
VenusaurEvosMoves:
; Evolutions
db 0
; Learnset
db 7, LEECH_SEED
db 13, VINE_WHIP
db 22, POISONPOWDER
db 30, RAZOR_LEAF
db 43, GROWTH
db 55, SLEEP_POWDER
db 65, SOLARBEAM
+ db EVOLUTION_MOVE, PETAL_DANCE
db 0Some Pokemon learn multiple moves upon evolution. Once such example is Lanturn, which learns 3 moves. We can easily achieve this by implementing the additional modification mentioned in the Introduction. For this example, suppose we have already added Lanturn to our game, using its Generation II moves. We can then allocate the evolution moves as follows:
LanturnEvosMoves:
; Evolutions
db 0
; Learnset
db 5, SUPERSONIC
db 13, FLAIL
db 17, WATER_GUN
db 25, SPARK
db 33, CONFUSE_RAY
db 45, TAKE_DOWN
db 53, HYDRO_PUMP
+ db EVOLUTION_MOVE, STOCKPILE
+ db EVOLUTION_MOVE, SWALLOW
+ db EVOLUTION_MOVE, SPIT_UP
db 0Thank you for reading this tutorial, I have been your host, Mr. Poryman of Porygondolier, and I'd like to wish you a wonderful day.