Hard mode

This commit is contained in:
infinitefusion
2021-12-26 16:03:01 -05:00
parent 56c13d0907
commit 7240e76ed0
6 changed files with 259 additions and 242 deletions

View File

@@ -13,8 +13,8 @@ module Settings
#Infinite fusion settings #Infinite fusion settings
NB_POKEMON = 420 NB_POKEMON = 420
CUSTOM_BATTLERS_FOLDER="Graphics/CustomBattlers/" CUSTOM_BATTLERS_FOLDER = "Graphics/CustomBattlers/"
BATTLERS_FOLDER="Graphics/Battlers/" BATTLERS_FOLDER = "Graphics/Battlers/"
FRONTSPRITE_POSITION_OFFSET = 15 FRONTSPRITE_POSITION_OFFSET = 15
FRONTSPRITE_SCALE = 0.6666666 FRONTSPRITE_SCALE = 0.6666666
BACKRPSPRITE_SCALE = 1 BACKRPSPRITE_SCALE = 1
@@ -29,7 +29,8 @@ module Settings
RIVAL_STARTER_PLACEHOLDER_VARIABLE = 250 RIVAL_STARTER_PLACEHOLDER_VARIABLE = 250
OVERRIDE_BATTLE_LEVEL_SWITCH = 785 OVERRIDE_BATTLE_LEVEL_SWITCH = 785
OVERRIDE_BATTLE_LEVEL_VALUE_VAR =240 OVERRIDE_BATTLE_LEVEL_VALUE_VAR = 240
HARD_MODE_LEVEL_MODIFIER = 1.1
ZAPMOLCUNO_NB = 176821 ZAPMOLCUNO_NB = 176821
@@ -105,7 +106,7 @@ module Settings
#============================================================================= #=============================================================================
# Whether poisoned Pokémon will lose HP while walking around in the field. # Whether poisoned Pokémon will lose HP while walking around in the field.
POISON_IN_FIELD = true#(MECHANICS_GENERATION <= 4) POISON_IN_FIELD = true #(MECHANICS_GENERATION <= 4)
# Whether poisoned Pokémon will faint while walking around in the field # Whether poisoned Pokémon will faint while walking around in the field
# (true), or survive the poisoning with 1 HP (false). # (true), or survive the poisoning with 1 HP (false).
POISON_FAINT_IN_FIELD = (MECHANICS_GENERATION >= 3) POISON_FAINT_IN_FIELD = (MECHANICS_GENERATION >= 3)
@@ -184,6 +185,7 @@ module Settings
def self.storage_creator_name def self.storage_creator_name
return _INTL("Bill") return _INTL("Bill")
end end
# The number of boxes in Pokémon storage. # The number of boxes in Pokémon storage.
NUM_STORAGE_BOXES = 30 NUM_STORAGE_BOXES = 30
@@ -202,6 +204,7 @@ module Settings
_INTL("Key Items") _INTL("Key Items")
] ]
end end
# The maximum number of slots per pocket (-1 means infinite number). Ignore # The maximum number of slots per pocket (-1 means infinite number). Ignore
# the first number (0). # the first number (0).
BAG_MAX_POCKET_SIZE = [0, -1, -1, -1, -1, -1, -1, -1, -1] BAG_MAX_POCKET_SIZE = [0, -1, -1, -1, -1, -1, -1, -1, -1]
@@ -233,6 +236,7 @@ module Settings
[_INTL("Kanto Pokédex"), 0] [_INTL("Kanto Pokédex"), 0]
] ]
end end
# Whether all forms of a given species will be immediately available to view # Whether all forms of a given species will be immediately available to view
# in the Pokédex so long as that species has been seen at all (true), or # in the Pokédex so long as that species has been seen at all (true), or
# whether each form needs to be seen specifically before that form appears in # whether each form needs to be seen specifically before that form appears in
@@ -263,7 +267,7 @@ module Settings
# A list of maps used by roaming Pokémon. Each map has an array of other maps # A list of maps used by roaming Pokémon. Each map has an array of other maps
# it can lead to. # it can lead to.
ROAMING_AREAS = { ROAMING_AREAS = {
5 => [ 21, 28, 31, 39, 41, 44, 47, 66, 69], 5 => [21, 28, 31, 39, 41, 44, 47, 66, 69],
21 => [5, 28, 31, 39, 41, 44, 47, 66, 69], 21 => [5, 28, 31, 39, 41, 44, 47, 66, 69],
28 => [5, 21, 31, 39, 41, 44, 47, 66, 69], 28 => [5, 21, 31, 39, 41, 44, 47, 66, 69],
31 => [5, 21, 28, 39, 41, 44, 47, 66, 69], 31 => [5, 21, 28, 39, 41, 44, 47, 66, 69],
@@ -272,7 +276,7 @@ module Settings
44 => [5, 21, 28, 31, 39, 41, 47, 66, 69], 44 => [5, 21, 28, 31, 39, 41, 47, 66, 69],
47 => [5, 21, 28, 31, 39, 41, 44, 66, 69], 47 => [5, 21, 28, 31, 39, 41, 44, 66, 69],
66 => [5, 21, 28, 31, 39, 41, 44, 47, 69], 66 => [5, 21, 28, 31, 39, 41, 44, 47, 69],
69 => [5, 21, 28, 31, 39, 41, 44, 47, 66 ] 69 => [5, 21, 28, 31, 39, 41, 44, 47, 66]
} }
# A set of arrays, each containing the details of a roaming Pokémon. The # A set of arrays, each containing the details of a roaming Pokémon. The
# information within each array is as follows: # information within each array is as follows:
@@ -287,10 +291,10 @@ module Settings
[:LATIAS, 30, 53, 0, "Battle roaming"], [:LATIAS, 30, 53, 0, "Battle roaming"],
[:LATIOS, 30, 53, 0, "Battle roaming"], [:LATIOS, 30, 53, 0, "Battle roaming"],
[:KYOGRE, 40, 54, 2, nil, { [:KYOGRE, 40, 54, 2, nil, {
2 => [ 21, 31 ], 2 => [21, 31],
21 => [2, 31, 69], 21 => [2, 31, 69],
31 => [2, 21, 69], 31 => [2, 21, 69],
69 => [ 21, 31 ] 69 => [21, 31]
}], }],
[:ENTEI, 40, 55, 1, nil] [:ENTEI, 40, 55, 1, nil]
] ]
@@ -348,8 +352,8 @@ module Settings
# is on the map (for new plant growth mechanics only). # is on the map (for new plant growth mechanics only).
PLANT_SPARKLE_ANIMATION_ID = 7 PLANT_SPARKLE_ANIMATION_ID = 7
CUT_TREE_ANIMATION_ID =19 CUT_TREE_ANIMATION_ID = 19
ROCK_SMASH_ANIMATION_ID =20 ROCK_SMASH_ANIMATION_ID = 20
#============================================================================= #=============================================================================

