Registrarse

[RPG - Scripting] Modificar las BattleBox de Elite Battle System

Estado
Cerrado para nuevas respuestas.

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:
Sin título (Recuperado).png

A esto:
EAxPJx-XoAcLZ4Z.png


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
Gracias ^^U
 
Estado
Cerrado para nuevas respuestas.
Arriba