Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[RMXP/VX] Tono de las ventanas ajustable

Ver el tema anterior Ver el tema siguiente Ir abajo

[RMXP/VX] Tono de las ventanas ajustable

Mensaje por Wecoc el 2012-07-26, 21:58

El script es compatible con XP y VX pero el script de ejemplo de uso solo es compatible con XP
---------------------------

En fin, allá voy con otro aporte de mi cosecha propia :D Creo que esto también salía en Castlevania, por cierto xD y al ser algo sencillo no sé si ya existe algún script así pero bueno, yo lo he hecho así que disfrutadlo (?) xD

Contiene diferentes códigos de uso:

@window.get_back_red
@window.get_back_green
@window.get_back_blue
@window.get_back_gray

Devuelven el valor actual de rojo, verde, azul o gris del Tone de la ventana.

@window.set_back_red(valor)
@window.set_back_green(valor)
@window.set_back_blue(valor)
@window.set_back_gray(valor)

Asigna nuevos valores de rojo, verde o azul en el tono de la ventana. Funciona como un Cambiar tono de pantalla pero para el fondo de ventana; el rojo, el verde y el azul van de -255 a 255; el gris va de 0 a 255.

@window.increase_back_red(valor)
@window.increase_back_green(valor)
@window.increase_back_blue(valor)
@window.increase_back_gray(valor)

Suma (o resta en caso de valor negativo) rojo, verde, azul o gris. Aunque con la suma sobrepase los límites (-255/255 o 0/255) se reajustará igualmente.

Aquí el script:

Código:
#==============================================================================
# [RMXP/VX] Tono de las ventanas ajustable (by Wecoc) v. 1.0
# Script adaptado del class Window de Pokemon Essentials
#==============================================================================

class WindowCursorRect < Rect
  def initialize(window)
    @window=window
    @x=0
    @y=0
    @width=0
    @height=0
  end
  attr_reader :x,:y,:width,:height
  def empty
    needupdate=@x!=0 || @y!=0 || @width!=0 || @height!=0
    if needupdate
    @x=0
    @y=0
    @width=0
    @height=0
    @window.width=@window.width
    end
  end
  def isEmpty?
  return @x==0 && @y==0 && @width==0 && @height==0
  end
  def set(x,y,width,height)
    needupdate=@x!=x || @y!=y || @width!=width || @height!=height
    if needupdate
    @x=x
    @y=y
    @width=width
    @height=height
    @window.width=@window.width
    end
  end
  def height=(value)
    @height=value; @window.width=@window.width
  end
  def width=(value)
    @width=value; @window.width=@window.width
  end
  def x=(value)
    @x=value; @window.width=@window.width
  end
  def y=(value)
    @y=value; @window.width=@window.width
  end
end

#==============================================================================
# Window
#==============================================================================

