Moved methods that return item/trainer graphics, refactored evolution helper methods, rearranged some methods

This commit is contained in:
Maruno17
2020-12-13 19:40:17 +00:00
parent d4b5aa0ce7
commit 1ffeddc41c
35 changed files with 582 additions and 548 deletions

View File

@@ -134,3 +134,61 @@ class TileDrawingHelper
end end
end 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

View File

@@ -18,6 +18,49 @@ module GameData
extend ClassMethods extend ClassMethods
include InstanceMethods 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) def initialize(hash)
@id = hash[:id] @id = hash[:id]
@id_number = hash[:id_number] || -1 @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?') Deprecation.warn_method('pbIsUnlosableItem?', 'v20', 'GameData::Item.get(item).unlosable?')
return GameData::Item.get(check_item).unlosable?(species, ability) return GameData::Item.get(check_item).unlosable?(species, ability)
end 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

View File

@@ -48,6 +48,18 @@ module GameData
return pbGetMessage(MessageTypes::MoveDescriptions, @id_number) return pbGetMessage(MessageTypes::MoveDescriptions, @id_number)
end 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? def hidden_move?
GameData::Item.each do |i| GameData::Item.each do |i|
return true if i.is_HM? && i.move == @id return true if i.is_HM? && i.move == @id

View File

@@ -17,6 +17,59 @@ module GameData
extend ClassMethods extend ClassMethods
include InstanceMethods 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) def initialize(hash)
@id = hash[:id] @id = hash[:id]
@id_number = hash[:id_number] || -1 @id_number = hash[:id_number] || -1
@@ -43,7 +96,47 @@ end
#=============================================================================== #===============================================================================
# Deprecated methods # Deprecated methods
#=============================================================================== #===============================================================================
def pbGetTrainerTypeData(trainer_type) def pbGetTrainerTypeData(tr_type)
Deprecation.warn_method('pbGetTrainerTypeData', 'v20', 'GameData::TrainerType.get(trainer_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 end

View File

@@ -35,17 +35,9 @@ class PBTypes
return ret return ret
end end
def PBTypes.isPseudoType?(type) def PBTypes.isPhysicalType?(type); return GameData::Type.get(type).physical?; end
return GameData::Type.get(type).pseudo_type def PBTypes.isSpecialType?(type); return GameData::Type.get(type).special?; end
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.getEffectiveness(attack_type, target_type) def PBTypes.getEffectiveness(attack_type, target_type)
return GameData::Type.get(target_type).effectiveness(attack_type) return GameData::Type.get(target_type).effectiveness(attack_type)

View File

@@ -152,9 +152,9 @@ class PokeBattle_Scene
def pbCreateTrainerBackSprite(idxTrainer,trainerType,numTrainers=1) def pbCreateTrainerBackSprite(idxTrainer,trainerType,numTrainers=1)
if idxTrainer==0 # Player's sprite if idxTrainer==0 # Player's sprite
trainerFile = pbPlayerSpriteBackFile(trainerType) trainerFile = GameData::TrainerType.player_back_sprite_filename(trainerType)
else # Partner trainer's sprite else # Partner trainer's sprite
trainerFile = pbTrainerSpriteBackFile(trainerType) trainerFile = GameData::TrainerType.back_sprite_filename(trainerType)
end end
spriteX, spriteY = PokeBattle_SceneConstants.pbTrainerPosition(0,idxTrainer,numTrainers) spriteX, spriteY = PokeBattle_SceneConstants.pbTrainerPosition(0,idxTrainer,numTrainers)
trainer = pbAddSprite("player_#{idxTrainer+1}",spriteX,spriteY,trainerFile,@viewport) trainer = pbAddSprite("player_#{idxTrainer+1}",spriteX,spriteY,trainerFile,@viewport)
@@ -170,7 +170,7 @@ class PokeBattle_Scene
end end
def pbCreateTrainerFrontSprite(idxTrainer,trainerType,numTrainers=1) def pbCreateTrainerFrontSprite(idxTrainer,trainerType,numTrainers=1)
trainerFile = pbTrainerSpriteFile(trainerType) trainerFile = GameData::TrainerType.front_sprite_filename(trainerType)
spriteX, spriteY = PokeBattle_SceneConstants.pbTrainerPosition(1,idxTrainer,numTrainers) spriteX, spriteY = PokeBattle_SceneConstants.pbTrainerPosition(1,idxTrainer,numTrainers)
trainer = pbAddSprite("trainer_#{idxTrainer+1}",spriteX,spriteY,trainerFile,@viewport) trainer = pbAddSprite("trainer_#{idxTrainer+1}",spriteX,spriteY,trainerFile,@viewport)
return if !trainer.bitmap return if !trainer.bitmap

View File

@@ -863,7 +863,7 @@ BattleHandlers::DamageCalcTargetItem.add(:EVIOLITE,
# means it also cares about the Pokémon's form. Some forms cannot # 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 # evolve even if the species generally can, and such forms are not
# affected by Eviolite. # 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 mults[DEF_MULT] *= 1.5 if evos && evos.length>0
} }
) )

