Created and implemented GameData::Species

This commit is contained in:
Maruno17
2020-12-24 21:25:16 +00:00
parent 1ffeddc41c
commit ad21fc92cb
91 changed files with 6733 additions and 7963 deletions

View File

@@ -294,12 +294,12 @@ def pbDebugMenuActions(cmd="",sprites=nil,viewport=nil)
#=============================================================================
when "testwildbattle"
species = pbChooseSpeciesList
if species!=0
if species
params = ChooseNumberParams.new
params.setRange(1,PBExperience.maxLevel)
params.setInitialValue(5)
params.setCancelValue(0)
level = pbMessageChooseNumber(_INTL("Set the wild {1}'s level.",PBSpecies.getName(species)),params)
level = pbMessageChooseNumber(_INTL("Set the wild {1}'s level.", GameData::Species.get(species).name), params)
if level>0
$PokemonTemp.encounterType = -1
pbWildBattle(species,level)
@@ -343,12 +343,12 @@ def pbDebugMenuActions(cmd="",sprites=nil,viewport=nil)
size0 = newSize if newSize>0
elsif pkmnCmd==pkmnCmds.length-3 # Add Pokémon
species = pbChooseSpeciesList
if species!=0
if species
params = ChooseNumberParams.new
params.setRange(1,PBExperience.maxLevel)
params.setInitialValue(5)
params.setCancelValue(0)
level = pbMessageChooseNumber(_INTL("Set the wild {1}'s level.",PBSpecies.getName(species)),params)
level = pbMessageChooseNumber(_INTL("Set the wild {1}'s level.", GameData::Species.get(species).name), params)
if level>0
pkmn.push(Pokemon.new(species,level))
end
@@ -524,7 +524,7 @@ def pbDebugMenuActions(cmd="",sprites=nil,viewport=nil)
#=============================================================================
when "addpokemon"
species = pbChooseSpeciesList
if species!=0
if species
params = ChooseNumberParams.new
params.setRange(1,PBExperience.maxLevel)
params.setInitialValue(5)
@@ -548,48 +548,41 @@ def pbDebugMenuActions(cmd="",sprites=nil,viewport=nil)
end
pbMessage(_INTL("All eggs in your party now require one step to hatch."))
when "fillboxes"
$Trainer.formseen = [] if !$Trainer.formseen
$Trainer.formlastseen = [] if !$Trainer.formlastseen
added = 0; completed = true
speciesData = pbLoadSpeciesData
formdata = pbLoadFormToSpecies
for i in 1..PBSpecies.maxValue
if added>=NUM_STORAGE_BOXES*30
completed = false; break
end
cname = getConstantName(PBSpecies,i) rescue nil
next if !cname
pkmn = Pokemon.new(i,50)
$PokemonStorage[(i-1)/$PokemonStorage.maxPokemon(0),
(i-1)%$PokemonStorage.maxPokemon(0)] = pkmn
# Record all forms of this Pokémon as seen and owned
$Trainer.seen[i] = true
$Trainer.owned[i] = true
$Trainer.formseen[i] = [[],[]]
formdata[i] = [i] if !formdata[i]
for form in 0...formdata[i].length
next if !formdata[i][form] || formdata[i][form]==0
fSpecies = pbGetFSpeciesFromForm(i,form)
formname = pbGetMessage(MessageTypes::FormNames,fSpecies)
genderRate = speciesData[i][SpeciesData::GENDER_RATE] || 0
gender = (genderRate==PBGenderRates::AlwaysFemale) ? 1 : 0
if form==0
case genderRate
when PBGenderRates::AlwaysMale,
PBGenderRates::AlwaysFemale,
PBGenderRates::Genderless
$Trainer.formseen[i][gender][form] = true
$Trainer.formlastseen[i] = [gender,form]
else # Both male and female
$Trainer.formseen[i][0][form] = true
$Trainer.formseen[i][1][form] = true
$Trainer.formlastseen[i] = [0,form]
end
elsif formname && formname!=""
$Trainer.formseen[i][gender][form] = true
$Trainer.formseen = {} if !$Trainer.formseen
$Trainer.formlastseen = {} if !$Trainer.formlastseen
added = 0
box_qty = $PokemonStorage.maxPokemon(0)
completed = true
GameData::Species.each do |species_data|
sp = species_data.species
f = species_data.form
# Record each form of each species as seen and owned
$Trainer.formseen[sp] = [[], []] if !$Trainer.formseen[sp]
if f == 0
$Trainer.seen[sp] = true
$Trainer.owned[sp] = true
if [PBGenderRates::AlwaysMale, PBGenderRates::AlwaysFemale,
PBGenderRates::Genderless].include?(species_data.gender_rate)
g = (species_data.gender_rate == PBGenderRates::AlwaysFemale) ? 1 : 0
$Trainer.formseen[sp][g][f] = true
$Trainer.formlastseen[sp] = [g, f] if f == 0
else # Both male and female
$Trainer.formseen[sp][0][f] = true
$Trainer.formseen[sp][1][f] = true
$Trainer.formlastseen[i] = [0, f] if f == 0
end
elsif species_data.real_form_name && !species_data.real_form_name.empty?
g = (species_data.gender_rate == PBGenderRates::AlwaysFemale) ? 1 : 0
$Trainer.formseen[sp][g][f] = true
end
# Add Pokémon (if form 0)
next if f != 0
if added >= NUM_STORAGE_BOXES * box_qty
completed = false
next
end
added += 1
$PokemonStorage[(added - 1) / box_qty, (added - 1) % box_qty] = Pokemon.new(sp, 50)
end
pbMessage(_INTL("Storage boxes were filled with one Pokémon of each species."))
if !completed