class Window
 attr_reader :tone
 attr_reader :color
 attr_reader :blend_type
 attr_reader :contents_blend_type
 attr_reader :viewport
 attr_reader :contents
 attr_reader :ox
 attr_reader :oy
 attr_reader :x
 attr_reader :y
 attr_reader :z
 attr_reader :width
 attr_reader :active
 attr_reader :pause
 attr_reader :height
 attr_reader :opacity
 attr_reader :back_opacity
 attr_reader :contents_opacity
 attr_reader :visible
 attr_reader :cursor_rect
 attr_reader :openness
 attr_reader :stretch
 def windowskin
  @_windowskin
 end
 def initialize(viewport=nil)
  @sprites={}
  @spritekeys=[
  "back",
  "corner0","side0","scroll0",
  "corner1","side1","scroll1",
  "corner2","side2","scroll2",
  "corner3","side3","scroll3",
  "cursor","contents","pause"
  ]
  @sidebitmaps=[nil,nil,nil,nil]
  @cursorbitmap=nil
  @bgbitmap=nil
  @viewport=viewport
  for i in @spritekeys
  @sprites[i]=Sprite.new(@viewport)
  end
  @disposed=false
  @tone=Tone.new(0,0,0)
  @color=Color.new(0,0,0,0)
 
  if $back_r == nil
    $back_r = 0
    $back_g = 0
    $back_b = 0
    $back_s = 0
  end
 
  @back_r = $back_r
  @back_g = $back_g
  @back_b = $back_b
  @back_s = $back_s
 
  @blankcontents=Bitmap.new(1,1)
  @contents=@blankcontents
  @_windowskin=nil
  @rpgvx=false # True: Utiliza las windowskins del VX, False: Utiliza las del XP
  @x=0
  @y=0
  @width=0
  @openness=255
  @height=0
  @ox=0
  @oy=0
  @z=0
  @stretch=true
  @visible=true
  @active=true
  @blend_type=0
  @contents_blend_type=0
  @opacity=255
  @back_opacity=255
  @contents_opacity=255
  @cursor_rect=WindowCursorRect.new(self)
  @cursorblink=0
  @cursoropacity=255
  @pause=false
  @pauseopacity=255
  @pauseframe=0
  privRefresh(true)
 end
 def dispose
  if !self.disposed?
  for i in @sprites
    i[1].dispose if i[1]
    @sprites[i[0]]=nil
  end
  for i in 0...@sidebitmaps.length
    @sidebitmaps[i].dispose if @sidebitmaps[i]
    @sidebitmaps[i]=nil
  end
  @blankcontents.dispose
  @cursorbitmap.dispose if @cursorbitmap
  @backbitmap.dispose if @backbitmap
  @sprites.clear
  @sidebitmaps.clear
  @_windowskin=nil
  @_contents=nil
  @disposed=true
  $back_r = @back_r
  $back_g = @back_g
  $back_b = @back_b
  $back_s = @back_s
  end
 end
 def openness=(value)
  @openness=value
  @openness=0 if @openness<0
  @openness=255 if @openness>255
  privRefresh
 end
 def stretch=(value)
  @stretch=value
  privRefresh(true)
 end
 def visible=(value)
  @visible=value
  privRefresh
 end
 def viewport=(value)
  @viewport=value
  for i in @spritekeys
  @sprites[i].dispose
  if @sprites[i].is_a?(Sprite)
    @sprites[i]=Sprite.new(@viewport)
  elsif @sprites[i].is_a?(Plane)
    @sprites[i]=Plane.new(@viewport)
  else
    @sprites[i]=nil
  end
  end
  privRefresh(true)
 end
 def z=(value)
  @z=value
  privRefresh
 end
 def disposed?
  return @disposed
 end
 def contents=(value)
  @contents=value
  privRefresh
 end
 def windowskin=(value)
  @_windowskin=value
  if value && value.is_a?(Bitmap) && !value.disposed? && value.width==128
    @rpgvx=true
  else
    @rpgvx=false
  end
  privRefresh(true)
 end
 def ox=(value)
  @ox=value
  privRefresh
 end
 def active=(value)
  @active=value
  privRefresh(true)
 end
 def cursor_rect=(value)
  if !value
    @cursor_rect.empty
  else
    @cursor_rect.set(value.x,value.y,value.width,value.height)
  end
 end
 def oy=(value)
  @oy=value
  privRefresh
 end
 def width=(value)
  @width=value
  privRefresh(true)
 end
 def height=(value)
  @height=value
  privRefresh(true)
 end
 def pause=(value)
  @pause=value
  @pauseopacity=0 if !value
  privRefresh
 end
 def x=(value)
  @x=value
  privRefresh
 end
 def y=(value)
  @y=value
  privRefresh
 end
 def opacity=(value)
  @opacity=value
  @opacity=0 if @opacity<0
  @opacity=255 if @opacity>255
  privRefresh
 end
 def back_opacity=(value)
  @back_opacity=value
  @back_opacity=0 if @back_opacity<0
  @back_opacity=255 if @back_opacity>255
  privRefresh
 end

 def get_back_red
  if @back_r == nil
    return 0
  else
    return @back_r
  end
 end
 def get_back_green
  if @back_g == nil
    return 0
  else
  return @back_g
  end
 end
 def get_back_blue
  if @back_b == nil
    return 0
  else
  return @back_b
  end
 end
 def get_back_gray
  if @back_s == nil
    return 0
  else
  return @back_s
  end
 end
 
 def set_back_red(value)
  @back_r=value
  @back_r=-255 if @back_r<-255
  @back_r=255 if @back_r>255
 end
 def set_back_green(value)
  @back_g=value
  @back_g=-255 if @back_g<-255
  @back_g=255 if @back_g>255
 end
 def set_back_blue(value)
  @back_b=value
  @back_b=-255 if @back_b<-255
  @back_b=255 if @back_b>255
 end
 def set_back_gray(value)
  @back_s=value
  @back_s=0 if @back_s<0
  @back_s=255 if @back_s>255
 end

 def increase_back_red(value)
  @back_r+=value
  @back_r=-255 if @back_r<-255
  @back_r=255 if @back_r>255
 end
 def increase_back_green(value)
  @back_g+=value
  @back_g=-255 if @back_g<-255
  @back_g=255 if @back_g>255
 end
 def increase_back_blue(value)
  @back_b+=value
  @back_b=-255 if @back_b<-255
  @back_b=255 if @back_b>255
 end
 def increase_back_gray(value)
  @back_s+=value
  @back_s=0 if @back_s<0
  @back_s=255 if @back_s>255
 end


 def contents_opacity=(value)
  @contents_opacity=value
  @contents_opacity=0 if @contents_opacity<0
  @contents_opacity=255 if @contents_opacity>255
  privRefresh
 end

 def tone=(value)
  @tone=value
  privRefresh
 end
 def color=(value)
  @color=value
  privRefresh
 end
 def blend_type=(value)
  @blend_type=value
  privRefresh
 end
 def flash(color,duration)
  return if disposed?
  for i in @sprites
  i[1].flash(color,duration)
  end
 end
 def update
  return if disposed?
  mustchange=false
  if @active
  if @cursorblink==0
    @cursoropacity-=8
    @cursorblink=1 if @cursoropacity<=128
  else
    @cursoropacity+=8
    @cursorblink=0 if @cursoropacity>=255
  end
  mustchange=true if !@cursor_rect.isEmpty?
  else
  mustchange=true if @cursoropacity!=128
  @cursoropacity=128
  end
  if @pause
  @pauseframe=(Graphics.frame_count / 8) % 4
  @pauseopacity=[@pauseopacity+64,255].min
  mustchange=true
  end
  privRefresh if mustchange
  for i in @sprites
  i[1].update
  end
 end
 private
 def ensureBitmap(bitmap,dwidth,dheight)
  if !bitmap||bitmap.disposed?||bitmap.width<dwidth||bitmap.height<dheight
  bitmap.dispose if bitmap
  bitmap=Bitmap.new([1,dwidth].max,[1,dheight].max)
  end
  return bitmap
 end
 def tileBitmap(dstbitmap,dstrect,srcbitmap,srcrect)
  return if !srcbitmap || srcbitmap.disposed?
  left=dstrect.x
  top=dstrect.y
  y=0;loop do break unless y<dstrect.height
  x=0;loop do break unless x<dstrect.width
    dstbitmap.blt(x+left,y+top,srcbitmap,srcrect)
    x+=srcrect.width
  end
  y+=srcrect.height
  end
 end
 def privRefresh(changeBitmap=false)
  return if self.disposed?
  backopac=self.back_opacity*self.opacity/255
  contopac=self.contents_opacity
  cursoropac=@cursoropacity*contopac/255
  for i in 0...4
  @sprites["corner#{i}"].bitmap=@_windowskin
  @sprites["scroll#{i}"].bitmap=@_windowskin
  end
  @sprites["pause"].bitmap=@_windowskin
  @sprites["contents"].bitmap=@contents
  if @_windowskin && !@_windowskin.disposed?
  for i in 0...4
    @sprites["corner#{i}"].opacity=@opacity
    @sprites["corner#{i}"].tone=@tone
    @sprites["corner#{i}"].color=@color
    @sprites["corner#{i}"].blend_type=@blend_type
    @sprites["corner#{i}"].visible=@visible
    @sprites["side#{i}"].opacity=@opacity
    @sprites["side#{i}"].tone=@tone
    @sprites["side#{i}"].color=@color
    @sprites["side#{i}"].blend_type=@blend_type
    @sprites["side#{i}"].visible=@visible
    @sprites["scroll#{i}"].opacity=@opacity
    @sprites["scroll#{i}"].tone=@tone
    @sprites["scroll#{i}"].blend_type=@blend_type
    @sprites["scroll#{i}"].color=@color
    @sprites["scroll#{i}"].visible=@visible
  end
  @sprites["back"].color=@color
  @sprites["back"].tone=Tone.new(@back_r, @back_g, @back_b, @back_s)
  @sprites["back"].blend_type=@blend_type
 
  for i in ["cursor","pause","contents"]
    @sprites[i].color=@color
    @sprites[i].tone=@tone
    @sprites[i].blend_type=@blend_type
  end
  @sprites["contents"].blend_type=@contents_blend_type
  @sprites["back"].opacity=backopac
  @sprites["contents"].opacity=contopac
  @sprites["cursor"].opacity=cursoropac
  @sprites["pause"].opacity=@pauseopacity
  @sprites["back"].visible=@visible
  @sprites["contents"].visible=@visible && @openness==255
  @sprites["pause"].visible=@visible && @pause
  @sprites["cursor"].visible=@visible && @openness==255
  hascontents=(@contents && !@contents.disposed?)
  @sprites["scroll0"].visible = @visible && hascontents && @oy > 0
  @sprites["scroll1"].visible = @visible && hascontents && @ox > 0
  @sprites["scroll2"].visible = @visible && hascontents && (@contents.width - @ox) > @width-32
  @sprites["scroll3"].visible = @visible && hascontents && (@contents.height - @oy) > @height-32
  else
  for i in 0...4
    @sprites["corner#{i}"].visible=false
    @sprites["side#{i}"].visible=false
    @sprites["scroll#{i}"].visible=false
  end
  @sprites["contents"].visible=@visible && @openness==255
  @sprites["contents"].color=@color
  @sprites["contents"].tone=@tone
  @sprites["contents"].blend_type=@contents_blend_type
  @sprites["contents"].opacity=contopac
  @sprites["back"].visible=false
  @sprites["pause"].visible=false
  @sprites["cursor"].visible=false
  end
  for i in @sprites
  i[1].z=@z
  end
  if @rpgvx
    @sprites["cursor"].z=@z#+1
    @sprites["contents"].z=@z#+2
    @sprites["pause"].z=@z#+2
  else
    @sprites["cursor"].z=@z+1
    @sprites["contents"].z=@z+2
    @sprites["pause"].z=@z+2
  end
  if @rpgvx
  trimX=64
  trimY=0
  backRect=Rect.new(0,0,64,64)
  blindsRect=Rect.new(0,64,64,64)
  else
  trimX=128
  trimY=0
  backRect=Rect.new(0,0,128,128)
  blindsRect=nil
  end
  @sprites["corner0"].src_rect.set(trimX,trimY+0,16,16);
  @sprites["corner1"].src_rect.set(trimX+48,trimY+0,16,16);
  @sprites["corner2"].src_rect.set(trimX,trimY+48,16,16);
  @sprites["corner3"].src_rect.set(trimX+48,trimY+48,16,16);
  @sprites["scroll0"].src_rect.set(trimX+24, trimY+16, 16, 8) # up
  @sprites["scroll3"].src_rect.set(trimX+24, trimY+40, 16, 8) # down
  @sprites["scroll1"].src_rect.set(trimX+16, trimY+24, 8, 16) # left
  @sprites["scroll2"].src_rect.set(trimX+40, trimY+24, 8, 16) # right
  cursorX=trimX
  cursorY=trimY+64
  sideRects=[
  Rect.new(trimX+16,trimY+0,32,16),
  Rect.new(trimX,trimY+16,16,32),
  Rect.new(trimX+48,trimY+16,16,32),
  Rect.new(trimX+16,trimY+48,32,16)
  ]
  if @width>32 && @height>32
  @sprites["contents"].src_rect.set(@ox,@oy,@width-32,@height-32)
  else
  @sprites["contents"].src_rect.set(0,0,0,0)
  end
  pauseRects=[
  trimX+32,trimY+64,
  trimX+48,trimY+64,
  trimX+32,trimY+80,
  trimX+48,trimY+80,
  ]
  pauseWidth=16
  pauseHeight=16
  @sprites["pause"].src_rect.set(
    pauseRects[@pauseframe*2],
    pauseRects[@pauseframe*2+1],
    pauseWidth,pauseHeight
  )
  @sprites["pause"].x=(@x+(@width/2)-(pauseWidth/2))#+216
  @sprites["pause"].y=(@y+@height-16)#-8 
  @sprites["contents"].x=@x+16
  @sprites["contents"].y=@y+16
  @sprites["corner0"].x=@x
  @sprites["corner0"].y=@y
  @sprites["corner1"].x=@x+@width-16
  @sprites["corner1"].y=@y
  @sprites["corner2"].x=@x
  @sprites["corner2"].y=@y+@height-16
  @sprites["corner3"].x=@x+@width-16
  @sprites["corner3"].y=@y+@height-16
  @sprites["side0"].x=@x+16
  @sprites["side0"].y=@y
  @sprites["side1"].x=@x
  @sprites["side1"].y=@y+16
  @sprites["side2"].x=@x+@width-16
  @sprites["side2"].y=@y+16
  @sprites["side3"].x=@x+16
  @sprites["side3"].y=@y+@height-16
  @sprites["scroll0"].x = @x+@width / 2 - 8
  @sprites["scroll0"].y = @y+8
  @sprites["scroll1"].x = @x+8
  @sprites["scroll1"].y = @y+@height / 2 - 8
  @sprites["scroll2"].x = @x+@width - 16
  @sprites["scroll2"].y = @y+@height / 2 - 8
  @sprites["scroll3"].x = @x+@width / 2 - 8
  @sprites["scroll3"].y = @y+@height - 16
  @sprites["back"].x=@x+2
  @sprites["back"].y=@y+2
  @sprites["cursor"].x=@x+16+@cursor_rect.x
  @sprites["cursor"].y=@y+16+@cursor_rect.y
  if changeBitmap && @_windowskin && !@_windowskin.disposed?
  width=@cursor_rect.width
  height=@cursor_rect.height
  if width > 0 && height > 0
      cursorrects=[
      # sides
      Rect.new(cursorX+2, cursorY+0, 28, 2),
      Rect.new(cursorX+0, cursorY+2, 2, 28),
      Rect.new(cursorX+30, cursorY+2, 2, 28),
      Rect.new(cursorX+2, cursorY+30, 28, 2),
      # corners
      Rect.new(cursorX+0, cursorY+0, 2, 2),
      Rect.new(cursorX+30, cursorY+0, 2, 2),
      Rect.new(cursorX+0, cursorY+30, 2, 2),
      Rect.new(cursorX+30, cursorY+30, 2, 2),
      # back
      Rect.new(cursorX+2, cursorY+2, 28, 28)
      ]
      margin=2
      fullmargin=4
           
      @cursorbitmap = ensureBitmap(@cursorbitmap, width, height)
      @cursorbitmap.clear
      @sprites["cursor"].bitmap=@cursorbitmap
      @sprites["cursor"].src_rect.set(0,0,width,height)
      rect = Rect.new(margin,margin,
                      width - fullmargin, height - fullmargin)
      @cursorbitmap.stretch_blt(rect, @_windowskin, cursorrects[8])
      @cursorbitmap.blt(0, 0, @_windowskin, cursorrects[4])# top left
      @cursorbitmap.blt(width-margin, 0, @_windowskin, cursorrects[5]) # top right
      @cursorbitmap.blt(0, height-margin, @_windowskin, cursorrects[6]) # bottom right
      @cursorbitmap.blt(width-margin, height-margin, @_windowskin, cursorrects[7]) # bottom left
      rect = Rect.new(margin, 0,
                      width - fullmargin, margin)
      @cursorbitmap.stretch_blt(rect, @_windowskin, cursorrects[0])
      rect = Rect.new(0, margin,
                      margin, height - fullmargin)
      @cursorbitmap.stretch_blt(rect, @_windowskin, cursorrects[1])
      rect = Rect.new(width - margin, margin,
                      margin, height - fullmargin)
      @cursorbitmap.stretch_blt(rect, @_windowskin, cursorrects[2])
      rect = Rect.new(margin, height-margin,
                      width - fullmargin, margin)
      @cursorbitmap.stretch_blt(rect, @_windowskin, cursorrects[3])
  else
      @sprites["cursor"].visible=false
      @sprites["cursor"].src_rect.set(0,0,0,0)
  end
  for i in 0..3
    dwidth=(i==0||i==3) ? @width-32 : 16
    dheight=(i==0||i==3) ? 16 : @height-32
    @sidebitmaps[i]=ensureBitmap(@sidebitmaps[i],dwidth,dheight)
    @sprites["side#{i}"].bitmap=@sidebitmaps[i]
    @sprites["side#{i}"].src_rect.set(0,0,dwidth,dheight)
    @sidebitmaps[i].clear
    if sideRects[i].width>0 && sideRects[i].height>0
    @sidebitmaps[i].stretch_blt(@sprites["side#{i}"].src_rect,
      @_windowskin,sideRects[i])
    end
  end
  backwidth=@width-4
  backheight=@height-4
  if backwidth>0 && backheight>0
    @backbitmap=ensureBitmap(@backbitmap,backwidth,backheight)
    @sprites["back"].bitmap=@backbitmap
    @sprites["back"].src_rect.set(0,0,backwidth,backheight)
    @backbitmap.clear
    if @stretch
    @backbitmap.stretch_blt(@sprites["back"].src_rect,@_windowskin,backRect)
    else
    tileBitmap(@backbitmap,@sprites["back"].src_rect,@_windowskin,backRect)
    end
    if blindsRect
    tileBitmap(@backbitmap,@sprites["back"].src_rect,@_windowskin,blindsRect)
    end
  else
    @sprites["back"].visible=false
    @sprites["back"].src_rect.set(0,0,0,0)
  end
  end
  if @openness!=255
  opn=@openness/255.0
  for k in @spritekeys
    sprite=@sprites[k]
    ratio=(@height<=0) ? 0 : (sprite.y-@y)*1.0/@height
    sprite.zoom_y=opn
    sprite.oy=0
    sprite.y=(@y+(@height/2.0)+(@height*ratio*opn)-(@height/2*opn)).floor
  end
  else
  for k in @spritekeys
    sprite=@sprites[k]
    sprite.zoom_y=1.0
  end
  end
  i=0
  for k in @spritekeys
  sprite=@sprites[k]
  y=sprite.y
  sprite.y=i
  sprite.oy=(sprite.zoom_y<=0) ? 0 : (i-y)/sprite.zoom_y
  end
 end