View File

@@ -203,7 +203,7 @@ BallHandlers::ModifyCatchRate.add(:MOONBALL,proc { |ball,catchRate,battle,battle
# family can evolve with the Moon Stone, not whether the target itself # family can evolve with the Moon Stone, not whether the target itself
# can immediately evolve with the Moon Stone. # can immediately evolve with the Moon Stone.
moon_stone = GameData::Item.try_get(:MOONSTONE) 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 catchRate *= 4
end end
next [catchRate, 255].min next [catchRate, 255].min

View File

@@ -192,7 +192,7 @@ def pbDayCareGenerateEgg
father = pokemon0 father = pokemon0
end end
# Determine the egg's species # 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) if isConst?(babyspecies,PBSpecies,:MANAPHY) && hasConst?(PBSpecies,:PHIONE)
babyspecies = getConst(PBSpecies,:PHIONE) babyspecies = getConst(PBSpecies,:PHIONE)
elsif (isConst?(babyspecies,PBSpecies,:NIDORANfE) && hasConst?(PBSpecies,:NIDORANmA)) || elsif (isConst?(babyspecies,PBSpecies,:NIDORANfE) && hasConst?(PBSpecies,:NIDORANmA)) ||
@@ -233,7 +233,7 @@ def pbDayCareGenerateEgg
isConst?(babyspecies,PBSpecies,:GRIMER) isConst?(babyspecies,PBSpecies,:GRIMER)
if mother.form==1 if mother.form==1
egg.form = 1 if mother.hasItem?(:EVERSTONE) 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) egg.form = 1 if father.form==1 && father.hasItem?(:EVERSTONE)
end end
end end

View File

@@ -35,7 +35,7 @@ def pbDisplayMail(mail,_bearer=nil)
viewport.z = 99999 viewport.z = 99999
addBackgroundPlane(sprites,"background","mailbg",viewport) addBackgroundPlane(sprites,"background","mailbg",viewport)
sprites["card"] = IconSprite.new(0,0,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) sprites["overlay"] = BitmapSprite.new(Graphics.width,Graphics.height,viewport)
overlay = sprites["overlay"].bitmap overlay = sprites["overlay"].bitmap
pbSetSystemFont(overlay) pbSetSystemFont(overlay)

View File

@@ -72,7 +72,7 @@ class ItemIconSprite < SpriteWrapper
@animbitmap.dispose if @animbitmap @animbitmap.dispose if @animbitmap
@animbitmap = nil @animbitmap = nil
if @item || !@blankzero if @item || !@blankzero
@animbitmap = AnimatedBitmap.new(pbItemIconFile(@item)) @animbitmap = AnimatedBitmap.new(GameData::Item.icon_filename(@item))
self.bitmap = @animbitmap.bitmap self.bitmap = @animbitmap.bitmap
if self.bitmap.height==ANIM_ICON_SIZE if self.bitmap.height==ANIM_ICON_SIZE
@numframes = [(self.bitmap.width/ANIM_ICON_SIZE).floor,1].max @numframes = [(self.bitmap.width/ANIM_ICON_SIZE).floor,1].max
@@ -140,7 +140,7 @@ class HeldItemIconSprite < SpriteWrapper
@animbitmap.dispose if @animbitmap @animbitmap.dispose if @animbitmap
@animbitmap = nil @animbitmap = nil
if @item if @item
@animbitmap = AnimatedBitmap.new(pbHeldItemIconFile(@item)) @animbitmap = AnimatedBitmap.new(GameData::Item.held_icon_filename(@item))
self.bitmap = @animbitmap.bitmap self.bitmap = @animbitmap.bitmap
else else
self.bitmap = nil self.bitmap = nil

View File

@@ -128,19 +128,34 @@ end
#=============================================================================== #===============================================================================
# Evolution helper functions # Evolution helper functions
#=============================================================================== #===============================================================================
def pbGetEvolvedFormData(species,ignoreNone=false) module EvolutionHelper
module_function
def evolutions(species, ignore_none = false)
ret = [] ret = []
evoData = pbGetEvolutionData(species) evoData = pbGetEvolutionData(species)
return ret if !evoData || evoData.length == 0 return ret if !evoData || evoData.length == 0
evoData.each do |evo| evoData.each do |evo|
next if evo[3] # Is the prevolution next if evo[3] # Is the prevolution
next if evo[1]==PBEvolution::None && ignoreNone next if evo[1] == PBEvolution::None && ignore_none
ret.push([evo[1], evo[2], evo[0]]) # [Method, parameter, species] ret.push([evo[1], evo[2], evo[0]]) # [Method, parameter, species]
end end
return ret return ret
end end
def pbGetPreviousForm(species) # Unused 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) evoData = pbGetEvolutionData(species)
return species if !evoData || evoData.length == 0 return species if !evoData || evoData.length == 0
evoData.each do |evo| evoData.each do |evo|
@@ -149,7 +164,7 @@ def pbGetPreviousForm(species) # Unused
return species return species
end end
def pbGetBabySpecies(species, check_items = false, item1 = nil, item2 = nil) def baby_species(species, check_items = false, item1 = nil, item2 = nil)
ret = species ret = species
evoData = pbGetEvolutionData(species) evoData = pbGetEvolutionData(species)
return ret if !evoData || evoData.length == 0 return ret if !evoData || evoData.length == 0
@@ -163,11 +178,11 @@ def pbGetBabySpecies(species, check_items = false, item1 = nil, item2 = nil)
end end
break break
end end
ret = pbGetBabySpecies(ret, item1, item2) if ret != species ret = self.baby_species(ret, item1, item2) if ret != species
return ret return ret
end end
def pbGetMinimumLevel(species) def minimum_level(species)
evoData = pbGetEvolutionData(species) evoData = pbGetEvolutionData(species)
return 1 if !evoData || evoData.length == 0 return 1 if !evoData || evoData.length == 0
ret = -1 ret = -1
@@ -182,39 +197,25 @@ def pbGetMinimumLevel(species)
return (ret == -1) ? 1 : ret return (ret == -1) ? 1 : ret
end end
def pbGetEvolutionFamilyData(species) def check_family_for_method(species, method, param = nil)
evos = pbGetEvolvedFormData(species,true) species = self.baby_species(species)
return nil if evos.length==0 evos = self.family_evolutions(species)
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 return false if !evos || evos.length == 0
for evo in evos for evo in evos
if method.is_a?(Array) if method.is_a?(Array)
next if !method.include?(evo[1]) next if !method.include?(evo[0])
elsif method >= 0 elsif method >= 0
next if evo[1] != method next if evo[0] != method
end end
next if param >= 0 && evo[2] != param next if param && evo[1] != param
return true return true
end end
return false return false
end end
# Used by the Moon Ball when checking if a Pokémon's evolution family includes def check_family_for_method_item(species, param = nil)
# an evolution that uses the Moon Stone. species = self.baby_species(species)
def pbCheckEvolutionFamilyForItemMethodItem(species, param = nil) evos = self.family_evolutions(species)
species = pbGetBabySpecies(species)
evos = pbGetEvolutionFamilyData(species)
return false if !evos || evos.length == 0 return false if !evos || evos.length == 0
for evo in evos for evo in evos
next if !PBEvolution.hasFunction?(evo[1], "itemCheck") next if !PBEvolution.hasFunction?(evo[1], "itemCheck")
@@ -223,19 +224,45 @@ def pbCheckEvolutionFamilyForItemMethodItem(species, param = nil)
end end
return false return false
end end
end
def pbEvoDebug # Unused
evosData = pbLoadEvolutionsData
for species in 1..PBSpecies.maxValueF def pbGetEvolvedFormData(species, ignore_none = false)
echo PBSpecies.getName(pbGetSpeciesFromFSpecies(species)[0])+"\n" Deprecation.warn_method('pbGetEvolvedFormData', 'v20', 'EvolutionHelper.evolutions(species)')
next if !evosData[species] || evosData[species].length==0 return EvolutionHelper.evolutions(species, ignore_none)
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
def pbGetEvolutionFamilyData(species) # Unused
Deprecation.warn_method('pbGetEvolutionFamilyData', 'v20', 'EvolutionHelper.family_evolutions(species)')
return EvolutionHelper.family_evolutions(species, ignore_none)
end end
echo "end\n"
def pbGetPreviousForm(species) # Unused
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)
Deprecation.warn_method('pbGetBabySpecies', 'v20', 'EvolutionHelper.baby_species(species)')
return EvolutionHelper.baby_species(species, check_items, item1, item2)
end
def pbGetMinimumLevel(species)
Deprecation.warn_method('pbGetMinimumLevel', 'v20', 'EvolutionHelper.minimum_level(species)')
return EvolutionHelper.minimum_level(species)
end
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)
Deprecation.warn_method('pbCheckEvolutionFamilyForItemMethodItem', 'v20', 'EvolutionHelper.check_family_for_method_item(species, item)')
return EvolutionHelper.check_family_for_method_item(species, param)
end end
#=============================================================================== #===============================================================================
@@ -253,13 +280,13 @@ end
# Checks whether a Pokemon can evolve now. If a block is given, calls the block # Checks whether a Pokemon can evolve now. If a block is given, calls the block
# with the following parameters: # 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) def pbCheckEvolutionEx(pokemon)
return -1 if pokemon.species<=0 || pokemon.egg? || pokemon.shadowPokemon? return -1 if pokemon.species<=0 || pokemon.egg? || pokemon.shadowPokemon?
return -1 if pokemon.hasItem?(:EVERSTONE) return -1 if pokemon.hasItem?(:EVERSTONE)
return -1 if pokemon.hasAbility?(:BATTLEBOND) return -1 if pokemon.hasAbility?(:BATTLEBOND)
ret = -1 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] ret = yield pokemon,form[0],form[1],form[2]
break if ret>0 break if ret>0
end end