View File

@@ -237,7 +237,7 @@ def pbDebugDayCare
pkmn = $PokemonGlobal.daycare[i][0]
initlevel = $PokemonGlobal.daycare[i][1]
leveldiff = pkmn.level-initlevel
textpos.push([pkmn.name+" ("+PBSpecies.getName(pkmn.species)+")",8+i*Graphics.width/2,y,0,base,shadow])
textpos.push(["#{pkmn.name} (#{pkmn.speciesName})",8+i*Graphics.width/2,y,0,base,shadow])
y += 32
if pkmn.male?
textpos.push([_INTL("Male ♂"),8+i*Graphics.width/2,y,0,Color.new(128,192,248),shadow])
@@ -347,8 +347,7 @@ def pbDebugDayCare
pbDayCareGenerateEgg
$PokemonGlobal.daycareEgg = 0
$PokemonGlobal.daycareEggSteps = 0
pbMessage(_INTL("Collected the {1} egg.",
PBSpecies.getName($Trainer.lastParty.species)))
pbMessage(_INTL("Collected the {1} egg.", $Trainer.lastParty.speciesName))
refresh = true
end
end
@@ -401,7 +400,7 @@ class SpriteWindow_DebugRoamers < Window_DrawableCommand
self.shadowtext(_INTL("[Clear all current roamer locations]"),rect.x,rect.y,nameWidth,rect.height)
else
pkmn = ROAMING_SPECIES[index]
name = PBSpecies.getName(getID(PBSpecies,pkmn[0]))+" (Lv. #{pkmn[1]})"
name = GameData::Species.get(pkmn[0]).name + " (Lv. #{pkmn[1]})"
status = ""
statuscolor = 0
if pkmn[2]<=0 || $game_switches[pkmn[2]]
@@ -528,32 +527,39 @@ end
#===============================================================================
def pbCreatePokemon
party = []
species = [:PIKACHU,:PIDGEOTTO,:KADABRA,:GYARADOS,:DIGLETT,:CHANSEY]
species = [:PIKACHU, :PIDGEOTTO, :KADABRA, :GYARADOS, :DIGLETT, :CHANSEY]
for id in species
party.push(getConst(PBSpecies,id)) if hasConst?(PBSpecies,id)
party.push(id) if GameData::Species.exists?(id)
end
# Species IDs of the Pokémon to be created
for i in 0...party.length
species = party[i]
# Generate Pokémon with species and level 20
$Trainer.party[i] = Pokemon.new(species,20)
$Trainer.seen[species] = true # Set this species to seen and owned
$Trainer.party[i] = Pokemon.new(species, 20)
$Trainer.seen[species] = true
$Trainer.owned[species] = true
pbSeenForm($Trainer.party[i])
case species
when :PIDGEOTTO
$Trainer.party[i].pbLearnMove(:FLY)
when :KADABRA
$Trainer.party[i].pbLearnMove(:FLASH)
$Trainer.party[i].pbLearnMove(:TELEPORT)
when :GYARADOS
$Trainer.party[i].pbLearnMove(:SURF)
$Trainer.party[i].pbLearnMove(:DIVE)
$Trainer.party[i].pbLearnMove(:WATERFALL)
when :DIGLETT
$Trainer.party[i].pbLearnMove(:DIG)
$Trainer.party[i].pbLearnMove(:CUT)
$Trainer.party[i].pbLearnMove(:HEADBUTT)
$Trainer.party[i].pbLearnMove(:ROCKSMASH)
when :CHANSEY
$Trainer.party[i].pbLearnMove(:SOFTBOILED)
$Trainer.party[i].pbLearnMove(:STRENGTH)
$Trainer.party[i].pbLearnMove(:SWEETSCENT)
end
end
$Trainer.party[1].pbLearnMove(:FLY)
$Trainer.party[2].pbLearnMove(:FLASH)
$Trainer.party[2].pbLearnMove(:TELEPORT)
$Trainer.party[3].pbLearnMove(:SURF)
$Trainer.party[3].pbLearnMove(:DIVE)
$Trainer.party[3].pbLearnMove(:WATERFALL)
$Trainer.party[4].pbLearnMove(:DIG)
$Trainer.party[4].pbLearnMove(:CUT)
$Trainer.party[4].pbLearnMove(:HEADBUTT)
$Trainer.party[4].pbLearnMove(:ROCKSMASH)
$Trainer.party[5].pbLearnMove(:SOFTBOILED)
$Trainer.party[5].pbLearnMove(:STRENGTH)
$Trainer.party[5].pbLearnMove(:SWEETSCENT)
for i in 0...party.length
$Trainer.party[i].pbRecordFirstMoves
end

View File