end

Y ahora el script de ejemplo, para XP.
El script de ejemplo es muy básico y no soporta memoria pre-guardada de los colores de ventana.

Código:
#==============================================================================
# [RMXP] Ejemplo de uso del script Tono de las ventanas ajustable (by Wecoc)
# Este ejemplo substituye "Estado" del menú por una ventana de ajuste de colores.
#==============================================================================
# get_back_red / get_back_green / get_back_blue / get_back_gray
# set_back_red / set_back_green / set_back_blue / set_back_gray
# increase_back_red / increase_back_green / increase_back_blue / increase_back_gray
#==============================================================================

#==============================================================================
# * Scene_Menu edit
#==============================================================================

class Scene_Menu
 
  def main
    s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "Color test"
    s5 = "Guardar"
    s6 = "Salir"
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    @command_window.index = @menu_index
    if $game_party.actors.size == 0
      @command_window.disable_item(0)
      @command_window.disable_item(1)
      @command_window.disable_item(2)
      @command_window.disable_item(3)
    end
    if $game_system.save_disabled
      @command_window.disable_item(4)
    end
    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 0
    @playtime_window.y = 224
    @steps_window = Window_Steps.new
    @steps_window.x = 0
    @steps_window.y = 320
    @gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 416
    @status_window = Window_MenuStatus.new
    @status_window.x = 160
    @status_window.y = 0
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @command_window.dispose
    @playtime_window.dispose
    @steps_window.dispose
    @gold_window.dispose
    @status_window.dispose
  end
 
  def update_command
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      return
    end
    if Input.trigger?(Input::C)
      if $game_party.actors.size == 0 and @command_window.index < 4
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      case @command_window.index
      when 0  # item
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Item.new
      when 1  # skill
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 2  # equipment
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 3  # status
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_ColorWindow.new
      when 4  # save
        if $game_system.save_disabled
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Save.new
      when 5  # end game
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_End.new
      end
      return
    end
  end
