• Do not use Discord to host any images you post, these links expire quickly! You can learn how to add images to your posts here.
  • Eevee Expo's webhost has been having technical issues since Nov. 20th and you might be unable to connect to our site. Staff are also facing issues connecting, so please send a DM to Cat on-site or through Discord directly for faster service!
Ultimate Move Tutor

Resource Ultimate Move Tutor 1.0

grogro

Cooltrainer
Member
Joined
Mar 6, 2021
Posts
120
grogro submitted a new resource:

Ultimate Move Tutor - Add eggmoves and tutor moves to the move relearner

This scripts is using the move relearner as a base, to add eggmoves and every move learned by a pokémon by TM or by Tutor (thanks v19!).

Installation

Unzip the file in the plugin folder.

How to use the script

By default variable 34 is used to control the type of moves you can learn. You can change the variable in the script or even the condition if you want (comments are written in the script to help you).
0 is the good old move relearner.
1 adds eggmoves to...

Read more about this resource...
 

NocTurn

Hoothoot enthusiast
Member
Hey! I love the idea of this resource. I was curious, though. Could the methods in this script be used to create an independent move tutor for egg moves and/or TMs, independently of the normal move tutors?
 

grogro

Cooltrainer
Member
Joined
Mar 6, 2021
Posts
120
yes you can! There are comments in the script, just modify the conditions. like $game_variables[34]==1 instead of >= etc...
 

systeromen_

Novice
Member
Joined
Jan 26, 2021
Posts
46
Would there be a way to define a list of moves for a POKeMON to learn independent from their tutor list, similar to the Battle Tutor from Crystal Clear?
 

grogro

Cooltrainer
Member
Joined
Mar 6, 2021
Posts
120
You could add a check before move.sort in both parts of the plugin. Use the same synthax as the code above if you want to add a entire list of moves. Something like this:

if pkmn.species== something
move.push(themoveyouwant) if !pkmn.hasMove?(themoveyouwant) && !moves.include?(themoveyouwant)
end

You can add a switch check before this line if you want it to appear only if a certain condition is met.
 

SuperSpyroDragon64

Cooltrainer
Member
Joined
Apr 20, 2022
Posts
165
Are there any plans to add a "STABmons" mode, where a Pokemon can learn any move via tutor but only if its type matches the type of the move it wants to learn?
 

grogro

Cooltrainer
Member
Joined
Mar 6, 2021
Posts
120
if one day I come back to my project, I will add it. You could try it yourself by modifying the hackmon part to check the type of every move and, if they are of the same type as your pokemon, add them to the list.
 

sorryjzargo

Novice
Member
Joined
Jan 17, 2020
Posts
44
Am I reading this right that there's an option to add egg moves to the move relearner and an option to add TMs and tutor moves to the move relearner, but not both at the same time?
 

grogro

Cooltrainer
Member
Joined
Mar 6, 2021
Posts
120
If you set the control variable to 2, it's both by default but you can change it in the script, there are comments to do so.
 

Cross Agento

Novice
Member
Joined
Jun 27, 2021
Posts
32
I'm having an issue where, for example, Alolan Ninetales will be able to have tutor moves from Kantonian Ninetales. Maybe because I'm using an older version?
 

grogro

Cooltrainer
Member
Joined
Mar 6, 2021
Posts
120
I just checked and no my alolan ninetales cannot learn things like flamethrower or bodyslam, so it seems fine and even an older version of the script should work correctly. Are you sure it's not a moved shared by both forms? If not, tell me which move is the problem to see if I can replicate the problem.
I guess that you took everything from the gen 8 pack but if not, check pokemon.txt and pokemonform.txt files to see if movelists are defined correctly.
If nothing weird appears, check if your control variable is <=2.
 
Last edited:

grogro

Cooltrainer
Member
Joined
Mar 6, 2021
Posts
120
grogro updated Ultimate Move Tutor with a new update entry:

Pogjam Lessons

Added Banlist options (change the default switches and variables if you are already using it). I don't wanna see a level 15 Dratini with Outrage anymore.

Added baby moves to the list (Now Breloom can learn Spore and Swampert can learn Hydro Pump if they have the level).
Settings are now in the movetutor file.

Updated the instructions

Read the rest of this update entry...
 

Cross Agento

Novice
Member
Joined
Jun 27, 2021
Posts
32
I just checked and no my alolan ninetales cannot learn things like flamethrower or bodyslam, so it seems fine and even an older version of the script should work correctly. Are you sure it's not a moved shared by both forms? If not, tell me which move is the problem to see if I can replicate the problem.
I guess that you took everything from the gen 8 pack but if not, check pokemon.txt and pokemonform.txt files to see if movelists are defined correctly.
If nothing weird appears, check if your control variable is <=2.
It happens to be moves like Flamethrower and Mystical Fire. It's not in the Pokemon Forms PBS at all. I can send you the files if you wanna take a look at it.


