Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP] Window Shader

Ver el tema anterior Ver el tema siguiente Ir abajo

[XP] Window Shader

Mensaje por Wecoc el 2013-09-14, 22:41

Este script lo hice hace mucho y nunca lo subí porque me pareció una bírria xDD pero ya que Leda me lo ha recordado, lo subo. Este script hace que el back de las windowskins sea un shader; un cambio de tono, color y hue de lo que hay debajo.

Hay 3 windowskins por defecto; Blue, Red y Black pero se pueden poner tantas como se quiera justo al principio del script. Para cambiar de windowskin durante el juego, poned en un evento $window_type = 0 donde ese 0 en realidad será el número de la windowskin en el script.

Código:
#==============================================================================
# ** Window Shader
#==============================================================================

$window_type = 0

class Spriteset_Window < Spriteset_Map
  def get_change(opacity=255)
    opacity = opacity.to_f
    case $window_type
    when 0 # Blue
      tone = [-128.0, -64.0, 0.0, 175.0]
      color = [50.0, 32.0, 32.0, 100.0]
      hue = 30
    when 1 # Red
      tone = [0.0, -128.0, -200.0, 100.0]
      color = [32.0, 32.0, 32.0, 100.0]
      hue = 0
    when 2 # Black
      tone = [-75.0, -75.0, -75.0, 135.0]
      color = [32.0, 32.0, 32.0, 160.0]
      hue = 120
    end
    tone.collect!{|x| x *= opacity / 255}
    color.collect!{|x| x *= opacity / 255}
    hue *= opacity / 255
    self.tone = Tone.new(tone[0], tone[1], tone[2], tone[3])
    self.color = Color.new(color[0], color[1], color[2], color[3])
    self.hue = hue
  end
end

#--------------------------------------------------------------------------
# * RPG::Cache
#--------------------------------------------------------------------------

module RPG
  module Cache
    @cache = {}
    def self.autotile(filename, hue=0)
      self.load_bitmap("Graphics/Autotiles/", filename, hue)
    end
    def self.tileset(filename, hue=0)
      self.load_bitmap("Graphics/Tilesets/", filename, hue)
    end
    def self.battleback(filename, hue=0)
      self.load_bitmap("Graphics/Battlebacks/", filename, hue)
    end
  end
end

#--------------------------------------------------------------------------
# * Spriteset_Window
#--------------------------------------------------------------------------

