Плохо! Плохо!:  0
Показано с 1 по 3 из 3

Тема: RGSS3 – Picture Effects

  1. #1
    Хранитель Аватар для Темный
    Информация о пользователе
    Регистрация
    13.05.2011
    Сообщений
    2,449
    Записей в дневнике
    20
    Репутация: 50 Добавить или отнять репутацию

    По умолчанию RGSS3 – Picture Effects

    Сегодня че то я обратил внимание на вот этот скрипт Picture Effects.
    Посмотрел его видео
    https://youtu.be/Frj3M0AfZks
    посмотрел его настройки они не так сложны.
    И решил добавить сюда. Что делает скрипт? Он может выводить картинку над персонажем
    над ивентом. так же может выводить картинку во время битвы. Так же есть возможность
    выводить на экран анимированую картинку. Пригоден даже на то чтоб создавать эффекты
    солнечных лучей на картах.
    Спойлер Скрипт:
    Код:
    #=================================================  =============================
    # +++ MOG - Picture Effects (v1.0) +++
    #=================================================  =============================
    # By Moghunter 
    # https://atelierrgss.wordpress.com/
    #=================================================  =============================
    # O script adicina novos efeitos na função mostrar imagem, possibilitando 
    # criar animações complexas de maneira simples e rápida.
    # O script também adiciona a função definir a posição da imagem baseado 
    # na posição do character ou na posição real XY da tela.
    #=================================================  =============================
    # EFEITOS
    #=================================================  =============================
    # 0 - Tremer Tipo A
    # 1 - Tremer Tipo B
    # 2 - Efeito de Respirar
    # 3 - Efeito de Auto Zoom (Loop)
    # 4 - Efeito de Fade (Loop)
    # 5 - Efeito de Rolar em duas direções.
    # 6 - Efeito de Wave.
    # 7 - Efeito de Animação por frames, estilo GIF.
    #
    # É possível utilizar todos os efeitos ao mesmo tempo.
    #
    #=================================================  =============================
    # UTILIZAÇÃO
    #=================================================  =============================
    # Use o comando abaixo através do comando evento.
    #
    # picture_effect(PICTURE_ID ,EFFECT_TYPE ,POWER , SPEED)
    #
    # PICTURE_ID = ID da imagem.
    # EFFECT TYPE = Tipo de efetio da imagem. (0 a 7)
    # POWER = Poder do efeito. 
    # SPEED = Velocidade do efeito.
    #
    # Exemplo
    #
    # picture_effect(1,5,10,50)
    #
    #=================================================  =============================
    # Efeito de animação por frames. (Efeito tipo 7)
    #=================================================  =============================
    # Para ativar o efeito de animação por frames é necessário ter e nomear os
    # arquivos da seguinte forma.
    #
    # Picture_Name.png  (A imagem que deve ser escolhida no comando do evento.)
    # Picture_Name0.png
    # Picture_Name1.png
    # Picture_Name2.png
    # Picture_Name3.png
    # Picture_Name4.png
    # ...
    #
    #=================================================  =============================
    # Posições Especiais para as imagens
    #=================================================  =============================
    # Use o comando abaixo para definir a posiçao da imagem.
    #
    # picture_position(PICTURE ID, TARGET ID)
    #
    # PICTURE ID = ID da imagem
    # TARGET ID = ID do alvo
    #
    # 0        = Posição normal. 
    # 1..999   = Posição do evento (ID).
    # -1       = Posição do player.
    # -2       = Posição fixa da imagem.
    #
    #=================================================  =============================
    # Cancelar o Efeito
    #=================================================  =============================
    # Você pode usar o comando apagar imagem do evento, ou usar o comando abaixo.
    #
    # picture_effects_clear(PICTURE_ID)
    #
    #=================================================  =============================
    module MOG_PICURE_EFFECTS
      # Definição da posição Z das pictures. 
      # É possível usar o comando "set_picture_z(value)" para mudar o valor Z
      # no meio do jogo
      DEFAULT_SCREEN_Z = 100
    end
    
    $imported = {} if $imported.nil?
    $imported[:mog_picture_effects] = true
    
    #=================================================  =============================
    # ■ Game Picture
    #=================================================  =============================
    class Game_Picture
      attr_accessor :effect_ex
      attr_accessor :anime_frames
      attr_accessor :position
      
      #--------------------------------------------------------------------------
      # ● Init Basic
      #--------------------------------------------------------------------------
      alias mog_picture_ex_init_basic init_basic
      def init_basic
          init_effect_ex
          mog_picture_ex_init_basic
      end
    
      #--------------------------------------------------------------------------
      # ● Erase
      #--------------------------------------------------------------------------
      alias mog_picture_ex_erase erase
      def erase
          init_effect_ex
          mog_picture_ex_erase
      end
    
      #--------------------------------------------------------------------------
      # ● Init Effect EX
      #--------------------------------------------------------------------------
      def init_effect_ex
          @effect_ex = [] ; @anime_frames = [] ; @position = [0,nil,0,0]
      end
        
    end
    
    #=================================================  =============================
    # ■ Game System
    #=================================================  =============================
    class Game_System
      attr_accessor :picture_screen_z
    
      #--------------------------------------------------------------------------
      # ● Initialize
      #--------------------------------------------------------------------------
      alias mog_picture_ex_initialize initialize
      def initialize
          @picture_screen_z = MOG_PICURE_EFFECTS::DEFAULT_SCREEN_Z
          mog_picture_ex_initialize      
      end
      
    end
    
    #=================================================  =============================
    # ■ Game Interpreter
    #=================================================  =============================
    class Game_Interpreter
    
      #--------------------------------------------------------------------------
      # ● Set Pictures
      #--------------------------------------------------------------------------
      def set_pictures
          return $game_troop.screen.pictures if SceneManager.scene_is?(Scene_Battle)
          return $game_map.screen.pictures if SceneManager.scene_is?(Scene_Map)
      end  
    
      #--------------------------------------------------------------------------
      # ● Picture Effect
      #--------------------------------------------------------------------------
      def picture_effect(id,type, power = nil,speed = nil,misc = nil)
          pictures = set_pictures
          return if pictures.nil?
          power = set_standard_power(type) if power == nil
          power = 1 if type == 4 and power < 1
          speed = set_standard_speed(type) if speed == nil
          pictures[id].effect_ex[0] = nil if type == 1
          pictures[id].effect_ex[1] = nil if type == 0
          pictures[id].effect_ex[type] = [power,speed,0]
          pictures[id].effect_ex[type] = [0,0,0,power * 0.00005,speed, 0,0] if [2,3].include?(type)
          pictures[id].effect_ex[type] = [255,0,0,255 / power, power,speed,0] if type == 4
          pictures[id].effect_ex[type] = [0,0,power,speed,0] if type == 5
          pictures[id].effect_ex[type] = [true,power * 10,speed * 100] if type == 6   
          pictures[id].anime_frames = [true,[],power,0,0,speed,0] if type == 7
      end
    
      #--------------------------------------------------------------------------
      # ● Set Standard Power
      #--------------------------------------------------------------------------
      def set_standard_power(type)
          return 6   if type == 2
          return 30  if type == 3
          return 120 if type == 4
          return 10
      end   
      
      #--------------------------------------------------------------------------
      # ● Set Standard Speed
      #--------------------------------------------------------------------------
      def set_standard_speed(type)
          return 3 if [0,1].include?(type)
          return 0 if [2,3,4].include?(type)
          return 2 if type == 5
          return 0 if type == 7
          return 10
      end  
        
      #--------------------------------------------------------------------------
      # ● Picture Position
      #--------------------------------------------------------------------------
      def picture_position(id,target_id)
          pictures = set_pictures
          return if pictures.nil?
          pictures[id].position = [0,nil,0,0] if [-2,0].include?(pictures[id].position[0])
          pictures[id].effect_ex.clear
          target = 0 ; target = $game_player if target_id == -1
          if target_id > 0
          $game_map.events.values.each do |e| target = e if e.id == target_id end
          end
          pictures[id].position[0] = target_id
          pictures[id].position[1] = target
      end  
     
      #--------------------------------------------------------------------------
      # ● Set Picture Z
      #--------------------------------------------------------------------------
      def set_picture_z(value)
          $game_system.picture_screen_z = value
      end
        
      #--------------------------------------------------------------------------
      # ● Picture Effects Clear
      #--------------------------------------------------------------------------
      def picture_effects_clear(id)
          pictures = set_pictures
          return if pictures.nil?
          pictures[id].effect_ex.clear ; pictures[id].anime_frames.clear
          pictures[id].position = [0,nil,0,0]
      end    
      
    end
    
    #=================================================  =============================
    # ■ Game Map
    #=================================================  =============================
    class Game_Map
      
      #--------------------------------------------------------------------------
      # ● Setup
      #--------------------------------------------------------------------------
      alias mog_picture_ex_setup setup
      def setup(map_id)
          mog_picture_ex_setup(map_id)
          clear_picture_position rescue  nil
      end
      
      #--------------------------------------------------------------------------
      # ● Clear Picture Position
      #--------------------------------------------------------------------------
      def clear_picture_position
          pictures = $game_troop.screen.pictures if SceneManager.scene_is?(Scene_Battle)
          pictures = $game_map.screen.pictures if SceneManager.scene_is?(Scene_Map)
          return if pictures == nil
          pictures.each {|p| 
          p.position = [-1000,nil,0,0] if p.position[0] > 0 or p.position[1] == nil}    
      end
      
    end
    
    #=================================================  =============================
    # ■ Sprite Picture
    #=================================================  =============================
    class Sprite_Picture < Sprite  
      
      #--------------------------------------------------------------------------
      # ● Dispose
      #--------------------------------------------------------------------------
      alias mog_picture_ex_dispose dispose
      def dispose
          mog_picture_ex_dispose
          @picture.effect_ex[6][0] = true if @picture.effect_ex[6]
          @picture.anime_frames[0] = true if @picture.effect_ex[7]
          dispose_pic_frames if !@picture.effect_ex[7]
      end  
      
      #--------------------------------------------------------------------------
      # ● Dispose Pic Frames
      #--------------------------------------------------------------------------
      def dispose_pic_frames
          return if @pic_frames.nil?
          @pic_frames.each {|picture| picture.dispose } ; @pic_frames = nil
      end
      
      #--------------------------------------------------------------------------
      # ● Update Bitmap
      #--------------------------------------------------------------------------
      alias mog_picture_ex_update_bitmap update_bitmap
      def update_bitmap
          refresh_effect_ex if @old_name_ex != @picture.name
          if !@picture.anime_frames.empty? and self.bitmap
             update_picture_animation ; return 
          end
          mog_picture_ex_update_bitmap
          create_picture_animation if can_create_frame_picture?
          set_wave_effect if can_set_wave_effect?
      end
     
      #--------------------------------------------------------------------------
      # ● Refresh effect EX
      #--------------------------------------------------------------------------
      def refresh_effect_ex
         (self.wave_amp = 0 ; self.wave_length = 1 ; self.wave_speed = 0) if !@picture.effect_ex[6]
          @old_name_ex = @picture.name
          create_picture_animation if @picture.effect_ex[7]
          set_wave_effect if can_set_wave_effect? 
      end
      
      #--------------------------------------------------------------------------
      # ● Can Create Frame Picture
      #--------------------------------------------------------------------------
      def can_create_frame_picture?
          return false if !@picture.anime_frames[0]
          return false if !self.bitmap
          return true
      end
      
      #--------------------------------------------------------------------------
      # ● Update Picture Animation
      #--------------------------------------------------------------------------
      def update_picture_animation
          return if @pic_frames == nil
          if @picture.anime_frames[6] > 0 ; @picture.anime_frames[6] -= 1 ; return 
          end
          @picture.anime_frames[4] += 1
          return if @picture.anime_frames[4] < @picture.anime_frames[2]
          self.bitmap = @pic_frames[@picture.anime_frames[3]]
          @picture.anime_frames[4] = 0 ; @picture.anime_frames[3] += 1
          if @picture.anime_frames[3] >= @pic_frames.size  
             @picture.anime_frames[3] = 0 ; @picture.anime_frames[6] = @picture.anime_frames[5]
          end   
      end  
      
      #--------------------------------------------------------------------------
      # ● Create Picture Animation
      #--------------------------------------------------------------------------
      def create_picture_animation
          dispose_pic_frames ; @pic_frames = [] ; @picture.anime_frames[0] = false     
          for index in 0...999
              @pic_frames.push(Cache.picture(@picture.name + index.to_s)) rescue nil
              break if @pic_frames[index] == nil
          end
          if @pic_frames.size <= 1
             dispose_pic_frames ; @pic_frames = nil ; @picture.anime_frames.clear
             @picture.effect_ex[7] = nil ; return
          end  
          self.bitmap = @pic_frames[@picture.anime_frames[3]]
          update_picture_animation
      end
      
      #--------------------------------------------------------------------------
      # ● Update Position
      #--------------------------------------------------------------------------
      def update_position      
          self.z = @picture.number + $game_system.picture_screen_z
          if @picture.effect_ex[0] ; update_shake_effect(0) ; return ; end
          if @picture.effect_ex[1] ; update_shake_effect(1) ; return ; end  
          self.x = pos_x ; self.y = pos_y ; set_oxy_correction      
      end
    
      #--------------------------------------------------------------------------
      # ● Pos X
      #--------------------------------------------------------------------------
      def pos_x
          return @picture.x
      end
      
      #--------------------------------------------------------------------------
      # ● Pos Y
      #--------------------------------------------------------------------------
      def pos_y
          return @picture.y
      end
    
      #--------------------------------------------------------------------------
      # ● Set Oxy Correction
      #--------------------------------------------------------------------------
      def set_oxy_correction
          return if @picture.position[0] == -2
          self.x += self.ox if @picture.effect_ex[3] or @picture.effect_ex[5]
          self.y += self.oy if @picture.effect_ex[2] or @picture.effect_ex[3] or @picture.effect_ex[5]
      end
      
      #--------------------------------------------------------------------------
      # ● Update Position
      #--------------------------------------------------------------------------
      def update_shake_effect(type)
          @picture.effect_ex[type][2] += 1
          return if @picture.effect_ex[type][2] < @picture.effect_ex[type][1]
          @picture.effect_ex[type][2] = 0
          self.x = pos_x + shake_effect(type)
          self.y = @picture.effect_ex[1] ? pos_y + shake_effect(type) : pos_y
          set_oxy_correction
      end
    
      #--------------------------------------------------------------------------
      # ● Shake Effect
      #--------------------------------------------------------------------------
      def shake_effect(type)
          -(@picture.effect_ex[type][0] / 2) +  rand(@picture.effect_ex[type][0]) 
      end
    
      #--------------------------------------------------------------------------
      # ● Update Other
      #--------------------------------------------------------------------------
      def update_other
          if @picture.effect_ex[4] ; update_opacity_ex
          else ; self.opacity = @picture.opacity
          end
          self.blend_type = @picture.blend_type
          if @picture.effect_ex[5] ; update_angle_ex
          else ; self.angle = @picture.angle
          end   
          self.tone.set(@picture.tone)
      end  
    
      #--------------------------------------------------------------------------
      # ● Update Angle EX
      #--------------------------------------------------------------------------
      def update_angle_ex
          @picture.effect_ex[5][4] += 1
          return if @picture.effect_ex[5][4] < @picture.effect_ex[5][3]
          @picture.effect_ex[5][4] = 0 ; @picture.effect_ex[5][1] += 1
          case @picture.effect_ex[5][1]
            when 0..@picture.effect_ex[5][2]
                 @picture.effect_ex[5][0] += 1
            when @picture.effect_ex[5][2]..(@picture.effect_ex[5][2] * 3)
                 @picture.effect_ex[5][0] -= 1
            when (@picture.effect_ex[5][2] * 3)..(-1 + @picture.effect_ex[5][2] * 4)
                 @picture.effect_ex[5][0] += 1
            else ; @picture.effect_ex[5][0] = 0 ; @picture.effect_ex[5][1] = 0
          end
          self.angle = @picture.angle + @picture.effect_ex[5][0]
      end
      
      #--------------------------------------------------------------------------
      # ● Update Opacity EX
      #--------------------------------------------------------------------------
      def update_opacity_ex
          @picture.effect_ex[4][6] += 1
          return if @picture.effect_ex[4][6] < @picture.effect_ex[4][5]
          @picture.effect_ex[4][6] = 0 ; @picture.effect_ex[4][2] += 1
          case @picture.effect_ex[4][2]
            when 0..@picture.effect_ex[4][4] 
              @picture.effect_ex[4][0] -= @picture.effect_ex[4][3]
            when @picture.effect_ex[4][4]..(-1 + @picture.effect_ex[4][4] * 2)
              @picture.effect_ex[4][0] += @picture.effect_ex[4][3]          
            else
              @picture.effect_ex[4][0] = 255 ; @picture.effect_ex[4][2] = 0
          end
          self.opacity = @picture.effect_ex[4][0]
      end
      
      #--------------------------------------------------------------------------
      # ● Update Origin
      #--------------------------------------------------------------------------
      def update_origin
          return if !self.bitmap
          if force_center_oxy?
             self.ox = @picture.effect_ex[2] ? n_ox : (bitmap.width / 2) + n_ox
             self.oy = (bitmap.height / 2) + n_oy
             if @picture.position[0] > 0 or @picture.position[0] == -1
                execute_move(0,@picture.position[2],-@picture.position[1].screen_x) rescue nil
                execute_move(1,@picture.position[3],-@picture.position[1].screen_y) rescue nil
             end  
             return
          end
          if @picture.effect_ex[2] ; self.oy = (bitmap.height + n_oy) ; return ; end
          if @picture.origin == 0
             self.ox = n_ox ; self.oy = n_oy
          else
             self.ox = (bitmap.width / 2) + n_ox 
             self.oy = (bitmap.height / 2) + n_oy
          end       
      end
    
      #--------------------------------------------------------------------------
      # ● Force Center Oxy
      #--------------------------------------------------------------------------
      def force_center_oxy?
          return false if @picture.position.empty?
          return true if @picture.position[0] == -1
          return true if @picture.position[0] > 0
          return true if @picture.effect_ex[3]
          return true if @picture.effect_ex[5]
          return false
      end
      
      #--------------------------------------------------------------------------
      # ● N Ox
      #--------------------------------------------------------------------------
      def n_ox
          return @picture.position[2] if @picture.position[0] > 0 and @picture.position[2]
          return @picture.position[2] if @picture.position[0] == -1 and @picture.position[2]
          return $game_map.display_x * 32 if @picture.position[0] == -2
          return 1000 if @picture.position[0] == -1000
          return 0
      end
      
      #--------------------------------------------------------------------------
      # ● N Oy
      #--------------------------------------------------------------------------
      def n_oy
          return @picture.position[3] if @picture.position[0] > 0 and @picture.position[3] 
          return @picture.position[3] if @picture.position[0] == -1 and @picture.position[3] 
          return $game_map.display_y * 32 if @picture.position[0] == -2
          return 1000 if @picture.position[0] == -1000
          return 0
      end
      
      #--------------------------------------------------------------------------
      # ● Execute Move
      #--------------------------------------------------------------------------      
      def execute_move(type,cp,np)
          sp = 5 + ((cp - np).abs / 5)
          if cp > np ;    cp -= sp ; cp = np if cp < np
          elsif cp < np ; cp += sp ; cp = np if cp > np
          end     
          @picture.position[2] = cp if type == 0 
          @picture.position[3] = cp if type == 1
      end    
      
      #--------------------------------------------------------------------------
      # ● Update Zoom
      #--------------------------------------------------------------------------
      alias mog_picture_ex_update_zoom update_zoom
      def update_zoom
          if @picture.effect_ex[2] ;  update_breath_effect ; return ; end
          if @picture.effect_ex[3] ;  update_auto_zoom_effect ; return ; end
          mog_picture_ex_update_zoom
      end    
         
      #--------------------------------------------------------------------------
      # ● Update Breath Effect
      #--------------------------------------------------------------------------
      def update_breath_effect
          self.zoom_x = @picture.zoom_x / 100.0
          self.zoom_y = @picture.zoom_y / 101.0 + auto_zoom(2)
      end  
    
      #--------------------------------------------------------------------------
      # ● Update Auto Zoom Effect
      #--------------------------------------------------------------------------
      def update_auto_zoom_effect
          self.zoom_x = @picture.zoom_x / 100.0 + auto_zoom(3)
          self.zoom_y = @picture.zoom_y / 100.0 + auto_zoom(3)
      end
      
      #--------------------------------------------------------------------------
      # ● Auto Zoom
      #--------------------------------------------------------------------------
      def auto_zoom(type)
          if @picture.effect_ex[type][6] == 0
             @picture.effect_ex[type][6] = 1
             @picture.effect_ex[type][0] = rand(50)
          end
          if @picture.effect_ex[type][5] < @picture.effect_ex[type][4]
             @picture.effect_ex[type][5] += 1
             return @picture.effect_ex[type][1]
          end    
          @picture.effect_ex[type][5] = 0
          @picture.effect_ex[type][2] -= 1
          return @picture.effect_ex[type][1] if @picture.effect_ex[type][2] > 0
          @picture.effect_ex[type][2] = 2 ; @picture.effect_ex[type][0] += 1
          case @picture.effect_ex[type][0]
             when 0..25 ; @picture.effect_ex[type][1] += @picture.effect_ex[type][3]         
             when 26..60 ; @picture.effect_ex[type][1] -= @picture.effect_ex[type][3]
             else ; @picture.effect_ex[type][0] = 0 ; @picture.effect_ex[type][1] = 0
          end
          @picture.effect_ex[type][1] = 0 if @picture.effect_ex[type][1] < 0
          @picture.effect_ex[type][1] = 0.25 if @picture.effect_ex[type][1] > 0.25 if type == 2
          return @picture.effect_ex[type][1]
      end
    
      #--------------------------------------------------------------------------
      # ● Can Set Wave Effect?
      #--------------------------------------------------------------------------
      def can_set_wave_effect?
          return false if !@picture.effect_ex[6]
          return false if !@picture.effect_ex[6][0]
          return false if !self.bitmap
          return true
      end
    
      #--------------------------------------------------------------------------
      # ● Set Wave Effect
      #--------------------------------------------------------------------------
      def set_wave_effect 
          @picture.effect_ex[6][0] = false
          self.wave_amp = @picture.effect_ex[6][1]
          self.wave_length = self.bitmap.width
          self.wave_speed = @picture.effect_ex[6][2]
      end  
       
    end

    Спойлер Ссылка на Демо::
    https://atelierrgss.wordpress.com/download-page-2/
    Последний раз редактировалось Темный; 14.04.2015 в 02:42.



  2. #2
    Администратор Аватар для Пётр
    Информация о пользователе
    Регистрация
    24.04.2014
    Адрес
    Краснодар
    Сообщений
    3,992
    Записей в дневнике
    6
    Репутация: 132 Добавить или отнять репутацию

    По умолчанию

    Ох уж этот ленивый Темный.
    А оформить тему как следует слабо?
    [h=%2$s]Шаблон составления темы со скриптом[/h]

  3. #3
    Хранитель Аватар для Темный
    Информация о пользователе
    Регистрация
    13.05.2011
    Сообщений
    2,449
    Записей в дневнике
    20
    Репутация: 50 Добавить или отнять репутацию

    По умолчанию

    Оформлено по правилам.



Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
RGSS3 – Picture Effects