O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Parallax & Pictures

Iniciado por Fujimiya, 08/11/2016 às 16:03

Pessoal estou fazendo um mapa básico para ir testando as coisas ... enfim coloquei um panorama através da opções do mapa
Spoiler
[close]

Bem com isso adicionei a parallax através da opção '' mostrar imagem ''  :o__o: dessa forma fica um panorama animado de fundo mais a parallax alem disso eu estou usando um efeito de '' FOG & Particulas ''
ai que surgi o problema como o mapa não possui nenhuma imagem adicionei a imagem do parallax como  '' imagem 1 '' dessa forma ela iria ficar por baixo de qualquer outra que eu adicione futuramente porem o efeito de '' fog e particulas '' ficam por baixo da imagem do parallax :facepalm:  como posso deixar o efeito de particula e fog e personagem eventos por cima da imagem ???

Você precisa nos mostrar o script, caso contrário fica extremamente difícil lhe ajudar.


Citação de: Skyloftian online 08/11/2016 às 17:20
Você precisa nos mostrar o script, caso contrário fica extremamente difícil lhe ajudar.
#FOG
Spoiler
# =============================================================================
# TheoAllen - Fog Screen
# Version : 2.0
# Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
# (This script documentation is written in informal indonesian language)
# =============================================================================
($imported ||={})[:Theo_FogScreen] = true
# =============================================================================
# CHANGE LOGS:
# -----------------------------------------------------------------------------
# 2013.08.24 - Rewrite script dengan workflow yang bueda banget (v2.0)
#            - Nambahin multiple fog support
#            - Support Kecepatan scroll lebih lambat (sekitar 0.1)
#            - Support map croll
#            - Support Battle Fog
#            - Ganti notetag fog pada peta
#            - Ilangin variasi opacity
# 2013.06.13 - Nambahin global fog (v1.3)
#            - Nambahin global disable switch
#            - Nambahin specific disable switch
# 2013.06.12 - Bug Fix. Saat pindah map fog ngga ilang (v1.15b)
# 2013.05.15 - Nambahin blend type (v1.15)
#            - Nambahin zoom
#            - Nambahin variasi opacity dan kecepatannya
# 2013.05.09 - Started and Finished script (v1.0)
# =============================================================================
=begin

  -----------------------------------------------------------------------------
  Pembukaan :
  Versi ini adalah versi rewrite besar-besaran dari versi 1.3. Jika kamu gunain
  script gw yg versi sbelumnya, semua cara penggunaan di versi sbelumnya ngga
  akan bekerja. Jadi maaf kalo u harus setting ulang dari awal
 
  -----------------------------------------------------------------------------
  Perkenalan :
  Script ini ngebikin kamu bisa nampilin fog seperti yang dimiliki RMXP.
 
  -----------------------------------------------------------------------------
  Cara penggunaan :
  Pasang dibawah material namun diatas main
  Edit konfigurasi database fognya
  Lalu untuk memasang fognya, kamu bisa gunakan script call kek gini
 
  Untuk nambah :
  add_fog(key)
  add_fog(key,fadein)
 
  Untuk ngilangin :
  delete_fog(key)
  delete_fog(key,fadeout)
 
  Note :
  - key adalah kata kunci yang ada di database fognya.
  - fadein/fadeout adalah kecepatan munculnya. Misalnya kamu isi 5, maka setiap
    frame, opacitynya akan nambah 5 sampe bates maksimal yg udah u tentuin
    di database. Kalo pengen instant munculnya, bisa diabaikan (ga diisi)
  - kamu ngga bisa nambahin fog dengan kata kunci yang sama dua kali
 
  clear_fogs
  ^
  untuk ngilangin semua fog secara langsung
 
  -----------------------------------------------------------------------------
  Notetag :
  Untuk gunain notetagnya cukup simple. Kamu tinggal kasi aja notetag dalam
  note map kek gini
 
  <add fog: key>
 
  -----------------------------------------------------------------------------
  Terms of use :
  Credit gw, TheoAllen. Kalo semisal u bisa ngedit2 script gw trus jadi lebih
  keren, terserah. Ane bebasin. Asal ngga ngeklaim aja. Kalo semisal mau
  dipake buat komersil, jangan lupa, gw dibagi gratisannya.