View File

@@ -131,7 +131,7 @@ module GameData
trainer.lose_text = self.lose_text trainer.lose_text = self.lose_text
isRematch = $game_switches[200] isRematch = $game_switches[200]
rematchId = getRematchId(trainer.name,trainer.trainer_type) rematchId = getRematchId(trainer.name, trainer.trainer_type)
# Create each Pokémon owned by the trainer # Create each Pokémon owned by the trainer
@pokemon.each do |pkmn_data| @pokemon.each do |pkmn_data|
@@ -143,11 +143,18 @@ module GameData
if $game_switches[REVERSED_MODE] if $game_switches[REVERSED_MODE]
species = reverseFusionSpecies(species) species = reverseFusionSpecies(species)
end end
level =pkmn_data[:level] level = pkmn_data[:level]
if $game_switches[GAME_DIFFICULTY_HARD]
level *= Settings::HARD_MODE_LEVEL_MODIFIER.ceil
if level > Settings::MAXIMUM_LEVEL
level = Settings::MAXIMUM_LEVEL
end
end
if $game_switches[Settings::OVERRIDE_BATTLE_LEVEL_SWITCH] if $game_switches[Settings::OVERRIDE_BATTLE_LEVEL_SWITCH]
override_level = $game_variables[Settings::OVERRIDE_BATTLE_LEVEL_VALUE_VAR] override_level = $game_variables[Settings::OVERRIDE_BATTLE_LEVEL_VALUE_VAR]
if override_level.is_a?(Integer) if override_level.is_a?(Integer)
level =override_level level = override_level
end end
end end
#### ####
@@ -155,8 +162,8 @@ module GameData
#trainer rematch infinite fusion edit #trainer rematch infinite fusion edit
if isRematch if isRematch
nbRematch = getNumberRematch(rematchId) nbRematch = getNumberRematch(rematchId)
level = getRematchLevel(level,nbRematch) level = getRematchLevel(level, nbRematch)
species = evolveRematchPokemon(nbRematch,species) species = evolveRematchPokemon(nbRematch, species)
end end
# #
pkmn = Pokemon.new(species, level, trainer, false) pkmn = Pokemon.new(species, level, trainer, false)

View File

