Rearranged settings

This commit is contained in:
Maruno17
2021-01-02 21:08:47 +00:00
parent 63e257323b
commit d4a7de4bdd
38 changed files with 626 additions and 593 deletions

View File

@@ -1,90 +1,61 @@
#==============================================================================# #==============================================================================#
# Pokémon Essentials # # Pokémon Essentials #
# Version 18.1.dev # # Version 18.1.dev #
# https://github.com/Maruno17/pokemon-essentials #
#==============================================================================# #==============================================================================#
# The generation that the battle system follows. Used throughout the battle
# scripts, and also by some other settings which are used in and out of battle
# (you can of course change those settings to suit your game).
# Note that this isn't perfect. Essentials doesn't accurately replicate every
# single generation's mechanics. It's considered to be good enough. Only
# generations 5 and later are reasonably supported.
MECHANICS_GENERATION = 7
#=============================================================================== #===============================================================================
# * The default screen width (at a scale of 1.0).
# * The default screen height (at a scale of 1.0). # The default screen width (at a scale of 1.0).
# * The default screen scale factor. Possible values are 0.5, 1.0, 1.5 and 2.0.
# * Map view mode (0=original, 1=custom, 2=perspective).
#===============================================================================
SCREEN_WIDTH = 512 SCREEN_WIDTH = 512
# The default screen height (at a scale of 1.0).
SCREEN_HEIGHT = 384 SCREEN_HEIGHT = 384
# The default screen scale factor. Possible values are 0.5, 1.0, 1.5 and 2.0.
SCREEN_SCALE = 1.0 SCREEN_SCALE = 1.0
# Map view mode (0=original, 1=custom, 2=perspective).
MAP_VIEW_MODE = 1 MAP_VIEW_MODE = 1
# To forbid the player from changing the screen size themselves, quote out or
# delete the relevant bit of code in the PScreen_Options script section.
#=============================================================================== #===============================================================================
# * The maximum level Pokémon can reach.
# * The level of newly hatched Pokémon. # The maximum level Pokémon can reach.
# * The odds of a newly generated Pokémon being shiny (out of 65536).
# * The odds of a wild Pokémon/bred egg having Pokérus (out of 65536).
#===============================================================================
MAXIMUM_LEVEL = 100 MAXIMUM_LEVEL = 100
# The level of newly hatched Pokémon.
EGG_LEVEL = 1 EGG_LEVEL = 1
SHINY_POKEMON_CHANCE = 8 # The odds of a newly generated Pokémon being shiny (out of 65536).
SHINY_POKEMON_CHANCE = (MECHANICS_GENERATION >= 6) ? 16 : 8
# The odds of a wild Pokémon/bred egg having Pokérus (out of 65536).
POKERUS_CHANCE = 3 POKERUS_CHANCE = 3
# Whether a bred baby Pokémon can inherit any TM/HM moves from its father. It
# can never inherit TM/HM moves from its mother.
BREEDING_CAN_INHERIT_MACHINE_MOVES = (MECHANICS_GENERATION <= 5)
# Whether a bred baby Pokémon can inherit egg moves from its mother. It can
# always inherit egg moves from its father.
BREEDING_CAN_INHERIT_EGG_MOVES_FROM_MOTHER = (MECHANICS_GENERATION >= 6)
#=============================================================================== #===============================================================================
# * Whether outdoor maps should be shaded according to the time of day.
#===============================================================================
TIME_SHADING = true
#=============================================================================== # The amount of money the player starts the game with.
# * Whether poisoned Pokémon will lose HP while walking around in the field.
# * Whether poisoned Pokémon will faint while walking around in the field
# (true), or survive the poisoning with 1HP (false).
# * Whether fishing automatically hooks the Pokémon (if false, there is a
# reaction test first).
# * Whether the player can surface from anywhere while diving (true), or only in
# spots where they could dive down from above (false).
# * Whether planted berries grow according to Gen 4 mechanics (true) or Gen 3
# mechanics (false).
# * Whether TMs can be used infinitely as in Gen 5 (true), or are one-use-only
# as in older Gens (false).
#===============================================================================
POISON_IN_FIELD = true
POISON_FAINT_IN_FIELD = false
FISHING_AUTO_HOOK = false
DIVING_SURFACE_ANYWHERE = false
NEW_BERRY_PLANTS = true
INFINITE_TMS = true
#===============================================================================
# * The number of steps allowed before a Safari Zone game is over (0=infinite).
# * The number of seconds a Bug Catching Contest lasts for (0=infinite).
#===============================================================================
SAFARI_STEPS = 600
BUG_CONTEST_TIME = 1200
#===============================================================================
# * Pairs of map IDs, where the location signpost isn't shown when moving from
# one of the maps in a pair to the other (and vice versa). Useful for
# single long routes/towns that are spread over multiple maps.
# e.g. [4,5,16,17,42,43] will be map pairs 4,5 and 16,17 and 42,43.
# Moving between two maps that have the exact same name won't show the
# location signpost anyway, so you don't need to list those maps here.
#===============================================================================
NO_SIGNPOSTS = []
#===============================================================================
# * The amount of money the player starts the game with.
# * The maximum amount of money the player can have.
# * The maximum number of Game Corner coins the player can have.
# * The maximum length, in characters, that the player's name can be.
#===============================================================================
INITIAL_MONEY = 3000 INITIAL_MONEY = 3000
# The maximum amount of money the player can have.
MAX_MONEY = 999_999 MAX_MONEY = 999_999
# The maximum number of Game Corner coins the player can have.
MAX_COINS = 99_999 MAX_COINS = 99_999
# The maximum length, in characters, that the player's name can be.
MAX_PLAYER_NAME_SIZE = 10 MAX_PLAYER_NAME_SIZE = 10
#=============================================================================== #===============================================================================
# * A set of arrays each containing a trainer type followed by a Global Variable
# number. If the variable isn't set to 0, then all trainers with the # A set of arrays each containing a trainer type followed by a Global Variable
# associated trainer type will be named as whatever is in that variable. # number. If the variable isn't set to 0, then all trainers with the associated
#=============================================================================== # trainer type will be named as whatever is in that variable.
RIVAL_NAMES = [ RIVAL_NAMES = [
[:RIVAL1, 12], [:RIVAL1, 12],
[:RIVAL2, 12], [:RIVAL2, 12],
@@ -92,68 +63,93 @@ RIVAL_NAMES = [
] ]
#=============================================================================== #===============================================================================
# * The minimum number of badges required to boost each stat of a player's
# Pokémon by 1.1x, while using moves in battle only. # Whether outdoor maps should be shaded according to the time of day.
# * Whether the badge restriction on using certain hidden moves is either owning TIME_SHADING = true
# at least a certain number of badges (true), or owning a particular badge
# (false).
# * Depending on FIELD_MOVES_COUNT_BADGES, either the number of badges required
# to use each hidden move, or the specific badge number required to use
# each move. Remember that badge 0 is the first badge, badge 1 is the
# second badge, etc.
# e.g. To require the second badge, put false and 1.
# To require at least 2 badges, put true and 2.
#=============================================================================== #===============================================================================
NUM_BADGES_BOOST_ATTACK = 1
NUM_BADGES_BOOST_DEFENSE = 5 # Whether poisoned Pokémon will lose HP while walking around in the field.
NUM_BADGES_BOOST_SPATK = 7 POISON_IN_FIELD = (MECHANICS_GENERATION <= 4)
NUM_BADGES_BOOST_SPDEF = 7 # Whether poisoned Pokémon will faint while walking around in the field (true),
NUM_BADGES_BOOST_SPEED = 3 # or survive the poisoning with 1 HP (false).
POISON_FAINT_IN_FIELD = (MECHANICS_GENERATION <= 3)
# Whether planted berries grow according to Gen 4 mechanics (true) or Gen 3
# mechanics (false).
NEW_BERRY_PLANTS = (MECHANICS_GENERATION >= 4)
# Whether fishing automatically hooks the Pokémon (if false, there is a reaction
# test first).
FISHING_AUTO_HOOK = false
# The ID of the common event that runs when the player starts fishing (runs
# instead of showing the casting animation).
FISHING_BEGIN_COMMON_EVENT = -1
# The ID of the common event that runs when the player stops fishing (runs
# instead of showing the reeling in animation).
FISHING_END_COMMON_EVENT = -1
#===============================================================================
# The number of steps allowed before a Safari Zone game is over (0=infinite).
SAFARI_STEPS = 600
# The number of seconds a Bug Catching Contest lasts for (0=infinite).
BUG_CONTEST_TIME = 1200
#===============================================================================
# Pairs of map IDs, where the location signpost isn't shown when moving from one
# of the maps in a pair to the other (and vice versa). Useful for single long
# routes/towns that are spread over multiple maps.
# e.g. [4,5,16,17,42,43] will be map pairs 4,5 and 16,17 and 42,43.
# Moving between two maps that have the exact same name won't show the location
# signpost anyway, so you don't need to list those maps here.
NO_SIGNPOSTS = []
#===============================================================================
# Whether the badge restriction on using certain hidden moves is owning at least
# a certain number of badges (true), or owning a particular badge (false).
FIELD_MOVES_COUNT_BADGES = true FIELD_MOVES_COUNT_BADGES = true
BADGE_FOR_CUT = 1 # Depending on FIELD_MOVES_COUNT_BADGES, either the number of badges required to
BADGE_FOR_FLASH = 2 # use each hidden move, or the specific badge number required to use each move.
BADGE_FOR_ROCKSMASH = 3 # Remember that badge 0 is the first badge, badge 1 is the second badge, etc.
BADGE_FOR_SURF = 4 # e.g. To require the second badge, put false and 1.
BADGE_FOR_FLY = 5 # To require at least 2 badges, put true and 2.
BADGE_FOR_STRENGTH = 6 BADGE_FOR_CUT = 1
BADGE_FOR_DIVE = 7 BADGE_FOR_FLASH = 2
BADGE_FOR_WATERFALL = 8 BADGE_FOR_ROCKSMASH = 3
BADGE_FOR_SURF = 4
BADGE_FOR_FLY = 5
BADGE_FOR_STRENGTH = 6
BADGE_FOR_DIVE = 7
BADGE_FOR_WATERFALL = 8
#=============================================================================== #===============================================================================
# * Whether a move's physical/special category depends on the move itself as in
# newer Gens (true), or on its type as in older Gens (false). # If a move taught by a TM/HM/TR replaces another move, this setting is whether
# * Whether the battle mechanics mimic Gen 5 (false) or Gen 7 (true). # the machine's move retains the replaced move's PP (true) or whether the
# * Whether the Exp gained from beating a Pokémon should be scaled depending on # machine's move has full PP (false).
# the gainer's level as in Gens 5/7 (true) or not as in other Gens (false). TAUGHT_MACHINES_KEEP_OLD_PP = (MECHANICS_GENERATION == 5)
# * Whether the Exp gained from beating a Pokémon should be divided equally # Whether Black/White Flute raise/lower the levels of wild Pokémon respectively
# between each participant (true), or whether each participant should gain # (true) or lower/raise the wild encounter rate respectively (false).
# that much Exp (false). This also applies to Exp gained via the Exp Share FLUTES_CHANGE_WILD_ENCOUNTER_LEVELS = (MECHANICS_GENERATION >= 6)
# (held item version) being distributed to all Exp Share holders. This is # Whether Repel uses the level of the first Pokémon in the party regardless of
# true in Gen 6 and false otherwise. # its HP (true) or uses the level of the first unfainted Pokémon (false)
# * Whether the critical capture mechanic applies (true) or not (false). Note REPEL_COUNTS_FAINTED_POKEMON = (MECHANICS_GENERATION >= 6)
# that it is based on a total of 600+ species (i.e. that many species need # Whether Rage Candy Bar acts as a Full Heal (true) or a Potion (false).
# to be caught to provide the greatest critical capture chance of 2.5x), RAGE_CANDY_BAR_CURES_STATUS_PROBLEMS = (MECHANICS_GENERATION >= 7)
# and there may be fewer species in your game.
# * Whether Pokémon gain Exp for capturing a Pokémon (true) or not (false).
# * An array of items which act as Mega Rings for the player (NPCs don't need a
# Mega Ring item, just a Mega Stone held by their Pokémon).
#===============================================================================
MOVE_CATEGORY_PER_MOVE = true
NEWEST_BATTLE_MECHANICS = true
SCALED_EXP_FORMULA = true
SPLIT_EXP_BETWEEN_GAINERS = false
ENABLE_CRITICAL_CAPTURES = false
GAIN_EXP_FOR_CAPTURE = true
MEGA_RINGS = [:MEGARING, :MEGABRACELET, :MEGACUFF, :MEGACHARM]
#=============================================================================== #===============================================================================
# * The names of each pocket of the Bag. Leave the first entry blank.
# * The maximum number of slots per pocket (-1 means infinite number). Ignore # The name of the person who created the Pokémon storage system.
# the first number (0). def pbStorageCreator
# * The maximum number of items each slot in the Bag can hold. return _INTL("Bill")
# * Whether each pocket in turn auto-sorts itself by item ID number. Ignore the end
# first entry (the 0). # The number of boxes in Pokémon storage.
NUM_STORAGE_BOXES = 30
#=============================================================================== #===============================================================================
# The names of each pocket of the Bag. Leave the first entry blank.
def pbPocketNames; return ["", def pbPocketNames; return ["",
_INTL("Items"), _INTL("Items"),
_INTL("Medicine"), _INTL("Medicine"),
@@ -163,81 +159,66 @@ def pbPocketNames; return ["",
_INTL("Mail"), _INTL("Mail"),
_INTL("Battle Items"), _INTL("Battle Items"),
_INTL("Key Items") _INTL("Key Items")
]; end ]; end
# The maximum number of slots per pocket (-1 means infinite number). Ignore 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]
# The maximum number of items each slot in the Bag can hold.
BAG_MAX_PER_SLOT = 999 BAG_MAX_PER_SLOT = 999
# Whether each pocket in turn auto-sorts itself by item ID number. Ignore the
# first entry (the 0).
BAG_POCKET_AUTO_SORT = [0, false, false, false, true, true, false, false, false] BAG_POCKET_AUTO_SORT = [0, false, false, false, true, true, false, false, false]
#=============================================================================== #===============================================================================
# * A set of arrays each containing details of a graphic to be shown on the
# region map if appropriate. The values for each array are as follows: # Whether the Pokédex list shown is the one for the player's current region
# - Region number. # (true), or whether a menu pops up for the player to manually choose which Dex
# - Global Switch; the graphic is shown if this is ON (non-wall maps only). # list to view if more than one is available (false).
# - X coordinate of the graphic on the map, in squares. USE_CURRENT_REGION_DEX = false
# - Y coordinate of the graphic on the map, in squares. # The names of each Dex list in the game, in order and with National Dex at the
# - Name of the graphic, found in the Graphics/Pictures folder. # end. This is also the order that $PokemonGlobal.pokedexUnlocked is in, which
# - The graphic will always (true) or never (false) be shown on a wall map. # records which Dexes have been unlocked (first is unlocked by default).
# You can define which region a particular Dex list is linked to. This means the
# area map shown while viewing that Dex list will ALWAYS be that of the defined
# region, rather than whichever region the player is currently in. To define
# this, put the Dex name and the region number in an array, like the Kanto and
# Johto Dexes are. The National Dex isn't in an array with a region number,
# therefore its area map is whichever region the player is currently in.
def pbDexNames; return [
[_INTL("Kanto Pokédex"), 0],
[_INTL("Johto Pokédex"), 1],
_INTL("National Pokédex")
]; end
# 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 whether
# each form needs to be seen specifically before that form appears in the
# Pokédex (false).
DEX_SHOWS_ALL_FORMS = false
# An array of numbers, where each number is that of a Dex list (National Dex is
# -1). All Dex lists included here have the species numbers in them reduced by
# 1, thus making the first listed species have a species number of 0 (e.g.
# Victini in Unova's Dex).
DEXES_WITH_OFFSETS = []
#=============================================================================== #===============================================================================
# A set of arrays each containing details of a graphic to be shown on the region
# map if appropriate. The values for each array are as follows:
# - Region number.
# - Global Switch; the graphic is shown if this is ON (non-wall maps only).
# - X coordinate of the graphic on the map, in squares.
# - Y coordinate of the graphic on the map, in squares.
# - Name of the graphic, found in the Graphics/Pictures folder.
# - The graphic will always (true) or never (false) be shown on a wall map.
REGION_MAP_EXTRAS = [ REGION_MAP_EXTRAS = [
[0, 51, 16, 15, "mapHiddenBerth", false], [0, 51, 16, 15, "mapHiddenBerth", false],
[0, 52, 20, 14, "mapHiddenFaraday", false] [0, 52, 20, 14, "mapHiddenFaraday", false]
] ]
#=============================================================================== #===============================================================================
# * The name of the person who created the Pokémon storage system.
# * The number of boxes in Pokémon storage.
#===============================================================================
def pbStorageCreator
return _INTL("Bill")
end
NUM_STORAGE_BOXES = 30
#=============================================================================== # A list of maps used by roaming Pokémon. Each map has an array of other maps it
# * Whether the Pokédex list shown is the one for the player's current region # can lead to.
# (true), or whether a menu pops up for the player to manually choose which
# Dex list to view if more than one is available (false).
# * The names of each Dex list in the game, in order and with National Dex at
# the end. This is also the order that $PokemonGlobal.pokedexUnlocked is
# in, which records which Dexes have been unlocked (first is unlocked by
# default).
# You can define which region a particular Dex list is linked to. This
# means the area map shown while viewing that Dex list will ALWAYS be that
# of the defined region, rather than whichever region the player is
# currently in. To define this, put the Dex name and the region number in
# an array, like the Kanto and Johto Dexes are. The National Dex isn't in
# an array with a region number, therefore its area map is whichever region
# the player is currently in.
# * 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
# whether each form needs to be seen specifically before that form appears
# in the Pokédex (false).
# * An array of numbers, where each number is that of a Dex list (National Dex
# is -1). All Dex lists included here have the species numbers in them
# reduced by 1, thus making the first listed species have a species number
# of 0 (e.g. Victini in Unova's Dex).
#===============================================================================
USE_CURRENT_REGION_DEX = false
def pbDexNames; return [
[_INTL("Kanto Pokédex"), 0],
[_INTL("Johto Pokédex"), 1],
_INTL("National Pokédex")
]; end
DEX_SHOWS_ALL_FORMS = false
DEXES_WITH_OFFSETS = []
#===============================================================================
# * A list of maps used by roaming Pokémon. Each map has an array of other maps
# it can lead to.
# * A set of arrays each containing the details of a roaming Pokémon. The
# information within is as follows:
# - Species.
# - Level.
# - Global Switch; the Pokémon roams while this is ON.
# - Encounter type (0=any, 1=grass/walking in cave, 2=surfing, 3=fishing,
# 4=surfing/fishing). See bottom of PField_RoamingPokemon for lists.
# - Name of BGM to play for that encounter (optional).
# - Roaming areas specifically for this Pokémon (optional).
#===============================================================================
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],
@@ -250,6 +231,15 @@ ROAMING_AREAS = {
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
# information within is as follows:
# - Species.
# - Level.
# - Global Switch; the Pokémon roams while this is ON.
# - Encounter type (0=any, 1=grass/walking in cave, 2=surfing, 3=fishing,
# 4=surfing/fishing). See bottom of PField_RoamingPokemon for lists.
# - Name of BGM to play for that encounter (optional).
# - Roaming areas specifically for this Pokémon (optional).
ROAMING_SPECIES = [ ROAMING_SPECIES = [
[:LATIAS, 30, 53, 0, "Battle roaming"], [:LATIAS, 30, 53, 0, "Battle roaming"],
[:LATIOS, 30, 53, 0, "Battle roaming"], [:LATIOS, 30, 53, 0, "Battle roaming"],
@@ -263,14 +253,14 @@ ROAMING_SPECIES = [
] ]
#=============================================================================== #===============================================================================
# * A set of arrays each containing details of a wild encounter that can only
# occur via using the Poké Radar. The information within is as follows: # A set of arrays each containing details of a wild encounter that can only
# - Map ID on which this encounter can occur. # occur via using the Poké Radar. The information within is as follows:
# - Probability that this encounter will occur (as a percentage). # - Map ID on which this encounter can occur.
# - Species. # - Probability that this encounter will occur (as a percentage).
# - Minimum possible level. # - Species.
# - Maximum possible level (optional). # - Minimum possible level.
#=============================================================================== # - Maximum possible level (optional).
POKE_RADAR_ENCOUNTERS = [ POKE_RADAR_ENCOUNTERS = [
[5, 20, :STARLY, 12, 15], [5, 20, :STARLY, 12, 15],
[21, 10, :STANTLER, 14], [21, 10, :STANTLER, 14],
@@ -279,64 +269,114 @@ POKE_RADAR_ENCOUNTERS = [
] ]
#=============================================================================== #===============================================================================
# * The Global Switch that is set to ON when the player whites out.
# * The Global Switch that is set to ON when the player has seen Pokérus in the # The Game Switch that is set to ON when the player blacks out.
# Poké Center, and doesn't need to be told about it again.
# * The Global Switch which, while ON, makes all wild Pokémon created be
# shiny.
# * The Global Switch which, while ON, makes all Pokémon created considered to
# be met via a fateful encounter.
# * The Global Switch which determines whether the player will lose money if
# they lose a battle (they can still gain money from trainers for winning).
# * The Global Switch which, while ON, prevents all Pokémon in battle from Mega
# Evolving even if they otherwise could.
#===============================================================================
STARTING_OVER_SWITCH = 1 STARTING_OVER_SWITCH = 1
# The Game Switch that is set to ON when the player has seen Pokérus in the Poké
# Center, and doesn't need to be told about it again.
SEEN_POKERUS_SWITCH = 2 SEEN_POKERUS_SWITCH = 2
# The Game Switch which, while ON, makes all wild Pokémon created be shiny.
SHINY_WILD_POKEMON_SWITCH = 31 SHINY_WILD_POKEMON_SWITCH = 31
# The Game Switch which, while ON, makes all Pokémon created considered to be
# met via a fateful encounter.
FATEFUL_ENCOUNTER_SWITCH = 32 FATEFUL_ENCOUNTER_SWITCH = 32
NO_MONEY_LOSS = 33
NO_MEGA_EVOLUTION = 34
#=============================================================================== #===============================================================================
# * The ID of the common event that runs when the player starts fishing (runs
# instead of showing the casting animation).
# * The ID of the common event that runs when the player stops fishing (runs
# instead of showing the reeling in animation).
#===============================================================================
FISHING_BEGIN_COMMON_EVENT = -1
FISHING_END_COMMON_EVENT = -1
#=============================================================================== # ID of the animation played when the player steps on grass (grass rustling).
# * The ID of the animation played when the player steps on grass (shows grass
# rustling).
# * The ID of the animation played when the player lands on the ground after
# hopping over a ledge (shows a dust impact).
# * The ID of the animation played when a trainer notices the player (an
# exclamation bubble).
# * The ID of the animation played when a patch of grass rustles due to using
# the Poké Radar.
# * The ID of the animation played when a patch of grass rustles vigorously due
# to using the Poké Radar. (Rarer species)
# * The ID of the animation played when a patch of grass rustles and shines due
# to using the Poké Radar. (Shiny encounter)
# * The ID of the animation played when a berry tree grows a stage while the
# player is on the map (for new plant growth mechanics only).
#===============================================================================
GRASS_ANIMATION_ID = 1 GRASS_ANIMATION_ID = 1
# ID of the animation played when the player lands on the ground after hopping
# over a ledge (shows a dust impact).
DUST_ANIMATION_ID = 2 DUST_ANIMATION_ID = 2
# ID of the animation played when a trainer notices the player (an exclamation
# bubble).
EXCLAMATION_ANIMATION_ID = 3 EXCLAMATION_ANIMATION_ID = 3
# ID of the animation played when a patch of grass rustles due to using the Poké
# Radar.
RUSTLE_NORMAL_ANIMATION_ID = 1 RUSTLE_NORMAL_ANIMATION_ID = 1
# ID of the animation played when a patch of grass rustles vigorously due to
# using the Poké Radar. (Rarer species)
RUSTLE_VIGOROUS_ANIMATION_ID = 5 RUSTLE_VIGOROUS_ANIMATION_ID = 5
# ID of the animation played when a patch of grass rustles and shines due to
# using the Poké Radar. (Shiny encounter)
RUSTLE_SHINY_ANIMATION_ID = 6 RUSTLE_SHINY_ANIMATION_ID = 6
# ID of the animation played when a berry tree grows a stage while the player is
# on the map (for new plant growth mechanics only).
PLANT_SPARKLE_ANIMATION_ID = 7 PLANT_SPARKLE_ANIMATION_ID = 7
#=============================================================================== #===============================================================================
# * An array of available languages in the game, and their corresponding
# message file in the Data folder. Edit only if you have 2 or more # An array of available languages in the game, and their corresponding message
# languages to choose from. # file in the Data folder. Edit only if you have 2 or more languages to choose
#=============================================================================== # from.
LANGUAGES = [ LANGUAGES = [
# ["English", "english.dat"], # ["English", "english.dat"],
# ["Deutsch", "deutsch.dat"] # ["Deutsch", "deutsch.dat"]
] ]
#===============================================================================
# Available speech frames. These are graphic files in "Graphics/Windowskins/".
$SpeechFrames = [
"speech hgss 1",
"speech hgss 2",
"speech hgss 3",
"speech hgss 4",
"speech hgss 5",
"speech hgss 6",
"speech hgss 7",
"speech hgss 8",
"speech hgss 9",
"speech hgss 10",
"speech hgss 11",
"speech hgss 12",
"speech hgss 13",
"speech hgss 14",
"speech hgss 15",
"speech hgss 16",
"speech hgss 17",
"speech hgss 18",
"speech hgss 19",
"speech hgss 20",
"speech pl 18"
]
# Available menu frames. These are graphic files in "Graphics/Windowskins/".
$TextFrames = [
"choice 1",
"choice 2",
"choice 3",
"choice 4",
"choice 5",
"choice 6",
"choice 7",
"choice 8",
"choice 9",
"choice 10",
"choice 11",
"choice 12",
"choice 13",
"choice 14",
"choice 15",
"choice 16",
"choice 17",
"choice 18",
"choice 19",
"choice 20",
"choice 21",
"choice 22",
"choice 23",
"choice 24",
"choice 25",
"choice 26",
"choice 27",
"choice 28"
]
# Available fonts. Each one needs to be in its own array.
$VersionStyles = [
["Power Green"],
["Power Red and Blue"],
["Power Red and Green"],
["Power Clear"]
]

View File

@@ -0,0 +1,76 @@
# Whether a move's physical/special category depends on the move itself as in
# newer Gens (true), or on its type as in older Gens (false).
MOVE_CATEGORY_PER_MOVE = (MECHANICS_GENERATION >= 4)
# Whether turn order is recalculated after a Pokémon Mega Evolves.
RECALCULATE_TURN_ORDER_AFTER_MEGA_EVOLUTION = (MECHANICS_GENERATION >= 7)
# Whether turn order is recalculated after a Pokémon's Speed stat changes.
RECALCULATE_TURN_ORDER_AFTER_SPEED_CHANGES = (MECHANICS_GENERATION >= 8)
# Whether critical hits do 1.5x damage and have 4 stages (true), or they do 2x
# damage and have 5 stages as in Gen 5 (false). Also determines whether critical
# hit rate can be copied by Transform/Psych Up.
NEW_CRITICAL_HIT_RATE_MECHANICS = (MECHANICS_GENERATION >= 6)
# Whether several effects apply relating to a Pokémon's type:
# * Electric-type immunity to paralysis
# * Ghost-type immunity to being trapped
# * Grass-type immunity to powder moves and Effect Spore
# * Poison-type Pokémon can't miss when using Toxic
MORE_TYPE_EFFECTS = (MECHANICS_GENERATION >= 6)
# Whether weather caused by an ability lasts 5 rounds (true) or forever (false).
FIXED_DURATION_WEATHER_FROM_ABILITY = (MECHANICS_GENERATION >= 6)
#===============================================================================
# Whether X items (X Attack, etc.) raise their stat by 2 stages (true) or 1
# (false).
X_STAT_ITEMS_RAISE_BY_TWO_STAGES = (MECHANICS_GENERATION >= 7)
# Whether some Poké Balls have catch rate multipliers from Gen 7 (true) or from
# earlier generations (false).
NEW_POKE_BALL_CATCH_RATES = (MECHANICS_GENERATION >= 7)
# Whether Soul Dew powers up Psychic and Dragon-type moves by 20% (true) or
# raises the holder's Special Attack and Special Defense by 50% (false).
SOUL_DEW_POWERS_UP_TYPES = (MECHANICS_GENERATION >= 7)
#===============================================================================
# The minimum number of badges required to boost each stat of a player's
# Pokémon by 1.1x, in battle only.
NUM_BADGES_BOOST_ATTACK = (MECHANICS_GENERATION >= 4) ? 999 : 1
NUM_BADGES_BOOST_DEFENSE = (MECHANICS_GENERATION >= 4) ? 999 : 5
NUM_BADGES_BOOST_SPATK = (MECHANICS_GENERATION >= 4) ? 999 : 7
NUM_BADGES_BOOST_SPDEF = (MECHANICS_GENERATION >= 4) ? 999 : 7
NUM_BADGES_BOOST_SPEED = (MECHANICS_GENERATION >= 4) ? 999 : 3
#===============================================================================
# An array of items which act as Mega Rings for the player (NPCs don't need a
# Mega Ring item, just a Mega Stone held by their Pokémon).
MEGA_RINGS = [:MEGARING, :MEGABRACELET, :MEGACUFF, :MEGACHARM]
# The Game Switch which, while ON, prevents all Pokémon in battle from Mega
# Evolving even if they otherwise could.
NO_MEGA_EVOLUTION = 34
#===============================================================================
# Whether the Exp gained from beating a Pokémon should be scaled depending on
# the gainer's level.
SCALED_EXP_FORMULA = (MECHANICS_GENERATION >= 5 && MECHANICS_GENERATION != 6)
# Whether the Exp gained from beating a Pokémon should be divided equally
# between each participant (true), or whether each participant should gain that
# much Exp (false). This also applies to Exp gained via the Exp Share (held item
# version) being distributed to all Exp Share holders.
SPLIT_EXP_BETWEEN_GAINERS = (MECHANICS_GENERATION <= 5)
# Whether the critical capture mechanic applies. Note that it is based on a
# total of 600+ species (i.e. that many species need to be caught to provide the
# greatest critical capture chance of 2.5x), and there may be fewer species in
# your game.
ENABLE_CRITICAL_CAPTURES = (MECHANICS_GENERATION >= 5)
# Whether Pokémon gain Exp for capturing a Pokémon.
GAIN_EXP_FOR_CAPTURE = (MECHANICS_GENERATION >= 6)
# The Game Switch which determines whether the player will lose money if they
# lose a battle (they can still gain money from trainers for winning).
NO_MONEY_LOSS = 33
# Whether party Pokémon check whether they can evolve after all battles
# regardless of the outcome (true) or only after battles the player won (false).
CHECK_EVOLUTION_AFTER_ALL_BATTLES = (MECHANICS_GENERATION >= 6)
# Whether fainted Pokémon can try to evolve after a battle.
CHECK_EVOLUTION_FOR_FAINTED_POKEMON = (MECHANICS_GENERATION >= 6)

View File

@@ -1,19 +1,15 @@
module MessageConfig module MessageConfig
FontName = "Power Green"
# in Graphics/Windowskins/ (specify empty string to use the default windowskin)
TextSkinName = "speech hgss 1"
ChoiceSkinName = "choice 1"
WindowOpacity = 255 WindowOpacity = 255
TextSpeed = nil # can be positive to wait frames or negative to TextSpeed = nil # can be positive to wait frames or negative to
# show multiple characters in a single frame # show multiple characters in a single frame
LIGHTTEXTBASE = Color.new(248,248,248)
LIGHTTEXTSHADOW = Color.new(72,80,88)
DARKTEXTBASE = Color.new(80,80,88)
DARKTEXTSHADOW = Color.new(160,160,168)
# 0 = Pause cursor is displayed at end of text # 0 = Pause cursor is displayed at end of text
# 1 = Pause cursor is displayed at bottom right # 1 = Pause cursor is displayed at bottom right
# 2 = Pause cursor is displayed at lower middle side # 2 = Pause cursor is displayed at lower middle side
CURSORMODE = 1 CURSORMODE = 1
LIGHTTEXTBASE = Color.new(248,248,248)
LIGHTTEXTSHADOW = Color.new(72,80,88)
DARKTEXTBASE = Color.new(80,80,88)
DARKTEXTSHADOW = Color.new(160,160,168)
FontSubstitutes = { FontSubstitutes = {
"Power Red and Blue" => "Pokemon RS", "Power Red and Blue" => "Pokemon RS",
"Power Red and Green" => "Pokemon FireLeaf", "Power Red and Green" => "Pokemon FireLeaf",
@@ -44,21 +40,40 @@ module MessageConfig
end end
def self.pbDefaultSystemFrame def self.pbDefaultSystemFrame
return "" if !MessageConfig::ChoiceSkinName begin
return pbResolveBitmap("Graphics/Windowskins/"+MessageConfig::ChoiceSkinName) || "" return pbResolveBitmap("Graphics/Windowskins/" + $TextFrames[$PokemonSystem.frame]) || ""
rescue
return pbResolveBitmap("Graphics/Windowskins/" + $TextFrames[0]) || ""
end
end end
def self.pbDefaultSpeechFrame def self.pbDefaultSpeechFrame
return "" if !MessageConfig::TextSkinName begin
return pbResolveBitmap("Graphics/Windowskins/"+MessageConfig::TextSkinName) || "" return pbResolveBitmap("Graphics/Windowskins/" + $SpeechFrames[$PokemonSystem.textskin]) || ""
rescue
return pbResolveBitmap("Graphics/Windowskins/" + $SpeechFrames[0]) || ""
end
end end
def self.pbDefaultSystemFontName def self.pbDefaultSystemFontName
return MessageConfig.pbTryFonts(MessageConfig::FontName,"Arial Narrow","Arial") begin
return MessageConfig.pbTryFonts($VersionStyles[$PokemonSystem.font][0], "Arial Narrow", "Arial")
rescue
return MessageConfig.pbTryFonts($VersionStyles[0], "Arial Narrow", "Arial")
end
end end
def self.pbDefaultTextSpeed def self.pbDefaultTextSpeed
return (TextSpeed) ? TextSpeed : (Graphics.width>400) ? -2 : 1 return pbSettingToTextSpeed(($PokemonSystem.textspeed rescue nil))
end
def self.pbSettingToTextSpeed(speed)
case speed
when 0 then return 2
when 1 then return 1
when 2 then return -2
end
return TextSpeed || 1
end end
def self.pbDefaultWindowskin def self.pbDefaultWindowskin

View File

@@ -92,7 +92,8 @@ module GameData
def is_TM?; return @field_use == 3; end def is_TM?; return @field_use == 3; end
def is_HM?; return @field_use == 4; end def is_HM?; return @field_use == 4; end
def is_machine?; return is_TM? || is_HM?; end def is_TR?; return @field_use == 6; end
def is_machine?; return is_TM? || is_HM? || is_TR?; end
def is_mail?; return @type == 1 || @type == 2; end def is_mail?; return @type == 1 || @type == 2; end
def is_icon_mail?; return @type == 2; end def is_icon_mail?; return @type == 2; end
def is_poke_ball?; return @type == 3 || @type == 4; end def is_poke_ball?; return @type == 3 || @type == 4; end
@@ -107,8 +108,7 @@ module GameData
def is_mega_stone?; return @type == 12; end # Does NOT include Red Orb/Blue Orb def is_mega_stone?; return @type == 12; end # Does NOT include Red Orb/Blue Orb
def is_important? def is_important?
return true if is_key_item? || is_HM? return true if is_key_item? || is_HM? || is_TM?
return true if is_TM? && INFINITE_TMS
return false return false
end end

View File

@@ -255,7 +255,7 @@ class PokeBattle_Battler
speedMult /= 2 if pbOwnSide.effects[PBEffects::Swamp]>0 speedMult /= 2 if pbOwnSide.effects[PBEffects::Swamp]>0
# Paralysis # Paralysis
if status==PBStatuses::PARALYSIS && !hasActiveAbility?(:QUICKFEET) if status==PBStatuses::PARALYSIS && !hasActiveAbility?(:QUICKFEET)
speedMult /= (NEWEST_BATTLE_MECHANICS) ? 2 : 4 speedMult /= (MECHANICS_GENERATION >= 7) ? 2 : 4
end end
# Badge multiplier # Badge multiplier
if @battle.internalBattle && pbOwnedByPlayer? && if @battle.internalBattle && pbOwnedByPlayer? &&
@@ -524,28 +524,29 @@ class PokeBattle_Battler
def affectedByPowder?(showMsg=false) def affectedByPowder?(showMsg=false)
return false if fainted? return false if fainted?
return true if !NEWEST_BATTLE_MECHANICS if pbHasType?(:GRASS) && MORE_TYPE_EFFECTS
if pbHasType?(:GRASS)
@battle.pbDisplay(_INTL("{1} is unaffected!",pbThis)) if showMsg @battle.pbDisplay(_INTL("{1} is unaffected!",pbThis)) if showMsg
return false return false
end end
if hasActiveAbility?(:OVERCOAT) && !@battle.moldBreaker if MECHANICS_GENERATION >= 6
if showMsg if hasActiveAbility?(:OVERCOAT) && !@battle.moldBreaker
@battle.pbShowAbilitySplash(self) if showMsg
if PokeBattle_SceneConstants::USE_ABILITY_SPLASH @battle.pbShowAbilitySplash(self)
@battle.pbDisplay(_INTL("{1} is unaffected!",pbThis)) if PokeBattle_SceneConstants::USE_ABILITY_SPLASH
else @battle.pbDisplay(_INTL("{1} is unaffected!",pbThis))
@battle.pbDisplay(_INTL("{1} is unaffected because of its {2}!",pbThis,abilityName)) else
@battle.pbDisplay(_INTL("{1} is unaffected because of its {2}!",pbThis,abilityName))
end
@battle.pbHideAbilitySplash(self)
end end
@battle.pbHideAbilitySplash(self) return false
end end
return false if hasActiveItem?(:SAFETYGOGGLES)
end if showMsg
if hasActiveItem?(:SAFETYGOGGLES) @battle.pbDisplay(_INTL("{1} is unaffected because of its {2}!",pbThis,itemName))
if showMsg end
@battle.pbDisplay(_INTL("{1} is unaffected because of its {2}!",pbThis,itemName)) return false
end end
return false
end end
return true return true
end end

View File

@@ -137,7 +137,7 @@ class PokeBattle_Battler
self.form = newForm self.form = newForm
pbUpdate(true) pbUpdate(true)
@hp = @totalhp-oldDmg @hp = @totalhp-oldDmg
@effects[PBEffects::WeightChange] = 0 if NEWEST_BATTLE_MECHANICS @effects[PBEffects::WeightChange] = 0 if MECHANICS_GENERATION >= 6
@battle.scene.pbChangePokemon(self,@pokemon) @battle.scene.pbChangePokemon(self,@pokemon)
@battle.scene.pbRefreshOne(@index) @battle.scene.pbRefreshOne(@index)
@battle.pbDisplay(msg) if msg && msg!="" @battle.pbDisplay(msg) if msg && msg!=""
@@ -275,7 +275,7 @@ class PokeBattle_Battler
@spdef = target.spdef @spdef = target.spdef
@speed = target.speed @speed = target.speed
PBStats.eachBattleStat { |s| @stages[s] = target.stages[s] } PBStats.eachBattleStat { |s| @stages[s] = target.stages[s] }
if NEWEST_BATTLE_MECHANICS if NEW_CRITICAL_HIT_RATE_MECHANICS
@effects[PBEffects::FocusEnergy] = target.effects[PBEffects::FocusEnergy] @effects[PBEffects::FocusEnergy] = target.effects[PBEffects::FocusEnergy]
@effects[PBEffects::LaserFocus] = target.effects[PBEffects::LaserFocus] @effects[PBEffects::LaserFocus] = target.effects[PBEffects::LaserFocus]
end end

View File

@@ -93,7 +93,7 @@ class PokeBattle_Battler
when PBStatuses::BURN when PBStatuses::BURN
hasImmuneType |= pbHasType?(:FIRE) hasImmuneType |= pbHasType?(:FIRE)
when PBStatuses::PARALYSIS when PBStatuses::PARALYSIS
hasImmuneType |= pbHasType?(:ELECTRIC) && NEWEST_BATTLE_MECHANICS hasImmuneType |= pbHasType?(:ELECTRIC) && MORE_TYPE_EFFECTS
when PBStatuses::FROZEN when PBStatuses::FROZEN
hasImmuneType |= pbHasType?(:ICE) hasImmuneType |= pbHasType?(:ICE)
end end
@@ -189,7 +189,7 @@ class PokeBattle_Battler
when PBStatuses::BURN when PBStatuses::BURN
hasImmuneType |= pbHasType?(:FIRE) hasImmuneType |= pbHasType?(:FIRE)
when PBStatuses::PARALYSIS when PBStatuses::PARALYSIS
hasImmuneType |= pbHasType?(:ELECTRIC) && NEWEST_BATTLE_MECHANICS hasImmuneType |= pbHasType?(:ELECTRIC) && MORE_TYPE_EFFECTS
end end
return false if hasImmuneType return false if hasImmuneType
# Ability immunity # Ability immunity

View File

@@ -124,12 +124,10 @@ class PokeBattle_Battler
#============================================================================= #=============================================================================
# Held item consuming/removing # Held item consuming/removing
#============================================================================= #=============================================================================
def pbCanConsumeBerry?(_item,alwaysCheckGluttony=true) def pbCanConsumeBerry?(_item, check_gluttony = true)
return false if @battle.pbCheckOpposingAbility(:UNNERVE,@index) return false if @battle.pbCheckOpposingAbility(:UNNERVE, @index)
return true if @hp<=@totalhp/4 return true if @hp <= @totalhp / 4
if alwaysCheckGluttony || NEWEST_BATTLE_MECHANICS return true if @hp <= @totalhp / 2 && (!check_gluttony || hasActiveAbility?(:GLUTTONY))
return true if @hp<=@totalhp/2 && hasActiveAbility?(:GLUTTONY)
end
return false return false
end end

View File

@@ -61,7 +61,7 @@ class PokeBattle_Battler
} }
@battle.pbJudge @battle.pbJudge
# Update priority order # Update priority order
# @battle.pbCalculatePriority if NEWEST_BATTLE_MECHANICS @battle.pbCalculatePriority if RECALCULATE_TURN_ORDER_AFTER_SPEED_CHANGES
return true return true
end end

View File

@@ -253,7 +253,7 @@ class PokeBattle_Battler
else else
@battle.pbCommonAnimation("Confusion",self) @battle.pbCommonAnimation("Confusion",self)
@battle.pbDisplay(_INTL("{1} is confused!",pbThis)) @battle.pbDisplay(_INTL("{1} is confused!",pbThis))
threshold = (NEWEST_BATTLE_MECHANICS) ? 33 : 50 # % chance threshold = (MECHANICS_GENERATION >= 7) ? 33 : 50 # % chance
if @battle.pbRandom(100)<threshold if @battle.pbRandom(100)<threshold
pbConfusionDamage(_INTL("It hurt itself in its confusion!")) pbConfusionDamage(_INTL("It hurt itself in its confusion!"))
@lastMoveFailed = true @lastMoveFailed = true
@@ -313,7 +313,7 @@ class PokeBattle_Battler
# Wide Guard # Wide Guard
if target.pbOwnSide.effects[PBEffects::WideGuard] && user.index!=target.index && if target.pbOwnSide.effects[PBEffects::WideGuard] && user.index!=target.index &&
PBTargets.multipleTargets?(move.pbTarget(user)) && PBTargets.multipleTargets?(move.pbTarget(user)) &&
(NEWEST_BATTLE_MECHANICS || move.damagingMove?) (MECHANICS_GENERATION >= 7 || move.damagingMove?)
@battle.pbCommonAnimation("WideGuard",target) @battle.pbCommonAnimation("WideGuard",target)
@battle.pbDisplay(_INTL("Wide Guard protected {1}!",target.pbThis(true))) @battle.pbDisplay(_INTL("Wide Guard protected {1}!",target.pbThis(true)))
target.damageState.protected = true target.damageState.protected = true
@@ -408,7 +408,7 @@ class PokeBattle_Battler
return false return false
end end
# Dark-type immunity to moves made faster by Prankster # Dark-type immunity to moves made faster by Prankster
if NEWEST_BATTLE_MECHANICS && user.effects[PBEffects::Prankster] && if MECHANICS_GENERATION >= 7 && user.effects[PBEffects::Prankster] &&
target.pbHasType?(:DARK) && target.opposes?(user) target.pbHasType?(:DARK) && target.opposes?(user)
PBDebug.log("[Target immune] #{target.pbThis} is Dark-type and immune to Prankster-boosted moves") PBDebug.log("[Target immune] #{target.pbThis} is Dark-type and immune to Prankster-boosted moves")
@battle.pbDisplay(_INTL("It doesn't affect {1}...",target.pbThis(true))) @battle.pbDisplay(_INTL("It doesn't affect {1}...",target.pbThis(true)))
@@ -441,26 +441,28 @@ class PokeBattle_Battler
end end
end end
# Immunity to powder-based moves # Immunity to powder-based moves
if NEWEST_BATTLE_MECHANICS && move.powderMove? if move.powderMove?
if target.pbHasType?(:GRASS) if target.pbHasType?(:GRASS) && MORE_TYPE_EFFECTS
PBDebug.log("[Target immune] #{target.pbThis} is Grass-type and immune to powder-based moves") PBDebug.log("[Target immune] #{target.pbThis} is Grass-type and immune to powder-based moves")
@battle.pbDisplay(_INTL("It doesn't affect {1}...",target.pbThis(true))) @battle.pbDisplay(_INTL("It doesn't affect {1}...",target.pbThis(true)))
return false return false
end end
if target.hasActiveAbility?(:OVERCOAT) && !@battle.moldBreaker if MECHANICS_GENERATION >= 6
@battle.pbShowAbilitySplash(target) if target.hasActiveAbility?(:OVERCOAT) && !@battle.moldBreaker
if PokeBattle_SceneConstants::USE_ABILITY_SPLASH @battle.pbShowAbilitySplash(target)
@battle.pbDisplay(_INTL("It doesn't affect {1}...",target.pbThis(true))) if PokeBattle_SceneConstants::USE_ABILITY_SPLASH
else @battle.pbDisplay(_INTL("It doesn't affect {1}...",target.pbThis(true)))
@battle.pbDisplay(_INTL("It doesn't affect {1} because of its {2}.",target.pbThis(true),target.abilityName)) else
@battle.pbDisplay(_INTL("It doesn't affect {1} because of its {2}.",target.pbThis(true),target.abilityName))
end
@battle.pbHideAbilitySplash(target)
return false
end
if target.hasActiveItem?(:SAFETYGOGGLES)
PBDebug.log("[Item triggered] #{target.pbThis} has Safety Goggles and is immune to powder-based moves")
@battle.pbDisplay(_INTL("It doesn't affect {1}...",target.pbThis(true)))
return false
end end
@battle.pbHideAbilitySplash(target)
return false
end
if target.hasActiveItem?(:SAFETYGOGGLES)
PBDebug.log("[Item triggered] #{target.pbThis} has Safety Goggles and is immune to powder-based moves")
@battle.pbDisplay(_INTL("It doesn't affect {1}...",target.pbThis(true)))
return false
end end
end end
# Substitute # Substitute

View File

@@ -72,7 +72,7 @@ class PokeBattle_Battler
next if b.status!=PBStatuses::FROZEN next if b.status!=PBStatuses::FROZEN
# NOTE: Non-Fire-type moves that thaw the user will also thaw the # NOTE: Non-Fire-type moves that thaw the user will also thaw the
# target (in Gen 6+). # target (in Gen 6+).
if move.calcType == :FIRE || (NEWEST_BATTLE_MECHANICS && move.thawsUser?) if move.calcType == :FIRE || (MECHANICS_GENERATION >= 6 && move.thawsUser?)
b.pbCureStatus b.pbCureStatus
end end
end end

View File

@@ -132,7 +132,7 @@ class PokeBattle_Move
def nonLethal?(_user,_target); return false; end # For False Swipe def nonLethal?(_user,_target); return false; end # For False Swipe
def ignoresSubstitute?(user) # user is the Pokémon using this move def ignoresSubstitute?(user) # user is the Pokémon using this move
if NEWEST_BATTLE_MECHANICS if MECHANICS_GENERATION >= 6
return true if soundMove? return true if soundMove?
return true if user && user.hasActiveAbility?(:INFILTRATOR) return true if user && user.hasActiveAbility?(:INFILTRATOR)
end end

View File

@@ -160,7 +160,7 @@ class PokeBattle_Move
def pbIsCritical?(user,target) def pbIsCritical?(user,target)
return false if target.pbOwnSide.effects[PBEffects::LuckyChant]>0 return false if target.pbOwnSide.effects[PBEffects::LuckyChant]>0
# Set up the critical hit ratios # Set up the critical hit ratios
ratios = (NEWEST_BATTLE_MECHANICS) ? [24,8,2,1] : [16,8,4,3,2] ratios = (NEW_CRITICAL_HIT_RATE_MECHANICS) ? [24,8,2,1] : [16,8,4,3,2]
c = 0 c = 0
# Ability effects that alter critical hit rate # Ability effects that alter critical hit rate
if c>=0 && user.abilityActive? if c>=0 && user.abilityActive?
@@ -390,7 +390,7 @@ class PokeBattle_Move
end end
# Critical hits # Critical hits
if target.damageState.critical if target.damageState.critical
if NEWEST_BATTLE_MECHANICS if NEW_CRITICAL_HIT_RATE_MECHANICS
multipliers[FINAL_DMG_MULT] *= 1.5 multipliers[FINAL_DMG_MULT] *= 1.5
else else
multipliers[FINAL_DMG_MULT] *= 2 multipliers[FINAL_DMG_MULT] *= 2
@@ -455,7 +455,7 @@ class PokeBattle_Move
def pbAdditionalEffectChance(user,target,effectChance=0) def pbAdditionalEffectChance(user,target,effectChance=0)
return 0 if target.hasActiveAbility?(:SHIELDDUST) && !@battle.moldBreaker return 0 if target.hasActiveAbility?(:SHIELDDUST) && !@battle.moldBreaker
ret = (effectChance>0) ? effectChance : @addlEffect ret = (effectChance>0) ? effectChance : @addlEffect
if NEWEST_BATTLE_MECHANICS || @function!="0A4" # Secret Power if MECHANICS_GENERATION >= 6 || @function != "0A4" # Secret Power
ret *= 2 if user.hasActiveAbility?(:SERENEGRACE) || ret *= 2 if user.hasActiveAbility?(:SERENEGRACE) ||
user.pbOwnSide.effects[PBEffects::Rainbow]>0 user.pbOwnSide.effects[PBEffects::Rainbow]>0
end end

View File

@@ -555,7 +555,7 @@ class PokeBattle_ProtectMove < PokeBattle_Move
@battle.pbDisplay(_INTL("But it failed!")) @battle.pbDisplay(_INTL("But it failed!"))
return true return true
end end
if !(@sidedEffect && NEWEST_BATTLE_MECHANICS) && if (!@sidedEffect || MECHANICS_GENERATION <= 5) &&
user.effects[PBEffects::ProtectRate]>1 && user.effects[PBEffects::ProtectRate]>1 &&
@battle.pbRandom(user.effects[PBEffects::ProtectRate])!=0 @battle.pbRandom(user.effects[PBEffects::ProtectRate])!=0
user.effects[PBEffects::ProtectRate] = 1 user.effects[PBEffects::ProtectRate] = 1
@@ -575,7 +575,7 @@ class PokeBattle_ProtectMove < PokeBattle_Move
else else
user.effects[@effect] = true user.effects[@effect] = true
end end
user.effects[PBEffects::ProtectRate] *= (NEWEST_BATTLE_MECHANICS) ? 3 : 2 user.effects[PBEffects::ProtectRate] *= (MECHANICS_GENERATION >= 6) ? 3 : 2
pbProtectMessage(user) pbProtectMessage(user)
end end

View File

@@ -32,7 +32,7 @@ end
#=============================================================================== #===============================================================================
class PokeBattle_Move_003 < PokeBattle_SleepMove class PokeBattle_Move_003 < PokeBattle_SleepMove
def pbMoveFailed?(user,targets) def pbMoveFailed?(user,targets)
if NEWEST_BATTLE_MECHANICS && @id == :DARKVOID if MECHANICS_GENERATION >= 7 && @id == :DARKVOID
if !user.isSpecies?(:DARKRAI) && user.effects[PBEffects::TransformSpecies] != :DARKRAI if !user.isSpecies?(:DARKRAI) && user.effects[PBEffects::TransformSpecies] != :DARKRAI
@battle.pbDisplay(_INTL("But {1} can't use the move!",user.pbThis)) @battle.pbDisplay(_INTL("But {1} can't use the move!",user.pbThis))
return true return true
@@ -93,7 +93,7 @@ class PokeBattle_Move_006 < PokeBattle_PoisonMove
end end
def pbOverrideSuccessCheckPerHit(user,target) def pbOverrideSuccessCheckPerHit(user,target)
return (NEWEST_BATTLE_MECHANICS && statusMove? && user.pbHasType?(:POISON)) return (MORE_TYPE_EFFECTS && statusMove? && user.pbHasType?(:POISON))
end end
end end
@@ -107,7 +107,7 @@ end
class PokeBattle_Move_007 < PokeBattle_ParalysisMove class PokeBattle_Move_007 < PokeBattle_ParalysisMove
def tramplesMinimize?(param=1) def tramplesMinimize?(param=1)
# Perfect accuracy and double damage (for Body Slam only) # Perfect accuracy and double damage (for Body Slam only)
return NEWEST_BATTLE_MECHANICS if @id == :BODYSLAM return MECHANICS_GENERATION >= 6 if @id == :BODYSLAM
return super return super
end end
@@ -241,8 +241,8 @@ end
#=============================================================================== #===============================================================================
class PokeBattle_Move_010 < PokeBattle_FlinchMove class PokeBattle_Move_010 < PokeBattle_FlinchMove
def tramplesMinimize?(param=1) def tramplesMinimize?(param=1)
return super if @id == :DRAGONRUSH && !NEWEST_BATTLE_MECHANICS return super if @id == :DRAGONRUSH && MECHANICS_GENERATION <= 5
return true if param==1 && NEWEST_BATTLE_MECHANICS # Perfect accuracy return true if param==1 && MECHANICS_GENERATION >= 6 # Perfect accuracy
return true if param==2 # Double damage return true if param==2 # Double damage
return super return super
end end
@@ -305,7 +305,7 @@ class PokeBattle_Move_014 < PokeBattle_ConfuseMove
end end
def addlEffect def addlEffect
return @chatterChance if !NEWEST_BATTLE_MECHANICS return @chatterChance if MECHANICS_GENERATION <= 5
return super return super
end end
end end
@@ -1267,7 +1267,7 @@ end
class PokeBattle_Move_048 < PokeBattle_TargetStatDownMove class PokeBattle_Move_048 < PokeBattle_TargetStatDownMove
def initialize(battle,move) def initialize(battle,move)
super super
@statDown = [PBStats::EVASION,(NEWEST_BATTLE_MECHANICS) ? 2 : 1] @statDown = [PBStats::EVASION,(MECHANICS_GENERATION >= 6) ? 2 : 1]
end end
end end
@@ -1297,11 +1297,13 @@ class PokeBattle_Move_049 < PokeBattle_TargetStatDownMove
targetSide.effects[PBEffects::Spikes]>0 || targetSide.effects[PBEffects::Spikes]>0 ||
targetSide.effects[PBEffects::ToxicSpikes]>0 || targetSide.effects[PBEffects::ToxicSpikes]>0 ||
targetSide.effects[PBEffects::StickyWeb] targetSide.effects[PBEffects::StickyWeb]
return false if NEWEST_BATTLE_MECHANICS && return false if MECHANICS_GENERATION >= 6 &&
(targetOpposingSide.effects[PBEffects::StealthRock] || (targetOpposingSide.effects[PBEffects::StealthRock] ||
targetOpposingSide.effects[PBEffects::Spikes]>0 || targetOpposingSide.effects[PBEffects::Spikes]>0 ||
targetOpposingSide.effects[PBEffects::ToxicSpikes]>0 || targetOpposingSide.effects[PBEffects::ToxicSpikes]>0 ||
targetOpposingSide.effects[PBEffects::StickyWeb]) targetOpposingSide.effects[PBEffects::StickyWeb])
return false if MECHANICS_GENERATION >= 8 &&
@battle.field.terrain != PBBattleTerrains::None
return super return super
end end
@@ -1330,33 +1332,46 @@ class PokeBattle_Move_049 < PokeBattle_TargetStatDownMove
@battle.pbDisplay(_INTL("{1} is no longer protected by Safeguard!!",target.pbTeam)) @battle.pbDisplay(_INTL("{1} is no longer protected by Safeguard!!",target.pbTeam))
end end
if target.pbOwnSide.effects[PBEffects::StealthRock] || if target.pbOwnSide.effects[PBEffects::StealthRock] ||
(NEWEST_BATTLE_MECHANICS && (MECHANICS_GENERATION >= 6 &&
target.pbOpposingSide.effects[PBEffects::StealthRock]) target.pbOpposingSide.effects[PBEffects::StealthRock])
target.pbOwnSide.effects[PBEffects::StealthRock] = false target.pbOwnSide.effects[PBEffects::StealthRock] = false
target.pbOpposingSide.effects[PBEffects::StealthRock] = false if NEWEST_BATTLE_MECHANICS target.pbOpposingSide.effects[PBEffects::StealthRock] = false if MECHANICS_GENERATION >= 6
@battle.pbDisplay(_INTL("{1} blew away stealth rocks!",user.pbThis)) @battle.pbDisplay(_INTL("{1} blew away stealth rocks!",user.pbThis))
end end
if target.pbOwnSide.effects[PBEffects::Spikes]>0 || if target.pbOwnSide.effects[PBEffects::Spikes]>0 ||
(NEWEST_BATTLE_MECHANICS && (MECHANICS_GENERATION >= 6 &&
target.pbOpposingSide.effects[PBEffects::Spikes]>0) target.pbOpposingSide.effects[PBEffects::Spikes]>0)
target.pbOwnSide.effects[PBEffects::Spikes] = 0 target.pbOwnSide.effects[PBEffects::Spikes] = 0
target.pbOpposingSide.effects[PBEffects::Spikes] = 0 if NEWEST_BATTLE_MECHANICS target.pbOpposingSide.effects[PBEffects::Spikes] = 0 if MECHANICS_GENERATION >= 6
@battle.pbDisplay(_INTL("{1} blew away spikes!",user.pbThis)) @battle.pbDisplay(_INTL("{1} blew away spikes!",user.pbThis))
end end
if target.pbOwnSide.effects[PBEffects::ToxicSpikes]>0 || if target.pbOwnSide.effects[PBEffects::ToxicSpikes]>0 ||
(NEWEST_BATTLE_MECHANICS && (MECHANICS_GENERATION >= 6 &&
target.pbOpposingSide.effects[PBEffects::ToxicSpikes]>0) target.pbOpposingSide.effects[PBEffects::ToxicSpikes]>0)
target.pbOwnSide.effects[PBEffects::ToxicSpikes] = 0 target.pbOwnSide.effects[PBEffects::ToxicSpikes] = 0
target.pbOpposingSide.effects[PBEffects::ToxicSpikes] = 0 if NEWEST_BATTLE_MECHANICS target.pbOpposingSide.effects[PBEffects::ToxicSpikes] = 0 if MECHANICS_GENERATION >= 6
@battle.pbDisplay(_INTL("{1} blew away poison spikes!",user.pbThis)) @battle.pbDisplay(_INTL("{1} blew away poison spikes!",user.pbThis))
end end
if target.pbOwnSide.effects[PBEffects::StickyWeb] || if target.pbOwnSide.effects[PBEffects::StickyWeb] ||
(NEWEST_BATTLE_MECHANICS && (MECHANICS_GENERATION >= 6 &&
target.pbOpposingSide.effects[PBEffects::StickyWeb]) target.pbOpposingSide.effects[PBEffects::StickyWeb])
target.pbOwnSide.effects[PBEffects::StickyWeb] = false target.pbOwnSide.effects[PBEffects::StickyWeb] = false
target.pbOpposingSide.effects[PBEffects::StickyWeb] = false if NEWEST_BATTLE_MECHANICS target.pbOpposingSide.effects[PBEffects::StickyWeb] = false if MECHANICS_GENERATION >= 6
@battle.pbDisplay(_INTL("{1} blew away sticky webs!",user.pbThis)) @battle.pbDisplay(_INTL("{1} blew away sticky webs!",user.pbThis))
end end
if MECHANICS_GENERATION >= 8 && @battle.field.terrain != PBBattleTerrains::None
case @battle.field.terrain
when PBBattleTerrains::Electric
@battle.pbDisplay(_INTL("The electricity disappeared from the battlefield."))
when PBBattleTerrains::Grassy
@battle.pbDisplay(_INTL("The grass disappeared from the battlefield."))
when PBBattleTerrains::Misty
@battle.pbDisplay(_INTL("The mist disappeared from the battlefield."))
when PBBattleTerrains::Psychic
@battle.pbDisplay(_INTL("The weirdness disappeared from the battlefield."))
end
@battle.field.terrain = PBBattleTerrains::None
end
end end
end end
@@ -1405,7 +1420,7 @@ class PokeBattle_Move_04D < PokeBattle_TargetStatDownMove
def initialize(battle,move) def initialize(battle,move)
super super
inc = 2 inc = 2
inc = 1 if @id == :STRINGSHOT && !NEWEST_BATTLE_MECHANICS inc = 1 if @id == :STRINGSHOT && MECHANICS_GENERATION <= 5
@statDown = [PBStats::SPEED,inc] @statDown = [PBStats::SPEED,inc]
end end
end end
@@ -1559,7 +1574,7 @@ class PokeBattle_Move_055 < PokeBattle_Move
def pbEffectAgainstTarget(user,target) def pbEffectAgainstTarget(user,target)
PBStats.eachBattleStat { |s| user.stages[s] = target.stages[s] } PBStats.eachBattleStat { |s| user.stages[s] = target.stages[s] }
if NEWEST_BATTLE_MECHANICS if NEW_CRITICAL_HIT_RATE_MECHANICS
user.effects[PBEffects::FocusEnergy] = target.effects[PBEffects::FocusEnergy] user.effects[PBEffects::FocusEnergy] = target.effects[PBEffects::FocusEnergy]
user.effects[PBEffects::LaserFocus] = target.effects[PBEffects::LaserFocus] user.effects[PBEffects::LaserFocus] = target.effects[PBEffects::LaserFocus]
end end
@@ -1794,7 +1809,7 @@ class PokeBattle_Move_05E < PokeBattle_Move
userTypes = user.pbTypes(true) userTypes = user.pbTypes(true)
@newTypes = [] @newTypes = []
user.eachMoveWithIndex do |m,i| user.eachMoveWithIndex do |m,i|
break if NEWEST_BATTLE_MECHANICS && i>0 break if MECHANICS_GENERATION >= 6 && i>0
next if PBTypes.isPseudoType?(m.type) next if PBTypes.isPseudoType?(m.type)
next if userTypes.include?(m.type) next if userTypes.include?(m.type)
@newTypes.push(m.type) if !@newTypes.include?(m.type) @newTypes.push(m.type) if !@newTypes.include?(m.type)
@@ -2167,7 +2182,7 @@ class PokeBattle_Move_067 < PokeBattle_Move
def pbFailsAgainstTarget?(user,target) def pbFailsAgainstTarget?(user,target)
if !target.ability || if !target.ability ||
(user.ability==target.ability && !NEWEST_BATTLE_MECHANICS) (user.ability == target.ability && MECHANICS_GENERATION <= 5)
@battle.pbDisplay(_INTL("But it failed!")) @battle.pbDisplay(_INTL("But it failed!"))
return true return true
end end
@@ -2369,7 +2384,7 @@ class PokeBattle_Move_070 < PokeBattle_FixedDamageMove
@battle.pbHideAbilitySplash(target) @battle.pbHideAbilitySplash(target)
return true return true
end end
if NEWEST_BATTLE_MECHANICS && @id == :SHEERCOLD && target.pbHasType?(:ICE) if MECHANICS_GENERATION >= 7 && @id == :SHEERCOLD && target.pbHasType?(:ICE)
@battle.pbDisplay(_INTL("But it failed!")) @battle.pbDisplay(_INTL("But it failed!"))
return true return true
end end
@@ -2378,7 +2393,7 @@ class PokeBattle_Move_070 < PokeBattle_FixedDamageMove
def pbAccuracyCheck(user,target) def pbAccuracyCheck(user,target)
acc = @accuracy+user.level-target.level acc = @accuracy+user.level-target.level
acc -= 10 if NEWEST_BATTLE_MECHANICS && @id == :SHEERCOLD && !user.pbHasType?(:ICE) acc -= 10 if MECHANICS_GENERATION >= 7 && @id == :SHEERCOLD && !user.pbHasType?(:ICE)
return @battle.pbRandom(100)<acc return @battle.pbRandom(100)<acc
end end
@@ -2697,7 +2712,7 @@ end
# Burn's halving of Attack is negated (new mechanics). # Burn's halving of Attack is negated (new mechanics).
#=============================================================================== #===============================================================================
class PokeBattle_Move_07E < PokeBattle_Move class PokeBattle_Move_07E < PokeBattle_Move
def damageReducedByBurn?; return !NEWEST_BATTLE_MECHANICS; end def damageReducedByBurn?; return MECHANICS_GENERATION <= 5; end
def pbBaseDamage(baseDmg,user,target) def pbBaseDamage(baseDmg,user,target)
baseDmg *= 2 if user.poisoned? || user.burned? || user.paralyzed? baseDmg *= 2 if user.poisoned? || user.burned? || user.paralyzed?

View File

@@ -248,7 +248,7 @@ class PokeBattle_Move_090 < PokeBattle_Move
end end
def pbBaseDamage(baseDmg,user,target) def pbBaseDamage(baseDmg,user,target)
return super if NEWEST_BATTLE_MECHANICS return super if MECHANICS_GENERATION >= 6
hp = pbHiddenPower(user) hp = pbHiddenPower(user)
return hp[1] return hp[1]
end end
@@ -272,7 +272,7 @@ def pbHiddenPower(pkmn)
idxType |= (iv[PBStats::SPDEF]&1)<<5 idxType |= (iv[PBStats::SPDEF]&1)<<5
idxType = (types.length-1)*idxType/63 idxType = (types.length-1)*idxType/63
type = types[idxType] type = types[idxType]
if !NEWEST_BATTLE_MECHANICS if MECHANICS_GENERATION <= 5
powerMin = 30 powerMin = 30
powerMax = 70 powerMax = 70
power |= (iv[PBStats::HP]&2)>>1 power |= (iv[PBStats::HP]&2)>>1
@@ -503,7 +503,7 @@ class PokeBattle_Move_096 < PokeBattle_Move
@damageArray.each do |dmg, items| @damageArray.each do |dmg, items|
next if !items.include?(heldItem) next if !items.include?(heldItem)
ret = dmg ret = dmg
ret += 20 if NEWEST_BATTLE_MECHANICS ret += 20 if MECHANICS_GENERATION >= 6
break break
end end
return ret return ret
@@ -600,7 +600,7 @@ end
#=============================================================================== #===============================================================================
class PokeBattle_Move_09B < PokeBattle_Move class PokeBattle_Move_09B < PokeBattle_Move
def tramplesMinimize?(param=1) def tramplesMinimize?(param=1)
return true if NEWEST_BATTLE_MECHANICS # Perfect accuracy and double damage return true if MECHANICS_GENERATION >= 7 # Perfect accuracy and double damage
return super return super
end end
@@ -646,7 +646,7 @@ end
#=============================================================================== #===============================================================================
class PokeBattle_Move_09D < PokeBattle_Move class PokeBattle_Move_09D < PokeBattle_Move
def pbMoveFailed?(user,targets) def pbMoveFailed?(user,targets)
if NEWEST_BATTLE_MECHANICS if MECHANICS_GENERATION >= 6
if @battle.field.effects[PBEffects::MudSportField]>0 if @battle.field.effects[PBEffects::MudSportField]>0
@battle.pbDisplay(_INTL("But it failed!")) @battle.pbDisplay(_INTL("But it failed!"))
return true return true
@@ -662,7 +662,7 @@ class PokeBattle_Move_09D < PokeBattle_Move
end end
def pbEffectGeneral(user) def pbEffectGeneral(user)
if NEWEST_BATTLE_MECHANICS if MECHANICS_GENERATION >= 6
@battle.field.effects[PBEffects::MudSportField] = 5 @battle.field.effects[PBEffects::MudSportField] = 5
else else
user.effects[PBEffects::MudSport] = true user.effects[PBEffects::MudSport] = true
@@ -678,7 +678,7 @@ end
#=============================================================================== #===============================================================================
class PokeBattle_Move_09E < PokeBattle_Move class PokeBattle_Move_09E < PokeBattle_Move
def pbMoveFailed?(user,targets) def pbMoveFailed?(user,targets)
if NEWEST_BATTLE_MECHANICS if MECHANICS_GENERATION >= 6
if @battle.field.effects[PBEffects::WaterSportField]>0 if @battle.field.effects[PBEffects::WaterSportField]>0
@battle.pbDisplay(_INTL("But it failed!")) @battle.pbDisplay(_INTL("But it failed!"))
return true return true
@@ -694,7 +694,7 @@ class PokeBattle_Move_09E < PokeBattle_Move
end end
def pbEffectGeneral(user) def pbEffectGeneral(user)
if NEWEST_BATTLE_MECHANICS if MECHANICS_GENERATION >= 6
@battle.field.effects[PBEffects::WaterSportField] = 5 @battle.field.effects[PBEffects::WaterSportField] = 5
else else
user.effects[PBEffects::WaterSport] = true user.effects[PBEffects::WaterSport] = true
@@ -1193,7 +1193,7 @@ class PokeBattle_Move_0AF < PokeBattle_Move
"133", # Hold Hands "133", # Hold Hands
"134" # Celebrate "134" # Celebrate
] ]
if NEWEST_BATTLE_MECHANICS if MECHANICS_GENERATION >= 6
@moveBlacklist += [ @moveBlacklist += [
# Target-switching moves # Target-switching moves
"0EB", # Roar, Whirlwind "0EB", # Roar, Whirlwind
@@ -1320,7 +1320,7 @@ class PokeBattle_Move_0B3 < PokeBattle_Move
case @battle.environment case @battle.environment
when PBEnvironment::Grass, PBEnvironment::TallGrass, when PBEnvironment::Grass, PBEnvironment::TallGrass,
PBEnvironment::Forest, PBEnvironment::ForestGrass PBEnvironment::Forest, PBEnvironment::ForestGrass
if NEWEST_BATTLE_MECHANICS if MECHANICS_GENERATION >= 6
@npMove = :ENERGYBALL if GameData::Move.exists?(:ENERGYBALL) @npMove = :ENERGYBALL if GameData::Move.exists?(:ENERGYBALL)
else else
@npMove = :SEEDBOMB if GameData::Move.exists?(:SEEDBOMB) @npMove = :SEEDBOMB if GameData::Move.exists?(:SEEDBOMB)
@@ -1330,30 +1330,31 @@ class PokeBattle_Move_0B3 < PokeBattle_Move
when PBEnvironment::Puddle when PBEnvironment::Puddle
@npMove = :MUDBOMB if GameData::Move.exists?(:MUDBOMB) @npMove = :MUDBOMB if GameData::Move.exists?(:MUDBOMB)
when PBEnvironment::Cave when PBEnvironment::Cave
if NEWEST_BATTLE_MECHANICS if MECHANICS_GENERATION >= 6
@npMove = :POWERGEM if GameData::Move.exists?(:POWERGEM) @npMove = :POWERGEM if GameData::Move.exists?(:POWERGEM)
else else
@npMove = :ROCKSLIDE if GameData::Move.exists?(:ROCKSLIDE) @npMove = :ROCKSLIDE if GameData::Move.exists?(:ROCKSLIDE)
end end
when PBEnvironment::Rock when PBEnvironment::Rock
if NEWEST_BATTLE_MECHANICS if MECHANICS_GENERATION >= 6
@npMove = :EARTHPOWER if GameData::Move.exists?(:EARTHPOWER) @npMove = :EARTHPOWER if GameData::Move.exists?(:EARTHPOWER)
else else
@npMove = :ROCKSLIDE if GameData::Move.exists?(:ROCKSLIDE) @npMove = :ROCKSLIDE if GameData::Move.exists?(:ROCKSLIDE)
end end
when PBEnvironment::Sand when PBEnvironment::Sand
if NEWEST_BATTLE_MECHANICS if MECHANICS_GENERATION >= 6
@npMove = :EARTHPOWER if GameData::Move.exists?(:EARTHPOWER) @npMove = :EARTHPOWER if GameData::Move.exists?(:EARTHPOWER)
else else
@npMove = :EARTHQUAKE if GameData::Move.exists?(:EARTHQUAKE) @npMove = :EARTHQUAKE if GameData::Move.exists?(:EARTHQUAKE)
end end
# Ice tiles in Gen 6 should be Ice Beam when PBEnvironment::Snow
when PBEnvironment::Snow, PBEnvironment::Ice if MECHANICS_GENERATION >= 6
if NEWEST_BATTLE_MECHANICS
@npMove = :FROSTBREATH if GameData::Move.exists?(:FROSTBREATH) @npMove = :FROSTBREATH if GameData::Move.exists?(:FROSTBREATH)
else else
@npMove = :ICEBEAM if GameData::Move.exists?(:ICEBEAM) @npMove = :BLIZZARD if GameData::Move.exists?(:BLIZZARD)
end end
when PBEnvironment::Ice
@npMove = :ICEBEAM if GameData::Move.exists?(:ICEBEAM)
when PBEnvironment::Volcano when PBEnvironment::Volcano
@npMove = :LAVAPLUME if GameData::Move.exists?(:LAVAPLUME) @npMove = :LAVAPLUME if GameData::Move.exists?(:LAVAPLUME)
when PBEnvironment::Graveyard when PBEnvironment::Graveyard
@@ -1513,7 +1514,7 @@ class PokeBattle_Move_0B5 < PokeBattle_Move
"133", # Hold Hands "133", # Hold Hands
"134" # Celebrate "134" # Celebrate
] ]
if NEWEST_BATTLE_MECHANICS if MECHANICS_GENERATION >= 6
@moveBlacklist += [ @moveBlacklist += [
# Moves that call other moves # Moves that call other moves
"0B3", # Nature Power "0B3", # Nature Power
@@ -1544,7 +1545,7 @@ class PokeBattle_Move_0B5 < PokeBattle_Move
# NOTE: This includes the Pokémon of ally trainers in multi battles. # NOTE: This includes the Pokémon of ally trainers in multi battles.
@battle.pbParty(user.index).each_with_index do |pkmn,i| @battle.pbParty(user.index).each_with_index do |pkmn,i|
next if !pkmn || i==user.pokemonIndex next if !pkmn || i==user.pokemonIndex
next if NEWEST_BATTLE_MECHANICS && pkmn.egg? next if MECHANICS_GENERATION >= 6 && pkmn.egg?
pkmn.moves.each do |move| pkmn.moves.each do |move|
next if @moveBlacklist.include?(move.function_code) next if @moveBlacklist.include?(move.function_code)
next if move.type == :SHADOW next if move.type == :SHADOW
@@ -1777,7 +1778,7 @@ class PokeBattle_Move_0BA < PokeBattle_Move
return true return true
end end
return true if pbMoveFailedAromaVeil?(user,target) return true if pbMoveFailedAromaVeil?(user,target)
if NEWEST_BATTLE_MECHANICS && target.hasActiveAbility?(:OBLIVIOUS) && if MECHANICS_GENERATION >= 6 && target.hasActiveAbility?(:OBLIVIOUS) &&
!@battle.moldBreaker !@battle.moldBreaker
@battle.pbShowAbilitySplash(target) @battle.pbShowAbilitySplash(target)
if PokeBattle_SceneConstants::USE_ABILITY_SPLASH if PokeBattle_SceneConstants::USE_ABILITY_SPLASH
@@ -1842,7 +1843,7 @@ class PokeBattle_Move_0BC < PokeBattle_Move
# Moves that call other moves (see also below) # Moves that call other moves (see also below)
"0AE" # Mirror Move "0AE" # Mirror Move
] ]
if NEWEST_BATTLE_MECHANICS if MECHANICS_GENERATION >= 7
@moveBlacklist += [ @moveBlacklist += [
# Moves that call other moves # Moves that call other moves
# "0AE", # Mirror Move # See above # "0AE", # Mirror Move # See above
@@ -2235,7 +2236,7 @@ class PokeBattle_Move_0CE < PokeBattle_TwoTurnMove
@battle.pbDisplay(_INTL("But it failed!")) @battle.pbDisplay(_INTL("But it failed!"))
return true return true
end end
if NEWEST_BATTLE_MECHANICS && target.pbWeight>=2000 # 200.0kg if MECHANICS_GENERATION >= 6 && target.pbWeight>=2000 # 200.0kg
@battle.pbDisplay(_INTL("But it failed!")) @battle.pbDisplay(_INTL("But it failed!"))
return true return true
end end
@@ -2285,7 +2286,7 @@ class PokeBattle_Move_0CF < PokeBattle_Move
return if target.effects[PBEffects::Trapping]>0 return if target.effects[PBEffects::Trapping]>0
# Set trapping effect duration and info # Set trapping effect duration and info
if user.hasActiveItem?(:GRIPCLAW) if user.hasActiveItem?(:GRIPCLAW)
target.effects[PBEffects::Trapping] = (NEWEST_BATTLE_MECHANICS) ? 8 : 6 target.effects[PBEffects::Trapping] = (MECHANICS_GENERATION >= 5) ? 8 : 6
else else
target.effects[PBEffects::Trapping] = 5+@battle.pbRandom(2) target.effects[PBEffects::Trapping] = 5+@battle.pbRandom(2)
end end
@@ -2648,7 +2649,7 @@ end
# User gains half the HP it inflicts as damage. # User gains half the HP it inflicts as damage.
#=============================================================================== #===============================================================================
class PokeBattle_Move_0DD < PokeBattle_Move class PokeBattle_Move_0DD < PokeBattle_Move
def healingMove?; return NEWEST_BATTLE_MECHANICS; end def healingMove?; return MECHANICS_GENERATION >= 6; end
def pbEffectAgainstTarget(user,target) def pbEffectAgainstTarget(user,target)
return if target.damageState.hpLost<=0 return if target.damageState.hpLost<=0
@@ -2664,7 +2665,7 @@ end
# (Dream Eater) # (Dream Eater)
#=============================================================================== #===============================================================================
class PokeBattle_Move_0DE < PokeBattle_Move class PokeBattle_Move_0DE < PokeBattle_Move
def healingMove?; return NEWEST_BATTLE_MECHANICS; end def healingMove?; return MECHANICS_GENERATION >= 6; end
def pbFailsAgainstTarget?(user,target) def pbFailsAgainstTarget?(user,target)
if !target.asleep? if !target.asleep?
@@ -2899,7 +2900,7 @@ end
#=============================================================================== #===============================================================================
class PokeBattle_Move_0E7 < PokeBattle_Move class PokeBattle_Move_0E7 < PokeBattle_Move
def pbMoveFailed?(user,targets) def pbMoveFailed?(user,targets)
if NEWEST_BATTLE_MECHANICS && user.effects[PBEffects::DestinyBondPrevious] if MECHANICS_GENERATION >= 7 && user.effects[PBEffects::DestinyBondPrevious]
@battle.pbDisplay(_INTL("But it failed!")) @battle.pbDisplay(_INTL("But it failed!"))
return true return true
end end
@@ -3144,7 +3145,7 @@ class PokeBattle_Move_0EF < PokeBattle_Move
@battle.pbDisplay(_INTL("But it failed!")) @battle.pbDisplay(_INTL("But it failed!"))
return true return true
end end
if NEWEST_BATTLE_MECHANICS && target.pbHasType?(:GHOST) if MORE_TYPE_EFFECTS && target.pbHasType?(:GHOST)
@battle.pbDisplay(_INTL("It doesn't affect {1}...",target.pbThis(true))) @battle.pbDisplay(_INTL("It doesn't affect {1}...",target.pbThis(true)))
return true return true
end end
@@ -3160,7 +3161,7 @@ class PokeBattle_Move_0EF < PokeBattle_Move
def pbAdditionalEffect(user,target) def pbAdditionalEffect(user,target)
return if target.fainted? || target.damageState.substitute return if target.fainted? || target.damageState.substitute
return if target.effects[PBEffects::MeanLook]>=0 return if target.effects[PBEffects::MeanLook]>=0
return if NEWEST_BATTLE_MECHANICS && target.pbHasType?(:GHOST) return if MORE_TYPE_EFFECTS && target.pbHasType?(:GHOST)
target.effects[PBEffects::MeanLook] = user.index target.effects[PBEffects::MeanLook] = user.index
@battle.pbDisplay(_INTL("{1} can no longer escape!",target.pbThis)) @battle.pbDisplay(_INTL("{1} can no longer escape!",target.pbThis))
end end
@@ -3174,7 +3175,7 @@ end
#=============================================================================== #===============================================================================
class PokeBattle_Move_0F0 < PokeBattle_Move class PokeBattle_Move_0F0 < PokeBattle_Move
def pbBaseDamage(baseDmg,user,target) def pbBaseDamage(baseDmg,user,target)
if NEWEST_BATTLE_MECHANICS && if MECHANICS_GENERATION >= 6 &&
target.item && !target.unlosableItem?(target.item) target.item && !target.unlosableItem?(target.item)
# NOTE: Damage is still boosted even if target has Sticky Hold or a # NOTE: Damage is still boosted even if target has Sticky Hold or a
# substitute. # substitute.
@@ -3300,7 +3301,7 @@ end
#=============================================================================== #===============================================================================
class PokeBattle_Move_0F3 < PokeBattle_Move class PokeBattle_Move_0F3 < PokeBattle_Move
def ignoresSubstitute?(user) def ignoresSubstitute?(user)
return true if NEWEST_BATTLE_MECHANICS return true if MECHANICS_GENERATION >= 6
return super return super
end end
@@ -3364,7 +3365,7 @@ class PokeBattle_Move_0F5 < PokeBattle_Move
def pbEffectWhenDealingDamage(user,target) def pbEffectWhenDealingDamage(user,target)
return if target.damageState.substitute || target.damageState.berryWeakened return if target.damageState.substitute || target.damageState.berryWeakened
return if !target.item || (!target.item.is_berry? && return if !target.item || (!target.item.is_berry? &&
!(NEWEST_BATTLE_MECHANICS && target.item.is_gem?)) !(MECHANICS_GENERATION >= 6 && target.item.is_gem?))
target.pbRemoveItem target.pbRemoveItem
@battle.pbDisplay(_INTL("{1}'s {2} was incinerated!",target.pbThis,target.itemName)) @battle.pbDisplay(_INTL("{1}'s {2} was incinerated!",target.pbThis,target.itemName))
end end

View File

@@ -1445,7 +1445,7 @@ end
#=============================================================================== #===============================================================================
class PokeBattle_Move_144 < PokeBattle_Move class PokeBattle_Move_144 < PokeBattle_Move
def tramplesMinimize?(param=1) def tramplesMinimize?(param=1)
return true if param==1 && NEWEST_BATTLE_MECHANICS # Perfect accuracy return true if param==1 && MECHANICS_GENERATION >= 6 # Perfect accuracy
return true if param==2 # Double damage return true if param==2 # Double damage
return super return super
end end
@@ -1666,7 +1666,7 @@ end
# User gains 3/4 the HP it inflicts as damage. (Draining Kiss, Oblivion Wing) # User gains 3/4 the HP it inflicts as damage. (Draining Kiss, Oblivion Wing)
#=============================================================================== #===============================================================================
class PokeBattle_Move_14F < PokeBattle_Move class PokeBattle_Move_14F < PokeBattle_Move
def healingMove?; return NEWEST_BATTLE_MECHANICS; end def healingMove?; return MECHANICS_GENERATION >= 6; end
def pbEffectAgainstTarget(user,target) def pbEffectAgainstTarget(user,target)
return if target.damageState.hpLost<=0 return if target.damageState.hpLost<=0

View File

@@ -231,9 +231,6 @@ class PokeBattle_Battle
end end
end end
# NOTE: In Gen 8, battler speeds stored in priority are recalculated far more
# frequently than they used to be. There are several quoted-out calls to
# pbCalculatePriority in these scripts which do this; just unquote them.
def pbPriority(onlySpeedSort=false) def pbPriority(onlySpeedSort=false)
ret = [] ret = []
if onlySpeedSort if onlySpeedSort

View File

@@ -64,7 +64,7 @@ class PokeBattle_Battle
end end
end end
# Other certain switching effects # Other certain switching effects
return true if NEWEST_BATTLE_MECHANICS && battler.pbHasType?(:GHOST) return true if 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 ||
@@ -286,7 +286,7 @@ class PokeBattle_Battle
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 NEWEST_BATTLE_MECHANICS pbCalculatePriority(false,[idxBattler]) if 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.

View File

@@ -6,7 +6,7 @@ class PokeBattle_Battle
return false if trainerBattle? return false if trainerBattle?
battler = @battlers[idxBattler] battler = @battlers[idxBattler]
return false if !@canRun && !battler.opposes? return false if !@canRun && !battler.opposes?
return true if battler.pbHasType?(:GHOST) && NEWEST_BATTLE_MECHANICS return true if battler.pbHasType?(:GHOST) && MORE_TYPE_EFFECTS
return true if battler.abilityActive? && return true if battler.abilityActive? &&
BattleHandlers.triggerRunFromBattleAbility(battler.ability,battler) BattleHandlers.triggerRunFromBattleAbility(battler.ability,battler)
return true if battler.itemActive? && return true if battler.itemActive? &&
@@ -71,7 +71,7 @@ class PokeBattle_Battle
return 0 return 0
end end
if !duringBattle if !duringBattle
if battler.pbHasType?(:GHOST) && NEWEST_BATTLE_MECHANICS if battler.pbHasType?(:GHOST) && MORE_TYPE_EFFECTS
pbSEPlay("Battle flee") pbSEPlay("Battle flee")
pbDisplayPaused(_INTL("You got away safely!")) pbDisplayPaused(_INTL("You got away safely!"))
@decision = 3 @decision = 3

View File

@@ -157,7 +157,7 @@ class PokeBattle_Battle
if battler.isSpecies?(:GENGAR) && battler.mega? if battler.isSpecies?(:GENGAR) && battler.mega?
battler.effects[PBEffects::Telekinesis] = 0 battler.effects[PBEffects::Telekinesis] = 0
end end
pbCalculatePriority(false,[idxBattler]) if NEWEST_BATTLE_MECHANICS pbCalculatePriority(false,[idxBattler]) if RECALCULATE_TURN_ORDER_AFTER_MEGA_EVOLUTION
# Trigger ability # Trigger ability
battler.pbEffectsOnSwitchIn battler.pbEffectsOnSwitchIn
end end

View File

@@ -84,7 +84,7 @@ class PokeBattle_Battle
end end
return if @decision > 0 return if @decision > 0
end end
# pbCalculatePriority if NEWEST_BATTLE_MECHANICS pbCalculatePriority if RECALCULATE_TURN_ORDER_AFTER_SPEED_CHANGES
end end
def pbAttackPhaseMegaEvolution def pbAttackPhaseMegaEvolution

View File

@@ -331,7 +331,7 @@ class PokeBattle_Battle
# Damage from Hyper Mode (Shadow Pokémon) # Damage from Hyper Mode (Shadow Pokémon)
priority.each do |b| priority.each do |b|
next if !b.inHyperMode? || @choices[b.index][0]!=:UseMove next if !b.inHyperMode? || @choices[b.index][0]!=:UseMove
hpLoss = (NEWEST_BATTLE_MECHANICS) ? b.totalhp/16 : b.totalhp/8 hpLoss = b.totalhp/24
@scene.pbDamageAnimation(b) @scene.pbDamageAnimation(b)
b.pbReduceHP(hpLoss,false) b.pbReduceHP(hpLoss,false)
pbDisplay(_INTL("The Hyper Mode attack hurts {1}!",b.pbThis(true))) pbDisplay(_INTL("The Hyper Mode attack hurts {1}!",b.pbThis(true)))
@@ -370,7 +370,7 @@ class PokeBattle_Battle
priority.each do |b| priority.each do |b|
next if b.status!=PBStatuses::BURN || !b.takesIndirectDamage? next if b.status!=PBStatuses::BURN || !b.takesIndirectDamage?
oldHP = b.hp oldHP = b.hp
dmg = (NEWEST_BATTLE_MECHANICS) ? b.totalhp/16 : b.totalhp/8 dmg = (MECHANICS_GENERATION >= 7) ? b.totalhp/16 : b.totalhp/8
dmg = (dmg/2.0).round if b.hasActiveAbility?(:HEATPROOF) dmg = (dmg/2.0).round if b.hasActiveAbility?(:HEATPROOF)
b.pbContinueStatus { b.pbReduceHP(dmg,false) } b.pbContinueStatus { b.pbReduceHP(dmg,false) }
b.pbItemHPHealCheck b.pbItemHPHealCheck
@@ -417,9 +417,9 @@ class PokeBattle_Battle
else pbCommonAnimation("Wrap", b) else pbCommonAnimation("Wrap", b)
end end
if b.takesIndirectDamage? if b.takesIndirectDamage?
hpLoss = (NEWEST_BATTLE_MECHANICS) ? b.totalhp/8 : b.totalhp/16 hpLoss = (MECHANICS_GENERATION >= 6) ? b.totalhp/8 : b.totalhp/16
if @battlers[b.effects[PBEffects::TrappingUser]].hasActiveItem?(:BINDINGBAND) if @battlers[b.effects[PBEffects::TrappingUser]].hasActiveItem?(:BINDINGBAND)
hpLoss = (NEWEST_BATTLE_MECHANICS) ? b.totalhp/6 : b.totalhp/8 hpLoss = (MECHANICS_GENERATION >= 6) ? b.totalhp/6 : b.totalhp/8
end end
@scene.pbDamageAnimation(b) @scene.pbDamageAnimation(b)
b.pbReduceHP(hpLoss,false) b.pbReduceHP(hpLoss,false)

View File

@@ -44,7 +44,7 @@ class PokeBattle_AI
:ENERGYPOWDER => 50, :ENERGYPOWDER => 50,
:ENERGYROOT => 200 :ENERGYROOT => 200
} }
hpItems[:RAGECANDYBAR] = 20 if !NEWEST_BATTLE_MECHANICS hpItems[:RAGECANDYBAR] = 20 if !RAGE_CANDY_BAR_CURES_STATUS_PROBLEMS
fullRestoreItems = [ fullRestoreItems = [
:FULLRESTORE :FULLRESTORE
] ]
@@ -59,37 +59,37 @@ class PokeBattle_AI
:FULLHEAL, :LAVACOOKIE, :OLDGATEAU, :CASTELIACONE, :LUMIOSEGALETTE, :FULLHEAL, :LAVACOOKIE, :OLDGATEAU, :CASTELIACONE, :LUMIOSEGALETTE,
:SHALOURSABLE, :BIGMALASADA, :LUMBERRY, :HEALPOWDER :SHALOURSABLE, :BIGMALASADA, :LUMBERRY, :HEALPOWDER
] ]
allStatusItems.push(:RAGECANDYBAR) if NEWEST_BATTLE_MECHANICS allStatusItems.push(:RAGECANDYBAR) if RAGE_CANDY_BAR_CURES_STATUS_PROBLEMS
xItems = { xItems = {
:XATTACK => [PBStats::ATTACK, (NEWEST_BATTLE_MECHANICS) ? 2 : 1], :XATTACK => [PBStats::ATTACK, (X_STAT_ITEMS_RAISE_BY_TWO_STAGES) ? 2 : 1],
:XATTACK2 => [PBStats::ATTACK, 2], :XATTACK2 => [PBStats::ATTACK, 2],
:XATTACK3 => [PBStats::ATTACK, 3], :XATTACK3 => [PBStats::ATTACK, 3],
:XATTACK6 => [PBStats::ATTACK, 6], :XATTACK6 => [PBStats::ATTACK, 6],
:XDEFENSE => [PBStats::DEFENSE, (NEWEST_BATTLE_MECHANICS) ? 2 : 1], :XDEFENSE => [PBStats::DEFENSE, (X_STAT_ITEMS_RAISE_BY_TWO_STAGES) ? 2 : 1],
:XDEFENSE2 => [PBStats::DEFENSE, 2], :XDEFENSE2 => [PBStats::DEFENSE, 2],
:XDEFENSE3 => [PBStats::DEFENSE, 3], :XDEFENSE3 => [PBStats::DEFENSE, 3],
:XDEFENSE6 => [PBStats::DEFENSE, 6], :XDEFENSE6 => [PBStats::DEFENSE, 6],
:XDEFEND => [PBStats::DEFENSE, (NEWEST_BATTLE_MECHANICS) ? 2 : 1], :XDEFEND => [PBStats::DEFENSE, (X_STAT_ITEMS_RAISE_BY_TWO_STAGES) ? 2 : 1],
:XDEFEND2 => [PBStats::DEFENSE, 2], :XDEFEND2 => [PBStats::DEFENSE, 2],
:XDEFEND3 => [PBStats::DEFENSE, 3], :XDEFEND3 => [PBStats::DEFENSE, 3],
:XDEFEND6 => [PBStats::DEFENSE, 6], :XDEFEND6 => [PBStats::DEFENSE, 6],
:XSPATK => [PBStats::SPATK, (NEWEST_BATTLE_MECHANICS) ? 2 : 1], :XSPATK => [PBStats::SPATK, (X_STAT_ITEMS_RAISE_BY_TWO_STAGES) ? 2 : 1],
:XSPATK2 => [PBStats::SPATK, 2], :XSPATK2 => [PBStats::SPATK, 2],
:XSPATK3 => [PBStats::SPATK, 3], :XSPATK3 => [PBStats::SPATK, 3],
:XSPATK6 => [PBStats::SPATK, 6], :XSPATK6 => [PBStats::SPATK, 6],
:XSPECIAL => [PBStats::SPATK, (NEWEST_BATTLE_MECHANICS) ? 2 : 1], :XSPECIAL => [PBStats::SPATK, (X_STAT_ITEMS_RAISE_BY_TWO_STAGES) ? 2 : 1],
:XSPECIAL2 => [PBStats::SPATK, 2], :XSPECIAL2 => [PBStats::SPATK, 2],
:XSPECIAL3 => [PBStats::SPATK, 3], :XSPECIAL3 => [PBStats::SPATK, 3],
:XSPECIAL6 => [PBStats::SPATK, 6], :XSPECIAL6 => [PBStats::SPATK, 6],
:XSPDEF => [PBStats::SPDEF, (NEWEST_BATTLE_MECHANICS) ? 2 : 1], :XSPDEF => [PBStats::SPDEF, (X_STAT_ITEMS_RAISE_BY_TWO_STAGES) ? 2 : 1],
:XSPDEF2 => [PBStats::SPDEF, 2], :XSPDEF2 => [PBStats::SPDEF, 2],
:XSPDEF3 => [PBStats::SPDEF, 3], :XSPDEF3 => [PBStats::SPDEF, 3],
:XSPDEF6 => [PBStats::SPDEF, 6], :XSPDEF6 => [PBStats::SPDEF, 6],
:XSPEED => [PBStats::SPEED, (NEWEST_BATTLE_MECHANICS) ? 2 : 1], :XSPEED => [PBStats::SPEED, (X_STAT_ITEMS_RAISE_BY_TWO_STAGES) ? 2 : 1],
:XSPEED2 => [PBStats::SPEED, 2], :XSPEED2 => [PBStats::SPEED, 2],
:XSPEED3 => [PBStats::SPEED, 3], :XSPEED3 => [PBStats::SPEED, 3],
:XSPEED6 => [PBStats::SPEED, 6], :XSPEED6 => [PBStats::SPEED, 6],
:XACCURACY => [PBStats::ACCURACY, (NEWEST_BATTLE_MECHANICS) ? 2 : 1], :XACCURACY => [PBStats::ACCURACY, (X_STAT_ITEMS_RAISE_BY_TWO_STAGES) ? 2 : 1],
:XACCURACY2 => [PBStats::ACCURACY, 2], :XACCURACY2 => [PBStats::ACCURACY, 2],
:XACCURACY3 => [PBStats::ACCURACY, 3], :XACCURACY3 => [PBStats::ACCURACY, 3],
:XACCURACY6 => [PBStats::ACCURACY, 6] :XACCURACY6 => [PBStats::ACCURACY, 6]

View File

@@ -120,7 +120,7 @@ class PokeBattle_AI
end end
return true if target.effects[PBEffects::Substitute]>0 && move.statusMove? && return true if target.effects[PBEffects::Substitute]>0 && move.statusMove? &&
!move.ignoresSubstitute?(user) && user.index!=target.index !move.ignoresSubstitute?(user) && user.index!=target.index
return true if NEWEST_BATTLE_MECHANICS && user.hasActiveAbility?(:PRANKSTER) && return true if MECHANICS_GENERATION >= 7 && user.hasActiveAbility?(:PRANKSTER) &&
target.pbHasType?(:DARK) && target.opposes?(user) target.pbHasType?(:DARK) && target.opposes?(user)
return true if move.priority>0 && @battle.field.terrain==PBBattleTerrains::Psychic && return true if move.priority>0 && @battle.field.terrain==PBBattleTerrains::Psychic &&
target.affectedByTerrain? && target.opposes?(user) target.affectedByTerrain? && target.opposes?(user)
@@ -200,7 +200,7 @@ class PokeBattle_AI
baseDmg = move.pbNaturalGiftBaseDamage(user.item_id) baseDmg = move.pbNaturalGiftBaseDamage(user.item_id)
when "09B" # Heavy Slam when "09B" # Heavy Slam
baseDmg = move.pbBaseDamage(baseDmg,user,target) baseDmg = move.pbBaseDamage(baseDmg,user,target)
baseDmg *= 2 if NEWEST_BATTLE_MECHANICS && skill>=PBTrainerAI.mediumSkill && baseDmg *= 2 if MECHANICS_GENERATION >= 7 && skill>=PBTrainerAI.mediumSkill &&
target.effects[PBEffects::Minimize] target.effects[PBEffects::Minimize]
when "0A0", "0BD", "0BE" # Frost Breath, Double Kick, Twineedle when "0A0", "0BD", "0BE" # Frost Breath, Double Kick, Twineedle
baseDmg *= 2 baseDmg *= 2
@@ -469,7 +469,7 @@ class PokeBattle_AI
if skill>=PBTrainerAI.highSkill if skill>=PBTrainerAI.highSkill
if user.status==PBStatuses::BURN && move.physicalMove?(type) && if user.status==PBStatuses::BURN && move.physicalMove?(type) &&
!user.hasActiveAbility?(:GUTS) && !user.hasActiveAbility?(:GUTS) &&
!(NEWEST_BATTLE_MECHANICS && move.function=="07E") # Facade !(MECHANICS_GENERATION >= 6 && move.function == "07E") # Facade
multipliers[FINAL_DMG_MULT] /= 2 multipliers[FINAL_DMG_MULT] /= 2
end end
end end
@@ -646,7 +646,7 @@ class PokeBattle_AI
end end
if skill>=PBTrainerAI.highSkill if skill>=PBTrainerAI.highSkill
if move.function=="006" # Toxic if move.function=="006" # Toxic
modifiers[BASE_ACC] = 0 if NEWEST_BATTLE_MECHANICS && move.statusMove? && modifiers[BASE_ACC] = 0 if MORE_TYPE_EFFECTS && move.statusMove? &&
user.pbHasType?(:POISON) user.pbHasType?(:POISON)
end end
if move.function=="070" # OHKO moves if move.function=="070" # OHKO moves

View File

@@ -491,10 +491,14 @@ FINAL_DMG_MULT = 3
def pbBattleConfusionBerry(battler,battle,item,forced,flavor,confuseMsg) def pbBattleConfusionBerry(battler,battle,item,forced,flavor,confuseMsg)
return false if !forced && !battler.canHeal? return false if !forced && !battler.canHeal?
return false if !forced && !battler.pbCanConsumeBerry?(item,false) return false if !forced && !battler.pbCanConsumeBerry?(item, (MECHANICS_GENERATION >= 7))
itemName = GameData::Item.get(item).name itemName = GameData::Item.get(item).name
battle.pbCommonAnimation("EatBerry",battler) if !forced battle.pbCommonAnimation("EatBerry",battler) if !forced
amt = (NEWEST_BATTLE_MECHANICS) ? battler.pbRecoverHP(battler.totalhp/2) : battler.pbRecoverHP(battler.totalhp/8) fraction_to_heal = 8 # Gens 6 and lower
if MECHANICS_GENERATION == 7; fraction_to_heal = 2
elsif MECHANICS_GENERATION >= 8; fraction_to_heal = 3
end
amt = battler.pbRecoverHP(battler.totalhp / fraction_to_heal)
if amt>0 if amt>0
if forced if forced
PBDebug.log("[Item triggered] Forced consuming of #{itemName}") PBDebug.log("[Item triggered] Forced consuming of #{itemName}")
@@ -577,7 +581,7 @@ def pbBattleGem(user,type,move,mults,moveType)
return if move.is_a?(PokeBattle_PledgeMove) return if move.is_a?(PokeBattle_PledgeMove)
return if moveType != type return if moveType != type
user.effects[PBEffects::GemConsumed] = user.item_id user.effects[PBEffects::GemConsumed] = user.item_id
if NEWEST_BATTLE_MECHANICS if MECHANICS_GENERATION >= 6
mults[BASE_DMG_MULT] *= 1.3 mults[BASE_DMG_MULT] *= 1.3
else else
mults[BASE_DMG_MULT] *= 1.5 mults[BASE_DMG_MULT] *= 1.5
@@ -603,10 +607,10 @@ def pbBattleWeatherAbility(weather,battler,battle,ignorePrimal=false)
battle.pbDisplay(_INTL("{1}'s {2} activated!",battler.pbThis,battler.abilityName)) battle.pbDisplay(_INTL("{1}'s {2} activated!",battler.pbThis,battler.abilityName))
end end
fixedDuration = false fixedDuration = false
fixedDuration = true if NEWEST_BATTLE_MECHANICS && fixedDuration = true if FIXED_DURATION_WEATHER_FROM_ABILITY &&
weather!=PBWeather::HarshSun && weather != PBWeather::HarshSun &&
weather!=PBWeather::HeavyRain && weather != PBWeather::HeavyRain &&
weather!=PBWeather::StrongWinds weather != PBWeather::StrongWinds
battle.pbStartWeather(battler,weather,fixedDuration) battle.pbStartWeather(battler,weather,fixedDuration)
# NOTE: The ability splash is hidden again in def pbStartWeather. # NOTE: The ability splash is hidden again in def pbStartWeather.
end end

View File

@@ -308,7 +308,7 @@ BattleHandlers::StatusCureAbility.add(:MAGMAARMOR,
BattleHandlers::StatusCureAbility.add(:OBLIVIOUS, BattleHandlers::StatusCureAbility.add(:OBLIVIOUS,
proc { |ability,battler| proc { |ability,battler|
next if battler.effects[PBEffects::Attract]<0 && next if battler.effects[PBEffects::Attract]<0 &&
(battler.effects[PBEffects::Taunt]==0 || !NEWEST_BATTLE_MECHANICS) (battler.effects[PBEffects::Taunt]==0 || MECHANICS_GENERATION <= 5)
battler.battle.pbShowAbilitySplash(battler) battler.battle.pbShowAbilitySplash(battler)
if battler.effects[PBEffects::Attract]>=0 if battler.effects[PBEffects::Attract]>=0
battler.pbCureAttract battler.pbCureAttract
@@ -319,7 +319,7 @@ BattleHandlers::StatusCureAbility.add(:OBLIVIOUS,
battler.pbThis,battler.abilityName)) battler.pbThis,battler.abilityName))
end end
end end
if battler.effects[PBEffects::Taunt]>0 && NEWEST_BATTLE_MECHANICS if battler.effects[PBEffects::Taunt]>0 && MECHANICS_GENERATION >= 6
battler.effects[PBEffects::Taunt] = 0 battler.effects[PBEffects::Taunt] = 0
if PokeBattle_SceneConstants::USE_ABILITY_SPLASH if PokeBattle_SceneConstants::USE_ABILITY_SPLASH
battler.battle.pbDisplay(_INTL("{1}'s Taunt wore off!",battler.pbThis)) battler.battle.pbDisplay(_INTL("{1}'s Taunt wore off!",battler.pbThis))
@@ -741,7 +741,7 @@ BattleHandlers::MoveBaseTypeModifierAbility.add(:LIQUIDVOICE,
BattleHandlers::MoveBaseTypeModifierAbility.add(:NORMALIZE, BattleHandlers::MoveBaseTypeModifierAbility.add(:NORMALIZE,
proc { |ability,user,move,type| proc { |ability,user,move,type|
next if !GameData::Type.exists?(:NORMAL) next if !GameData::Type.exists?(:NORMAL)
move.powerBoost = true if NEWEST_BATTLE_MECHANICS move.powerBoost = true if MECHANICS_GENERATION >= 7
next :NORMAL next :NORMAL
} }
) )
@@ -780,7 +780,7 @@ BattleHandlers::AccuracyCalcUserAbility.add(:HUSTLE,
BattleHandlers::AccuracyCalcUserAbility.add(:KEENEYE, BattleHandlers::AccuracyCalcUserAbility.add(:KEENEYE,
proc { |ability,mods,user,target,move,type| proc { |ability,mods,user,target,move,type|
mods[EVA_STAGE] = 0 if mods[EVA_STAGE]>0 && NEWEST_BATTLE_MECHANICS mods[EVA_STAGE] = 0 if mods[EVA_STAGE]>0 && MECHANICS_GENERATION >= 6
} }
) )
@@ -1601,12 +1601,12 @@ BattleHandlers::TargetAbilityOnHit.add(:WATERCOMPACTION,
BattleHandlers::TargetAbilityOnHit.add(:WEAKARMOR, BattleHandlers::TargetAbilityOnHit.add(:WEAKARMOR,
proc { |ability,user,target,move,battle| proc { |ability,user,target,move,battle|
next if !move.physicalMove? next if !move.physicalMove?
next if !target.pbCanLowerStatStage?(PBStats::DEFENSE,target) && next if !target.pbCanLowerStatStage?(PBStats::DEFENSE, target) &&
!target.pbCanRaiseStatStage?(PBStats::SPEED,target) !target.pbCanRaiseStatStage?(PBStats::SPEED, target)
battle.pbShowAbilitySplash(target) battle.pbShowAbilitySplash(target)
target.pbLowerStatStageByAbility(PBStats::DEFENSE,1,target,false) target.pbLowerStatStageByAbility(PBStats::DEFENSE, 1, target, false)
target.pbRaiseStatStageByAbility(PBStats::SPEED, target.pbRaiseStatStageByAbility(PBStats::SPEED,
(NEWEST_BATTLE_MECHANICS) ? 2 : 1,target,false) (MECHANICS_GENERATION >= 7) ? 2 : 1, target, false)
battle.pbHideAbilitySplash(target) battle.pbHideAbilitySplash(target)
} }
) )
@@ -2089,7 +2089,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:ANTICIPATION,
next if m.statusMove? next if m.statusMove?
if type1 if type1
moveType = m.type moveType = m.type
if NEWEST_BATTLE_MECHANICS && m.function == "090" # Hidden Power if MECHANICS_GENERATION >= 6 && m.function == "090" # Hidden Power
moveType = pbHiddenPower(b.pokemon)[0] moveType = pbHiddenPower(b.pokemon)[0]
end end
eff = PBTypes.getCombinedEffectiveness(moveType,type1,type2,type3) eff = PBTypes.getCombinedEffectiveness(moveType,type1,type2,type3)
@@ -2236,7 +2236,7 @@ BattleHandlers::AbilityOnSwitchIn.add(:FRISK,
end end
if foes.length>0 if foes.length>0
battle.pbShowAbilitySplash(battler) battle.pbShowAbilitySplash(battler)
if NEWEST_BATTLE_MECHANICS if MECHANICS_GENERATION >= 6
foes.each do |b| foes.each do |b|
battle.pbDisplay(_INTL("{1} frisked {2} and found its {3}!", battle.pbDisplay(_INTL("{1} frisked {2} and found its {3}!",
battler.pbThis,b.pbThis(true),b.itemName)) battler.pbThis,b.pbThis(true),b.itemName))

View File

@@ -748,7 +748,7 @@ BattleHandlers::DamageCalcUserItem.copy(:SOFTSAND,:EARTHPLATE)
BattleHandlers::DamageCalcUserItem.add(:SOULDEW, BattleHandlers::DamageCalcUserItem.add(:SOULDEW,
proc { |item,user,target,move,mults,baseDmg,type| proc { |item,user,target,move,mults,baseDmg,type|
next if !user.isSpecies?(:LATIAS) && !user.isSpecies?(:LATIOS) next if !user.isSpecies?(:LATIAS) && !user.isSpecies?(:LATIOS)
if NEWEST_BATTLE_MECHANICS if SOUL_DEW_POWERS_UP_TYPES
mults[FINAL_DMG_MULT] *= 1.2 if type == :PSYCHIC || type == :DRAGON mults[FINAL_DMG_MULT] *= 1.2 if type == :PSYCHIC || type == :DRAGON
else else
if move.specialMove? && !user.battle.rules["souldewclause"] if move.specialMove? && !user.battle.rules["souldewclause"]
@@ -934,7 +934,7 @@ BattleHandlers::DamageCalcTargetItem.add(:SHUCABERRY,
BattleHandlers::DamageCalcTargetItem.add(:SOULDEW, BattleHandlers::DamageCalcTargetItem.add(:SOULDEW,
proc { |item,user,target,move,mults,baseDmg,type| proc { |item,user,target,move,mults,baseDmg,type|
next if NEWEST_BATTLE_MECHANICS next if SOUL_DEW_POWERS_UP_TYPES
next if !target.isSpecies?(:LATIAS) && !target.isSpecies?(:LATIOS) next if !target.isSpecies?(:LATIAS) && !target.isSpecies?(:LATIOS)
if move.specialMove? && !user.battle.rules["souldewclause"] if move.specialMove? && !user.battle.rules["souldewclause"]
mults[DEF_MULT] *= 1.5 mults[DEF_MULT] *= 1.5

View File

@@ -101,7 +101,7 @@ BallHandlers::ModifyCatchRate.add(:SAFARIBALL,proc { |ball,catchRate,battle,batt
}) })
BallHandlers::ModifyCatchRate.add(:NETBALL,proc { |ball,catchRate,battle,battler,ultraBeast| BallHandlers::ModifyCatchRate.add(:NETBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
multiplier = (NEWEST_BATTLE_MECHANICS) ? 3.5 : 3 multiplier = (NEW_POKE_BALL_CATCH_RATES) ? 3.5 : 3
catchRate *= multiplier if battler.pbHasType?(:BUG) || battler.pbHasType?(:WATER) catchRate *= multiplier if battler.pbHasType?(:BUG) || battler.pbHasType?(:WATER)
next catchRate next catchRate
}) })
@@ -112,14 +112,14 @@ BallHandlers::ModifyCatchRate.add(:DIVEBALL,proc { |ball,catchRate,battle,battle
}) })
BallHandlers::ModifyCatchRate.add(:NESTBALL,proc { |ball,catchRate,battle,battler,ultraBeast| BallHandlers::ModifyCatchRate.add(:NESTBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
if battler.level<=((NEWEST_BATTLE_MECHANICS) ? 29 : 30) if battler.level <= 30
catchRate *= [(41-battler.level)/10.0,1].max catchRate *= [(41 - battler.level) / 10.0, 1].max
end end
next catchRate next catchRate
}) })
BallHandlers::ModifyCatchRate.add(:REPEATBALL,proc { |ball,catchRate,battle,battler,ultraBeast| BallHandlers::ModifyCatchRate.add(:REPEATBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
multiplier = (NEWEST_BATTLE_MECHANICS) ? 3.5 : 3 multiplier = (NEW_POKE_BALL_CATCH_RATES) ? 3.5 : 3
catchRate *= multiplier if battle.pbPlayer.owned[battler.species] catchRate *= multiplier if battle.pbPlayer.owned[battler.species]
next catchRate next catchRate
}) })
@@ -131,14 +131,13 @@ BallHandlers::ModifyCatchRate.add(:TIMERBALL,proc { |ball,catchRate,battle,battl
}) })
BallHandlers::ModifyCatchRate.add(:DUSKBALL,proc { |ball,catchRate,battle,battler,ultraBeast| BallHandlers::ModifyCatchRate.add(:DUSKBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
multiplier = (NEWEST_BATTLE_MECHANICS) ? 3 : 3.5 multiplier = (NEW_POKE_BALL_CATCH_RATES) ? 3 : 3.5
catchRate *= multiplier if battle.time==2 catchRate *= multiplier if battle.time==2
next catchRate next catchRate
}) })
BallHandlers::ModifyCatchRate.add(:QUICKBALL,proc { |ball,catchRate,battle,battler,ultraBeast| BallHandlers::ModifyCatchRate.add(:QUICKBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
multiplier = (NEWEST_BATTLE_MECHANICS) ? 4 : 5 catchRate *= 5 if battle.turnCount==0
catchRate *= multiplier if battle.turnCount==0
next catchRate next catchRate
}) })
@@ -162,7 +161,7 @@ BallHandlers::ModifyCatchRate.add(:LEVELBALL,proc { |ball,catchRate,battle,battl
}) })
BallHandlers::ModifyCatchRate.add(:LUREBALL,proc { |ball,catchRate,battle,battler,ultraBeast| BallHandlers::ModifyCatchRate.add(:LUREBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
multiplier = (NEWEST_BATTLE_MECHANICS) ? 5 : 3 multiplier = (NEW_POKE_BALL_CATCH_RATES) ? 5 : 3
catchRate *= multiplier if $PokemonTemp.encounterType==EncounterTypes::OldRod || catchRate *= multiplier if $PokemonTemp.encounterType==EncounterTypes::OldRod ||
$PokemonTemp.encounterType==EncounterTypes::GoodRod || $PokemonTemp.encounterType==EncounterTypes::GoodRod ||
$PokemonTemp.encounterType==EncounterTypes::SuperRod $PokemonTemp.encounterType==EncounterTypes::SuperRod
@@ -172,7 +171,7 @@ BallHandlers::ModifyCatchRate.add(:LUREBALL,proc { |ball,catchRate,battle,battle
BallHandlers::ModifyCatchRate.add(:HEAVYBALL,proc { |ball,catchRate,battle,battler,ultraBeast| BallHandlers::ModifyCatchRate.add(:HEAVYBALL,proc { |ball,catchRate,battle,battler,ultraBeast|
next 0 if catchRate==0 next 0 if catchRate==0
weight = battler.pbWeight weight = battler.pbWeight
if NEWEST_BATTLE_MECHANICS if NEW_POKE_BALL_CATCH_RATES
if weight>=3000; catchRate += 30 if weight>=3000; catchRate += 30
elsif weight>=2000; catchRate += 20 elsif weight>=2000; catchRate += 20
elsif weight<1000; catchRate -= 20 elsif weight<1000; catchRate -= 20

View File

@@ -578,7 +578,7 @@ end
Events.onEndBattle += proc { |_sender,e| Events.onEndBattle += proc { |_sender,e|
decision = e[0] decision = e[0]
canLose = e[1] canLose = e[1]
if NEWEST_BATTLE_MECHANICS || (decision!=2 && decision!=5) # not a loss or a draw if CHECK_EVOLUTION_AFTER_ALL_BATTLES || (decision!=2 && decision!=5) # not a loss or a draw
if $PokemonTemp.evolutionLevels if $PokemonTemp.evolutionLevels
pbEvolutionCheck($PokemonTemp.evolutionLevels) pbEvolutionCheck($PokemonTemp.evolutionLevels)
$PokemonTemp.evolutionLevels = nil $PokemonTemp.evolutionLevels = nil
@@ -602,7 +602,7 @@ Events.onEndBattle += proc { |_sender,e|
def pbEvolutionCheck(currentLevels) def pbEvolutionCheck(currentLevels)
for i in 0...currentLevels.length for i in 0...currentLevels.length
pkmn = $Trainer.party[i] pkmn = $Trainer.party[i]
next if !pkmn || (pkmn.hp==0 && !NEWEST_BATTLE_MECHANICS) next if !pkmn || (pkmn.hp==0 && !CHECK_EVOLUTION_FOR_FAINTED_POKEMON)
next if currentLevels[i] && pkmn.level==currentLevels[i] next if currentLevels[i] && pkmn.level==currentLevels[i]
newSpecies = pbCheckEvolution(pkmn) newSpecies = pbCheckEvolution(pkmn)
next if !newSpecies next if !newSpecies

View File

@@ -297,11 +297,11 @@ class PokemonEncounters
end end
end end
# Black Flute and White Flute alter the level of the wild Pokémon # Black Flute and White Flute alter the level of the wild Pokémon
if NEWEST_BATTLE_MECHANICS if FLUTES_CHANGE_WILD_ENCOUNTER_LEVELS
if $PokemonMap.blackFluteUsed if $PokemonMap.blackFluteUsed
level = [level+1+rand(3),PBExperience.maxLevel].min level = [level + 1 + rand(4), PBExperience.maxLevel].min
elsif $PokemonMap.whiteFluteUsed elsif $PokemonMap.whiteFluteUsed
level = [level-1-rand(3),1].max level = [level - 1 - rand(4), 1].max
end end
end end
# Return [species, level] # Return [species, level]
@@ -329,7 +329,7 @@ class PokemonEncounters
# increase precision). # increase precision).
encount = @density[enctype]*16 encount = @density[enctype]*16
encount *= 0.8 if $PokemonGlobal.bicycle encount *= 0.8 if $PokemonGlobal.bicycle
if !NEWEST_BATTLE_MECHANICS if !FLUTES_CHANGE_WILD_ENCOUNTER_LEVELS
if $PokemonMap.blackFluteUsed if $PokemonMap.blackFluteUsed
encount /= 2 encount /= 2
elsif $PokemonMap.whiteFluteUsed elsif $PokemonMap.whiteFluteUsed
@@ -382,7 +382,7 @@ class PokemonEncounters
return false if $DEBUG && Input.press?(Input::CTRL) return false if $DEBUG && Input.press?(Input::CTRL)
if !pbPokeRadarOnShakingGrass if !pbPokeRadarOnShakingGrass
if $PokemonGlobal.repel>0 || repel if $PokemonGlobal.repel>0 || repel
firstPkmn = (NEWEST_BATTLE_MECHANICS) ? $Trainer.firstPokemon : $Trainer.firstAblePokemon firstPkmn = (REPEL_COUNTS_FAINTED_POKEMON) ? $Trainer.firstPokemon : $Trainer.firstAblePokemon
return false if firstPkmn && encounter[1]<firstPkmn.level return false if firstPkmn && encounter[1]<firstPkmn.level
end end
end end

View File

@@ -374,19 +374,15 @@ end
Events.onAction += proc { |_sender, _e| Events.onAction += proc { |_sender, _e|
if $PokemonGlobal.diving if $PokemonGlobal.diving
if DIVING_SURFACE_ANYWHERE surface_map_id = nil
GameData::MapMetadata.each do |map_data|
next if !map_data.dive_map_id || map_data.dive_map_id != $game_map.map_id
surface_map_id = map_data.id
break
end
if surface_map_id &&
PBTerrain.isDeepWater?($MapFactory.getTerrainTag(surface_map_id, $game_player.x, $game_player.y))
pbSurfacing pbSurfacing
else
surface_map_id = nil
GameData::MapMetadata.each do |map_data|
next if !map_data.dive_map_id || map_data.dive_map_id != $game_map.map_id
surface_map_id = map_data.id
break
end
if surface_map_id &&
PBTerrain.isDeepWater?($MapFactory.getTerrainTag(surface_map_id, $game_player.x, $game_player.y))
pbSurfacing
end
end end
else else
pbDive if PBTerrain.isDeepWater?($game_player.terrain_tag) pbDive if PBTerrain.isDeepWater?($game_player.terrain_tag)
@@ -396,7 +392,6 @@ Events.onAction += proc { |_sender, _e|
HiddenMoveHandlers::CanUseMove.add(:DIVE,proc { |move,pkmn,showmsg| HiddenMoveHandlers::CanUseMove.add(:DIVE,proc { |move,pkmn,showmsg|
next false if !pbCheckHiddenMoveBadge(BADGE_FOR_DIVE,showmsg) next false if !pbCheckHiddenMoveBadge(BADGE_FOR_DIVE,showmsg)
if $PokemonGlobal.diving if $PokemonGlobal.diving
next true if DIVING_SURFACE_ANYWHERE
surface_map_id = nil surface_map_id = nil
GameData::MapMetadata.each do |map_data| GameData::MapMetadata.each do |map_data|
next if !map_data.dive_map_id || map_data.dive_map_id != $game_map.map_id next if !map_data.dive_map_id || map_data.dive_map_id != $game_map.map_id

View File

@@ -228,7 +228,7 @@ def pbDayCareGenerateEgg
moves.push(move) moves.push(move)
end end
# Inheriting Machine Moves # Inheriting Machine Moves
if !NEWEST_BATTLE_MECHANICS if BREEDING_CAN_INHERIT_MACHINE_MOVES
GameData::Item.each do |i| GameData::Item.each do |i|
atk = i.move atk = i.move
next if !atk next if !atk
@@ -242,7 +242,7 @@ def pbDayCareGenerateEgg
if movefather.male? if movefather.male?
babyEggMoves.each { |m| moves.push(m) if movefather.hasMove?(m) } babyEggMoves.each { |m| moves.push(m) if movefather.hasMove?(m) }
end end
if NEWEST_BATTLE_MECHANICS if BREEDING_CAN_INHERIT_EGG_MOVES_FROM_MOTHER
babyEggMoves.each { |m| moves.push(m) if movemother.hasMove?(m) } babyEggMoves.each { |m| moves.push(m) if movemother.hasMove?(m) }
end end
# Volt Tackle # Volt Tackle
@@ -293,8 +293,7 @@ def pbDayCareGenerateEgg
end end
r = (r+1)%2 r = (r+1)%2
end end
limit = (NEWEST_BATTLE_MECHANICS && (mother.hasItem?(:DESTINYKNOT) || limit = (mother.hasItem?(:DESTINYKNOT) || father.hasItem?(:DESTINYKNOT)) ? 5 : 3
father.hasItem?(:DESTINYKNOT))) ? 5 : 3
loop do loop do
freestats = [] freestats = []
PBStats.eachStat { |s| freestats.push(s) if !ivinherit.include?(s) } PBStats.eachStat { |s| freestats.push(s) if !ivinherit.include?(s) }
@@ -307,11 +306,12 @@ def pbDayCareGenerateEgg
break if num>=limit break if num>=limit
end end
# Inheriting nature # Inheriting nature
newnatures = [] new_natures = []
newnatures.push(mother.nature) if mother.hasItem?(:EVERSTONE) new_natures.push(mother.nature) if mother.hasItem?(:EVERSTONE)
newnatures.push(father.nature) if father.hasItem?(:EVERSTONE) new_natures.push(father.nature) if father.hasItem?(:EVERSTONE)
if newnatures.length>0 if new_natures.length > 0
egg.setNature(newnatures[rand(newnatures.length)]) new_nature = (new_natures.length == 1) ? new_natures[0] : new_natures[rand(new_natures.length)]
egg.setNature(new_nature)
end end
# Masuda method and Shiny Charm # Masuda method and Shiny Charm
shinyretries = 0 shinyretries = 0
@@ -324,26 +324,34 @@ def pbDayCareGenerateEgg
end end
end end
# Inheriting ability from the mother # Inheriting ability from the mother
if !ditto0 && !ditto1 if !ditto0 || !ditto1
if mother.hasHiddenAbility? parent = (ditto0) ? father : mother # The non-Ditto
egg.setAbility(mother.abilityIndex) if rand(10)<6 if parent.hasHiddenAbility?
else egg.setAbility(parent.abilityIndex) if rand(100) < 60
if rand(10)<8 elsif !ditto0 && !ditto1
if rand(100) < 80
egg.setAbility(mother.abilityIndex) egg.setAbility(mother.abilityIndex)
else else
egg.setAbility((mother.abilityIndex+1)%2) egg.setAbility((mother.abilityIndex + 1) % 2)
end end
end end
elsif !(ditto0 && ditto1) && NEWEST_BATTLE_MECHANICS
parent = (!ditto0) ? mother : father
if parent.hasHiddenAbility?
egg.setAbility(parent.abilityIndex) if rand(10)<6
end
end end
# Inheriting Poké Ball from the mother # Inheriting Poké Ball from the mother (or father if it's same species as mother)
if mother.female? && if !ditto0 || !ditto1
![:MASTERBALL, :CHERISHBALL].include?(pbBallTypeToItem(mother.ballused).id) possible_balls = []
egg.ballused = mother.ballused if mother.species == father.species
possible_balls.push(mother.ballused)
possible_balls.push(father.ballused)
else
possible_balls.push(pkmn0.ballused) if pkmn0.female? || ditto1
possible_balls.push(pkmn1.ballused) if pkmn1.female? || ditto0
end
possible_balls.delete(pbGetBallType(:MASTERBALL)) # Can't inherit this Ball
possible_balls.delete(pbGetBallType(:CHERISHBALL)) # Can't inherit this Ball
if possible_balls.length > 0
egg.ballused = possible_balls[0]
egg.ballused = possible_balls[rand(possible_balls.length)] if possible_balls.length > 1
end
end end
# Set all stats # Set all stats
egg.happiness = 120 egg.happiness = 120

View File

@@ -433,7 +433,7 @@ def pbLearnMove(pkmn,move,ignoreifknown=false,bymachine=false,&block)
oldmovename = pkmn.moves[forgetmove].name oldmovename = pkmn.moves[forgetmove].name
oldmovepp = pkmn.moves[forgetmove].pp oldmovepp = pkmn.moves[forgetmove].pp
pkmn.moves[forgetmove] = PBMove.new(move) # Replaces current/total PP pkmn.moves[forgetmove] = PBMove.new(move) # Replaces current/total PP
if bymachine && !NEWEST_BATTLE_MECHANICS if bymachine && TAUGHT_MACHINES_KEEP_OLD_PP
pkmn.moves[forgetmove].pp = [oldmovepp,pkmn.moves[forgetmove].total_pp].min pkmn.moves[forgetmove].pp = [oldmovepp,pkmn.moves[forgetmove].total_pp].min
end end
pbMessage(_INTL("1,\\wt[16] 2, and\\wt[16]...\\wt[16] ...\\wt[16] ... Ta-da!\\se[Battle ball drop]\1"),&block) pbMessage(_INTL("1,\\wt[16] 2, and\\wt[16]...\\wt[16] ...\\wt[16] ... Ta-da!\\se[Battle ball drop]\1"),&block)
@@ -477,7 +477,7 @@ def pbUseItem(bag,item,bagscene=nil)
if !pbConfirmMessage(_INTL("Do you want to teach {1} to a Pokémon?",movename)) if !pbConfirmMessage(_INTL("Do you want to teach {1} to a Pokémon?",movename))
return 0 return 0
elsif pbMoveTutorChoose(machine,nil,true) elsif pbMoveTutorChoose(machine,nil,true)
bag.pbDeleteItem(item) if itm.is_TM? && !INFINITE_TMS bag.pbDeleteItem(item) if itm.is_TR?
return 1 return 1
end end
return 0 return 0
@@ -522,7 +522,7 @@ def pbUseItem(bag,item,bagscene=nil)
bagscene.pbRefresh if bagscene bagscene.pbRefresh if bagscene
} }
return (ret) ? 1 : 0 return (ret) ? 1 : 0
elsif useType==2 # Item is usable from bag elsif useType==2 # Item is usable from Bag
intret = ItemHandlers.triggerUseFromBag(item) intret = ItemHandlers.triggerUseFromBag(item)
case intret case intret
when 0 then return 0 when 0 then return 0
@@ -559,7 +559,7 @@ def pbUseItemOnPokemon(item,pkmn,scene)
pbMessage(_INTL("\\se[PC access]You booted up {1}.\1",itm.name)) { scene.pbUpdate } pbMessage(_INTL("\\se[PC access]You booted up {1}.\1",itm.name)) { scene.pbUpdate }
if pbConfirmMessage(_INTL("Do you want to teach {1} to {2}?",movename,pkmn.name)) { scene.pbUpdate } if pbConfirmMessage(_INTL("Do you want to teach {1} to {2}?",movename,pkmn.name)) { scene.pbUpdate }
if pbLearnMove(pkmn,machine,false,true) { scene.pbUpdate } if pbLearnMove(pkmn,machine,false,true) { scene.pbUpdate }
$PokemonBag.pbDeleteItem(item) if itm.is_TM? && !INFINITE_TMS $PokemonBag.pbDeleteItem(item) if itm.is_TR?
return true return true
end end
end end

View File

@@ -372,7 +372,7 @@ ItemHandlers::UseOnPokemon.add(:POTION,proc { |item,pkmn,scene|
}) })
ItemHandlers::UseOnPokemon.copy(:POTION,:BERRYJUICE,:SWEETHEART) ItemHandlers::UseOnPokemon.copy(:POTION,:BERRYJUICE,:SWEETHEART)
ItemHandlers::UseOnPokemon.copy(:POTION,:RAGECANDYBAR) if !NEWEST_BATTLE_MECHANICS ItemHandlers::UseOnPokemon.copy(:POTION,:RAGECANDYBAR) if !RAGE_CANDY_BAR_CURES_STATUS_PROBLEMS
ItemHandlers::UseOnPokemon.add(:SUPERPOTION,proc { |item,pkmn,scene| ItemHandlers::UseOnPokemon.add(:SUPERPOTION,proc { |item,pkmn,scene|
next pbHPItem(pkmn,50,scene) next pbHPItem(pkmn,50,scene)
@@ -489,7 +489,7 @@ ItemHandlers::UseOnPokemon.add(:FULLHEAL,proc { |item,pkmn,scene|
ItemHandlers::UseOnPokemon.copy(:FULLHEAL, ItemHandlers::UseOnPokemon.copy(:FULLHEAL,
:LAVACOOKIE,:OLDGATEAU,:CASTELIACONE,:LUMIOSEGALETTE,:SHALOURSABLE, :LAVACOOKIE,:OLDGATEAU,:CASTELIACONE,:LUMIOSEGALETTE,:SHALOURSABLE,
:BIGMALASADA,:LUMBERRY) :BIGMALASADA,:LUMBERRY)
ItemHandlers::UseOnPokemon.copy(:FULLHEAL,:RAGECANDYBAR) if NEWEST_BATTLE_MECHANICS ItemHandlers::UseOnPokemon.copy(:FULLHEAL,:RAGECANDYBAR) if RAGE_CANDY_BAR_CURES_STATUS_PROBLEMS
ItemHandlers::UseOnPokemon.add(:FULLRESTORE,proc { |item,pkmn,scene| ItemHandlers::UseOnPokemon.add(:FULLRESTORE,proc { |item,pkmn,scene|
if pkmn.fainted? || (pkmn.hp==pkmn.totalhp && pkmn.status==PBStatuses::NONE) if pkmn.fainted? || (pkmn.hp==pkmn.totalhp && pkmn.status==PBStatuses::NONE)

View File

@@ -66,7 +66,7 @@ ItemHandlers::CanUseInBattle.copy(:POTION,
:SUPERPOTION,:HYPERPOTION,:MAXPOTION,:BERRYJUICE,:SWEETHEART,:FRESHWATER, :SUPERPOTION,:HYPERPOTION,:MAXPOTION,:BERRYJUICE,:SWEETHEART,:FRESHWATER,
:SODAPOP,:LEMONADE,:MOOMOOMILK,:ORANBERRY,:SITRUSBERRY,:ENERGYPOWDER, :SODAPOP,:LEMONADE,:MOOMOOMILK,:ORANBERRY,:SITRUSBERRY,:ENERGYPOWDER,
:ENERGYROOT) :ENERGYROOT)
ItemHandlers::CanUseInBattle.copy(:POTION,:RAGECANDYBAR) if !NEWEST_BATTLE_MECHANICS ItemHandlers::CanUseInBattle.copy(:POTION,:RAGECANDYBAR) if !RAGE_CANDY_BAR_CURES_STATUS_PROBLEMS
ItemHandlers::CanUseInBattle.add(:AWAKENING,proc { |item,pokemon,battler,move,firstAction,battle,scene,showMessages| ItemHandlers::CanUseInBattle.add(:AWAKENING,proc { |item,pokemon,battler,move,firstAction,battle,scene,showMessages|
next pbBattleItemCanCureStatus?(PBStatuses::SLEEP,pokemon,scene,showMessages) next pbBattleItemCanCureStatus?(PBStatuses::SLEEP,pokemon,scene,showMessages)
@@ -119,7 +119,7 @@ ItemHandlers::CanUseInBattle.add(:FULLHEAL,proc { |item,pokemon,battler,move,fir
ItemHandlers::CanUseInBattle.copy(:FULLHEAL, ItemHandlers::CanUseInBattle.copy(:FULLHEAL,
:LAVACOOKIE,:OLDGATEAU,:CASTELIACONE,:LUMIOSEGALETTE,:SHALOURSABLE, :LAVACOOKIE,:OLDGATEAU,:CASTELIACONE,:LUMIOSEGALETTE,:SHALOURSABLE,
:BIGMALASADA,:LUMBERRY,:HEALPOWDER) :BIGMALASADA,:LUMBERRY,:HEALPOWDER)
ItemHandlers::CanUseInBattle.copy(:FULLHEAL,:RAGECANDYBAR) if NEWEST_BATTLE_MECHANICS ItemHandlers::CanUseInBattle.copy(:FULLHEAL,:RAGECANDYBAR) if RAGE_CANDY_BAR_CURES_STATUS_PROBLEMS
ItemHandlers::CanUseInBattle.add(:FULLRESTORE,proc { |item,pokemon,battler,move,firstAction,battle,scene,showMessages| ItemHandlers::CanUseInBattle.add(:FULLRESTORE,proc { |item,pokemon,battler,move,firstAction,battle,scene,showMessages|
if !pokemon.able? || if !pokemon.able? ||
@@ -317,7 +317,7 @@ ItemHandlers::BattleUseOnPokemon.add(:POTION,proc { |item,pokemon,battler,choice
}) })
ItemHandlers::BattleUseOnPokemon.copy(:POTION,:BERRYJUICE,:SWEETHEART) ItemHandlers::BattleUseOnPokemon.copy(:POTION,:BERRYJUICE,:SWEETHEART)
ItemHandlers::BattleUseOnPokemon.copy(:POTION,:RAGECANDYBAR) if !NEWEST_BATTLE_MECHANICS ItemHandlers::BattleUseOnPokemon.copy(:POTION,:RAGECANDYBAR) if !RAGE_CANDY_BAR_CURES_STATUS_PROBLEMS
ItemHandlers::BattleUseOnPokemon.add(:SUPERPOTION,proc { |item,pokemon,battler,choices,scene| ItemHandlers::BattleUseOnPokemon.add(:SUPERPOTION,proc { |item,pokemon,battler,choices,scene|
pbBattleHPItem(pokemon,battler,50,scene) pbBattleHPItem(pokemon,battler,50,scene)
@@ -417,7 +417,7 @@ ItemHandlers::BattleUseOnPokemon.add(:FULLHEAL,proc { |item,pokemon,battler,choi
ItemHandlers::BattleUseOnPokemon.copy(:FULLHEAL, ItemHandlers::BattleUseOnPokemon.copy(:FULLHEAL,
:LAVACOOKIE,:OLDGATEAU,:CASTELIACONE,:LUMIOSEGALETTE,:SHALOURSABLE, :LAVACOOKIE,:OLDGATEAU,:CASTELIACONE,:LUMIOSEGALETTE,:SHALOURSABLE,
:BIGMALASADA,:LUMBERRY) :BIGMALASADA,:LUMBERRY)
ItemHandlers::BattleUseOnPokemon.copy(:FULLHEAL,:RAGECANDYBAR) if NEWEST_BATTLE_MECHANICS ItemHandlers::BattleUseOnPokemon.copy(:FULLHEAL,:RAGECANDYBAR) if RAGE_CANDY_BAR_CURES_STATUS_PROBLEMS
ItemHandlers::BattleUseOnPokemon.add(:FULLRESTORE,proc { |item,pokemon,battler,choices,scene| ItemHandlers::BattleUseOnPokemon.add(:FULLRESTORE,proc { |item,pokemon,battler,choices,scene|
pokemon.healStatus pokemon.healStatus
@@ -523,7 +523,7 @@ ItemHandlers::BattleUseOnBattler.add(:YELLOWFLUTE,proc { |item,battler,scene|
ItemHandlers::BattleUseOnBattler.copy(:YELLOWFLUTE,:PERSIMBERRY) ItemHandlers::BattleUseOnBattler.copy(:YELLOWFLUTE,:PERSIMBERRY)
ItemHandlers::BattleUseOnBattler.add(:XATTACK,proc { |item,battler,scene| ItemHandlers::BattleUseOnBattler.add(:XATTACK,proc { |item,battler,scene|
battler.pbRaiseStatStage(PBStats::ATTACK,(NEWEST_BATTLE_MECHANICS) ? 2 : 1,battler) battler.pbRaiseStatStage(PBStats::ATTACK,(X_STAT_ITEMS_RAISE_BY_TWO_STAGES) ? 2 : 1,battler)
battler.pokemon.changeHappiness("battleitem") battler.pokemon.changeHappiness("battleitem")
}) })
@@ -543,7 +543,7 @@ ItemHandlers::BattleUseOnBattler.add(:XATTACK6,proc { |item,battler,scene|
}) })
ItemHandlers::BattleUseOnBattler.add(:XDEFENSE,proc { |item,battler,scene| ItemHandlers::BattleUseOnBattler.add(:XDEFENSE,proc { |item,battler,scene|
battler.pbRaiseStatStage(PBStats::DEFENSE,(NEWEST_BATTLE_MECHANICS) ? 2 : 1,battler) battler.pbRaiseStatStage(PBStats::DEFENSE,(X_STAT_ITEMS_RAISE_BY_TWO_STAGES) ? 2 : 1,battler)
battler.pokemon.changeHappiness("battleitem") battler.pokemon.changeHappiness("battleitem")
}) })
@@ -571,7 +571,7 @@ ItemHandlers::BattleUseOnBattler.add(:XDEFENSE6,proc { |item,battler,scene|
ItemHandlers::BattleUseOnBattler.copy(:XDEFENSE6,:XDEFEND6) ItemHandlers::BattleUseOnBattler.copy(:XDEFENSE6,:XDEFEND6)
ItemHandlers::BattleUseOnBattler.add(:XSPATK,proc { |item,battler,scene| ItemHandlers::BattleUseOnBattler.add(:XSPATK,proc { |item,battler,scene|
battler.pbRaiseStatStage(PBStats::SPATK,(NEWEST_BATTLE_MECHANICS) ? 2 : 1,battler) battler.pbRaiseStatStage(PBStats::SPATK,(X_STAT_ITEMS_RAISE_BY_TWO_STAGES) ? 2 : 1,battler)
battler.pokemon.changeHappiness("battleitem") battler.pokemon.changeHappiness("battleitem")
}) })
@@ -599,7 +599,7 @@ ItemHandlers::BattleUseOnBattler.add(:XSPATK6,proc { |item,battler,scene|
ItemHandlers::BattleUseOnBattler.copy(:XSPATK6,:XSPECIAL6) ItemHandlers::BattleUseOnBattler.copy(:XSPATK6,:XSPECIAL6)
ItemHandlers::BattleUseOnBattler.add(:XSPDEF,proc { |item,battler,scene| ItemHandlers::BattleUseOnBattler.add(:XSPDEF,proc { |item,battler,scene|
battler.pbRaiseStatStage(PBStats::SPDEF,(NEWEST_BATTLE_MECHANICS) ? 2 : 1,battler) battler.pbRaiseStatStage(PBStats::SPDEF,(X_STAT_ITEMS_RAISE_BY_TWO_STAGES) ? 2 : 1,battler)
battler.pokemon.changeHappiness("battleitem") battler.pokemon.changeHappiness("battleitem")
}) })
@@ -619,7 +619,7 @@ ItemHandlers::BattleUseOnBattler.add(:XSPDEF6,proc { |item,battler,scene|
}) })
ItemHandlers::BattleUseOnBattler.add(:XSPEED,proc { |item,battler,scene| ItemHandlers::BattleUseOnBattler.add(:XSPEED,proc { |item,battler,scene|
battler.pbRaiseStatStage(PBStats::SPEED,(NEWEST_BATTLE_MECHANICS) ? 2 : 1,battler) battler.pbRaiseStatStage(PBStats::SPEED,(X_STAT_ITEMS_RAISE_BY_TWO_STAGES) ? 2 : 1,battler)
battler.pokemon.changeHappiness("battleitem") battler.pokemon.changeHappiness("battleitem")
}) })
@@ -639,7 +639,7 @@ ItemHandlers::BattleUseOnBattler.add(:XSPEED6,proc { |item,battler,scene|
}) })
ItemHandlers::BattleUseOnBattler.add(:XACCURACY,proc { |item,battler,scene| ItemHandlers::BattleUseOnBattler.add(:XACCURACY,proc { |item,battler,scene|
battler.pbRaiseStatStage(PBStats::ACCURACY,(NEWEST_BATTLE_MECHANICS) ? 2 : 1,battler) battler.pbRaiseStatStage(PBStats::ACCURACY,(X_STAT_ITEMS_RAISE_BY_TWO_STAGES) ? 2 : 1,battler)
battler.pokemon.changeHappiness("battleitem") battler.pokemon.changeHappiness("battleitem")
}) })

View File

@@ -39,122 +39,6 @@ class PokemonSystem
def tilemap; return MAP_VIEW_MODE; end def tilemap; return MAP_VIEW_MODE; end
end end
#===============================================================================
# Stores game options
# Default options are at the top of script section SpriteWindow.
#===============================================================================
$SpeechFrames = [
MessageConfig::TextSkinName, # Default: speech hgss 1
"speech hgss 2",
"speech hgss 3",
"speech hgss 4",
"speech hgss 5",
"speech hgss 6",
"speech hgss 7",
"speech hgss 8",
"speech hgss 9",
"speech hgss 10",
"speech hgss 11",
"speech hgss 12",
"speech hgss 13",
"speech hgss 14",
"speech hgss 15",
"speech hgss 16",
"speech hgss 17",
"speech hgss 18",
"speech hgss 19",
"speech hgss 20",
"speech pl 18"
]
$TextFrames = [
"Graphics/Windowskins/"+MessageConfig::ChoiceSkinName, # Default: choice 1
"Graphics/Windowskins/choice 2",
"Graphics/Windowskins/choice 3",
"Graphics/Windowskins/choice 4",
"Graphics/Windowskins/choice 5",
"Graphics/Windowskins/choice 6",
"Graphics/Windowskins/choice 7",
"Graphics/Windowskins/choice 8",
"Graphics/Windowskins/choice 9",
"Graphics/Windowskins/choice 10",
"Graphics/Windowskins/choice 11",
"Graphics/Windowskins/choice 12",
"Graphics/Windowskins/choice 13",
"Graphics/Windowskins/choice 14",
"Graphics/Windowskins/choice 15",
"Graphics/Windowskins/choice 16",
"Graphics/Windowskins/choice 17",
"Graphics/Windowskins/choice 18",
"Graphics/Windowskins/choice 19",
"Graphics/Windowskins/choice 20",
"Graphics/Windowskins/choice 21",
"Graphics/Windowskins/choice 22",
"Graphics/Windowskins/choice 23",
"Graphics/Windowskins/choice 24",
"Graphics/Windowskins/choice 25",
"Graphics/Windowskins/choice 26",
"Graphics/Windowskins/choice 27",
"Graphics/Windowskins/choice 28"
]
$VersionStyles = [
[MessageConfig::FontName], # Default font style - Power Green/"Pokemon Emerald"
["Power Red and Blue"],
["Power Red and Green"],
["Power Clear"]
]
def pbSettingToTextSpeed(speed)
case speed
when 0 then return 2
when 1 then return 1
when 2 then return -2
end
return MessageConfig::TextSpeed || 1
end
#===============================================================================
#
#===============================================================================
module MessageConfig
def self.pbDefaultSystemFrame
begin
return pbResolveBitmap($TextFrames[$PokemonSystem.frame]) || ""
rescue
return pbResolveBitmap("Graphics/Windowskins/"+MessageConfig::ChoiceSkinName) || ""
end
end
def self.pbDefaultSpeechFrame
begin
return pbResolveBitmap("Graphics/Windowskins/"+$SpeechFrames[$PokemonSystem.textskin]) || ""
rescue
return pbResolveBitmap("Graphics/Windowskins/"+MessageConfig::TextSkinName) || ""
end
end
def self.pbDefaultSystemFontName
begin
return MessageConfig.pbTryFonts($VersionStyles[$PokemonSystem.font][0],"Arial Narrow","Arial")
rescue
return MessageConfig.pbTryFonts(MessageConfig::FontName,"Arial Narrow","Arial")
end
end
def self.pbDefaultTextSpeed
return pbSettingToTextSpeed(($PokemonSystem.textspeed rescue nil))
end
def pbGetSystemTextSpeed
begin
return $PokemonSystem.textspeed
rescue
return (Graphics.frame_rate>40) ? 2 : 3
end
end
end
#=============================================================================== #===============================================================================
# #
#=============================================================================== #===============================================================================
@@ -460,7 +344,7 @@ class PokemonOption_Scene
proc { $PokemonSystem.textspeed }, proc { $PokemonSystem.textspeed },
proc { |value| proc { |value|
$PokemonSystem.textspeed = value $PokemonSystem.textspeed = value
MessageConfig.pbSetTextSpeed(pbSettingToTextSpeed(value)) MessageConfig.pbSetTextSpeed(MessageConfig.pbSettingToTextSpeed(value))
} }
), ),
EnumOption.new(_INTL("Battle Effects"),[_INTL("On"),_INTL("Off")], EnumOption.new(_INTL("Battle Effects"),[_INTL("On"),_INTL("Off")],

View File

@@ -646,22 +646,20 @@ def pbItemEditor
[_INTL("Description"), StringProperty, _INTL("Description of the item")], [_INTL("Description"), StringProperty, _INTL("Description of the item")],
[_INTL("Use Out of Battle"), EnumProperty.new([ [_INTL("Use Out of Battle"), EnumProperty.new([
_INTL("Can't Use"), _INTL("On a Pokémon"), _INTL("Use directly"), _INTL("Can't Use"), _INTL("On a Pokémon"), _INTL("Use directly"),
_INTL("TM"), _INTL("HM"), _INTL("On a Pokémon reusable")]), _INTL("TM"), _INTL("HM"), _INTL("On a Pokémon reusable"),
_INTL("Specifies how this item can be used outside of battle.")], _INTL("TR")]), _INTL("Specifies how this item can be used outside of battle.")],
[_INTL("Use In Battle"), EnumProperty.new([ [_INTL("Use In Battle"), EnumProperty.new([
_INTL("Can't Use"), _INTL("On a Pokémon"), _INTL("On Pokémon's move"), _INTL("Can't Use"), _INTL("On a Pokémon"), _INTL("On Pokémon's move"),
_INTL("On battler"), _INTL("On foe battler"), _INTL("Use directly"), _INTL("On battler"), _INTL("On foe battler"), _INTL("Use directly"),
_INTL("On a Pokémon reusable"), _INTL("On Pokémon's move reusable"), _INTL("On a Pokémon reusable"), _INTL("On Pokémon's move reusable"),
_INTL("On battler reusable"), _INTL("On foe battler reusable"), _INTL("On battler reusable"), _INTL("On foe battler reusable"),
_INTL("Use directly reusable")]), _INTL("Use directly reusable")]), _INTL("Specifies how this item can be used within a battle.")],
_INTL("Specifies how this item can be used within a battle.")],
[_INTL("Special Items"), EnumProperty.new([ [_INTL("Special Items"), EnumProperty.new([
_INTL("None of below"), _INTL("Mail"), _INTL("Mail with Pictures"), _INTL("None of below"), _INTL("Mail"), _INTL("Mail with Pictures"),
_INTL("Snag Ball"), _INTL("Poké Ball"), _INTL("Plantable Berry"), _INTL("Snag Ball"), _INTL("Poké Ball"), _INTL("Plantable Berry"),
_INTL("Key Item"), _INTL("Evolution Stone"), _INTL("Fossil"), _INTL("Key Item"), _INTL("Evolution Stone"), _INTL("Fossil"),
_INTL("Apricorn"), _INTL("Type-boosting Gem"), _INTL("Mulch"), _INTL("Apricorn"), _INTL("Type-boosting Gem"), _INTL("Mulch"),
_INTL("Mega Stone")]), _INTL("Mega Stone")]), _INTL("For special kinds of items.")],
_INTL("For special kinds of items.")],
[_INTL("Machine"), MoveProperty, _INTL("Move taught by this TM or HM.")] [_INTL("Machine"), MoveProperty, _INTL("Move taught by this TM or HM.")]
] ]
pbListScreenBlock(_INTL("Items"), ItemLister.new(selection, true)) { |button, item| pbListScreenBlock(_INTL("Items"), ItemLister.new(selection, true)) { |button, item|