@@ -533,7 +533,7 @@ module PokemonDebugMixin
case cmd
when 0 # Set species
species = pbChooseSpeciesList(pkmn.species)
if species!=0 && species!=pkmn.species
if species && species != pkmn.species
pkmn.species = species
pkmn.calcStats
pbSeenForm(pkmn) if !settingUpBattle
@@ -541,25 +541,24 @@ module PokemonDebugMixin
end
when 1 # Set form
cmd2 = 0
formcmds = [[],[]]
formdata = pbLoadFormToSpecies
formdata[pkmn.species] = [pkmn.species] if !formdata[pkmn.species]
for form in 0...formdata[pkmn.species].length
fSpecies = pbGetFSpeciesFromForm(pkmn.species,form)
formname = pbGetMessage(MessageTypes::FormNames,fSpecies)
formname = _INTL("Unnamed form") if !formname || formname==""
formname = _INTL("{1}: {2}",form,formname)
formcmds[0].push(form); formcmds[1].push(formname)
cmd2 = form if pkmn.form==form
formcmds = [[], []]
GameData::Species.each do |sp|
next if sp.species != pkmn.species
form_name = sp.form_name
form_name = _INTL("Unnamed form") if !form_name || form_name.empty?
form_name = sprintf("%d: %s", sp.form, form_name)
formcmds[0].push(sp.form)
formcmds[1].push(form_name)
cmd2 = sp.form if pkmn.form == sp.form
end
if formcmds[0].length<=1
pbDisplay(_INTL("Species {1} only has one form.",pkmn.speciesName))
if formcmds[0].length <= 1
pbDisplay(_INTL("Species {1} only has one form.", pkmn.speciesName))
else
cmd2 = pbShowCommands(_INTL("Set the Pokémon's form."),formcmds[1],cmd2)
next if cmd2<0
cmd2 = pbShowCommands(_INTL("Set the Pokémon's form."), formcmds[1], cmd2)
next if cmd2 < 0
f = formcmds[0][cmd2]
if f!=pkmn.form
if MultipleForms.hasFunction?(pkmn,"getForm")
if f != pkmn.form
if MultipleForms.hasFunction?(pkmn, "getForm")
next if !pbConfirm(_INTL("This species decides its own form. Override?"))
pkmn.forcedForm = f
end
@@ -599,7 +598,7 @@ module PokemonDebugMixin
when "setnickname"
cmd = 0
loop do
speciesname = PBSpecies.getName(pkmn.species)
speciesname = pkmn.speciesName
msg = [_INTL("{1} has the nickname {2}.",speciesname,pkmn.name),
_INTL("{1} has no nickname.",speciesname)][pkmn.name==speciesname ? 1 : 0]
cmd = pbShowCommands(msg,[
@@ -722,18 +721,18 @@ module PokemonDebugMixin
case cmd
when 0 # Make egg
if !pkmn.egg? && (pbHasEgg?(pkmn.species) ||
pbConfirm(_INTL("{1} cannot legally be an egg. Make egg anyway?",PBSpecies.getName(pkmn.species))))
pbConfirm(_INTL("{1} cannot legally be an egg. Make egg anyway?", pkmn.speciesName)))
pkmn.level = EGG_LEVEL
pkmn.calcStats
pkmn.name = _INTL("Egg")
pkmn.eggsteps = pbGetSpeciesData(pkmn.species,pkmn.form,SpeciesData::STEPS_TO_HATCH)
pkmn.eggsteps = pkmn.species_data.hatch_steps
pkmn.hatchedMap = 0
pkmn.obtainMode = 1
pbRefreshSingle(pkmnid)
end
when 1 # Make Pokémon
if pkmn.egg?
pkmn.name = PBSpecies.getName(pkmn.species)
pkmn.name = pkmn.speciesName
pkmn.eggsteps = 0
pkmn.hatchedMap = 0
pkmn.obtainMode = 0

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -263,16 +263,16 @@ end
module SpeciesProperty
def self.set(_settingname,oldsetting)
ret = pbChooseSpeciesList((oldsetting) ? oldsetting : 1)
return (ret<=0) ? (oldsetting) ? oldsetting : 0 : ret
ret = pbChooseSpeciesList(oldsetting || nil)
return ret || oldsetting
end
def self.defaultValue
return 0
return nil
end
def self.format(value)
return (value) ? PBSpecies.getName(value) : "-"
return (value && GameData::Species.exists?(value)) ? GameData::Species.get(value).real_name : "-"
end
end
@@ -1258,15 +1258,17 @@ class EvolutionsProperty
param_type = PBEvolution.getFunction(realcmds[i][0], "parameterType")
has_param = !PBEvolution.hasFunction?(realcmds[i][0], "parameterType") || param_type != nil
if has_param
if param_type
level = (Object.const_get(param_type).getName(level) rescue getConstantName(param_type, level) rescue level)
if param_type && !GameData.const_defined?(param_type.to_sym)
level = getConstantName(param_type, level)
else
level = level.to_s
end
level = "???" if !level
level = "???" if !level || level.empty?
commands.push(_INTL("{1}: {2}, {3}",
PBSpecies.getName(realcmds[i][2]),@methods[realcmds[i][0]],level.to_s))
GameData::Species.get(realcmds[i][2]).name, @methods[realcmds[i][0]], level.to_s))
else
commands.push(_INTL("{1}: {2}",
PBSpecies.getName(realcmds[i][2]),@methods[realcmds[i][0]]))
GameData::Species.get(realcmds[i][2]).name, @methods[realcmds[i][0]]))
end
end
cmd[1] = i if oldsel>=0 && realcmds[i][3]==oldsel
@@ -1290,7 +1292,7 @@ class EvolutionsProperty
if entry[0]==-1 # Add new evolution path
pbMessage(_INTL("Choose an evolved form, method and parameter."))
newspecies = pbChooseSpeciesList
if newspecies>0
if newspecies
newmethod = pbMessage(_INTL("Choose an evolution method."),@methods,-1)
if newmethod>0
newparam = -1
@@ -1303,7 +1305,7 @@ class EvolutionsProperty
newparam = pbChooseItemList
when :Move
newparam = pbChooseMoveList
when :PBSpecies
when :Species
newparam = pbChooseSpeciesList
when :Type
newparam = pbChooseTypeList
@@ -1343,7 +1345,7 @@ class EvolutionsProperty
_INTL("Change parameter"),_INTL("Delete"),_INTL("Cancel")],5)
if cmd2==0 # Change species
newspecies = pbChooseSpeciesList(entry[2])
if newspecies>0
if newspecies
havemove = -1
for i in 0...realcmds.length
havemove = realcmds[i][3] if realcmds[i][0]==entry[0] &&
@@ -1391,7 +1393,7 @@ class EvolutionsProperty
newparam = pbChooseItemList(entry[1])
when :Move
newparam = pbChooseMoveList(entry[1])
when :PBSpecies
when :Species
newparam = pbChooseSpeciesList(entry[1])
when :Type
newparam = pbChooseTypeList(entry[1])
@@ -1464,11 +1466,13 @@ class EvolutionsProperty
ret << "," if i>0
param = value[i][1]
param_type = PBEvolution.getFunction(value[i][0], "parameterType")
if param_type
param = (Object.const_get(param_type).getName(param) rescue getConstantName(param_type, param) rescue param)
if param_type && !GameData.const_defined?(param_type.to_sym)
param = getConstantName(param_type, param)
else
param = param.to_s
end
param = "" if !param
ret << sprintf("#{PBSpecies.getName(value[i][2])},#{@methods[value[i][0]]},#{param}")
ret << sprintf("#{GameData::Species.get(value[i][2]).name},#{@methods[value[i][0]]},#{param}")
end
return ret
end