class Spriteset_Window < Spriteset_Map
  def initialize(res_x=0,res_y=0,res_width=640,res_height=480,res_z=0)
    @hue = 0
    @res_x = res_x
    @res_y = res_y
    @viewport1 = Viewport.new(res_x,res_y,res_width,res_height)
    @viewport2 = Viewport.new(res_x,res_y,res_width,res_height)
    @viewport3 = Viewport.new(res_x,res_y,res_width,res_height)
    @viewport1.z = res_z
    @viewport2.z = res_z+200
    @viewport3.z = res_z+5000
   
    @tilemap = Tilemap.new(@viewport1)
    @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
 
  for i in 0..6
      autotile_name = $game_map.autotile_names[i]
      @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
    end
 
  @tilemap.map_data = $game_map.data
    @tilemap.priorities = $game_map.priorities
    @panorama = Plane.new(@viewport1)
    @panorama.z = -1000
    @fog = Plane.new(@viewport1)
    @fog.z = res_z+3000
    @character_sprites = []
 
  for i in $game_map.events.keys.sort
      sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
      sprite.x -= res_x
      sprite.y -= res_y
      @character_sprites.push(sprite)
    end
    sprite_chara = Sprite_Character.new(@viewport1, $game_player)
    sprite_chara.x -= res_x
    sprite_chara.y -= res_y
    @character_sprites.push(sprite_chara)
 
  @weather = RPG::Weather.new(@viewport1)
    @picture_sprites = []
    for i in 1..50
      sprite = Sprite_Picture.new(@viewport2, $game_screen.pictures[i])
      sprite.x -= res_x
      sprite.y -= res_y
      @picture_sprites.push(sprite)
    end
 
  if @panorama_name != ""
      @panorama.bitmap = RPG::Cache.panorama($game_map.panorama_name,
      $game_map.panorama_hue)
    end
    if @fog_name != ""
      @fog.bitmap = RPG::Cache.fog($game_map.fog_name, $game_map.fog_hue)
    end
    @tilemap.ox = res_x + $game_map.display_x / 4
    @tilemap.oy = res_y + $game_map.display_y / 4
    @panorama.ox = res_x + $game_map.display_x / 8
    @panorama.oy = res_y + $game_map.display_y / 8
    @fog.zoom_x = $game_map.fog_zoom / 100.0
    @fog.zoom_y = $game_map.fog_zoom / 100.0
    @fog.opacity = $game_map.fog_opacity
    @fog.blend_type = $game_map.fog_blend_type
    @fog.ox = res_x + $game_map.display_x / 4 + $game_map.fog_ox
    @fog.oy = res_y + $game_map.display_y / 4 + $game_map.fog_oy
    @fog.tone = $game_map.fog_tone
    @weather.type = $game_screen.weather_type
    @weather.max = $game_screen.weather_max
    @weather.ox = res_x + $game_map.display_x / 4
    @weather.oy = res_y + $game_map.display_y / 4
    @viewport1.tone = $game_screen.tone
    @viewport1.ox = $game_screen.shake
    @viewport3.color = $game_screen.flash_color
    @timer_sprite = Sprite_Timer.new
    update
  end
 
  def tone=(tone)
    @viewport1.tone = tone
  end
 
  def color=(color)
    @viewport1.color = color
  end
 
  def tone
    return @viewport1.tone
  end
 
  def color
    return @viewport1.color
  end
 
  def hue
    return @hue
  end
 
  def hue=(hue)
    if hue != @hue
      @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name, hue)
      for i in 0..6
        autotile_name = $game_map.autotile_names[i]
        @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name, hue)
      end
      hue2 = $game_map.panorama_hue + hue > 255 ? hue - 255 : hue
      if @panorama_name != ""
        @panorama.bitmap = RPG::Cache.panorama($game_map.panorama_name,
        $game_map.panorama_hue + hue2)
      end
      hue3 = $game_map.fog_hue + hue > 360 ? hue - 360 : hue
      if @fog_name != ""
      @fog.bitmap = RPG::Cache.fog($game_map.fog_name, $game_map.fog_hue + hue3)
      end
      @hue = hue
    end
  end
 
  def res_z=(value)
    @viewport1.z = value
    @viewport2.z = value+200
    @viewport3.z = value+5000
    @fog.z = value+3000
  end
 
  def update
    @tilemap.ox = $game_map.display_x / 4 + @res_x
    @tilemap.oy = $game_map.display_y / 4 + @res_y
    @tilemap.update
    @panorama.ox = $game_map.display_x / 8 + @res_x
    @panorama.oy = $game_map.display_y / 8 + @res_y
    @fog.zoom_x = $game_map.fog_zoom / 100.0
    @fog.zoom_y = $game_map.fog_zoom / 100.0
    @fog.opacity = $game_map.fog_opacity
    @fog.blend_type = $game_map.fog_blend_type
    @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox + @res_x
    @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy + @res_y
    @fog.tone = $game_map.fog_tone
    for sprite in @character_sprites
      sprite.update
      sprite.x = sprite.x - @res_x
      sprite.y = sprite.y - @res_y
    end
    @weather.type = $game_screen.weather_type
    @weather.max = $game_screen.weather_max
    @weather.ox = $game_map.display_x / 4 + @res_x
    @weather.oy = $game_map.display_y / 4 + @res_y
    @weather.update
    for sprite in @picture_sprites
      sprite.update
    end
    @timer_sprite.update
    @viewport1.ox = $game_screen.shake
    @viewport3.color = $game_screen.flash_color
    @viewport1.update
    @viewport3.update
  end
end

#--------------------------------------------------------------------------
# * Window_Message
#--------------------------------------------------------------------------

class Window_Message < Window_Selectable
  attr_reader :spritewindow
 
  alias hue_initialize initialize unless $@
  def initialize(*args)
    hue_initialize(*args)
    unless $scene.is_a?(Scene_Title) or $scene.is_a?(Scene_Battle)
      @spritewindow = Spriteset_Window.new(self.x + 2, self.y + 2,
      self.width - 4, self.height - 4)
    end
  end
 
  alias hue_dispose dispose unless $@
  def dispose
    hue_dispose
    @spritewindow.dispose if @spritewindow != nil
  end
 
  alias hue_reset_window reset_window unless $@
  def reset_window
    hue_reset_window
    self.back_opacity = 0
  end
 
  alias hue_update update unless $@
  def update
    hue_update
    if @spritewindow != nil
      @spritewindow.update
      if self.visible
        @spritewindow.get_change(160 * self.opacity / 255)
      else
        @spritewindow.hue /= 2
        red = @spritewindow.color.red / 2
        green = @spritewindow.color.green / 2
        blue = @spritewindow.color.blue / 2
        alpha = @spritewindow.color.alpha / 2
        @spritewindow.color = Color.new(red, green, blue, alpha)
        red = (@spritewindow.tone.red + 3 * $game_screen.tone.red) / 4
        green = (@spritewindow.tone.green + 3 * $game_screen.tone.green) / 4
        blue = (@spritewindow.tone.green + 3 * $game_screen.tone.blue) / 4
        gray = (@spritewindow.tone.gray + 3 * $game_screen.tone.gray) / 4
        @spritewindow.tone = Tone.new(red, green, blue, gray)
      end
    end
  end
end

#--------------------------------------------------------------------------
# * Scene_Menu
#--------------------------------------------------------------------------

class Scene_Menu
  def main
    @spritewindow = Spriteset_Window.new(0, 0, 640, 480)
    @spritewindow.get_change
    s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "Estado"
    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
    @command_window.back_opacity = 0
    @playtime_window.back_opacity = 0
    @steps_window.back_opacity = 0
    @gold_window.back_opacity = 0
    @status_window.back_opacity = 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
    @spritewindow.dispose
  end
