¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1 [RM ACE] [Theo]Fog Screen 2.0 el Miér Mayo 21, 2014 11:14 pm

Reputación del mensaje :100% (1 voto)

Faye Valentine

avatar
Introducción

________________________________________________________________________________________
¿Nunca te has puesto a ver que todos los scripts de fogs desde el VX hasta el Ace tienen un gran defecto que es que se mueve con el jugador haciéndolo ver incómodo? Bien, éste script es la excepción.


Características:

________________________________________________________________________________________

  1. Fogs customizadas desde el script, por lo que solo tienes que llamar el ID de la fog para que aparezca
  2. No se mueve con el jugador
  3. Permite mostrar multiples fogs al mismo tiempo
  4. Todas las características que poseía el XP (Mezclado, zoom, velocidad X y Y y demás)
  5. Traducido completamente al Español por mi




Script:

________________________________________________________________________________________
Spoiler:

Código:

# =============================================================================
# TheoAllen - Fog Screen
# Version : 2.0
# Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
# (Original: Indonés, Traducción al Inglés: Theo, al Español: SGITC)
# =============================================================================
($imported ||={})[:Theo_FogScreen] = true
# =============================================================================
# Notas de la versión:
# -----------------------------------------------------------------------------
# 2013.08.24 - Script reescrito con diferentes funciones
#  - Soporte para multiples fogs
#  - Ahora soporta movimiento muy lento (0.01 por ejemplo)
#  - La fog ya no scrollea con el jugador
#  - Ahora soporta fog en batalla
#  - Ahora se puede cambiar la fog mediante notas de mapa
#  - Removida la varianza de la opacidad
# 2013.06.13 - Añadidas las fog globales
#  - Añadido interruptor global de desactivación
#  - Añadido interruptor de desactivación específico
# 2013.06.12 - Bug arreglado. La fog no estaba siendo borrada cuando pasaba de mapa.
# 2013.05.15 - Añadida la función de tipo de mezclado
#  - Añadida la función de zoom
#  - Added opacity variance
# 2013.05.09 - Finalizado el script
# =============================================================================
=begin

  -----------------------------------------------------------------------------
  Apertura:

  Éste es un script diferente a mi anterior script de fog. Funciona de manera
  distinta, así que si tienes una versión anterior, lo recomendable sería
  que la removieses y pusieses ésta en cambio.

  -----------------------------------------------------------------------------
  Introducción:
  Éste script emula la función de "Fog" (o "Neblina") que tenía el RMXP
  por defecto.

  -----------------------------------------------------------------------------
  Cómo usar:
  1.- Coloca éste script encima de "Main" y debajo de "Materiales"
  Edita la base de datos de éste script para configurar tus fogs
  Para mostrar las fogs, ejecuta un comando de "Script"

  Para mostrar:
  add_fog(key)
  add_fog(key,fadein)

  Para remover:
  delete_fog(key)
  delete_fog(key,fadeout)

  Nota:
  - "Key" es una palabra clave de la base de datos de éste script. Similar a un
  "ID" pero en vez de números, palabras o letras.
 
 - "Fade in" y "Fade Out" son los tiempos de aparición y desaparición de cada
  fog. El valor va colocado en frames. Si omites éste paso, la aparición/des-
  aparición será inmediata.
 
 - No puedes llamar dos o más fogs que tengan el mismo nombre.

  Utiliza el comando: clear_fogs si quieres remover todas las fogs actuales.

  -----------------------------------------------------------------------------
  Uso de notas:

  Éste sistema es bastante simple. Todo lo que debes de hacer es colocar el
  siguiente código en las notas del mapa. Donde "Key" va el nombre de la
  fog que customizaste en la base de datos de éste script.

  <add fog: key>

  -----------------------------------------------------------------------------
  Términos de uso:

  Todos los créditos van para Theo Allen. Puedes editar éste script como gustes
  pero nunca debes reclamar que es de tu propiedad.
  Para uso comercial, no olvides darme una copia gratis del juego

