Kuro_Hush
Usuario de bronce
Buenas! ^^
Mi duda/problema es algo complicado, intentaré exponerlo lo mejor posible:
Quiero cambiar la posición de las BattleBox del sistema "Elite Battle - Next Gen". He estado revisando el script de "UI", pero no encuentro manera de cambiarlo. El objetivo es conseguir un cambio más o menos así:
De esto:
A esto:
Para ello me gustaría saber que parte del código es la que tengo que modificar. Dejo aquí el codigo que estoy empleando para que me salga la UI del primero:
Gracias ^^U
Mi duda/problema es algo complicado, intentaré exponerlo lo mejor posible:
Quiero cambiar la posición de las BattleBox del sistema "Elite Battle - Next Gen". He estado revisando el script de "UI", pero no encuentro manera de cambiarlo. El objetivo es conseguir un cambio más o menos así:
De esto:
A esto:
Para ello me gustaría saber que parte del código es la que tengo que modificar. Dejo aquí el codigo que estoy empleando para que me salga la UI del primero:
Código:
#===============================================================================
# Pokemon data battle boxes (Next Generation)
# UI overhaul
#===============================================================================
class NextGenDataBox < SpriteWrapper
attr_reader :battler
attr_accessor :selected
attr_accessor :appearing
attr_accessor :charged
attr_reader :animatingHP
attr_reader :animatingEXP
def initialize(battler,doublebattle,viewport=nil,player=nil,scene=nil)
view = Viewport.new(viewport.rect.x,viewport.rect.y,viewport.rect.width,viewport.rect.height)
view.z = viewport.z# + 1
@viewport = view
@scene = scene
@player = player
@battler = battler
@doublebattle = doublebattle
@playerpoke = (@battler.index&1)==0
@vector = (@battler.index&1)==0 ? @scene.vector.x : @scene.vector.x2
@sprites = {}
@path = "#{checkEBFolderPath}/nextGen/"
@showhp = (@battler.index&1)==0
@showexp = (@battler.index&1)==0
@explevel=0
@selected=0
@frame=0
@appearing=false
@animatingHP=false
@starthp=0.0
@currenthp=0.0
@endhp=0.0
@expflash=0
@loaded = false
@showing = false
@second = false
@charged = false
@Mbreathe = 1
@Mlock = false
end
def disposed?
return @sprites["layer1"].disposed? if @sprites["layer1"]
return true
end
def dispose
pbDisposeSpriteHash(@sprites)
end
def refreshExpLevel
if !@battler.pokemon
@explevel=0
else
growthrate=@battler.pokemon.growthrate
startexp=PBExperience.pbGetStartExperience(@battler.pokemon.level,growthrate)
endexp=PBExperience.pbGetStartExperience(@battler.pokemon.level+1,growthrate)
if startexp==endexp
@explevel=0
else
@explevel=(@battler.pokemon.exp-startexp)*@sprites["exp"].bitmap.width/(endexp-startexp)
end
end
end
def exp
return @animatingEXP ? @currentexp : @explevel
end
def hp
return @animatingHP ? @currenthp : @battler.hp
end
def animateHP(oldhp,newhp)
@starthp=oldhp.to_f
@currenthp=oldhp.to_f
@endhp=newhp.to_f
@animatingHP=true
end
def animateEXP(oldexp,newexp)
@currentexp=oldexp
@endexp=newexp
@animatingEXP=true
end
def show; @showing = true; end
def appear
# used to call the set-up procedure from the battle scene
self.setUp
@loaded = true
refreshExpLevel
if @playerpoke
@sprites["layer1"].x = -@sprites["layer1"].bitmap.width - 32
@sprites["layer1"].y = @viewport.rect.height + @sprites["layer1"].bitmap.height + 32
else
@sprites["layer1"].x = @viewport.rect.width + @sprites["layer1"].bitmap.width + 32
@sprites["layer1"].y = -@sprites["layer1"].bitmap.height - 32
end
self.x = @sprites["layer1"].x
self.y = @sprites["layer1"].y
self.refresh
end
def getBattler(battler)
return battler.effects[PBEffects::Illusion] if PBEffects.const_defined?(:Illusion) && battler.respond_to?('effects') && !battler.effects[PBEffects::Illusion].nil?
return battler
end
def setUp
# reset of the set-up procedure
@loaded = false
@showing = false
@second = false
pbDisposeSpriteHash(@sprites)
@sprites.clear
# initializes all the necessary components
@sprites["mega"] = Sprite.new(@viewport)
@sprites["mega"].opacity = 0
@sprites["layer1"] = Sprite.new(@viewport)
@sprites["layer1"].bitmap = pbBitmap(@path+"layer1")
@sprites["layer1"].src_rect.height = 64 if !@showexp
@sprites["layer1"].mirror = !@playerpoke
@sprites["shadow"] = Sprite.new(@viewport)
@sprites["shadow"].bitmap = Bitmap.new(@sprites["layer1"].bitmap.width,@sprites["layer1"].bitmap.height)
@sprites["shadow"].z = -1
@sprites["shadow"].opacity = 255*0.25
@sprites["shadow"].color = Color.new(0,0,0,255)
@sprites["hp"] = Sprite.new(@viewport)
@hpBarBmp = pbBitmap(@path+"hpBar")
@hpBarChr = pbBitmap(@path+"hpBarCharged")
c = @hpBarChr.get_pixel(2,0)
@sprites["hp"].bitmap = Bitmap.new(@hpBarBmp.width,@hpBarBmp.height)
@sprites["hp"].mirror = !@playerpoke
for i in 0...46
step = rand(129)/4.0
@sprites["chr#{i}"] = Sprite.new(@viewport)
@sprites["chr#{i}"].bitmap = Bitmap.new(4,14)
@sprites["chr#{i}"].bitmap.fill_rect(0,0,4,14,c)
@sprites["chr#{i}"].oy = @sprites["chr#{i}"].bitmap.height
@sprites["chr#{i}"].opacity = 256*step/12.0
@sprites["chr#{i}"].zoom_y = 1.0*step/24.0
@sprites["chr#{i}"].z = 8
end
@sprites["exp"] = Sprite.new(@viewport)
@sprites["exp"].bitmap = pbBitmap(@path+"expBar")
@sprites["exp"].src_rect.y = @sprites["exp"].bitmap.height*-1 if !@showexp
@sprites["text"] = Sprite.new(@viewport)
@sprites["text"].bitmap = Bitmap.new(@sprites["layer1"].bitmap.width,@sprites["layer1"].bitmap.height)
@sprites["text"].z = 9
pbSetSystemFont(@sprites["text"].bitmap)
end
def x; return @sprites["layer1"].x; end
def y; return @sprites["layer1"].y; end
def z; return @sprites["layer1"].z; end
def visible; return @sprites["layer1"] ? @sprites["layer1"].visible : false; end
def opacity; return @sprites["layer1"].opacity; end
def color; return @sprites["layer1"].color; end
def x=(val)
return if !@loaded
# calculates the relative X positions of all elements
@sprites["layer1"].x = val
@sprites["text"].x = @sprites["layer1"].x
@sprites["hp"].x = @sprites["layer1"].x + 28 + (!@playerpoke ? 4 : 0)
@sprites["exp"].x = @sprites["layer1"].x + 40
@sprites["mega"].x = @sprites["layer1"].x + (!@playerpoke ? -8 : 222)
@sprites["shadow"].x = @sprites["layer1"].x + 2
end
def y=(val)
return if !@loaded
# calculates the relative Y positions of all elements
@sprites["layer1"].y = val
@sprites["text"].y = @sprites["layer1"].y
@sprites["hp"].y = @sprites["layer1"].y + 46
@sprites["exp"].y = @sprites["layer1"].y + 68
@sprites["mega"].y = @sprites["layer1"].y + 38
@sprites["shadow"].y = @sprites["layer1"].y + 2
end
def visible=(val)
for key in @sprites.keys
next if key=="layer0"
next if !@sprites[key]
if key.include?("chr")
@sprites[key].visible = val if @charged
else
@sprites[key].visible = val
end
end
end
def opacity=(val)
for key in @sprites.keys
next if key=="layer0"
next if key=="mega" && !@battler.isMega?
next if !@sprites[key]
@sprites[key].opacity = val
@sprites[key].opacity *= 0.25 if key=="shadow"
end
end
def color=(val)
for sprite in @sprites.values
sprite.color = val
end
end
def positionX=(val)
val = 4 if val < 4
val = (@viewport.rect.width - @sprites["layer1"].bitmap.width) if val > (@viewport.rect.width - @sprites["layer1"].bitmap.width)
self.x = val
end
def updateChargeAnimation
return if !@charged || !self.visible
for i in 0...46
if @sprites["chr#{i}"].zoom_y >= 1.0
@sprites["chr#{i}"].zoom_y = 0
@sprites["chr#{i}"].opacity = 255
end
@sprites["chr#{i}"].opacity -= 256/48.0
@sprites["chr#{i}"].zoom_y += 1.0/24.0
@sprites["chr#{i}"].x = @sprites["hp"].x + 2 + i*4
@sprites["chr#{i}"].y = @sprites["hp"].y + 2
@sprites["chr#{i}"].color.alpha -= 16 if @sprites["chr#{i}"].color.alpha > 0
end
end
def charge
@charged = true
@sprites["hp"].color = Color.new(255,255,255)
for i in 0...46
@sprites["chr#{i}"].color = Color.new(255,255,255)
end
self.updateHpBar
self.visible = self.visible
end
def stopCharge
@charged = false
@sprites["hp"].color = Color.new(255,255,255)
self.updateHpBar
self.visible = self.visible
end
def updateHpBar
# updates the current state of the HP bar
# the bar's colour hue gets dynamically adjusted (i.e. not through sprites)
# HP bar is mirrored for opposing Pokemon
hpbar = @battler.totalhp==0 ? 0 : (1.0*self.hp*@sprites["hp"].bitmap.width/@battler.totalhp).ceil
@sprites["hp"].src_rect.x = @sprites["hp"].bitmap.width - hpbar if !@playerpoke
@sprites["hp"].src_rect.width = hpbar
hue = (0-120)*(1-(self.hp.to_f/@battler.totalhp))
@sprites["hp"].bitmap.clear
bmp = @charged ? @hpBarChr : @hpBarBmp
@sprites["hp"].bitmap.blt(0,0,bmp,Rect.new(0,0,bmp.width,bmp.height))
@sprites["hp"].bitmap.hue_change(hue) if !@charged
for i in 0...46
@sprites["chr#{i}"].zoom_x = (i >= (46*(self.hp.to_f/@battler.totalhp)).floor) ? 0 : 1
@sprites["chr#{i}"].zoom_x = 0 if !@charged
end
end
def refresh
# exits the refresh if the databox isn't fully set up yet
return if !@loaded
# update for HP/EXP bars
self.updateHpBar
@sprites["exp"].src_rect.width = self.exp
# clears the current bitmap containing text and adjusts its font
@sprites["text"].bitmap.clear
pbSetSystemFont(@sprites["text"].bitmap)
# used to calculate the potential offset of elements should they exceed the
# width of the HP bar
str = ""
str = _INTL("♂") if getBattler(@battler).gender==0
str = _INTL("♀") if getBattler(@battler).gender==1
w = @sprites["text"].bitmap.text_size("#{getBattler(@battler).name}#{str}Lv.#{getBattler(@battler).level}").width
o = (w > @sprites["hp"].bitmap.width+4) ? (w-(@sprites["hp"].bitmap.width+4))/2.0 : 0; o = o.ceil
o += 2 if getBattler(@battler).level == 100
# additional layer to draw extra things onto the databox (unused by default)
bmp = pbBitmap(@path+"layer2")
@sprites["text"].bitmap.blt(@playerpoke ? 0 : 4,@playerpoke ? 0 : 4,bmp,Rect.new(0,0,bmp.width,@showexp ? bmp.height : 62))
# writes the Pokemon's name
str = getBattler(@battler).name
str += " "
x = @playerpoke ? 28 : 32
pkmn = getBattler(@battler); pkmn = pkmn.pokemon if pkmn.respond_to?(:pokemon)
color = pkmn.isShiny? ? Color.new(222,197,95) : Color.new(255,255,255) if !pkmn.nil?
pbDrawOutlineText(@sprites["text"].bitmap,x-o,-20,@sprites["text"].bitmap.width,@sprites["text"].bitmap.height,str,color,Color.new(0,0,0),0)
# writes the Pokemon's gender
x = @sprites["text"].bitmap.text_size(str).width + (@playerpoke ? 28 : 32)
str = ""
str = _INTL("♂") if getBattler(@battler).gender==0
str = _INTL("♀") if getBattler(@battler).gender==1
color = (getBattler(@battler).gender==0) ? Color.new(53,107,208) : Color.new(180,37,77)
pbDrawOutlineText(@sprites["text"].bitmap,x-o,-20,@sprites["text"].bitmap.width,@sprites["text"].bitmap.height,str,color,Color.new(0,0,0),0)
# writes the Pokemon's level
str = "#{getBattler(@battler).level}"
x = @playerpoke ? -30 : -26
pbDrawOutlineText(@sprites["text"].bitmap,x+o,-20,@sprites["text"].bitmap.width,@sprites["text"].bitmap.height,str,Color.new(255,255,255),Color.new(0,0,0),2)
x -= @sprites["text"].bitmap.text_size(str).width+(@playerpoke ? 3 : 2)
pbSetSmallFont(@sprites["text"].bitmap)
str = _INTL("Lv.")
pbDrawOutlineText(@sprites["text"].bitmap,x+o+2,-19,@sprites["text"].bitmap.width,@sprites["text"].bitmap.height,str,Color.new(222,197,95),Color.new(0,0,0),2)
# writes the number of the Pokemon's current/total HP
str = "#{self.hp}/#{@battler.totalhp}"
pbDrawOutlineText(@sprites["text"].bitmap,-40,13,@sprites["text"].bitmap.width,@sprites["text"].bitmap.height,str,Color.new(255,255,255),Color.new(0,0,0),1) if @showhp
# draws Pokeball if Pokemon is caught
@sprites["text"].bitmap.blt(12,46,pbBitmap(@path+"battleBoxOwned.png"),Rect.new(0,0,14,14)) if !@playerpoke && @battler.owned && !@scene.battle.opponent
# draws the status conditions
@sprites["text"].bitmap.blt(160,54,pbBitmap(@path+"statuses"),Rect.new(0,18*(@battler.status-1),52,18)) if @battler.status > 0
# re-draws the databox shadow
@sprites["shadow"].bitmap.clear
bmp = @sprites["layer1"].bitmap.clone
@sprites["shadow"].bitmap.blt(@playerpoke ? 0 : 4,0,bmp,Rect.new(0,0,bmp.width,@showexp ? bmp.height : 64))
bmp = @sprites["text"].bitmap.clone
@sprites["shadow"].bitmap.blt(0,0,bmp,Rect.new(0,0,bmp.width,bmp.height))
# changes the Mega symbol graphics (depending on Mega or Primal)
if @battler.isMega? && @battler.item==573
@sprites["mega"].bitmap = pbBitmap("#{checkEBFolderPath}/elder_sym")
elsif @battler.isMega?
@sprites["mega"].bitmap = pbBitmap("#{checkEBFolderPath}/mega_sym")
elsif @battler.respond_to?(:isPrimal?) && @battler.isPrimal?
path=nil
path="Graphics/Pictures/battlePrimalKyogreBox.png" if @battler.species == getConst(PBSpecies,:KYOGRE)
path="Graphics/Pictures/battlePrimalGroudonBox.png" if @battler.species == getConst(PBSpecies,:GROUDON)
@sprites["mega"].bitmap = pbBitmap(path)
end
@sprites["mega"].x = @sprites["layer1"].x + (!@playerpoke ? -8 : 222)
end