From b445f26a88857c84f79aa4d59b8f5f8caa449d53 Mon Sep 17 00:00:00 2001 From: Maruno17 Date: Sun, 21 Nov 2021 00:44:41 +0000 Subject: [PATCH] =?UTF-8?q?Converted=20Shadow=20Pok=C3=A9mon=20PBS=20file?= =?UTF-8?q?=20to=20a=20section-based=20format,=20improved=20Shadow=20Pok?= =?UTF-8?q?=C3=A9mon=20mechanics?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Data/Scripts/010_Data/001_GameData.rb | 1 + .../010_Data/002_PBS data/001_MiscPBSData.rb | 13 - .../002_PBS data/011_ShadowPokemon.rb | 32 ++ .../{011_Ribbon.rb => 012_Ribbon.rb} | 0 .../{012_Encounter.rb => 013_Encounter.rb} | 0 ...{013_TrainerType.rb => 014_TrainerType.rb} | 0 .../{014_Trainer.rb => 015_Trainer.rb} | 0 .../{015_Metadata.rb => 016_Metadata.rb} | 0 ...layerMetadata.rb => 017_PlayerMetadata.rb} | 0 ...{017_MapMetadata.rb => 018_MapMetadata.rb} | 0 .../003_Battle_ExpAndMoveLearning.rb | 9 +- .../001_Battle/008_Battle_ActionOther.rb | 2 +- .../001_Battle/011_Battle_EndOfRoundPhase.rb | 1 - .../003_Move/004_Move_BaseEffects.rb | 4 +- .../002_ShadowPokemon_Other.rb | 68 ++- .../014_Pokemon/003_Pokemon_ShadowPokemon.rb | 103 +++- Data/Scripts/016_UI/006_UI_Summary.rb | 4 +- Data/Scripts/016_UI/022_UI_PurifyChamber.rb | 7 +- .../003_Debug menus/002_Debug_MenuCommands.rb | 4 +- .../005_Debug_PokemonCommands.rb | 4 +- Data/Scripts/021_Compiler/001_Compiler.rb | 6 +- .../021_Compiler/002_Compiler_CompilePBS.rb | 79 ++- .../021_Compiler/003_Compiler_WritePBS.rb | 18 +- PBS/shadow_movesets.txt | 85 --- PBS/shadow_pokemon.txt | 525 ++++++++++++++++++ 25 files changed, 761 insertions(+), 204 deletions(-) create mode 100644 Data/Scripts/010_Data/002_PBS data/011_ShadowPokemon.rb rename Data/Scripts/010_Data/002_PBS data/{011_Ribbon.rb => 012_Ribbon.rb} (100%) rename Data/Scripts/010_Data/002_PBS data/{012_Encounter.rb => 013_Encounter.rb} (100%) rename Data/Scripts/010_Data/002_PBS data/{013_TrainerType.rb => 014_TrainerType.rb} (100%) rename Data/Scripts/010_Data/002_PBS data/{014_Trainer.rb => 015_Trainer.rb} (100%) rename Data/Scripts/010_Data/002_PBS data/{015_Metadata.rb => 016_Metadata.rb} (100%) rename Data/Scripts/010_Data/002_PBS data/{016_PlayerMetadata.rb => 017_PlayerMetadata.rb} (100%) rename Data/Scripts/010_Data/002_PBS data/{017_MapMetadata.rb => 018_MapMetadata.rb} (100%) delete mode 100644 PBS/shadow_movesets.txt create mode 100644 PBS/shadow_pokemon.txt diff --git a/Data/Scripts/010_Data/001_GameData.rb b/Data/Scripts/010_Data/001_GameData.rb index a05321bf5..90021f2e7 100644 --- a/Data/Scripts/010_Data/001_GameData.rb +++ b/Data/Scripts/010_Data/001_GameData.rb @@ -231,6 +231,7 @@ module GameData BerryPlant.load Species.load SpeciesMetrics.load + ShadowPokemon.load Ribbon.load Encounter.load TrainerType.load diff --git a/Data/Scripts/010_Data/002_PBS data/001_MiscPBSData.rb b/Data/Scripts/010_Data/002_PBS data/001_MiscPBSData.rb index f8111a141..790924bed 100644 --- a/Data/Scripts/010_Data/002_PBS data/001_MiscPBSData.rb +++ b/Data/Scripts/010_Data/002_PBS data/001_MiscPBSData.rb @@ -4,7 +4,6 @@ class Game_Temp attr_accessor :town_map_data attr_accessor :phone_messages_data - attr_accessor :shadow_movesets_data attr_accessor :regional_dexes_data attr_accessor :battle_animations_data attr_accessor :move_to_battle_animation_data @@ -15,7 +14,6 @@ def pbClearData if $game_temp $game_temp.town_map_data = nil $game_temp.phone_messages_data = nil - $game_temp.shadow_movesets_data = nil $game_temp.regional_dexes_data = nil $game_temp.battle_animations_data = nil $game_temp.move_to_battle_animation_data = nil @@ -52,17 +50,6 @@ def pbLoadPhoneData return $game_temp.phone_messages_data end -#=============================================================================== -# Method to get Shadow Pokémon moveset data. -#=============================================================================== -def pbLoadShadowMovesets - $game_temp = Game_Temp.new if !$game_temp - if !$game_temp.shadow_movesets_data - $game_temp.shadow_movesets_data = load_data("Data/shadow_movesets.dat") || [] - end - return $game_temp.shadow_movesets_data -end - #=============================================================================== # Method to get Regional Dexes data. #=============================================================================== diff --git a/Data/Scripts/010_Data/002_PBS data/011_ShadowPokemon.rb b/Data/Scripts/010_Data/002_PBS data/011_ShadowPokemon.rb new file mode 100644 index 000000000..828ed7667 --- /dev/null +++ b/Data/Scripts/010_Data/002_PBS data/011_ShadowPokemon.rb @@ -0,0 +1,32 @@ +module GameData + class ShadowPokemon + attr_reader :id + attr_reader :moves + attr_reader :gauge_size + attr_reader :flags + + DATA = {} + DATA_FILENAME = "shadow_pokemon.dat" + + SCHEMA = { + "GaugeSize" => [:gauge_size, "v"], + "Moves" => [:moves, "*s"], # Not enumerated when compiled + "Flags" => [:flags, "*s"] + } + HEART_GAUGE_SIZE = 4000 # Default gauge size + + extend ClassMethodsSymbols + include InstanceMethods + + def initialize(hash) + @id = hash[:id] + @moves = hash[:moves] || [] + @gauge_size = hash[:gauge_size] || HEART_GAUGE_SIZE + @flags = hash[:flags] || [] + end + + def has_flag?(flag) + return @flags.any? { |f| f.downcase == flag.downcase } + end + end +end diff --git a/Data/Scripts/010_Data/002_PBS data/011_Ribbon.rb b/Data/Scripts/010_Data/002_PBS data/012_Ribbon.rb similarity index 100% rename from Data/Scripts/010_Data/002_PBS data/011_Ribbon.rb rename to Data/Scripts/010_Data/002_PBS data/012_Ribbon.rb diff --git a/Data/Scripts/010_Data/002_PBS data/012_Encounter.rb b/Data/Scripts/010_Data/002_PBS data/013_Encounter.rb similarity index 100% rename from Data/Scripts/010_Data/002_PBS data/012_Encounter.rb rename to Data/Scripts/010_Data/002_PBS data/013_Encounter.rb diff --git a/Data/Scripts/010_Data/002_PBS data/013_TrainerType.rb b/Data/Scripts/010_Data/002_PBS data/014_TrainerType.rb similarity index 100% rename from Data/Scripts/010_Data/002_PBS data/013_TrainerType.rb rename to Data/Scripts/010_Data/002_PBS data/014_TrainerType.rb diff --git a/Data/Scripts/010_Data/002_PBS data/014_Trainer.rb b/Data/Scripts/010_Data/002_PBS data/015_Trainer.rb similarity index 100% rename from Data/Scripts/010_Data/002_PBS data/014_Trainer.rb rename to Data/Scripts/010_Data/002_PBS data/015_Trainer.rb diff --git a/Data/Scripts/010_Data/002_PBS data/015_Metadata.rb b/Data/Scripts/010_Data/002_PBS data/016_Metadata.rb similarity index 100% rename from Data/Scripts/010_Data/002_PBS data/015_Metadata.rb rename to Data/Scripts/010_Data/002_PBS data/016_Metadata.rb diff --git a/Data/Scripts/010_Data/002_PBS data/016_PlayerMetadata.rb b/Data/Scripts/010_Data/002_PBS data/017_PlayerMetadata.rb similarity index 100% rename from Data/Scripts/010_Data/002_PBS data/016_PlayerMetadata.rb rename to Data/Scripts/010_Data/002_PBS data/017_PlayerMetadata.rb diff --git a/Data/Scripts/010_Data/002_PBS data/017_MapMetadata.rb b/Data/Scripts/010_Data/002_PBS data/018_MapMetadata.rb similarity index 100% rename from Data/Scripts/010_Data/002_PBS data/017_MapMetadata.rb rename to Data/Scripts/010_Data/002_PBS data/018_MapMetadata.rb diff --git a/Data/Scripts/011_Battle/001_Battle/003_Battle_ExpAndMoveLearning.rb b/Data/Scripts/011_Battle/001_Battle/003_Battle_ExpAndMoveLearning.rb index b05a7ff31..f589e524b 100644 --- a/Data/Scripts/011_Battle/001_Battle/003_Battle_ExpAndMoveLearning.rb +++ b/Data/Scripts/011_Battle/001_Battle/003_Battle_ExpAndMoveLearning.rb @@ -71,7 +71,7 @@ class Battle evYield.each_key { |stat| evYield[stat] *= 2 } end # Gain EVs for each stat in turn - if pkmn.shadowPokemon? && pkmn.saved_ev + if pkmn.shadowPokemon? && pkmn.heartStage <= 3 && pkmn.saved_ev pkmn.saved_ev.each_value { |e| evTotal += e } GameData::Stat.each_main do |s| evGain = evYield[s.id].clamp(0, Pokemon::EV_STAT_LIMIT - pkmn.ev[s.id] - pkmn.saved_ev[s.id]) @@ -178,11 +178,14 @@ class Battle pkmn.name,debugInfo)) end # Give Exp - $stats.total_exp_gained += expGained if pkmn.shadowPokemon? - pkmn.exp += expGained + if pkmn.heartStage <= 3 + pkmn.exp += expGained + $stats.total_exp_gained += expGained + end return end + $stats.total_exp_gained += expGained tempExp1 = pkmn.exp battler = pbFindBattler(idxParty) loop do # For each level gained in turn... diff --git a/Data/Scripts/011_Battle/001_Battle/008_Battle_ActionOther.rb b/Data/Scripts/011_Battle/001_Battle/008_Battle_ActionOther.rb index f2d4de779..f548a0084 100644 --- a/Data/Scripts/011_Battle/001_Battle/008_Battle_ActionOther.rb +++ b/Data/Scripts/011_Battle/001_Battle/008_Battle_ActionOther.rb @@ -43,7 +43,7 @@ class Battle if battler.shadowPokemon? if battler.inHyperMode? battler.pokemon.hyper_mode = false - battler.pokemon.adjustHeart(-300) + battler.pokemon.change_heart_gauge("call") pbDisplay(_INTL("{1} came to its senses from the Trainer's call!",battler.pbThis)) else pbDisplay(_INTL("But nothing happened!")) diff --git a/Data/Scripts/011_Battle/001_Battle/011_Battle_EndOfRoundPhase.rb b/Data/Scripts/011_Battle/001_Battle/011_Battle_EndOfRoundPhase.rb index af7426b99..8c76b2461 100644 --- a/Data/Scripts/011_Battle/001_Battle/011_Battle_EndOfRoundPhase.rb +++ b/Data/Scripts/011_Battle/001_Battle/011_Battle_EndOfRoundPhase.rb @@ -574,7 +574,6 @@ class Battle if b.inHyperMode? if pbRandom(100)<10 b.pokemon.hyper_mode = false - b.pokemon.adjustHeart(-50) pbDisplay(_INTL("{1} came to its senses!",b.pbThis)) else pbDisplay(_INTL("{1} is in Hyper Mode!",b.pbThis)) diff --git a/Data/Scripts/011_Battle/003_Move/004_Move_BaseEffects.rb b/Data/Scripts/011_Battle/003_Move/004_Move_BaseEffects.rb index 21d33f880..2ac00a3c9 100644 --- a/Data/Scripts/011_Battle/003_Move/004_Move_BaseEffects.rb +++ b/Data/Scripts/011_Battle/003_Move/004_Move_BaseEffects.rb @@ -34,7 +34,7 @@ class Battle::Move::Confusion < Battle::Move @pp = -1 @target = 0 @priority = 0 - @flags = "" + @flags = [] @addlEffect = 0 @calcType = nil @powerBoost = false @@ -63,7 +63,7 @@ class Battle::Move::Struggle < Battle::Move @pp = -1 @target = 0 @priority = 0 - @flags = "" + @flags = ["Contact", "CanProtect"] @addlEffect = 0 @calcType = nil @powerBoost = false diff --git a/Data/Scripts/014_Pokemon/001_Pokemon-related/002_ShadowPokemon_Other.rb b/Data/Scripts/014_Pokemon/001_Pokemon-related/002_ShadowPokemon_Other.rb index 196a5cdc5..8eb68588a 100644 --- a/Data/Scripts/014_Pokemon/001_Pokemon-related/002_ShadowPokemon_Other.rb +++ b/Data/Scripts/014_Pokemon/001_Pokemon-related/002_ShadowPokemon_Other.rb @@ -187,9 +187,7 @@ class Battle::Battler def pbInitPokemon(*arg) if self.pokemonIndex>0 && inHyperMode? - # Called out of Hyper Mode self.pokemon.hyper_mode = false - self.pokemon.adjustHeart(-50) end __shadow__pbInitPokemon(*arg) # Called into battle @@ -198,7 +196,7 @@ class Battle::Battler self.type1 = :SHADOW self.type2 = :SHADOW end - self.pokemon.adjustHeart(-30) if pbOwnedByPlayer? + self.pokemon.change_heart_gauge("battle") if pbOwnedByPlayer? end end @@ -216,7 +214,7 @@ class Battle::Battler def pbHyperMode return if fainted? || !shadowPokemon? || inHyperMode? || !pbOwnedByPlayer? p = self.pokemon - if @battle.pbRandom(p.heart_gauge) <= Pokemon::HEART_GAUGE_SIZE / 4 + if @battle.pbRandom(p.heart_gauge) <= p.max_gauge_size / 4 p.hyper_mode = true @battle.pbDisplay(_INTL("{1}'s emotions rose to a fever pitch!\nIt entered Hyper Mode!",self.pbThis)) end @@ -234,39 +232,37 @@ end #=============================================================================== # Shadow item effects. #=============================================================================== -def pbRaiseHappinessAndReduceHeart(pkmn, scene, heart_amount) +def pbRaiseHappinessAndReduceHeart(pkmn, scene, multiplier) if !pkmn.shadowPokemon? || (pkmn.happiness == 255 && pkmn.heart_gauge == 0) scene.pbDisplay(_INTL("It won't have any effect.")) return false end - if pkmn.happiness == 255 - stage = pkmn.heart_gauge - pkmn.adjustHeart(-heart_amount) - scene.pbDisplay(_INTL("{1} adores you!\nThe door to its heart opened a little.", pkmn.name)) - pkmn.check_ready_to_purify if pkmn.heart_gauge != stage - elsif pkmn.heart_gauge == 0 - pkmn.changeHappiness("vitamin") + old_gauge = pkmn.heart_gauge + old_happiness = pkmn.happiness + pkmn.changeHappiness("vitamin") + pkmn.change_heart_gauge("scent", multiplier) + if pkmn.heart_gauge == old_gauge scene.pbDisplay(_INTL("{1} turned friendly.", pkmn.name)) + elsif pkmn.happiness == old_happiness + scene.pbDisplay(_INTL("{1} adores you!\nThe door to its heart opened a little.", pkmn.name)) + pkmn.check_ready_to_purify else - stage = pkmn.heart_gauge - pkmn.changeHappiness("vitamin") - pkmn.adjustHeart(-heart_amount) scene.pbDisplay(_INTL("{1} turned friendly.\nThe door to its heart opened a little.", pkmn.name)) - pkmn.check_ready_to_purify if pkmn.heart_gauge != stage + pkmn.check_ready_to_purify end return true end ItemHandlers::UseOnPokemon.add(:JOYSCENT,proc { |item,pokemon,scene| - pbRaiseHappinessAndReduceHeart(pokemon,scene,500) + pbRaiseHappinessAndReduceHeart(pokemon, scene, 1) }) ItemHandlers::UseOnPokemon.add(:EXCITESCENT,proc { |item,pokemon,scene| - pbRaiseHappinessAndReduceHeart(pokemon,scene,1000) + pbRaiseHappinessAndReduceHeart(pokemon, scene, 2) }) ItemHandlers::UseOnPokemon.add(:VIVIDSCENT,proc { |item,pokemon,scene| - pbRaiseHappinessAndReduceHeart(pokemon,scene,2000) + pbRaiseHappinessAndReduceHeart(pokemon, scene, 3) }) ItemHandlers::UseOnPokemon.add(:TIMEFLUTE,proc { |item,pokemon,scene| @@ -291,21 +287,21 @@ ItemHandlers::CanUseInBattle.copy(:JOYSCENT,:EXCITESCENT,:VIVIDSCENT) ItemHandlers::BattleUseOnBattler.add(:JOYSCENT,proc { |item,battler,scene| battler.pokemon.hyper_mode = false - battler.pokemon.adjustHeart(-100) + battler.pokemon.change_heart_gauge("scent", 1) scene.pbDisplay(_INTL("{1} came to its senses from the {2}!",battler.pbThis,GameData::Item.get(item).name)) next true }) ItemHandlers::BattleUseOnBattler.add(:EXCITESCENT,proc { |item,battler,scene| battler.pokemon.hyper_mode = false - battler.pokemon.adjustHeart(-200) + battler.pokemon.change_heart_gauge("scent", 2) scene.pbDisplay(_INTL("{1} came to its senses from the {2}!",battler.pbThis,GameData::Item.get(item).name)) next true }) ItemHandlers::BattleUseOnBattler.add(:VIVIDSCENT,proc { |item,battler,scene| battler.pokemon.hyper_mode = false - battler.pokemon.adjustHeart(-300) + battler.pokemon.change_heart_gauge("scent", 3) scene.pbDisplay(_INTL("{1} came to its senses from the {2}!",battler.pbThis,GameData::Item.get(item).name)) next true }) @@ -416,25 +412,23 @@ Events.onEndBattle += proc { |_sender,_e| } Events.onStepTaken += proc { - for pkmn in $player.able_party + $player.able_party.each do |pkmn| next if pkmn.heart_gauge == 0 - stage = pkmn.heartStage - pkmn.adjustHeart(-1) - case pkmn.heartStage - when 0 - pkmn.check_ready_to_purify - when stage - else - pkmn.update_shadow_moves + pkmn.heart_gauge_step_counter = 0 if !pkmn.heart_gauge_step_counter + pkmn.heart_gauge_step_counter += 1 + if pkmn.heart_gauge_step_counter >= 256 + old_stage = pkmn.heartStage + pkmn.change_heart_gauge("walking") + new_stage = pkmn.heartStage + if new_stage == 0 + pkmn.check_ready_to_purify + elsif new_stage != old_stage + pkmn.update_shadow_moves + end + pkmn.heart_gauge_step_counter = 0 end end if ($PokemonGlobal.purifyChamber rescue nil) $PokemonGlobal.purifyChamber.update end - $PokemonGlobal.day_care.slots.each do |slot| - next if !slot.filled? || !slot.pokemon.shadowPokemon? - old_stage = slot.pokemon.heartStage - slot.pokemon.adjustHeart(-1) - slot.pokemon.update_shadow_moves if slot.pokemon.heartStage != old_stage - end } diff --git a/Data/Scripts/014_Pokemon/003_Pokemon_ShadowPokemon.rb b/Data/Scripts/014_Pokemon/003_Pokemon_ShadowPokemon.rb index 54137447a..3d3e78bbf 100644 --- a/Data/Scripts/014_Pokemon/003_Pokemon_ShadowPokemon.rb +++ b/Data/Scripts/014_Pokemon/003_Pokemon_ShadowPokemon.rb @@ -8,7 +8,7 @@ class Pokemon attr_accessor :saved_exp attr_accessor :saved_ev attr_accessor :shadow_moves - HEART_GAUGE_SIZE = 3840 + attr_accessor :heart_gauge_step_counter alias :__shadow_expeq :exp= def exp=(value) @@ -29,15 +29,74 @@ class Pokemon return @heart_gauge || 0 end + def shadow_data + ret = GameData::ShadowPokemon.try_get(species_data.id) + ret = GameData::ShadowPokemon.try_get(@species) if !ret + return ret + end + + def max_gauge_size + data = shadow_data + return (data) ? data.gauge_size : GameData::ShadowPokemon::HEART_GAUGE_SIZE + end + def adjustHeart(value) return if !shadowPokemon? - @heart_gauge = (self.heart_gauge + value).clamp(0, HEART_GAUGE_SIZE) + @heart_gauge = (self.heart_gauge + value).clamp(0, max_gauge_size) + end + + def change_heart_gauge(method, multiplier = 1) + return if !shadowPokemon? + heart_amounts = { + # [sending into battle, call to, walking 256 steps, using scent] + :HARDY => [110, 300, 100, 90], + :LONELY => [ 70, 330, 100, 130], + :BRAVE => [130, 270, 90, 80], + :ADAMANT => [110, 270, 110, 80], + :NAUGHTY => [120, 270, 110, 70], + :BOLD => [110, 270, 90, 100], + :DOCILE => [100, 360, 80, 120], + :RELAXED => [ 90, 270, 110, 100], + :IMPISH => [120, 300, 100, 80], + :LAX => [100, 270, 90, 110], + :TIMID => [ 70, 330, 110, 120], + :HASTY => [130, 300, 70, 100], + :SERIOUS => [100, 330, 110, 90], + :JOLLY => [120, 300, 90, 90], + :NAIVE => [100, 300, 120, 80], + :MODEST => [ 70, 300, 120, 110], + :MILD => [ 80, 270, 100, 120], + :QUIET => [100, 300, 100, 100], + :BASHFUL => [ 80, 300, 90, 130], + :RASH => [ 90, 300, 90, 120], + :CALM => [ 80, 300, 110, 110], + :GENTLE => [ 70, 300, 130, 100], + :SASSY => [130, 240, 100, 70], + :CAREFUL => [ 90, 300, 100, 110], + :QUIRKY => [130, 270, 80, 90] + } + amt = 100 + case method + when "battle" + amt = (heart_amounts[@nature]) ? heart_amounts[@nature][0] : 100 + when "call" + amt = (heart_amounts[@nature]) ? heart_amounts[@nature][1] : 300 + when "walking" + amt = (heart_amounts[@nature]) ? heart_amounts[@nature][2] : 100 + when "scent" + amt = (heart_amounts[@nature]) ? heart_amounts[@nature][3] : 100 + amt *= multiplier + else + raise _INTL("Unknown heart gauge-changing method: {1}", method.to_s) + end + adjustHeart(-amt) end def heartStage return 0 if !shadowPokemon? - stage_size = HEART_GAUGE_SIZE / 5.0 - return ([self.heart_gauge, HEART_GAUGE_SIZE].min / stage_size).ceil + max_size = max_gauge_size + stage_size = max_size / 5.0 + return ([self.heart_gauge, max_size].min / stage_size).ceil end def shadowPokemon? @@ -48,36 +107,42 @@ class Pokemon return (self.heart_gauge == 0 || @hp == 0) ? false : @hyper_mode end + alias __shadow__changeHappiness changeHappiness + def changeHappiness(method) + return if shadowPokemon? && heartStage >= 4 + __shadow__changeHappiness(method) + end + def makeShadow @shadow = true - @heart_gauge = HEART_GAUGE_SIZE @hyper_mode = false @saved_exp = 0 @saved_ev = {} GameData::Stat.each_main { |s| @saved_ev[s.id] = 0 } + @heart_gauge = max_gauge_size + @heart_gauge_step_counter = 0 @shadow_moves = [] # Retrieve Shadow moveset for this Pokémon - shadow_moveset = pbLoadShadowMovesets[species_data.id] - shadow_moveset = pbLoadShadowMovesets[@species] if !shadow_moveset || shadow_moveset.length == 0 + data = shadow_data # Record this Pokémon's Shadow moves - if shadow_moveset && shadow_moveset.length > 0 - for i in 0...[shadow_moveset.length, MAX_MOVES].min - @shadow_moves[i] = shadow_moveset[i] + if data + data.moves.each do |m| + @shadow_moves.push(m.to_sym) if GameData::Move.exists?(m.to_sym) + break if @shadow_moves.length >= MAX_MOVES end - elsif GameData::Move.exists?(:SHADOWRUSH) - # No Shadow moveset defined; just use Shadow Rush - @shadow_moves[0] = :SHADOWRUSH - else - raise _INTL("Expected Shadow moves or Shadow Rush to be defined, but they weren't.") + end + if @shadow_moves.empty? && GameData::Move.exists?(:SHADOWRUSH) + @shadow_moves.push(:SHADOWRUSH) end # Record this Pokémon's original moves - @moves.each_with_index { |m, i| @shadow_moves[MAX_MOVES + i] = m.id } - # Update moves - update_shadow_moves + if !@shadow_moves.empty? + @moves.each_with_index { |m, i| @shadow_moves[MAX_MOVES + i] = m.id } + update_shadow_moves + end end def update_shadow_moves(relearn_all_moves = false) - return if !@shadow_moves + return if !@shadow_moves || @shadow_moves.empty? # Not a Shadow Pokémon (any more); relearn all its original moves if !shadowPokemon? if @shadow_moves.length > MAX_MOVES diff --git a/Data/Scripts/016_UI/006_UI_Summary.rb b/Data/Scripts/016_UI/006_UI_Summary.rb index bbe1a8937..dc92cbcf6 100644 --- a/Data/Scripts/016_UI/006_UI_Summary.rb +++ b/Data/Scripts/016_UI/006_UI_Summary.rb @@ -375,7 +375,7 @@ class PokemonSummary_Scene dexNumShadow = (@pokemon.shiny?) ? Color.new(224,152,144) : Color.new(176,176,176) # If a Shadow Pokémon, draw the heart gauge area and bar if @pokemon.shadowPokemon? - shadowfract = @pokemon.heart_gauge.to_f / Pokemon::HEART_GAUGE_SIZE + shadowfract = @pokemon.heart_gauge.to_f / @pokemon.max_gauge_size imagepos = [ ["Graphics/Pictures/Summary/overlay_shadow",224,240], ["Graphics/Pictures/Summary/overlay_shadowbar",242,280,0,0,(shadowfract*248).floor,-1] @@ -632,7 +632,7 @@ class PokemonSummary_Scene # Determine which stats are boosted and lowered by the Pokémon's nature statshadows = {} GameData::Stat.each_main { |s| statshadows[s.id] = shadow } - if !@pokemon.shadowPokemon? || @pokemon.heartStage > 3 + if !@pokemon.shadowPokemon? || @pokemon.heartStage <= 3 @pokemon.nature_for_stats.stat_changes.each do |change| statshadows[change[0]] = Color.new(136,96,72) if change[1] > 0 statshadows[change[0]] = Color.new(64,120,152) if change[1] < 0 diff --git a/Data/Scripts/016_UI/022_UI_PurifyChamber.rb b/Data/Scripts/016_UI/022_UI_PurifyChamber.rb index 0bf128e3a..d66f555ea 100644 --- a/Data/Scripts/016_UI/022_UI_PurifyChamber.rb +++ b/Data/Scripts/016_UI/022_UI_PurifyChamber.rb @@ -666,8 +666,9 @@ class Window_PurifyChamberSets < Window_DrawableCommand end if @chamber.getShadow(index) pbDrawGauge(self.contents, Rect.new(rect.x+16,rect.y+18,48,8), - Color.new(192,0,256), @chamber.getShadow(index).heart_gauge, - Pokemon::HEART_GAUGE_SIZE) + Color.new(192,0,256), + @chamber.getShadow(index).heart_gauge, + @chamber.getShadow(index).max_gauge_size) end pbDrawTextPositions(self.contents,textpos) end @@ -957,7 +958,7 @@ class PurifyChamberSetView < SpriteWrapper Color.new(248,248,248),Color.new(128,128,128)]) # draw heart gauge pbDrawGauge(@info.bitmap, Rect.new(@info.bitmap.width*3/4,8,@info.bitmap.width*1/4,8), - Color.new(192,0,256), pkmn.heart_gauge, Pokemon::HEART_GAUGE_SIZE) + Color.new(192,0,256), pkmn.heart_gauge, pkmn.max_gauge_size) # draw flow gauge pbDrawGauge(@info.bitmap,Rect.new(@info.bitmap.width*3/4,24+8,@info.bitmap.width*1/4,8), Color.new(0,0,248),@chamber.chamberFlow(@set),6) diff --git a/Data/Scripts/020_Debug/003_Debug menus/002_Debug_MenuCommands.rb b/Data/Scripts/020_Debug/003_Debug menus/002_Debug_MenuCommands.rb index 089cc1d39..5fa0525ed 100644 --- a/Data/Scripts/020_Debug/003_Debug menus/002_Debug_MenuCommands.rb +++ b/Data/Scripts/020_Debug/003_Debug menus/002_Debug_MenuCommands.rb @@ -1144,7 +1144,7 @@ DebugMenuCommands.register("createpbs", { "pokemon_metrics.txt", "regional_dexes.txt", "ribbons.txt", - "shadow_movesets.txt", + "shadow_pokemon.txt", "town_map.txt", "trainer_types.txt", "trainers.txt", @@ -1169,7 +1169,7 @@ DebugMenuCommands.register("createpbs", { when 13 then Compiler.write_pokemon_metrics when 14 then Compiler.write_regional_dexes when 15 then Compiler.write_ribbons - when 16 then Compiler.write_shadow_movesets + when 16 then Compiler.write_shadow_pokemon when 17 then Compiler.write_town_map when 18 then Compiler.write_trainer_types when 19 then Compiler.write_trainers diff --git a/Data/Scripts/020_Debug/003_Debug menus/005_Debug_PokemonCommands.rb b/Data/Scripts/020_Debug/003_Debug menus/005_Debug_PokemonCommands.rb index 25311e70f..f4e4e2593 100644 --- a/Data/Scripts/020_Debug/003_Debug menus/005_Debug_PokemonCommands.rb +++ b/Data/Scripts/020_Debug/003_Debug menus/005_Debug_PokemonCommands.rb @@ -1132,10 +1132,10 @@ PokemonDebugMenuCommands.register("shadowpkmn", { if pkmn.shadowPokemon? oldheart = pkmn.heart_gauge params = ChooseNumberParams.new - params.setRange(0, Pokemon::HEART_GAUGE_SIZE) + params.setRange(0, pkmn.max_gauge_size) params.setDefaultValue(pkmn.heart_gauge) val = pbMessageChooseNumber( - _INTL("Set the heart gauge (max. {1}).", Pokemon::HEART_GAUGE_SIZE), + _INTL("Set the heart gauge (max. {1}).", pkmn.max_gauge_size), params) { screen.pbUpdate } if val != oldheart pkmn.adjustHeart(val - oldheart) diff --git a/Data/Scripts/021_Compiler/001_Compiler.rb b/Data/Scripts/021_Compiler/001_Compiler.rb index b01f7acea..e3b059532 100644 --- a/Data/Scripts/021_Compiler/001_Compiler.rb +++ b/Data/Scripts/021_Compiler/001_Compiler.rb @@ -729,7 +729,7 @@ module Compiler compile_pokemon # Depends on Move, Item, Type, Ability compile_pokemon_forms # Depends on Species, Move, Item, Type, Ability compile_pokemon_metrics # Depends on Species - compile_shadow_movesets # Depends on Species, Move + compile_shadow_pokemon # Depends on Species compile_regional_dexes # Depends on Species compile_ribbons # No dependencies compile_encounters # Depends on Species @@ -768,7 +768,7 @@ module Compiler "player_metadata.dat", "regional_dexes.dat", "ribbons.dat", - "shadow_movesets.dat", + "shadow_pokemon.dat", "species.dat", "species_metrics.dat", "town_map.dat", @@ -793,7 +793,7 @@ module Compiler "pokemon_metrics.txt", "regional_dexes.txt", "ribbons.txt", - "shadow_movesets.txt", + "shadow_pokemon.txt", "town_map.txt", "trainer_types.txt", "trainers.txt", diff --git a/Data/Scripts/021_Compiler/002_Compiler_CompilePBS.rb b/Data/Scripts/021_Compiler/002_Compiler_CompilePBS.rb index a56d6242b..313b2154c 100644 --- a/Data/Scripts/021_Compiler/002_Compiler_CompilePBS.rb +++ b/Data/Scripts/021_Compiler/002_Compiler_CompilePBS.rb @@ -368,8 +368,8 @@ module Compiler flags.push("CanMirrorMove") if line[12][/e/] flags.push("ThawsUser") if line[12][/g/] flags.push("HighCriticalHitRate") if line[12][/h/] - flags.push("Bite") if line[12][/i/] - flags.push("Punch") if line[12][/j/] + flags.push("Biting") if line[12][/i/] + flags.push("Punching") if line[12][/j/] flags.push("Sound") if line[12][/k/] flags.push("Powder") if line[12][/l/] flags.push("Pulse") if line[12][/m/] @@ -969,33 +969,68 @@ module Compiler end #============================================================================= - # Compile Shadow movesets + # Compile Shadow Pokémon data #============================================================================= - def compile_shadow_movesets(path = "PBS/shadow_movesets.txt") + def compile_shadow_pokemon(path = "PBS/shadow_pokemon.txt") compile_pbs_file_message_start(path) - sections = {} - if safeExists?(path) - idx = 0 - pbCompilerEachCommentedLine(path) { |line, _line_no| - if line[/^\s*(\w+)\s*=\s*(.*)$/] - echo "." if idx % 50 == 0 - idx += 1 - Graphics.update if idx % 250 == 0 + GameData::ShadowPokemon::DATA.clear + schema = GameData::ShadowPokemon::SCHEMA + shadow_hash = nil + old_format = nil + # Read each line of shadow_pokemon.txt at a time and compile it into a + # Shadow Pokémon's data + idx = 0 + pbCompilerEachPreppedLine(path) { |line, line_no| + echo "." if idx % 250 == 0 + idx += 1 + if line[/^\s*\[\s*(.+)\s*\]\s*$/] # New section [species_id] + old_format = false if old_format.nil? + if old_format + raise _INTL("Can't mix old and new formats.\r\n{1}", FileLineData.linereport) + end + # Add previous Shadow Pokémon's data to records + GameData::ShadowPokemon.register(shadow_hash) if shadow_hash + # Parse species ID + species_id = $~[1].to_sym + if GameData::ShadowPokemon.exists?(species_id) + raise _INTL("Shadow Pokémon data for species '{1}' is defined twice.\r\n{2}", species_id, FileLineData.linereport) + end + # Construct Shadow Pokémon hash + shadow_hash = { + :id => species_id + } + elsif line[/^\s*(\w+)\s*=\s*(.*)\s*$/] # XXX=YYY lines + old_format = true if old_format.nil? + if old_format key = $1 value = $2 value = value.split(",") species = parseSpecies(key) - moves = [] - for i in 0...[Pokemon::MAX_MOVES, value.length].min - move = parseMove(value[i], true) - moves.push(move) if move - end - moves.compact! - sections[species] = moves if moves.length > 0 + value.each { |val| val.strip! } + value.delete_if { |val| nil_or_empty?(val) } + # Construct Shadow Pokémon hash + shadow_hash = { + :id => species, + :moves => value + } + # Add Shadow Pokémons data to records + GameData::ShadowPokemon.register(shadow_hash) + shadow_hash = nil + else + # Parse property and value + property_name = $~[1] + line_schema = schema[property_name] + next if !line_schema + property_value = pbGetCsvRecord($~[2], line_no, line_schema) + # Record XXX=YYY setting + shadow_hash[line_schema[0]] = property_value end - } - end - save_data(sections, "Data/shadow_movesets.dat") + end + } + # Add last item's data to records + GameData::ShadowPokemon.register(shadow_hash) if shadow_hash + # Save all data + GameData::ShadowPokemon.save process_pbs_file_message_end end diff --git a/Data/Scripts/021_Compiler/003_Compiler_WritePBS.rb b/Data/Scripts/021_Compiler/003_Compiler_WritePBS.rb index 1d77df332..38c6aa917 100644 --- a/Data/Scripts/021_Compiler/003_Compiler_WritePBS.rb +++ b/Data/Scripts/021_Compiler/003_Compiler_WritePBS.rb @@ -513,21 +513,21 @@ module Compiler end #============================================================================= - # Save Shadow movesets to PBS file + # Save Shadow Pokémon data to PBS file #============================================================================= - def write_shadow_movesets(path = "PBS/shadow_movesets.txt") + def write_shadow_pokemon(path = "PBS/shadow_pokemon.txt") write_pbs_file_message_start(path) - shadow_movesets = pbLoadShadowMovesets File.open(path, "wb") { |f| idx = 0 add_PBS_header_to_file(f) - f.write("\#-------------------------------\r\n") - GameData::Species.each do |species_data| + GameData::ShadowPokemon.each do |shadow| echo "." if idx % 150 == 0 idx += 1 - moveset = shadow_movesets[species_data.id] - next if !moveset || moveset.length == 0 - f.write(sprintf("%s = %s\r\n", species_data.id, moveset.join(","))) + f.write("\#-------------------------------\r\n") + f.write(sprintf("[%s]\r\n", shadow.id)) + f.write(sprintf("GaugeSize = %d\r\n", shadow.gauge_size)) + f.write(sprintf("Moves = %s\r\n", shadow.moves.join(","))) if shadow.moves.length > 0 + f.write(sprintf("Flags = %s\r\n", shadow.flags.join(","))) if shadow.flags.length > 0 end } process_pbs_file_message_end @@ -901,7 +901,7 @@ module Compiler write_pokemon write_pokemon_forms write_pokemon_metrics - write_shadow_movesets + write_shadow_pokemon write_regional_dexes write_ribbons write_encounters diff --git a/PBS/shadow_movesets.txt b/PBS/shadow_movesets.txt deleted file mode 100644 index b02ae1b21..000000000 --- a/PBS/shadow_movesets.txt +++ /dev/null @@ -1,85 +0,0 @@ -# See the documentation on the wiki to learn how to edit this file. -#------------------------------- -BUTTERFREE = SHADOWRUSH,SHADOWMIST -BEEDRILL = SHADOWBLITZ,SHADOWHOLD -PIDGEOTTO = SHADOWBLITZ,SHADOWPANIC -RATICATE = SHADOWRUSH,SHADOWDOWN -SPEAROW = SHADOWBLITZ,SHADOWPANIC -ARBOK = SHADOWRUSH,SHADOWHALF -VULPIX = SHADOWHOLD,SHADOWWAVE -PARAS = SHADOWBLITZ,SHADOWSHED -VENOMOTH = SHADOWRUSH,SHADOWMIST -DUGTRIO = SHADOWBREAK,SHADOWSHED,SHADOWSKY -MEOWTH = SHADOWRUSH,SHADOWHOLD -GOLDUCK = SHADOWRAVE,SHADOWMIST -PRIMEAPE = SHADOWSTORM,SHADOWRUSH -GROWLITHE = SHADOWBLITZ,SHADOWWAVE -POLIWRATH = SHADOWSTORM,SHADOWRUSH,SHADOWSKY -WEEPINBELL = SHADOWRAVE,SHADOWHOLD -RAPIDASH = SHADOWRAVE,SHADOWSKY,SHADOWDOWN -MAGNETON = SHADOWHOLD,SHADOWRAVE,SHADOWSKY -FARFETCHD = SHADOWBREAK,SHADOWSKY,SHADOWPANIC -DODRIO = SHADOWBLITZ,SHADOWSHED -SEEL = SHADOWWAVE,SHADOWMIST -GRIMER = SHADOWBLITZ,SHADOWHOLD -SHELLDER = SHADOWBLITZ,SHADOWSHED -HYPNO = SHADOWSTORM,SHADOWDOWN -VOLTORB = SHADOWRUSH,SHADOWPANIC -EXEGGUTOR = SHADOWSTORM,SHADOWSHED,SHADOWHOLD,SHADOWEND -MAROWAK = SHADOWEND,SHADOWPANIC -HITMONLEE = SHADOWRUSH,SHADOWDOWN,SHADOWHALF -HITMONCHAN = SHADOWRUSH,SHADOWDOWN -LICKITUNG = SHADOWRUSH,SHADOWPANIC -RHYDON = SHADOWEND,SHADOWPANIC,SHADOWDOWN,SHADOWHOLD -CHANSEY = SHADOWRAVE,SHADOWHOLD -TANGELA = SHADOWRAVE,SHADOWHOLD -KANGASKHAN = SHADOWRUSH,SHADOWMIST -STARMIE = SHADOWSTORM,SHADOWMIST,SHADOWBREAK -MRMIME = SHADOWSTORM,SHADOWSHED -SCYTHER = SHADOWRUSH,SHADOWMIST -ELECTABUZZ = SHADOWSTORM,SHADOWMIST,SHADOWHALF,SHADOWBREAK -MAGMAR = SHADOWRAVE,SHADOWRUSH,SHADOWSHED -PINSIR = SHADOWBREAK,SHADOWSHED -TAUROS = SHADOWHOLD,SHADOWSHED,SHADOWRUSH,SHADOWSKY -LAPRAS = SHADOWSTORM,SHADOWSHED,SHADOWSKY -SNORLAX = SHADOWEND,SHADOWSHED -ARTICUNO = SHADOWCHILL,SHADOWSHED,SHADOWRUSH,SHADOWSKY -ZAPDOS = SHADOWBOLT,SHADOWRUSH,SHADOWSKY,SHADOWSHED -MOLTRES = SHADOWFIRE,SHADOWSHED,SHADOWMIST,SHADOWBREAK -DRAGONITE = SHADOWDOWN,SHADOWRUSH,SHADOWSHED,SHADOWSTORM -LEDYBA = SHADOWBLITZ,SHADOWSHED -SPINARAK = SHADOWBLITZ,SHADOWMIST -TOGEPI = SHADOWRAVE,SHADOWSHED -NATU = SHADOWBLITZ,SHADOWSHED -MAREEP = SHADOWBLITZ,SHADOWSHED -PINECO = SHADOWBLITZ,SHADOWSHED -TEDDIURSA = SHADOWBLITZ,SHADOWMIST -MAGCARGO = SHADOWRAVE,SHADOWSHED -SWINUB = SHADOWBLITZ,SHADOWWAVE -HOUNDOUR = SHADOWBLITZ,SHADOWSHED -LUGIA = SHADOWBLAST,SHADOWSHED,SHADOWDOWN,SHADOWSTORM -POOCHYENA = SHADOWBLITZ,SHADOWHOLD -SEEDOT = SHADOWWAVE,SHADOWHOLD -SWELLOW = SHADOWBREAK,SHADOWMIST,SHADOWHALF,SHADOWSKY -RALTS = SHADOWWAVE,SHADOWHOLD -SHROOMISH = SHADOWBLITZ,SHADOWMIST -MAKUHITA = SHADOWBLITZ,SHADOWSHED -NOSEPASS = SHADOWWAVE,SHADOWMIST -DELCATTY = SHADOWRUSH,SHADOWWAVE -SABLEYE = SHADOWBLITZ,SHADOWHOLD -MAWILE = SHADOWRUSH,SHADOWWAVE -MANECTRIC = SHADOWMIST,SHADOWEND,SHADOWSKY -ROSELIA = SHADOWWAVE,SHADOWSHED -GULPIN = SHADOWBLITZ,SHADOWHOLD -CARVANHA = SHADOWBLITZ,SHADOWHOLD -NUMEL = SHADOWBLITZ,SHADOWSHED -ALTARIA = SHADOWBREAK,SHADOWMIST,SHADOWRAVE -ZANGOOSE = SHADOWRUSH,SHADOWMIST -LUNATONE = SHADOWWAVE,SHADOWSKY -SOLROCK = SHADOWRAVE,SHADOWSKY,SHADOWPANIC -BALTOY = SHADOWBLITZ,SHADOWMIST -BANETTE = SHADOWRUSH,SHADOWHOLD -DUSKULL = SHADOWHOLD,SHADOWWAVE -SNORUNT = SHADOWSHED,SHADOWWAVE -SPHEAL = SHADOWWAVE,SHADOWMIST -SALAMENCE = SHADOWRUSH,SHADOWHOLD \ No newline at end of file diff --git a/PBS/shadow_pokemon.txt b/PBS/shadow_pokemon.txt new file mode 100644 index 000000000..e22d1ae63 --- /dev/null +++ b/PBS/shadow_pokemon.txt @@ -0,0 +1,525 @@ +# See the documentation on the wiki to learn how to edit this file. +#------------------------------- +[BUTTERFREE] +GaugeSize = 4000 +Moves = SHADOWRUSH,SHADOWMIST +#------------------------------- +[BEEDRILL] +GaugeSize = 4500 +Moves = SHADOWBLITZ,SHADOWHOLD +#------------------------------- +[PIDGEOTTO] +GaugeSize = 4000 +Moves = SHADOWBLITZ,SHADOWPANIC +#------------------------------- +[RATICATE] +GaugeSize = 6000 +Moves = SHADOWRUSH,SHADOWDOWN +#------------------------------- +[SPEAROW] +GaugeSize = 4500 +Moves = SHADOWBLITZ,SHADOWPANIC +#------------------------------- +[ARBOK] +GaugeSize = 5000 +Moves = SHADOWRUSH,SHADOWHALF +#------------------------------- +[VULPIX] +GaugeSize = 2000 +Moves = SHADOWWAVE,SHADOWHOLD +#------------------------------- +[PARAS] +GaugeSize = 4000 +Moves = SHADOWBLITZ,SHADOWSHED +#------------------------------- +[VENOMOTH] +GaugeSize = 4000 +Moves = SHADOWRUSH,SHADOWMIST +#------------------------------- +[DUGTRIO] +GaugeSize = 5000 +Moves = SHADOWBREAK,SHADOWSHED,SHADOWSKY +#------------------------------- +[MEOWTH] +GaugeSize = 3500 +Moves = SHADOWRUSH,SHADOWHOLD +#------------------------------- +[GOLDUCK] +GaugeSize = 6500 +Moves = SHADOWRAVE,SHADOWMIST +#------------------------------- +[PRIMEAPE] +GaugeSize = 6000 +Moves = SHADOWRUSH,SHADOWSTORM +#------------------------------- +[GROWLITHE] +GaugeSize = 4000 +Moves = SHADOWBLITZ,SHADOWWAVE +#------------------------------- +[POLIWRATH] +GaugeSize = 7500 +Moves = SHADOWSTORM,SHADOWRUSH,SHADOWSKY +#------------------------------- +[WEEPINBELL] +GaugeSize = 4000 +Moves = SHADOWRAVE,SHADOWHOLD +#------------------------------- +[RAPIDASH] +GaugeSize = 6000 +Moves = SHADOWRAVE,SHADOWDOWN,SHADOWSKY +#------------------------------- +[MAGNETON] +GaugeSize = 4500 +Moves = SHADOWRAVE,SHADOWHOLD,SHADOWSKY +#------------------------------- +[FARFETCHD] +GaugeSize = 5500 +Moves = SHADOWBREAK,SHADOWSKY,SHADOWPANIC +#------------------------------- +[DODRIO] +GaugeSize = 8000 +Moves = SHADOWBLITZ,SHADOWSHED +#------------------------------- +[SEEL] +GaugeSize = 3500 +Moves = SHADOWWAVE,SHADOWMIST +#------------------------------- +[GRIMER] +GaugeSize = 3000 +Moves = SHADOWBLITZ,SHADOWHOLD +#------------------------------- +[SHELLDER] +GaugeSize = 4000 +Moves = SHADOWBLITZ,SHADOWSHED +#------------------------------- +[HYPNO] +GaugeSize = 5500 +Moves = SHADOWSTORM,SHADOWDOWN +#------------------------------- +[VOLTORB] +GaugeSize = 2500 +Moves = SHADOWRUSH,SHADOWPANIC +#------------------------------- +[EXEGGUTOR] +GaugeSize = 9000 +Moves = SHADOWSTORM,SHADOWSHED,SHADOWHOLD,SHADOWEND +#------------------------------- +[MAROWAK] +GaugeSize = 6500 +Moves = SHADOWEND,SHADOWPANIC +#------------------------------- +[HITMONLEE] +GaugeSize = 7000 +Moves = SHADOWRUSH,SHADOWDOWN,SHADOWHALF +#------------------------------- +[HITMONCHAN] +GaugeSize = 6000 +Moves = SHADOWRUSH,SHADOWDOWN +#------------------------------- +[LICKITUNG] +GaugeSize = 5000 +Moves = SHADOWRUSH,SHADOWPANIC +#------------------------------- +[RHYDON] +GaugeSize = 7000 +Moves = SHADOWEND,SHADOWDOWN,SHADOWPANIC,SHADOWHOLD +#------------------------------- +[CHANSEY] +GaugeSize = 4000 +Moves = SHADOWRAVE,SHADOWHOLD +#------------------------------- +[TANGELA] +GaugeSize = 4000 +Moves = SHADOWRAVE,SHADOWHOLD +#------------------------------- +[KANGASKHAN] +GaugeSize = 6000 +Moves = SHADOWRUSH,SHADOWMIST +#------------------------------- +[STARMIE] +GaugeSize = 7500 +Moves = SHADOWSTORM,SHADOWBREAK,SHADOWMIST +#------------------------------- +[MRMIME] +GaugeSize = 6500 +Moves = SHADOWSTORM,SHADOWSHED +#------------------------------- +[SCYTHER] +GaugeSize = 8000 +Moves = SHADOWRUSH,SHADOWMIST +#------------------------------- +[ELECTABUZZ] +GaugeSize = 7000 +Moves = SHADOWBREAK,SHADOWMIST,SHADOWHALF,SHADOWSTORM +#------------------------------- +[MAGMAR] +GaugeSize = 7000 +Moves = SHADOWRAVE,SHADOWRUSH,SHADOWSHED +#------------------------------- +[PINSIR] +GaugeSize = 7000 +Moves = SHADOWBREAK,SHADOWSHED +#------------------------------- +[TAUROS] +GaugeSize = 9000 +Moves = SHADOWRUSH,SHADOWHOLD,SHADOWSHED,SHADOWSKY +#------------------------------- +[LAPRAS] +GaugeSize = 6000 +Moves = SHADOWSTORM,SHADOWSHED,SHADOWSKY +#------------------------------- +[SNORLAX] +GaugeSize = 9000 +Moves = SHADOWEND,SHADOWSHED +#------------------------------- +[ARTICUNO] +GaugeSize = 10000 +Moves = SHADOWCHILL,SHADOWSHED,SHADOWSKY,SHADOWRUSH +#------------------------------- +[ZAPDOS] +GaugeSize = 10000 +Moves = SHADOWBOLT,SHADOWSHED,SHADOWSKY,SHADOWRUSH +#------------------------------- +[MOLTRES] +GaugeSize = 10000 +Moves = SHADOWFIRE,SHADOWSHED,SHADOWHOLD,SHADOWRUSH +#------------------------------- +[DRAGONITE] +GaugeSize = 9000 +Moves = SHADOWRUSH,SHADOWDOWN,SHADOWSHED,SHADOWSTORM +#------------------------------- +[BAYLEEF] +GaugeSize = 3000 +Moves = SHADOWRUSH +#------------------------------- +[QUILAVA] +GaugeSize = 3000 +Moves = SHADOWRUSH +#------------------------------- +[CROCONAW] +GaugeSize = 3000 +Moves = SHADOWRUSH +#------------------------------- +[FURRET] +GaugeSize = 5000 +Moves = SHADOWRUSH +#------------------------------- +[NOCTOWL] +GaugeSize = 3000 +Moves = SHADOWRUSH +#------------------------------- +[LEDYBA] +GaugeSize = 2500 +Moves = SHADOWBLITZ,SHADOWSHED +#------------------------------- +[LEDIAN] +GaugeSize = 6000 +Moves = SHADOWRUSH +#------------------------------- +[SPINARAK] +GaugeSize = 1500 +Moves = SHADOWBLITZ,SHADOWMIST +#------------------------------- +[ARIADOS] +GaugeSize = 6000 +Moves = SHADOWRUSH +#------------------------------- +[TOGEPI] +GaugeSize = 4500 +Moves = SHADOWRAVE,SHADOWSHED +#------------------------------- +[TOGETIC] +GaugeSize = 5000 +Moves = SHADOWRUSH +#------------------------------- +[NATU] +GaugeSize = 2500 +Moves = SHADOWBLITZ,SHADOWSHED +#------------------------------- +[MAREEP] +GaugeSize = 1500 +Moves = SHADOWBLITZ,SHADOWSHED +#------------------------------- +[FLAAFFY] +GaugeSize = 3000 +Moves = SHADOWRUSH +#------------------------------- +[SUDOWOODO] +GaugeSize = 10000 +Moves = SHADOWRUSH +#------------------------------- +[SKIPLOOM] +GaugeSize = 3000 +Moves = SHADOWRUSH +#------------------------------- +[AIPOM] +GaugeSize = 6000 +Moves = SHADOWRUSH +#------------------------------- +[SUNFLORA] +GaugeSize = 7000 +Moves = SHADOWRUSH +#------------------------------- +[YANMA] +GaugeSize = 5000 +Moves = SHADOWRUSH +#------------------------------- +[QUAGSIRE] +GaugeSize = 4000 +Moves = SHADOWRUSH +#------------------------------- +[MURKROW] +GaugeSize = 6000 +Moves = SHADOWRUSH +#------------------------------- +[MISDREAVUS] +GaugeSize = 4000 +Moves = SHADOWRUSH +#------------------------------- +[PINECO] +GaugeSize = 2500 +Moves = SHADOWBLITZ,SHADOWSHED +#------------------------------- +[FORRETRESS] +GaugeSize = 6000 +Moves = SHADOWRUSH +#------------------------------- +[DUNSPARCE] +GaugeSize = 5000 +Moves = SHADOWRUSH +#------------------------------- +[GLIGAR] +GaugeSize = 6000 +Moves = SHADOWRUSH +#------------------------------- +[GRANBULL] +GaugeSize = 6000 +Moves = SHADOWRUSH +#------------------------------- +[QWILFISH] +GaugeSize = 5000 +Moves = SHADOWRUSH +#------------------------------- +[SCIZOR] +GaugeSize = 8000 +Moves = SHADOWRUSH +#------------------------------- +[SHUCKLE] +GaugeSize = 7000 +Moves = SHADOWRUSH +#------------------------------- +[HERACROSS] +GaugeSize = 7000 +Moves = SHADOWRUSH +#------------------------------- +[SNEASEL] +GaugeSize = 6000 +Moves = SHADOWRUSH +#------------------------------- +[TEDDIURSA] +GaugeSize = 3000 +Moves = SHADOWBLITZ,SHADOWMIST +#------------------------------- +[URSARING] +GaugeSize = 7000 +Moves = SHADOWRUSH +#------------------------------- +[SLUGMA] +GaugeSize = 4000 +Moves = SHADOWRUSH +#------------------------------- +[MAGCARGO] +GaugeSize = 5500 +Moves = SHADOWRAVE,SHADOWSHED +#------------------------------- +[SWINUB] +GaugeSize = 2500 +Moves = SHADOWBLITZ,SHADOWWAVE +#------------------------------- +[PILOSWINE] +GaugeSize = 6000 +Moves = SHADOWRUSH +#------------------------------- +[REMORAID] +GaugeSize = 4000 +Moves = SHADOWRUSH +#------------------------------- +[DELIBIRD] +GaugeSize = 7000 +Moves = SHADOWRUSH +#------------------------------- +[MANTINE] +GaugeSize = 5000 +Moves = SHADOWRUSH +#------------------------------- +[SKARMORY] +GaugeSize = 13000 +Moves = SHADOWRUSH +#------------------------------- +[HOUNDOUR] +GaugeSize = 1500 +Moves = SHADOWBLITZ,SHADOWSHED +#------------------------------- +[HOUNDOOM] +GaugeSize = 7000 +Moves = SHADOWRUSH +#------------------------------- +[STANTLER] +GaugeSize = 6000 +Moves = SHADOWRUSH +#------------------------------- +[SMEARGLE] +GaugeSize = 7000 +Moves = SHADOWRUSH +#------------------------------- +[HITMONTOP] +GaugeSize = 6000 +Moves = SHADOWRUSH +#------------------------------- +[MILTANK] +GaugeSize = 7000 +Moves = SHADOWRUSH +#------------------------------- +[RAIKOU] +GaugeSize = 13000 +Moves = SHADOWRUSH +#------------------------------- +[ENTEI] +GaugeSize = 13000 +Moves = SHADOWRUSH +#------------------------------- +[SUICUNE] +GaugeSize = 13000 +Moves = SHADOWRUSH +#------------------------------- +[TYRANITAR] +GaugeSize = 20000 +Moves = SHADOWRUSH +#------------------------------- +[LUGIA] +GaugeSize = 12000 +Moves = SHADOWBLAST,SHADOWSHED,SHADOWDOWN,SHADOWSTORM +#------------------------------- +[POOCHYENA] +GaugeSize = 2500 +Moves = SHADOWBLITZ,SHADOWHOLD +#------------------------------- +[SEEDOT] +GaugeSize = 1500 +Moves = SHADOWWAVE,SHADOWHOLD +#------------------------------- +[SWELLOW] +GaugeSize = 7000 +Moves = SHADOWBREAK,SHADOWSKY,SHADOWHALF,SHADOWMIST +#------------------------------- +[RALTS] +GaugeSize = 2200 +Moves = SHADOWWAVE,SHADOWHOLD +#------------------------------- +[SHROOMISH] +GaugeSize = 1800 +Moves = SHADOWBLITZ,SHADOWMIST +#------------------------------- +[MAKUHITA] +GaugeSize = 2000 +Moves = SHADOWBLITZ,SHADOWSHED +#------------------------------- +[NOSEPASS] +GaugeSize = 4000 +Moves = SHADOWWAVE,SHADOWMIST +#------------------------------- +[DELCATTY] +GaugeSize = 2500 +Moves = SHADOWRUSH,SHADOWWAVE +#------------------------------- +[SABLEYE] +GaugeSize = 7000 +Moves = SHADOWBLITZ,SHADOWHOLD +#------------------------------- +[MAWILE] +GaugeSize = 2500 +Moves = SHADOWRUSH,SHADOWWAVE +#------------------------------- +[MEDITITE] +GaugeSize = 5000 +Moves = SHADOWRUSH +#------------------------------- +[MANECTRIC] +GaugeSize = 7000 +Moves = SHADOWEND,SHADOWMIST,SHADOWSKY +#------------------------------- +[ROSELIA] +GaugeSize = 3000 +Moves = SHADOWWAVE,SHADOWSHED +#------------------------------- +[GULPIN] +GaugeSize = 1500 +Moves = SHADOWBLITZ,SHADOWHOLD +#------------------------------- +[CARVANHA] +GaugeSize = 1700 +Moves = SHADOWBLITZ,SHADOWHOLD +#------------------------------- +[NUMEL] +GaugeSize = 1500 +Moves = SHADOWBLITZ,SHADOWSHED +#------------------------------- +[VIBRAVA] +GaugeSize = 6000 +Moves = SHADOWRUSH +#------------------------------- +[SWABLU] +GaugeSize = 5000 +Moves = SHADOWRUSH +#------------------------------- +[ALTARIA] +GaugeSize = 6500 +Moves = SHADOWBREAK,SHADOWMIST,SHADOWRAVE +#------------------------------- +[ZANGOOSE] +GaugeSize = 5000 +Moves = SHADOWRUSH,SHADOWMIST +#------------------------------- +[LUNATONE] +GaugeSize = 5000 +Moves = SHADOWWAVE,SHADOWSHED,SHADOWSKY +#------------------------------- +[SOLROCK] +GaugeSize = 7500 +Moves = SHADOWRAVE,SHADOWPANIC,SHADOWSKY +#------------------------------- +[BALTOY] +GaugeSize = 1500 +Moves = SHADOWBLITZ,SHADOWMIST +#------------------------------- +[BANETTE] +GaugeSize = 7000 +Moves = SHADOWRUSH,SHADOWHOLD +#------------------------------- +[DUSKULL] +GaugeSize = 2200 +Moves = SHADOWWAVE,SHADOWHOLD +#------------------------------- +[TROPIUS] +GaugeSize = 7000 +Moves = SHADOWRUSH +#------------------------------- +[ABSOL] +GaugeSize = 7000 +Moves = SHADOWRUSH +#------------------------------- +[SNORUNT] +GaugeSize = 2500 +Moves = SHADOWWAVE,SHADOWSHED +#------------------------------- +[SPHEAL] +GaugeSize = 1500 +Moves = SHADOWWAVE,SHADOWMIST +#------------------------------- +[SALAMENCE] +GaugeSize = 9000 +Moves = SHADOWRUSH,SHADOWHOLD +#------------------------------- +[METAGROSS] +GaugeSize = 15000 +Moves = SHADOWRUSH