end


#==========================================================
# * Scene_ColorWindow by Wecoc
#==========================================================

class Scene_ColorWindow
  def main
    s1 = "Red"
    s2 = "Green"
    s3 = "Blue"
    s4 = "Gray"
    @color_window = Window_Command.new(200, [s1, s2, s3, s4])
    @color_window.x = 240
    @color_window.y = 240
    refresh
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @color_window.dispose
  end

  def refresh
    @r = @color_window.get_back_red
    @g = @color_window.get_back_green
    @b = @color_window.get_back_blue
    @s = @color_window.get_back_gray
    @color_window.refresh
    @color_window.contents.draw_text(64, 0,100,32,@r.to_s,2)
    @color_window.contents.draw_text(64,32,100,32,@g.to_s,2)
    @color_window.contents.draw_text(64,64,100,32,@b.to_s,2)
    @color_window.contents.draw_text(64,96,100,32,@s.to_s,2)
  end
 
  def update
    @color_window.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Menu.new(3)
      return
    end
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      $scene = Scene_Menu.new(3)
      return
    end
    if Input.repeat?(Input::RIGHT)
      $game_system.se_play($data_system.cursor_se)
      case @color_window.index
      when 0 # red
        if @r == -255
          @color_window.increase_back_red(5)
        else
          @color_window.increase_back_red(10)
        end
      when 1 # green
        if @g == -255
          @color_window.increase_back_green(5)
        else
          @color_window.increase_back_green(10)
        end
      when 2 #blue
        if @b == -255
          @color_window.increase_back_blue(5)
        else
          @color_window.increase_back_blue(10)
        end
      when 3 #gray
        @color_window.increase_back_gray(10)
      end
      refresh
    end
    if Input.repeat?(Input::LEFT)
      $game_system.se_play($data_system.cursor_se)
      case @color_window.index
      when 0 # red
        if @r == 255
          @color_window.increase_back_red(-5)
        else
          @color_window.increase_back_red(-10)
        end
      when 1 # green
        if @g == 255
          @color_window.increase_back_green(-5)
        else
          @color_window.increase_back_green(-10)
        end
      when 2 #blue
        if @b == 255
          @color_window.increase_back_blue(-5)
        else
          @color_window.increase_back_blue(-10)
        end
      when 3 #gray
        if @s == 255
          @color_window.increase_back_gray(-5)
        else
          @color_window.increase_back_gray(-10)
        end
      end
      refresh
    end
  end
end

Tres ejemplos con la windowskin por defecto:


------ ACTUALIZACIÓN v 1.1 ----------
Lo he actualizado un poco (el script de ejemplo es el mismo)

Código:
#==============================================================================
# [RMXP/VX] Tono de las ventanas ajustable (by Wecoc) v. 1.1
# Script adaptado del class Window de Pokemon Essentials
#==============================================================================

#==============================================================================
# Game_System
#==============================================================================


class Game_System
  attr_accessor :back_r
  attr_accessor :back_g
  attr_accessor :back_b
  attr_accessor :back_s
 
  attr_accessor :cursor_r
  attr_accessor :cursor_g
  attr_accessor :cursor_b
  attr_accessor :cursor_s 
 
  attr_accessor :corner_r
  attr_accessor :corner_g
  attr_accessor :corner_b
  attr_accessor :corner_s
 
  alias ini initialize unless $@
  def initialize
    ini
    @back_r = 0
    @back_g = 0
    @back_b = 0
    @back_s = 0
   
    @cursor_r = 0
    @cursor_g = 0
    @cursor_b = 0
    @cursor_s = 0
   
    @corner_r = 0
    @corner_g = 0
    @corner_b = 0
    @corner_s = 0
  end
end

#==============================================================================
# WindowCursorRect
#==============================================================================

class WindowCursorRect < Rect
  def initialize(window)
    @window=window
    @x=0
    @y=0
    @width=0
    @height=0
  end
  attr_reader :x,:y,:width,:height
  def empty
    needupdate=@x!=0 || @y!=0 || @width!=0 || @height!=0
    if needupdate
    @x=0
    @y=0
    @width=0
    @height=0
    @window.width=@window.width
    end
  end
  def isEmpty?
  return @x==0 && @y==0 && @width==0 && @height==0
  end
  def set(x,y,width,height)
    needupdate=@x!=x || @y!=y || @width!=width || @height!=height
    if needupdate
    @x=x
    @y=y
    @width=width
    @height=height
    @window.width=@window.width
    end
  end
  def height=(value)
    @height=value; @window.width=@window.width
  end
  def width=(value)
    @width=value; @window.width=@window.width
  end
  def x=(value)
    @x=value; @window.width=@window.width
  end
  def y=(value)
    @y=value; @window.width=@window.width
  end
end

#==============================================================================
# Window
#==============================================================================

class Window
 attr_reader :tone
 attr_reader :color
 attr_reader :blend_type
 attr_reader :contents_blend_type
 attr_reader :viewport
 attr_reader :contents
 attr_reader :ox
 attr_reader :oy
 attr_reader :x
 attr_reader :y
 attr_reader :z
 attr_reader :width
 attr_reader :active
 attr_reader :pause
 attr_reader :height
 attr_reader :opacity
 attr_reader :back_opacity
 attr_reader :contents_opacity
 attr_reader :visible
 attr_reader :cursor_rect
 attr_reader :openness
 attr_reader :stretch
 def windowskin
  @_windowskin
 end
 def initialize(viewport=nil)
  @sprites={}
  @spritekeys=[
  "back",
  "corner0","side0","scroll0",
  "corner1","side1","scroll1",
  "corner2","side2","scroll2",
  "corner3","side3","scroll3",
  "cursor","contents","pause"
  ]
  @sidebitmaps=[nil,nil,nil,nil]
  @cursorbitmap=nil
  @bgbitmap=nil
  @viewport=viewport
  for i in @spritekeys
  @sprites[i]=Sprite.new(@viewport)
  end
  @disposed=false
  @tone=Tone.new(0,0,0)
  @color=Color.new(0,0,0,0)
 