end

#--------------------------------------------------------------------------
# * Scene_Item
#--------------------------------------------------------------------------

class Scene_Item
  def main
    @spritewindow = Spriteset_Window.new(0, 0, 640, 480)
    @spritewindow.get_change
    @help_window = Window_Help.new
    @item_window = Window_Item.new
    @item_window.help_window = @help_window
    @target_window = Window_Target.new
    @target_window.visible = false
    @target_window.active = false
    @help_window.back_opacity = 0
    @item_window.back_opacity = 0
    @target_window.back_opacity = 0
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @help_window.dispose
    @item_window.dispose
    @target_window.dispose
    @spritewindow.dispose
  end
end

#--------------------------------------------------------------------------
# * Scene_Skill
#--------------------------------------------------------------------------

class Scene_Skill
  def main
    @spritewindow = Spriteset_Window.new(0, 0, 640, 480)
    @spritewindow.get_change
    @actor = $game_party.actors[@actor_index]
    @help_window = Window_Help.new
    @status_window = Window_SkillStatus.new(@actor)
    @skill_window = Window_Skill.new(@actor)
    @skill_window.help_window = @help_window
    @target_window = Window_Target.new
    @target_window.visible = false
    @target_window.active = false
    @help_window.back_opacity = 0
    @status_window.back_opacity = 0
    @skill_window.back_opacity = 0
    @target_window.back_opacity = 0
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @help_window.dispose
    @status_window.dispose
    @skill_window.dispose
    @target_window.dispose
    @spritewindow.dispose
  end
end

#--------------------------------------------------------------------------
# * Scene_Equip
#--------------------------------------------------------------------------

class Scene_Equip
  def main
    @spritewindow = Spriteset_Window.new(0, 0, 640, 480)
    @spritewindow.get_change
    @actor = $game_party.actors[@actor_index]
    @help_window = Window_Help.new
    @left_window = Window_EquipLeft.new(@actor)
    @right_window = Window_EquipRight.new(@actor)
    @item_window1 = Window_EquipItem.new(@actor, 0)
    @item_window2 = Window_EquipItem.new(@actor, 1)
    @item_window3 = Window_EquipItem.new(@actor, 2)
    @item_window4 = Window_EquipItem.new(@actor, 3)
    @item_window5 = Window_EquipItem.new(@actor, 4)
    @right_window.help_window = @help_window
    @item_window1.help_window = @help_window
    @item_window2.help_window = @help_window
    @item_window3.help_window = @help_window
    @item_window4.help_window = @help_window
    @item_window5.help_window = @help_window
    @right_window.index = @equip_index
    @help_window.back_opacity = 0
    @left_window.back_opacity = 0
    @right_window.back_opacity = 0
    @item_window1.back_opacity = 0
    @item_window2.back_opacity = 0
    @item_window3.back_opacity = 0
    @item_window4.back_opacity = 0
    @item_window5.back_opacity = 0
    refresh
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @help_window.dispose
    @left_window.dispose
    @right_window.dispose
    @item_window1.dispose
    @item_window2.dispose
    @item_window3.dispose
    @item_window4.dispose
    @item_window5.dispose
    @spritewindow.dispose
  end
end

#--------------------------------------------------------------------------
# * Scene_Status
#--------------------------------------------------------------------------

class Scene_Status
  def main
    @spritewindow = Spriteset_Window.new(0, 0, 640, 480)
    @spritewindow.get_change
    @actor = $game_party.actors[@actor_index]
    @status_window = Window_Status.new(@actor)
    @status_window.back_opacity = 0
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @status_window.dispose
    @spritewindow.dispose
  end
end


Edito: Pongo una screen de ejemplo xD
http://s15.postimg.org/491fbohq1/script_window.png


Última edición por Wecoc el 2014-05-03, 00:51, editado 3 veces
avatar
Wecoc
Administrador
Administrador



Créditos 12203

Gracias : 632

Volver arriba Ir abajo

Re: [XP] Window Shader

Mensaje por Ledai el 2013-09-14, 22:59

De birria nada; solo que le falta que el menú base también haga lo mismo junto con el de guardar y salir, pero por lo demás está muy bonito y cuco; Es posible que si no me hacen el pedido que he hecho antes; sea esto lo que use en el proyecto... porque queda decente... (con un par de apaños)
avatar
Ledai
Aventurero
Aventurero

0/3

Créditos 5490

Gracias : 211

Volver arriba Ir abajo

Re: [XP] Window Shader

Mensaje por Noctámbulo el 2013-09-15, 12:36

¡Mil y un grachie, Wecoc! Llevaba tiempo dándole vueltos al asunto de la windowskin del menú, ya que la que viene de base es muy "claustrofóbica", me ha sido muy útil este script.
avatar
Noctámbulo
Principiante
Principiante

1/3

Créditos 299

Gracias : 27

Volver arriba Ir abajo

Re: [XP] Window Shader

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.