Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP] Window Viewport Addon

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Window Viewport Addon

Mensaje por Wecoc el 2018-01-03, 18:23

El script de hoy permite que un plane (es decir, como una fog) haga de fondo de ventana.
Saqué la idea del Castlevania: Order of Ecclesia, con el script podréis lograr el mismo efecto que se ve aquí (mirad en el segundo 0:27 por ejemplo):


Es fácil de usar, las instrucciones vienen en el script.
Funciona bien con el Window por defecto, aunque lo hice sobretodo pensado para usarse con la reescritura de Window que publiqué aquí: Window - Hidden RGSS Class
Probablemente también funcione con otras reescrituras de Window como la de Selwyn.
Ponedlo encima de main y debajo de la reescritura de Window si usáis alguna.

Código:
#==============================================================================
# ** [XP] Window Viewport Addon
#------------------------------------------------------------------------------
# Este script requiere el Window - Hidden RGSS Class de Wecoc
# Autor: Wecoc (no requiere créditos)
#------------------------------------------------------------------------------
# Este script permite asignar un plano como fondo de ventana, en vez de un plano
# fijo como por defecto.
# Dada una ventana, en el ejemplo @window, el script permite:
#
# - Definir una fog de fondo para la ventana
#
#     plane = BITMAP
#     Ejemplo: @window.plane = RPG::Cache.fog("002-Fog02", 0)
#     Ejemplo: @window.plane = nil
#
# - Asignar el movimiento de la fog
#
#     plane_sx = SX
#     plane_sy = SY
#     Ejemplo: @window.plane_sx = -1
#     Ejemplo: @window.plane_sy = -2
#
# - Asignar el zoom de la fog (y otras propiedades como la paleta)
#
#     plane.zoom_x = ZX
#     plane.zoom_y = ZY
#     Ejemplo: @window.plane.zoom_x = 1.0
#     Ejemplo: @window.plane.zoom_y = 1.0
#
# - Asignar la opacidad de la fog
#
#     plane_opacity = OPACITY
#     Ejemplo: @window.plane_opacity = 64
#
#==============================================================================

#==============================================================================
# ** Configuración
#==============================================================================

module WinViewport
  # Nombre del plano (fog) por defecto. Pon "" para ninguno.
  DEFAULT_PLANE = "001-Fog01"
  # Movimiento X/Y de la fog por defecto
  DEFAULT_SX = 1
  DEFAULT_SY = 1
  # Zoom X/Y de la fog por defecto
  DEFAULT_ZX = 2.0
  DEFAULT_ZY = 2.0
  # Opacidad de la fog por defecto
  DEFAULT_OPACITY = 64
  # Opción de empezarla en una posición al azar
  RANDOM_START = true
end

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

