Fixed form changing being able to leave a Pokémon knowing the same move twice

This commit is contained in:
Maruno17
2022-01-02 21:19:13 +00:00
parent 4cf13f2942
commit 2a34904baa

View File

@@ -236,13 +236,14 @@ MultipleForms.register(:ROTOM, {
new_move_id = nil if !GameData::Move.exists?(new_move_id) new_move_id = nil if !GameData::Move.exists?(new_move_id)
raise _INTL("Rotom is trying to forget its last move, but there isn't another move to replace it with.") if new_move_id.nil? raise _INTL("Rotom is trying to forget its last move, but there isn't another move to replace it with.") if new_move_id.nil?
end end
new_move_id = nil if pkmn.hasMove?(new_move_id)
# Forget a known move (if relevant) and learn a new move (if relevant) # Forget a known move (if relevant) and learn a new move (if relevant)
if old_move_index >= 0 if old_move_index >= 0
old_move_name = pkmn.moves[old_move_index].name old_move_name = pkmn.moves[old_move_index].name
if new_move_id.nil? if new_move_id.nil?
# Just forget the old move # Just forget the old move
pkmn.forget_move_at_index(old_move_index) pkmn.forget_move_at_index(old_move_index)
pbMessage(_INTL("{1} forgot {2}...\1", pkmn.name, old_move_name)) pbMessage(_INTL("{1} forgot {2}...", pkmn.name, old_move_name))
else else
# Replace the old move with the new move (keeps the same index) # Replace the old move with the new move (keeps the same index)
pkmn.moves[old_move_index].id = new_move_id pkmn.moves[old_move_index].id = new_move_id
@@ -333,23 +334,46 @@ MultipleForms.register(:KYUREM, {
"onSetForm" => proc { |pkmn, form, oldForm| "onSetForm" => proc { |pkmn, form, oldForm|
case form case form
when 0 # Normal when 0 # Normal
pkmn.moves.each do |move| pkmn.moves.each_with_index do |move, i|
if [:ICEBURN, :FREEZESHOCK].include?(move.id) && GameData::Move.exists?(:GLACIATE) case move.id
when :ICEBURN, :FREEZESHOCK
next if !GameData::Move.exists?(:GLACIATE)
if pkmn.hasMove?(:GLACIATE)
pkmn.moves[i] = nil
else
move.id = :GLACIATE move.id = :GLACIATE
end end
if [:FUSIONFLARE, :FUSIONBOLT].include?(move.id) && GameData::Move.exists?(:SCARYFACE) when :FUSIONFLARE, :FUSIONBOLT
next if !GameData::Move.exists?(:SCARYFACE)
if pkmn.hasMove?(:SCARYFACE)
pkmn.moves[i] = nil
else
move.id = :SCARYFACE move.id = :SCARYFACE
end end
end end
pkmn.moves.compact!
end
when 1 # White when 1 # White
pkmn.moves.each do |move| pkmn.moves.each do |move|
move.id = :ICEBURN if move.id == :GLACIATE && GameData::Move.exists?(:ICEBURN) case move.id
move.id = :FUSIONFLARE if move.id == :SCARYFACE && GameData::Move.exists?(:FUSIONFLARE) when :GLACIATE
next if !GameData::Move.exists?(:ICEBURN) || pkmn.hasMove?(:ICEBURN)
move.id = :ICEBURN
when :SCARYFACE
next if !GameData::Move.exists?(:FUSIONFLARE) || pkmn.hasMove?(:FUSIONFLARE)
move.id = :FUSIONFLARE
end
end end
when 2 # Black when 2 # Black
pkmn.moves.each do |move| pkmn.moves.each do |move|
move.id = :FREEZESHOCK if move.id == :GLACIATE && GameData::Move.exists?(:FREEZESHOCK) case move.id
move.id = :FUSIONBOLT if move.id == :SCARYFACE && GameData::Move.exists?(:FUSIONBOLT) when :GLACIATE
next if !GameData::Move.exists?(:FREEZESHOCK) || pkmn.hasMove?(:FREEZESHOCK)
move.id = :FREEZESHOCK
when :SCARYFACE
next if !GameData::Move.exists?(:FUSIONBOLT) || pkmn.hasMove?(:FUSIONBOLT)
move.id = :FUSIONBOLT
end
end end
end end
} }
@@ -543,21 +567,15 @@ MultipleForms.register(:NECROZMA, {
:SUNSTEELSTRIKE, # Dusk Mane (with Solgaleo) (form 1) :SUNSTEELSTRIKE, # Dusk Mane (with Solgaleo) (form 1)
:MOONGEISTBEAM # Dawn Wings (with Lunala) (form 2) :MOONGEISTBEAM # Dawn Wings (with Lunala) (form 2)
] ]
if form == 0 if form == 0 # Normal
# Turned back into the base form; forget form-specific moves # Turned back into the base form; forget form-specific moves
move_index = -1 form_moves.each do |move|
pkmn.moves.each_with_index do |move, i| next if !pkmn.hasMove?(move)
next if !form_moves.any? { |m| m == move.id } pkmn.forget_move(move)
move_index = i pbMessage(_INTL("{1} forgot {2}...", pkmn.name, GameData::Move.get(move).name))
break
end end
if move_index >= 0
move_name = pkmn.moves[move_index].name
pkmn.forget_move_at_index(move_index)
pbMessage(_INTL("{1} forgot {2}...", pkmn.name, move_name))
pbLearnMove(pkmn, :CONFUSION) if pkmn.numMoves == 0 pbLearnMove(pkmn, :CONFUSION) if pkmn.numMoves == 0
end else # Dusk Mane, Dawn Wings
else
# Turned into an alternate form; try learning that form's unique move # Turned into an alternate form; try learning that form's unique move
new_move_id = form_moves[form - 1] new_move_id = form_moves[form - 1]
pbLearnMove(pkmn, new_move_id, true) pbLearnMove(pkmn, new_move_id, true)
@@ -687,21 +705,20 @@ MultipleForms.register(:URSHIFU, {
MultipleForms.register(:CALYREX, { MultipleForms.register(:CALYREX, {
"onSetForm" => proc { |pkmn, form, oldForm| "onSetForm" => proc { |pkmn, form, oldForm|
case form form_moves = [
when 0 # Normal :GLACIALLANCE, # Ice Rider (with Glastrier) (form 1)
if pkmn.hasMove?(:GLACIALLANCE) :ASTRALBARRAGE # Shadow Rider (with Spectrier) (form 2)
pkmn.forget_move(:GLACIALLANCE) ]
pbMessage(_INTL("{1} forgot {2}...", pkmn.name, GameData::Move.get(:GLACIALLANCE).name)) if form == 0 # Normal
end form_moves.each do |move|
if pkmn.hasMove?(:ASTRALBARRAGE) next if !pkmn.hasMove?(move)
pkmn.forget_move(:ASTRALBARRAGE) pkmn.forget_move(move)
pbMessage(_INTL("{1} forgot {2}...", pkmn.name, GameData::Move.get(:ASTRALBARRAGE).name)) pbMessage(_INTL("{1} forgot {2}...", pkmn.name, GameData::Move.get(move).name))
end end
pbLearnMove(pkmn, :CONFUSION) if pkmn.numMoves == 0 pbLearnMove(pkmn, :CONFUSION) if pkmn.numMoves == 0
when 1 # Ice Rider else # Ice Rider, Shadow Rider
pbLearnMove(pkmn, :GLACIALLANCE, true) new_move = form_moves[form - 1]
when 2 # Shadow Rider pbLearnMove(pkmn, new_move, true)
pbLearnMove(pkmn, :ASTRALBARRAGE, true)
end end
} }
}) })