¡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 Efecto Distorsión ((Motion Blur) [RMXP] el Miér Feb 03, 2016 7:33 am

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

Super_SaiyanDios

avatar

EFECTO MOTION BLUR
RPG Maker (XP)
Difícilmente encontrado en el proyecto de "Unraveled: Tale of the Shipbreaker's Daughter".
Este efecto condenada mente lo busque por todo San Google y sin más que un pobre resultado en un
script que se basaba en crear una imagen y congelar el proyecto... para mi no fue suficiente...
Hasta que después de un par de meses me dedique a descargar proyectos y encantada mente lo encontré y lo extraje
para finalmente compartirlo con ustedes.
Aclarar que este efecto lo he conocido en el juego de Genso suikoden 5, al final del juego se aplica un borrón que me
quedo en su tiempo gustando bastante para añadirlo a mi proyecto.
Sobre el Script:
Motion Blur es un efecto de Borrón de
movimiento que se aplica a todo el Mapa
en general Incluyendo a tileset, eventos
(Charset) y nuestro querido héroe.

NO USAR:

si el comando de Mostrar imagen está
activo... ya que el efecto no se aplica
y ademas ocurren errores gráficos.

•El efecto no se usa al momento de la
Batalla (Sistema de Batalla Por Defecto).
Puede que en un sistema de batalla asociado
con el mapa pueda incluir dicho efecto
(NO Comprobado).

Este efecto visual suele activarse habitualmente
en efectos de estado o en mapas especiales, pero
contrariamente puede darle uso como usted lo desee.
Imágenes:
-
Instrucciones:
En el script por defecto, nos encontraremos con el interruptor y variables personalizadas para su funcionamiento.
Usted puede cambiar a otro interruptor o variable que no este usando para configurar el efecto MOTION BLUR a
su preferencia.

 Enabled          = true
 Motion_Switch    = 8
 Opacity_Variable = 10
 Z_Variable       = 11  
 Loss_Variable    = 12  
 Default_Opacity  = 128        
 Default_Z        = 999      
 Default_Loss     = 32  

EN DONDE:      

Enable:
Activa o desactiva el comando general de el script.

Motion_Switch:
Valor de el interruptor que activara el efecto motion blur. (Enable debe de estar en = true)

Opacity_Variable:
Variable que guarda el valor de la Opacidad aplicada. (Por defecto el valor de la opacidad es de 128)

Z_Variable:
Variable que guarda el valor de Z aplicado. (Por defecto el valor de Z es de 999)

Loss_Variable:
Variable que guarda el valor Perdido aplicado. (Por defecto el valor de Perdida es de 32)

Default_Opacity:
Valor de la Opacidad Por defecto.

Default_Z:
Valor de Z Por defecto.

Default_Loss:
Valor perdido Por defecto.

=================================================================

Los valores por defecto de cada efecto Opacidad, Z y perdida, son valores que dejarán nuestro
proyecto sin ningún cambio gráfico.

 Default_Opacity  = 128        
 Default_Z        = 999      
 Default_Loss     = 32  

y si estos valores son alterados por cada una de las variables, aplicarán un cierto cambio.

 Motion_Switch    = X
 Opacity_Variable = X
 Z_Variable       = X  
 Loss_Variable    = X

Ejemplo:

 Motion_Switch    = 5
 Opacity_Variable = 1
 Z_Variable       = 2  
 Loss_Variable    = 3

con estos valores suponemos usar el interruptor 5 para activar o desactivar el efecto y las variables 1 para la
Opacidad, 2 para Z y 3 para perdida.

Si queremos ver un pequeño cambio gráfico como ejemplo, usaremos el siguiente valor definido.

En la variable 1 (Opacidad) le daremos el valor de 128 (Normal).

Opacity_Variable = 128

En la variable  2 (Z) le daremos el valor de 199.

Z_Variable       = 199

Y en la variable 3 (Perdida) le daremos el valor de 28.

Loss_Variable    = 28

Cuando nos encontremos en el mapa de nuestro proyecto, estará todo normal, hasta que
de repente definimos las variables y activaremos el interruptor 5 para finalmente ver el efecto
que ocurre al haber cambiado el valor de perdida.

=======================================================

Recuerda...
Si en cada una de tus variables asignas los valores por defecto 128,999 y 32 en
tu proyecto a la hora de activar el interruptor no aplicará ningún cambio gráfico, ya
que estos valores son los normales a como corre nuestro proyectos.

 Motion_Switch    = X
 Opacity_Variable = X
 Z_Variable       = X  
 Loss_Variable    = X

En cada una de tus variable en especial:

 Z_Variable       = X  
 Loss_Variable    = X

Intenta de colocar valores
diferentes a los que son por defecto,
para apreciar verdaderamente los cambios.
Código:


Código:
module Motion_Blur
  Enabled          = true        # Enable the script? (true / false)
  Motion_Switch    = 7
  Opacity_Variable = 10           # Variable what changes the overlay opacity
  Z_Variable       = 11           # Variable what changes the overlay Z
  Loss_Variable    = 12           # Variable what changes the overlay opacity loss
  Default_Opacity  = 128         # Default overlay opacity
  Default_Z        = 999        # Default overlay Z
  Default_Loss     = 32          # Default overlay opacity loss
  Scenes           = [Scene_Map] # Scenes what supports motion blur
end

if (Motion_Blur::Enabled)
  
  module Graphics
    
    RtlMoveMemory          = Win32API.new("kernel32", "RtlMoveMemory",          "pii",       "i")
    BitBlt                 = Win32API.new("gdi32",    "BitBlt",                 "iiiiiiiii", "i")
    CreateCompatibleBitmap = Win32API.new("gdi32",    "CreateCompatibleBitmap", "iii",       "i")
    CreateCompatibleDC     = Win32API.new("gdi32",    "CreateCompatibleDC",     "i",         "i")
    DeleteObject           = Win32API.new("gdi32",    "DeleteObject",           "i",         "i")
    GetDIBits              = Win32API.new("gdi32",    "GetDIBits",              "iiiiipi",   "i")
    SelectObject           = Win32API.new("gdi32",    "SelectObject",           "ii",        "i")
    SetDIBits              = Win32API.new("gdi32",    "SetDIBits",              "iiiiipi",   "i")
    GetForegroundWindow    = Win32API.new("user32",   "GetForegroundWindow",    "",          "i")
    GetSystemMetrics       = Win32API.new("user32",   "GetSystemMetrics",       "i",         "i")
    
    HWnd                   = GetForegroundWindow.call
    DC                     = Win32API.new("user32",   "GetDC",                  "i",         "i").call(HWnd)
    
    def self.snapshot(width = defined?(RPG::Cache) ? 640 : self.width,
        height = defined?(RPG::Cache) ? 480 : self.height)
      bitmap  = Bitmap.new(width, height)
      address = "\0" * 4
      RtlMoveMemory.call(address, bitmap.__id__ * 2 + 16, 4)
      RtlMoveMemory.call(address, address.unpack("L")[0] + 8, 4)
      RtlMoveMemory.call(address, address.unpack("L")[0] + 16, 4)
      address = address.unpack("L")[0]
      info    = [40, width, height, 1, 32, 0, 0, 0, 0, 0, 0].pack("LllSSLLllLL")
      hDC     = CreateCompatibleDC.call(DC)
      hBM     = CreateCompatibleBitmap.call(DC, width, height)
      DeleteObject.call(SelectObject.call(hDC, hBM))
      SetDIBits.call(hDC, hBM, 0, height, address, info, 0)
      BitBlt.call(hDC, 0, 0, width, height, DC, 0, 0, 0xCC0020)
      GetDIBits.call(hDC, hBM, 0, height, address, info, 0)
      DeleteObject.call(hBM)
      DeleteObject.call(hDC)
      return bitmap
    end
    
  end
  
  class Scene_Map
    
    method = "#{defined?(SceneManager) ? 'perform_' : defined?(RPG::Cache) ? '' :
      'update_'}transfer#{defined?(SceneManager) ? '' : '_player'}"
    
    eval("
      
      alias :motionBlur :#{method}
      
      def #{method}
        return if (!defined?(SceneManager) && !defined?(RPG::Cache) &&
          !$game_player.transfer?)
        if (@motionBlur != nil)
          @motionBlur.each {|sprite|
            sprite.bitmap.dispose
            sprite.dispose
          }
          @motionBlur.clear
        end
        motionBlur
      end
      
    ")
    
  end
  
  Motion_Blur::Scenes.each {|scene|
    
    scene.class_eval {
      
      alias :motionBlur_1 :main
      alias :motionBlur_2 :update
      
      def main
        @motionBlur = []
        motionBlur_1
        for sprite in @motionBlur
          sprite.bitmap.dispose
          sprite.dispose
        end
        @motionBlur.clear
        @motionBlur = nil
      end
      
      def update
        loss = $game_variables[Motion_Blur::Loss_Variable]
        if (@motionBlur.size > 0)
          (@motionBlur.size - 1).downto(0) {|index|
            sprite = @motionBlur[index]
            sprite.opacity -= loss
            if (sprite.opacity == 0)
              sprite.bitmap.dispose
              sprite.dispose
              @motionBlur.delete_at(index)
            end
          }
        end
        opacity = $game_variables[Motion_Blur::Opacity_Variable]
        switchy = $game_switches[Motion_Blur::Motion_Switch]
        if ((opacity > 0) && (opacity > loss)) && switchy
          @motionBlur   << Sprite.new
          sprite         = @motionBlur.last
          sprite.bitmap  = Graphics.snapshot
          sprite.z       = $game_variables[Motion_Blur::Z_Variable]
          if (defined?(Cache) && (Graphics::GetForegroundWindow.call == Graphics::HWnd))
            sprite.ox = 48 if (Graphics.width < 640 && Graphics::GetSystemMetrics.call(0) == 640)
            sprite.oy = 32 if (Graphics.height < 480 && Graphics::GetSystemMetrics.call(1) == 480)
          end
          sprite.opacity = opacity
        end
        motionBlur_2
      end
      
    }
    
  }
  
end
Créditos:
Agradecer especialmente al diseñador del juego "Unraveled: Tale of the Shipbreaker's Daughter" quien es: Cinnamon.

#2 Re: Efecto Distorsión ((Motion Blur) [RMXP] el Miér Feb 03, 2016 11:30 am

Ledai

avatar
Gran aporte y bien presentado, muchas gracias por traerlo! Parece un buen script, puede que sea más que útil a los usuarios del Xp.
Ópalo Reputación




Entérate de todas las novedades

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.