View File

@@ -1326,6 +1326,9 @@ end
#===============================================================================
# Open the party screen
#===============================================================================
def pbPokemonScreen def pbPokemonScreen
pbFadeOutIn { pbFadeOutIn {
sscene = PokemonParty_Scene.new sscene = PokemonParty_Scene.new
@@ -1333,3 +1336,67 @@ def pbPokemonScreen
sscreen.pbPokemonScreen sscreen.pbPokemonScreen
} }
end 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

View File

@@ -1346,3 +1346,25 @@ class PokemonSummaryScreen
return ret return ret
end end
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

View File

@@ -133,7 +133,7 @@ class PokemonRegionMap_Scene
@sprites["mapbottom"].mapdetails = pbGetMapDetails(@mapX,@mapY) @sprites["mapbottom"].mapdetails = pbGetMapDetails(@mapX,@mapY)
if playerpos && mapindex==playerpos[0] if playerpos && mapindex==playerpos[0]
@sprites["player"] = IconSprite.new(0,0,@viewport) @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"].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 @sprites["player"].y = -SQUAREHEIGHT/2+(@mapY*SQUAREHEIGHT)+(Graphics.height-@sprites["map"].bitmap.height)/2
end end

View File

@@ -54,7 +54,7 @@ class PokemonPhoneScene
addBackgroundPlane(@sprites,"bg","phonebg",@viewport) addBackgroundPlane(@sprites,"bg","phonebg",@viewport)
@sprites["icon"] = IconSprite.new(70,102,@viewport) @sprites["icon"] = IconSprite.new(70,102,@viewport)
if @trainers[0].length==4 if @trainers[0].length==4
filename = pbTrainerCharFile(@trainers[0][0]) filename = GameData::TrainerType.charset_filename(@trainers[0][0])
else else
filename = sprintf("Graphics/Characters/phone%03d",@trainers[0][0]) filename = sprintf("Graphics/Characters/phone%03d",@trainers[0][0])
end end
@@ -106,7 +106,7 @@ class PokemonPhoneScene
if @sprites["list"].index!=oldindex if @sprites["list"].index!=oldindex
trainer = @trainers[@sprites["list"].index] trainer = @trainers[@sprites["list"].index]
if trainer.length==4 if trainer.length==4
filename = pbTrainerCharFile(trainer[0]) filename = GameData::TrainerType.charset_filename(trainer[0])
else else
filename = sprintf("Graphics/Characters/phone%03d",trainer[0]) filename = sprintf("Graphics/Characters/phone%03d",trainer[0])
end end