move_tutor:
Expand Collapse Copy
class MoveRelearnerScreen
MOVETUTOR=34
  def eggMoves(pkmn)
    babyspecies=pkmn.species
    babyspecies = GameData::Species.get(babyspecies).get_baby_species(false, nil, nil)
    eggmoves=GameData::Species.get_species_form(babyspecies, pkmn.form).egg_moves
    return eggmoves
  end
 
  def getMoveList
    return species_data.moves
  end
 
  def tutorMoves(pkmn)
    return pkmn.species_data.tutor_moves
  end
 
  def hackmoves
    moves=[]
    GameData::Move.each { |i| moves.push(i.id) }
    return moves
  end

    
  def pbGetRelearnableMoves(pkmn)
    return [] if !pkmn || pkmn.egg? || pkmn.shadowPokemon?
    moves = []
    pkmn.getMoveList.each do |m|
      next if m[0] > pkmn.level || pkmn.hasMove?(m[1])
      moves.push(m[1]) if !moves.include?(m[1])
    end
    tmoves = []
    if pkmn.first_moves
      for i in pkmn.first_moves
        tmoves.push(i) if !pkmn.hasMove?(i) && !moves.include?(i)
      end
    end
    #if $game_variables[MOVETUTOR]==0                #modify to == if you want to make distinct NPCs
    moves = tmoves + moves 
    #end
    # add tutor moves and eggmoves
    if $game_variables[MOVETUTOR]>=1                #modify to == if you want to make distinct NPCs
      eggmoves=eggMoves(pkmn)
      for i in eggmoves
        moves.push(i) if !pkmn.hasMove?(i) && !moves.include?(i)
      end
    end
    if $game_variables[MOVETUTOR]==2                #modify to == if you want to make distinct NPCs
      tutormoves= tutorMoves(pkmn)
      for i in tutormoves
        moves.push(i) if !pkmn.hasMove?(i) && !moves.include?(i)
      end
    end
    if $game_variables[MOVETUTOR]==3
      hmoves = hackmoves
      for i in hmoves
        moves.push(i) if !pkmn.hasMove?(i) && !moves.include?(i)
      end
    end
    moves.sort! { |a, b| a.downcase <=> b.downcase } #sort moves alphabetically
    return moves | []   # remove duplicates
  end
 
end

move_check:
Expand Collapse Copy
MOVETUTOR=34
#Everything below is just here to check if your pokémons can learn moves
def eggMoves(pkmn)
    babyspecies=pkmn.species
    babyspecies = GameData::Species.get(babyspecies).get_baby_species(false, nil, nil)
    eggmoves=GameData::Species.get_species_form(babyspecies, pkmn.form).egg_moves
    return eggmoves
end
 
def getMoveList
    return species_data.moves
end
 
def tutorMoves(pkmn)
    return pkmn.species_data.tutor_moves
end
  
def pbGetRelearnableMoves(pkmn)
    return [] if !pkmn || pkmn.egg? || pkmn.shadowPokemon?
    moves = []
    pkmn.getMoveList.each do |m|
      next if m[0] > pkmn.level || pkmn.hasMove?(m[1])
      moves.push(m[1]) if !moves.include?(m[1])
    end
    tmoves = []
    if pkmn.first_moves
      for i in pkmn.first_moves
        tmoves.push(i) if !pkmn.hasMove?(i) && !moves.include?(i)
      end
    end
    #if $game_variables[MOVETUTOR]>=0                #modify to == if you want to make distinct NPCs
    moves = tmoves + moves 
    #end
    # add tutor moves and eggmoves
    if $game_variables[MOVETUTOR]>=1                #modify to == if you want to make distinct NPCs
      eggmoves=eggMoves(pkmn)
      for i in eggmoves
        moves.push(i) if !pkmn.hasMove?(i) && !moves.include?(i)
      end
    end
    if $game_variables[MOVETUTOR]==2                #modify to == if you want to make distinct NPCs
      tutormoves= tutorMoves(pkmn)
      for i in tutormoves
        moves.push(i) if !pkmn.hasMove?(i) && !moves.include?(i)
      end
    end
    if $game_variables[MOVETUTOR]==3
      hmoves = hackmoves
      for i in hmoves
        moves.push(i) if !pkmn.hasMove?(i) && !moves.include?(i)
      end
    end
    moves.sort! { |a, b| a.downcase <=> b.downcase } #sort moves alphabetically
    return moves | []   # remove duplicates
end
 
def can_learn_move(pkmn)
    return false if pkmn.egg? || pkmn.shadowPokemon?
    return true if $game_variables[MOVETUTOR]==3
    moves = pbGetRelearnableMoves(pkmn)
    if moves!=[]
     return true
    else
     return false
    end
end
 

grogro

Cooltrainer
Member
Joined
Mar 6, 2021
Posts
120
Your pokemon form pbs for ninetales entry should look like that. It's the base v20 pbs file
By default, essentials uses form 0 info if form 1 is not defined, it could be your problem.
1658488498215.png
 

Attachments

  • 1658488475817.png
    1658488475817.png
    28 KB · Views: 108
Last edited:

Cross Agento

Novice
Member
Joined
Jun 27, 2021
Posts
32
Never mind! I found the issue. I had a Legends Arceus Move Relearner in the menu that caused those moves to appear. Thanks though.
 

grogro

Cooltrainer
Member
Joined
Mar 6, 2021
Posts
120
Actually, what you have just checks if pokemon can learn moves but does nothing. You need to copy the whole default move relearner event after it!
And your first line does nothing.
 
Back
Top