#  if $game_system.back_r == nil
#    $game_system.back_r = 0
#    $game_system.back_g = 0
#    $game_system.back_b = 0
#    $game_system.back_s = 0
#  end
 
  @back_r = $game_system.back_r
  @back_g = $game_system.back_g
  @back_b = $game_system.back_b
  @back_s = $game_system.back_s
 
  @cursor_r = $game_system.cursor_r
  @cursor_g = $game_system.cursor_g
  @cursor_b = $game_system.cursor_b
  @cursor_s = $game_system.cursor_s
 
  @corner_r = $game_system.corner_r
  @corner_g = $game_system.corner_g
  @corner_b = $game_system.corner_b
  @corner_s = $game_system.corner_s 
 
  @blankcontents=Bitmap.new(1,1)
  @contents=@blankcontents
  @_windowskin=nil
  @rpgvx=false # True: Utiliza las windowskins del VX, False: Utiliza las del XP
  @x=0
  @y=0
  @width=0
  @openness=255
  @height=0
  @ox=0
  @oy=0
  @z=0
  @stretch=true
  @visible=true
  @active=true
  @blend_type=0
  @contents_blend_type=0
  @opacity=255
  @back_opacity=255
  @contents_opacity=255
  @cursor_rect=WindowCursorRect.new(self)
  @cursorblink=0
  @cursoropacity=255
  @pause=false
  @pauseopacity=255
  @pauseframe=0
  privRefresh(true)
 end
 def dispose
  if !self.disposed?
  for i in @sprites
    i[1].dispose if i[1]
    @sprites[i[0]]=nil
  end
  for i in 0...@sidebitmaps.length
    @sidebitmaps[i].dispose if @sidebitmaps[i]
    @sidebitmaps[i]=nil
  end
  @blankcontents.dispose
  @cursorbitmap.dispose if @cursorbitmap
  @backbitmap.dispose if @backbitmap
  @sprites.clear
  @sidebitmaps.clear
  @_windowskin=nil
  @_contents=nil
  @disposed=true
 
  $game_system.back_r = @back_r
  $game_system.back_g = @back_g
  $game_system.back_b = @back_b
  $game_system.back_s = @back_s
 
  $game_system.cursor_r = @cursor_r
  $game_system.cursor_g = @cursor_g
  $game_system.cursor_b = @cursor_b
  $game_system.cursor_s = @cursor_s

  $game_system.corner_r = @corner_r
  $game_system.corner_g = @corner_g
  $game_system.corner_b = @corner_b
  $game_system.corner_s = @corner_s
  end
 end
 def openness=(value)
  @openness=value
  @openness=0 if @openness<0
  @openness=255 if @openness>255
  privRefresh
 end
 def stretch=(value)
  @stretch=value
  privRefresh(true)
 end
 def visible=(value)
  @visible=value
  privRefresh
 end
 def viewport=(value)
  @viewport=value
  for i in @spritekeys
  @sprites[i].dispose
  if @sprites[i].is_a?(Sprite)
    @sprites[i]=Sprite.new(@viewport)
  elsif @sprites[i].is_a?(Plane)
    @sprites[i]=Plane.new(@viewport)
  else
    @sprites[i]=nil
  end
  end
  privRefresh(true)
 end
 def z=(value)
  @z=value
  privRefresh
 end
 def disposed?
  return @disposed
 end
 def contents=(value)
  @contents=value
  privRefresh
 end
 def windowskin=(value)
  @_windowskin=value
  if value && value.is_a?(Bitmap) && !value.disposed? && value.width==128
    @rpgvx=true
  else
    @rpgvx=false
  end
  privRefresh(true)
 end
 def ox=(value)
  @ox=value
  privRefresh
 end
 def active=(value)
  @active=value
  privRefresh(true)
 end
 def cursor_rect=(value)
  if !value
    @cursor_rect.empty
  else
    @cursor_rect.set(value.x,value.y,value.width,value.height)
  end
 end
 def oy=(value)
  @oy=value
  privRefresh
 end
 def width=(value)
  @width=value
  privRefresh(true)
 end
 def height=(value)
  @height=value
  privRefresh(true)
 end
 def pause=(value)
  @pause=value
  @pauseopacity=0 if !value
  privRefresh
 end
 def x=(value)
  @x=value
  privRefresh
 end
 def y=(value)
  @y=value
  privRefresh
 end
 def opacity=(value)
  @opacity=value
  @opacity=0 if @opacity<0
  @opacity=255 if @opacity>255
  privRefresh
 end
 def back_opacity=(value)
  @back_opacity=value
  @back_opacity=0 if @back_opacity<0
  @back_opacity=255 if @back_opacity>255
  privRefresh
 end

 def get_back_red
  if @back_r == nil
    return 0
  else
    return @back_r
  end
 end
 def get_back_green
  if @back_g == nil
    return 0
  else
  return @back_g
  end
 end
 def get_back_blue
  if @back_b == nil
    return 0
  else
  return @back_b
  end
 end
 def get_back_gray
  if @back_s == nil
    return 0
  else
  return @back_s
  end
 end
 
 def set_back_red(value)
  @back_r=value
  @back_r=-255 if @back_r<-255
  @back_r=255 if @back_r>255
 end
 def set_back_green(value)
  @back_g=value
  @back_g=-255 if @back_g<-255
  @back_g=255 if @back_g>255
 end
 def set_back_blue(value)
  @back_b=value
  @back_b=-255 if @back_b<-255
  @back_b=255 if @back_b>255
 end
 def set_back_gray(value)
  @back_s=value
  @back_s=0 if @back_s<0
  @back_s=255 if @back_s>255
 end

 def increase_back_red(value)
  @back_r+=value
  @back_r=-255 if @back_r<-255
  @back_r=255 if @back_r>255
 end
 def increase_back_green(value)
  @back_g+=value
  @back_g=-255 if @back_g<-255
  @back_g=255 if @back_g>255
 end
 def increase_back_blue(value)
  @back_b+=value
  @back_b=-255 if @back_b<-255
  @back_b=255 if @back_b>255
 end
 def increase_back_gray(value)
  @back_s+=value
  @back_s=0 if @back_s<0
  @back_s=255 if @back_s>255
 end

 def get_cursor_red
  if @cursor_r == nil
    return 0
  else
    return @cursor_r
  end
 end
 def get_cursor_green
  if @cursor_g == nil
    return 0
  else
  return @cursor_g
  end
 end
 def get_cursor_blue
  if @cursor_b == nil
    return 0
  else
  return @cursor_b
  end
 end
 def get_cursor_gray
  if @cursor_s == nil
    return 0
  else
  return @cursor_s
  end
 end
 
 def set_cursor_red(value)
  @cursor_r=value
  @cursor_r=-255 if @cursor_r<-255
  @cursor_r=255 if @cursor_r>255
 end
 def set_cursor_green(value)
  @cursor_g=value
  @cursor_g=-255 if @cursor_g<-255
  @cursor_g=255 if @cursor_g>255
 end
 def set_cursor_blue(value)
  @cursor_b=value
  @cursor_b=-255 if @cursor_b<-255
  @cursor_b=255 if @cursor_b>255
 end
 def set_cursor_gray(value)
  @cursor_s=value
  @cursor_s=0 if @cursor_s<0
  @cursor_s=255 if @cursor_s>255
 end

 def increase_cursor_red(value)
  @cursor_r+=value
  @cursor_r=-255 if @cursor_r<-255
  @cursor_r=255 if @cursor_r>255
 end
 def increase_cursor_green(value)
  @cursor_g+=value
  @cursor_g=-255 if @cursor_g<-255
  @cursor_g=255 if @cursor_g>255
 end
 def increase_cursor_blue(value)
  @cursor_b+=value
  @cursor_b=-255 if @cursor_b<-255
  @cursor_b=255 if @cursor_b>255
 end
 def increase_cursor_gray(value)
  @cursor_s+=value
  @cursor_s=0 if @cursor_s<0
  @cursor_s=255 if @cursor_s>255
 end
 
 def get_cursor_red
  if @cursor_r == nil
    return 0
  else
    return @cursor_r
  end
 end
 def get_cursor_green
  if @cursor_g == nil
    return 0
  else
  return @cursor_g
  end
 end
 def get_cursor_blue
  if @cursor_b == nil
    return 0
  else
  return @cursor_b
  end
 end
 def get_cursor_gray
  if @cursor_s == nil
    return 0
  else
  return @cursor_s
  end
 end
 
 def set_corner_red(value)
  @corner_r=value
  @corner_r=-255 if @corner_r<-255
  @corner_r=255 if @corner_r>255
 end
 def set_corner_green(value)
  @corner_g=value
  @corner_g=-255 if @corner_g<-255
  @corner_g=255 if @corner_g>255
 end
 def set_corner_blue(value)
  @corner_b=value
  @corner_b=-255 if @corner_b<-255
  @corner_b=255 if @corner_b>255
 end
 def set_corner_gray(value)
  @corner_s=value
  @corner_s=0 if @corner_s<0
  @corner_s=255 if @corner_s>255
 end

 def increase_corner_red(value)
  @corner_r+=value
  @corner_r=-255 if @corner_r<-255
  @corner_r=255 if @corner_r>255
 end
 def increase_corner_green(value)
  @corner_g+=value
  @corner_g=-255 if @corner_g<-255
  @corner_g=255 if @corner_g>255
 end
 def increase_corner_blue(value)
  @corner_b+=value
  @corner_b=-255 if @corner_b<-255
  @corner_b=255 if @corner_b>255
 end
 def increase_corner_gray(value)
  @corner_s+=value
  @corner_s=0 if @cursor_s<0
  @corner_s=255 if @corner_s>255
 end
 
 def contents_opacity=(value)
  @contents_opacity=value
  @contents_opacity=0 if @contents_opacity<0
  @contents_opacity=255 if @contents_opacity>255
  privRefresh
 end

 def tone=(value)
  @tone=value
  privRefresh
 end
 def color=(value)
  @color=value
  privRefresh
 end
 def blend_type=(value)
  @blend_type=value
  privRefresh
 end
 def flash(color,duration)
  return if disposed?
  for i in @sprites
  i[1].flash(color,duration)
  end
 end
 def update
  return if disposed?
  mustchange=false
  if @active
  if @cursorblink==0
    @cursoropacity-=8
    @cursorblink=1 if @cursoropacity<=128
  else
    @cursoropacity+=8
    @cursorblink=0 if @cursoropacity>=255
  end
  mustchange=true if !@cursor_rect.isEmpty?
  else
  mustchange=true if @cursoropacity!=128
  @cursoropacity=128
  end
  if @pause
  @pauseframe=(Graphics.frame_count / 8) % 4
  @pauseopacity=[@pauseopacity+64,255].min
  mustchange=true
  end
  privRefresh if mustchange
  for i in @sprites
  i[1].update
  end
 end
 private
 def ensureBitmap(bitmap,dwidth,dheight)
  if !bitmap||bitmap.disposed?||bitmap.width<dwidth||bitmap.height<dheight
  bitmap.dispose if bitmap
  bitmap=Bitmap.new([1,dwidth].max,[1,dheight].max)
  end
  return bitmap
 end
 def tileBitmap(dstbitmap,dstrect,srcbitmap,srcrect)
  return if !srcbitmap || srcbitmap.disposed?
  left=dstrect.x
  top=dstrect.y
  y=0;loop do break unless y<dstrect.height
  x=0;loop do break unless x<dstrect.width
    dstbitmap.blt(x+left,y+top,srcbitmap,srcrect)
    x+=srcrect.width
  end
  y+=srcrect.height
  end
 end
 def privRefresh(changeBitmap=false)
  return if self.disposed?
  backopac=self.back_opacity*self.opacity/255
  contopac=self.contents_opacity
  cursoropac=@cursoropacity*contopac/255
  for i in 0...4
  @sprites["corner#{i}"].bitmap=@_windowskin
  @sprites["scroll#{i}"].bitmap=@_windowskin
  end
  @sprites["pause"].bitmap=@_windowskin
  @sprites["contents"].bitmap=@contents
  if @_windowskin && !@_windowskin.disposed?
  for i in 0...4
    @sprites["corner#{i}"].opacity=@opacity
    @sprites["corner#{i}"].tone=Tone.new(@corner_r, @corner_g, @corner_b, @corner_s)
    @sprites["corner#{i}"].color=@color
    @sprites["corner#{i}"].blend_type=@blend_type
    @sprites["corner#{i}"].visible=@visible
    @sprites["side#{i}"].opacity=@opacity
    @sprites["side#{i}"].tone=Tone.new(@corner_r, @corner_g, @corner_b, @corner_s)
    @sprites["side#{i}"].color=@color
    @sprites["side#{i}"].blend_type=@blend_type
    @sprites["side#{i}"].visible=@visible
    @sprites["scroll#{i}"].opacity=@opacity
    @sprites["scroll#{i}"].tone=Tone.new(@corner_r, @corner_g, @corner_b, @corner_s)
    @sprites["scroll#{i}"].blend_type=@blend_type
    @sprites["scroll#{i}"].color=@color
    @sprites["scroll#{i}"].visible=@visible
  end
  @sprites["back"].color=@color
  @sprites["back"].tone=Tone.new(@back_r, @back_g, @back_b, @back_s)
  @sprites["back"].blend_type=@blend_type
 
  @sprites["cursor"].color=@color
  @sprites["cursor"].tone=Tone.new(@cursor_r, @cursor_g, @cursor_b, @cursor_s)
  @sprites["cursor"].blend_type=@blend_type
 
  @sprites["pause"].color=@color
  @sprites["pause"].tone=@tone
  @sprites["pause"].blend_type=@blend_type 
 
  @sprites["contents"].color=@color
  @sprites["contents"].tone=@tone
  @sprites["contents"].blend_type=@blend_type 
 
  @sprites["contents"].blend_type=@contents_blend_type
  @sprites["back"].opacity=backopac
  @sprites["contents"].opacity=contopac
  @sprites["cursor"].opacity=cursoropac
  @sprites["pause"].opacity=@pauseopacity
  @sprites["back"].visible=@visible
  @sprites["contents"].visible=@visible && @openness==255
  @sprites["pause"].visible=@visible && @pause
  @sprites["cursor"].visible=@visible && @openness==255
  hascontents=(@contents && !@contents.disposed?)
  @sprites["scroll0"].visible = @visible && hascontents && @oy > 0
  @sprites["scroll1"].visible = @visible && hascontents && @ox > 0
  @sprites["scroll2"].visible = @visible && hascontents && (@contents.width - @ox) > @width-32
  @sprites["scroll3"].visible = @visible && hascontents && (@contents.height - @oy) > @height-32
  else
  for i in 0...4
    @sprites["corner#{i}"].visible=false
    @sprites["side#{i}"].visible=false
    @sprites["scroll#{i}"].visible=false
  end
  @sprites["contents"].visible=@visible && @openness==255
  @sprites["contents"].color=@color
  @sprites["contents"].tone=@tone
  @sprites["contents"].blend_type=@contents_blend_type
  @sprites["contents"].opacity=contopac
  @sprites["back"].visible=false
  @sprites["pause"].visible=false
  @sprites["cursor"].visible=false
  end
  for i in @sprites
  i[1].z=@z
  end
  if @rpgvx
    @sprites["cursor"].z=@z#+1
    @sprites["contents"].z=@z#+2
    @sprites["pause"].z=@z#+2
  else
    @sprites["cursor"].z=@z+1
    @sprites["contents"].z=@z+2
    @sprites["pause"].z=@z+2
  end
  if @rpgvx
  trimX=64
  trimY=0
  backRect=Rect.new(0,0,64,64)
  blindsRect=Rect.new(0,64,64,64)
  else
  trimX=128
  trimY=0
  backRect=Rect.new(0,0,128,128)
  blindsRect=nil
  end
  @sprites["corner0"].src_rect.set(trimX,trimY+0,16,16);
  @sprites["corner1"].src_rect.set(trimX+48,trimY+0,16,16);
  @sprites["corner2"].src_rect.set(trimX,trimY+48,16,16);
  @sprites["corner3"].src_rect.set(trimX+48,trimY+48,16,16);
  @sprites["scroll0"].src_rect.set(trimX+24, trimY+16, 16, 8) # up
  @sprites["scroll3"].src_rect.set(trimX+24, trimY+40, 16, 8) # down
  @sprites["scroll1"].src_rect.set(trimX+16, trimY+24, 8, 16) # left
  @sprites["scroll2"].src_rect.set(trimX+40, trimY+24, 8, 16) # right
  cursorX=trimX
  cursorY=trimY+64
  sideRects=[
  Rect.new(trimX+16,trimY+0,32,16),
  Rect.new(trimX,trimY+16,16,32),
  Rect.new(trimX+48,trimY+16,16,32),
  Rect.new(trimX+16,trimY+48,32,16)
  ]
  if @width>32 && @height>32
  @sprites["contents"].src_rect.set(@ox,@oy,@width-32,@height-32)
  else
  @sprites["contents"].src_rect.set(0,0,0,0)
  end
  pauseRects=[
  trimX+32,trimY+64,
  trimX+48,trimY+64,
  trimX+32,trimY+80,
  trimX+48,trimY+80,
  ]
  pauseWidth=16
  pauseHeight=16
  @sprites["pause"].src_rect.set(
    pauseRects[@pauseframe*2],
    pauseRects[@pauseframe*2+1],
    pauseWidth,pauseHeight
  )
  @sprites["pause"].x=(@x+(@width/2)-(pauseWidth/2))#+216
  @sprites["pause"].y=(@y+@height-16)#-8
  @sprites["contents"].x=@x+16
  @sprites["contents"].y=@y+16
  @sprites["corner0"].x=@x
  @sprites["corner0"].y=@y
  @sprites["corner1"].x=@x+@width-16
  @sprites["corner1"].y=@y
  @sprites["corner2"].x=@x
  @sprites["corner2"].y=@y+@height-16
  @sprites["corner3"].x=@x+@width-16
  @sprites["corner3"].y=@y+@height-16
  @sprites["side0"].x=@x+16
  @sprites["side0"].y=@y
  @sprites["side1"].x=@x
  @sprites["side1"].y=@y+16
  @sprites["side2"].x=@x+@width-16
  @sprites["side2"].y=@y+16
  @sprites["side3"].x=@x+16
  @sprites["side3"].y=@y+@height-16
  @sprites["scroll0"].x = @x+@width / 2 - 8
  @sprites["scroll0"].y = @y+8
  @sprites["scroll1"].x = @x+8
  @sprites["scroll1"].y = @y+@height / 2 - 8
  @sprites["scroll2"].x = @x+@width - 16
  @sprites["scroll2"].y = @y+@height / 2 - 8
  @sprites["scroll3"].x = @x+@width / 2 - 8
  @sprites["scroll3"].y = @y+@height - 16
  @sprites["back"].x=@x+2
  @sprites["back"].y=@y+2
  @sprites["cursor"].x=@x+16+@cursor_rect.x
  @sprites["cursor"].y=@y+16+@cursor_rect.y
  if changeBitmap && @_windowskin && !@_windowskin.disposed?
  width=@cursor_rect.width
  height=@cursor_rect.height
  if width > 0 && height > 0
      cursorrects=[
      # sides
      Rect.new(cursorX+2, cursorY+0, 28, 2),
      Rect.new(cursorX+0, cursorY+2, 2, 28),
      Rect.new(cursorX+30, cursorY+2, 2, 28),
      Rect.new(cursorX+2, cursorY+30, 28, 2),
      # corners
      Rect.new(cursorX+0, cursorY+0, 2, 2),
      Rect.new(cursorX+30, cursorY+0, 2, 2),
      Rect.new(cursorX+0, cursorY+30, 2, 2),
      Rect.new(cursorX+30, cursorY+30, 2, 2),
      # back
      Rect.new(cursorX+2, cursorY+2, 28, 28)
      ]
      margin=2
      fullmargin=4
         
      @cursorbitmap = ensureBitmap(@cursorbitmap, width, height)
      @cursorbitmap.clear
      @sprites["cursor"].bitmap=@cursorbitmap
      @sprites["cursor"].src_rect.set(0,0,width,height)
      rect = Rect.new(margin,margin,
                      width - fullmargin, height - fullmargin)
      @cursorbitmap.stretch_blt(rect, @_windowskin, cursorrects[8])
      @cursorbitmap.blt(0, 0, @_windowskin, cursorrects[4])# top left
      @cursorbitmap.blt(width-margin, 0, @_windowskin, cursorrects[5]) # top right
      @cursorbitmap.blt(0, height-margin, @_windowskin, cursorrects[6]) # bottom right
      @cursorbitmap.blt(width-margin, height-margin, @_windowskin, cursorrects[7]) # bottom left
      rect = Rect.new(margin, 0,
                      width - fullmargin, margin)
      @cursorbitmap.stretch_blt(rect, @_windowskin, cursorrects[0])
      rect = Rect.new(0, margin,
                      margin, height - fullmargin)
      @cursorbitmap.stretch_blt(rect, @_windowskin, cursorrects[1])
      rect = Rect.new(width - margin, margin,
                      margin, height - fullmargin)
      @cursorbitmap.stretch_blt(rect, @_windowskin, cursorrects[2])
      rect = Rect.new(margin, height-margin,
                      width - fullmargin, margin)
      @cursorbitmap.stretch_blt(rect, @_windowskin, cursorrects[3])
  else
      @sprites["cursor"].visible=false
      @sprites["cursor"].src_rect.set(0,0,0,0)
  end
  for i in 0..3
    dwidth=(i==0||i==3) ? @width-32 : 16
    dheight=(i==0||i==3) ? 16 : @height-32
    @sidebitmaps[i]=ensureBitmap(@sidebitmaps[i],dwidth,dheight)
    @sprites["side#{i}"].bitmap=@sidebitmaps[i]
    @sprites["side#{i}"].src_rect.set(0,0,dwidth,dheight)
    @sidebitmaps[i].clear
    if sideRects[i].width>0 && sideRects[i].height>0
    @sidebitmaps[i].stretch_blt(@sprites["side#{i}"].src_rect,
      @_windowskin,sideRects[i])
    end
  end
  backwidth=@width-4
  backheight=@height-4
  if backwidth>0 && backheight>0
    @backbitmap=ensureBitmap(@backbitmap,backwidth,backheight)
    @sprites["back"].bitmap=@backbitmap
    @sprites["back"].src_rect.set(0,0,backwidth,backheight)
    @backbitmap.clear
    if @stretch
    @backbitmap.stretch_blt(@sprites["back"].src_rect,@_windowskin,backRect)
    else
    tileBitmap(@backbitmap,@sprites["back"].src_rect,@_windowskin,backRect)
    end
    if blindsRect
    tileBitmap(@backbitmap,@sprites["back"].src_rect,@_windowskin,blindsRect)
    end
  else
    @sprites["back"].visible=false
    @sprites["back"].src_rect.set(0,0,0,0)
  end
  end
  if @openness!=255
  opn=@openness/255.0
  for k in @spritekeys
    sprite=@sprites[k]
    ratio=(@height<=0) ? 0 : (sprite.y-@y)*1.0/@height
    sprite.zoom_y=opn
    sprite.oy=0
    sprite.y=(@y+(@height/2.0)+(@height*ratio*opn)-(@height/2*opn)).floor
  end
  else
  for k in @spritekeys
    sprite=@sprites[k]
    sprite.zoom_y=1.0
  end
  end
  i=0
  for k in @spritekeys
  sprite=@sprites[k]
  y=sprite.y
  sprite.y=i
  sprite.oy=(sprite.zoom_y<=0) ? 0 : (i-y)/sprite.zoom_y
  end
 end