=end
# =============================================================================
# Konfigurasi :
# =============================================================================
module THEO
  module Fog
  # ------------------------------------------------------------------------- 
  # Masukin ke battle scene?
  # ------------------------------------------------------------------------- 
    BattleFog = true 
  # Set true kalo kamu pengen masukin fog jg di battle. Set false kalo ngga
   
  # -------------------------------------------------------------------------
  # Fog Database List ~
  # Level : Easy
  # ------------------------------------------------------------------------- 
  # Paduan Konfigurasi
  #
  # key     => Adalah kata kunci untuk manggil fogmu (script call dan notetag)
  # name    => Nama file fog yg harus ada di Graphics/Pictures
  # opacity => Transparansi gambar fogmu (0 - 255)
  # speed_x => kecepatan scroll horizontal
  # speed_y => kecepatan scroll vertikal
  # zoom_x  => skala perbesaran horizontal (1.0 sama dengan normal)
  # zoom_y  => skala perbesaran vertikal (1.0 sama dengan normal)
  # ------------------------------------------------------------------------- 
    List = {
    # "key"    => ["name", opacity, speed_x, speed_y, zoom_x, zoom_y]
      "Fog"  => ["fog",      128,     0.2,     0.2,    1.0,    1.0],
      "Cloud"   => ["cloud",     90,    -0.2,    -0.2,    2.0,    2.0],
      "Storm"  => ["storm",     90,    -2.0,     2.0,    1.0,    1.0],
      "Leaf"   => ["leaf",      90,       0,       0,    2.0,    2.0],
      "MenuFog"  => ["fog",      100,     0.4,     0.3,    2.0,    2.0],
      "MenuFogs"  => ["fog",      90,     0.2,     0.1,    2.0,    2.0],
      "ImagiFundi"  => ["ImagiFundi",      255,     0,     0,    0,    0],
    # Tambahin sendiri
   
    } # <-- Jangan disentuh ~ !
  # ------------------------------------------------------------------------- 
  # Fog Extended Database List
  # Level : Hard
  # -------------------------------------------------------------------------
  # Disamping yang udah disebutin diatas (opacity, speed_x, dst ..) sbenernya
  # masih ada konfigurasi lainnya. Untuk alesan kerapian, jadi gw taruh
  # disini aja konfignya.
  #
  # Paduan konfigurasi :
  # Mulai dengan nulis kek gini
  # fog = fog_data["key"]
  #
  # Lalu tambahin attribut yg mo diubah. Misalnya gini
  # fog = fog_data["kabut"]
  # fog.name = "something"
  # fog.opacity = 100
  #
  # Berikut ini adalah list yg dapat kamu tambahin disamping yg udah wa
  # sediain diatas :
  #
  # fog.switch      >> isinya ID switch (angka). Kalo switch hidup = invisible
  # fog.blend_type  >> Tipe blending. Pilih antara 0 - 2 (default : 0)
  # fog.tone        >> Isinya Tone.new(red, green, blue, gray) (kek Tint screen)
  # fog.z           >> koordinat z. Makin gede, makin ada diatas. Defaultnya
  #                    adalah 250 untuk setiap fog
  #
  # Untuk skala scroll
  # fog.scroll_scale_x >> skala horizontal
  # fog.scroll_scale_y >> skala vertikal
  #
  # Yang diatas ini buat skala scroll. Jika kamu ngisinya 0.0 maka ntar walo
  # mapnya nyekroll, fognya bakal tetep berada di tempat. Nilai defaultnya
  # adalah 1.0
  # -------------------------------------------------------------------------
    def self.custom_fogs
      fog = fog_data["daun"]
      fog.scroll_scale_x = 0.4
      fog.scroll_scale_y = 0.4
    end
   
  end
end
# =============================================================================
# Akhir dari konfigurasi. Setelah line ini semua adalah barang pribadi gw :v
# =============================================================================
module THEO
  module Fog
    def self.load_fogs
      List.each do |key,data|
        fog = fog_data[key]
        fog.name = data[0]
        fog.opacity = data[1]
        fog.speed_x = data[2]
        fog.speed_y = data[3]
        fog.zoom_x = data[4]
        fog.zoom_y = data[5]
      end
    end
   
    def self.fog_data
      $game_temp.fogs
    end   
  end
end

class << DataManager
 
  alias theo_fog_create_obj create_game_objects
  def create_game_objects
    theo_fog_create_obj
    THEO::Fog.load_fogs
    THEO::Fog.custom_fogs
  end
 
end

class DataFogs
 
  def initialize
    @data = {}
  end
 
  def [](key)
    @data[key] ||= Fog.new(key)
  end
 
end
 
class Fog
  attr_accessor :key
  attr_accessor :name
  attr_accessor :opacity
  attr_accessor :speed_x
  attr_accessor :speed_y
  attr_accessor :zoom_x
  attr_accessor :zoom_y
  attr_accessor :scroll_scale_x
  attr_accessor :scroll_scale_y
  attr_accessor :blend_type
  attr_accessor :tone
  attr_accessor :switch
  attr_accessor :z
 
  def initialize(key)
    @key = key
    @name = ""
    @opacity = 255
    @speed_x = 0.0
    @speed_y = 0.0
    @zoom_x = 1.0
    @zoom_y = 1.0
    @scroll_scale_x = 1.0
    @scroll_scale_y = 1.0
    @blend_type = 0
    @tone = Tone.new
    @switch = 0
    @z = 400
  end
 
  def visible
    !$game_switches[@switch]
  end
 
end

class Game_Temp
  attr_accessor :clear_fog
  attr_reader :fogs
 
  # --------------------------------------------------------------------------
  # They said that too much global variables isn't good. So, I used an
  # instance variable to store my fogs database =P
  # --------------------------------------------------------------------------
  alias theo_fog_init initialize
  def initialize
    theo_fog_init
    @fogs = DataFogs.new
    @clear_fog = false
  end
 
end

class Game_System
  attr_reader :used_fog
 
  alias theo_fog_init initialize
  def initialize
    theo_fog_init
    @used_fog = []
  end
 