View File

@@ -23,7 +23,7 @@ class PokemonTrainerCard_Scene
@sprites["overlay"] = BitmapSprite.new(Graphics.width,Graphics.height,@viewport) @sprites["overlay"] = BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
pbSetSystemFont(@sprites["overlay"].bitmap) pbSetSystemFont(@sprites["overlay"].bitmap)
@sprites["trainer"] = IconSprite.new(336,112,@viewport) @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"].x -= (@sprites["trainer"].bitmap.width-128)/2
@sprites["trainer"].y -= (@sprites["trainer"].bitmap.height-128) @sprites["trainer"].y -= (@sprites["trainer"].bitmap.height-128)
@sprites["trainer"].z = 2 @sprites["trainer"].z = 2

View File

@@ -36,8 +36,7 @@ class PokemonMartAdapter
end end
def getItemIcon(item) def getItemIcon(item)
return nil if !item return (item) ? GameData::Item.icon_filename(item) : nil
return pbItemIconFile(item)
end end
# Unused # Unused

View File

@@ -241,7 +241,7 @@ class HallOfFame_Scene
def createTrainerBattler def createTrainerBattler
@sprites["trainer"]=IconSprite.new(@viewport) @sprites["trainer"]=IconSprite.new(@viewport)
@sprites["trainer"].setBitmap(pbTrainerSpriteFile($Trainer.trainertype)) @sprites["trainer"].setBitmap(GameData::TrainerType.front_sprite_filename($Trainer.trainertype))
if !SINGLEROW if !SINGLEROW
@sprites["trainer"].x=Graphics.width-96 @sprites["trainer"].x=Graphics.width-96
@sprites["trainer"].y=160 @sprites["trainer"].y=160

View File