end

Los códigos de uso van igual, pero ahora cambiando en cada uno back por cursor o corner se puede ajustar el tono del cursor y de los bordes de la ventana.


Última edición por Wecoc el 2012-07-27, 20:24, editado 1 vez
avatar
Wecoc
Administrador
Administrador



Créditos 12240

Gracias : 639

Volver arriba Ir abajo

Re: [RMXP/VX] Tono de las ventanas ajustable

Mensaje por k43de el 2012-07-26, 22:52

Es bueno por que es simple y practico, no se nada de scripts pero te felizicito, no creo haber visto algo parecido, veré mas de tus aportes Wecoc, saludos y buena cosecha.
avatar
k43de
Iniciado
Iniciado

0/3

Créditos 13

Gracias : 2

Volver arriba Ir abajo

Re: [RMXP/VX] Tono de las ventanas ajustable

Mensaje por orochii el 2012-07-27, 06:54

Es una de las "features" que trae el Ace, y es curioso verlo aplicado en eso >_<. Lo que sería mejor es que aparte pudiese dársele un color por aparte a ciertas cosas (fondos y bordes por ejemplo).

No recuerdo cómo era que la ventana se dibujaba, pero si usaba blits de trozos en lugar de hacer "copias de la imagen entera", no habría problema en hacerles cambios de tono por separado.