end
# ----------------------------------------------------------------------------
# Altered Game Interpreter. For script call
# ----------------------------------------------------------------------------
class Game_Interpreter
 
  def clear_fogs
    $game_system.used_fog.clear
    $game_temp.clear_fog = true
    Fiber.yield
  end
 
  def get_fog(key)
    plane = planefogs
    return nil unless plane
    plane.get_fog(key)
  end
 
  def planefogs
    scene = SceneManager.scene
    spriteset = scene.instance_variable_get("@spriteset")
    return spriteset.instance_variable_get("@fogs")
  end
 
  def delete_fog(key,speed = 255)
    fog = get_fog(key)
    return unless fog
    $game_system.used_fog.delete(key)
    fog.fadeout(speed)
    fog.fade_delete = true
  end
 
  def add_fog(key,speed = 255)
    return if $game_system.used_fog.include?(key)
    $game_system.used_fog.push(key)
    fog = planefogs[key]
    fog.fadein(speed)
  end
 
end

class Game_Map
  attr_accessor :used_fogs
 
  alias theo_fog_init initialize
  def initialize
    theo_fog_init
    @used_fogs = []
  end
 
  alias theo_fog_setup setup
  def setup(map_id)
    theo_fog_setup(map_id)
    setup_fogs
  end
 
  def setup_fogs
    @used_fogs = []
    @map.note.split(/[\r\n]+/).each do |line|
      case line
      when /<(?:ADD_FOG|add fog): (.*)>/i
        key = $1.to_s
        next if @used_fogs.include?(key)
        @used_fogs.push(key)
      end
    end
  end
 
end

