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

200 lines
7.5 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 [2, 3].include?(idxBattler) # In middle spot already
idxOther = (idxBattler.even?) ? 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)
# Debug ending the battle
return if pbDebugRun != 0
# Call the battler
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)
if pbOwnedByPlayer?(idxBattler)
@mega_rings.each { |item| return true if $bag.has?(item) }
else
trainer_items = pbGetOwnerItems(idxBattler)
return false if !trainer_items
@mega_rings.each { |item| return true if trainer_items.include?(item) }
end
return false
end
def pbGetMegaRingName(idxBattler)
if !@mega_rings.empty?
if pbOwnedByPlayer?(idxBattler)
@mega_rings.each { |item| return GameData::Item.get(item).name if $bag.has?(item) }
else
trainer_items = pbGetOwnerItems(idxBattler)
@mega_rings.each { |item| return GameData::Item.get(item).name if trainer_items&.include?(item) }
end
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
# Trigger ability
battler.pbOnLosingAbility(old_ability)
battler.pbTriggerAbilityOnGainingIt
# Recalculate turn order
pbCalculatePriority(false, [idxBattler]) if Settings::RECALCULATE_TURN_ORDER_AFTER_MEGA_EVOLUTION
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