diff --git a/Data/Scripts/005_Map renderer/005_TileDrawingHelper.rb b/Data/Scripts/005_Map renderer/005_TileDrawingHelper.rb index b881a1fe5..51d399ee6 100644 --- a/Data/Scripts/005_Map renderer/005_TileDrawingHelper.rb +++ b/Data/Scripts/005_Map renderer/005_TileDrawingHelper.rb @@ -134,3 +134,61 @@ class TileDrawingHelper end end end + +#=============================================================================== +# +#=============================================================================== +# Unused +def createMinimap2(mapid) + map=load_data(sprintf("Data/Map%03d.rxdata",mapid)) rescue nil + return BitmapWrapper.new(32,32) if !map + bitmap=BitmapWrapper.new(map.width*4,map.height*4) + black=Color.new(0,0,0) + bigmap=(map.width>40 && map.height>40) + tilesets=load_data("Data/Tilesets.rxdata") + tileset=tilesets[map.tileset_id] + return bitmap if !tileset + helper=TileDrawingHelper.fromTileset(tileset) + for y in 0...map.height + for x in 0...map.width + if bigmap + next if (x>8 && x<=map.width-8 && y>8 && y<=map.height-8) + end + for z in 0..2 + id=map.data[x,y,z] + next if id==0 || !id + helper.bltSmallTile(bitmap,x*4,y*4,4,4,id) + end + end + end + bitmap.fill_rect(0,0,bitmap.width,1,black) + bitmap.fill_rect(0,bitmap.height-1,bitmap.width,1,black) + bitmap.fill_rect(0,0,1,bitmap.height,black) + bitmap.fill_rect(bitmap.width-1,0,1,bitmap.height,black) + return bitmap +end + +def createMinimap(mapid) + map=load_data(sprintf("Data/Map%03d.rxdata",mapid)) rescue nil + return BitmapWrapper.new(32,32) if !map + bitmap=BitmapWrapper.new(map.width*4,map.height*4) + black=Color.new(0,0,0) + tilesets=load_data("Data/Tilesets.rxdata") + tileset=tilesets[map.tileset_id] + return bitmap if !tileset + helper=TileDrawingHelper.fromTileset(tileset) + for y in 0...map.height + for x in 0...map.width + for z in 0..2 + id=map.data[x,y,z] + id=0 if !id + helper.bltSmallTile(bitmap,x*4,y*4,4,4,id) + end + end + end + bitmap.fill_rect(0,0,bitmap.width,1,black) + bitmap.fill_rect(0,bitmap.height-1,bitmap.width,1,black) + bitmap.fill_rect(0,0,1,bitmap.height,black) + bitmap.fill_rect(bitmap.width-1,0,1,bitmap.height,black) + return bitmap +end diff --git a/Data/Scripts/011_Data/001_Game data/003_Item.rb b/Data/Scripts/011_Data/001_Game data/003_Item.rb index 781bd94ca..70def4823 100644 --- a/Data/Scripts/011_Data/001_Game data/003_Item.rb +++ b/Data/Scripts/011_Data/001_Game data/003_Item.rb @@ -18,6 +18,49 @@ module GameData extend ClassMethods include InstanceMethods + def self.icon_filename(item) + return "Graphics/Icons/itemBack" if item.nil? + item_data = self.try_get(item) + return "Graphics/Icons/item000" if item_data.nil? + # Check for files + ret = sprintf("Graphics/Icons/item%s", item_data.id) + return ret if pbResolveBitmap(ret) + ret = sprintf("Graphics/Icons/item%03d", item_data.id_number) + return ret if pbResolveBitmap(ret) + # Check for TM/HM type icons + if item_data.is_machine? + move_type = GameData::Move.get(item_data.move).type + type_data = GameData::Type.get(move_type) + ret = sprintf("Graphics/Icons/itemMachine%s", type_data.id) + return ret if pbResolveBitmap(ret) + ret = sprintf("Graphics/Icons/itemMachine%03d", type_data.id_number) + return ret if pbResolveBitmap(ret) + end + return "Graphics/Icons/item000" + end + + def self.held_icon_filename(item) + item_data = self.try_get(item) + return nil if !item_data + name_base = (item_data.is_mail?) ? "mail" : "item" + # Check for files + ret = sprintf("Graphics/Pictures/Party/icon_%s_%s", name_base, item_data.id) + return ret if pbResolveBitmap(ret) + ret = sprintf("Graphics/Pictures/Party/icon_%s_%03d", name_base, item_data.id_number) + return ret if pbResolveBitmap(ret) + return sprintf("Graphics/Pictures/Party/icon_%s", name_base) + end + + def self.mail_filename(item) + item_data = self.try_get(item) + return nil if !item_data + # Check for files + ret = sprintf("Graphics/Pictures/Mail/mail_%s", item_data.id) + return ret if pbResolveBitmap(ret) + ret = sprintf("Graphics/Pictures/Mail/mail_%03d", item_data.id_number) + return pbResolveBitmap(ret) ? ret : nil + end + def initialize(hash) @id = hash[:id] @id_number = hash[:id_number] || -1 @@ -230,3 +273,18 @@ def pbIsUnlosableItem?(check_item, species, ability) Deprecation.warn_method('pbIsUnlosableItem?', 'v20', 'GameData::Item.get(item).unlosable?') return GameData::Item.get(check_item).unlosable?(species, ability) end + +def pbItemIconFile(item) + Deprecation.warn_method('pbItemIconFile', 'v20', 'GameData::Item.icon_filename(item)') + return GameData::Item.icon_filename(item) +end + +def pbHeldItemIconFile(item) + Deprecation.warn_method('pbHeldItemIconFile', 'v20', 'GameData::Item.held_icon_filename(item)') + return GameData::Item.held_icon_filename(item) +end + +def pbMailBackFile(item) + Deprecation.warn_method('pbMailBackFile', 'v20', 'GameData::Item.mail_filename(item)') + return GameData::Item.mail_filename(item) +end diff --git a/Data/Scripts/011_Data/001_Game data/007_Move.rb b/Data/Scripts/011_Data/001_Game data/007_Move.rb index d2cea2f25..32f8f42f2 100644 --- a/Data/Scripts/011_Data/001_Game data/007_Move.rb +++ b/Data/Scripts/011_Data/001_Game data/007_Move.rb @@ -48,6 +48,18 @@ module GameData return pbGetMessage(MessageTypes::MoveDescriptions, @id_number) end + def physical? + return false if @base_damage == 0 + return @category == 0 if MOVE_CATEGORY_PER_MOVE + return GameData::Type.get(@type).physical? + end + + def special? + return false if @base_damage == 0 + return @category == 1 if MOVE_CATEGORY_PER_MOVE + return GameData::Type.get(@type).special? + end + def hidden_move? GameData::Item.each do |i| return true if i.is_HM? && i.move == @id diff --git a/Data/Scripts/011_Data/001_Game data/008_Trainer type.rb b/Data/Scripts/011_Data/001_Game data/008_Trainer type.rb index 293f7a626..581efc1b8 100644 --- a/Data/Scripts/011_Data/001_Game data/008_Trainer type.rb +++ b/Data/Scripts/011_Data/001_Game data/008_Trainer type.rb @@ -17,6 +17,59 @@ module GameData extend ClassMethods include InstanceMethods + def self.check_file(tr_type, path, suffix = "") + tr_type_data = self.try_get(tr_type) + return nil if tr_type_data.nil? + # Check for files + if !suffix.empty? + ret = path + tr_type_data.id.to_s + suffix + return ret if pbResolveBitmap(ret) + ret = path + sprintf("%03d", tr_type_data.id_number) + suffix + return ret if pbResolveBitmap(ret) + end + ret = path + tr_type_data.id.to_s + return ret if pbResolveBitmap(ret) + ret = path + sprintf("%03d", tr_type_data.id_number) + return (pbResolveBitmap(ret)) ? ret : nil + end + + def self.charset_filename(tr_type) + return self.check_file(tr_type, "Graphics/Characters/trchar") + end + + def self.charset_filename_brief(tr_type) + ret = self.charset_filename(tr_type) + ret.slice!("Graphics/Characters/") if ret + return ret + end + + def self.front_sprite_filename(tr_type) + return self.check_file(tr_type, "Graphics/Trainers/trainer") + end + + def self.player_front_sprite_filename(tr_type) + outfit = ($Trainer) ? $Trainer.outfit : 0 + return self.check_file(tr_type, "Graphics/Trainers/trainer", sprintf("_%d", outfit)) + end + + def self.back_sprite_filename(tr_type) + return self.check_file(tr_type, "Graphics/Trainers/trback") + end + + def self.player_back_sprite_filename(tr_type) + outfit = ($Trainer) ? $Trainer.outfit : 0 + return self.check_file(tr_type, "Graphics/Trainers/trback", sprintf("_%d", outfit)) + end + + def self.map_icon_filename(tr_type) + return self.check_file(tr_type, "Graphics/Pictures/mapPlayer") + end + + def self.player_map_icon_filename(tr_type) + outfit = ($Trainer) ? $Trainer.outfit : 0 + return self.check_file(tr_type, "Graphics/Pictures/mapPlayer", sprintf("_%d", outfit)) + end + def initialize(hash) @id = hash[:id] @id_number = hash[:id_number] || -1 @@ -43,7 +96,47 @@ end #=============================================================================== # Deprecated methods #=============================================================================== -def pbGetTrainerTypeData(trainer_type) +def pbGetTrainerTypeData(tr_type) Deprecation.warn_method('pbGetTrainerTypeData', 'v20', 'GameData::TrainerType.get(trainer_type)') - return GameData::TrainerType.get(trainer_type) + return GameData::TrainerType.get(tr_type) +end + +def pbTrainerCharFile(tr_type) # Used by the phone + Deprecation.warn_method('pbTrainerCharFile', 'v20', 'GameData::TrainerType.charset_filename(trainer_type)') + return GameData::TrainerType.charset_filename(tr_type) +end + +def pbTrainerCharNameFile(tr_type) # Used by Battle Frontier and compiler + Deprecation.warn_method('pbTrainerCharNameFile', 'v20', 'GameData::TrainerType.charset_filename_brief(trainer_type)') + return GameData::TrainerType.charset_filename_brief(tr_type) +end + +def pbTrainerSpriteFile(tr_type) + Deprecation.warn_method('pbTrainerSpriteFile', 'v20', 'GameData::TrainerType.front_sprite_filename(trainer_type)') + return GameData::TrainerType.front_sprite_filename(tr_type) +end + +def pbTrainerSpriteBackFile(tr_type) + Deprecation.warn_method('pbTrainerSpriteBackFile', 'v20', 'GameData::TrainerType.back_sprite_filename(trainer_type)') + return GameData::TrainerType.back_sprite_filename(tr_type) +end + +def pbPlayerSpriteFile(tr_type) + Deprecation.warn_method('pbPlayerSpriteFile', 'v20', 'GameData::TrainerType.player_front_sprite_filename(trainer_type)') + return GameData::TrainerType.player_front_sprite_filename(tr_type) +end + +def pbPlayerSpriteBackFile(tr_type) + Deprecation.warn_method('pbPlayerSpriteBackFile', 'v20', 'GameData::TrainerType.player_back_sprite_filename(trainer_type)') + return GameData::TrainerType.player_back_sprite_filename(tr_type) +end + +def pbTrainerHeadFile(tr_type) + Deprecation.warn_method('pbTrainerHeadFile', 'v20', 'GameData::TrainerType.map_icon_filename(trainer_type)') + return GameData::TrainerType.map_icon_filename(tr_type) +end + +def pbPlayerHeadFile(tr_type) + Deprecation.warn_method('pbPlayerHeadFile', 'v20', 'GameData::TrainerType.player_map_icon_filename(trainer_type)') + return GameData::TrainerType.player_map_icon_filename(tr_type) end diff --git a/Data/Scripts/011_Data/004_PBTypes_Extra.rb b/Data/Scripts/011_Data/004_PBTypes_Extra.rb index 3559a3599..792dea3da 100644 --- a/Data/Scripts/011_Data/004_PBTypes_Extra.rb +++ b/Data/Scripts/011_Data/004_PBTypes_Extra.rb @@ -35,17 +35,9 @@ class PBTypes return ret end - def PBTypes.isPseudoType?(type) - return GameData::Type.get(type).pseudo_type - end - - def PBTypes.isPhysicalType?(type) - return GameData::Type.get(type).physical? - end - - def PBTypes.isSpecialType?(type) - return GameData::Type.get(type).special? - end + def PBTypes.isPhysicalType?(type); return GameData::Type.get(type).physical?; end + def PBTypes.isSpecialType?(type); return GameData::Type.get(type).special?; end + def PBTypes.isPseudoType?(type); return GameData::Type.get(type).pseudo_type; end def PBTypes.getEffectiveness(attack_type, target_type) return GameData::Type.get(target_type).effectiveness(attack_type) diff --git a/Data/Scripts/012_Battle/005_Battle scene/007_Scene_Initialize.rb b/Data/Scripts/012_Battle/005_Battle scene/007_Scene_Initialize.rb index 0367f76f5..063baf54a 100644 --- a/Data/Scripts/012_Battle/005_Battle scene/007_Scene_Initialize.rb +++ b/Data/Scripts/012_Battle/005_Battle scene/007_Scene_Initialize.rb @@ -152,9 +152,9 @@ class PokeBattle_Scene def pbCreateTrainerBackSprite(idxTrainer,trainerType,numTrainers=1) if idxTrainer==0 # Player's sprite - trainerFile = pbPlayerSpriteBackFile(trainerType) + trainerFile = GameData::TrainerType.player_back_sprite_filename(trainerType) else # Partner trainer's sprite - trainerFile = pbTrainerSpriteBackFile(trainerType) + trainerFile = GameData::TrainerType.back_sprite_filename(trainerType) end spriteX, spriteY = PokeBattle_SceneConstants.pbTrainerPosition(0,idxTrainer,numTrainers) trainer = pbAddSprite("player_#{idxTrainer+1}",spriteX,spriteY,trainerFile,@viewport) @@ -170,7 +170,7 @@ class PokeBattle_Scene end def pbCreateTrainerFrontSprite(idxTrainer,trainerType,numTrainers=1) - trainerFile = pbTrainerSpriteFile(trainerType) + trainerFile = GameData::TrainerType.front_sprite_filename(trainerType) spriteX, spriteY = PokeBattle_SceneConstants.pbTrainerPosition(1,idxTrainer,numTrainers) trainer = pbAddSprite("trainer_#{idxTrainer+1}",spriteX,spriteY,trainerFile,@viewport) return if !trainer.bitmap diff --git a/Data/Scripts/012_Battle/008_BattleHandlers_Items.rb b/Data/Scripts/012_Battle/008_BattleHandlers_Items.rb index 3b768b680..ac74681da 100644 --- a/Data/Scripts/012_Battle/008_BattleHandlers_Items.rb +++ b/Data/Scripts/012_Battle/008_BattleHandlers_Items.rb @@ -863,7 +863,7 @@ BattleHandlers::DamageCalcTargetItem.add(:EVIOLITE, # means it also cares about the Pokémon's form. Some forms cannot # evolve even if the species generally can, and such forms are not # affected by Eviolite. - evos = pbGetEvolvedFormData(target.pokemon.fSpecies,true) + evos = EvolutionHelper.evolutions(target.pokemon.fSpecies, true) mults[DEF_MULT] *= 1.5 if evos && evos.length>0 } ) diff --git a/Data/Scripts/012_Battle/009_PokeBall_CatchEffects.rb b/Data/Scripts/012_Battle/009_PokeBall_CatchEffects.rb index 5a4732b70..da06c2a51 100644 --- a/Data/Scripts/012_Battle/009_PokeBall_CatchEffects.rb +++ b/Data/Scripts/012_Battle/009_PokeBall_CatchEffects.rb @@ -203,10 +203,10 @@ BallHandlers::ModifyCatchRate.add(:MOONBALL,proc { |ball,catchRate,battle,battle # family can evolve with the Moon Stone, not whether the target itself # can immediately evolve with the Moon Stone. moon_stone = GameData::Item.try_get(:MOONSTONE) - if moon_stone && pbCheckEvolutionFamilyForItemMethodItem(battler.species, moon_stone.id) + if moon_stone && EvolutionHelper.check_family_for_method_item(battler.species, moon_stone.id) catchRate *= 4 end - next [catchRate,255].min + next [catchRate, 255].min }) BallHandlers::ModifyCatchRate.add(:SPORTBALL,proc { |ball,catchRate,battle,battler,ultraBeast| diff --git a/Data/Scripts/013_Overworld/013_PField_DayCare.rb b/Data/Scripts/013_Overworld/013_PField_DayCare.rb index 6436cf136..7340cadaa 100644 --- a/Data/Scripts/013_Overworld/013_PField_DayCare.rb +++ b/Data/Scripts/013_Overworld/013_PField_DayCare.rb @@ -192,7 +192,7 @@ def pbDayCareGenerateEgg father = pokemon0 end # Determine the egg's species - babyspecies = pbGetBabySpecies(babyspecies,true,mother.item_id,father.item_id) + babyspecies = EvolutionHelper.baby_species(babyspecies, true, mother.item_id, father.item_id) if isConst?(babyspecies,PBSpecies,:MANAPHY) && hasConst?(PBSpecies,:PHIONE) babyspecies = getConst(PBSpecies,:PHIONE) elsif (isConst?(babyspecies,PBSpecies,:NIDORANfE) && hasConst?(PBSpecies,:NIDORANmA)) || @@ -233,7 +233,7 @@ def pbDayCareGenerateEgg isConst?(babyspecies,PBSpecies,:GRIMER) if mother.form==1 egg.form = 1 if mother.hasItem?(:EVERSTONE) - elsif pbGetBabySpecies(father.species,true,mother.item_id,father.item_id)==babyspecies + elsif EvolutionHelper.baby_species(father.species, true, mother.item_id, father.item_id) == babyspecies egg.form = 1 if father.form==1 && father.hasItem?(:EVERSTONE) end end diff --git a/Data/Scripts/015_Items/006_PItem_Mail.rb b/Data/Scripts/015_Items/006_PItem_Mail.rb index 93cdd7b2b..3eab27865 100644 --- a/Data/Scripts/015_Items/006_PItem_Mail.rb +++ b/Data/Scripts/015_Items/006_PItem_Mail.rb @@ -35,7 +35,7 @@ def pbDisplayMail(mail,_bearer=nil) viewport.z = 99999 addBackgroundPlane(sprites,"background","mailbg",viewport) sprites["card"] = IconSprite.new(0,0,viewport) - sprites["card"].setBitmap(pbMailBackFile(mail.item)) + sprites["card"].setBitmap(GameData::Item.mail_filename(mail.item)) sprites["overlay"] = BitmapSprite.new(Graphics.width,Graphics.height,viewport) overlay = sprites["overlay"].bitmap pbSetSystemFont(overlay) diff --git a/Data/Scripts/015_Items/007_PItem_Sprites.rb b/Data/Scripts/015_Items/007_PItem_Sprites.rb index 2277adb32..0693d6ec3 100644 --- a/Data/Scripts/015_Items/007_PItem_Sprites.rb +++ b/Data/Scripts/015_Items/007_PItem_Sprites.rb @@ -72,7 +72,7 @@ class ItemIconSprite < SpriteWrapper @animbitmap.dispose if @animbitmap @animbitmap = nil if @item || !@blankzero - @animbitmap = AnimatedBitmap.new(pbItemIconFile(@item)) + @animbitmap = AnimatedBitmap.new(GameData::Item.icon_filename(@item)) self.bitmap = @animbitmap.bitmap if self.bitmap.height==ANIM_ICON_SIZE @numframes = [(self.bitmap.width/ANIM_ICON_SIZE).floor,1].max @@ -140,7 +140,7 @@ class HeldItemIconSprite < SpriteWrapper @animbitmap.dispose if @animbitmap @animbitmap = nil if @item - @animbitmap = AnimatedBitmap.new(pbHeldItemIconFile(@item)) + @animbitmap = AnimatedBitmap.new(GameData::Item.held_icon_filename(@item)) self.bitmap = @animbitmap.bitmap else self.bitmap = nil diff --git a/Data/Scripts/016_Pokemon/005_Pokemon_Evolution.rb b/Data/Scripts/016_Pokemon/005_Pokemon_Evolution.rb index d905b6e54..dcaca71b7 100644 --- a/Data/Scripts/016_Pokemon/005_Pokemon_Evolution.rb +++ b/Data/Scripts/016_Pokemon/005_Pokemon_Evolution.rb @@ -128,114 +128,141 @@ end #=============================================================================== # Evolution helper functions #=============================================================================== -def pbGetEvolvedFormData(species,ignoreNone=false) - ret = [] - evoData = pbGetEvolutionData(species) - return ret if !evoData || evoData.length==0 - evoData.each do |evo| - next if evo[3] # Is the prevolution - next if evo[1]==PBEvolution::None && ignoreNone - ret.push([evo[1],evo[2],evo[0]]) # [Method, parameter, species] +module EvolutionHelper + module_function + + def evolutions(species, ignore_none = false) + ret = [] + evoData = pbGetEvolutionData(species) + return ret if !evoData || evoData.length == 0 + evoData.each do |evo| + next if evo[3] # Is the prevolution + next if evo[1] == PBEvolution::None && ignore_none + ret.push([evo[1], evo[2], evo[0]]) # [Method, parameter, species] + end + return ret end - return ret + + def family_evolutions(species) + evos = self.evolutions(species, true) + return nil if evos.length == 0 + ret = [] + for i in 0...evos.length + ret.push([species].concat(evos[i])) + evo_array = self.family_evolutions(evos[i][2]) + ret.concat(evo_array) if evo_array && evo_array.length > 0 + end + return ret + end + + def previous_species(species) + evoData = pbGetEvolutionData(species) + return species if !evoData || evoData.length == 0 + evoData.each do |evo| + return evo[0] if evo[3] # Is the prevolution + end + return species + end + + def baby_species(species, check_items = false, item1 = nil, item2 = nil) + ret = species + evoData = pbGetEvolutionData(species) + return ret if !evoData || evoData.length == 0 + evoData.each do |evo| + next if !evo[3] # Not the prevolution + if check_items + incense = pbGetSpeciesData(evo[0], 0, SpeciesData::INCENSE) + ret = evo[0] if !incense || item1 == incense || item2 == incense + else + ret = evo[0] # Species of prevolution + end + break + end + ret = self.baby_species(ret, item1, item2) if ret != species + return ret + end + + def minimum_level(species) + evoData = pbGetEvolutionData(species) + return 1 if !evoData || evoData.length == 0 + ret = -1 + evoData.each do |evo| + next if !evo[3] # Is the prevolution + if PBEvolution.hasFunction?(evo[1], "levelUpCheck") + min_level = PBEvolution.getFunction(evo[1], "minimumLevel") + ret = evo[2] if !min_level || min_level != 1 + end + break # Because only one prevolution method can be defined + end + return (ret == -1) ? 1 : ret + end + + def check_family_for_method(species, method, param = nil) + species = self.baby_species(species) + evos = self.family_evolutions(species) + return false if !evos || evos.length == 0 + for evo in evos + if method.is_a?(Array) + next if !method.include?(evo[0]) + elsif method >= 0 + next if evo[0] != method + end + next if param && evo[1] != param + return true + end + return false + end + + def check_family_for_method_item(species, param = nil) + species = self.baby_species(species) + evos = self.family_evolutions(species) + return false if !evos || evos.length == 0 + for evo in evos + next if !PBEvolution.hasFunction?(evo[1], "itemCheck") + next if param && evo[2] != param + return true + end + return false + end +end + + + +def pbGetEvolvedFormData(species, ignore_none = false) + Deprecation.warn_method('pbGetEvolvedFormData', 'v20', 'EvolutionHelper.evolutions(species)') + return EvolutionHelper.evolutions(species, ignore_none) +end + +def pbGetEvolutionFamilyData(species) # Unused + Deprecation.warn_method('pbGetEvolutionFamilyData', 'v20', 'EvolutionHelper.family_evolutions(species)') + return EvolutionHelper.family_evolutions(species, ignore_none) end def pbGetPreviousForm(species) # Unused - evoData = pbGetEvolutionData(species) - return species if !evoData || evoData.length==0 - evoData.each do |evo| - return evo[0] if evo[3] # Is the prevolution - end - return species + Deprecation.warn_method('pbGetPreviousForm', 'v20', 'EvolutionHelper.previous_species(species)') + return EvolutionHelper.previous_species(species) end def pbGetBabySpecies(species, check_items = false, item1 = nil, item2 = nil) - ret = species - evoData = pbGetEvolutionData(species) - return ret if !evoData || evoData.length == 0 - evoData.each do |evo| - next if !evo[3] # Not the prevolution - if check_items - incense = pbGetSpeciesData(evo[0], 0, SpeciesData::INCENSE) - ret = evo[0] if !incense || item1 == incense || item2 == incense - else - ret = evo[0] # Species of prevolution - end - break - end - ret = pbGetBabySpecies(ret, item1, item2) if ret != species - return ret + Deprecation.warn_method('pbGetBabySpecies', 'v20', 'EvolutionHelper.baby_species(species)') + return EvolutionHelper.baby_species(species, check_items, item1, item2) end def pbGetMinimumLevel(species) - evoData = pbGetEvolutionData(species) - return 1 if !evoData || evoData.length == 0 - ret = -1 - evoData.each do |evo| - next if !evo[3] # Is the prevolution - if PBEvolution.hasFunction?(evo[1], "levelUpCheck") - min_level = PBEvolution.getFunction(evo[1], "minimumLevel") - ret = evo[2] if !min_level || min_level != 1 - end - break # Because only one prevolution method can be defined - end - return (ret == -1) ? 1 : ret + Deprecation.warn_method('pbGetMinimumLevel', 'v20', 'EvolutionHelper.minimum_level(species)') + return EvolutionHelper.minimum_level(species) end -def pbGetEvolutionFamilyData(species) - evos = pbGetEvolvedFormData(species,true) - return nil if evos.length==0 - ret = [] - for i in 0...evos.length - ret.push([species].concat(evos[i])) - evoData = pbGetEvolutionFamilyData(evos[i][2]) - ret.concat(evoData) if evoData && evoData.length>0 - end - return ret -end - -def pbCheckEvolutionFamilyForMethod(species, method, param = -1) - species = pbGetBabySpecies(species) - evos = pbGetEvolutionFamilyData(species) - return false if !evos || evos.length == 0 - for evo in evos - if method.is_a?(Array) - next if !method.include?(evo[1]) - elsif method >= 0 - next if evo[1] != method - end - next if param >= 0 && evo[2] != param - return true - end - return false +def pbCheckEvolutionFamilyForMethod(species, method, param = nil) + Deprecation.warn_method('pbCheckEvolutionFamilyForMethod', 'v20', 'EvolutionHelper.check_family_for_method(species, method)') + return EvolutionHelper.check_family_for_method(species, method, param) end # Used by the Moon Ball when checking if a Pokémon's evolution family includes # an evolution that uses the Moon Stone. def pbCheckEvolutionFamilyForItemMethodItem(species, param = nil) - species = pbGetBabySpecies(species) - evos = pbGetEvolutionFamilyData(species) - return false if !evos || evos.length == 0 - for evo in evos - next if !PBEvolution.hasFunction?(evo[1], "itemCheck") - next if param && evo[2] != param - return true - end - return false -end - -def pbEvoDebug # Unused - evosData = pbLoadEvolutionsData - for species in 1..PBSpecies.maxValueF - echo PBSpecies.getName(pbGetSpeciesFromFSpecies(species)[0])+"\n" - next if !evosData[species] || evosData[species].length==0 - for evo in evosData[species] - echo sprintf("name=%s, type=%s (%02X), level=%d, evo/prevo=%s", - PBSpecies.getName(evo[0]),getConstantName(PBEvolution,evo[1]),evo[1],evo[2], - (evo[3]) ? "prevolution" : "evolution")+"\n" - end - end - echo "end\n" + Deprecation.warn_method('pbCheckEvolutionFamilyForItemMethodItem', 'v20', 'EvolutionHelper.check_family_for_method_item(species, item)') + return EvolutionHelper.check_family_for_method_item(species, param) end #=============================================================================== @@ -253,13 +280,13 @@ end # Checks whether a Pokemon can evolve now. If a block is given, calls the block # with the following parameters: -# Pokemon to check; evolution type; level or other parameter; ID of the new species +# Pokemon to check; evolution method; parameter; ID of the new species def pbCheckEvolutionEx(pokemon) return -1 if pokemon.species<=0 || pokemon.egg? || pokemon.shadowPokemon? return -1 if pokemon.hasItem?(:EVERSTONE) return -1 if pokemon.hasAbility?(:BATTLEBOND) ret = -1 - for form in pbGetEvolvedFormData(pbGetFSpeciesFromForm(pokemon.species,pokemon.form),true) + for form in EvolutionHelper.evolutions(pbGetFSpeciesFromForm(pokemon.species,pokemon.form), true) ret = yield pokemon,form[0],form[1],form[2] break if ret>0 end diff --git a/Data/Scripts/017_UI/005_PScreen_Party.rb b/Data/Scripts/017_UI/005_PScreen_Party.rb index 2ff8a1e21..486c2c298 100644 --- a/Data/Scripts/017_UI/005_PScreen_Party.rb +++ b/Data/Scripts/017_UI/005_PScreen_Party.rb @@ -1326,6 +1326,9 @@ end +#=============================================================================== +# Open the party screen +#=============================================================================== def pbPokemonScreen pbFadeOutIn { sscene = PokemonParty_Scene.new @@ -1333,3 +1336,67 @@ def pbPokemonScreen sscreen.pbPokemonScreen } end + +#=============================================================================== +# Choose a Pokémon in the party +#=============================================================================== +# Choose a Pokémon/egg from the party. +# Stores result in variable _variableNumber_ and the chosen Pokémon's name in +# variable _nameVarNumber_; result is -1 if no Pokémon was chosen +def pbChoosePokemon(variableNumber,nameVarNumber,ableProc=nil,allowIneligible=false) + chosen = 0 + pbFadeOutIn { + scene = PokemonParty_Scene.new + screen = PokemonPartyScreen.new(scene,$Trainer.party) + if ableProc + chosen=screen.pbChooseAblePokemon(ableProc,allowIneligible) + else + screen.pbStartScene(_INTL("Choose a Pokémon."),false) + chosen = screen.pbChoosePokemon + screen.pbEndScene + end + } + pbSet(variableNumber,chosen) + if chosen>=0 + pbSet(nameVarNumber,$Trainer.party[chosen].name) + else + pbSet(nameVarNumber,"") + end +end + +def pbChooseNonEggPokemon(variableNumber,nameVarNumber) + pbChoosePokemon(variableNumber,nameVarNumber,proc { |pkmn| !pkmn.egg? }) +end + +def pbChooseAblePokemon(variableNumber,nameVarNumber) + pbChoosePokemon(variableNumber,nameVarNumber,proc { |pkmn| !pkmn.egg? && pkmn.hp>0 }) +end + +# Same as pbChoosePokemon, but prevents choosing an egg or a Shadow Pokémon. +def pbChooseTradablePokemon(variableNumber,nameVarNumber,ableProc=nil,allowIneligible=false) + chosen = 0 + pbFadeOutIn { + scene = PokemonParty_Scene.new + screen = PokemonPartyScreen.new(scene,$Trainer.party) + if ableProc + chosen=screen.pbChooseTradablePokemon(ableProc,allowIneligible) + else + screen.pbStartScene(_INTL("Choose a Pokémon."),false) + chosen = screen.pbChoosePokemon + screen.pbEndScene + end + } + pbSet(variableNumber,chosen) + if chosen>=0 + pbSet(nameVarNumber,$Trainer.party[chosen].name) + else + pbSet(nameVarNumber,"") + end +end + +def pbChoosePokemonForTrade(variableNumber,nameVarNumber,wanted) + wanted = getID(PBSpecies,wanted) + pbChooseTradablePokemon(variableNumber,nameVarNumber,proc { |pkmn| + next pkmn.species==wanted + }) +end diff --git a/Data/Scripts/017_UI/006_PScreen_Summary.rb b/Data/Scripts/017_UI/006_PScreen_Summary.rb index e776492d3..f74c5e669 100644 --- a/Data/Scripts/017_UI/006_PScreen_Summary.rb +++ b/Data/Scripts/017_UI/006_PScreen_Summary.rb @@ -1346,3 +1346,25 @@ class PokemonSummaryScreen return ret end end + + + +#=============================================================================== +# +#=============================================================================== +def pbChooseMove(pokemon,variableNumber,nameVarNumber) + return if !pokemon + ret = -1 + pbFadeOutIn { + scene = PokemonSummary_Scene.new + screen = PokemonSummaryScreen.new(scene) + ret = screen.pbStartForgetScreen([pokemon],0,nil) + } + $game_variables[variableNumber] = ret + if ret>=0 + $game_variables[nameVarNumber] = pokemon.moves[ret].name + else + $game_variables[nameVarNumber] = "" + end + $game_map.need_refresh = true if $game_map +end diff --git a/Data/Scripts/017_UI/009_PScreen_RegionMap.rb b/Data/Scripts/017_UI/009_PScreen_RegionMap.rb index 3d1764057..27f9d558c 100644 --- a/Data/Scripts/017_UI/009_PScreen_RegionMap.rb +++ b/Data/Scripts/017_UI/009_PScreen_RegionMap.rb @@ -133,7 +133,7 @@ class PokemonRegionMap_Scene @sprites["mapbottom"].mapdetails = pbGetMapDetails(@mapX,@mapY) if playerpos && mapindex==playerpos[0] @sprites["player"] = IconSprite.new(0,0,@viewport) - @sprites["player"].setBitmap(pbPlayerHeadFile($Trainer.trainertype)) + @sprites["player"].setBitmap(GameData::TrainerType.player_map_icon_filename($Trainer.trainertype)) @sprites["player"].x = -SQUAREWIDTH/2+(@mapX*SQUAREWIDTH)+(Graphics.width-@sprites["map"].bitmap.width)/2 @sprites["player"].y = -SQUAREHEIGHT/2+(@mapY*SQUAREHEIGHT)+(Graphics.height-@sprites["map"].bitmap.height)/2 end diff --git a/Data/Scripts/017_UI/010_PScreen_Phone.rb b/Data/Scripts/017_UI/010_PScreen_Phone.rb index 6ec8beb4b..51ab4af75 100644 --- a/Data/Scripts/017_UI/010_PScreen_Phone.rb +++ b/Data/Scripts/017_UI/010_PScreen_Phone.rb @@ -54,7 +54,7 @@ class PokemonPhoneScene addBackgroundPlane(@sprites,"bg","phonebg",@viewport) @sprites["icon"] = IconSprite.new(70,102,@viewport) if @trainers[0].length==4 - filename = pbTrainerCharFile(@trainers[0][0]) + filename = GameData::TrainerType.charset_filename(@trainers[0][0]) else filename = sprintf("Graphics/Characters/phone%03d",@trainers[0][0]) end @@ -106,7 +106,7 @@ class PokemonPhoneScene if @sprites["list"].index!=oldindex trainer = @trainers[@sprites["list"].index] if trainer.length==4 - filename = pbTrainerCharFile(trainer[0]) + filename = GameData::TrainerType.charset_filename(trainer[0]) else filename = sprintf("Graphics/Characters/phone%03d",trainer[0]) end diff --git a/Data/Scripts/017_UI/012_PScreen_TrainerCard.rb b/Data/Scripts/017_UI/012_PScreen_TrainerCard.rb index 4c3b6d03e..c97a42b7e 100644 --- a/Data/Scripts/017_UI/012_PScreen_TrainerCard.rb +++ b/Data/Scripts/017_UI/012_PScreen_TrainerCard.rb @@ -23,7 +23,7 @@ class PokemonTrainerCard_Scene @sprites["overlay"] = BitmapSprite.new(Graphics.width,Graphics.height,@viewport) pbSetSystemFont(@sprites["overlay"].bitmap) @sprites["trainer"] = IconSprite.new(336,112,@viewport) - @sprites["trainer"].setBitmap(pbPlayerSpriteFile($Trainer.trainertype)) + @sprites["trainer"].setBitmap(GameData::TrainerType.player_front_sprite_filename($Trainer.trainertype)) @sprites["trainer"].x -= (@sprites["trainer"].bitmap.width-128)/2 @sprites["trainer"].y -= (@sprites["trainer"].bitmap.height-128) @sprites["trainer"].z = 2 diff --git a/Data/Scripts/017_UI/025_PScreen_Mart.rb b/Data/Scripts/017_UI/025_PScreen_Mart.rb index 0c9499fe3..d2f553ebb 100644 --- a/Data/Scripts/017_UI/025_PScreen_Mart.rb +++ b/Data/Scripts/017_UI/025_PScreen_Mart.rb @@ -36,8 +36,7 @@ class PokemonMartAdapter end def getItemIcon(item) - return nil if !item - return pbItemIconFile(item) + return (item) ? GameData::Item.icon_filename(item) : nil end # Unused diff --git a/Data/Scripts/017_UI/027_PScreen_HallOfFame.rb b/Data/Scripts/017_UI/027_PScreen_HallOfFame.rb index 05826b8cf..3b824dedd 100644 --- a/Data/Scripts/017_UI/027_PScreen_HallOfFame.rb +++ b/Data/Scripts/017_UI/027_PScreen_HallOfFame.rb @@ -241,7 +241,7 @@ class HallOfFame_Scene def createTrainerBattler @sprites["trainer"]=IconSprite.new(@viewport) - @sprites["trainer"].setBitmap(pbTrainerSpriteFile($Trainer.trainertype)) + @sprites["trainer"].setBitmap(GameData::TrainerType.front_sprite_filename($Trainer.trainertype)) if !SINGLEROW @sprites["trainer"].x=Graphics.width-96 @sprites["trainer"].y=160 diff --git a/Data/Scripts/018_Minigames/001_PMinigame_Duel.rb b/Data/Scripts/018_Minigames/001_PMinigame_Duel.rb index f4017131b..859389202 100644 --- a/Data/Scripts/018_Minigames/001_PMinigame_Duel.rb +++ b/Data/Scripts/018_Minigames/001_PMinigame_Duel.rb @@ -49,9 +49,9 @@ class PokemonDuel @viewport.z = 99999 @sprites = {} @sprites["player"] = IconSprite.new(-128 - 32, 96, @viewport) - @sprites["player"].setBitmap(pbTrainerSpriteFile($Trainer.trainertype)) + @sprites["player"].setBitmap(GameData::TrainerType.front_sprite_filename($Trainer.trainertype)) @sprites["opponent"] = IconSprite.new(Graphics.width + 32, 96, @viewport) - @sprites["opponent"].setBitmap(pbTrainerSpriteFile(opponent.trainertype)) + @sprites["opponent"].setBitmap(GameData::TrainerType.front_sprite_filename(opponent.trainertype)) @sprites["playerwindow"] = DuelWindow.new($Trainer.name, false) @sprites["playerwindow"].x = -@sprites["playerwindow"].width @sprites["playerwindow"].viewport = @viewport diff --git a/Data/Scripts/019_Other battles/003_PBattle_OrgBattle.rb b/Data/Scripts/019_Other battles/003_PBattle_OrgBattle.rb index f23ad110f..c2d3896ec 100644 --- a/Data/Scripts/019_Other battles/003_PBattle_OrgBattle.rb +++ b/Data/Scripts/019_Other battles/003_PBattle_OrgBattle.rb @@ -692,7 +692,7 @@ end def pbBattleChallengeGraphic(event) nextTrainer=pbBattleChallenge.nextTrainer bttrainers=pbGetBTTrainers(pbBattleChallenge.currentChallenge) - filename=pbTrainerCharNameFile((bttrainers[nextTrainer][0] rescue 0)) + filename=GameData::TrainerType.charset_filename_brief((bttrainers[nextTrainer][0] rescue 0)) begin bitmap=AnimatedBitmap.new("Graphics/Characters/"+filename) bitmap.dispose diff --git a/Data/Scripts/019_Other battles/004_PBattle_OrgBattleRules.rb b/Data/Scripts/019_Other battles/004_PBattle_OrgBattleRules.rb index b45b28ffb..1b20ce2f1 100644 --- a/Data/Scripts/019_Other battles/004_PBattle_OrgBattleRules.rb +++ b/Data/Scripts/019_Other battles/004_PBattle_OrgBattleRules.rb @@ -574,7 +574,7 @@ $canEvolve = {} class BabyRestriction def isValid?(pokemon) baby=$babySpeciesData[pokemon.species] ? $babySpeciesData[pokemon.species] : - ($babySpeciesData[pokemon.species]=pbGetBabySpecies(pokemon.species)) + ($babySpeciesData[pokemon.species]=EvolutionHelper.baby_species(pokemon.species)) return baby==pokemon.species end end @@ -584,10 +584,10 @@ end class UnevolvedFormRestriction def isValid?(pokemon) baby=$babySpeciesData[pokemon.species] ? $babySpeciesData[pokemon.species] : - ($babySpeciesData[pokemon.species]=pbGetBabySpecies(pokemon.species)) + ($babySpeciesData[pokemon.species]=EvolutionHelper.baby_species(pokemon.species)) return false if baby!=pokemon.species canEvolve=($canEvolve[pokemon.species]!=nil) ? $canEvolve[pokemon.species] : - ($canEvolve[pokemon.species]=(pbGetEvolvedFormData(pokemon.species,true).length!=0)) + ($canEvolve[pokemon.species]=(EvolutionHelper.evolutions(pokemon.species, true).length!=0)) return false if !canEvolve return true end diff --git a/Data/Scripts/019_Other battles/005_PBattle_OrgBattleGenerator.rb b/Data/Scripts/019_Other battles/005_PBattle_OrgBattleGenerator.rb index 6a4764dc8..da4cfbc08 100644 --- a/Data/Scripts/019_Other battles/005_PBattle_OrgBattleGenerator.rb +++ b/Data/Scripts/019_Other battles/005_PBattle_OrgBattleGenerator.rb @@ -110,21 +110,21 @@ end def babySpecies(move) if !$babySpecies[move] - $babySpecies[move]=pbGetBabySpecies(move) + $babySpecies[move]=EvolutionHelper.baby_species(move) end return $babySpecies[move] end def minimumLevel(move) if !$minimumLevel[move] - $minimumLevel[move]=pbGetMinimumLevel(move) + $minimumLevel[move]=EvolutionHelper.minimum_level(move) end return $minimumLevel[move] end def evolutions(move) if !$evolutions[move] - $evolutions[move]=pbGetEvolvedFormData(move,true) + $evolutions[move]=EvolutionHelper.evolutions(move, true) end return $evolutions[move] end diff --git a/Data/Scripts/020_System and utilities/003_PSystem_FileUtilities.rb b/Data/Scripts/020_System and utilities/003_PSystem_FileUtilities.rb index d56c5043b..8ce312a31 100644 --- a/Data/Scripts/020_System and utilities/003_PSystem_FileUtilities.rb +++ b/Data/Scripts/020_System and utilities/003_PSystem_FileUtilities.rb @@ -257,163 +257,6 @@ end -#=============================================================================== -# Load item icons -# TODO: Put these methods into GameData::Item. -#=============================================================================== -def pbItemIconFile(item) - bitmapFileName = nil - if item - itm = GameData::Item.get(item) - bitmapFileName = sprintf("Graphics/Icons/item%s",itm.id.to_s) rescue nil - if !pbResolveBitmap(bitmapFileName) - bitmapFileName = sprintf("Graphics/Icons/item%03d",itm.id_number) - if !pbResolveBitmap(bitmapFileName) && itm.is_machine? - move = itm.move - type = GameData::Move.get(move).type - bitmapFileName = sprintf("Graphics/Icons/itemMachine%s",type.to_s) rescue nil - if !pbResolveBitmap(bitmapFileName) - bitmapFileName = sprintf("Graphics/Icons/itemMachine%03d",type) - end - end - bitmapFileName = "Graphics/Icons/item000" if !pbResolveBitmap(bitmapFileName) - end - else - bitmapFileName = sprintf("Graphics/Icons/itemBack") - end - return bitmapFileName -end - -def pbHeldItemIconFile(item) # Used in the party screen - return nil if !item || item==0 - namebase = (GameData::Item.get(item).is_mail?) ? "mail" : "item" - bitmapFileName = sprintf("Graphics/Pictures/Party/icon_%s_%s",namebase,GameData::Item.get(item).id.to_s) rescue nil - if !pbResolveBitmap(bitmapFileName) - bitmapFileName = sprintf("Graphics/Pictures/Party/icon_%s_%03d",namebase,item) - if !pbResolveBitmap(bitmapFileName) - bitmapFileName = sprintf("Graphics/Pictures/Party/icon_%s",namebase) - end - end - return bitmapFileName -end - - - -#=============================================================================== -# Load mail background graphics -#=============================================================================== -def pbMailBackFile(item) - return nil if !item - bitmapFileName = sprintf("Graphics/Pictures/Mail/mail_%s",GameData::Item.get(item).id.to_s) rescue nil - if !pbResolveBitmap(bitmapFileName) - bitmapFileName = sprintf("Graphics/Pictures/Mail/mail_%03d",item) - end - return bitmapFileName -end - - - -#=============================================================================== -# Load NPC charsets -#=============================================================================== -def pbTrainerCharFile(type) # Used by the phone - return nil if !type - tr_type_data = GameData::TrainerType.get(type) - bitmapFileName = sprintf("Graphics/Characters/trchar%s", tr_type_data.id.to_s) rescue nil - if !pbResolveBitmap(bitmapFileName) - bitmapFileName = sprintf("Graphics/Characters/trchar%03d", tr_type_data.id_number) - end - return bitmapFileName -end - -def pbTrainerCharNameFile(type) # Used by Battle Frontier and compiler - return nil if !type - tr_type_data = GameData::TrainerType.get(type) - bitmapFileName = sprintf("trchar%s", tr_type_data.id.to_s) rescue nil - if !pbResolveBitmap(sprintf("Graphics/Characters/" + bitmapFileName)) - bitmapFileName = sprintf("trchar%03d", tr_type_data.id_number) - end - return bitmapFileName -end - - - -#=============================================================================== -# Load trainer sprites -#=============================================================================== -def pbTrainerSpriteFile(type) - return nil if !type - tr_type_data = GameData::TrainerType.get(type) - bitmapFileName = sprintf("Graphics/Trainers/trainer%s", tr_type_data.id.to_s) rescue nil - if !pbResolveBitmap(bitmapFileName) - bitmapFileName = sprintf("Graphics/Trainers/trainer%03d", tr_type_data.id_number) - end - return bitmapFileName -end - -def pbTrainerSpriteBackFile(type) - return nil if !type - tr_type_data = GameData::TrainerType.get(type) - bitmapFileName = sprintf("Graphics/Trainers/trback%s", tr_type_data.id.to_s) rescue nil - if !pbResolveBitmap(bitmapFileName) - bitmapFileName = sprintf("Graphics/Trainers/trback%03d", tr_type_data.id_number) - end - return bitmapFileName -end - -def pbPlayerSpriteFile(type) - return nil if !type - tr_type_data = GameData::TrainerType.get(type) - outfit = ($Trainer) ? $Trainer.outfit : 0 - bitmapFileName = sprintf("Graphics/Trainers/trainer%s_%d", tr_type_data.id.to_s, outfit) rescue nil - if !pbResolveBitmap(bitmapFileName) - bitmapFileName = sprintf("Graphics/Trainers/trainer%03d_%d", tr_type_data.id_number, outfit) - bitmapFileName = pbTrainerSpriteFile(tr_type_data.id) if !pbResolveBitmap(bitmapFileName) - end - return bitmapFileName -end - -def pbPlayerSpriteBackFile(type) - return nil if !type - tr_type_data = GameData::TrainerType.get(type) - outfit = ($Trainer) ? $Trainer.outfit : 0 - bitmapFileName = sprintf("Graphics/Trainers/trback%s_%d", tr_type_data.id.to_s, outfit) rescue nil - if !pbResolveBitmap(bitmapFileName) - bitmapFileName = sprintf("Graphics/Trainers/trback%03d_%d", tr_type_data.id_number, outfit) - bitmapFileName = pbTrainerSpriteBackFile(tr_type_data.id) if !pbResolveBitmap(bitmapFileName) - end - return bitmapFileName -end - - - -#=============================================================================== -# Load player's head icons (used in the Town Map) -#=============================================================================== -def pbTrainerHeadFile(type) - return nil if !type - tr_type_data = GameData::TrainerType.get(type) - bitmapFileName = sprintf("Graphics/Pictures/mapPlayer%s", tr_type_data.id.to_s) rescue nil - if !pbResolveBitmap(bitmapFileName) - bitmapFileName = sprintf("Graphics/Pictures/mapPlayer%03d", tr_type_data.id_number) - end - return bitmapFileName -end - -def pbPlayerHeadFile(type) - return nil if !type - tr_type_data = GameData::TrainerType.get(type) - outfit = ($Trainer) ? $Trainer.outfit : 0 - bitmapFileName = sprintf("Graphics/Pictures/mapPlayer%s_%d", tr_type_data.id.to_s, outfit) rescue nil - if !pbResolveBitmap(bitmapFileName) - bitmapFileName = sprintf("Graphics/Pictures/mapPlayer%03d_%d", tr_type_data.id_number, outfit) - bitmapFileName = pbTrainerHeadFile(tr_type_data.id) if !pbResolveBitmap(bitmapFileName) - end - return bitmapFileName -end - - - #=============================================================================== # Analyse audio files #=============================================================================== diff --git a/Data/Scripts/020_System and utilities/004_PSystem_PokemonUtilities.rb b/Data/Scripts/020_System and utilities/004_PSystem_PokemonUtilities.rb index 28eb1caaf..33f6a69b0 100644 --- a/Data/Scripts/020_System and utilities/004_PSystem_PokemonUtilities.rb +++ b/Data/Scripts/020_System and utilities/004_PSystem_PokemonUtilities.rb @@ -237,73 +237,6 @@ end -#=============================================================================== -# Choose a Pokémon in the party -#=============================================================================== -# Choose a Pokémon/egg from the party. -# Stores result in variable _variableNumber_ and the chosen Pokémon's name in -# variable _nameVarNumber_; result is -1 if no Pokémon was chosen -def pbChoosePokemon(variableNumber,nameVarNumber,ableProc=nil,allowIneligible=false) - chosen = 0 - pbFadeOutIn { - scene = PokemonParty_Scene.new - screen = PokemonPartyScreen.new(scene,$Trainer.party) - if ableProc - chosen=screen.pbChooseAblePokemon(ableProc,allowIneligible) - else - screen.pbStartScene(_INTL("Choose a Pokémon."),false) - chosen = screen.pbChoosePokemon - screen.pbEndScene - end - } - pbSet(variableNumber,chosen) - if chosen>=0 - pbSet(nameVarNumber,$Trainer.party[chosen].name) - else - pbSet(nameVarNumber,"") - end -end - -def pbChooseNonEggPokemon(variableNumber,nameVarNumber) - pbChoosePokemon(variableNumber,nameVarNumber,proc { |pkmn| !pkmn.egg? }) -end - -def pbChooseAblePokemon(variableNumber,nameVarNumber) - pbChoosePokemon(variableNumber,nameVarNumber,proc { |pkmn| !pkmn.egg? && pkmn.hp>0 }) -end - -# Same as pbChoosePokemon, but prevents choosing an egg or a Shadow Pokémon. -def pbChooseTradablePokemon(variableNumber,nameVarNumber,ableProc=nil,allowIneligible=false) - chosen = 0 - pbFadeOutIn { - scene = PokemonParty_Scene.new - screen = PokemonPartyScreen.new(scene,$Trainer.party) - if ableProc - chosen=screen.pbChooseTradablePokemon(ableProc,allowIneligible) - else - screen.pbStartScene(_INTL("Choose a Pokémon."),false) - chosen = screen.pbChoosePokemon - screen.pbEndScene - end - } - pbSet(variableNumber,chosen) - if chosen>=0 - pbSet(nameVarNumber,$Trainer.party[chosen].name) - else - pbSet(nameVarNumber,"") - end -end - - -def pbChoosePokemonForTrade(variableNumber,nameVarNumber,wanted) - wanted = getID(PBSpecies,wanted) - pbChooseTradablePokemon(variableNumber,nameVarNumber,proc { |pkmn| - next pkmn.species==wanted - }) -end - - - #=============================================================================== # Analyse Pokémon in the party #=============================================================================== @@ -483,15 +416,15 @@ def pbHasEgg?(species) species = getID(PBSpecies,species) return false if !species # species may be unbreedable, so check its evolution's compatibilities - evoSpecies = pbGetEvolvedFormData(species,true) + evoSpecies = EvolutionHelper.evolutions(species, true) compatSpecies = (evoSpecies && evoSpecies[0]) ? evoSpecies[0][2] : species compat = pbGetSpeciesData(compatSpecies,0,SpeciesData::COMPATIBILITY) compat = [compat] if !compat.is_a?(Array) return false if compat.include?(getConst(PBEggGroups,:Undiscovered)) return false if compat.include?(getConst(PBEggGroups,:Ditto)) - baby = pbGetBabySpecies(species) + baby = EvolutionHelper.baby_species(species) return true if species==baby # Is a basic species - baby = pbGetBabySpecies(species,true) + baby = EvolutionHelper.baby_species(species, true) return true if species==baby # Is an egg species without incense return false end diff --git a/Data/Scripts/020_System and utilities/005_PSystem_Utilities.rb b/Data/Scripts/020_System and utilities/005_PSystem_Utilities.rb index 0d7cc2a66..1ea503491 100644 --- a/Data/Scripts/020_System and utilities/005_PSystem_Utilities.rb +++ b/Data/Scripts/020_System and utilities/005_PSystem_Utilities.rb @@ -681,7 +681,7 @@ def pbGetPlayerGraphic return "" if id<0 || id>=8 meta = GameData::Metadata.get_player(id) return "" if !meta - return pbPlayerSpriteFile(meta[0]) + return GameData::TrainerType.player_front_sprite_filename(meta[0]) end def pbGetPlayerTrainerType @@ -1039,23 +1039,6 @@ def pbMoveTutorChoose(move,movelist=nil,bymachine=false) return ret # Returns whether the move was learned by a Pokemon end -def pbChooseMove(pokemon,variableNumber,nameVarNumber) - return if !pokemon - ret = -1 - pbFadeOutIn { - scene = PokemonSummary_Scene.new - screen = PokemonSummaryScreen.new(scene) - ret = screen.pbStartForgetScreen([pokemon],0,nil) - } - $game_variables[variableNumber] = ret - if ret>=0 - $game_variables[nameVarNumber] = pokemon.moves[ret].name - else - $game_variables[nameVarNumber] = "" - end - $game_map.need_refresh = true if $game_map -end - def pbConvertItemToItem(variable, array) item = GameData::Item.get(pbGet(variable)) pbSet(variable, nil) diff --git a/Data/Scripts/021_Debug/004_Editor_Screens.rb b/Data/Scripts/021_Debug/004_Editor_Screens.rb index 446710978..5fe5f863d 100644 --- a/Data/Scripts/021_Debug/004_Editor_Screens.rb +++ b/Data/Scripts/021_Debug/004_Editor_Screens.rb @@ -947,7 +947,7 @@ def pbPokemonEditor (regionallist[numb]==0) ? regionallist.pop : break numb -= 1 end - evolutions = pbGetEvolvedFormData(selection) + evolutions = EvolutionHelper.evolutions(selection) data = [] data.push(speciesname) # 0 data.push(cname) # 1 @@ -1068,7 +1068,7 @@ def pbPokemonEditor evos[sp].push([data[41][i][2],data[41][i][0],data[41][i][1],false]) end else - t = pbGetEvolvedFormData(sp) + t = EvolutionHelper.evolutions(sp) for i in 0...t.length evos[sp].push([t[i][2],t[i][0],t[i][1],false]) end @@ -1366,7 +1366,7 @@ end def pbAppendEvoToFamilyArray(species,array,seenarray) return if seenarray[species] array.push(species); seenarray[species] = true - evos = pbGetEvolvedFormData(species) + evos = EvolutionHelper.evolutions(species) if evos.length>0 evos.sort! { |a,b| a[2]<=>b[2] } subarray = [] @@ -1381,7 +1381,7 @@ def pbGetEvoFamilies seen = [] ret = [] for sp in 1..PBSpecies.maxValue - species = pbGetBabySpecies(sp) + species = EvolutionHelper.baby_species(sp) next if seen[species] subret = [] pbAppendEvoToFamilyArray(species,subret,seen) diff --git a/Data/Scripts/021_Debug/005_Editor_SaveData.rb b/Data/Scripts/021_Debug/005_Editor_SaveData.rb index 288eee001..997c74214 100644 --- a/Data/Scripts/021_Debug/005_Editor_SaveData.rb +++ b/Data/Scripts/021_Debug/005_Editor_SaveData.rb @@ -774,7 +774,7 @@ def pbSavePokemonData end pokedata.write("Evolutions = ") count = 0 - for form in pbGetEvolvedFormData(i) + for form in EvolutionHelper.evolutions(i) method = form[0] parameter = form[1] new_species = form[2] @@ -1189,7 +1189,7 @@ def pbSavePokemonFormsData end end origevos = [] - for form in pbGetEvolvedFormData(species) + for form in EvolutionHelper.evolutions(species) method = form[0] parameter = form[1] new_species = form[2] @@ -1200,7 +1200,7 @@ def pbSavePokemonFormsData origevos.push([method,parameter,new_species]) end evos = [] - for form in pbGetEvolvedFormData(i) + for form in EvolutionHelper.evolutions(i) method = form[0] parameter = form[1] new_species = form[2] diff --git a/Data/Scripts/021_Debug/007_Editor_DataTypes.rb b/Data/Scripts/021_Debug/007_Editor_DataTypes.rb index 714e9b85c..2064a90fb 100644 --- a/Data/Scripts/021_Debug/007_Editor_DataTypes.rb +++ b/Data/Scripts/021_Debug/007_Editor_DataTypes.rb @@ -580,6 +580,43 @@ end +def chooseMapPoint(map,rgnmap=false) + viewport=Viewport.new(0,0,Graphics.width,Graphics.height) + viewport.z=99999 + title=Window_UnformattedTextPokemon.new(_INTL("Click a point on the map.")) + title.x=0 + title.y=Graphics.height-64 + title.width=Graphics.width + title.height=64 + title.viewport=viewport + title.z=2 + if rgnmap + sprite=RegionMapSprite.new(map,viewport) + else + sprite=MapSprite.new(map,viewport) + end + sprite.z=2 + ret=nil + loop do + Graphics.update + Input.update + xy=sprite.getXY + if xy + ret=xy + break + end + if Input.trigger?(Input::B) + ret=nil + break + end + end + sprite.dispose + title.dispose + return ret +end + + + module MapCoordsProperty def self.set(settingname,oldsetting) chosenmap = pbListScreen(settingname,MapLister.new((oldsetting) ? oldsetting[0] : 0)) @@ -624,7 +661,7 @@ end module RegionMapCoordsProperty def self.set(_settingname,oldsetting) - regions = getMapNameList + regions = self.getMapNameList selregion = -1 if regions.length==0 pbMessage(_INTL("No region maps are defined.")) @@ -650,6 +687,18 @@ module RegionMapCoordsProperty def self.format(value) return value.inspect end + + def self.getMapNameList + mapdata = pbLoadTownMapData + ret=[] + for i in 0...mapdata.length + next if !mapdata[i] + ret.push( + [i,pbGetMessage(MessageTypes::RegionNames,i)] + ) + end + return ret + end end diff --git a/Data/Scripts/021_Debug/008_Editor_Listers.rb b/Data/Scripts/021_Debug/008_Editor_Listers.rb index 9343ab949..7190094d2 100644 --- a/Data/Scripts/021_Debug/008_Editor_Listers.rb +++ b/Data/Scripts/021_Debug/008_Editor_Listers.rb @@ -121,10 +121,8 @@ def pbListScreenBlock(title,lister) Input.update end - - #=============================================================================== -# General listers +# #=============================================================================== class GraphicsLister def initialize(folder,selection) @@ -196,8 +194,9 @@ class GraphicsLister end end - - +#=============================================================================== +# +#=============================================================================== class MusicFileLister def initialize(bgm,setting) @oldbgm = getPlayingBGM @@ -263,8 +262,9 @@ class MusicFileLister end end - - +#=============================================================================== +# +#=============================================================================== class MapLister def initialize(selmap,addGlobal=false) @sprite = SpriteWrapper.new @@ -322,8 +322,9 @@ class MapLister end end - - +#=============================================================================== +# +#=============================================================================== class SpeciesLister def initialize(selection,includeNew=false) @selection = selection @@ -373,8 +374,9 @@ class SpeciesLister def refresh(index); end end - - +#=============================================================================== +# +#=============================================================================== class ItemLister def initialize(selection = 0, includeNew = false) @sprite = ItemIconSprite.new(Graphics.width * 3 / 4, Graphics.height / 2, nil) @@ -432,8 +434,9 @@ class ItemLister end end - - +#=============================================================================== +# +#=============================================================================== class TrainerTypeLister def initialize(selection = 0, includeNew = false) @sprite = IconSprite.new(Graphics.width * 3 / 4, (Graphics.height - 64) / 2 + 64) @@ -490,7 +493,7 @@ class TrainerTypeLister @sprite.bitmap.dispose if @sprite.bitmap return if index < 0 begin - @sprite.setBitmap(pbTrainerSpriteFile(@ids[index]), 0) + @sprite.setBitmap(GameData::TrainerType.front_sprite_filename(@ids[index]), 0) rescue @sprite.setBitmap(nil) end @@ -501,8 +504,9 @@ class TrainerTypeLister end end - - +#=============================================================================== +# +#=============================================================================== class TrainerBattleLister def initialize(selection,includeNew) @sprite = IconSprite.new(Graphics.width * 3 / 4, (Graphics.height / 2) + 32) @@ -577,7 +581,7 @@ class TrainerBattleLister @sprite.bitmap.dispose if @sprite.bitmap return if index<0 begin - @sprite.setBitmap(pbTrainerSpriteFile(@ids[index]),0) + @sprite.setBitmap(GameData::TrainerType.front_sprite_filename(@ids[index]),0) rescue @sprite.setBitmap(nil) end diff --git a/Data/Scripts/021_Debug/009_Editor_Utilities.rb b/Data/Scripts/021_Debug/009_Editor_Utilities.rb index 1d0b45c70..bdfb94793 100644 --- a/Data/Scripts/021_Debug/009_Editor_Utilities.rb +++ b/Data/Scripts/021_Debug/009_Editor_Utilities.rb @@ -8,7 +8,7 @@ def pbGetLegalMoves(species) next if !i.move moves.push(i.move) if tmdat[i.move] && tmdat[i.move].include?(species) end - babyspecies = pbGetBabySpecies(species) + babyspecies = EvolutionHelper.baby_species(species) eggMoves = pbGetSpeciesEggMoves(babyspecies) eggMoves.each { |m| moves.push(m) } moves |= [] diff --git a/Data/Scripts/021_Debug/010_Editor_TilesetEditor.rb b/Data/Scripts/021_Debug/010_Editor_TilesetEditor.rb index 7650c6125..edc6bc240 100644 --- a/Data/Scripts/021_Debug/010_Editor_TilesetEditor.rb +++ b/Data/Scripts/021_Debug/010_Editor_TilesetEditor.rb @@ -1,8 +1,6 @@ #=============================================================================== -# Edits the terrain tags of tiles in tilesets. +# #=============================================================================== -begin - def pbTilesetWrapper return PokemonDataWrapper.new( "Data/Tilesets.rxdata", @@ -14,8 +12,9 @@ def pbTilesetWrapper ) end - - +#=============================================================================== +# Edits the terrain tags of tiles in tilesets. +#=============================================================================== class PokemonTilesetScene TILESET_WIDTH = 256 TILE_SIZE = 32 @@ -203,11 +202,3 @@ def pbTilesetScreen scene.pbStartScene } end - - - -rescue Exception - if $!.is_a?(SystemExit) || "#{$!.class}"=="Reset" - raise $! - end -end diff --git a/Data/Scripts/021_Debug/011_Editor_MapConnectionEditor.rb b/Data/Scripts/021_Debug/011_Editor_MapConnectionEditor.rb index b68ba0b3b..8c9570f31 100644 --- a/Data/Scripts/021_Debug/011_Editor_MapConnectionEditor.rb +++ b/Data/Scripts/021_Debug/011_Editor_MapConnectionEditor.rb @@ -1,5 +1,5 @@ #=============================================================================== -# Miniature game map/Town Map drawing +# Miniature game map drawing #=============================================================================== class MapSprite def initialize(map,viewport=nil) @@ -34,8 +34,9 @@ class MapSprite end end - - +#=============================================================================== +# +#=============================================================================== class SelectionSprite < Sprite def initialize(viewport=nil) @sprite=Sprite.new(viewport) @@ -82,8 +83,9 @@ class SelectionSprite < Sprite end end - - +#=============================================================================== +# +#=============================================================================== class RegionMapSprite def initialize(map,viewport=nil) @sprite=Sprite.new(viewport) @@ -101,6 +103,20 @@ class RegionMapSprite @sprite.z=value end + def createRegionMap(map) + @mapdata = pbLoadTownMapData + @map=@mapdata[map] + bitmap=AnimatedBitmap.new("Graphics/Pictures/#{@map[1]}").deanimate + retbitmap=BitmapWrapper.new(bitmap.width/2,bitmap.height/2) + retbitmap.stretch_blt( + Rect.new(0,0,bitmap.width/2,bitmap.height/2), + bitmap, + Rect.new(0,0,bitmap.width,bitmap.height) + ) + bitmap.dispose + return retbitmap + end + def getXY return nil if !Input.triggerex?(Input::LeftMouseKey) mouse=Mouse::getMousePos(true) @@ -117,125 +133,6 @@ class RegionMapSprite end end - - -def createRegionMap(map) - @mapdata = pbLoadTownMapData - @map=@mapdata[map] - bitmap=AnimatedBitmap.new("Graphics/Pictures/#{@map[1]}").deanimate - retbitmap=BitmapWrapper.new(bitmap.width/2,bitmap.height/2) - retbitmap.stretch_blt( - Rect.new(0,0,bitmap.width/2,bitmap.height/2), - bitmap, - Rect.new(0,0,bitmap.width,bitmap.height) - ) - bitmap.dispose - return retbitmap -end - -def getMapNameList - @mapdata = pbLoadTownMapData - ret=[] - for i in 0...@mapdata.length - next if !@mapdata[i] - ret.push( - [i,pbGetMessage(MessageTypes::RegionNames,i)] - ) - end - return ret -end - -def createMinimap2(mapid) - map=load_data(sprintf("Data/Map%03d.rxdata",mapid)) rescue nil - return BitmapWrapper.new(32,32) if !map - bitmap=BitmapWrapper.new(map.width*4,map.height*4) - black=Color.new(0,0,0) - bigmap=(map.width>40 && map.height>40) - tilesets=load_data("Data/Tilesets.rxdata") - tileset=tilesets[map.tileset_id] - return bitmap if !tileset - helper=TileDrawingHelper.fromTileset(tileset) - for y in 0...map.height - for x in 0...map.width - if bigmap - next if (x>8 && x<=map.width-8 && y>8 && y<=map.height-8) - end - for z in 0..2 - id=map.data[x,y,z] - next if id==0 || !id - helper.bltSmallTile(bitmap,x*4,y*4,4,4,id) - end - end - end - bitmap.fill_rect(0,0,bitmap.width,1,black) - bitmap.fill_rect(0,bitmap.height-1,bitmap.width,1,black) - bitmap.fill_rect(0,0,1,bitmap.height,black) - bitmap.fill_rect(bitmap.width-1,0,1,bitmap.height,black) - return bitmap -end - -def createMinimap(mapid) - map=load_data(sprintf("Data/Map%03d.rxdata",mapid)) rescue nil - return BitmapWrapper.new(32,32) if !map - bitmap=BitmapWrapper.new(map.width*4,map.height*4) - black=Color.new(0,0,0) - tilesets=load_data("Data/Tilesets.rxdata") - tileset=tilesets[map.tileset_id] - return bitmap if !tileset - helper=TileDrawingHelper.fromTileset(tileset) - for y in 0...map.height - for x in 0...map.width - for z in 0..2 - id=map.data[x,y,z] - id=0 if !id - helper.bltSmallTile(bitmap,x*4,y*4,4,4,id) - end - end - end - bitmap.fill_rect(0,0,bitmap.width,1,black) - bitmap.fill_rect(0,bitmap.height-1,bitmap.width,1,black) - bitmap.fill_rect(0,0,1,bitmap.height,black) - bitmap.fill_rect(bitmap.width-1,0,1,bitmap.height,black) - return bitmap -end - -def chooseMapPoint(map,rgnmap=false) - viewport=Viewport.new(0,0,Graphics.width,Graphics.height) - viewport.z=99999 - title=Window_UnformattedTextPokemon.new(_INTL("Click a point on the map.")) - title.x=0 - title.y=Graphics.height-64 - title.width=Graphics.width - title.height=64 - title.viewport=viewport - title.z=2 - if rgnmap - sprite=RegionMapSprite.new(map,viewport) - else - sprite=MapSprite.new(map,viewport) - end - sprite.z=2 - ret=nil - loop do - Graphics.update - Input.update - xy=sprite.getXY - if xy - ret=xy - break - end - if Input.trigger?(Input::B) - ret=nil - break - end - end - sprite.dispose - title.dispose - return ret -end - - - #=============================================================================== # Visual Editor (map connections) #=============================================================================== @@ -686,8 +583,9 @@ class MapScreenScene end end - - +#=============================================================================== +# +#=============================================================================== def pbConnectionsEditor pbCriticalCode { mapscreen = MapScreenScene.new diff --git a/Data/Scripts/022_Compiler/001_Data_storage.rb b/Data/Scripts/022_Compiler/001_Data_storage.rb index 28c43b8ec..f3707cf7c 100644 --- a/Data/Scripts/022_Compiler/001_Data_storage.rb +++ b/Data/Scripts/022_Compiler/001_Data_storage.rb @@ -209,6 +209,7 @@ end #=============================================================================== # Encoding and decoding #=============================================================================== +# Unused def intSize(value) return 1 if value<0x80 return 2 if value<0x4000 @@ -217,6 +218,7 @@ def intSize(value) return 5 end +# Unused def encodeInt(strm,value) num = 0 loop do @@ -230,6 +232,7 @@ def encodeInt(strm,value) end end +# Unused def decodeInt(strm) bits = 0 curbyte = 0 @@ -242,15 +245,18 @@ def decodeInt(strm) return ret end +# Unused def strSize(str) return str.length+intSize(str.length) end +# Unused def encodeString(strm,str) encodeInt(strm,str.length) strm.write(str) end +# Unused def decodeString(strm) len = decodeInt(strm) return strm.read(len) @@ -279,6 +285,7 @@ def pbFindScript(a,name) return nil end +# TODO: Will be unused once PBSpecies is abolished. Method above only used by this one. def pbAddScript(script,sectionname) begin scripts = load_data("Data/Constants.rxdata") diff --git a/Data/Scripts/022_Compiler/004_Compiler_MapsAndEvents.rb b/Data/Scripts/022_Compiler/004_Compiler_MapsAndEvents.rb index a39c7d9ba..f80967e7d 100644 --- a/Data/Scripts/022_Compiler/004_Compiler_MapsAndEvents.rb +++ b/Data/Scripts/022_Compiler/004_Compiler_MapsAndEvents.rb @@ -523,11 +523,9 @@ module Compiler # doesn't have a charset if firstpage.graphic.character_name=="" && GameData::TrainerType.exists?(trtype) trainerid = GameData::TrainerType.get(trtype).id - if trainerid - filename = pbTrainerCharNameFile(trainerid) - if FileTest.image_exist?("Graphics/Characters/"+filename) - firstpage.graphic.character_name = sprintf(filename) - end + filename = GameData::TrainerType.charset_filename_brief(trainerid) + if FileTest.image_exist?("Graphics/Characters/"+filename) + firstpage.graphic.character_name = sprintf(filename) end end # Create strings that will be used repeatedly