View File

@@ -326,12 +326,11 @@ end
#
#===============================================================================
class SpeciesLister
def initialize(selection,includeNew=false)
def initialize(selection = 0, includeNew = false)
@selection = selection
@commands = []
@ids = []
@includeNew = includeNew
@trainers = nil
@index = 0
end
@@ -346,28 +345,27 @@ class SpeciesLister
@commands.clear
@ids.clear
cmds = []
for i in 1..PBSpecies.maxValue
cname = getConstantName(PBSpecies,i) rescue next
name = PBSpecies.getName(i)
cmds.push([i,name]) if name && name!=""
GameData::Species.each do |species|
next if species.form != 0
cmds.push([species.id_number, species.id, species.real_name])
end
cmds.sort! { |a,b| a[1]<=>b[1] }
cmds.sort! { |a, b| a[2].downcase <=> b[2].downcase }
if @includeNew
@commands.push(_INTL("[NEW SPECIES]"))
@ids.push(-1)
@ids.push(true)
end
for i in cmds
@commands.push(sprintf("%03d: %s",i[0],i[1]))
@ids.push(i[0])
@commands.push(sprintf("%03d: %s", i[0], i[2]))
@ids.push(i[1])
end
@index = @selection
@index = @commands.length-1 if @index>=@commands.length
@index = 0 if @index<0
@index = @commands.length - 1 if @index >= @commands.length
@index = 0 if @index < 0
return @commands
end
def value(index)
return nil if index<0
return nil if index < 0
return @ids[index]
end
@@ -385,7 +383,6 @@ class ItemLister
@commands = []
@ids = []
@includeNew = includeNew
@trainers = nil
@index = 0
end
@@ -593,7 +590,7 @@ class TrainerBattleLister
if !@includeNew || index>0
@trainers[(@includeNew) ? index-1 : index][3].each_with_index do |p,i|
text += "\r\n" if i>0
text += sprintf("%s Lv.%d",PBSpecies.getName(p[TrainerData::SPECIES]),p[TrainerData::LEVEL])
text += sprintf("%s Lv.%d",GameData::Species.get(p[TrainerData::SPECIES]).name, p[TrainerData::LEVEL])
end
end
@pkmnList.text = text

View File

@@ -1,17 +1,12 @@
def pbGetLegalMoves(species)
species_data = GameData::Species.get(species)
moves = []
return moves if !species || species<=0
moveset = pbGetSpeciesMoveset(species)
moveset.each { |m| moves.push(m[1]) }
tmdat = pbLoadSpeciesTMData
GameData::Item.each do |i|
next if !i.move
moves.push(i.move) if tmdat[i.move] && tmdat[i.move].include?(species)
end
return moves if !species_data
species_data.moves.each { |m| moves.push(m[1]) }
species_data.tutor_moves.each { |m| moves.push(m[1]) }
babyspecies = EvolutionHelper.baby_species(species)
eggMoves = pbGetSpeciesEggMoves(babyspecies)
eggMoves.each { |m| moves.push(m) }
moves |= []
GameData::Species.get(babyspecies).egg_moves.each { |m| moves.push(m) }
moves |= [] # Remove duplicates
return moves
end
@@ -215,26 +210,19 @@ def pbGetHabitatConst(i)
return ret
end
def pbGetSpeciesConst(i)
return MakeshiftConsts.get(MessageTypes::Species,i,PBSpecies)
end
#===============================================================================
# List all members of a class
#===============================================================================
# Displays a list of all Pokémon species, and returns the ID of the species
# selected (or 0 if the selection was canceled). "default", if specified, is the
# ID of the species to initially select. Pressing Input::A will toggle the list
# sorting between numerical and alphabetical.
def pbChooseSpeciesList(default=0)
# selected (or nil if the selection was canceled). "default", if specified, is
# the ID of the species to initially select. Pressing Input::A will toggle the
# list sorting between numerical and alphabetical.
def pbChooseSpeciesList(default = nil)
commands = []
for i in 1..PBSpecies.maxValue
cname = getConstantName(PBSpecies,i) rescue nil
commands.push([i,PBSpecies.getName(i)]) if cname
end
return pbChooseList(commands,default,0,-1)
GameData::Species.each { |s| commands.push([s.id_number, s.real_name, s.id]) if s.form == 0 }
return pbChooseList(commands, default, nil, -1)
end
# Displays a list of all moves, and returns the ID of the move selected (or nil
@@ -243,7 +231,7 @@ end
# numerical and alphabetical.
def pbChooseMoveList(default = nil)
commands = []
GameData::Move.each { |i| commands.push([i.id_number, i.name, i.id]) }
GameData::Move.each { |i| commands.push([i.id_number, i.real_name, i.id]) }
return pbChooseList(commands, default, nil, -1)
end
@@ -407,10 +395,10 @@ def pbCommands3(cmdwindow,commands,cmdIfCancel,defaultindex=-1,noresize=false)
elsif Input.repeat?(Input::DOWN)
command = [2,cmdwindow.index]
break
elsif Input.press?(Input::LEFT)
elsif Input.trigger?(Input::LEFT)
command = [3,cmdwindow.index]
break
elsif Input.press?(Input::RIGHT)
elsif Input.trigger?(Input::RIGHT)
command = [4,cmdwindow.index]
break
end