=end
# =============================================================================
# Configuración
# =============================================================================
module THEO
  module Fog
  # -------------------------------------------------------------------------
  # ¿Será incluida en las batallas?
  # -------------------------------------------------------------------------
  BattleFog = true
  # True para sí, False para no.
 
 # -------------------------------------------------------------------------
  # Base de Datos de Fogs
  # Nivel: fácil
  # -------------------------------------------------------------------------
  # Guía de configuración:
  #
  # key  => Nombre o ID de la fog.
  # name  => Nombre exacto de la imagen de fog. Debe estar en "Pictures"
  # opacity => Opacidad de la fog (0 - 255)
  # speed_x => Velocidad de movimiento horizontal
  # speed_y => Velocidad de movimiento vertical
  # zoom_x  => Escala de zoom horizontal (valor normal: 1.0 acepta decimales)
  # zoom_y  => Escala de zoom vertical (valor normal: 1.0 acepta decimales)
  # -------------------------------------------------------------------------
  List = {
  # "key"  => ["name", opacity, speed_x, speed_y, zoom_x, zoom_y]
  # Nota: los valores + y - están invertidos de tal forma que - = +, + = -
  #  ésto ocurre para los valores X, en Y están invertidos si lo
  #  relacionamos con el maker, donde - es + y + es - de tal forma que
  #  en éste script los valores - y + son correspondientes asimismos.
 
 # Listado de reconocimiento de Fogs
  # ---------------------------------
  # SandFX1 = Arena en el viento de la escena inicial
  # SandFX2 = La misma, pero en dirección Y contraria para lograr el efecto.
  # Clouds01 = Las nubes de la escena Before Bairei
  # Clouds02 = Lo mismo que arriba.
  # Snow = Nieve. Para uso general de climas fríos.
 

 "SandFX1" => ["SandFX",  200,  2,  -0.5,  1.0,  1.0],
  "SandFX2" => ["SandFX",  200,  2,  0.5,  1.0,  1.0],
  "Clouds01" => ["FogXP",  50,  -0.7,  0.5,  2.0,  2.0],
  "Clouds02" => ["FogXP",  50,  -0.6,  -0.1,  2.0,  2.0],
  "Snow"  => ["FogXP", 80, 1, 0, 1.0, 1.0],
  "Leaves" => ["Leaves", 80, 0, 0, 1.2, 1.2],
  "Misty Fog" => ["FogXP", 100, -0.5, 0.1, 2.0, 1.5],

  # ¡Añade tus propias fogs!
 
 } # <-- ¡No lo elimines!
  # -------------------------------------------------------------------------
  # Base de datos de fog extendida (Para usuarios avanzados)
  # Level : Dificil
  # -------------------------------------------------------------------------
  # Hay más configuraciones que las de arriba, pero es puramente opcional.
  # Por razones de organización, prefiero dividirlas.
  #
  # Guía de Configuración
  # Empieza escribiendo ésto:
  # fog = fog_data["key"]
  #
  # Luego cambia sus atributos:
  # fog = fog_data["fog"]
  # fog.name = "something"
  # fog.opacity = 100
  #
  # Ésta es la lista de configuraciones adicionales no incluidas normalmente:
  #
  # fog.switch  >> ID del interruptor. Si está activa, será invisible.
  # fog.blend_type  >> Tipo de mezclado. 0 = Normal 1 = Añadir 2 = Inverso
  # fog.tone  >> Tono de la fog en valor RGB como los tonos de pantalla.
  # fog.z  >> Coordenada Z. Z = profundidad.
  #
 #
  # Para movimiento de escala:
  # fog.scroll_scale_x >> Escala horizontal
  # fog.scroll_scale_y >> Escala vertical
  #
  # Son para movimiento de escala. Si el valor es 0.0 la fog se moverá junto al
  # jugador. El valor predeterminado es 1.0 (no se moverá con el jugador)
  # -------------------------------------------------------------------------
  def self.custom_fogs
  fog = fog_data["Leaves"]
  fog.blend_type = 1
 

 fog = fog_data["Misty Fog"]
  fog.blend_type = 0
 
 fog = fog_data["Misty Fog 2"]
  fog.blend_type = 0
  end
 
 end
end
# =============================================================================
# Fin de la configuración. Ediciones a partir de aquí podrían causar cáncer.
# =============================================================================
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
# =============================================================================
# ▼ DataManager
# =============================================================================
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
# =============================================================================
# ▼ DataFogs
# =============================================================================
class DataFogs

  def initialize
  @data = {}
  end

  def [](key)
  @data[key] ||= Fog.new(key)
  end

end
# =============================================================================
# ▼ Fogs
# =============================================================================
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
# =============================================================================
# ▼ Game_Temp
# =============================================================================
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
# =============================================================================
# ▼ Game_System
# =============================================================================
class Game_System
  attr_reader :used_fog

  alias theo_fog_init initialize
  def initialize
  theo_fog_init
  @used_fog = []
  end

end
# =============================================================================
# ▼ Game_Interpreter
# =============================================================================
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
# =============================================================================
# ▼ Game_Map
# =============================================================================
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
# =============================================================================
# ▼ PlaneFog
# =============================================================================
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
# =============================================================================
# ▼ PlaneFogs
# =============================================================================
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
# =============================================================================
# ▼ MapFogs
# =============================================================================
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
# =============================================================================
# ▼ Spriteset_Map
# =============================================================================
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
# =============================================================================
# ▼ Spriteset_Battle
# =============================================================================
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

Créditos

________________________________________________________________________________________
Todos los creditos van a mi amigo Theo Allen, o como le decimos, Theo :p



Nota

________________________________________________________________________________________

  • En la velocidad de X y Y recomiendo poner valores bajos. 0.5 sería un 1 normalmente
  • Normalmente el valor Y del Rpg Maker, todos, está inverso. De tal forma que si colocamos una imagen con valor Y -200 saldrá arriba en vez de abajo. Sin embargo, éste script ocurre al revés, de tal forma que si colocamos -1 se moverá a la derecha en vez de la izquierda.

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

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