@@ -49,9 +49,9 @@ class PokemonDuel
@viewport.z = 99999 @viewport.z = 99999
@sprites = {} @sprites = {}
@sprites["player"] = IconSprite.new(-128 - 32, 96, @viewport) @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"] = 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"] = DuelWindow.new($Trainer.name, false)
@sprites["playerwindow"].x = -@sprites["playerwindow"].width @sprites["playerwindow"].x = -@sprites["playerwindow"].width
@sprites["playerwindow"].viewport = @viewport @sprites["playerwindow"].viewport = @viewport

View File

@@ -692,7 +692,7 @@ end
def pbBattleChallengeGraphic(event) def pbBattleChallengeGraphic(event)
nextTrainer=pbBattleChallenge.nextTrainer nextTrainer=pbBattleChallenge.nextTrainer
bttrainers=pbGetBTTrainers(pbBattleChallenge.currentChallenge) bttrainers=pbGetBTTrainers(pbBattleChallenge.currentChallenge)
filename=pbTrainerCharNameFile((bttrainers[nextTrainer][0] rescue 0)) filename=GameData::TrainerType.charset_filename_brief((bttrainers[nextTrainer][0] rescue 0))
begin begin
bitmap=AnimatedBitmap.new("Graphics/Characters/"+filename) bitmap=AnimatedBitmap.new("Graphics/Characters/"+filename)
bitmap.dispose bitmap.dispose

View File