@@ -6,17 +6,17 @@ class PokeBattle_Battle
# battle. # battle.
# NOTE: Messages are only shown while in the party screen when choosing a # NOTE: Messages are only shown while in the party screen when choosing a
# command for the next round. # command for the next round.
def pbCanSwitchLax?(idxBattler,idxParty,partyScene=nil) def pbCanSwitchLax?(idxBattler, idxParty, partyScene = nil)
return true if idxParty<0 return true if idxParty < 0
party = pbParty(idxBattler) party = pbParty(idxBattler)
return false if idxParty>=party.length return false if idxParty >= party.length
return false if !party[idxParty] return false if !party[idxParty]
if party[idxParty].egg? if party[idxParty].egg?
partyScene.pbDisplay(_INTL("An Egg can't battle!")) if partyScene partyScene.pbDisplay(_INTL("An Egg can't battle!")) if partyScene
return false return false
end end
if !pbIsOwner?(idxBattler,idxParty) if !pbIsOwner?(idxBattler, idxParty)
owner = pbGetOwnerFromPartyIndex(idxBattler,idxParty) owner = pbGetOwnerFromPartyIndex(idxBattler, idxParty)
partyScene.pbDisplay(_INTL("You can't switch {1}'s Pokémon with one of yours!", partyScene.pbDisplay(_INTL("You can't switch {1}'s Pokémon with one of yours!",
owner.name)) if partyScene owner.name)) if partyScene
return false return false
@@ -26,7 +26,7 @@ class PokeBattle_Battle
party[idxParty].name)) if partyScene party[idxParty].name)) if partyScene
return false return false
end end
if pbFindBattler(idxParty,idxBattler) if pbFindBattler(idxParty, idxBattler)
partyScene.pbDisplay(_INTL("{1} is already in battle!", partyScene.pbDisplay(_INTL("{1} is already in battle!",
party[idxParty].name)) if partyScene party[idxParty].name)) if partyScene
return false return false
@@ -38,13 +38,13 @@ class PokeBattle_Battle
# switch out (and that its replacement at party index idxParty can switch in). # switch out (and that its replacement at party index idxParty can switch in).
# NOTE: Messages are only shown while in the party screen when choosing a # NOTE: Messages are only shown while in the party screen when choosing a
# command for the next round. # command for the next round.
def pbCanSwitch?(idxBattler,idxParty=-1,partyScene=nil) def pbCanSwitch?(idxBattler, idxParty = -1, partyScene = nil)
# Check whether party Pokémon can switch in # Check whether party Pokémon can switch in
return false if !pbCanSwitchLax?(idxBattler,idxParty,partyScene) return false if !pbCanSwitchLax?(idxBattler, idxParty, partyScene)
# Make sure another battler isn't already choosing to switch to the party # Make sure another battler isn't already choosing to switch to the party
# Pokémon # Pokémon
eachSameSideBattler(idxBattler) do |b| eachSameSideBattler(idxBattler) do |b|
next if choices[b.index][0]!=:SwitchOut || choices[b.index][1]!=idxParty next if choices[b.index][0] != :SwitchOut || choices[b.index][1] != idxParty
partyScene.pbDisplay(_INTL("{1} has already been selected.", partyScene.pbDisplay(_INTL("{1} has already been selected.",
pbParty(idxBattler)[idxParty].name)) if partyScene pbParty(idxBattler)[idxParty].name)) if partyScene
return false return false
@@ -54,39 +54,39 @@ class PokeBattle_Battle
return true if battler.fainted? return true if battler.fainted?
# Ability/item effects that allow switching no matter what # Ability/item effects that allow switching no matter what
if battler.abilityActive? if battler.abilityActive?
if BattleHandlers.triggerCertainSwitchingUserAbility(battler.ability,battler,self) if BattleHandlers.triggerCertainSwitchingUserAbility(battler.ability, battler, self)
return true return true
end end
end end
if battler.itemActive? if battler.itemActive?
if BattleHandlers.triggerCertainSwitchingUserItem(battler.item,battler,self) if BattleHandlers.triggerCertainSwitchingUserItem(battler.item, battler, self)
return true return true
end end
end end
# Other certain switching effects # Other certain switching effects
return true if Settings::MORE_TYPE_EFFECTS && battler.pbHasType?(:GHOST) return true if Settings::MORE_TYPE_EFFECTS && battler.pbHasType?(:GHOST)
# Other certain trapping effects # Other certain trapping effects
if battler.effects[PBEffects::Trapping]>0 || if battler.effects[PBEffects::Trapping] > 0 ||
battler.effects[PBEffects::MeanLook]>=0 || battler.effects[PBEffects::MeanLook] >= 0 ||
battler.effects[PBEffects::Ingrain] || battler.effects[PBEffects::Ingrain] ||
@field.effects[PBEffects::FairyLock]>0 @field.effects[PBEffects::FairyLock] > 0
partyScene.pbDisplay(_INTL("{1} can't be switched out!",battler.pbThis)) if partyScene partyScene.pbDisplay(_INTL("{1} can't be switched out!", battler.pbThis)) if partyScene
return false return false
end end
# Trapping abilities/items # Trapping abilities/items
eachOtherSideBattler(idxBattler) do |b| eachOtherSideBattler(idxBattler) do |b|
next if !b.abilityActive? next if !b.abilityActive?
if BattleHandlers.triggerTrappingTargetAbility(b.ability,battler,b,self) if BattleHandlers.triggerTrappingTargetAbility(b.ability, battler, b, self)
partyScene.pbDisplay(_INTL("{1}'s {2} prevents switching!", partyScene.pbDisplay(_INTL("{1}'s {2} prevents switching!",
b.pbThis,b.abilityName)) if partyScene b.pbThis, b.abilityName)) if partyScene
return false return false
end end
end end
eachOtherSideBattler(idxBattler) do |b| eachOtherSideBattler(idxBattler) do |b|
next if !b.itemActive? next if !b.itemActive?
if BattleHandlers.triggerTrappingTargetItem(b.item,battler,b,self) if BattleHandlers.triggerTrappingTargetItem(b.item, battler, b, self)
partyScene.pbDisplay(_INTL("{1}'s {2} prevents switching!", partyScene.pbDisplay(_INTL("{1}'s {2} prevents switching!",
b.pbThis,b.itemName)) if partyScene b.pbThis, b.itemName)) if partyScene
return false return false
end end
end end
@@ -94,14 +94,14 @@ class PokeBattle_Battle
end end
def pbCanChooseNonActive?(idxBattler) def pbCanChooseNonActive?(idxBattler)
pbParty(idxBattler).each_with_index do |_pkmn,i| pbParty(idxBattler).each_with_index do |_pkmn, i|
return true if pbCanSwitchLax?(idxBattler,i) return true if pbCanSwitchLax?(idxBattler, i)
end end
return false return false
end end
def pbRegisterSwitch(idxBattler,idxParty) def pbRegisterSwitch(idxBattler, idxParty)
return false if !pbCanSwitch?(idxBattler,idxParty) return false if !pbCanSwitch?(idxBattler, idxParty)
@choices[idxBattler][0] = :SwitchOut @choices[idxBattler][0] = :SwitchOut
@choices[idxBattler][1] = idxParty # Party index of Pokémon to switch in @choices[idxBattler][1] = idxParty # Party index of Pokémon to switch in
@choices[idxBattler][2] = nil @choices[idxBattler][2] = nil
@@ -114,16 +114,16 @@ class PokeBattle_Battle
#============================================================================= #=============================================================================
# Open party screen and potentially choose a Pokémon to switch with. Used in # Open party screen and potentially choose a Pokémon to switch with. Used in
# all instances where the party screen is opened. # all instances where the party screen is opened.
def pbPartyScreen(idxBattler,checkLaxOnly=false,canCancel=false,shouldRegister=false) def pbPartyScreen(idxBattler, checkLaxOnly = false, canCancel = false, shouldRegister = false)
ret = -1 ret = -1
@scene.pbPartyScreen(idxBattler,canCancel) { |idxParty,partyScene| @scene.pbPartyScreen(idxBattler, canCancel) { |idxParty, partyScene|
if checkLaxOnly if checkLaxOnly
next false if !pbCanSwitchLax?(idxBattler,idxParty,partyScene) next false if !pbCanSwitchLax?(idxBattler, idxParty, partyScene)
else else
next false if !pbCanSwitch?(idxBattler,idxParty,partyScene) next false if !pbCanSwitch?(idxBattler, idxParty, partyScene)
end end
if shouldRegister if shouldRegister
next false if idxParty<0 || !pbRegisterSwitch(idxBattler,idxParty) next false if idxParty < 0 || !pbRegisterSwitch(idxBattler, idxParty)
end end
ret = idxParty ret = idxParty
next true next true
@@ -133,9 +133,9 @@ class PokeBattle_Battle
# For choosing a replacement Pokémon when prompted in the middle of other # For choosing a replacement Pokémon when prompted in the middle of other
# things happening (U-turn, Baton Pass, in def pbSwitch). # things happening (U-turn, Baton Pass, in def pbSwitch).
def pbSwitchInBetween(idxBattler,checkLaxOnly=false,canCancel=false) def pbSwitchInBetween(idxBattler, checkLaxOnly = false, canCancel = false)
return pbPartyScreen(idxBattler,checkLaxOnly,canCancel) if pbOwnedByPlayer?(idxBattler) return pbPartyScreen(idxBattler, checkLaxOnly, canCancel) if pbOwnedByPlayer?(idxBattler)
return @battleAI.pbDefaultChooseNewEnemy(idxBattler,pbParty(idxBattler)) return @battleAI.pbDefaultChooseNewEnemy(idxBattler, pbParty(idxBattler))
end end
#============================================================================= #=============================================================================
@@ -143,11 +143,11 @@ class PokeBattle_Battle
#============================================================================= #=============================================================================
# General switching method that checks if any Pokémon need to be sent out and, # General switching method that checks if any Pokémon need to be sent out and,
# if so, does. Called at the end of each round. # if so, does. Called at the end of each round.
def pbEORSwitch(favorDraws=false) def pbEORSwitch(favorDraws = false)
return if @decision>0 && !favorDraws return if @decision > 0 && !favorDraws
return if @decision==5 && favorDraws return if @decision == 5 && favorDraws
pbJudge pbJudge
return if @decision>0 return if @decision > 0
# Check through each fainted battler to see if that spot can be filled. # Check through each fainted battler to see if that spot can be filled.
switched = [] switched = []
loop do loop do
@@ -163,96 +163,99 @@ class PokeBattle_Battle
# NOTE: The player is only offered the chance to switch their own # NOTE: The player is only offered the chance to switch their own
# Pokémon when an opponent replaces a fainted Pokémon in single # Pokémon when an opponent replaces a fainted Pokémon in single
# battles. In double battles, etc. there is no such offer. # battles. In double battles, etc. there is no such offer.
if @internalBattle && @switchStyle && trainerBattle? && pbSideSize(0)==1 && if @internalBattle && @switchStyle && trainerBattle? && pbSideSize(0) == 1 &&
opposes?(idxBattler) && !@battlers[0].fainted? && !switched.include?(0) && opposes?(idxBattler) && !@battlers[0].fainted? && !switched.include?(0) &&
pbCanChooseNonActive?(0) && @battlers[0].effects[PBEffects::Outrage]==0 pbCanChooseNonActive?(0) && @battlers[0].effects[PBEffects::Outrage] == 0
idxPartyForName = idxPartyNew idxPartyForName = idxPartyNew
enemyParty = pbParty(idxBattler) enemyParty = pbParty(idxBattler)
if enemyParty[idxPartyNew].ability == :ILLUSION if enemyParty[idxPartyNew].ability == :ILLUSION
new_index = pbLastInTeam(idxBattler) new_index = pbLastInTeam(idxBattler)
idxPartyForName = new_index if new_index >= 0 && new_index != idxPartyNew idxPartyForName = new_index if new_index >= 0 && new_index != idxPartyNew
end end
if pbDisplayConfirm(_INTL("{1} is about to send in {2}. Will you switch your Pokémon?", switchMessageHard = _INTL("{1} is about to send in a new Pokémon. Will you switch your Pokémon?", opponent.fullname)
opponent.full_name, enemyParty[idxPartyForName].name)) switchMessageNormal = _INTL("{1} is about to send in {2}. Will you switch your Pokémon?", opponent.full_name, enemyParty[idxPartyForName].name)
idxPlayerPartyNew = pbSwitchInBetween(0,false,true) switchMessage = $game_switches[GAME_DIFFICULTY_HARD] ? switchMessageHard : switchMessageNormal
if idxPlayerPartyNew>=0 if pbDisplayConfirm(switchMessage)
idxPlayerPartyNew = pbSwitchInBetween(0, false, true)
if idxPlayerPartyNew >= 0
pbMessageOnRecall(@battlers[0]) pbMessageOnRecall(@battlers[0])
pbRecallAndReplace(0,idxPlayerPartyNew) pbRecallAndReplace(0, idxPlayerPartyNew)
switched.push(0) switched.push(0)
end end
end end
end end
pbRecallAndReplace(idxBattler,idxPartyNew) pbRecallAndReplace(idxBattler, idxPartyNew)
switched.push(idxBattler) switched.push(idxBattler)
elsif trainerBattle? # Player switches in in a trainer battle elsif trainerBattle? # Player switches in in a trainer battle
idxPlayerPartyNew = pbGetReplacementPokemonIndex(idxBattler) # Owner chooses idxPlayerPartyNew = pbGetReplacementPokemonIndex(idxBattler) # Owner chooses
pbRecallAndReplace(idxBattler,idxPlayerPartyNew) pbRecallAndReplace(idxBattler, idxPlayerPartyNew)
switched.push(idxBattler) switched.push(idxBattler)
else # Player's Pokémon has fainted in a wild battle else
# Player's Pokémon has fainted in a wild battle
switch = false switch = false
if !pbDisplayConfirm(_INTL("Use next Pokémon?")) if !pbDisplayConfirm(_INTL("Use next Pokémon?"))
switch = (pbRun(idxBattler,true)<=0) switch = (pbRun(idxBattler, true) <= 0)
else else
switch = true switch = true
end end
if switch if switch
idxPlayerPartyNew = pbGetReplacementPokemonIndex(idxBattler) # Owner chooses idxPlayerPartyNew = pbGetReplacementPokemonIndex(idxBattler) # Owner chooses
pbRecallAndReplace(idxBattler,idxPlayerPartyNew) pbRecallAndReplace(idxBattler, idxPlayerPartyNew)
switched.push(idxBattler) switched.push(idxBattler)
end end
end end
end end
break if switched.length==0 break if switched.length == 0
pbPriority(true).each do |b| pbPriority(true).each do |b|
b.pbEffectsOnSwitchIn(true) if switched.include?(b.index) b.pbEffectsOnSwitchIn(true) if switched.include?(b.index)
end end
end end
end end
def pbGetReplacementPokemonIndex(idxBattler,random=false) def pbGetReplacementPokemonIndex(idxBattler, random = false)
if random if random
return -1 if !pbCanSwitch?(idxBattler) # Can battler switch out? return -1 if !pbCanSwitch?(idxBattler) # Can battler switch out?
choices = [] # Find all Pokémon that can switch in choices = [] # Find all Pokémon that can switch in
eachInTeamFromBattlerIndex(idxBattler) do |_pkmn,i| eachInTeamFromBattlerIndex(idxBattler) do |_pkmn, i|
choices.push(i) if pbCanSwitchLax?(idxBattler,i) choices.push(i) if pbCanSwitchLax?(idxBattler, i)
end end
return -1 if choices.length==0 return -1 if choices.length == 0
return choices[pbRandom(choices.length)] return choices[pbRandom(choices.length)]
else else
return pbSwitchInBetween(idxBattler,true) return pbSwitchInBetween(idxBattler, true)
end end
end end
# Actually performs the recalling and sending out in all situations. # Actually performs the recalling and sending out in all situations.
def pbRecallAndReplace(idxBattler,idxParty,randomReplacement=false,batonPass=false) def pbRecallAndReplace(idxBattler, idxParty, randomReplacement = false, batonPass = false)
@scene.pbRecall(idxBattler) if !@battlers[idxBattler].fainted? @scene.pbRecall(idxBattler) if !@battlers[idxBattler].fainted?
@battlers[idxBattler].pbAbilitiesOnSwitchOut # Inc. primordial weather check @battlers[idxBattler].pbAbilitiesOnSwitchOut # Inc. primordial weather check
@scene.pbShowPartyLineup(idxBattler&1) if pbSideSize(idxBattler)==1 @scene.pbShowPartyLineup(idxBattler & 1) if pbSideSize(idxBattler) == 1
pbMessagesOnReplace(idxBattler,idxParty) if !randomReplacement pbMessagesOnReplace(idxBattler, idxParty) if !randomReplacement
pbReplace(idxBattler,idxParty,batonPass) pbReplace(idxBattler, idxParty, batonPass)
end end
def pbMessageOnRecall(battler) def pbMessageOnRecall(battler)
if battler.pbOwnedByPlayer? if battler.pbOwnedByPlayer?
if battler.hp<=battler.totalhp/4 if battler.hp <= battler.totalhp / 4
pbDisplayBrief(_INTL("Good job, {1}! Come back!",battler.name)) pbDisplayBrief(_INTL("Good job, {1}! Come back!", battler.name))
elsif battler.hp<=battler.totalhp/2 elsif battler.hp <= battler.totalhp / 2
pbDisplayBrief(_INTL("OK, {1}! Come back!",battler.name)) pbDisplayBrief(_INTL("OK, {1}! Come back!", battler.name))
elsif battler.turnCount>=5 elsif battler.turnCount >= 5
pbDisplayBrief(_INTL("{1}, that's enough! Come back!",battler.name)) pbDisplayBrief(_INTL("{1}, that's enough! Come back!", battler.name))
elsif battler.turnCount>=2 elsif battler.turnCount >= 2
pbDisplayBrief(_INTL("{1}, come back!",battler.name)) pbDisplayBrief(_INTL("{1}, come back!", battler.name))
else else
pbDisplayBrief(_INTL("{1}, switch out! Come back!",battler.name)) pbDisplayBrief(_INTL("{1}, switch out! Come back!", battler.name))
end end
else else
owner = pbGetOwnerName(battler.index) owner = pbGetOwnerName(battler.index)
pbDisplayBrief(_INTL("{1} withdrew {2}!",owner,battler.name)) pbDisplayBrief(_INTL("{1} withdrew {2}!", owner, battler.name))
end end
end end
# Only called from def pbRecallAndReplace and Battle Arena's def pbSwitch. # Only called from def pbRecallAndReplace and Battle Arena's def pbSwitch.
def pbMessagesOnReplace(idxBattler,idxParty) def pbMessagesOnReplace(idxBattler, idxParty)
party = pbParty(idxBattler) party = pbParty(idxBattler)
newPkmnName = party[idxParty].name newPkmnName = party[idxParty].name
if party[idxParty].ability == :ILLUSION if party[idxParty].ability == :ILLUSION
@@ -261,45 +264,45 @@ class PokeBattle_Battle
end end
if pbOwnedByPlayer?(idxBattler) if pbOwnedByPlayer?(idxBattler)
opposing = @battlers[idxBattler].pbDirectOpposing opposing = @battlers[idxBattler].pbDirectOpposing
if opposing.fainted? || opposing.hp==opposing.totalhp if opposing.fainted? || opposing.hp == opposing.totalhp
pbDisplayBrief(_INTL("You're in charge, {1}!",newPkmnName)) pbDisplayBrief(_INTL("You're in charge, {1}!", newPkmnName))
elsif opposing.hp>=opposing.totalhp/2 elsif opposing.hp >= opposing.totalhp / 2
pbDisplayBrief(_INTL("Go for it, {1}!",newPkmnName)) pbDisplayBrief(_INTL("Go for it, {1}!", newPkmnName))
elsif opposing.hp>=opposing.totalhp/4 elsif opposing.hp >= opposing.totalhp / 4
pbDisplayBrief(_INTL("Just a little more! Hang in there, {1}!",newPkmnName)) pbDisplayBrief(_INTL("Just a little more! Hang in there, {1}!", newPkmnName))
else else
pbDisplayBrief(_INTL("Your opponent's weak! Get 'em, {1}!",newPkmnName)) pbDisplayBrief(_INTL("Your opponent's weak! Get 'em, {1}!", newPkmnName))
end end
else else
owner = pbGetOwnerFromBattlerIndex(idxBattler) owner = pbGetOwnerFromBattlerIndex(idxBattler)
pbDisplayBrief(_INTL("{1} sent out {2}!",owner.full_name,newPkmnName)) pbDisplayBrief(_INTL("{1} sent out {2}!", owner.full_name, newPkmnName))
end end
end end
# Only called from def pbRecallAndReplace above and Battle Arena's def # Only called from def pbRecallAndReplace above and Battle Arena's def
# pbSwitch. # pbSwitch.
def pbReplace(idxBattler,idxParty,batonPass=false) def pbReplace(idxBattler, idxParty, batonPass = false)
party = pbParty(idxBattler) party = pbParty(idxBattler)
idxPartyOld = @battlers[idxBattler].pokemonIndex idxPartyOld = @battlers[idxBattler].pokemonIndex
# Initialise the new Pokémon # Initialise the new Pokémon
@battlers[idxBattler].pbInitialize(party[idxParty],idxParty,batonPass) @battlers[idxBattler].pbInitialize(party[idxParty], idxParty, batonPass)
# Reorder the party for this battle # Reorder the party for this battle
partyOrder = pbPartyOrder(idxBattler) partyOrder = pbPartyOrder(idxBattler)
partyOrder[idxParty],partyOrder[idxPartyOld] = partyOrder[idxPartyOld],partyOrder[idxParty] partyOrder[idxParty], partyOrder[idxPartyOld] = partyOrder[idxPartyOld], partyOrder[idxParty]
# Send out the new Pokémon # Send out the new Pokémon
pbSendOut([[idxBattler,party[idxParty]]]) pbSendOut([[idxBattler, party[idxParty]]])
pbCalculatePriority(false,[idxBattler]) if Settings::RECALCULATE_TURN_ORDER_AFTER_SPEED_CHANGES pbCalculatePriority(false, [idxBattler]) if Settings::RECALCULATE_TURN_ORDER_AFTER_SPEED_CHANGES
end end
# Called from def pbReplace above and at the start of battle. # Called from def pbReplace above and at the start of battle.
# sendOuts is an array; each element is itself an array: [idxBattler,pkmn] # sendOuts is an array; each element is itself an array: [idxBattler,pkmn]
def pbSendOut(sendOuts,startBattle=false) def pbSendOut(sendOuts, startBattle = false)
sendOuts.each { |b| @peer.pbOnEnteringBattle(self,b[1]) } sendOuts.each { |b| @peer.pbOnEnteringBattle(self, b[1]) }
@scene.pbSendOutBattlers(sendOuts,startBattle) @scene.pbSendOutBattlers(sendOuts, startBattle)
sendOuts.each do |b| sendOuts.each do |b|
@scene.pbResetMoveIndex(b[0]) @scene.pbResetMoveIndex(b[0])
#pbSetSeen(@battlers[b[0]]) #pbSetSeen(@battlers[b[0]])
@usedInBattle[b[0]&1][b[0]/2] = true @usedInBattle[b[0] & 1][b[0] / 2] = true
end end
end end
@@ -321,7 +324,7 @@ class PokeBattle_Battle
return false if battler.fainted? return false if battler.fainted?
# Introduce Shadow Pokémon # Introduce Shadow Pokémon
if battler.opposes? && battler.shadowPokemon? if battler.opposes? && battler.shadowPokemon?
pbCommonAnimation("Shadow",battler) pbCommonAnimation("Shadow", battler)
pbDisplay(_INTL("Oh!\nA Shadow Pokémon!")) pbDisplay(_INTL("Oh!\nA Shadow Pokémon!"))
end end
# Record money-doubling effect of Amulet Coin/Luck Incense # Record money-doubling effect of Amulet Coin/Luck Incense
@@ -332,16 +335,16 @@ class PokeBattle_Battle
eachBattler { |b| b.pbUpdateParticipants } eachBattler { |b| b.pbUpdateParticipants }
# Healing Wish # Healing Wish
if @positions[battler.index].effects[PBEffects::HealingWish] if @positions[battler.index].effects[PBEffects::HealingWish]
pbCommonAnimation("HealingWish",battler) pbCommonAnimation("HealingWish", battler)
pbDisplay(_INTL("The healing wish came true for {1}!",battler.pbThis(true))) pbDisplay(_INTL("The healing wish came true for {1}!", battler.pbThis(true)))
battler.pbRecoverHP(battler.totalhp) battler.pbRecoverHP(battler.totalhp)
battler.pbCureStatus(false) battler.pbCureStatus(false)
@positions[battler.index].effects[PBEffects::HealingWish] = false @positions[battler.index].effects[PBEffects::HealingWish] = false
end end
# Lunar Dance # Lunar Dance
if @positions[battler.index].effects[PBEffects::LunarDance] if @positions[battler.index].effects[PBEffects::LunarDance]
pbCommonAnimation("LunarDance",battler) pbCommonAnimation("LunarDance", battler)
pbDisplay(_INTL("{1} became cloaked in mystical moonlight!",battler.pbThis)) pbDisplay(_INTL("{1} became cloaked in mystical moonlight!", battler.pbThis))
battler.pbRecoverHP(battler.totalhp) battler.pbRecoverHP(battler.totalhp)
battler.pbCureStatus(false) battler.pbCureStatus(false)
battler.eachMove { |m| m.pp = m.total_pp } battler.eachMove { |m| m.pp = m.total_pp }
@@ -356,8 +359,8 @@ class PokeBattle_Battle
if !Effectiveness.ineffective?(eff) if !Effectiveness.ineffective?(eff)
eff = eff.to_f / Effectiveness::NORMAL_EFFECTIVE eff = eff.to_f / Effectiveness::NORMAL_EFFECTIVE
oldHP = battler.hp oldHP = battler.hp
battler.pbReduceHP(battler.totalhp*eff/8,false) battler.pbReduceHP(battler.totalhp * eff / 8, false)
pbDisplay(_INTL("Pointed stones dug into {1}!",battler.pbThis)) pbDisplay(_INTL("Pointed stones dug into {1}!", battler.pbThis))
battler.pbItemHPHealCheck battler.pbItemHPHealCheck
if battler.pbAbilitiesOnDamageTaken(oldHP) # Switched out if battler.pbAbilitiesOnDamageTaken(oldHP) # Switched out
return pbOnActiveOne(battler) # For replacement battler return pbOnActiveOne(battler) # For replacement battler
@@ -365,37 +368,37 @@ class PokeBattle_Battle
end end
end end
# Spikes # Spikes
if battler.pbOwnSide.effects[PBEffects::Spikes]>0 && battler.takesIndirectDamage? && if battler.pbOwnSide.effects[PBEffects::Spikes] > 0 && battler.takesIndirectDamage? &&
!battler.airborne? !battler.airborne?
spikesDiv = [8,6,4][battler.pbOwnSide.effects[PBEffects::Spikes]-1] spikesDiv = [8, 6, 4][battler.pbOwnSide.effects[PBEffects::Spikes] - 1]
oldHP = battler.hp oldHP = battler.hp
battler.pbReduceHP(battler.totalhp/spikesDiv,false) battler.pbReduceHP(battler.totalhp / spikesDiv, false)
pbDisplay(_INTL("{1} is hurt by the spikes!",battler.pbThis)) pbDisplay(_INTL("{1} is hurt by the spikes!", battler.pbThis))
battler.pbItemHPHealCheck battler.pbItemHPHealCheck
if battler.pbAbilitiesOnDamageTaken(oldHP) # Switched out if battler.pbAbilitiesOnDamageTaken(oldHP) # Switched out
return pbOnActiveOne(battler) # For replacement battler return pbOnActiveOne(battler) # For replacement battler
end end
end end
# Toxic Spikes # Toxic Spikes
if battler.pbOwnSide.effects[PBEffects::ToxicSpikes]>0 && !battler.fainted? && if battler.pbOwnSide.effects[PBEffects::ToxicSpikes] > 0 && !battler.fainted? &&
!battler.airborne? !battler.airborne?
if battler.pbHasType?(:POISON) if battler.pbHasType?(:POISON)
battler.pbOwnSide.effects[PBEffects::ToxicSpikes] = 0 battler.pbOwnSide.effects[PBEffects::ToxicSpikes] = 0
pbDisplay(_INTL("{1} absorbed the poison spikes!",battler.pbThis)) pbDisplay(_INTL("{1} absorbed the poison spikes!", battler.pbThis))
elsif battler.pbCanPoison?(nil,false) elsif battler.pbCanPoison?(nil, false)
if battler.pbOwnSide.effects[PBEffects::ToxicSpikes]==2 if battler.pbOwnSide.effects[PBEffects::ToxicSpikes] == 2
battler.pbPoison(nil,_INTL("{1} was badly poisoned by the poison spikes!",battler.pbThis),true) battler.pbPoison(nil, _INTL("{1} was badly poisoned by the poison spikes!", battler.pbThis), true)
else else
battler.pbPoison(nil,_INTL("{1} was poisoned by the poison spikes!",battler.pbThis)) battler.pbPoison(nil, _INTL("{1} was poisoned by the poison spikes!", battler.pbThis))
end end
end end
end end
# Sticky Web # Sticky Web
if battler.pbOwnSide.effects[PBEffects::StickyWeb] && !battler.fainted? && if battler.pbOwnSide.effects[PBEffects::StickyWeb] && !battler.fainted? &&
!battler.airborne? !battler.airborne?
pbDisplay(_INTL("{1} was caught in a sticky web!",battler.pbThis)) pbDisplay(_INTL("{1} was caught in a sticky web!", battler.pbThis))
if battler.pbCanLowerStatStage?(:SPEED) if battler.pbCanLowerStatStage?(:SPEED)
battler.pbLowerStatStage(:SPEED,1,nil) battler.pbLowerStatStage(:SPEED, 1, nil)
battler.pbItemStatRestoreCheck battler.pbItemStatRestoreCheck
end end
end end

View File

@@ -64,6 +64,9 @@ class Trainer
end end
def skill_level def skill_level
if $game_switches[GAME_DIFFICULTY_HARD]
return 100
end
return GameData::TrainerType.get(@trainer_type).skill_level; return GameData::TrainerType.get(@trainer_type).skill_level;
end end

View File

@@ -396,13 +396,13 @@ class PokemonOption_Scene
end end
if $game_switches && $game_switches[GOT_BADGE_5] #badge for Surf # if $game_switches && $game_switches[GOT_BADGE_5] #badge for Surf
@PokemonOptions << @PokemonOptions <<
EnumOption.new(_INTL("Quick Surf"), [_INTL("Off"), _INTL("On")], EnumOption.new(_INTL("Quick Surf"), [_INTL("Off"), _INTL("On")],
proc { $PokemonSystem.quicksurf }, proc { $PokemonSystem.quicksurf },
proc { |value| $PokemonSystem.quicksurf = value } proc { |value| $PokemonSystem.quicksurf = value }
) )
end # end
@PokemonOptions = pbAddOnOptions(@PokemonOptions) @PokemonOptions = pbAddOnOptions(@PokemonOptions)
@sprites["option"] = Window_PokemonOption.new(@PokemonOptions, 0, @sprites["option"] = Window_PokemonOption.new(@PokemonOptions, 0,

Binary file not shown.