Anyway, buen aporte Wecoc C:,
Orochii Zouveleki
avatar
orochii
Reportero

0/3

Créditos 7767

Gracias : 457

Volver arriba Ir abajo

Re: [RMXP/VX] Tono de las ventanas ajustable

Mensaje por Wecoc el 2012-07-27, 20:25

Gracias por comentar eso Orochii, he actualizado el post principal, ahora también se puede cambiar el tono del cursor y de los bordes de ventana.
avatar
Wecoc
Administrador
Administrador



Créditos 12240

Gracias : 639

Volver arriba Ir abajo

Re: [RMXP/VX] Tono de las ventanas ajustable

Mensaje por Wecoc el 2018-02-06, 11:44

He hecho una nueva versión que requiere el script Window - Hidden RGSS Class que ya posteé en el foro (ver al final del post principal del tutorial de ese topic). A cambio está mucho mejor optimizado y tenéis disponibles los otros añadidos que se hicieron para ese script.

Script de tono de las ventanas ajustable:
Código:
#==============================================================================
# ** [XP/VX/Ace] Tono de las ventanas ajustable (by Wecoc) v1.2
#------------------------------------------------------------------------------
# Este script requiere el Window Hidden Class de Wecoc
# Se puede encontrar aquí:
# http://www.mundo-maker.com/t13927-xptutorial-windowskins-al-detalle
# Pegad este debajo del Window para que funcione
#==============================================================================

#==============================================================================
# * Game_System
#==============================================================================