@@ -574,7 +574,7 @@ $canEvolve = {}
class BabyRestriction class BabyRestriction
def isValid?(pokemon) def isValid?(pokemon)
baby=$babySpeciesData[pokemon.species] ? $babySpeciesData[pokemon.species] : 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 return baby==pokemon.species
end end
end end
@@ -584,10 +584,10 @@ end
class UnevolvedFormRestriction class UnevolvedFormRestriction
def isValid?(pokemon) def isValid?(pokemon)
baby=$babySpeciesData[pokemon.species] ? $babySpeciesData[pokemon.species] : 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 return false if baby!=pokemon.species
canEvolve=($canEvolve[pokemon.species]!=nil) ? $canEvolve[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 false if !canEvolve
return true return true
end end

View File

@@ -110,21 +110,21 @@ end
def babySpecies(move) def babySpecies(move)
if !$babySpecies[move] if !$babySpecies[move]
$babySpecies[move]=pbGetBabySpecies(move) $babySpecies[move]=EvolutionHelper.baby_species(move)
end end
return $babySpecies[move] return $babySpecies[move]
end end
def minimumLevel(move) def minimumLevel(move)
if !$minimumLevel[move] if !$minimumLevel[move]
$minimumLevel[move]=pbGetMinimumLevel(move) $minimumLevel[move]=EvolutionHelper.minimum_level(move)
end end
return $minimumLevel[move] return $minimumLevel[move]
end end
def evolutions(move) def evolutions(move)
if !$evolutions[move] if !$evolutions[move]
$evolutions[move]=pbGetEvolvedFormData(move,true) $evolutions[move]=EvolutionHelper.evolutions(move, true)
end end
return $evolutions[move] return $evolutions[move]
end end

View File

@@ -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 # Analyse audio files
#=============================================================================== #===============================================================================

View File

@@ -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 # Analyse Pokémon in the party
#=============================================================================== #===============================================================================
@@ -483,15 +416,15 @@ def pbHasEgg?(species)
species = getID(PBSpecies,species) species = getID(PBSpecies,species)
return false if !species return false if !species
# species may be unbreedable, so check its evolution's compatibilities # 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 compatSpecies = (evoSpecies && evoSpecies[0]) ? evoSpecies[0][2] : species
compat = pbGetSpeciesData(compatSpecies,0,SpeciesData::COMPATIBILITY) compat = pbGetSpeciesData(compatSpecies,0,SpeciesData::COMPATIBILITY)
compat = [compat] if !compat.is_a?(Array) compat = [compat] if !compat.is_a?(Array)
return false if compat.include?(getConst(PBEggGroups,:Undiscovered)) return false if compat.include?(getConst(PBEggGroups,:Undiscovered))
return false if compat.include?(getConst(PBEggGroups,:Ditto)) 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 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 true if species==baby # Is an egg species without incense
return false return false
end end

View File

@@ -681,7 +681,7 @@ def pbGetPlayerGraphic
return "" if id<0 || id>=8 return "" if id<0 || id>=8
meta = GameData::Metadata.get_player(id) meta = GameData::Metadata.get_player(id)
return "" if !meta return "" if !meta
return pbPlayerSpriteFile(meta[0]) return GameData::TrainerType.player_front_sprite_filename(meta[0])
end end
def pbGetPlayerTrainerType def pbGetPlayerTrainerType
@@ -1039,23 +1039,6 @@ def pbMoveTutorChoose(move,movelist=nil,bymachine=false)
return ret # Returns whether the move was learned by a Pokemon return ret # Returns whether the move was learned by a Pokemon
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
def pbConvertItemToItem(variable, array) def pbConvertItemToItem(variable, array)
item = GameData::Item.get(pbGet(variable)) item = GameData::Item.get(pbGet(variable))
pbSet(variable, nil) pbSet(variable, nil)

View File

@@ -947,7 +947,7 @@ def pbPokemonEditor
(regionallist[numb]==0) ? regionallist.pop : break (regionallist[numb]==0) ? regionallist.pop : break
numb -= 1 numb -= 1
end end
evolutions = pbGetEvolvedFormData(selection) evolutions = EvolutionHelper.evolutions(selection)
data = [] data = []
data.push(speciesname) # 0 data.push(speciesname) # 0
data.push(cname) # 1 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]) evos[sp].push([data[41][i][2],data[41][i][0],data[41][i][1],false])
end end
else else
t = pbGetEvolvedFormData(sp) t = EvolutionHelper.evolutions(sp)
for i in 0...t.length for i in 0...t.length
evos[sp].push([t[i][2],t[i][0],t[i][1],false]) evos[sp].push([t[i][2],t[i][0],t[i][1],false])
end end
@@ -1366,7 +1366,7 @@ end
def pbAppendEvoToFamilyArray(species,array,seenarray) def pbAppendEvoToFamilyArray(species,array,seenarray)
return if seenarray[species] return if seenarray[species]
array.push(species); seenarray[species] = true array.push(species); seenarray[species] = true
evos = pbGetEvolvedFormData(species) evos = EvolutionHelper.evolutions(species)
if evos.length>0 if evos.length>0
evos.sort! { |a,b| a[2]<=>b[2] } evos.sort! { |a,b| a[2]<=>b[2] }
subarray = [] subarray = []
@@ -1381,7 +1381,7 @@ def pbGetEvoFamilies
seen = [] seen = []
ret = [] ret = []
for sp in 1..PBSpecies.maxValue for sp in 1..PBSpecies.maxValue
species = pbGetBabySpecies(sp) species = EvolutionHelper.baby_species(sp)
next if seen[species] next if seen[species]
subret = [] subret = []
pbAppendEvoToFamilyArray(species,subret,seen) pbAppendEvoToFamilyArray(species,subret,seen)

View File

@@ -774,7 +774,7 @@ def pbSavePokemonData
end end
pokedata.write("Evolutions = ") pokedata.write("Evolutions = ")
count = 0 count = 0
for form in pbGetEvolvedFormData(i) for form in EvolutionHelper.evolutions(i)
method = form[0] method = form[0]
parameter = form[1] parameter = form[1]
new_species = form[2] new_species = form[2]
@@ -1189,7 +1189,7 @@ def pbSavePokemonFormsData
end end
end end
origevos = [] origevos = []
for form in pbGetEvolvedFormData(species) for form in EvolutionHelper.evolutions(species)
method = form[0] method = form[0]
parameter = form[1] parameter = form[1]
new_species = form[2] new_species = form[2]
@@ -1200,7 +1200,7 @@ def pbSavePokemonFormsData
origevos.push([method,parameter,new_species]) origevos.push([method,parameter,new_species])
end end
evos = [] evos = []
for form in pbGetEvolvedFormData(i) for form in EvolutionHelper.evolutions(i)
method = form[0] method = form[0]
parameter = form[1] parameter = form[1]
new_species = form[2] new_species = form[2]

View File

@@ -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 module MapCoordsProperty
def self.set(settingname,oldsetting) def self.set(settingname,oldsetting)
chosenmap = pbListScreen(settingname,MapLister.new((oldsetting) ? oldsetting[0] : 0)) chosenmap = pbListScreen(settingname,MapLister.new((oldsetting) ? oldsetting[0] : 0))
@@ -624,7 +661,7 @@ end
module RegionMapCoordsProperty module RegionMapCoordsProperty
def self.set(_settingname,oldsetting) def self.set(_settingname,oldsetting)
regions = getMapNameList regions = self.getMapNameList
selregion = -1 selregion = -1
if regions.length==0 if regions.length==0
pbMessage(_INTL("No region maps are defined.")) pbMessage(_INTL("No region maps are defined."))
@@ -650,6 +687,18 @@ module RegionMapCoordsProperty
def self.format(value) def self.format(value)
return value.inspect return value.inspect
end 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 end

View File

@@ -121,10 +121,8 @@ def pbListScreenBlock(title,lister)
Input.update Input.update
end end
#=============================================================================== #===============================================================================
# General listers #
#=============================================================================== #===============================================================================
class GraphicsLister class GraphicsLister
def initialize(folder,selection) def initialize(folder,selection)
@@ -196,8 +194,9 @@ class GraphicsLister
end end
end end
#===============================================================================
#
#===============================================================================
class MusicFileLister class MusicFileLister
def initialize(bgm,setting) def initialize(bgm,setting)
@oldbgm = getPlayingBGM @oldbgm = getPlayingBGM
@@ -263,8 +262,9 @@ class MusicFileLister
end end
end end
#===============================================================================
#
#===============================================================================
class MapLister class MapLister
def initialize(selmap,addGlobal=false) def initialize(selmap,addGlobal=false)
@sprite = SpriteWrapper.new @sprite = SpriteWrapper.new
@@ -322,8 +322,9 @@ class MapLister
end end
end end
#===============================================================================
#
#===============================================================================
class SpeciesLister class SpeciesLister
def initialize(selection,includeNew=false) def initialize(selection,includeNew=false)
@selection = selection @selection = selection
@@ -373,8 +374,9 @@ class SpeciesLister
def refresh(index); end def refresh(index); end
end end
#===============================================================================
#
#===============================================================================
class ItemLister class ItemLister
def initialize(selection = 0, includeNew = false) def initialize(selection = 0, includeNew = false)
@sprite = ItemIconSprite.new(Graphics.width * 3 / 4, Graphics.height / 2, nil) @sprite = ItemIconSprite.new(Graphics.width * 3 / 4, Graphics.height / 2, nil)
@@ -432,8 +434,9 @@ class ItemLister
end end
end end
#===============================================================================
#
#===============================================================================
class TrainerTypeLister class TrainerTypeLister
def initialize(selection = 0, includeNew = false) def initialize(selection = 0, includeNew = false)
@sprite = IconSprite.new(Graphics.width * 3 / 4, (Graphics.height - 64) / 2 + 64) @sprite = IconSprite.new(Graphics.width * 3 / 4, (Graphics.height - 64) / 2 + 64)
@@ -490,7 +493,7 @@ class TrainerTypeLister
@sprite.bitmap.dispose if @sprite.bitmap @sprite.bitmap.dispose if @sprite.bitmap
return if index < 0 return if index < 0
begin begin
@sprite.setBitmap(pbTrainerSpriteFile(@ids[index]), 0) @sprite.setBitmap(GameData::TrainerType.front_sprite_filename(@ids[index]), 0)
rescue rescue
@sprite.setBitmap(nil) @sprite.setBitmap(nil)
end end
@@ -501,8 +504,9 @@ class TrainerTypeLister
end end
end end
#===============================================================================
#
#===============================================================================
class TrainerBattleLister class TrainerBattleLister
def initialize(selection,includeNew) def initialize(selection,includeNew)
@sprite = IconSprite.new(Graphics.width * 3 / 4, (Graphics.height / 2) + 32) @sprite = IconSprite.new(Graphics.width * 3 / 4, (Graphics.height / 2) + 32)
@@ -577,7 +581,7 @@ class TrainerBattleLister
@sprite.bitmap.dispose if @sprite.bitmap @sprite.bitmap.dispose if @sprite.bitmap
return if index<0 return if index<0
begin begin
@sprite.setBitmap(pbTrainerSpriteFile(@ids[index]),0) @sprite.setBitmap(GameData::TrainerType.front_sprite_filename(@ids[index]),0)
rescue rescue
@sprite.setBitmap(nil) @sprite.setBitmap(nil)
end end

View File

@@ -8,7 +8,7 @@ def pbGetLegalMoves(species)
next if !i.move next if !i.move
moves.push(i.move) if tmdat[i.move] && tmdat[i.move].include?(species) moves.push(i.move) if tmdat[i.move] && tmdat[i.move].include?(species)
end end
babyspecies = pbGetBabySpecies(species) babyspecies = EvolutionHelper.baby_species(species)
eggMoves = pbGetSpeciesEggMoves(babyspecies) eggMoves = pbGetSpeciesEggMoves(babyspecies)
eggMoves.each { |m| moves.push(m) } eggMoves.each { |m| moves.push(m) }
moves |= [] moves |= []

View File

@@ -1,8 +1,6 @@
#=============================================================================== #===============================================================================
# Edits the terrain tags of tiles in tilesets. #
#=============================================================================== #===============================================================================
begin
def pbTilesetWrapper def pbTilesetWrapper
return PokemonDataWrapper.new( return PokemonDataWrapper.new(
"Data/Tilesets.rxdata", "Data/Tilesets.rxdata",
@@ -14,8 +12,9 @@ def pbTilesetWrapper
) )
end end
#===============================================================================
# Edits the terrain tags of tiles in tilesets.
#===============================================================================
class PokemonTilesetScene class PokemonTilesetScene
TILESET_WIDTH = 256 TILESET_WIDTH = 256
TILE_SIZE = 32 TILE_SIZE = 32
@@ -203,11 +202,3 @@ def pbTilesetScreen
scene.pbStartScene scene.pbStartScene
} }
end end
rescue Exception
if $!.is_a?(SystemExit) || "#{$!.class}"=="Reset"
raise $!
end
end

