dsiver144

Dark's After Image Effect

May 2nd, 2016
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 7.55 KB | None | 0 0
  1. #===============================================================================
  2. # Name: Dark's After Image Effect
  3. # Author: Nhat Nguyen (Dark Sky)
  4. # Released on: May 2nd 2016
  5. #-------------------------------------------------------------------------------
  6. # Version 1.0: Released!
  7. # Version 1.1: Fixed Sprites dispose issues. (Thanks to Sixth)
  8. #-------------------------------------------------------------------------------
  9. # Event's Comment Tag:
  10. # <afterimage: dspeed,dmode>
  11. #   -> dspeed: when event speed = dspeed then afterimage appear!
  12. #   -> dmode: set after image mode!
  13. # ex: <afterimage: 5,3> #At speed 5, Randomly Color After Image Appear!
  14. #                        FABULOUS!
  15. #-------------------------------------------------------------------------------
  16. # Script call:
  17. # $game_player.afterimage_mode = x #set player's afterimage mode to x
  18. # $game_map.events[id].afterimage_mode = x #set "event id" 's afterimage mode to x
  19. # $game_map.events[id].afterimage_speed = x #set "event id" 's afterimage speed to x
  20. #===============================================================================
  21. module DarkAfterImage
  22.   FADE_SPEED = 5        #FIND OUT YOURSELT PLZ!
  23.   DELAY = 2             #FIND OUT YOURSELT PLZ!
  24.   MODE = 1              #Default Mode
  25.   # MODE
  26.   # 1 => Normal (Black)
  27.   # 2 => White
  28.   # 3 => Random Color
  29.   CUSTOM_MODE = {}
  30.   CUSTOM_MODE[4] = Tone.new(0,0,155,0) #Violet
  31.   CUSTOM_MODE[5] = Tone.new(255,0,0,0) #Red
  32.   CUSTOM_MODE[6] = Tone.new(0,100,0,0) #Green
  33.   TOKEN = /<afterimage:\s*(\w+),(\w+)>/i #Don't change this unless you know what
  34.                                          #are you doing.
  35. end
  36. include DarkAfterImage
  37. class Sprite_CharacterAfterImage < Sprite
  38.   #--------------------------------------------------------------------------
  39.   # * Initialize
  40.   #--------------------------------------------------------------------------
  41.   def initialize(x,y,bitmap,viewport,sprite,mode)
  42.     super(viewport)
  43.     @sprite = sprite
  44.     self.bitmap = bitmap
  45.     self.src_rect.set(@sprite.src_rect)
  46.     if mode == 3
  47.       self.tone = Tone.new(rand(255),rand(255),rand(255),rand(255))
  48.     end
  49.     if mode == 1
  50.       self.tone = Tone.new(0,0,0,200)
  51.     end
  52.     if mode == 2
  53.       self.tone = Tone.new(150,150,150,100)
  54.     end
  55.     if mode > 3
  56.       self.tone = CUSTOM_MODE[mode]
  57.     end
  58.     @src_rect = @sprite.src_rect.clone
  59.     self.x = x
  60.     self.opacity = 200
  61.     self.oy = @sprite.oy
  62.     self.ox = @sprite.ox
  63.     self.y = y
  64.   end
  65.   #--------------------------------------------------------------------------
  66.   # * Update
  67.   #--------------------------------------------------------------------------
  68.   def update
  69.     super
  70.     if !self.disposed?
  71.       self.src_rect.set(@src_rect)
  72.       if self.opacity > 0
  73.         self.opacity -= FADE_SPEED
  74.       end
  75.     end
  76.   end
  77. end
  78. class Game_Player
  79.   attr_accessor :afterimage_mode
  80. end
  81. class Game_Event
  82.   attr_accessor :afterimage_mode
  83.   attr_accessor :afterimage_speed
  84.   attr_accessor :afterimage_delay
  85.   alias :dark_after_image_update_Ev  :update
  86.   def update
  87.     dark_after_image_update_Ev()
  88.     if @afterimage_delay
  89.       if @afterimage_delay > 0
  90.         @afterimage_delay -= 1
  91.       end
  92.     end
  93.   end
  94. end
  95. class Spriteset_Map
  96.   alias :dark_after_image_update  :update
  97.   alias :dark_after_image_initialize  :initialize
  98.   #--------------------------------------------------------------------------
  99.   # * Initialize
  100.   #--------------------------------------------------------------------------
  101.   def initialize
  102.     @player_after_image = []
  103.     @player_after_image_trash = []
  104.     @after_image_delay = DELAY
  105.     init_after_image_events
  106.     dark_after_image_initialize()
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # * Dispose
  110.   #--------------------------------------------------------------------------
  111.   alias dispo_after_effs8383 dispose
  112.   def dispose
  113.     @player_after_image.each {|sp| sp.dispose if sp && !sp.disposed?}
  114.     @player_after_image_trash.each {|sp| sp.dispose if sp && !sp.disposed?}
  115.     dispo_after_effs8383
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # * Init after image events
  119.   #--------------------------------------------------------------------------
  120.   def init_after_image_events
  121.     @after_events ||= []
  122.     @after_events.clear
  123.     $game_map.events.values.each do |event|
  124.       next if event.list.nil?
  125.       event.list.each do |command|
  126.         next if command.code != 108
  127.         if command.parameters[0] =~ TOKEN
  128.           event.afterimage_speed = $1.to_i
  129.           event.afterimage_mode  = $2.to_i
  130.           event.afterimage_delay = DELAY
  131.           @after_events.push(event)
  132.         end
  133.       end
  134.     end
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # * Update
  138.   #--------------------------------------------------------------------------
  139.   def update
  140.     dark_after_image_update()
  141.     if @after_image_delay > 0
  142.       @after_image_delay -= 1
  143.     end
  144.     if @after_events
  145.       @after_events.each do |event|
  146.         next if event.move_speed < event.afterimage_speed
  147.         if @character_sprites
  148.           @character_sprites.each do |sprite|
  149.             if sprite.character == event
  150.               if event.afterimage_delay <= 0
  151.                 x = sprite.character.screen_x
  152.                 y = sprite.character.screen_y
  153.                 if event.afterimage_mode
  154.                   mode = event.afterimage_mode
  155.                 else
  156.                   mode = MODE
  157.                 end
  158.                 bitmap = sprite.bitmap
  159.                 viewport = sprite.viewport
  160.                 @player_after_image.push(Sprite_CharacterAfterImage.new(x,y,bitmap,viewport,sprite,mode))
  161.                 event.afterimage_delay = DELAY
  162.               end
  163.             end
  164.           end
  165.         end
  166.       end
  167.     end
  168.     if @player_after_image
  169.       @player_after_image.each do |sprite|
  170.         sprite.update
  171.         if sprite.opacity <= 0
  172.           @player_after_image_trash.push(sprite)
  173.         end
  174.       end
  175.       @player_after_image_trash.each do |sprite|
  176.         sprite.dispose
  177.         @player_after_image.delete(sprite)
  178.       end
  179.       @player_after_image_trash.clear
  180.     end
  181.     if $game_player.dash? && $game_player.moving?
  182.       if @character_sprites
  183.           @character_sprites.each do |sprite|
  184.           if sprite.character == $game_player
  185.             if @after_image_delay <= 0
  186.               x = sprite.character.screen_x
  187.               y = sprite.character.screen_y
  188.               if $game_player.afterimage_mode
  189.                 mode = $game_player.afterimage_mode
  190.               else
  191.                 mode = MODE
  192.               end
  193.               bitmap = sprite.bitmap
  194.               viewport = sprite.viewport
  195.               @player_after_image.push(Sprite_CharacterAfterImage.new(x,y,bitmap,viewport,sprite,mode))
  196.               @after_image_delay = DELAY
  197.             end
  198.           end
  199.         end
  200.       end
  201.     end
  202.   end
  203. end
Advertisement
Add Comment
Please, Sign In to add comment