BuddySievers

FrameBuffer Transition

May 9th, 2026
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.44 KB | None | 0 0
  1. module FrameBuffer
  2.  
  3.   def self.start(frames = 1, viewport_z = 10000)
  4.     dispose unless disposed?
  5.     this_frame =  Graphics.snap_to_bitmap
  6.     @buffer = []
  7.     @viewport = Viewport.new
  8.     @viewport.z = viewport_z
  9.    
  10.     frames.times do
  11.       sprite = Sprite.new(@viewport)
  12.       sprite.bitmap = this_frame.clone
  13.       sprite.x = Graphics.width / 2
  14.       sprite.y = Graphics.height / 2
  15.       sprite.ox = Graphics.width / 2
  16.       sprite.oy = Graphics.height / 2
  17.       @buffer.push(sprite)
  18.     end
  19.    
  20.     this_frame.dispose
  21.   end
  22.  
  23.   def self.dispose
  24.     return if disposed?
  25.     @buffer.each {|sprite| sprite.dispose}
  26.     @viewport.dispose if @viewport
  27.     @buffer = nil
  28.   end
  29.  
  30.   def self.disposed?
  31.     !@buffer
  32.   end
  33.  
  34.   def self.cycle
  35.     return if disposed?
  36.     @buffer[-1].bitmap.dispose
  37.     @buffer.each_index do |i|
  38.       next if i == 0
  39.       @buffer[i].bitmap = @buffer[i - 1].bitmap
  40.     end
  41.    
  42.     @buffer[0].bitmap = Graphics.snap_to_bitmap
  43.   end
  44.  
  45.   def self.refresh
  46.     this_frame = Graphics.snap_to_bitmap
  47.     @buffer.each do |sprite|
  48.       sprite.bitmap.dispose
  49.       sprite.bitmap = this_frame.clone
  50.     end
  51.    
  52.     this_frame.dispose
  53.   end
  54.  
  55.   def self.[](num)
  56.     return nil if disposed?
  57.     return @buffer[num]
  58.   end
  59. end
  60.  
  61. class Scene_Map < Scene_Base
  62.  
  63.   def pre_battle_scene
  64.     Graphics.update
  65.     Graphics.freeze
  66.     FrameBuffer.start(3)
  67.     FrameBuffer[0].z = 0
  68.     FrameBuffer[0].zoom_x = 1
  69.     FrameBuffer[0].zoom_y = 1
  70.     FrameBuffer[0].opacity = 235
  71.     FrameBuffer[0].angle = 0
  72.     FrameBuffer[0].blend_type = 0
  73.     FrameBuffer[1].z = 1
  74.     FrameBuffer[1].zoom_x = 1.01
  75.     FrameBuffer[1].zoom_y = 1.01
  76.     FrameBuffer[1].opacity = 128
  77.     FrameBuffer[1].angle = 359
  78.     FrameBuffer[1].blend_type = 0
  79.     FrameBuffer[2].z = 2
  80.     FrameBuffer[2].zoom_x = 0.8
  81.     FrameBuffer[2].zoom_y = 0.9
  82.     FrameBuffer[2].opacity = 12
  83.     FrameBuffer[2].angle = 12
  84.     FrameBuffer[2].blend_type = 1
  85.     @spriteset.dispose_characters
  86.     BattleManager.save_bgm_and_bgs
  87.     Sound.play_battle_start
  88.   end
  89.  
  90.   def perform_battle_transition
  91.     Graphics.transition(1)
  92.     (0..60).each do |i|
  93.       Graphics.brightness = 255
  94.       FrameBuffer.refresh
  95.       Graphics.frame_reset
  96.       Graphics.brightness = 255 - (255 * ((i - 40) / 20.0)) if i > 40
  97.       Graphics.update
  98.     end
  99.    
  100.     FrameBuffer.dispose
  101.     Graphics.freeze
  102.     BattleManager.play_battle_bgm
  103.   end
  104. end
  105.  
Advertisement
Add Comment
Please, Sign In to add comment