View File

@@ -1,5 +1,5 @@
#=============================================================================== #===============================================================================
# Miniature game map/Town Map drawing # Miniature game map drawing
#=============================================================================== #===============================================================================
class MapSprite class MapSprite
def initialize(map,viewport=nil) def initialize(map,viewport=nil)
@@ -34,8 +34,9 @@ class MapSprite
end end
end end
#===============================================================================
#
#===============================================================================
class SelectionSprite < Sprite class SelectionSprite < Sprite
def initialize(viewport=nil) def initialize(viewport=nil)
@sprite=Sprite.new(viewport) @sprite=Sprite.new(viewport)
@@ -82,8 +83,9 @@ class SelectionSprite < Sprite
end end
end end
#===============================================================================
#
#===============================================================================
class RegionMapSprite class RegionMapSprite
def initialize(map,viewport=nil) def initialize(map,viewport=nil)
@sprite=Sprite.new(viewport) @sprite=Sprite.new(viewport)
@@ -101,6 +103,20 @@ class RegionMapSprite
@sprite.z=value @sprite.z=value
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 getXY def getXY
return nil if !Input.triggerex?(Input::LeftMouseKey) return nil if !Input.triggerex?(Input::LeftMouseKey)
mouse=Mouse::getMousePos(true) mouse=Mouse::getMousePos(true)
@@ -117,125 +133,6 @@ class RegionMapSprite
end end
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) # Visual Editor (map connections)
#=============================================================================== #===============================================================================
@@ -686,8 +583,9 @@ class MapScreenScene
end end
end end
#===============================================================================
#
#===============================================================================
def pbConnectionsEditor def pbConnectionsEditor
pbCriticalCode { pbCriticalCode {
mapscreen = MapScreenScene.new mapscreen = MapScreenScene.new

View File

@@ -209,6 +209,7 @@ end
#=============================================================================== #===============================================================================
# Encoding and decoding # Encoding and decoding
#=============================================================================== #===============================================================================
# Unused
def intSize(value) def intSize(value)
return 1 if value<0x80 return 1 if value<0x80
return 2 if value<0x4000 return 2 if value<0x4000
@@ -217,6 +218,7 @@ def intSize(value)
return 5 return 5
end end
# Unused
def encodeInt(strm,value) def encodeInt(strm,value)
num = 0 num = 0
loop do loop do
@@ -230,6 +232,7 @@ def encodeInt(strm,value)
end end
end end
# Unused
def decodeInt(strm) def decodeInt(strm)
bits = 0 bits = 0
curbyte = 0 curbyte = 0
@@ -242,15 +245,18 @@ def decodeInt(strm)
return ret return ret
end end
# Unused
def strSize(str) def strSize(str)
return str.length+intSize(str.length) return str.length+intSize(str.length)
end end
# Unused
def encodeString(strm,str) def encodeString(strm,str)
encodeInt(strm,str.length) encodeInt(strm,str.length)
strm.write(str) strm.write(str)
end end
# Unused
def decodeString(strm) def decodeString(strm)
len = decodeInt(strm) len = decodeInt(strm)
return strm.read(len) return strm.read(len)
@@ -279,6 +285,7 @@ def pbFindScript(a,name)
return nil return nil
end end
# TODO: Will be unused once PBSpecies is abolished. Method above only used by this one.
def pbAddScript(script,sectionname) def pbAddScript(script,sectionname)
begin begin
scripts = load_data("Data/Constants.rxdata") scripts = load_data("Data/Constants.rxdata")

View File

@@ -523,13 +523,11 @@ module Compiler
# doesn't have a charset # doesn't have a charset
if firstpage.graphic.character_name=="" && GameData::TrainerType.exists?(trtype) if firstpage.graphic.character_name=="" && GameData::TrainerType.exists?(trtype)
trainerid = GameData::TrainerType.get(trtype).id trainerid = GameData::TrainerType.get(trtype).id
if trainerid filename = GameData::TrainerType.charset_filename_brief(trainerid)
filename = pbTrainerCharNameFile(trainerid)
if FileTest.image_exist?("Graphics/Characters/"+filename) if FileTest.image_exist?("Graphics/Characters/"+filename)
firstpage.graphic.character_name = sprintf(filename) firstpage.graphic.character_name = sprintf(filename)
end end
end end
end
# Create strings that will be used repeatedly # Create strings that will be used repeatedly
safetrcombo = sprintf(":%s,\"%s\"",trtype,safequote(trname)) # :YOUNGSTER,"Joey" safetrcombo = sprintf(":%s,\"%s\"",trtype,safequote(trname)) # :YOUNGSTER,"Joey"
introplay = sprintf("pbTrainerIntro(:%s)",trtype) introplay = sprintf("pbTrainerIntro(:%s)",trtype)