class Game_System
  #--------------------------------------------------------------------------
  attr_accessor :back_r, :back_g, :back_b, :back_s  
  attr_accessor :cursor_r, :cursor_g, :cursor_b, :cursor_s  
  attr_accessor :corner_r, :corner_g, :corner_b, :corner_s
  #--------------------------------------------------------------------------
  alias window_back_tone_ini initialize unless $@
  def initialize
    window_back_tone_ini
    base = [0, 0, 0, 0]
    @back_r, @back_g, @back_b, @back_s = *base
    @cursor_r, @cursor_g, @cursor_b, @cursor_s = *base
    @corner_r, @corner_g, @corner_b, @corner_s = *base
  end
  #--------------------------------------------------------------------------
end

#==============================================================================
# * Window
#==============================================================================

class Window
  #--------------------------------------------------------------------------
  alias back_tone_ini initialize unless $@
  def initialize
    back_tone_ini
    update_tone
  end
  #--------------------------------------------------------------------------
  alias back_tone_upd update unless $@
  def update
    back_tone_upd
    update_tone
  end
  #--------------------------------------------------------------------------
  def update_tone
    @bg.tone = Tone.new($game_system.back_r, $game_system.back_g,
    $game_system.back_b, $game_system.back_s)
    @frame.tone = Tone.new($game_system.corner_r, $game_system.corner_g,
    $game_system.corner_b, $game_system.corner_s)
    @cursor_rect.tone = Tone.new($game_system.cursor_r,
    $game_system.cursor_g, $game_system.cursor_b, $game_system.cursor_s)
  end
  #--------------------------------------------------------------------------
end

Nueva versión del ejemplo de uso:
Código:
#==============================================================================
# [XP] Ejemplo de uso del script Tono de las ventanas ajustable v1.2 (by Wecoc)
# Este ejemplo substituye "Estado" del menú por una ventana de ajuste de colores
#==============================================================================

#==============================================================================
# * ToneWindow
#==============================================================================

class ToneWindow < Window_Command
  #--------------------------------------------------------------------------
  attr_accessor :back_r, :back_g, :back_b, :back_s 
  attr_accessor :cursor_r, :cursor_g, :cursor_b, :cursor_s 
  attr_accessor :corner_r, :corner_g, :corner_b, :corner_s
  #--------------------------------------------------------------------------
  def update_tone
    if @back_r.nil?
      base = [0, 0, 0, 0]
      @back_r, @back_g, @back_b, @back_s = *base
      @cursor_r, @cursor_g, @cursor_b, @cursor_s = *base
      @corner_r, @corner_g, @corner_b, @corner_s = *base
    end
    @bg.tone = Tone.new(@back_r, @back_g, @back_b, @back_s)
    @frame.tone = Tone.new(@corner_r, @corner_g, @corner_b, @corner_s)
    @cursor_rect.tone = Tone.new(@cursor_r, @cursor_g, @cursor_b, @cursor_s)
  end
  #--------------------------------------------------------------------------
  def refresh
    super
    return if @back_r.nil?
    self.contents.draw_text(64,  0, 100, 32, @back_r.to_i.to_s, 2)
    self.contents.draw_text(64, 32, 100, 32, @back_g.to_i.to_s, 2)
    self.contents.draw_text(64, 64, 100, 32, @back_b.to_i.to_s, 2)
    self.contents.draw_text(64, 96, 100, 32, @back_s.to_i.to_s, 2)
  end
end

#==============================================================================
# * Scene_Menu
#==============================================================================

class Scene_Menu
  #--------------------------------------------------------------------------
  # * Main
  #--------------------------------------------------------------------------
  def main
    s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "Color test"
    s5 = "Guardar"
    s6 = "Salir"
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    @command_window.index = @menu_index
    if $game_party.actors.size == 0
      @command_window.disable_item(0)
      @command_window.disable_item(1)
      @command_window.disable_item(2)
      @command_window.disable_item(3)
    end
    if $game_system.save_disabled
      @command_window.disable_item(4)
    end
    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 0
    @playtime_window.y = 224
    @steps_window = Window_Steps.new
    @steps_window.x = 0
    @steps_window.y = 320
    @gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 416
    @status_window = Window_MenuStatus.new
    @status_window.x = 160
    @status_window.y = 0
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @command_window.dispose
    @playtime_window.dispose
    @steps_window.dispose
    @gold_window.dispose
    @status_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Update Command
  #--------------------------------------------------------------------------
  def update_command
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      return
    end
    if Input.trigger?(Input::C)
      if $game_party.actors.size == 0 and @command_window.index < 4
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      case @command_window.index
      when 0  # item
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Item.new
      when 1  # skill
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 2  # equipment
        $game_system.se_play($data_system.decision_se)
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 3  # status
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_ToneWindow.new
      when 4  # save
        if $game_system.save_disabled
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Save.new
      when 5  # end game
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_End.new
      end
      return
    end
  end
end

#==========================================================
# * Scene_ToneWindow
#==========================================================

class Scene_ToneWindow
  def main
    s1 = "Red"
    s2 = "Green"
    s3 = "Blue"
    s4 = "Gray"
    @tone_window = ToneWindow.new(200, [s1, s2, s3, s4])
    @tone_window.x = 240
    @tone_window.y = 240
    @tone_window.back_r = $game_system.back_r
    @tone_window.back_g = $game_system.back_g
    @tone_window.back_b = $game_system.back_b
    @tone_window.back_s = $game_system.back_s
    @tone_window.refresh
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @tone_window.dispose
  end
 
  def update
    @tone_window.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Menu.new(3)
      return
    end
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      $game_system.back_r = @tone_window.back_r
      $game_system.back_g = @tone_window.back_g
      $game_system.back_b = @tone_window.back_b
      $game_system.back_s = @tone_window.back_s
      $scene = Scene_Menu.new(3)
      return
    end
    if Input.repeat?(Input::RIGHT)
      $game_system.se_play($data_system.cursor_se)
      case @tone_window.index
      when 0 # red
        r = @tone_window.back_r + 10
        r = (r.to_f / 10).floor * 10
        r = [255, r].min
        @tone_window.back_r = r
      when 1 # green
        g = @tone_window.back_g + 10
        g = (g.to_f / 10).floor * 10
        g = [255, g].min
        @tone_window.back_g = g
      when 2 #blue
        b = @tone_window.back_b + 10
        b = (b.to_f / 10).floor * 10
        b = [255, b].min
        @tone_window.back_b = b
      when 3 #gray
        s = @tone_window.back_s + 10
        s = (s.to_f / 10).floor * 10
        s = [255, s].min
        @tone_window.back_s = s
      end
      @tone_window.refresh
    end
    if Input.repeat?(Input::LEFT)
      $game_system.se_play($data_system.cursor_se)
      case @tone_window.index
      when 0 # red
        r = @tone_window.back_r - 10
        r = (r.to_f / 10).ceil * 10
        r = [-255, r].max
        @tone_window.back_r = r
      when 1 # green
        g = @tone_window.back_g - 10
        g = (g.to_f / 10).ceil * 10
        g = [-255, g].max
        @tone_window.back_g = g
      when 2 #blue
        b = @tone_window.back_b - 10
        b = (b.to_f / 10).ceil * 10
        b = [-255, b].max
        @tone_window.back_b = b
      when 3 #gray
        s = @tone_window.back_s - 10
        s = (s.to_f / 10).ceil * 10
        s = [0, s].max
        @tone_window.back_s = s
      end
      @tone_window.refresh
    end
  end
end

Olvidaos de las instrucciones del post principal, ahora para cambiar los tonos de las ventanas solo tenéis que usarlo como cualquier otra variable de Game_System.

$game_system.back_r = value
$game_system.back_g = value
$game_system.back_b = value
$game_system.back_s = value

Cambiad value por el nuevo valor. A parte de back también podéis hacer lo mismo con cursor y corner.
Está pensado para que todas las ventanas tengan el mismo tono a la vez... Si queréis que cada ventana pueda tener un tono distinto tendréis que editar un poco el script principal pero también se puede hacer con unos mínimos conocimientos de script.

Espero que os guste.
avatar
Wecoc
Administrador
Administrador



Créditos 12240

Gracias : 639

Volver arriba Ir abajo

Re: [RMXP/VX] Tono de las ventanas ajustable

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.