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

Chuva "Theo" por baixo das imagens

Iniciado por andrewzoka, 14/11/2017 às 14:44

14/11/2017 às 14:44 Última edição: 12/12/2017 às 19:45 por andrewzoka
Estou com um problema ao usar o efeito de chuva do script do Theo, que estou deixando aqui abaixo. O script necessita que tenha uma imagem de chuva personalizada na pasta pictures, a imagem se chama "rain". O problema é que a chuva fica por baixo de qualquer imagem que eu chame, já tentei usar "@z = 200" mas não resolve. Podem me ajudar?

# =============================================================================
# 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 = false
  # 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]
      "fumaça"  => ["fog",       90,     0.2,     0.2,    1.0,    1.0],
      "nuvens"  => ["cloud",     50,    -0.2,    -0.2,    2.0,    2.0],
      "areia"   => ["storm",     68,    -2.0,     2.0,    1.0,    1.0],
      "folhas1" => ["leaf",      40,       0,       0,    2.0,    2.0],
      "folhas2" => ["leafx",     40,       0,       0,    2.0,    2.0],
      
      "rain1"  => ["rain",      190,      0,      -5,    1.0,    1.0],
      "rain2"  => ["rain",       80,     -2,      -5,    3.0,    3.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["fumaça"]
      fog.scroll_scale_x = 0.4
      fog.scroll_scale_y = 0.4
      fog = fog_data["rain1"]
      fog.blend_type = 1
      
      fog = fog_data["rain2"]
      fog.blend_type = 2
    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 = 250
  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)
    self.z = self.z + 100
    @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

Harus Game is coming.
https://www.indiexpo.net/pt/games/harus
© 2020 copyright.

Como você está chamando o efeitos? Está usando o fog.z = x no "Chamar Script"? Creio que o @z = y não resolve porque o script também altera essa variável na linha 237. Qualquer coisa, tente mexer ali também.

15/11/2017 às 00:28 #2 Última edição: 15/11/2017 às 00:33 por andrewzoka
No script pede para chamar o script exatamente assim:

add_fog("rain1", 12)
add_fog("rain2", 12)


Quando chamo  "fog.z = x" no chamar script ele apresenta erro. Acredito que pelo "Chamar Script" não dá...
E acho que foi eu que acrescentei aquele @z = 250 para fazer um teste, se não me engano, mas não deu muito certo...

Harus Game is coming.
https://www.indiexpo.net/pt/games/harus
© 2020 copyright.

Olha, eu fucei o script por meia hora e não achei lugar onde editar isso. Fui pesquisar outro e deu na mesma. Mexi até no Sprite_Picture e nada. O MOG Weather EX que é criado com partículas ao invés de blocos de imagem pode produzir o efeito que tu quer. Vai dar um trabalho um pouquinho maior na configuração e tu vai precisar criar as partículas.