#============================================================================== # ★ Advanced_Rain ver1.0 by USK #------------------------------------------------------------------------------ # ・360度あらゆる方向に任意の色、長さの雨エフェクトを実現します #============================================================================== =begin  行目のSwitchIdで設定した番号のスイッチがONのとき、行目以降で設定した番号に  対応する変数の値に応じて様々な雨エフェクトが可能になります。  雨のX、Y方向への速度はマイナスの値が設定可能です。 =end #============================================================================== # ■ RainParameter #============================================================================== module RainParameter #-------------------------------------------------------------------------- # ● 設定 #-------------------------------------------------------------------------- SwitchId = 2 #スクリプトの機能のON/OFF用スイッチID VectorX = 2 #雨のX方向への速度(ピクセル/フレーム)を格納する変数のID VectorY = 3 #雨のY方向への速度(ピクセル/フレーム)を格納する変数のID ColorR = 4 #雨の色のR成分を格納する変数のID ColorG = 5 #雨の色のG成分を格納する変数のID ColorB = 6 #雨の色のB成分を格納する変数のID ColorA = 7 #雨の最大不透明度を格納する変数のID Length = 8 #雨の長さを格納する変数のID Width = 9 #雨の太さを格納する変数のID Life = 1 #雨の最大存続フレームを格納する変数のID #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def self.switch $game_switches[SwitchId] end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def self.vector_x $game_variables[VectorX] end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def self.vector_y $game_variables[VectorY] end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def self.color Color.new($game_variables[ColorR], $game_variables[ColorG], $game_variables[ColorB], $game_variables[ColorA]) end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def self.length [$game_variables[Length], 1].max end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def self.width [$game_variables[Width], 1].max end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def self.life_cost 255.0 / [$game_variables[Life], 1].max end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def self.mag length / [Math.hypot(vector_x, vector_y), 1].max end end #============================================================================== # ■ Game_Map #============================================================================== class Game_Map #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- alias :usk_custom_refresh :refresh def refresh SceneManager.scene.refresh_rain_param usk_custom_refresh end end #============================================================================== # ■ Scene_Map #============================================================================== class Scene_Map #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def refresh_rain_param @spriteset.refresh_rain_param if @spriteset end end #============================================================================== # ■ Spriteset_Map #============================================================================== class Spriteset_Map #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def refresh_rain_param @weather.refresh_rain_bitmap end end #============================================================================== # ■ Spriteset_Weather #============================================================================== class Spriteset_Weather #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def custom? RainParameter.switch end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def refresh_rain_bitmap @rain_bitmap.dispose if @rain_bitmap create_rain_bitmap end #-------------------------------------------------------------------------- # ● 天候[雨]のビットマップを作成 #-------------------------------------------------------------------------- alias :usk_custom_create_rain_bitmap :create_rain_bitmap def create_rain_bitmap if custom? w = [(RainParameter.vector_x * RainParameter.mag).to_i.abs, 1].max h = [(RainParameter.vector_y * RainParameter.mag).to_i.abs, 1].max ww = RainParameter.width @rain_bitmap = ( case w <=> h when 1 ; Bitmap.new(w, h + ww) when 0 ; Bitmap.new(w, h) when -1 ; Bitmap.new(w + ww, h) end ) if w > h d = w / h h.times do |i| @rain_bitmap.fill_rect(i * d, i, d, ww, RainParameter.color) end elsif w < h d = h / w w.times do |i| @rain_bitmap.fill_rect(i, i * d, ww, d, RainParameter.color) end elsif ww == RainParameter.length @rain_bitmap.fill_rect(@rain_bitmap.rect, RainParameter.color) else w.times do |i| @rain_bitmap.fill_rect(i, i, ww, ww, RainParameter.color) end end else usk_custom_create_rain_bitmap end end #-------------------------------------------------------------------------- # ● スプライトの更新[雨] #-------------------------------------------------------------------------- alias :usk_custom_update_sprite_rain :update_sprite_rain def update_sprite_rain(sprite) if custom? sprite.bitmap = @rain_bitmap sprite.x += RainParameter.vector_x sprite.y += RainParameter.vector_y sprite.opacity -= RainParameter.life_cost else usk_custom_update_sprite_rain(sprite) end end end