diff --git a/Data/Map019.rxdata b/Data/Map019.rxdata index fa2420e80..779dc29e5 100644 Binary files a/Data/Map019.rxdata and b/Data/Map019.rxdata differ diff --git a/Data/Map042.rxdata b/Data/Map042.rxdata index d30d41dfc..a0fd00e73 100644 Binary files a/Data/Map042.rxdata and b/Data/Map042.rxdata differ diff --git a/Data/MapInfos.rxdata b/Data/MapInfos.rxdata index acef2167b..261f21205 100644 Binary files a/Data/MapInfos.rxdata and b/Data/MapInfos.rxdata differ diff --git a/Data/Scripts/010_Data/002_PBS data/008_Species.rb b/Data/Scripts/010_Data/002_PBS data/008_Species.rb index e8a052a0b..63332c6ee 100644 --- a/Data/Scripts/010_Data/002_PBS data/008_Species.rb +++ b/Data/Scripts/010_Data/002_PBS data/008_Species.rb @@ -61,9 +61,9 @@ module GameData return nil if !species || !form validate species => [Symbol, self, String, Integer] validate form => Integer -# if other.is_a?(Integer) -# p "Please switch to symbols, thanks." -# end + # if other.is_a?(Integer) + # p "Please switch to symbols, thanks." + # end species = species.species if species.is_a?(self) species = DATA[species].species if species.is_a?(Integer) species = species.to_sym if species.is_a?(String) @@ -74,110 +74,110 @@ module GameData def self.schema(compiling_forms = false) ret = { - "FormName" => [0, "q"], - "Kind" => [0, "s"], - "Pokedex" => [0, "q"], - "Type1" => [0, "e", :Type], - "Type2" => [0, "e", :Type], - "BaseStats" => [0, "vvvvvv"], - "EffortPoints" => [0, "uuuuuu"], - "BaseEXP" => [0, "v"], - "Rareness" => [0, "u"], - "Happiness" => [0, "u"], - "Moves" => [0, "*ue", nil, :Move], - "TutorMoves" => [0, "*e", :Move], - "EggMoves" => [0, "*e", :Move], - "Abilities" => [0, "*e", :Ability], - "HiddenAbility" => [0, "*e", :Ability], - "WildItemCommon" => [0, "e", :Item], - "WildItemUncommon" => [0, "e", :Item], - "WildItemRare" => [0, "e", :Item], - "Compatibility" => [0, "*e", :EggGroup], - "StepsToHatch" => [0, "v"], - "Height" => [0, "f"], - "Weight" => [0, "f"], - "Color" => [0, "e", :BodyColor], - "Shape" => [0, "y", :BodyShape], - "Habitat" => [0, "e", :Habitat], - "Generation" => [0, "i"], - "BattlerPlayerX" => [0, "i"], - "BattlerPlayerY" => [0, "i"], - "BattlerEnemyX" => [0, "i"], - "BattlerEnemyY" => [0, "i"], - "BattlerAltitude" => [0, "i"], - "BattlerShadowX" => [0, "i"], + "FormName" => [0, "q"], + "Kind" => [0, "s"], + "Pokedex" => [0, "q"], + "Type1" => [0, "e", :Type], + "Type2" => [0, "e", :Type], + "BaseStats" => [0, "vvvvvv"], + "EffortPoints" => [0, "uuuuuu"], + "BaseEXP" => [0, "v"], + "Rareness" => [0, "u"], + "Happiness" => [0, "u"], + "Moves" => [0, "*ue", nil, :Move], + "TutorMoves" => [0, "*e", :Move], + "EggMoves" => [0, "*e", :Move], + "Abilities" => [0, "*e", :Ability], + "HiddenAbility" => [0, "*e", :Ability], + "WildItemCommon" => [0, "e", :Item], + "WildItemUncommon" => [0, "e", :Item], + "WildItemRare" => [0, "e", :Item], + "Compatibility" => [0, "*e", :EggGroup], + "StepsToHatch" => [0, "v"], + "Height" => [0, "f"], + "Weight" => [0, "f"], + "Color" => [0, "e", :BodyColor], + "Shape" => [0, "y", :BodyShape], + "Habitat" => [0, "e", :Habitat], + "Generation" => [0, "i"], + "BattlerPlayerX" => [0, "i"], + "BattlerPlayerY" => [0, "i"], + "BattlerEnemyX" => [0, "i"], + "BattlerEnemyY" => [0, "i"], + "BattlerAltitude" => [0, "i"], + "BattlerShadowX" => [0, "i"], "BattlerShadowSize" => [0, "u"] } if compiling_forms - ret["PokedexForm"] = [0, "u"] - ret["Evolutions"] = [0, "*ees", :Species, :Evolution, nil] - ret["MegaStone"] = [0, "e", :Item] - ret["MegaMove"] = [0, "e", :Move] - ret["UnmegaForm"] = [0, "u"] - ret["MegaMessage"] = [0, "u"] + ret["PokedexForm"] = [0, "u"] + ret["Evolutions"] = [0, "*ees", :Species, :Evolution, nil] + ret["MegaStone"] = [0, "e", :Item] + ret["MegaMove"] = [0, "e", :Move] + ret["UnmegaForm"] = [0, "u"] + ret["MegaMessage"] = [0, "u"] else ret["InternalName"] = [0, "n"] - ret["Name"] = [0, "s"] - ret["GrowthRate"] = [0, "e", :GrowthRate] - ret["GenderRate"] = [0, "e", :GenderRatio] - ret["Incense"] = [0, "e", :Item] - ret["Evolutions"] = [0, "*ses", nil, :Evolution, nil] + ret["Name"] = [0, "s"] + ret["GrowthRate"] = [0, "e", :GrowthRate] + ret["GenderRate"] = [0, "e", :GenderRatio] + ret["Incense"] = [0, "e", :Item] + ret["Evolutions"] = [0, "*ses", nil, :Evolution, nil] end return ret end def initialize(hash) - @id = hash[:id] - @id_number = hash[:id_number] || -1 - @species = hash[:species] || @id - @form = hash[:form] || 0 - @real_name = hash[:name] || "Unnamed" - @real_form_name = hash[:form_name] - @real_category = hash[:category] || "???" - @real_pokedex_entry = hash[:pokedex_entry] || "???" - @pokedex_form = hash[:pokedex_form] || @form - @type1 = hash[:type1] || :NORMAL - @type2 = hash[:type2] || @type1 - @base_stats = hash[:base_stats] || {} - @evs = hash[:evs] || {} + @id = hash[:id] + @id_number = hash[:id_number] || -1 + @species = hash[:species] || @id + @form = hash[:form] || 0 + @real_name = hash[:name] || "Unnamed" + @real_form_name = hash[:form_name] + @real_category = hash[:category] || "???" + @real_pokedex_entry = hash[:pokedex_entry] || "???" + @pokedex_form = hash[:pokedex_form] || @form + @type1 = hash[:type1] || :NORMAL + @type2 = hash[:type2] || @type1 + @base_stats = hash[:base_stats] || {} + @evs = hash[:evs] || {} GameData::Stat.each_main do |s| @base_stats[s.id] = 1 if !@base_stats[s.id] || @base_stats[s.id] <= 0 - @evs[s.id] = 0 if !@evs[s.id] || @evs[s.id] < 0 + @evs[s.id] = 0 if !@evs[s.id] || @evs[s.id] < 0 end - @base_exp = hash[:base_exp] || 100 - @growth_rate = hash[:growth_rate] || :Medium - @gender_ratio = hash[:gender_ratio] || :Female50Percent - @catch_rate = hash[:catch_rate] || 255 - @happiness = hash[:happiness] || 70 - @moves = hash[:moves] || [] - @tutor_moves = hash[:tutor_moves] || [] - @egg_moves = hash[:egg_moves] || [] - @abilities = hash[:abilities] || [] - @hidden_abilities = hash[:hidden_abilities] || [] - @wild_item_common = hash[:wild_item_common] - @wild_item_uncommon = hash[:wild_item_uncommon] - @wild_item_rare = hash[:wild_item_rare] - @egg_groups = hash[:egg_groups] || [:Undiscovered] - @hatch_steps = hash[:hatch_steps] || 1 - @incense = hash[:incense] - @evolutions = hash[:evolutions] || [] - @height = hash[:height] || 1 - @weight = hash[:weight] || 1 - @color = hash[:color] || :Red - @shape = hash[:shape] || :Head - @habitat = hash[:habitat] || :None - @generation = hash[:generation] || 0 - @mega_stone = hash[:mega_stone] - @mega_move = hash[:mega_move] - @unmega_form = hash[:unmega_form] || 0 - @mega_message = hash[:mega_message] || 0 - @back_sprite_x = hash[:back_sprite_x] || 0 - @back_sprite_y = hash[:back_sprite_y] || 0 - @front_sprite_x = hash[:front_sprite_x] || 0 - @front_sprite_y = hash[:front_sprite_y] || 0 + @base_exp = hash[:base_exp] || 100 + @growth_rate = hash[:growth_rate] || :Medium + @gender_ratio = hash[:gender_ratio] || :Female50Percent + @catch_rate = hash[:catch_rate] || 255 + @happiness = hash[:happiness] || 70 + @moves = hash[:moves] || [] + @tutor_moves = hash[:tutor_moves] || [] + @egg_moves = hash[:egg_moves] || [] + @abilities = hash[:abilities] || [] + @hidden_abilities = hash[:hidden_abilities] || [] + @wild_item_common = hash[:wild_item_common] + @wild_item_uncommon = hash[:wild_item_uncommon] + @wild_item_rare = hash[:wild_item_rare] + @egg_groups = hash[:egg_groups] || [:Undiscovered] + @hatch_steps = hash[:hatch_steps] || 1 + @incense = hash[:incense] + @evolutions = hash[:evolutions] || [] + @height = hash[:height] || 1 + @weight = hash[:weight] || 1 + @color = hash[:color] || :Red + @shape = hash[:shape] || :Head + @habitat = hash[:habitat] || :None + @generation = hash[:generation] || 0 + @mega_stone = hash[:mega_stone] + @mega_move = hash[:mega_move] + @unmega_form = hash[:unmega_form] || 0 + @mega_message = hash[:mega_message] || 0 + @back_sprite_x = hash[:back_sprite_x] || 0 + @back_sprite_y = hash[:back_sprite_y] || 0 + @front_sprite_x = hash[:front_sprite_x] || 0 + @front_sprite_y = hash[:front_sprite_y] || 0 @front_sprite_altitude = hash[:front_sprite_altitude] || 0 - @shadow_x = hash[:shadow_x] || 0 - @shadow_size = hash[:shadow_size] || 2 + @shadow_x = hash[:shadow_x] || 0 + @shadow_size = hash[:shadow_size] || 2 end # @return [String] the translated name of this species @@ -200,16 +200,21 @@ module GameData return pbGetMessage(MessageTypes::Entries, @id_number) end + def is_fusion + return @id_number > Settings::NB_POKEMON + end + def apply_metrics_to_sprite(sprite, index, shadow = false) if shadow - if (index & 1) == 1 # Foe Pokémon + if (index & 1) == 1 # Foe Pokémon sprite.x += @shadow_x * 2 end else - if (index & 1) == 0 # Player's Pokémon + if (index & 1) == 0 # Player's Pokémon sprite.x += @back_sprite_x * 2 - sprite.y += (@back_sprite_y * 2) + Settings::BACKSPRITE_POSITION_OFFSET - else # Foe Pokémon + sprite.y += (@back_sprite_y * 2) + Settings::BACKSPRITE_POSITION_OFFSET + else + # Foe Pokémon sprite.x += @front_sprite_x * 2 sprite.y += (@front_sprite_y * 2) + Settings::FRONTSPRITE_POSITION_OFFSET sprite.y -= @front_sprite_altitude * 2 @@ -219,15 +224,15 @@ module GameData def shows_shadow? return true -# return @front_sprite_altitude > 0 + # return @front_sprite_altitude > 0 end def get_evolutions(exclude_invalid = false) ret = [] @evolutions.each do |evo| - next if evo[3] # Is the prevolution + next if evo[3] # Is the prevolution next if evo[1] == :None && exclude_invalid - ret.push([evo[0], evo[1], evo[2]]) # [Species, method, parameter] + ret.push([evo[0], evo[1], evo[2]]) # [Species, method, parameter] end return ret end @@ -237,7 +242,7 @@ module GameData evos = evos.sort { |a, b| GameData::Species.get(a[0]).id_number <=> GameData::Species.get(b[0]).id_number } ret = [] evos.each do |evo| - ret.push([@species].concat(evo)) # [Prevo species, evo species, method, parameter] + ret.push([@species].concat(evo)) # [Prevo species, evo species, method, parameter] evo_array = GameData::Species.get(evo[0]).get_family_evolutions(exclude_invalid) ret.concat(evo_array) if evo_array && evo_array.length > 0 end @@ -246,7 +251,7 @@ module GameData def get_previous_species return @species if @evolutions.length == 0 - @evolutions.each { |evo| return evo[0] if evo[3] } # Is the prevolution + @evolutions.each { |evo| return evo[0] if evo[3] } # Is the prevolution return @species end @@ -254,12 +259,12 @@ module GameData ret = @species return ret if @evolutions.length == 0 @evolutions.each do |evo| - next if !evo[3] # Not the prevolution + next if !evo[3] # Not the prevolution if check_items incense = GameData::Species.get(evo[0]).incense ret = evo[0] if !incense || item1 == incense || item2 == incense else - ret = evo[0] # Species of prevolution + ret = evo[0] # Species of prevolution end break end @@ -305,7 +310,7 @@ module GameData def minimum_level return 1 if @evolutions.length == 0 @evolutions.each do |evo| - next if !evo[3] # Not the prevolution + next if !evo[3] # Not the prevolution evo_method_data = GameData::Evolution.get(evo[1]) next if evo_method_data.level_up_proc.nil? min_level = evo_method_data.minimum_level @@ -362,13 +367,15 @@ def pbGetEvolvedFormData(species, exclude_invalid = false) end # @deprecated Use {GameData#Species#get_family_evolutions} instead. This alias is slated to be removed in v20. -def pbGetEvolutionFamilyData(species) # Unused +def pbGetEvolutionFamilyData(species) + # Unused Deprecation.warn_method('pbGetEvolutionFamilyData', 'v20', 'GameData::Species.get(species).get_family_evolutions') return GameData::Species.get(species).get_family_evolutions end # @deprecated Use {GameData#Species#get_previous_species} instead. This alias is slated to be removed in v20. -def pbGetPreviousForm(species) # Unused +def pbGetPreviousForm(species) + # Unused Deprecation.warn_method('pbGetPreviousForm', 'v20', 'GameData::Species.get(species).get_previous_species') return GameData::Species.get(species).get_previous_species end @@ -380,7 +387,8 @@ def pbGetBabySpecies(species, check_items = false, item1 = nil, item2 = nil) end # @deprecated Use {GameData#Species#family_evolutions_have_method?} instead. This alias is slated to be removed in v20. -def pbCheckEvolutionFamilyForMethod(species, method, param = nil) # Unused +def pbCheckEvolutionFamilyForMethod(species, method, param = nil) + # Unused Deprecation.warn_method('pbCheckEvolutionFamilyForMethod', 'v20', 'GameData::Species.get(species).family_evolutions_have_method?(method)') return GameData::Species.get(species).family_evolutions_have_method?(method, param) end diff --git a/Data/Scripts/010_Data/002_PBS data/009_Species_Files.rb b/Data/Scripts/010_Data/002_PBS data/009_Species_Files.rb index 12295f565..0334afef4 100644 --- a/Data/Scripts/010_Data/002_PBS data/009_Species_Files.rb +++ b/Data/Scripts/010_Data/002_PBS data/009_Species_Files.rb @@ -3,9 +3,9 @@ module GameData def self.check_graphic_file(path, species, form = 0, gender = 0, shiny = false, shadow = false, subfolder = "") try_subfolder = sprintf("%s/", subfolder) try_species = species - try_form = (form > 0) ? sprintf("_%d", form) : "" - try_gender = (gender == 1) ? "_female" : "" - try_shadow = (shadow) ? "_shadow" : "" + try_form = (form > 0) ? sprintf("_%d", form) : "" + try_gender = (gender == 1) ? "_female" : "" + try_shadow = (shadow) ? "_shadow" : "" factors = [] factors.push([4, sprintf("%s shiny/", subfolder), try_subfolder]) if shiny factors.push([3, try_shadow, ""]) if shadow @@ -18,17 +18,22 @@ module GameData factors.each_with_index do |factor, index| value = ((i / (2 ** index)) % 2 == 0) ? factor[1] : factor[2] case factor[0] - when 0 then try_species = value - when 1 then try_form = value - when 2 then try_gender = value - when 3 then try_shadow = value - when 4 then try_subfolder = value # Shininess + when 0 then + try_species = value + when 1 then + try_form = value + when 2 then + try_gender = value + when 3 then + try_shadow = value + when 4 then + try_subfolder = value # Shininess end end # Look for a graphic matching this combination's parameters try_species_text = try_species ret = pbResolveBitmap(sprintf("%s%s%s%s%s%s", path, try_subfolder, - try_species_text, try_form, try_gender, try_shadow)) + try_species_text, try_form, try_gender, try_shadow)) return ret if ret end return nil @@ -87,7 +92,7 @@ module GameData def self.sprite_bitmap_from_pokemon(pkmn, back = false, species = nil) species = pkmn.species if !species - species = GameData::Species.get(species).species # Just to be sure it's a symbol + species = GameData::Species.get(species).species # Just to be sure it's a symbol return self.egg_sprite_bitmap(species, pkmn.form) if pkmn.egg? if back ret = self.back_sprite_bitmap(species, pkmn.form, pkmn.gender, pkmn.shiny?, pkmn.shadowPokemon?) @@ -177,6 +182,10 @@ module GameData def self.check_cry_file(species, form) species_data = self.get_species_form(species, form) return nil if species_data.nil? + if species_data.is_fusion + species_data = GameData::Species.get(getHeadID(species_data)) + end + if form > 0 ret = sprintf("Cries/%s_%d", species_data.species, form) return ret if pbResolveAudioSE(ret) @@ -228,8 +237,8 @@ module GameData filename = pbResolveAudioSE(GameData::Species.cry_filename(species, form)) ret = getPlayTime(filename) if filename end - ret /= pitch # Sound played at a lower pitch lasts longer - return (ret * Graphics.frame_rate).ceil + 4 # 4 provides a buffer between sounds + ret /= pitch # Sound played at a lower pitch lasts longer + return (ret * Graphics.frame_rate).ceil + 4 # 4 provides a buffer between sounds end end end @@ -238,7 +247,7 @@ end # Deprecated methods #=============================================================================== # @deprecated This alias is slated to be removed in v20. -def pbLoadSpeciesBitmap(species, gender = 0, form = 0, shiny = false, shadow = false, back = false , egg = false) +def pbLoadSpeciesBitmap(species, gender = 0, form = 0, shiny = false, shadow = false, back = false, egg = false) Deprecation.warn_method('pbLoadSpeciesBitmap', 'v20', 'GameData::Species.sprite_bitmap(species, form, gender, shiny, shadow, back, egg)') return GameData::Species.sprite_bitmap(species, form, gender, shiny, shadow, back, egg) end diff --git a/Data/Scripts/016_UI/001_Non-interactive UI/006_UI_HallOfFame.rb b/Data/Scripts/016_UI/001_Non-interactive UI/006_UI_HallOfFame.rb index 57e759a4d..69d118154 100644 --- a/Data/Scripts/016_UI/001_Non-interactive UI/006_UI_HallOfFame.rb +++ b/Data/Scripts/016_UI/001_Non-interactive UI/006_UI_HallOfFame.rb @@ -17,7 +17,7 @@ class HallOfFame_Scene # When true, all pokémon will be in one line # When false, all pokémon will be in two lines - SINGLEROW = false + SINGLEROW = true # Make the pokémon movement ON in hall entry ANIMATION = true # Speed in pokémon movement in hall entry. Don't use less than 2! @@ -39,42 +39,42 @@ class HallOfFame_Scene FINALFADESPEED = 16 # Sprites opacity value when them aren't selected OPACITY = 64 - BASECOLOR = Color.new(248,248,248) - SHADOWCOLOR = Color.new(0,0,0) + BASECOLOR = Color.new(248, 248, 248) + SHADOWCOLOR = Color.new(0, 0, 0) # Placement for pokemon icons def pbStartScene - @sprites={} - @viewport=Viewport.new(0,0,Graphics.width, Graphics.height) - @viewport.z=99999 + @sprites = {} + @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height) + @viewport.z = 99999 # Comment the below line to doesn't use a background - addBackgroundPlane(@sprites,"bg","hallfamebg",@viewport) - @sprites["hallbars"]=IconSprite.new(@viewport) + addBackgroundPlane(@sprites, "bg", "hallfamebg", @viewport) + @sprites["hallbars"] = IconSprite.new(@viewport) @sprites["hallbars"].setBitmap("Graphics/Pictures/hallfamebars") - @sprites["overlay"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport) - @sprites["overlay"].z=10 + @sprites["overlay"] = BitmapSprite.new(Graphics.width, Graphics.height, @viewport) + @sprites["overlay"].z = 10 pbSetSystemFont(@sprites["overlay"].bitmap) - @alreadyFadedInEnd=false - @useMusic=false - @battlerIndex=0 - @hallEntry=[] + @alreadyFadedInEnd = false + @useMusic = false + @battlerIndex = 0 + @hallEntry = [] end def pbStartSceneEntry pbStartScene - @useMusic=(ENTRYMUSIC && ENTRYMUSIC!="") + @useMusic = (ENTRYMUSIC && ENTRYMUSIC != "") pbBGMPlay(ENTRYMUSIC) if @useMusic saveHallEntry - @xmovement=[] - @ymovement=[] + @xmovement = [] + @ymovement = [] createBattlers pbFadeInAndShow(@sprites) { pbUpdate } end def pbStartScenePC pbStartScene - @hallIndex=$PokemonGlobal.hallOfFame.size-1 - @hallEntry=$PokemonGlobal.hallOfFame[-1] + @hallIndex = $PokemonGlobal.hallOfFame.size - 1 + @hallEntry = $PokemonGlobal.hallOfFame[-1] createBattlers(false) pbFadeInAndShow(@sprites) { pbUpdate } pbUpdatePC @@ -88,35 +88,36 @@ class HallOfFame_Scene @viewport.dispose end - def slowFadeOut(sprites,exponent) # 2 exponent + def slowFadeOut(sprites, exponent) + # 2 exponent # To handle values above 8 - extraWaitExponent=exponent-9 - exponent=8 if 8-1 - (2**extraWaitExponent).times do + if extraWaitExponent > -1 + (2 ** extraWaitExponent).times do Graphics.update Input.update pbUpdate end end - pbSetSpritesToColor(sprites,Color.new(0,0,0,j*speed)) + pbSetSpritesToColor(sprites, Color.new(0, 0, 0, j * speed)) block_given? ? yield : pbUpdateSpriteHash(sprites) end end # Dispose the sprite if the sprite exists and make it null - def restartSpritePosition(sprites,spritename) + def restartSpritePosition(sprites, spritename) sprites[spritename].dispose if sprites.include?(spritename) && sprites[spritename] - sprites[spritename]=nil + sprites[spritename] = nil end # Change the pokémon sprites opacity except the index one - def setPokemonSpritesOpacity(index,opacity=255) + def setPokemonSpritesOpacity(index, opacity = 255) for n in 0...@hallEntry.size - @sprites["pokemon#{n}"].opacity=(n==index) ? 255 : opacity if @sprites["pokemon#{n}"] + @sprites["pokemon#{n}"].opacity = (n == index) ? 255 : opacity if @sprites["pokemon#{n}"] end end @@ -127,142 +128,145 @@ class HallOfFame_Scene end # Update the global variables $PokemonGlobal.hallOfFame.push(@hallEntry) - $PokemonGlobal.hallOfFameLastNumber+=1 - $PokemonGlobal.hallOfFame.delete_at(0) if HALLLIMIT>-1 && - $PokemonGlobal.hallOfFame.size>HALLLIMIT + $PokemonGlobal.hallOfFameLastNumber += 1 + $PokemonGlobal.hallOfFame.delete_at(0) if HALLLIMIT > -1 && + $PokemonGlobal.hallOfFame.size > HALLLIMIT end # Return the x/y point position in screen for battler index number # Don't use odd numbers! def xpointformula(battlernumber) - ret=0 + ret = 0 if !SINGLEROW - ret=32+160*xpositionformula(battlernumber) + ret = 32 + 160 * xpositionformula(battlernumber) else - ret=(60*(battlernumber/2)+48)*(xpositionformula(battlernumber)-1) - ret+=Graphics.width/2-56 + ret = (60 * (battlernumber / 2) + 48) * (xpositionformula(battlernumber) - 1) + ret += Graphics.width / 2 - 56 end return ret end def ypointformula(battlernumber) - ret=0 + ret = 0 if !SINGLEROW - ret=32+128*ypositionformula(battlernumber)/2 + ret = 32 + 128 * ypositionformula(battlernumber) / 2 else - ret=96-8*(battlernumber/2) + ret = 96 - 8 * (battlernumber / 2) end return ret end # Returns 0, 1 or 2 as the x/y column value def xpositionformula(battlernumber) - ret=0 + ret = 0 if !SINGLEROW - ret=(battlernumber/3%2==0) ? (19-battlernumber)%3 : (19+battlernumber)%3 + ret = (battlernumber / 3 % 2 == 0) ? (19 - battlernumber) % 3 : (19 + battlernumber) % 3 else - ret=battlernumber%2*2 + ret = battlernumber % 2 * 2 end return ret end def ypositionformula(battlernumber) - ret=0 + ret = 0 if !SINGLEROW - ret=(battlernumber/3)%2*2 + ret = (battlernumber / 3) % 2 * 2 else - ret=1 + ret = 1 end return ret end def moveSprite(i) - spritename=(i>-1) ? "pokemon#{i}" : "trainer" - speed = (i>-1) ? ANIMATIONSPEED : 2 - if(!ANIMATION) # Skips animation - @sprites[spritename].x-=speed*@xmovement[i] - @xmovement[i]=0 - @sprites[spritename].y-=speed*@ymovement[i] - @ymovement[i]=0 + spritename = (i > -1) ? "pokemon#{i}" : "trainer" + speed = (i > -1) ? ANIMATIONSPEED : 2 + if (!ANIMATION) # Skips animation + @sprites[spritename].x -= speed * @xmovement[i] + @xmovement[i] = 0 + @sprites[spritename].y -= speed * @ymovement[i] + @ymovement[i] = 0 end - if(@xmovement[i]!=0) - direction = (@xmovement[i]>0) ? -1 : 1 - @sprites[spritename].x+=speed*direction - @xmovement[i]+=direction + if (@xmovement[i] != 0) + direction = (@xmovement[i] > 0) ? -1 : 1 + @sprites[spritename].x += speed * direction + @xmovement[i] += direction end - if(@ymovement[i]!=0) - direction = (@ymovement[i]>0) ? -1 : 1 - @sprites[spritename].y+=speed*direction - @ymovement[i]+=direction + if (@ymovement[i] != 0) + direction = (@ymovement[i] > 0) ? -1 : 1 + @sprites[spritename].y += speed * direction + @ymovement[i] += direction end end - def createBattlers(hide=true) + def createBattlers(hide = true) # Movement in animation for i in 0...6 # Clear all 6 pokémon sprites and dispose the ones that exists every time # that this method is call - restartSpritePosition(@sprites,"pokemon#{i}") - next if i>=@hallEntry.size - xpoint=xpointformula(i) - ypoint=ypointformula(i) - pok=@hallEntry[i] - @sprites["pokemon#{i}"]=PokemonSprite.new(@viewport) + restartSpritePosition(@sprites, "pokemon#{i}") + next if i >= @hallEntry.size + xpoint = xpointformula(i) + ypoint = ypointformula(i) + pok = @hallEntry[i] + @sprites["pokemon#{i}"] = PokemonSprite.new(@viewport) @sprites["pokemon#{i}"].setOffset(PictureOrigin::TopLeft) @sprites["pokemon#{i}"].setPokemonBitmap(pok) + @sprites["pokemon#{i}"].zoom_x = Settings::BACKRPSPRITE_SCALE + @sprites["pokemon#{i}"].zoom_y = Settings::BACKRPSPRITE_SCALE + # This method doesn't put the exact coordinates @sprites["pokemon#{i}"].x = xpoint @sprites["pokemon#{i}"].y = ypoint if @sprites["pokemon#{i}"].bitmap && !@sprites["pokemon#{i}"].disposed? - @sprites["pokemon#{i}"].x += (128-@sprites["pokemon#{i}"].bitmap.width)/2 - @sprites["pokemon#{i}"].y += (128-@sprites["pokemon#{i}"].bitmap.height)/2 + @sprites["pokemon#{i}"].x += (128 - @sprites["pokemon#{i}"].bitmap.width) / 2 + @sprites["pokemon#{i}"].y += (128 - @sprites["pokemon#{i}"].bitmap.height) / 2 end - @sprites["pokemon#{i}"].z=7-i if SINGLEROW + @sprites["pokemon#{i}"].z = 7 - i if SINGLEROW next if !hide # Animation distance calculation - horizontal=1-xpositionformula(i) - vertical=1-ypositionformula(i) - xdistance=(horizontal==-1) ? -@sprites["pokemon#{i}"].bitmap.width : Graphics.width - ydistance=(vertical==-1) ? -@sprites["pokemon#{i}"].bitmap.height : Graphics.height - xdistance=((xdistance-@sprites["pokemon#{i}"].x)/ANIMATIONSPEED).abs+1 - ydistance=((ydistance-@sprites["pokemon#{i}"].y)/ANIMATIONSPEED).abs+1 - biggerdistance=(xdistance>ydistance) ? xdistance : ydistance - @xmovement[i]=biggerdistance - @xmovement[i]*=-1 if horizontal==-1 - @xmovement[i]=0 if horizontal== 0 - @ymovement[i]=biggerdistance - @ymovement[i]*=-1 if vertical==-1 - @ymovement[i]=0 if vertical== 0 + horizontal = 1 - xpositionformula(i) + vertical = 1 - ypositionformula(i) + xdistance = (horizontal == -1) ? -@sprites["pokemon#{i}"].bitmap.width : Graphics.width + ydistance = (vertical == -1) ? -@sprites["pokemon#{i}"].bitmap.height : Graphics.height + xdistance = ((xdistance - @sprites["pokemon#{i}"].x) / ANIMATIONSPEED).abs + 1 + ydistance = ((ydistance - @sprites["pokemon#{i}"].y) / ANIMATIONSPEED).abs + 1 + biggerdistance = (xdistance > ydistance) ? xdistance : ydistance + @xmovement[i] = biggerdistance + @xmovement[i] *= -1 if horizontal == -1 + @xmovement[i] = 0 if horizontal == 0 + @ymovement[i] = biggerdistance + @ymovement[i] *= -1 if vertical == -1 + @ymovement[i] = 0 if vertical == 0 # Hide the battlers - @sprites["pokemon#{i}"].x+=@xmovement[i]*ANIMATIONSPEED - @sprites["pokemon#{i}"].y+=@ymovement[i]*ANIMATIONSPEED + @sprites["pokemon#{i}"].x += @xmovement[i] * ANIMATIONSPEED + @sprites["pokemon#{i}"].y += @ymovement[i] * ANIMATIONSPEED end end def createTrainerBattler - @sprites["trainer"]=IconSprite.new(@viewport) + @sprites["trainer"] = IconSprite.new(@viewport) @sprites["trainer"].setBitmap(GameData::TrainerType.front_sprite_filename($Trainer.trainer_type)) if !SINGLEROW - @sprites["trainer"].x=Graphics.width-96 - @sprites["trainer"].y=160 + @sprites["trainer"].x = Graphics.width - 96 + @sprites["trainer"].y = 160 else - @sprites["trainer"].x=Graphics.width/2 - @sprites["trainer"].y=178 + @sprites["trainer"].x = Graphics.width / 2 + @sprites["trainer"].y = 178 end - @sprites["trainer"].z=9 - @sprites["trainer"].ox=@sprites["trainer"].bitmap.width/2 - @sprites["trainer"].oy=@sprites["trainer"].bitmap.height/2 + @sprites["trainer"].z = 9 + @sprites["trainer"].ox = @sprites["trainer"].bitmap.width / 2 + @sprites["trainer"].oy = @sprites["trainer"].bitmap.height / 2 if REMOVEBARS @sprites["overlay"].bitmap.clear - @sprites["hallbars"].visible=false + @sprites["hallbars"].visible = false end - @xmovement[@battlerIndex]=0 - @ymovement[@battlerIndex]=0 - if(ANIMATION && !SINGLEROW) # Trainer Animation - startpoint=Graphics.width/2 + @xmovement[@battlerIndex] = 0 + @ymovement[@battlerIndex] = 0 + if (ANIMATION && !SINGLEROW) # Trainer Animation + startpoint = Graphics.width / 2 # 2 is the trainer speed - @xmovement[@battlerIndex]=(startpoint-@sprites["trainer"].x)/2 - @sprites["trainer"].x=startpoint + @xmovement[@battlerIndex] = (startpoint - @sprites["trainer"].x) / 2 + @sprites["trainer"].x = startpoint else ENTRYWAITTIME.times do Graphics.update @@ -272,62 +276,73 @@ class HallOfFame_Scene end end + def getDifficulty + if $game_switches[GAME_DIFFICULTY_EASY] + return "Easy" + elsif $game_switches[GAME_DIFFICULTY_HARD] + return "Hard" + else + return "Normal" + end + end + def writeTrainerData totalsec = Graphics.frame_count / Graphics.frame_rate hour = totalsec / 60 / 60 min = totalsec / 60 % 60 - pubid=sprintf("%05d",$Trainer.public_ID) - lefttext= _INTL("Name{1}
",$Trainer.name) - lefttext+=_INTL("IDNo.{1}
",pubid) - lefttext+=_ISPRINTF("Time{1:02d}:{2:02d}
",hour,min) - lefttext+=_INTL("Pokédex{1}/{2}
", - $Trainer.pokedex.owned_count,$Trainer.pokedex.seen_count) - @sprites["messagebox"]=Window_AdvancedTextPokemon.new(lefttext) - @sprites["messagebox"].viewport=@viewport - @sprites["messagebox"].width=192 if @sprites["messagebox"].width<192 - @sprites["msgwindow"]=pbCreateMessageWindow(@viewport) + pubid = sprintf("%05d", $Trainer.public_ID) + lefttext = _INTL("Name{1}
", $Trainer.name) + lefttext += _INTL("IDNo.{1}
", pubid) + lefttext += _ISPRINTF("Time{1:02d}:{2:02d}
", hour, min) + lefttext += _INTL("Pokédex{1}/{2}
", + $Trainer.pokedex.owned_count, $Trainer.pokedex.seen_count) + lefttext += _INTL("Difficulty{1}
", getDifficulty()) + @sprites["messagebox"] = Window_AdvancedTextPokemon.new(lefttext) + @sprites["messagebox"].viewport = @viewport + @sprites["messagebox"].width = 192 if @sprites["messagebox"].width < 192 + @sprites["msgwindow"] = pbCreateMessageWindow(@viewport) pbMessageDisplay(@sprites["msgwindow"], - _INTL("League champion!\nCongratulations!\\^")) + _INTL("League champion!\nCongratulations!\\^")) end - def writePokemonData(pokemon,hallNumber=-1) - overlay=@sprites["overlay"].bitmap + def writePokemonData(pokemon, hallNumber = -1) + overlay = @sprites["overlay"].bitmap overlay.clear - pokename=pokemon.name - speciesname=pokemon.speciesName + pokename = pokemon.name + speciesname = pokemon.speciesName if pokemon.male? - speciesname+="♂" + speciesname += "♂" elsif pokemon.female? - speciesname+="♀" + speciesname += "♀" end - pokename+="/"+speciesname - pokename=_INTL("Egg")+"/"+_INTL("Egg") if pokemon.egg? - idno=(pokemon.owner.name.empty? || pokemon.egg?) ? "?????" : sprintf("%05d",pokemon.owner.public_id) + pokename += "/" + speciesname + pokename = _INTL("Egg") + "/" + _INTL("Egg") if pokemon.egg? + idno = (pokemon.owner.name.empty? || pokemon.egg?) ? "?????" : sprintf("%05d", pokemon.owner.public_id) dexnumber = _INTL("No. ???") if !pokemon.egg? species_data = GameData::Species.get(pokemon.species) - dexnumber = _ISPRINTF("No. {1:03d}",species_data.id_number) + dexnumber = _ISPRINTF("No. {1:03d}", species_data.id_number) end - textPositions=[ - [dexnumber,32,Graphics.height-86,0,BASECOLOR,SHADOWCOLOR], - [pokename,Graphics.width-192,Graphics.height-86,2,BASECOLOR,SHADOWCOLOR], - [_INTL("Lv. {1}",pokemon.egg? ? "?" : pokemon.level), - 64,Graphics.height-54,0,BASECOLOR,SHADOWCOLOR], - [_INTL("IDNo.{1}",pokemon.egg? ? "?????" : idno), - Graphics.width-192,Graphics.height-54,2,BASECOLOR,SHADOWCOLOR] + textPositions = [ + [dexnumber, 32, Graphics.height - 86, 0, BASECOLOR, SHADOWCOLOR], + [pokename, Graphics.width - 192, Graphics.height - 86, 2, BASECOLOR, SHADOWCOLOR], + [_INTL("Lv. {1}", pokemon.egg? ? "?" : pokemon.level), + 64, Graphics.height - 54, 0, BASECOLOR, SHADOWCOLOR], + [_INTL("IDNo.{1}", pokemon.egg? ? "?????" : idno), + Graphics.width - 192, Graphics.height - 54, 2, BASECOLOR, SHADOWCOLOR] ] - if (hallNumber>-1) - textPositions.push([_INTL("Hall of Fame No."),Graphics.width/2-104,-6,0,BASECOLOR,SHADOWCOLOR]) - textPositions.push([hallNumber.to_s,Graphics.width/2+104,-6,1,BASECOLOR,SHADOWCOLOR]) + if (hallNumber > -1) + textPositions.push([_INTL("Hall of Fame No."), Graphics.width / 2 - 104, -6, 0, BASECOLOR, SHADOWCOLOR]) + textPositions.push([hallNumber.to_s, Graphics.width / 2 + 104, -6, 1, BASECOLOR, SHADOWCOLOR]) end - pbDrawTextPositions(overlay,textPositions) + pbDrawTextPositions(overlay, textPositions) end def writeWelcome - overlay=@sprites["overlay"].bitmap + overlay = @sprites["overlay"].bitmap overlay.clear - pbDrawTextPositions(overlay,[[_INTL("Welcome to the Hall of Fame!"), - Graphics.width/2,Graphics.height-80,2,BASECOLOR,SHADOWCOLOR]]) + pbDrawTextPositions(overlay, [[_INTL("Welcome to the Hall of Fame!"), + Graphics.width / 2, Graphics.height - 80, 2, BASECOLOR, SHADOWCOLOR]]) end def pbAnimationLoop @@ -336,7 +351,7 @@ class HallOfFame_Scene Input.update pbUpdate pbUpdateAnimation - break if @battlerIndex==@hallEntry.size+2 + break if @battlerIndex == @hallEntry.size + 2 end end @@ -345,19 +360,19 @@ class HallOfFame_Scene Graphics.update Input.update pbUpdate - continueScene=true - break if Input.trigger?(Input::BACK) # Exits - if Input.trigger?(Input::USE) # Moves the selection one entry backward - @battlerIndex+=10 - continueScene=pbUpdatePC + continueScene = true + break if Input.trigger?(Input::BACK) # Exits + if Input.trigger?(Input::USE) # Moves the selection one entry backward + @battlerIndex += 10 + continueScene = pbUpdatePC end - if Input.trigger?(Input::LEFT) # Moves the selection one pokémon forward - @battlerIndex-=1 - continueScene=pbUpdatePC + if Input.trigger?(Input::LEFT) # Moves the selection one pokémon forward + @battlerIndex -= 1 + continueScene = pbUpdatePC end - if Input.trigger?(Input::RIGHT) # Moves the selection one pokémon backward - @battlerIndex+=1 - continueScene=pbUpdatePC + if Input.trigger?(Input::RIGHT) # Moves the selection one pokémon backward + @battlerIndex += 1 + continueScene = pbUpdatePC end break if !continueScene end @@ -368,75 +383,76 @@ class HallOfFame_Scene end def pbUpdateAnimation - if @battlerIndex<=@hallEntry.size - if @xmovement[@battlerIndex]!=0 || @ymovement[@battlerIndex]!=0 - spriteIndex=(@battlerIndex<@hallEntry.size) ? @battlerIndex : -1 + if @battlerIndex <= @hallEntry.size + if @xmovement[@battlerIndex] != 0 || @ymovement[@battlerIndex] != 0 + spriteIndex = (@battlerIndex < @hallEntry.size) ? @battlerIndex : -1 moveSprite(spriteIndex) else - @battlerIndex+=1 - if @battlerIndex<=@hallEntry.size + @battlerIndex += 1 + if @battlerIndex <= @hallEntry.size # If it is a pokémon, write the pokémon text, wait the # ENTRYWAITTIME and goes to the next battler @hallEntry[@battlerIndex - 1].play_cry - writePokemonData(@hallEntry[@battlerIndex-1]) - (ENTRYWAITTIME*Graphics.frame_rate/20).times do + writePokemonData(@hallEntry[@battlerIndex - 1]) + (ENTRYWAITTIME * Graphics.frame_rate / 20).times do Graphics.update Input.update pbUpdate end - if @battlerIndex<@hallEntry.size # Preparates the next battler - setPokemonSpritesOpacity(@battlerIndex,OPACITY) + if @battlerIndex < @hallEntry.size # Preparates the next battler + setPokemonSpritesOpacity(@battlerIndex, OPACITY) @sprites["overlay"].bitmap.clear - else # Show the welcome message and preparates the trainer + else + # Show the welcome message and preparates the trainer setPokemonSpritesOpacity(-1) writeWelcome - (ENTRYWAITTIME*2*Graphics.frame_rate/20).times do + (ENTRYWAITTIME * 2 * Graphics.frame_rate / 20).times do Graphics.update Input.update pbUpdate end - setPokemonSpritesOpacity(-1,OPACITY) if !SINGLEROW + setPokemonSpritesOpacity(-1, OPACITY) if !SINGLEROW createTrainerBattler end end end - elsif @battlerIndex>@hallEntry.size + elsif @battlerIndex > @hallEntry.size # Write the trainer data and fade writeTrainerData - (ENTRYWAITTIME*Graphics.frame_rate/20).times do + (ENTRYWAITTIME * Graphics.frame_rate / 20).times do Graphics.update Input.update pbUpdate end - fadeSpeed=((Math.log(2**12)-Math.log(FINALFADESPEED))/Math.log(2)).floor - pbBGMFade((2**fadeSpeed).to_f/20) if @useMusic - slowFadeOut(@sprites,fadeSpeed) { pbUpdate } - @alreadyFadedInEnd=true - @battlerIndex+=1 + fadeSpeed = ((Math.log(2 ** 12) - Math.log(FINALFADESPEED)) / Math.log(2)).floor + pbBGMFade((2 ** fadeSpeed).to_f / 20) if @useMusic + slowFadeOut(@sprites, fadeSpeed) { pbUpdate } + @alreadyFadedInEnd = true + @battlerIndex += 1 end end def pbUpdatePC # Change the team - if @battlerIndex>=@hallEntry.size - @hallIndex-=1 - return false if @hallIndex==-1 - @hallEntry=$PokemonGlobal.hallOfFame[@hallIndex] - @battlerIndex=0 + if @battlerIndex >= @hallEntry.size + @hallIndex -= 1 + return false if @hallIndex == -1 + @hallEntry = $PokemonGlobal.hallOfFame[@hallIndex] + @battlerIndex = 0 createBattlers(false) - elsif @battlerIndex<0 - @hallIndex+=1 - return false if @hallIndex>=$PokemonGlobal.hallOfFame.size - @hallEntry=$PokemonGlobal.hallOfFame[@hallIndex] - @battlerIndex=@hallEntry.size-1 + elsif @battlerIndex < 0 + @hallIndex += 1 + return false if @hallIndex >= $PokemonGlobal.hallOfFame.size + @hallEntry = $PokemonGlobal.hallOfFame[@hallIndex] + @battlerIndex = @hallEntry.size - 1 createBattlers(false) end # Change the pokemon @hallEntry[@battlerIndex].play_cry - setPokemonSpritesOpacity(@battlerIndex,OPACITY) - hallNumber=$PokemonGlobal.hallOfFameLastNumber + @hallIndex - - $PokemonGlobal.hallOfFame.size + 1 - writePokemonData(@hallEntry[@battlerIndex],hallNumber) + setPokemonSpritesOpacity(@battlerIndex, OPACITY) + hallNumber = $PokemonGlobal.hallOfFameLastNumber + @hallIndex - + $PokemonGlobal.hallOfFame.size + 1 + writePokemonData(@hallEntry[@battlerIndex], hallNumber) return true end end @@ -467,7 +483,7 @@ end #=============================================================================== class HallOfFamePC def shouldShow? - return $PokemonGlobal.hallOfFameLastNumber>0 + return $PokemonGlobal.hallOfFameLastNumber > 0 end def name @@ -507,13 +523,13 @@ end # #=============================================================================== def pbHallOfFameEntry - scene=HallOfFame_Scene.new - screen=HallOfFameScreen.new(scene) + scene = HallOfFame_Scene.new + screen = HallOfFameScreen.new(scene) screen.pbStartScreenEntry end def pbHallOfFamePC - scene=HallOfFame_Scene.new - screen=HallOfFameScreen.new(scene) + scene = HallOfFame_Scene.new + screen = HallOfFameScreen.new(scene) screen.pbStartScreenPC end diff --git a/Data/Scripts/050_AddOns/GeneralUtils.rb b/Data/Scripts/050_AddOns/GeneralUtils.rb index b69dcd123..03a2e85d9 100644 --- a/Data/Scripts/050_AddOns/GeneralUtils.rb +++ b/Data/Scripts/050_AddOns/GeneralUtils.rb @@ -93,6 +93,8 @@ def getDexNumberForSpecies(species) dexNum = GameData::Species.get(species).id_number elsif species.is_a?(Pokemon) dexNum = GameData::Species.get(species.species).id_number + elsif species.is_a?(GameData::Species) + return species.id_number else dexNum = species end @@ -142,7 +144,10 @@ def getBodyID(species) return (dexNum / NB_POKEMON).round end -def getHeadID(species, bodyId) +def getHeadID(species, bodyId = nil) + if bodyId == nil + bodyId = getBodyID(species) + end head_dexNum = getDexNumberForSpecies(species) body_dexNum = getDexNumberForSpecies(bodyId) calculated_number = (head_dexNum - (body_dexNum * NB_POKEMON)).round diff --git a/Data/Scripts/050_AddOns/New Items effects.rb b/Data/Scripts/050_AddOns/New Items effects.rb index 22d168893..59f9ce592 100644 --- a/Data/Scripts/050_AddOns/New Items effects.rb +++ b/Data/Scripts/050_AddOns/New Items effects.rb @@ -1317,7 +1317,7 @@ def pbDNASplicing(pokemon, scene, supersplicers = false, superSplicer = false) typeWindow = drawPokemonType(newid) - if hasCustom§ + if hasCustom previewwindow.picture.pbSetColor(220, 255, 220, 200) else previewwindow.picture.pbSetColor(255, 255, 255, 200) @@ -1407,6 +1407,11 @@ def pbDNASplicing(pokemon, scene, supersplicers = false, superSplicer = false) end body_level = poke1.level head_level = poke2.level + + pokemon.exp_gained_since_fused=0 + pokemon.exp_when_fused_head=nil + pokemon.exp_when_fused_body=nil + if $Trainer.party.length >= 6 if (keepInParty == 0) $PokemonStorage.pbStoreCaught(poke2) diff --git a/Data/System.rxdata b/Data/System.rxdata index b8fb1db6c..2d9042c0c 100644 Binary files a/Data/System.rxdata and b/Data/System.rxdata differ