View File

@@ -4,50 +4,45 @@
def findBottom(bitmap)
return 0 if !bitmap
for i in 1..bitmap.height
for j in 0..bitmap.width-1
return bitmap.height-i if bitmap.get_pixel(j,bitmap.height-i).alpha>0
for j in 0..bitmap.width - 1
return bitmap.height - i if bitmap.get_pixel(j, bitmap.height - i).alpha > 0
end
end
return 0
end
def pbAutoPositionAll
metrics = pbLoadSpeciesMetrics
for i in 1..PBSpecies.maxValueF
s = pbGetSpeciesFromFSpecies(i)
Graphics.update if i%50==0
bitmap1 = pbLoadSpeciesBitmap(s[0],false,s[1],false,false,true)
bitmap2 = pbLoadSpeciesBitmap(s[0],false,s[1])
metrics[SpeciesData::METRIC_PLAYER_X][i] = 0 # Player's x
GameData::Species.each do |sp|
Graphics.update if sp.id_number % 50 == 0
bitmap1 = GameData::Species.sprite_bitmap(sp.species, sp.form, nil, nil, nil, true)
bitmap2 = GameData::Species.sprite_bitmap(sp.species, sp.form)
if bitmap1 && bitmap1.bitmap # Player's y
metrics[SpeciesData::METRIC_PLAYER_Y][i] = (bitmap1.height-(findBottom(bitmap1.bitmap)+1))/2
sp.back_sprite_x = 0
sp.back_sprite_y = (bitmap1.height - (findBottom(bitmap1.bitmap) + 1)) / 2
end
metrics[SpeciesData::METRIC_ENEMY_X][i] = 0 # Foe's x
if bitmap2 && bitmap2.bitmap # Foe's y
metrics[SpeciesData::METRIC_ENEMY_Y][i] = (bitmap2.height-(findBottom(bitmap2.bitmap)+1))/2
metrics[SpeciesData::METRIC_ENEMY_Y][i] += 4 # Just because
sp.front_sprite_x = 0
sp.front_sprite_y = (bitmap2.height - (findBottom(bitmap2.bitmap) + 1)) / 2
sp.front_sprite_y += 4 # Just because
end
metrics[SpeciesData::METRIC_ALTITUDE][i] = 0 # Foe's altitude, not used now
metrics[SpeciesData::METRIC_SHADOW_X][i] = 0 # Shadow's x
metrics[SpeciesData::METRIC_SHADOW_SIZE][i] = 2 # Shadow size
sp.front_sprite_altitude = 0 # Shouldn't be used
sp.shadow_x = 0
sp.shadow_size = 2
bitmap1.dispose if bitmap1
bitmap2.dispose if bitmap2
end
save_data(metrics,"Data/species_metrics.dat")
$PokemonTemp.speciesMetrics = nil
GameData::Species.save
pbSavePokemonData
pbSavePokemonFormsData
end
#===============================================================================
#
#===============================================================================
class SpritePositioner
def pbOpen
@sprites = {}
@viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
@viewport.z = 99999
battlebg = "Graphics/Battlebacks/indoor1_bg"
playerbase = "Graphics/Battlebacks/indoor1_base0"
@@ -56,21 +51,21 @@ class SpritePositioner
@sprites["battle_bg"].setBitmap(battlebg)
@sprites["battle_bg"].z = 0
baseX, baseY = PokeBattle_SceneConstants.pbBattlerPosition(0)
@sprites["base_0"] = IconSprite.new(baseX,baseY,@viewport)
@sprites["base_0"] = IconSprite.new(baseX, baseY, @viewport)
@sprites["base_0"].setBitmap(playerbase)
@sprites["base_0"].x -= @sprites["base_0"].bitmap.width/2 if @sprites["base_0"].bitmap
@sprites["base_0"].x -= @sprites["base_0"].bitmap.width / 2 if @sprites["base_0"].bitmap
@sprites["base_0"].y -= @sprites["base_0"].bitmap.height if @sprites["base_0"].bitmap
@sprites["base_0"].z = 1
baseX, baseY = PokeBattle_SceneConstants.pbBattlerPosition(1)
@sprites["base_1"] = IconSprite.new(baseX,baseY,@viewport)
@sprites["base_1"] = IconSprite.new(baseX, baseY, @viewport)
@sprites["base_1"].setBitmap(enemybase)
@sprites["base_1"].x -= @sprites["base_1"].bitmap.width/2 if @sprites["base_1"].bitmap
@sprites["base_1"].y -= @sprites["base_1"].bitmap.height/2 if @sprites["base_1"].bitmap
@sprites["base_1"].x -= @sprites["base_1"].bitmap.width / 2 if @sprites["base_1"].bitmap
@sprites["base_1"].y -= @sprites["base_1"].bitmap.height / 2 if @sprites["base_1"].bitmap
@sprites["base_1"].z = 1
@sprites["messageBox"] = IconSprite.new(0,Graphics.height-96,@viewport)
@sprites["messageBox"] = IconSprite.new(0, Graphics.height - 96, @viewport)
@sprites["messageBox"].setBitmap("Graphics/Pictures/Battle/debug_message")
@sprites["messageBox"].z = 2
@sprites["shadow_1"] = IconSprite.new(0,0,@viewport)
@sprites["shadow_1"] = IconSprite.new(0, 0, @viewport)
@sprites["shadow_1"].z = 3
@sprites["pokemon_0"] = PokemonSprite.new(@viewport)
@sprites["pokemon_0"].setOffset(PictureOrigin::Bottom)
@@ -82,19 +77,18 @@ class SpritePositioner
@sprites["info"].viewport = @viewport
@sprites["info"].visible = false
@oldSpeciesIndex = 0
@species = 0
@metrics = pbLoadSpeciesMetrics
@species = nil # This can be a species_form
@metricsChanged = false
refresh
@starting = true
end
def pbClose
if @metricsChanged
if pbConfirmMessage(_INTL("Some metrics have been edited. Save changes?"))
pbSaveMetrics
@metricsChanged = false
end
if @metricsChanged && pbConfirmMessage(_INTL("Some metrics have been edited. Save changes?"))
pbSaveMetrics
@metricsChanged = false
else
GameData::Species.load # Clear all changes to metrics
end
pbFadeOutAndHide(@sprites) { update }
pbDisposeSpriteHash(@sprites)
@@ -102,8 +96,7 @@ class SpritePositioner
end
def pbSaveMetrics
save_data(@metrics,"Data/species_metrics.dat")
$PokemonTemp.speciesMetrics = nil
GameData::Species.save
pbSavePokemonData
pbSavePokemonFormsData
end
@@ -113,44 +106,46 @@ class SpritePositioner
end
def refresh
if @species<=0
if !@species
@sprites["pokemon_0"].visible = false
@sprites["pokemon_1"].visible = false
@sprites["shadow_1"].visible = false
return
end
species_data = GameData::Species.get(@species)
for i in 0...2
pos = PokeBattle_SceneConstants.pbBattlerPosition(i,1)
pos = PokeBattle_SceneConstants.pbBattlerPosition(i, 1)
@sprites["pokemon_#{i}"].x = pos[0]
@sprites["pokemon_#{i}"].y = pos[1]
pbApplyBattlerMetricsToSprite(@sprites["pokemon_#{i}"],i,@species,false,@metrics)
species_data.apply_metrics_to_sprite(@sprites["pokemon_#{i}"], i)
@sprites["pokemon_#{i}"].visible = true
if i==1
if i == 1
@sprites["shadow_1"].x = pos[0]
@sprites["shadow_1"].y = pos[1]
if @sprites["shadow_1"].bitmap
@sprites["shadow_1"].x -= @sprites["shadow_1"].bitmap.width/2
@sprites["shadow_1"].y -= @sprites["shadow_1"].bitmap.height/2
@sprites["shadow_1"].x -= @sprites["shadow_1"].bitmap.width / 2
@sprites["shadow_1"].y -= @sprites["shadow_1"].bitmap.height / 2
end
pbApplyBattlerMetricsToSprite(@sprites["shadow_1"],i,@species,true,@metrics)
species_data.apply_metrics_to_sprite(@sprites["shadow_1"], i, true)
@sprites["shadow_1"].visible = true
end
end
end
def pbAutoPosition
oldmetric1 = (@metrics[SpeciesData::METRIC_PLAYER_Y][@species] || 0)
oldmetric3 = (@metrics[SpeciesData::METRIC_ENEMY_Y][@species] || 0)
oldmetric4 = (@metrics[SpeciesData::METRIC_ALTITUDE][@species] || 0)
species_data = GameData::Species.get(@species)
old_back_y = species_data.back_sprite_y
old_front_y = species_data.front_sprite_y
old_front_altitude = species_data.front_sprite_altitude
bitmap1 = @sprites["pokemon_0"].bitmap
bitmap2 = @sprites["pokemon_1"].bitmap
newmetric1 = (bitmap1.height-(findBottom(bitmap1)+1))/2
newmetric3 = (bitmap2.height-(findBottom(bitmap2)+1))/2
newmetric3 += 4 # Just because
if newmetric1!=oldmetric1 || newmetric3!=oldmetric3 || oldmetric4!=0
@metrics[SpeciesData::METRIC_PLAYER_Y][@species] = newmetric1
@metrics[SpeciesData::METRIC_ENEMY_Y][@species] = newmetric3
@metrics[SpeciesData::METRIC_ALTITUDE][@species] = 0
new_back_y = (bitmap1.height - (findBottom(bitmap1) + 1)) / 2
new_front_y = (bitmap2.height - (findBottom(bitmap2) + 1)) / 2
new_front_y += 4 # Just because
if new_back_y != old_back_y || new_front_y != old_front_y || old_front_altitude != 0
species_data.back_sprite_y = new_back_y
species_data.front_sprite_y = new_front_y
species_data.front_sprite_altitude = 0
@metricsChanged = true
refresh
end
@@ -158,25 +153,32 @@ class SpritePositioner
def pbChangeSpecies(species)
@species = species
spe,frm = pbGetSpeciesFromFSpecies(@species)
@sprites["pokemon_0"].setSpeciesBitmap(spe,false,frm,false,false,true)
@sprites["pokemon_1"].setSpeciesBitmap(spe,false,frm,false,false,false)
@sprites["shadow_1"].setBitmap(pbCheckPokemonShadowBitmapFiles(spe,frm,@metrics))
species_data = GameData::Species.try_get(@species)
return if !species_data
spe = species_data.species
frm = species_data.form
@sprites["pokemon_0"].setSpeciesBitmap(spe, 0, frm, false, false, true)
@sprites["pokemon_1"].setSpeciesBitmap(spe, 0, frm)
# TODO
@sprites["shadow_1"].setBitmap(GameData::Species.shadow_filename(spe, frm))
end
def pbShadowSize
pbChangeSpecies(@species)
refresh
oldval = (@metrics[SpeciesData::METRIC_SHADOW_SIZE][@species] || 2)
cmdvals = [0]; commands = [_INTL("None")]
species_data = GameData::Species.get(@species)
oldval = species_data.shadow_size
cmdvals = [0]
commands = [_INTL("None")]
defindex = 0
i = 0
loop do
i += 1
fn = sprintf("Graphics/Pictures/Battle/battler_shadow_%d",i)
fn = sprintf("Graphics/Pictures/Battle/battler_shadow_%d", i)
break if !pbResolveBitmap(fn)
cmdvals.push(i); commands.push(i.to_s)
defindex = cmdvals.length-1 if oldval==i
cmdvals.push(i)
commands.push(i.to_s)
defindex = cmdvals.length - 1 if oldval == i
end
cw = Window_CommandPokemon.new(commands)
cw.index = defindex
@@ -188,19 +190,19 @@ class SpritePositioner
Input.update
cw.update
self.update
if cw.index!=oldindex
if cw.index != oldindex
oldindex = cw.index
@metrics[SpeciesData::METRIC_SHADOW_SIZE][@species] = cmdvals[cw.index]
species_data.shadow_size = cmdvals[cw.index]
pbChangeSpecies(@species)
refresh
end
if Input.trigger?(Input::A) # Cycle to next option
pbPlayDecisionSE
@metricsChanged = true if @metrics[SpeciesData::METRIC_SHADOW_SIZE][@species]!=oldval
@metricsChanged = true if species_data.shadow_size != oldval
ret = true
break
elsif Input.trigger?(Input::B)
@metrics[SpeciesData::METRIC_SHADOW_SIZE][@species] = oldval
species_data.shadow_size = oldval
pbPlayCancelSE
break
elsif Input.trigger?(Input::C)
@@ -213,25 +215,25 @@ class SpritePositioner
end
def pbSetParameter(param)
return if @species<=0
if param==2
return pbShadowSize
elsif param==4
return if !@species
return pbShadowSize if param == 2
if param == 4
pbAutoPosition
return false
end
species_data = GameData::Species.get(@species)
case param
when 0
sprite = @sprites["pokemon_0"]
xpos = (@metrics[SpeciesData::METRIC_PLAYER_X][@species] || 0)
ypos = (@metrics[SpeciesData::METRIC_PLAYER_Y][@species] || 0)
xpos = species_data.back_sprite_x
ypos = species_data.back_sprite_y
when 1
sprite = @sprites["pokemon_1"]
xpos = (@metrics[SpeciesData::METRIC_ENEMY_X][@species] || 0)
ypos = (@metrics[SpeciesData::METRIC_ENEMY_Y][@species] || 0)
xpos = species_data.front_sprite_x
ypos = species_data.front_sprite_y
when 3
sprite = @sprites["shadow_1"]
xpos = (@metrics[SpeciesData::METRIC_SHADOW_X][@species] || 0)
xpos = species_data.shadow_x
ypos = 0
end
oldxpos = xpos
@@ -239,7 +241,7 @@ class SpritePositioner
@sprites["info"].visible = true
ret = false
loop do
sprite.visible = (Graphics.frame_count%16)<12
sprite.visible = (Graphics.frame_count % 16) < 12 # Flash the selected sprite
Graphics.update
Input.update
self.update
@@ -248,59 +250,44 @@ class SpritePositioner
when 1 then @sprites["info"].setTextToFit("Enemy Position = #{xpos},#{ypos}")
when 3 then @sprites["info"].setTextToFit("Shadow Position = #{xpos}")
end
if Input.repeat?(Input::UP) && param!=3
ypos -= 1
if (Input.repeat?(Input::UP) || Input.repeat?(Input::DOWN)) && param != 3
ypos += (Input.repeat?(Input::DOWN)) ? 1 : -1
case param
when 0 then @metrics[SpeciesData::METRIC_PLAYER_Y][@species] = ypos
when 1 then @metrics[SpeciesData::METRIC_ENEMY_Y][@species] = ypos
end
refresh
elsif Input.repeat?(Input::DOWN) && param!=3
ypos += 1
case param
when 0 then @metrics[SpeciesData::METRIC_PLAYER_Y][@species] = ypos
when 1 then @metrics[SpeciesData::METRIC_ENEMY_Y][@species] = ypos
when 0 then species_data.back_sprite_y = ypos
when 1 then species_data.front_sprite_y = ypos
end
refresh
end
if Input.repeat?(Input::LEFT)
xpos -= 1
if Input.repeat?(Input::LEFT) || Input.repeat?(Input::RIGHT)
xpos += (Input.repeat?(Input::RIGHT)) ? 1 : -1
case param
when 0 then @metrics[SpeciesData::METRIC_PLAYER_X][@species] = xpos
when 1 then @metrics[SpeciesData::METRIC_ENEMY_X][@species] = xpos
when 3 then @metrics[SpeciesData::METRIC_SHADOW_X][@species] = xpos
end
refresh
elsif Input.repeat?(Input::RIGHT)
xpos += 1
case param
when 0 then @metrics[SpeciesData::METRIC_PLAYER_X][@species] = xpos
when 1 then @metrics[SpeciesData::METRIC_ENEMY_X][@species] = xpos
when 3 then @metrics[SpeciesData::METRIC_SHADOW_X][@species] = xpos
when 0 then species_data.back_sprite_x = xpos
when 1 then species_data.front_sprite_x = xpos
when 3 then species_data.shadow_x = xpos
end
refresh
end
if Input.repeat?(Input::A) && param!=3 # Cycle to next option
@metricsChanged = true if xpos!=oldxpos || ypos!=oldypos
if Input.repeat?(Input::A) && param != 3 # Cycle to next option
@metricsChanged = true if xpos != oldxpos || ypos != oldypos
ret = true
pbPlayDecisionSE
break
elsif Input.repeat?(Input::B)
case param
when 0
@metrics[SpeciesData::METRIC_PLAYER_X][@species] = oldxpos
@metrics[SpeciesData::METRIC_PLAYER_Y][@species] = oldypos
species_data.back_sprite_x = oldxpos
species_data.back_sprite_y = oldypos
when 1
@metrics[SpeciesData::METRIC_ENEMY_X][@species] = oldxpos
@metrics[SpeciesData::METRIC_ENEMY_Y][@species] = oldypos
species_data.front_sprite_x = oldxpos
species_data.front_sprite_y = oldypos
when 3
@metrics[SpeciesData::METRIC_SHADOW_X][@species] = oldxpos
species_data.shadow_x = oldxpos
end
pbPlayCancelSE
refresh
break
elsif Input.repeat?(Input::C)
@metricsChanged = true if xpos!=oldxpos || (param!=3 && ypos!=oldypos)
@metricsChanged = true if xpos != oldxpos || (param != 3 && ypos != oldypos)
pbPlayDecisionSE
break
end
@@ -320,8 +307,8 @@ class SpritePositioner
_INTL("Set Shadow Position"),
_INTL("Auto-Position Sprites")
])
cw.x = Graphics.width-cw.width
cw.y = Graphics.height-cw.height
cw.x = Graphics.width - cw.width
cw.y = Graphics.height - cw.height
cw.viewport = @viewport
ret = -1
loop do
@@ -347,55 +334,49 @@ class SpritePositioner
pbFadeInAndShow(@sprites) { update }
@starting = false
end
cw = Window_CommandPokemonEx.newEmpty(0,0,260,32+24*6,@viewport)
cw = Window_CommandPokemonEx.newEmpty(0, 0, 260, 32 + 24 * 6, @viewport)
cw.rowHeight = 24
pbSetSmallFont(cw.contents)
cw.x = Graphics.width-cw.width
cw.y = Graphics.height-cw.height
cw.x = Graphics.width - cw.width
cw.y = Graphics.height - cw.height
allspecies = []
GameData::Species.each do |sp|
name = (sp.form == 0) ? sp.name : _INTL("{1} (form {2})", sp.real_name, sp.form)
allspecies.push([sp.id, sp.species, name]) if name && !name.empty?
end
allspecies.sort! { |a, b| a[2] <=> b[2] }
commands = []
for i in 1..PBSpecies.maxValueF
s = pbGetSpeciesFromFSpecies(i)
name = PBSpecies.getName(s[0])
name = _INTL("{1} (form {2})",name,s[1]) if s[1]>0
allspecies.push([i,s[0],name]) if name!=""
end
allspecies.sort! { |a,b| a[1]==b[1] ? a[0]<=>b[0] : a[2]<=>b[2] }
for s in allspecies
commands.push(_INTL("{1} - {2}",s[1],s[2]))
end
allspecies.each { |sp| commands.push(sp[2]) }
cw.commands = commands
cw.index = @oldSpeciesIndex
species = 0
ret = nil
oldindex = -1
loop do
Graphics.update
Input.update
cw.update
if cw.index!=oldindex
if cw.index != oldindex
oldindex = cw.index
pbChangeSpecies(allspecies[cw.index][0])
refresh
end
self.update
if Input.trigger?(Input::B)
pbChangeSpecies(0)
pbChangeSpecies(nil)
refresh
break
elsif Input.trigger?(Input::C)
pbChangeSpecies(allspecies[cw.index][0])
species = allspecies[cw.index][0]
ret = allspecies[cw.index][0]
break
end
end
@oldSpeciesIndex = cw.index
cw.dispose
return species
return ret
end
end
#===============================================================================
#
#===============================================================================
@@ -408,14 +389,14 @@ class SpritePositionerScreen
@scene.pbOpen
loop do
species = @scene.pbChooseSpecies
break if species<=0
break if !species
loop do
command = @scene.pbMenu(species)
break if command<0
break if command < 0
loop do
par = @scene.pbSetParameter(command)
break if !par
command = (command+1)%3
command = (command + 1) % 3
end
end
end