class PlaneFog < Plane
  attr_accessor :fade_delete
  attr_accessor :key
 
  def initialize(key, viewport)
    super(viewport)
    @real_ox = self.ox.to_f + rand(Graphics.width)
    @real_oy = self.oy.to_f + rand(Graphics.height)
    load_data(key)
    update_oxoy
    @fade = 0
    @fade_delete = false
  end
 
  def load_data(key)
    @data = THEO::Fog.fog_data[key]
    self.bitmap = Cache.picture(@data.name)
    @data.instance_variables.each do |varsymb|
      ivar_name = varsymb.to_s.gsub(/@/){""}
      eval("
      if self.respond_to?(\"#{ivar_name}\")
        self.#{ivar_name} = @data.#{ivar_name}
      end
      ")
    end
  end
 
  def fadeout(speed)
    @fade = -speed
  end
 
  def fadein(speed)
    @fade = speed
    self.opacity = 0
  end
 
  def spd_x
    @data.speed_x
  end
 
  def spd_y
    @data.speed_y
  end
 
  def update
    update_real_oxoy
    update_oxoy
    update_visible
    update_fade
  end
 
  def update_real_oxoy
    @real_ox += spd_x
    @real_oy += spd_y
  end
 
  def update_oxoy
    self.ox = fog_display_x + @real_ox
    self.oy = fog_display_y + @real_oy
  end
 
  def update_fade
    self.opacity = [[opacity + @fade,0].max,max_opacity].min
  end
 
  def max_opacity
    @data.opacity
  end
 
  def fog_display_x
    $game_map.display_x * (32.0 * @data.scroll_scale_x)
  end
 
  def fog_display_y
    $game_map.display_y * (32.0 * @data.scroll_scale_y)
  end
 
  def update_visible
    self.visible = @data.visible
  end
 
end

class PlaneFogs
 
  def initialize(viewport)
    @data = {}
    @viewport = viewport
    init_used_fog
  end
 
  def init_used_fog
    $game_system.used_fog.each do |fogname|
      self[fogname]
    end
  end
 
  def get_fog(key)
    @data[key]
  end
 
  def delete(key)
    fog = @data[key]
    return unless fog
    fog.dispose
    @data.delete(key)
  end
 
  def [](key)
    @data[key] ||= PlaneFog.new(key, @viewport)
  end
 
  def update
    update_basic
    @data.values.each {|fog| fog.update unless fog.disposed?}
  end
 
  def update_basic
    update_delete
    update_clear
  end
 
  def update_delete
    @data.values.each do |fog|
      next unless fog.fade_delete && fog.opacity == 0
      delete(fog.key)
      $game_system.used_fog.delete(fog.key)
    end
  end
 
  def update_clear
    if $game_temp.clear_fog
      @data.keys.each do |key|
        delete(key)
      end
      $game_temp.clear_fog = false
    end
  end
 
  def dispose
    @data.values.each {|fog| fog.dispose}
  end
 
end

class Mapfogs < PlaneFogs
 
  def init_used_fogs
    @used_fogs = $game_map.used_fogs.dup
    @used_fogs.each do |fogname|
      self[fogname]
    end
  end
 
  def update_basic
    update_used_fog
  end
 
  def update_used_fog
    if @used_fogs != $game_map.used_fogs
      delete_all
      init_used_fogs
    end
  end
 
  def delete_all
    @data.values.each do |fog|
      delete(fog.key)
    end
  end
 
end

class Spriteset_Map
 
  alias theo_fog_viewports create_viewports
  def create_viewports
    theo_fog_viewports
    create_mapfogs
    create_global_fogs
  end
 
  def create_mapfogs
    @mapfogs = Mapfogs.new(@viewport1)
  end
 
  def create_global_fogs
    @fogs = PlaneFogs.new(@viewport1)
  end
 
  alias theo_fog_update update
  def update
    theo_fog_update
    update_global_fogs
    update_mapfogs
  end
 
  def update_global_fogs
    @fogs.update
  end
 
  def update_mapfogs
    @mapfogs.update
  end
 
  alias theo_fog_dispose dispose
  def dispose
    theo_fog_dispose
    dispose_global_fogs
    dispose_mapfogs
  end
 
  def dispose_global_fogs
    @fogs.dispose
  end
 
  def dispose_mapfogs
    @mapfogs.dispose   
  end
 
end

class Spriteset_Battle
 
  def use_fog?
    THEO::Fog::BattleFog
  end
 
  alias theo_fog_viewports create_viewports
  def create_viewports
    theo_fog_viewports
    return unless use_fog?
    create_mapfogs
    create_global_fogs
  end
 
  def create_mapfogs
    @mapfogs = Mapfogs.new(@viewport1)
  end
 
  def create_global_fogs
    @fogs = PlaneFogs.new(@viewport1)
  end
 
  alias theo_fog_update update
  def update
    theo_fog_update
    return unless use_fog?
    update_global_fogs
    update_mapfogs
  end
 
  def update_global_fogs
    @fogs.update
  end
 
  def update_mapfogs
    @mapfogs.update
  end
 
  alias theo_fog_dispose dispose
  def dispose
    theo_fog_dispose
    return unless use_fog?
    dispose_global_fogs
    dispose_mapfogs
  end
 
  def dispose_global_fogs
    @fogs.dispose
  end
 
  def dispose_mapfogs
    @mapfogs.dispose   
  end
 
end
[close]
#WEATHER
Spoiler
#==============================================================================
# +++ MOG - Weather EX (v2.2) +++
#==============================================================================
# By Moghunter
# https://atelierrgss.wordpress.com/
#==============================================================================
# Sistema de clima com efeitos animados.
#==============================================================================
# As imagens usadas pelo sistema do clima devem ser gravadas na pasta
#
# GRAPHICS/WEATHER/
#
#==============================================================================
# UTILIZAÇÃO
#
# Use o comando abaixo através da função chamar script.*(Evento)
#
# weather(TYPE, POWER, IMAGE_FILE)
#
# TYPE - Tipo de clima. (de 0 a 6)
# POWER - Quantidade de partículas na tela. (de 1 a 10)
# IMAGE_FILE - Nome da imagem.
#
# Exemplo (Eg)
#
# weather(0, 5, "Rain_02")
#
#==============================================================================
# Tipos de Clima.
#
# O sistema vem com 7 climas pré-configurados, que podem ser testados na demo
# que vem com esse script.
#
# 0 - (Rain) 
# 1 - (Wind)
# 2 - (Fog) 
# 3 - (Light)
# 4 - (Snow)
# 5 - (Spark)
# 6 - (Random)
#
#==============================================================================
# NOTA
#
# Evite de usar imagens muito pesadas ou de tamanho grande, caso for usar
# diminua o poder do clima para evitar lag.
#
#==============================================================================
#==============================================================================
# Para parar o clima use o comando abaixo.
#
# weather_stop
#==============================================================================
# Para parar o clima após a batalha use o código abaixo.
#
# weather_stop_b
#
#==============================================================================
# Para parar reativar o clima com as caracteríticas préviamente usadas use o
# comando abaixo.
#
# weather_restore
#==============================================================================
# Se você precisar ativar um novo clima mas deseja gravar as caracteríticas
# do clima atual para ser reativado depois use os códigos abaixo.
#
# weather_store
# weather_restore_store
#
#==============================================================================

#==============================================================================
# ● Histórico (Version History)
#==============================================================================
# v 2.2 - Adicionado o comando parar o clima após a batalha.
# v 2.1 - Melhoria na posição das partículas durante as transições
#         de scenes.
# v 2.0 - Correção do bug do Crash aleatório.
#==============================================================================
module MOG_WEATHER_EX
  #Prioridade do clima na tela.
  WEATHER_SCREEN_Z = 50
  #Definição da eficiência do poder do clima.
  #NOTA -  Um valor muito alto pode causar lag, dependendo do tipo de clima e
  #        imagem usada.
  WEATHER_POWER_EFIC = 5
  #Ativar o clima no sistema de batalha.
  WEATHER_BATTLE = true
end

$imported = {} if $imported.nil?
$imported[:mog_weather_ex] = true

#==============================================================================
# ■ Cache
#==============================================================================
module Cache
 
  #--------------------------------------------------------------------------
  # ● Weather
  #--------------------------------------------------------------------------
  def self.weather(filename)
      load_bitmap("Graphics/Weather/", filename)
  end
 
end

#==============================================================================
# ■ Game System
#==============================================================================
class Game_System
 
  attr_accessor :weather
  attr_accessor :weather_restore
  attr_accessor :weather_record_set
  attr_accessor :weather_temp
 
  #--------------------------------------------------------------------------
  # ● Initialize
  #-------------------------------------------------------------------------- 
  alias weather_ex_initialize initialize 
  def initialize
      @weather = [-1,0,""]
      @weather_restore = [-1,0,""]
      @weather_temp = [-1,0,""]
      @weather_record_set = [-1,0,""]
      weather_ex_initialize
  end 
 
end 

#==============================================================================
# ■ Game Temp
#==============================================================================
class Game_Temp

  attr_accessor :weather_ex_set
  attr_accessor :weather_fade
  attr_accessor :weather_rf_time
  attr_accessor :weather_fstop
 
  #--------------------------------------------------------------------------
  # ● Initialize
  #-------------------------------------------------------------------------- 
  alias mog_weather_ex_temp_initialize initialize
  def initialize
      @weather_ex_set = []
      @weather_fade = false
      @weather_rf_time = 0
      @weather_fstop = false
      mog_weather_ex_temp_initialize
  end 
 
end

#==============================================================================
# ■ Game Interpreter
#==============================================================================
class Game_Interpreter
 
  #--------------------------------------------------------------------------
  # ● Weather
  #--------------------------------------------------------------------------   
  def weather(type = -1, power = 0, image = "")
      $game_temp.weather_fade = false
      $game_temp.weather_rf_time = 0
      $game_system.weather.clear
      $game_system.weather = [type,power,image]
  end
 
  #--------------------------------------------------------------------------
  # ● Weather Stop
  #--------------------------------------------------------------------------     
  def weather_stop
      $game_temp.weather_fade = false
      $game_system.weather.clear
      $game_system.weather = [-1,0,""]
      $game_system.weather_restore  = [-1,0,""]
      $game_system.weather_temp = [-1,0,""]     
  end
 
  #--------------------------------------------------------------------------
  # ● Weather Restore
  #--------------------------------------------------------------------------       
  def weather_restore
      $game_temp.weather_fade = false
      if $game_system.weather[0] != -1
         w = $game_system.weather
         $game_system.weather_restore = [w[0],w[1],w[2]]
         $game_system.weather.clear
         $game_system.weather = [-1,0,""]
         return
      end
      w = $game_system.weather_restore
      weather(w[0],w[1],w[2])
  end
 
  #--------------------------------------------------------------------------
  # ● Weather Fade
  #--------------------------------------------------------------------------         
  def weather_fade(value)
      $game_temp.weather_fade = value
  end
 
  #--------------------------------------------------------------------------
  # ● Weather Store
  #--------------------------------------------------------------------------           
  def weather_store
      w = $game_system.weather
      $game_system.weather_record_set = [w[0],w[1],w[2]]
  end 
 
  #--------------------------------------------------------------------------
  # ● Weather Restore Store
  #--------------------------------------------------------------------------           
  def weather_restore_store
      w = $game_system.weather_record_set
      weather(w[0],w[1],w[2])     
  end   
 
  #--------------------------------------------------------------------------
  # ● Weather Stop B
  #--------------------------------------------------------------------------           
  def weather_stop_b
      $game_temp.weather_fstop = true
  end
 
end 

#==============================================================================
# ** Spriteset_Map
#==============================================================================
class Spriteset_Map
 
  #--------------------------------------------------------------------------
  # * Create Viewport
  #--------------------------------------------------------------------------
  alias mog_weather_ex_create_viewports create_viewports
  def create_viewports
      create_viewport_weather
      mog_weather_ex_create_viewports     
  end
   
  #--------------------------------------------------------------------------
  # * Create Viewport Weather
  #--------------------------------------------------------------------------
  def create_viewport_weather
      return if @viewport_weather != nil
      @viewport_weather = Viewport.new
      @viewport_weather.z = MOG_WEATHER_EX::WEATHER_SCREEN_Z
      @viewport_weather.ox = ($game_map.display_x * 32)
      @viewport_weather.oy = ($game_map.display_y * 32)
  end
     
  #--------------------------------------------------------------------------
  # * Dispose Viewports
  #--------------------------------------------------------------------------
  alias mog_weather_ex_dispose_viewports dispose_viewports
  def dispose_viewports     
      mog_weather_ex_dispose_viewports
      dispose_viewport_weather
  end
 
  #--------------------------------------------------------------------------
  # * Dispose Viewport Weather
  #--------------------------------------------------------------------------
  def dispose_viewport_weather
      return if @viewport_weather == nil
      @viewport_weather.dispose   
  end
   
  #--------------------------------------------------------------------------
  # * Update Viewports
  #--------------------------------------------------------------------------
  alias mog_weather_ex_update_viewports update_viewports
  def update_viewports
      mog_weather_ex_update_viewports
      update_viewport_weather
  end
 
  #--------------------------------------------------------------------------
  # * Update Viewports Weather
  #--------------------------------------------------------------------------
  def update_viewport_weather
      return if @viewport_weather == nil
      @viewport_weather.ox = ($game_map.display_x * 32)
      @viewport_weather.oy = ($game_map.display_y * 32)
  end     
 
end

#==============================================================================
# ** Spriteset_Battle
#==============================================================================
class Spriteset_Battle
 
  #--------------------------------------------------------------------------
  # * Create Viewport
  #--------------------------------------------------------------------------
  alias mog_weather_ex_create_viewports_battle create_viewports
  def create_viewports
      mog_weather_ex_create_viewports_battle
      create_viewport_weather   
  end
   
  #--------------------------------------------------------------------------
  # * Create Viewport Weather
  #--------------------------------------------------------------------------
  def create_viewport_weather
      return if @viewport_weather != nil
      @viewport_weather = Viewport.new
      @viewport_weather.z = MOG_WEATHER_EX::WEATHER_SCREEN_Z
  end
   
  #--------------------------------------------------------------------------
  # * Dispose Viewports
  #--------------------------------------------------------------------------
  alias mog_weather_ex_dispose_viewports_battle dispose_viewports
  def dispose_viewports     
      mog_weather_ex_dispose_viewports_battle
      dispose_viewport_weather
  end
 
  #--------------------------------------------------------------------------
  # * Dispose Viewport Weather
  #--------------------------------------------------------------------------
  def dispose_viewport_weather
      return if @viewport_weather == nil
      @viewport_weather.dispose   
  end
   
  #--------------------------------------------------------------------------
  # * Update Viewports
  #--------------------------------------------------------------------------
  alias mog_weather_ex_update_viewports_battle update_viewports
  def update_viewports
      mog_weather_ex_update_viewports_battle
      update_viewport_weather       
  end 
 
  #--------------------------------------------------------------------------
  # * Update Viewports Weather
  #--------------------------------------------------------------------------
  def update_viewport_weather
      return if @viewport_weather == nil
  end   
 
end

#==============================================================================
# ■ Weather_EX
#==============================================================================
class Weather_EX
 
  #--------------------------------------------------------------------------
  # ● Initialize
  #-------------------------------------------------------------------------- 
  def initialize(viewport = nil ,type = 0, image_name = "",index = 0,nx,ny)
      @wp = Sprite.new
      @wp.bitmap = Cache.weather(image_name.to_s)
      @wp.opacity = 0
      @wp.viewport = viewport
      @cw = @wp.bitmap.width
      @cwm = (@cw / 2) + @cw
      @ch = @wp.bitmap.height
      @chm = (@ch / 2) + @ch
      @range_x = [-@cwm,Graphics.width + @cwm]
      @range_y = [-@chm,Graphics.height + @chm]
      @angle_speed = 0
      @x_speed = 0
      @y_speed = 0
      @zoom_speed = 0
      @opacity_speed = 0
      @type = type
      @index = index
      @nx = 0
      @nx_old = 0
      @ny = 0
      @ny_old = 0     
      @old_nx = nx
      @old_ny = ny
      type_setup(nx,ny)
  end
 
  #--------------------------------------------------------------------------
  # ● x
  #--------------------------------------------------------------------------     
  def x
      @wp.x
  end
 
  #--------------------------------------------------------------------------
  # ● y
  #--------------------------------------------------------------------------     
  def y
      @wp.y
  end
 
  #--------------------------------------------------------------------------
  # ● Opacity
  #--------------------------------------------------------------------------     
  def opacity
      @wp.opacity
  end
 
  #--------------------------------------------------------------------------
  # ● Angle
  #--------------------------------------------------------------------------     
  def angle
      @wp.angle
  end
 
  #--------------------------------------------------------------------------
  # ● Zoom X
  #--------------------------------------------------------------------------     
  def zoom_x
      @wp.zoom_x
  end 
 
  #--------------------------------------------------------------------------
  # ● Dispose Weather
  #--------------------------------------------------------------------------     
  def dispose_weather
      return if @wp == nil
      @wp.bitmap.dispose
      @wp.dispose
      @wp = nil
  end
 
  #--------------------------------------------------------------------------
  # ● Pre Values
  #--------------------------------------------------------------------------   
  def pre_values(index)
      return if  $game_temp.weather_ex_set[index] == nil
      @wp.x = $game_temp.weather_ex_set[index][0]
      @wp.y = $game_temp.weather_ex_set[index][1]
      @wp.opacity = 1#$game_temp.weather_ex_set[index][2]
      @wp.angle = $game_temp.weather_ex_set[index][3]
      @wp.zoom_x = $game_temp.weather_ex_set[index][4]
      @wp.zoom_y = $game_temp.weather_ex_set[index][4]
      $game_temp.weather_ex_set[index].clear
      $game_temp.weather_ex_set[index] = nil
  end 
 
  #--------------------------------------------------------------------------
  # ● Type Setup
  #--------------------------------------------------------------------------     
  def type_setup(nx = 0, ny = 0)
      @cw2 = [@range_x[1] + nx, @range_x[0] + nx]
      @ch2 = [@range_y[1] + ny, @range_y[0] + ny]
      check_weather_type
      pre_values(@index)
      @opacity_speed = -1 if $game_temp.weather_fade
  end
 
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------   
  def update_weather(nx = 0, ny = 0)
      @wp.x += @x_speed
      @wp.y += @y_speed
      @wp.opacity += @opacity_speed
      @wp.angle += @angle_speed
      @wp.zoom_x += @zoom_speed
      @wp.zoom_y += @zoom_speed
      check_loop_map(nx,ny)
      type_setup(nx,ny) if can_reset_setup?
  end 

  #--------------------------------------------------------------------------
  # ● Check Loop Map
  #--------------------------------------------------------------------------       
  def check_loop_map(nx,ny)
      if (@old_nx - nx).abs > 32
         @cw2 = [@range_x[1] + nx, @range_x[0] + nx]
         @wp.x += nx
         @wp.x -= @old_nx if nx == 0
      end   
      if (@old_ny - ny).abs > 32
         @ch2 = [@range_y[1] + ny, @range_y[0] + ny]
         @wp.y += ny
         @wp.y -= @old_ny if ny == 0
      end         
      @old_nx = nx
      @old_ny = ny   
  end 
   
  #--------------------------------------------------------------------------
  # ● Can Reset Setup
  #--------------------------------------------------------------------------     
  def can_reset_setup?
      return true if @wp.x > @cw2[0] or @wp.x <  @cw2[1]
      return true if @wp.y > @ch2[0]  or @wp.y < @ch2[1]
      return true if @wp.opacity == 0
      return true if @wp.zoom_x > 2.0 or @wp.zoom_x < 0.5
      return false
  end
 
#--------------------------------------------------------------------------
# ● Check Weather Type
#--------------------------------------------------------------------------                         
def check_weather_type
     case @type
         when 0;   rain
         when 1;   wind   
         when 2;   fog
         when 3;   light
         when 4;   snow
         when 5;   spark
         when 6;   random                 
      end
end
   
#--------------------------------------------------------------------------
# ● Snow
#--------------------------------------------------------------------------                         
def snow
     @wp.angle = rand(360)
     @wp.x = rand(@cw2[0])
     @wp.y = rand(@ch2[0])
     @wp.opacity = 1
     @wp.zoom_x = (rand(100) + 50) / 100.0
     @wp.zoom_y = @wp.zoom_x
     @y_speed = [[rand(5), 1].max, 5].min
     @opacity_speed = 5
     @angle_speed = rand(3)
end   

#--------------------------------------------------------------------------
# ● Spark
#--------------------------------------------------------------------------                           
def spark
     @wp.angle = rand(360)
     @wp.x = rand(@cw2[0])
     @wp.y = rand(@ch2[0])
     @wp.opacity = 1
     @wp.zoom_x = (rand(100) + 100) / 100.0
     @wp.zoom_y = @wp.zoom_x
     @wp.blend_type = 1     
     @opacity_speed = 10
     @zoom_speed = -0.01
end

#--------------------------------------------------------------------------
# ● Rain
#--------------------------------------------------------------------------                         
def rain
     @wp.x = rand(@cw2[0])       
     if @start == nil
        @wp.y = rand(@ch2[0])
        @start = true
     else
        @wp.y = @ch2[1]       
     end   
     @wp.opacity = 1
     @wp.zoom_y = (rand(50) + 100) / 100.0
     @wp.zoom_x = (rand(25) + 100) / 100.0
     @y_speed = [[rand(10) + 10, 10].max, 20].min
     @opacity_speed = 10
end   

#--------------------------------------------------------------------------
# ● Fog
#--------------------------------------------------------------------------                           
def fog
     rand_angle = rand(2)
     @wp.angle = rand_angle == 1 ? 180 : 0
     @wp.x = rand(@cw2[0])
     @wp.y = rand(@ch2[0])
     @wp.opacity = 1
     @wp.zoom_x = (rand(100) + 50) / 100.0
     @wp.zoom_y = @wp.zoom_x
     @x_speed = [[rand(10), 1].max, 10].min
     @opacity_speed = 10
end

#--------------------------------------------------------------------------
# ● Light
#--------------------------------------------------------------------------                           
def light
     @wp.angle = rand(360)
     @wp.x = rand(@cw2[0])
     @wp.y = rand(@ch2[0])
     @wp.opacity = 1
     @wp.zoom_x = (rand(100) + 50) / 100.0
     @wp.zoom_y = @wp.zoom_x
     @wp.blend_type = 1
     @angle_speed = [[rand(3), 1].max, 3].min
     @y_speed = -[[rand(10), 1].max, 10].min
     @opacity_speed = 2
end

#--------------------------------------------------------------------------
# ● Wind
#--------------------------------------------------------------------------                         
def wind
     @wp.angle = rand(360)
     @wp.x = rand(@cw2[0])
     @wp.y = rand(@ch2[0])
     @wp.opacity = 1
     @wp.zoom_x = (rand(100) + 50) / 100.0
     @wp.zoom_y = @wp.zoom_x
     @x_speed = [[rand(10), 1].max, 10].min
     @y_speed = [[rand(10), 1].max, 10].min
     @opacity_speed = 10
end   
     
#--------------------------------------------------------------------------
# ● Random
#--------------------------------------------------------------------------                         
def random
     @wp.angle = rand(360)
     @wp.x = rand(@cw2[0])
     @wp.y = rand(@ch2[0])
     @wp.opacity = 1
     @wp.zoom_x = (rand(100) + 50) / 100.0
     @wp.zoom_y = @wp.zoom_x
     x_s = [[rand(10), 1].max, 10].min
     y_s = [[rand(10), 1].max, 10].min
     rand_x = rand(2)
     rand_y = rand(2)
     @x_speed = rand_x == 1 ? x_s : -x_s
     @y_speed = rand_y == 1 ? y_s : -y_s     
     @opacity_speed = 10
end   

end

#==============================================================================
# ■ Module Weather EX
#==============================================================================
module Module_Weather_EX
 
#--------------------------------------------------------------------------
# ● Create Weather EX
#--------------------------------------------------------------------------                   
  def create_weather_ex
      dispose_weather_ex
      create_weather_sprite     
  end
 
#--------------------------------------------------------------------------
# ● Dispose Wheater EX
#--------------------------------------------------------------------------                     
  def dispose_weather_ex
      dispose_weather_ex_sprite
  end

#--------------------------------------------------------------------------
# ● Create Weather Sprite
#--------------------------------------------------------------------------                       
  def create_weather_sprite
      dispose_weather_ex_sprite
      @old_weather = $game_system.weather
      return if $game_system.weather == [] or $game_system.weather[0] == -1
      @weather_ex = []
      @weather_oxy = [$game_map.display_x * 32,
                      $game_map.display_y * 32]     
      index = 0
      power_efic = MOG_WEATHER_EX::WEATHER_POWER_EFIC
      power_efic = 1 if power_efic < 1
      power = [[$game_system.weather[1] * power_efic, power_efic].max, 999].min
      for i in 0...power
          @weather_ex.push(Weather_EX.new(@viewport_weather,$game_system.weather[0],$game_system.weather[2],index, @viewport1.ox, @viewport1.oy))
          index += 1
      end           
  end
 
#--------------------------------------------------------------------------
# ● Dispose Weather EX
#--------------------------------------------------------------------------                   
  def dispose_weather_ex_sprite
      return if @weather_ex == nil
      index = 0
      for i in @weather_ex
          $game_temp.weather_ex_set[index] = [] if $game_temp.weather_ex_set[index] == nil
          $game_temp.weather_ex_set[index].push(i.x,i.y,i.opacity,i.angle,i.zoom_x)
          i.dispose_weather
          index += 1
      end
      @weather_ex.each {|sprite| sprite.dispose_weather} 
      @weather_ex = nil
  end
 
#--------------------------------------------------------------------------
# ● Dispose Refresh
#--------------------------------------------------------------------------                   
  def dispose_refresh
      $game_temp.weather_ex_set.clear
      return if @weather_ex == nil
      @weather_ex.each {|sprite| sprite.dispose_weather}
      @weather_ex = nil
  end 
 
#--------------------------------------------------------------------------
# ● Update Weather EX
#--------------------------------------------------------------------------                   
  def update_weather_ex
      $game_temp.weather_rf_time -= 1 if $game_temp.weather_rf_time > 0
      refresh_weather_ex if $game_temp.weather_rf_time == 0
      return if @weather_ex == nil
      @weather_ex.each {|sprite| sprite.update_weather(@viewport_weather.ox,@viewport_weather.oy)}
  end
 
#--------------------------------------------------------------------------
# ● Refresh Weather EX
#--------------------------------------------------------------------------                     
  def refresh_weather_ex
      return if @old_weather == nil
      return if @old_weather == $game_system.weather
      dispose_refresh     
      create_weather_sprite
  end 
   
end 

#==============================================================================
# ■ Spriteset Map
#==============================================================================
class Spriteset_Map
   include Module_Weather_EX 
   
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------                   
  alias mog_weather_ex_initialize initialize
  def initialize
      dispose_weather_ex   
      mog_weather_ex_initialize
      create_weather_ex
  end

#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------                   
  alias mog_weather_ex_dispose dispose
  def dispose
      dispose_weather_ex   
      mog_weather_ex_dispose
  end 

#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------                   
  alias mog_weather_ex_update update
  def update
      mog_weather_ex_update
      update_weather_ex
  end 
   
end

if MOG_WEATHER_EX::WEATHER_BATTLE
#==============================================================================
# ■ Spriteset Battle
#==============================================================================
class Spriteset_Battle
 
   include Module_Weather_EX 
   
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------                   
  alias mog_weather_ex_initialize initialize
  def initialize
      dispose_weather_ex   
      mog_weather_ex_initialize
      create_weather_ex
  end

#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------                   
  alias mog_weather_ex_dispose dispose
  def dispose
      mog_weather_ex_dispose
      dispose_weather_ex
  end 

#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------                   
  alias mog_weather_ex_update update
  def update
      mog_weather_ex_update
      update_weather_ex
  end   
   
end

end

#=============================================================================
# ■ Scene Base
#=============================================================================
class Scene_Base
 
  #--------------------------------------------------------------------------
  # ● Weather Recover Data
  #-------------------------------------------------------------------------- 
  def weather_recover_data
      if $game_system.weather.empty? or
          $game_system.weather[0] == -1
          if !$game_system.weather_restore.empty? and
             $game_system.weather_restore[0] != -1
             v = $game_system.weather_restore
             $game_system.weather = [v[0],v[1],v[2]]
          end
      end         
  end
 
  #--------------------------------------------------------------------------
  # ● Weather Restore
  #--------------------------------------------------------------------------       
  def weather_recover_scene
      return if $game_system.weather_temp.empty?
      return if $game_system.weather_temp[0] == -1
      w = $game_system.weather_temp
      $game_system.weather = [w[0],w[1],w[2]]
      $game_system.weather_temp.clear
      $game_system.weather_temp = [-1,0,""]
  end 

  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------         
  alias mog_weather_ex_main main
  def main
      dispose_weather_ex_base
      weather_recover_scene if can_recover_weather_scene?
      mog_weather_ex_main
  end   
 
  #--------------------------------------------------------------------------
  # ● Can Recover Weather Scene
  #--------------------------------------------------------------------------         
  def can_recover_weather_scene?
      return true if SceneManager.scene_is?(Scene_Map)
      return true if SceneManager.scene_is?(Scene_Battle)<
[close]