Files
infinitefusion-e18/Data/Scripts/011_Battle/001_Battle/008_Battle_ActionOther.rb

192 lines
7.2 KiB
Ruby

class Battle
#=============================================================================
# Shifting a battler to another position in a battle larger than double
#=============================================================================
def pbCanShift?(idxBattler)
return false if pbSideSize(0)<=2 && pbSideSize(1)<=2 # Double battle or smaller
idxOther = -1
case pbSideSize(idxBattler)
when 1
return false # Only one battler on that side
when 2
idxOther = (idxBattler+2)%4
when 3
return false if idxBattler==2 || idxBattler==3 # In middle spot already
idxOther = ((idxBattler%2)==0) ? 2 : 3
end
return false if pbGetOwnerIndexFromBattlerIndex(idxBattler)!=pbGetOwnerIndexFromBattlerIndex(idxOther)
return true
end
def pbRegisterShift(idxBattler)
@choices[idxBattler][0] = :Shift
@choices[idxBattler][1] = 0
@choices[idxBattler][2] = nil
return true
end
#=============================================================================
# Calling at a battler
#=============================================================================
def pbRegisterCall(idxBattler)
@choices[idxBattler][0] = :Call
@choices[idxBattler][1] = 0
@choices[idxBattler][2] = nil
return true
end
def pbCall(idxBattler)
battler = @battlers[idxBattler]
trainerName = pbGetOwnerName(idxBattler)
pbDisplay(_INTL("{1} called {2}!",trainerName,battler.pbThis(true)))
pbDisplay(_INTL("{1}!",battler.name))
if battler.shadowPokemon?
if battler.inHyperMode?
battler.pokemon.hyper_mode = false
battler.pokemon.change_heart_gauge("call")
pbDisplay(_INTL("{1} came to its senses from the Trainer's call!",battler.pbThis))
else
pbDisplay(_INTL("But nothing happened!"))
end
elsif battler.status == :SLEEP
battler.pbCureStatus
elsif battler.pbCanRaiseStatStage?(:ACCURACY,battler)
battler.pbRaiseStatStage(:ACCURACY,1,battler)
battler.pbItemOnStatDropped
else
pbDisplay(_INTL("But nothing happened!"))
end
end
#=============================================================================
# Choosing to Mega Evolve a battler
#=============================================================================
def pbHasMegaRing?(idxBattler)
return true if !pbOwnedByPlayer?(idxBattler) # Assume AI trainer have a ring
Settings::MEGA_RINGS.each { |item| return true if $bag.has?(item) }
return false
end
def pbGetMegaRingName(idxBattler)
if pbOwnedByPlayer?(idxBattler)
Settings::MEGA_RINGS.each do |item|
return GameData::Item.get(item).name if $bag.has?(item)
end
end
# NOTE: Add your own Mega objects for particular NPC trainers here.
# if pbGetOwnerFromBattlerIndex(idxBattler).trainer_type == :BUGCATCHER
# return _INTL("Mega Net")
# end
return _INTL("Mega Ring")
end
def pbCanMegaEvolve?(idxBattler)
return false if $game_switches[Settings::NO_MEGA_EVOLUTION]
return false if !@battlers[idxBattler].hasMega?
return false if @battlers[idxBattler].wild?
return true if $DEBUG && Input.press?(Input::CTRL)
return false if @battlers[idxBattler].effects[PBEffects::SkyDrop]>=0
return false if !pbHasMegaRing?(idxBattler)
side = @battlers[idxBattler].idxOwnSide
owner = pbGetOwnerIndexFromBattlerIndex(idxBattler)
return @megaEvolution[side][owner]==-1
end
def pbRegisterMegaEvolution(idxBattler)
side = @battlers[idxBattler].idxOwnSide
owner = pbGetOwnerIndexFromBattlerIndex(idxBattler)
@megaEvolution[side][owner] = idxBattler
end
def pbUnregisterMegaEvolution(idxBattler)
side = @battlers[idxBattler].idxOwnSide
owner = pbGetOwnerIndexFromBattlerIndex(idxBattler)
@megaEvolution[side][owner] = -1 if @megaEvolution[side][owner]==idxBattler
end
def pbToggleRegisteredMegaEvolution(idxBattler)
side = @battlers[idxBattler].idxOwnSide
owner = pbGetOwnerIndexFromBattlerIndex(idxBattler)
if @megaEvolution[side][owner]==idxBattler
@megaEvolution[side][owner] = -1
else
@megaEvolution[side][owner] = idxBattler
end
end
def pbRegisteredMegaEvolution?(idxBattler)
side = @battlers[idxBattler].idxOwnSide
owner = pbGetOwnerIndexFromBattlerIndex(idxBattler)
return @megaEvolution[side][owner]==idxBattler
end
#=============================================================================
# Mega Evolving a battler
#=============================================================================
def pbMegaEvolve(idxBattler)
battler = @battlers[idxBattler]
return if !battler || !battler.pokemon
return if !battler.hasMega? || battler.mega?
$stats.mega_evolution_count += 1 if battler.pbOwnedByPlayer?
trainerName = pbGetOwnerName(idxBattler)
old_ability = battler.ability_id
# Break Illusion
if battler.hasActiveAbility?(:ILLUSION)
Battle::AbilityEffects.triggerOnBeingHit(battler.ability, nil, battler, nil, self)
end
# Mega Evolve
case battler.pokemon.megaMessage
when 1 # Rayquaza
pbDisplay(_INTL("{1}'s fervent wish has reached {2}!",trainerName,battler.pbThis))
else
pbDisplay(_INTL("{1}'s {2} is reacting to {3}'s {4}!",
battler.pbThis,battler.itemName,trainerName,pbGetMegaRingName(idxBattler)))
end
pbCommonAnimation("MegaEvolution",battler)
battler.pokemon.makeMega
battler.form = battler.pokemon.form
battler.pbUpdate(true)
@scene.pbChangePokemon(battler,battler.pokemon)
@scene.pbRefreshOne(idxBattler)
pbCommonAnimation("MegaEvolution2",battler)
megaName = battler.pokemon.megaName
megaName = _INTL("Mega {1}", battler.pokemon.speciesName) if nil_or_empty?(megaName)
pbDisplay(_INTL("{1} has Mega Evolved into {2}!",battler.pbThis,megaName))
side = battler.idxOwnSide
owner = pbGetOwnerIndexFromBattlerIndex(idxBattler)
@megaEvolution[side][owner] = -2
if battler.isSpecies?(:GENGAR) && battler.mega?
battler.effects[PBEffects::Telekinesis] = 0
end
pbCalculatePriority(false,[idxBattler]) if Settings::RECALCULATE_TURN_ORDER_AFTER_MEGA_EVOLUTION
# Trigger ability
battler.pbOnLosingAbility(old_ability)
battler.pbTriggerAbilityOnGainingIt
end
#=============================================================================
# Primal Reverting a battler
#=============================================================================
def pbPrimalReversion(idxBattler)
battler = @battlers[idxBattler]
return if !battler || !battler.pokemon || battler.fainted?
return if !battler.hasPrimal? || battler.primal?
if battler.isSpecies?(:KYOGRE)
pbCommonAnimation("PrimalKyogre",battler)
elsif battler.isSpecies?(:GROUDON)
pbCommonAnimation("PrimalGroudon",battler)
end
battler.pokemon.makePrimal
battler.form = battler.pokemon.form
battler.pbUpdate(true)
@scene.pbChangePokemon(battler,battler.pokemon)
@scene.pbRefreshOne(idxBattler)
if battler.isSpecies?(:KYOGRE)
pbCommonAnimation("PrimalKyogre2",battler)
elsif battler.isSpecies?(:GROUDON)
pbCommonAnimation("PrimalGroudon2",battler)
end
pbDisplay(_INTL("{1}'s Primal Reversion!\nIt reverted to its primal form!",battler.pbThis))
end
end