From 1b0577139ca874b4184558354b2cd39af6e493b9 Mon Sep 17 00:00:00 2001 From: infinitefusion Date: Sat, 1 Jan 2022 11:22:08 -0500 Subject: [PATCH] pokemon cries --- Data/Map019.rxdata | Bin 50026 -> 50026 bytes Data/Map042.rxdata | Bin 43215 -> 43101 bytes Data/MapInfos.rxdata | Bin 36346 -> 36405 bytes .../010_Data/002_PBS data/008_Species.rb | 224 +++++----- .../002_PBS data/009_Species_Files.rb | 35 +- .../006_UI_HallOfFame.rb | 390 +++++++++--------- Data/Scripts/050_AddOns/GeneralUtils.rb | 7 +- Data/Scripts/050_AddOns/New Items effects.rb | 7 +- Data/System.rxdata | Bin 27468 -> 27468 bytes 9 files changed, 353 insertions(+), 310 deletions(-) diff --git a/Data/Map019.rxdata b/Data/Map019.rxdata index fa2420e80cad290e90b6e034a72f35809bdfe95b..779dc29e5903a4bc6e39dffcf5742c9d0902897e 100644 GIT binary patch delta 128 zcmaFW#{8;{dBg5biAomiaPs{Qqsf^Qc_#nu<=8CQ^+9ZM_B5Hv7dSX3zh7)J*>|bH zQM delta 117 zcmaFW#{8;{dBg5bi8MXzaPs{Qqsf^Qc_#nu<=8CQ^+Ak{O%4PnALNjm{C=^?WZ$I% zljkpFn;g58Yjfj54soV-#?9S3wlFfi;M(lC>kbpkORiU3n-%xQFfj>mZ?50}ni&8` CTP*qj diff --git a/Data/Map042.rxdata b/Data/Map042.rxdata index d30d41dfcfe51a941108b478111a57074ae271b6..a0fd00e73d5fde08bb691ab4f767b154d053b81a 100644 GIT binary patch literal 43101 zcmeHQ33waFbp~LTghbtkt<_;I0a5}bO5tH!5>UsaXwhOV%ZxG{9eo!!~p zSpozh`S`>ou#2~|GjHC!dGqGIH?ti{E4%UB)E(LET}F9JcHQXg!lISk&LLyg^+l7h?E2A?v1m@FwoDntqFK|Yt))_Dw)50U%5LVlog&D3N@OgU)%!cG>`o7!%}xQjExUPi(Yk2P)RxO8i=n6@tJd!Cva;8E zNyn|lMWd8YX15@x3Q(z;mFoRTmcbE2$*hz|LHy}CD{rzNvU1y!x$XDIaywWow-Yxu zkIq@8JgYIQWMy?PXB&xZc3j-ul-)jBU7|V-&s;Q$EI*OmFKyCL zt)B)qHf(5yFm}~HyzJthxgk-L6kHsO3Jf} zIY+gbnP(49025BbidCQpbVa+xrl068mW*)(d? z*^Q&M3R_q(D?l6=)XegXQDTcov%@ZLzG6O5H%oKNEQ!Pm6{B2Wb5{1oFn#Z^?`=Rb zt8C1%+A@p(AF`P%pgrf%oHI6uB?pI2aN2G}OVGu`wWmPEiTsQ9QWJ4k~>%y-c&M)HL>m%>n5P4@;ci+lSfayO#b{S!GIr z-^L}7&8an)YE+?4NFD|6KG%gBN81x>@pm{?k)>MvF%|GVD&YH6zz?W^A5;N9qyl~< z1a#>wdO;`1A8G<2?=a%H>=IxdN3sWr@J!L>GM?nOCFN9#{X#5XUz&}y} zzor8Ii3<4j5HLi00f4mjDUpe{yW`?yN~@Z+X>+lBo~w#?mollbRKL`h5_2LkWoLKn z2;s0Nw`Y3Q!XeqBaLBDoZ8~i&ntC4ENA4KgoIB3;)y!4Pjd)HQ%0Tv@`c6P1v~+hi)n>39?v1Z5l~p)2M{nc8}Hy+#!|!xjoP{?swH z$*Iv!hB05#&{kEWM9+0l(>YBdeFUP3)O9ottxW#d zTFFle^2l+A?z=$uz2Kz7Y>$GIpo{U&)H#_teA=v-1A4)@XzGSOWnC~At&%=hu&QQB zH)?tXGd*kZsMMKW={(%c_Tz}LF4oBsTkmr^)(?AG_mpSH@_8rA$=fsK**nZyX84x= zftv>#^-gchmdM-ba>2AbaJNd@?I-UYFPfDLGxO%6Q8b(8b3PLpb_l&6gwBG{d)O8Q zp_}ZoUd4PGNvjoWzRM=>HZC|7iJ>Alpdwq?0YybnIl(cz&zQA?ReizIYnDE4R_aC5 zDD@~9r0f2!$yD<0I!4d+)3`comFNmuk}ZQTIC)~Q8%?|-?m!c77P30YvN*)hE361f zHi;t$B}KB6ZD;Fn7DGl{D3Sso#t?AqXksQ@U@)B+ED~=KC<#b}=xuX5CI^QHIbEBP zzP$U7@Z`4GJ%h$Pzy=hJne-a7r%qj8pM`}%U##g>R=j9dbXL`CmAc&{?6wk}KFJbq zy^enbDMY)7-&cn;>jsAgtE;08w`5?DT?a-d+6=I6hc?1!FzzxWl=R-->59QhX60z9 zzBp^-VKRI1twXoy2M*}-MzJarN2ux`&cg}*A!3kLC5S`pc@DFjea*0^pk(4_1lxJ) z;PXu3PdrAwj3^;%{E7D|p&w8}Kd6L$ND2Lj68bSE^l}&~TCJ^Cjev5U_f1Jg)%`}e3aIWkmC(ObLjPI`{aYpUTT1A+!_W{JyIf;K zBP$25q2J0uAitHv*B(jq`b6zIcVH6of}}#?U_z1$WNh>eTLcipmcZGQ3q0exoiU~K zWt@>SP6jh3fSfTs9?1BjoiU~KW&9F3<8{G|2_R=oj|VcY+8I+yU&fCl*k)Hmt`BBR z06AlN+{@UOu$$S9peZQ_%{}f;B8j$2%zY`8MDwLkwwIg2V=}cdi$l3Z%g1D*;pN)X zB-Wb)Q;HR*wTW*;Orchul&sO}g#p&q8XcSaJv2?+bm~D?^V{2PN~YPu6EM!vnTU6ppKY zookMcV&d9{kY1lWxTqH`>jJri=B)~*#OEKVvr4UKiYYMlOrZ_8P(t6mMyWuXkyqv{l{jPc*Za-lHmW#0`Qumo$;hju%owW#mK98bgzIhaw L?j{=q&=uogQ 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 literal 43215 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 diff --git a/Data/MapInfos.rxdata b/Data/MapInfos.rxdata index acef2167ba04837269528cc371c4de0deab21d25..261f212050bdc6e145b49a0e833c9d6f13b6079f 100644 GIT binary patch delta 3641 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 delta 3607 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 [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 b8fb1db6c2035b616c94b942a372e310573f06ca..2d9042c0cc4d8a0348ab3f8e27c9a78b248a1a42 100644 GIT binary patch delta 26 icmX?ejq%Ji#tk#YSmY=8vuvI#)*i?xu~{`kof!a?=Lu~9 delta 26 icmX?ejq%Ji#tk#YSaizxm^RN9YY$`$+^m|R&I|yO-w9R#