class Window
  #--------------------------------------------------------------------------
  include WinViewport
  #--------------------------------------------------------------------------
  attr_reader :plane, :plane_opacity
  attr_accessor :plane_sx, :plane_sy
  #--------------------------------------------------------------------------
  unless $@
    alias wview_ini initialize
    alias wview_dis dispose
    alias wview_x x=
    alias wview_y y=
    alias wview_z z=
    alias wview_width width=
    alias wview_height height=
    alias wview_upd update
    alias wview_visible visible=
    alias wview_opacity opacity=
    alias wview_back_opacity back_opacity=
  end
  #--------------------------------------------------------------------------
  # * Initialize
  #--------------------------------------------------------------------------
  def initialize(*args)
    wview_ini(*args)
    @plane_viewport = Viewport.new(0, 0, 0, 0)
    @bg = Sprite.new(@plane_viewport)
    @plane = Plane.new(@plane_viewport)
    @plane.zoom_x = DEFAULT_ZX
    @plane.zoom_y = DEFAULT_ZY
    @bg.z = 0
    @plane.z = 1000
    @plane.bitmap = RPG::Cache.fog(DEFAULT_PLANE, 0) if DEFAULT_PLANE != ""
    @plane_sx = DEFAULT_SX
    @plane_sy = DEFAULT_SY
    self.plane_opacity = DEFAULT_OPACITY
  end
  #--------------------------------------------------------------------------
  # * Dispose
  #--------------------------------------------------------------------------
  def dispose
    @plane.dispose
    wview_dis
  end
  #--------------------------------------------------------------------------
  # * Set Plane
  #--------------------------------------------------------------------------
  def plane=(bitmap)
    @plane.bitmap = bitmap
    if RANDOM_START && !bitmap.nil?
      @plane.ox = rand(bitmap.width)
      @plane.oy = rand(bitmap.height)
    else
      @plane.ox = 0
      @plane.oy = 0
    end
  end
  #--------------------------------------------------------------------------
  # * Set X
  #--------------------------------------------------------------------------
  def x=(x)
    wview_x(x)
    unless @plane_viewport.nil?
      @plane_viewport.rect.x = self.x + 2
      @bg.x = 0
    end
  end
  #--------------------------------------------------------------------------
  # * Set Y
  #--------------------------------------------------------------------------
  def y=(y)
    wview_y(y)
    unless @plane_viewport.nil?
      @plane_viewport.rect.y = self.y + 2
      @bg.y = 0
    end
  end
  #--------------------------------------------------------------------------
  # * Set Z
  #--------------------------------------------------------------------------
  def z=(z)
    wview_z(z)
    unless @plane_viewport.nil?
      @plane_viewport.z = self.z
      @bg.z = 0
    end
  end
  #--------------------------------------------------------------------------
  # * Set Width
  #--------------------------------------------------------------------------
  def width=(width)
    wview_width(width)
    unless @plane_viewport.nil?
      @plane_viewport.rect.width = self.width - 4
    end
  end
  #--------------------------------------------------------------------------
  # * Set Height
  #--------------------------------------------------------------------------
  def height=(height)
    wview_height(height)
    unless @plane_viewport.nil?
      @plane_viewport.rect.height = self.height - 4
    end
  end
  #--------------------------------------------------------------------------
  # * Refresh Plane
  #--------------------------------------------------------------------------
  def refresh_plane
    @plane_viewport.rect.x = self.x + 2
    @plane_viewport.rect.y = self.y + 2
    @plane_viewport.rect.width = self.width - 4
    @plane_viewport.rect.height = self.height - 4
  end
  #--------------------------------------------------------------------------
  # * Update Plane
  #--------------------------------------------------------------------------
  def update
    refresh_plane
    wview_upd
    if Graphics.frame_count % 10 == 0
      @plane.ox -= @plane_sx
      @plane.oy -= @plane_sy
    end
  end
  #--------------------------------------------------------------------------
  # * Set Visibile
  #--------------------------------------------------------------------------
  def visible=(visible)
    wview_visible(visible)
    @plane.visible = visible
  end
  #--------------------------------------------------------------------------
  # * [Internal] Real Plane Opacity
  #--------------------------------------------------------------------------
  def real_plane_opacity
    return self.opacity * self.back_opacity * @plane_opacity / (255 * 255)
  end
  #--------------------------------------------------------------------------
  # * Set Opacity (All)
  #--------------------------------------------------------------------------
  def opacity=(opacity)
    wview_opacity(opacity)
    @plane.opacity = real_plane_opacity
  end
  #--------------------------------------------------------------------------
  # * Set Opacity (Back + Plane)
  #--------------------------------------------------------------------------
  def back_opacity=(opacity)
    wview_back_opacity(opacity)
    @plane.opacity = real_plane_opacity
  end
  #--------------------------------------------------------------------------
  # * Set Opacity (Plane)
  #--------------------------------------------------------------------------
  def plane_opacity=(opacity)
    @plane_opacity = opacity
    @plane.opacity = real_plane_opacity
  end
end

Cualquier duda me lo comentáis aquí.
avatar
Wecoc
Administrador
Administrador



Créditos 12334

Gracias : 578

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.