mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
Ability capsules were only updating the ID of the ability the pokemon thought it had, and not actually changing the pokemon's ability. This changes that.
1078 lines
33 KiB
Ruby
1078 lines
33 KiB
Ruby
#===============================================================================
|
|
# UseText handlers
|
|
#===============================================================================
|
|
ItemHandlers::UseText.add(:BICYCLE, proc { |item|
|
|
next ($PokemonGlobal.bicycle) ? _INTL("Walk") : _INTL("Use")
|
|
})
|
|
|
|
ItemHandlers::UseText.copy(:BICYCLE, :RACEBIKE)
|
|
|
|
#===============================================================================
|
|
# UseFromBag handlers
|
|
# Return values: 0 = not used
|
|
# 1 = used, item not consumed
|
|
# 2 = close the Bag to use, item not consumed
|
|
# 3 = used, item consumed
|
|
# 4 = close the Bag to use, item consumed
|
|
# If there is no UseFromBag handler for an item being used from the Bag (not on
|
|
# a Pokémon and not a TM/HM), calls the UseInField handler for it instead.
|
|
#===============================================================================
|
|
|
|
ItemHandlers::UseFromBag.add(:HONEY, proc { |item|
|
|
next 4
|
|
})
|
|
|
|
ItemHandlers::UseFromBag.add(:ESCAPEROPE, proc { |item|
|
|
if $game_player.pbHasDependentEvents?
|
|
pbMessage(_INTL("It can't be used when you have someone with you."))
|
|
next 0
|
|
end
|
|
if ($PokemonGlobal.escapePoint rescue false) && $PokemonGlobal.escapePoint.length > 0
|
|
next 4 # End screen and consume item
|
|
end
|
|
pbMessage(_INTL("Can't use that here."))
|
|
next 0
|
|
})
|
|
|
|
ItemHandlers::UseFromBag.add(:BICYCLE, proc { |item|
|
|
next (pbBikeCheck) ? 2 : 0
|
|
})
|
|
|
|
ItemHandlers::UseFromBag.copy(:BICYCLE, :RACEBIKE)
|
|
|
|
ItemHandlers::UseFromBag.add(:OLDROD, proc { |item|
|
|
notCliff = $game_map.passable?($game_player.x, $game_player.y, $game_player.direction, $game_player)
|
|
next 2 if $game_player.pbFacingTerrainTag.can_fish && ($PokemonGlobal.surfing || notCliff)
|
|
pbMessage(_INTL("Can't use that here."))
|
|
next 0
|
|
})
|
|
|
|
ItemHandlers::UseFromBag.copy(:OLDROD, :GOODROD, :SUPERROD)
|
|
|
|
ItemHandlers::UseFromBag.add(:ITEMFINDER, proc { |item|
|
|
next 2
|
|
})
|
|
|
|
ItemHandlers::UseFromBag.copy(:ITEMFINDER, :DOWSINGMCHN, :DOWSINGMACHINE)
|
|
|
|
#===============================================================================
|
|
# ConfirmUseInField handlers
|
|
# Return values: true/false
|
|
# Called when an item is used from the Ready Menu.
|
|
# If an item does not have this handler, it is treated as returning true.
|
|
#===============================================================================
|
|
|
|
ItemHandlers::ConfirmUseInField.add(:ESCAPEROPE, proc { |item|
|
|
escape = ($PokemonGlobal.escapePoint rescue nil)
|
|
if !escape || escape == []
|
|
pbMessage(_INTL("Can't use that here."))
|
|
next false
|
|
end
|
|
if $game_player.pbHasDependentEvents?
|
|
pbMessage(_INTL("It can't be used when you have someone with you."))
|
|
next false
|
|
end
|
|
mapname = pbGetMapNameFromId(escape[0])
|
|
next pbConfirmMessage(_INTL("Want to escape from here and return to {1}?", mapname))
|
|
})
|
|
|
|
#===============================================================================
|
|
# UseInField handlers
|
|
# Return values: 0 = not used
|
|
# 1 = used, item not consumed
|
|
# 3 = used, item consumed
|
|
# Called if an item is used from the Bag (not on a Pokémon and not a TM/HM) and
|
|
# there is no UseFromBag handler above.
|
|
# If an item has this handler, it can be registered to the Ready Menu.
|
|
#===============================================================================
|
|
|
|
def pbRepel(item, steps)
|
|
message = $game_switches[SWITCH_USED_AN_INCENSE] ? "But an incense's effect still lingers from earlier." : "But a repellent's effect still lingers from earlier."
|
|
if $PokemonGlobal.repel > 0
|
|
pbMessage(_INTL(message))
|
|
return 0
|
|
end
|
|
pbUseItemMessage(item)
|
|
$PokemonGlobal.repel = steps
|
|
return 3
|
|
end
|
|
|
|
|
|
ItemHandlers::UseInField.add(:FUSIONREPEL, proc { |item|
|
|
$game_switches[SWITCH_FORCE_ALL_WILD_FUSIONS] = true
|
|
$game_switches[SWITCH_USED_AN_INCENSE] = true
|
|
next pbRepel(item, 50)
|
|
})
|
|
|
|
ItemHandlers::UseInField.add(:REPEL, proc { |item|
|
|
next pbRepel(item, 100)
|
|
})
|
|
|
|
ItemHandlers::UseInField.add(:SUPERREPEL, proc { |item|
|
|
next pbRepel(item, 200)
|
|
})
|
|
|
|
ItemHandlers::UseInField.add(:MAXREPEL, proc { |item|
|
|
next pbRepel(item, 250)
|
|
})
|
|
|
|
Events.onStepTaken += proc {
|
|
if $PokemonGlobal.repel > 0 && !$game_player.terrain_tag.ice # Shouldn't count down if on ice
|
|
$PokemonGlobal.repel -= 1
|
|
if $PokemonGlobal.repel <= 0 && ! $PokemonGlobal.tempRepel
|
|
isIncense = $game_switches[SWITCH_USED_AN_INCENSE]
|
|
$game_switches[SWITCH_FORCE_ALL_WILD_FUSIONS] = false
|
|
$game_switches[SWITCH_USED_AN_INCENSE] = false
|
|
itemName= isIncense ? "incense" : "repellent"
|
|
if $PokemonBag.pbHasItem?(:REPEL) ||
|
|
$PokemonBag.pbHasItem?(:SUPERREPEL) ||
|
|
$PokemonBag.pbHasItem?(:MAXREPEL) ||
|
|
$PokemonBag.pbHasItem?(:FUSIONREPEL)
|
|
if pbConfirmMessage(_INTL("The {1}'s effect wore off! Would you like to use another one?",itemName))
|
|
ret = nil
|
|
pbFadeOutIn {
|
|
scene = PokemonBag_Scene.new
|
|
screen = PokemonBagScreen.new(scene, $PokemonBag)
|
|
ret = screen.pbChooseItemScreen(Proc.new { |item|
|
|
[:REPEL, :SUPERREPEL, :MAXREPEL, :FUSIONREPEL].include?(item)
|
|
})
|
|
}
|
|
pbUseItem($PokemonBag, ret) if ret
|
|
end
|
|
else
|
|
pbMessage(_INTL("The {1}'s effect wore off!",itemName))
|
|
end
|
|
end
|
|
end
|
|
}
|
|
|
|
ItemHandlers::UseInField.add(:BLACKFLUTE, proc { |item|
|
|
pbUseItemMessage(item)
|
|
pbMessage(_INTL("Wild Pokémon will be repelled."))
|
|
$PokemonMap.blackFluteUsed = true
|
|
$PokemonMap.whiteFluteUsed = false
|
|
next 1
|
|
})
|
|
|
|
ItemHandlers::UseInField.add(:WHITEFLUTE, proc { |item|
|
|
pbUseItemMessage(item)
|
|
pbMessage(_INTL("Wild Pokémon will be lured."))
|
|
$PokemonMap.blackFluteUsed = false
|
|
$PokemonMap.whiteFluteUsed = true
|
|
next 1
|
|
})
|
|
|
|
ItemHandlers::UseInField.add(:HONEY, proc { |item|
|
|
pbUseItemMessage(item)
|
|
pbSweetScent
|
|
next 3
|
|
})
|
|
|
|
ItemHandlers::UseInField.add(:ESCAPEROPE, proc { |item|
|
|
escape = ($PokemonGlobal.escapePoint rescue nil)
|
|
if !escape || escape == []
|
|
pbMessage(_INTL("Can't use that here."))
|
|
next 0
|
|
end
|
|
if $game_player.pbHasDependentEvents?
|
|
pbMessage(_INTL("It can't be used when you have someone with you."))
|
|
next 0
|
|
end
|
|
pbUseItemMessage(item)
|
|
pbFadeOutIn {
|
|
$game_temp.player_new_map_id = escape[0]
|
|
$game_temp.player_new_x = escape[1]
|
|
$game_temp.player_new_y = escape[2]
|
|
$game_temp.player_new_direction = escape[3]
|
|
pbCancelVehicles
|
|
$scene.transfer_player
|
|
$game_map.autoplay
|
|
$game_map.refresh
|
|
}
|
|
pbEraseEscapePoint
|
|
next 3
|
|
})
|
|
|
|
ItemHandlers::UseInField.add(:SACREDASH, proc { |item|
|
|
if $Trainer.pokemon_count == 0
|
|
pbMessage(_INTL("There is no Pokémon."))
|
|
next 0
|
|
end
|
|
canrevive = false
|
|
for i in $Trainer.pokemon_party
|
|
next if !i.fainted?
|
|
canrevive = true; break
|
|
end
|
|
if !canrevive
|
|
pbMessage(_INTL("It won't have any effect."))
|
|
next 0
|
|
end
|
|
revived = 0
|
|
pbFadeOutIn {
|
|
scene = PokemonParty_Scene.new
|
|
screen = PokemonPartyScreen.new(scene, $Trainer.party)
|
|
screen.pbStartScene(_INTL("Using item..."), false)
|
|
for i in 0...$Trainer.party.length
|
|
if $Trainer.party[i].fainted?
|
|
revived += 1
|
|
$Trainer.party[i].heal
|
|
screen.pbRefreshSingle(i)
|
|
screen.pbDisplay(_INTL("{1}'s HP was restored.", $Trainer.party[i].name))
|
|
end
|
|
end
|
|
if revived == 0
|
|
screen.pbDisplay(_INTL("It won't have any effect."))
|
|
end
|
|
screen.pbEndScene
|
|
}
|
|
next (revived == 0) ? 0 : 3
|
|
})
|
|
|
|
ItemHandlers::UseInField.add(:BICYCLE, proc { |item|
|
|
if pbBikeCheck
|
|
if $PokemonGlobal.bicycle
|
|
pbDismountBike
|
|
else
|
|
pbMountBike
|
|
end
|
|
next 1
|
|
end
|
|
next 0
|
|
})
|
|
|
|
ItemHandlers::UseInField.copy(:BICYCLE, :RACEBIKE)
|
|
|
|
ItemHandlers::UseInField.add(:OLDROD, proc { |item|
|
|
notCliff = $game_map.passable?($game_player.x, $game_player.y, $game_player.direction, $game_player)
|
|
if !$game_player.pbFacingTerrainTag.can_fish || (!$PokemonGlobal.surfing && !notCliff)
|
|
pbMessage(_INTL("Can't use that here."))
|
|
next 0
|
|
end
|
|
encounter = $PokemonEncounters.has_encounter_type?(:OldRod)
|
|
if pbFishing(encounter, 1)
|
|
pbEncounter(:OldRod)
|
|
end
|
|
next 1
|
|
})
|
|
|
|
ItemHandlers::UseInField.add(:GOODROD, proc { |item|
|
|
notCliff = $game_map.passable?($game_player.x, $game_player.y, $game_player.direction, $game_player)
|
|
if !$game_player.pbFacingTerrainTag.can_fish || (!$PokemonGlobal.surfing && !notCliff)
|
|
pbMessage(_INTL("Can't use that here."))
|
|
next 0
|
|
end
|
|
encounter = $PokemonEncounters.has_encounter_type?(:GoodRod)
|
|
if pbFishing(encounter, 2)
|
|
pbEncounter(:GoodRod)
|
|
end
|
|
next 1
|
|
})
|
|
|
|
ItemHandlers::UseInField.add(:SUPERROD, proc { |item|
|
|
notCliff = $game_map.passable?($game_player.x, $game_player.y, $game_player.direction, $game_player)
|
|
if !$game_player.pbFacingTerrainTag.can_fish || (!$PokemonGlobal.surfing && !notCliff)
|
|
pbMessage(_INTL("Can't use that here."))
|
|
next 0
|
|
end
|
|
encounter = $PokemonEncounters.has_encounter_type?(:SuperRod)
|
|
if pbFishing(encounter, 3)
|
|
pbEncounter(:SuperRod)
|
|
end
|
|
next 1
|
|
})
|
|
|
|
ItemHandlers::UseInField.add(:ITEMFINDER, proc { |item|
|
|
event = pbClosestHiddenItem
|
|
if !event
|
|
pbMessage(_INTL("... \\wt[10]... \\wt[10]... \\wt[10]...\\wt[10]Nope! There's no response."))
|
|
else
|
|
offsetX = event.x - $game_player.x
|
|
offsetY = event.y - $game_player.y
|
|
if offsetX == 0 && offsetY == 0 # Standing on the item, spin around
|
|
4.times do
|
|
pbWait(Graphics.frame_rate * 2 / 10)
|
|
$game_player.turn_right_90
|
|
end
|
|
pbWait(Graphics.frame_rate * 3 / 10)
|
|
pbMessage(_INTL("The {1}'s indicating something right underfoot!", GameData::Item.get(item).name))
|
|
else
|
|
# Item is nearby, face towards it
|
|
direction = $game_player.direction
|
|
if offsetX.abs > offsetY.abs
|
|
direction = (offsetX < 0) ? 4 : 6
|
|
else
|
|
direction = (offsetY < 0) ? 8 : 2
|
|
end
|
|
case direction
|
|
when 2 then
|
|
$game_player.turn_down
|
|
when 4 then
|
|
$game_player.turn_left
|
|
when 6 then
|
|
$game_player.turn_right
|
|
when 8 then
|
|
$game_player.turn_up
|
|
end
|
|
pbWait(Graphics.frame_rate * 3 / 10)
|
|
pbMessage(_INTL("Huh? The {1}'s responding!\1", GameData::Item.get(item).name))
|
|
pbMessage(_INTL("There's an item buried around here!"))
|
|
end
|
|
end
|
|
next 1
|
|
})
|
|
|
|
ItemHandlers::UseInField.copy(:ITEMFINDER, :DOWSINGMCHN, :DOWSINGMACHINE)
|
|
|
|
ItemHandlers::UseInField.add(:TOWNMAP, proc { |item|
|
|
pbShowMap(-1, false)
|
|
next 1
|
|
})
|
|
|
|
ItemHandlers::UseInField.add(:COINCASE, proc { |item|
|
|
pbMessage(_INTL("Coins: {1}", $Trainer.coins.to_s_formatted))
|
|
next 1
|
|
})
|
|
|
|
ItemHandlers::UseInField.add(:EXPALL, proc { |item|
|
|
$PokemonBag.pbChangeItem(:EXPALL, :EXPALLOFF)
|
|
pbMessage(_INTL("The Exp Share was turned off."))
|
|
next 1
|
|
})
|
|
|
|
ItemHandlers::UseInField.add(:EXPALLOFF, proc { |item|
|
|
$PokemonBag.pbChangeItem(:EXPALLOFF, :EXPALL)
|
|
pbMessage(_INTL("The Exp Share was turned on."))
|
|
next 1
|
|
})
|
|
|
|
#===============================================================================
|
|
# UseOnPokemon handlers
|
|
#===============================================================================
|
|
|
|
# Applies to all items defined as an evolution stone.
|
|
# No need to add more code for new ones.
|
|
ItemHandlers::UseOnPokemon.addIf(proc { |item| GameData::Item.get(item).is_evolution_stone? },
|
|
proc { |item, pkmn, scene|
|
|
if pkmn.shadowPokemon?
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
newspecies = pkmn.check_evolution_on_use_item(item)
|
|
if newspecies
|
|
pbFadeOutInWithMusic {
|
|
evo = PokemonEvolutionScene.new
|
|
evo.pbStartScreen(pkmn, newspecies)
|
|
evo.pbEvolution(false)
|
|
evo.pbEndScreen
|
|
if scene.is_a?(PokemonPartyScreen)
|
|
scene.pbRefreshAnnotations(proc { |p| !p.check_evolution_on_use_item(item).nil? })
|
|
scene.pbRefresh
|
|
end
|
|
}
|
|
next true
|
|
end
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
}
|
|
)
|
|
|
|
ItemHandlers::UseOnPokemon.add(:POTION, proc { |item, pkmn, scene|
|
|
next pbHPItem(pkmn, 20, scene)
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.copy(:POTION, :BERRYJUICE, :SWEETHEART)
|
|
ItemHandlers::UseOnPokemon.copy(:POTION, :RAGECANDYBAR) if !Settings::RAGE_CANDY_BAR_CURES_STATUS_PROBLEMS
|
|
|
|
ItemHandlers::UseOnPokemon.add(:SUPERPOTION, proc { |item, pkmn, scene|
|
|
next pbHPItem(pkmn, 50, scene)
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:HYPERPOTION, proc { |item, pkmn, scene|
|
|
next pbHPItem(pkmn, 200, scene)
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:MAXPOTION, proc { |item, pkmn, scene|
|
|
next pbHPItem(pkmn, pkmn.totalhp - pkmn.hp, scene)
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:FRESHWATER, proc { |item, pkmn, scene|
|
|
next pbHPItem(pkmn, 50, scene)
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:SODAPOP, proc { |item, pkmn, scene|
|
|
next pbHPItem(pkmn, 60, scene)
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:LEMONADE, proc { |item, pkmn, scene|
|
|
next pbHPItem(pkmn, 80, scene)
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:MOOMOOMILK, proc { |item, pkmn, scene|
|
|
next pbHPItem(pkmn, 100, scene)
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:ORANBERRY, proc { |item, pkmn, scene|
|
|
next pbHPItem(pkmn, 10, scene)
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:SITRUSBERRY, proc { |item, pkmn, scene|
|
|
next pbHPItem(pkmn, pkmn.totalhp / 4, scene)
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:AWAKENING, proc { |item, pkmn, scene|
|
|
if pkmn.fainted? || pkmn.status != :SLEEP
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
pkmn.heal_status
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1} woke up.", pkmn.name))
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.copy(:AWAKENING, :CHESTOBERRY, :BLUEFLUTE, :POKEFLUTE)
|
|
|
|
ItemHandlers::UseOnPokemon.add(:ANTIDOTE, proc { |item, pkmn, scene|
|
|
if pkmn.fainted? || pkmn.status != :POISON
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
pkmn.heal_status
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1} was cured of its poisoning.", pkmn.name))
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.copy(:ANTIDOTE, :PECHABERRY)
|
|
|
|
ItemHandlers::UseOnPokemon.add(:BURNHEAL, proc { |item, pkmn, scene|
|
|
if pkmn.fainted? || pkmn.status != :BURN
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
pkmn.heal_status
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1}'s burn was healed.", pkmn.name))
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.copy(:BURNHEAL, :RAWSTBERRY)
|
|
|
|
ItemHandlers::UseOnPokemon.add(:PARALYZEHEAL, proc { |item, pkmn, scene|
|
|
if pkmn.fainted? || pkmn.status != :PARALYSIS
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
pkmn.heal_status
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1} was cured of paralysis.", pkmn.name))
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.copy(:PARALYZEHEAL, :PARLYZHEAL, :CHERIBERRY)
|
|
|
|
ItemHandlers::UseOnPokemon.add(:ICEHEAL, proc { |item, pkmn, scene|
|
|
if pkmn.fainted? || pkmn.status != :FROZEN
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
pkmn.heal_status
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1} was thawed out.", pkmn.name))
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.copy(:ICEHEAL, :ASPEARBERRY)
|
|
|
|
ItemHandlers::UseOnPokemon.add(:FULLHEAL, proc { |item, pkmn, scene|
|
|
if pkmn.fainted? || pkmn.status == :NONE
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
pkmn.heal_status
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1} became healthy.", pkmn.name))
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.copy(:FULLHEAL,
|
|
:LAVACOOKIE, :OLDGATEAU, :CASTELIACONE, :LUMIOSEGALETTE, :SHALOURSABLE,
|
|
:BIGMALASADA, :LUMBERRY)
|
|
ItemHandlers::UseOnPokemon.copy(:FULLHEAL, :RAGECANDYBAR) if Settings::RAGE_CANDY_BAR_CURES_STATUS_PROBLEMS
|
|
|
|
ItemHandlers::UseOnPokemon.add(:FULLRESTORE, proc { |item, pkmn, scene|
|
|
if pkmn.fainted? || (pkmn.hp == pkmn.totalhp && pkmn.status == :NONE)
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
hpgain = pbItemRestoreHP(pkmn, pkmn.totalhp - pkmn.hp)
|
|
pkmn.heal_status
|
|
scene.pbRefresh
|
|
if hpgain > 0
|
|
scene.pbDisplay(_INTL("{1}'s HP was restored by {2} points.", pkmn.name, hpgain))
|
|
else
|
|
scene.pbDisplay(_INTL("{1} became healthy.", pkmn.name))
|
|
end
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:REVIVE, proc { |item, pkmn, scene|
|
|
if !pkmn.fainted?
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
pkmn.hp = (pkmn.totalhp / 2).floor
|
|
pkmn.hp = 1 if pkmn.hp <= 0
|
|
pkmn.heal_status
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1}'s HP was restored.", pkmn.name))
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:MAXREVIVE, proc { |item, pkmn, scene|
|
|
if !pkmn.fainted?
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
pkmn.heal_HP
|
|
pkmn.heal_status
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1}'s HP was restored.", pkmn.name))
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:ENERGYPOWDER, proc { |item, pkmn, scene|
|
|
if pbHPItem(pkmn, 50, scene)
|
|
pkmn.changeHappiness("powder")
|
|
next true
|
|
end
|
|
next false
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:ENERGYROOT, proc { |item, pkmn, scene|
|
|
if pbHPItem(pkmn, 200, scene)
|
|
pkmn.changeHappiness("energyroot")
|
|
next true
|
|
end
|
|
next false
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:HEALPOWDER, proc { |item, pkmn, scene|
|
|
if pkmn.fainted? || pkmn.status == :NONE
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
pkmn.heal_status
|
|
pkmn.changeHappiness("powder")
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1} became healthy.", pkmn.name))
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:REVIVALHERB, proc { |item, pkmn, scene|
|
|
if !pkmn.fainted?
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
pkmn.heal_HP
|
|
pkmn.heal_status
|
|
pkmn.changeHappiness("revivalherb")
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1}'s HP was restored.", pkmn.name))
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:ETHER, proc { |item, pkmn, scene|
|
|
move = scene.pbChooseMove(pkmn, _INTL("Restore which move?"))
|
|
next false if move < 0
|
|
if pbRestorePP(pkmn, move, 10) == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbDisplay(_INTL("PP was restored."))
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.copy(:ETHER, :LEPPABERRY)
|
|
|
|
ItemHandlers::UseOnPokemon.add(:MAXETHER, proc { |item, pkmn, scene|
|
|
move = scene.pbChooseMove(pkmn, _INTL("Restore which move?"))
|
|
next false if move < 0
|
|
if pbRestorePP(pkmn, move, pkmn.moves[move].total_pp - pkmn.moves[move].pp) == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbDisplay(_INTL("PP was restored."))
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:ELIXIR, proc { |item, pkmn, scene|
|
|
pprestored = 0
|
|
for i in 0...pkmn.moves.length
|
|
pprestored += pbRestorePP(pkmn, i, 10)
|
|
end
|
|
if pprestored == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbDisplay(_INTL("PP was restored."))
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:MAXELIXIR, proc { |item, pkmn, scene|
|
|
pprestored = 0
|
|
for i in 0...pkmn.moves.length
|
|
pprestored += pbRestorePP(pkmn, i, pkmn.moves[i].total_pp - pkmn.moves[i].pp)
|
|
end
|
|
if pprestored == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbDisplay(_INTL("PP was restored."))
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:PPUP, proc { |item, pkmn, scene|
|
|
move = scene.pbChooseMove(pkmn, _INTL("Boost PP of which move?"))
|
|
if move >= 0
|
|
if pkmn.moves[move].total_pp <= 1 || pkmn.moves[move].ppup >= 3
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
pkmn.moves[move].ppup += 1
|
|
movename = pkmn.moves[move].name
|
|
scene.pbDisplay(_INTL("{1}'s PP increased.", movename))
|
|
next true
|
|
end
|
|
next false
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:PPMAX, proc { |item, pkmn, scene|
|
|
move = scene.pbChooseMove(pkmn, _INTL("Boost PP of which move?"))
|
|
if move >= 0
|
|
if pkmn.moves[move].total_pp <= 1 || pkmn.moves[move].ppup >= 3
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
pkmn.moves[move].ppup = 3
|
|
movename = pkmn.moves[move].name
|
|
scene.pbDisplay(_INTL("{1}'s PP increased.", movename))
|
|
next true
|
|
end
|
|
next false
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:HPUP, proc { |item, pkmn, scene|
|
|
if pbRaiseEffortValues(pkmn, :HP) == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1}'s HP increased.", pkmn.name))
|
|
pkmn.changeHappiness("vitamin")
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:PROTEIN, proc { |item, pkmn, scene|
|
|
if pbRaiseEffortValues(pkmn, :ATTACK) == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbDisplay(_INTL("{1}'s Attack increased.", pkmn.name))
|
|
pkmn.changeHappiness("vitamin")
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:IRON, proc { |item, pkmn, scene|
|
|
if pbRaiseEffortValues(pkmn, :DEFENSE) == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbDisplay(_INTL("{1}'s Defense increased.", pkmn.name))
|
|
pkmn.changeHappiness("vitamin")
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:CALCIUM, proc { |item, pkmn, scene|
|
|
if pbRaiseEffortValues(pkmn, :SPECIAL_ATTACK) == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbDisplay(_INTL("{1}'s Special Attack increased.", pkmn.name))
|
|
pkmn.changeHappiness("vitamin")
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:ZINC, proc { |item, pkmn, scene|
|
|
if pbRaiseEffortValues(pkmn, :SPECIAL_DEFENSE) == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbDisplay(_INTL("{1}'s Special Defense increased.", pkmn.name))
|
|
pkmn.changeHappiness("vitamin")
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:CARBOS, proc { |item, pkmn, scene|
|
|
if pbRaiseEffortValues(pkmn, :SPEED) == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbDisplay(_INTL("{1}'s Speed increased.", pkmn.name))
|
|
pkmn.changeHappiness("vitamin")
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:HEALTHWING, proc { |item, pkmn, scene|
|
|
if pbRaiseEffortValues(pkmn, :HP, 1, false) == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1}'s HP increased.", pkmn.name))
|
|
pkmn.changeHappiness("wing")
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:MUSCLEWING, proc { |item, pkmn, scene|
|
|
if pbRaiseEffortValues(pkmn, :ATTACK, 1, false) == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbDisplay(_INTL("{1}'s Attack increased.", pkmn.name))
|
|
pkmn.changeHappiness("wing")
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:RESISTWING, proc { |item, pkmn, scene|
|
|
if pbRaiseEffortValues(pkmn, :DEFENSE, 1, false) == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbDisplay(_INTL("{1}'s Defense increased.", pkmn.name))
|
|
pkmn.changeHappiness("wing")
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:GENIUSWING, proc { |item, pkmn, scene|
|
|
if pbRaiseEffortValues(pkmn, :SPECIAL_ATTACK, 1, false) == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbDisplay(_INTL("{1}'s Special Attack increased.", pkmn.name))
|
|
pkmn.changeHappiness("wing")
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:CLEVERWING, proc { |item, pkmn, scene|
|
|
if pbRaiseEffortValues(pkmn, :SPECIAL_DEFENSE, 1, false) == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbDisplay(_INTL("{1}'s Special Defense increased.", pkmn.name))
|
|
pkmn.changeHappiness("wing")
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:SWIFTWING, proc { |item, pkmn, scene|
|
|
if pbRaiseEffortValues(pkmn, :SPEED, 1, false) == 0
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
scene.pbDisplay(_INTL("{1}'s Speed increased.", pkmn.name))
|
|
pkmn.changeHappiness("wing")
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:RARECANDY, proc { |item, pkmn, scene|
|
|
if pkmn.level >= GameData::GrowthRate.max_level || pkmn.shadowPokemon?
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
pbChangeLevel(pkmn, pkmn.level + 1, scene)
|
|
scene.pbHardRefresh
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:POMEGBERRY, proc { |item, pkmn, scene|
|
|
next pbRaiseHappinessAndLowerEV(pkmn, scene, :HP, [
|
|
_INTL("{1} adores you! Its base HP fell!", pkmn.name),
|
|
_INTL("{1} became more friendly. Its base HP can't go lower.", pkmn.name),
|
|
_INTL("{1} became more friendly. However, its base HP fell!", pkmn.name)
|
|
])
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:KELPSYBERRY, proc { |item, pkmn, scene|
|
|
next pbRaiseHappinessAndLowerEV(pkmn, scene, :ATTACK, [
|
|
_INTL("{1} adores you! Its base Attack fell!", pkmn.name),
|
|
_INTL("{1} became more friendly. Its base Attack can't go lower.", pkmn.name),
|
|
_INTL("{1} became more friendly. However, its base Attack fell!", pkmn.name)
|
|
])
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:QUALOTBERRY, proc { |item, pkmn, scene|
|
|
next pbRaiseHappinessAndLowerEV(pkmn, scene, :DEFENSE, [
|
|
_INTL("{1} adores you! Its base Defense fell!", pkmn.name),
|
|
_INTL("{1} became more friendly. Its base Defense can't go lower.", pkmn.name),
|
|
_INTL("{1} became more friendly. However, its base Defense fell!", pkmn.name)
|
|
])
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:HONDEWBERRY, proc { |item, pkmn, scene|
|
|
next pbRaiseHappinessAndLowerEV(pkmn, scene, :SPECIAL_ATTACK, [
|
|
_INTL("{1} adores you! Its base Special Attack fell!", pkmn.name),
|
|
_INTL("{1} became more friendly. Its base Special Attack can't go lower.", pkmn.name),
|
|
_INTL("{1} became more friendly. However, its base Special Attack fell!", pkmn.name)
|
|
])
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:GREPABERRY, proc { |item, pkmn, scene|
|
|
next pbRaiseHappinessAndLowerEV(pkmn, scene, :SPECIAL_DEFENSE, [
|
|
_INTL("{1} adores you! Its base Special Defense fell!", pkmn.name),
|
|
_INTL("{1} became more friendly. Its base Special Defense can't go lower.", pkmn.name),
|
|
_INTL("{1} became more friendly. However, its base Special Defense fell!", pkmn.name)
|
|
])
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:TAMATOBERRY, proc { |item, pkmn, scene|
|
|
next pbRaiseHappinessAndLowerEV(pkmn, scene, :SPEED, [
|
|
_INTL("{1} adores you! Its base Speed fell!", pkmn.name),
|
|
_INTL("{1} became more friendly. Its base Speed can't go lower.", pkmn.name),
|
|
_INTL("{1} became more friendly. However, its base Speed fell!", pkmn.name)
|
|
])
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:GRACIDEA, proc { |item, pkmn, scene|
|
|
if !pkmn.isSpecies?(:SHAYMIN) || pkmn.form != 0 ||
|
|
pkmn.status == :FROZEN || PBDayNight.isNight?
|
|
scene.pbDisplay(_INTL("It had no effect."))
|
|
next false
|
|
end
|
|
if pkmn.fainted?
|
|
scene.pbDisplay(_INTL("This can't be used on the fainted Pokémon."))
|
|
next false
|
|
end
|
|
pkmn.setForm(1) {
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1} changed Forme!", pkmn.name))
|
|
}
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:REDNECTAR, proc { |item, pkmn, scene|
|
|
if !pkmn.isSpecies?(:ORICORIO) || pkmn.form == 0
|
|
scene.pbDisplay(_INTL("It had no effect."))
|
|
next false
|
|
end
|
|
if pkmn.fainted?
|
|
scene.pbDisplay(_INTL("This can't be used on the fainted Pokémon."))
|
|
end
|
|
pkmn.setForm(0) {
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1} changed form!", pkmn.name))
|
|
}
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:YELLOWNECTAR, proc { |item, pkmn, scene|
|
|
if !pkmn.isSpecies?(:ORICORIO) || pkmn.form == 1
|
|
scene.pbDisplay(_INTL("It had no effect."))
|
|
next false
|
|
end
|
|
if pkmn.fainted?
|
|
scene.pbDisplay(_INTL("This can't be used on the fainted Pokémon."))
|
|
end
|
|
pkmn.setForm(1) {
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1} changed form!", pkmn.name))
|
|
}
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:PINKNECTAR, proc { |item, pkmn, scene|
|
|
if !pkmn.isSpecies?(:ORICORIO) || pkmn.form == 2
|
|
scene.pbDisplay(_INTL("It had no effect."))
|
|
next false
|
|
end
|
|
if pkmn.fainted?
|
|
scene.pbDisplay(_INTL("This can't be used on the fainted Pokémon."))
|
|
end
|
|
pkmn.setForm(2) {
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1} changed form!", pkmn.name))
|
|
}
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:PURPLENECTAR, proc { |item, pkmn, scene|
|
|
if !pkmn.isSpecies?(:ORICORIO) || pkmn.form == 3
|
|
scene.pbDisplay(_INTL("It had no effect."))
|
|
next false
|
|
end
|
|
if pkmn.fainted?
|
|
scene.pbDisplay(_INTL("This can't be used on the fainted Pokémon."))
|
|
end
|
|
pkmn.setForm(3) {
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1} changed form!", pkmn.name))
|
|
}
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:REVEALGLASS, proc { |item, pkmn, scene|
|
|
if !pkmn.isSpecies?(:TORNADUS) &&
|
|
!pkmn.isSpecies?(:THUNDURUS) &&
|
|
!pkmn.isSpecies?(:LANDORUS)
|
|
scene.pbDisplay(_INTL("It had no effect."))
|
|
next false
|
|
end
|
|
if pkmn.fainted?
|
|
scene.pbDisplay(_INTL("This can't be used on the fainted Pokémon."))
|
|
next false
|
|
end
|
|
newForm = (pkmn.form == 0) ? 1 : 0
|
|
pkmn.setForm(newForm) {
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1} changed Forme!", pkmn.name))
|
|
}
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:PRISONBOTTLE, proc { |item, pkmn, scene|
|
|
if !pkmn.isSpecies?(:HOOPA)
|
|
scene.pbDisplay(_INTL("It had no effect."))
|
|
next false
|
|
end
|
|
if pkmn.fainted?
|
|
scene.pbDisplay(_INTL("This can't be used on the fainted Pokémon."))
|
|
end
|
|
newForm = (pkmn.form == 0) ? 1 : 0
|
|
pkmn.setForm(newForm) {
|
|
scene.pbRefresh
|
|
scene.pbDisplay(_INTL("{1} changed Forme!", pkmn.name))
|
|
}
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:NSOLARIZER, proc { |item, pkmn, scene|
|
|
if !pkmn.isSpecies?(:NECROZMA) || pkmn.form == 2
|
|
scene.pbDisplay(_INTL("It had no effect."))
|
|
next false
|
|
end
|
|
if pkmn.fainted?
|
|
scene.pbDisplay(_INTL("This can't be used on the fainted Pokémon."))
|
|
next false
|
|
end
|
|
# Fusing
|
|
if pkmn.fused.nil?
|
|
chosen = scene.pbChoosePokemon(_INTL("Fuse with which Pokémon?"))
|
|
next false if chosen < 0
|
|
poke2 = $Trainer.party[chosen]
|
|
if pkmn == poke2
|
|
scene.pbDisplay(_INTL("It cannot be fused with itself."))
|
|
next false
|
|
elsif poke2.egg?
|
|
scene.pbDisplay(_INTL("It cannot be fused with an Egg."))
|
|
next false
|
|
elsif poke2.fainted?
|
|
scene.pbDisplay(_INTL("It cannot be fused with that fainted Pokémon."))
|
|
next false
|
|
elsif !poke2.isSpecies?(:SOLGALEO)
|
|
scene.pbDisplay(_INTL("It cannot be fused with that Pokémon."))
|
|
next false
|
|
end
|
|
pkmn.setForm(1) {
|
|
pkmn.fused = poke2
|
|
$Trainer.remove_pokemon_at_index(chosen)
|
|
scene.pbHardRefresh
|
|
scene.pbDisplay(_INTL("{1} changed Forme!", pkmn.name))
|
|
}
|
|
next true
|
|
end
|
|
# Unfusing
|
|
if $Trainer.party_full?
|
|
scene.pbDisplay(_INTL("You have no room to separate the Pokémon."))
|
|
next false
|
|
end
|
|
pkmn.setForm(0) {
|
|
$Trainer.party[$Trainer.party.length] = pkmn.fused
|
|
pkmn.fused = nil
|
|
scene.pbHardRefresh
|
|
scene.pbDisplay(_INTL("{1} changed Forme!", pkmn.name))
|
|
}
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:NLUNARIZER, proc { |item, pkmn, scene|
|
|
if !pkmn.isSpecies?(:NECROZMA) || pkmn.form == 1
|
|
scene.pbDisplay(_INTL("It had no effect."))
|
|
next false
|
|
end
|
|
if pkmn.fainted?
|
|
scene.pbDisplay(_INTL("This can't be used on the fainted Pokémon."))
|
|
next false
|
|
end
|
|
# Fusing
|
|
if pkmn.fused.nil?
|
|
chosen = scene.pbChoosePokemon(_INTL("Fuse with which Pokémon?"))
|
|
next false if chosen < 0
|
|
poke2 = $Trainer.party[chosen]
|
|
if pkmn == poke2
|
|
scene.pbDisplay(_INTL("It cannot be fused with itself."))
|
|
next false
|
|
elsif poke2.egg?
|
|
scene.pbDisplay(_INTL("It cannot be fused with an Egg."))
|
|
next false
|
|
elsif poke2.fainted?
|
|
scene.pbDisplay(_INTL("It cannot be fused with that fainted Pokémon."))
|
|
next false
|
|
elsif !poke2.isSpecies?(:LUNALA)
|
|
scene.pbDisplay(_INTL("It cannot be fused with that Pokémon."))
|
|
next false
|
|
end
|
|
pkmn.setForm(2) {
|
|
pkmn.fused = poke2
|
|
$Trainer.remove_pokemon_at_index(chosen)
|
|
scene.pbHardRefresh
|
|
scene.pbDisplay(_INTL("{1} changed Forme!", pkmn.name))
|
|
}
|
|
next true
|
|
end
|
|
# Unfusing
|
|
if $Trainer.party_full?
|
|
scene.pbDisplay(_INTL("You have no room to separate the Pokémon."))
|
|
next false
|
|
end
|
|
pkmn.setForm(0) {
|
|
$Trainer.party[$Trainer.party.length] = pkmn.fused
|
|
pkmn.fused = nil
|
|
scene.pbHardRefresh
|
|
scene.pbDisplay(_INTL("{1} changed Forme!", pkmn.name))
|
|
}
|
|
next true
|
|
})
|
|
|
|
ItemHandlers::UseOnPokemon.add(:ABILITYCAPSULE, proc { |item, pkmn, scene|
|
|
abils = pkmn.getAbilityList
|
|
abil1 = nil; abil2 = nil
|
|
for i in abils
|
|
abil1 = i[0] if i[1] == 0
|
|
abil2 = i[0] if i[1] == 1
|
|
end
|
|
if abil1.nil? || abil2.nil? || pkmn.hasHiddenAbility? || pkmn.isSpecies?(:ZYGARDE)
|
|
scene.pbDisplay(_INTL("It won't have any effect."))
|
|
next false
|
|
end
|
|
newabil = (pkmn.ability_index + 1) % 2
|
|
newabilname = GameData::Ability.get((newabil == 0) ? abil1 : abil2).name
|
|
if scene.pbConfirm(_INTL("Would you like to change {1}'s Ability to {2}?",
|
|
pkmn.name, newabilname))
|
|
pkmn.ability_index = newabil
|
|
pkmn.ability = GameData::Ability.get((newabil == 0) ? abil1 : abil2).id
|
|
scene.pbHardRefresh
|
|
scene.pbDisplay(_INTL("{1}'s Ability changed to {2}!", pkmn.name, newabilname))
|
|
next true
|
|
end
|
|
next false
|
|
})
|