=begin RGSS3    ★ 古の光 ★ 天候と同じように利用できる演出素材です。 ● 準備 ●========================================================== 「Graphics\System\」に下記の2ファイルを入れます   ancient_00.png   ancient_01.png ==================================================================== ● エフェクトの開始 ●============================================== イベントコマンドで次のスクリプトを実行します -------------------------------------------------------------------- ancient_light ==================================================================== ● エフェクトの終了 ●============================================== イベントコマンドの「天候の設定」で「なし」を実行します ==================================================================== ver1.00 Last Update : 2015/03/19 3/19 : 新規 ろかん   http://kaisou-ryouiki.sakura.ne.jp/ =end $rsi ||= {} $rsi["古の光"] = true class Game_Interpreter #-------------------------------------------------------------------------- # ● 天候:舞い上がる光の開始 #-------------------------------------------------------------------------- def ancient_light screen.change_weather(:ancient_light, 3, 0) end end class Spriteset_Weather #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :viewport attr_reader :sprites #-------------------------------------------------------------------------- # ● 天候の種類を設定 #-------------------------------------------------------------------------- def type=(type) if @type != type @sprites.each{|sprite| sprite.dispose} @sprites = [] if type == :ancient_light 5.times{@sprites << Ancient_Light.new(self)} end end @type = type end #-------------------------------------------------------------------------- # ● 天候の強さを設定 #-------------------------------------------------------------------------- alias ancient_light_power= power= def power=(power) if @type != :ancient_light self.ancient_light_power = power else @power = power end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias ancient_light_update update def update if @type == :ancient_light update_screen @sprites << Ancient_Light.new(self) if (Graphics.frame_count % 100).zero? @sprites.each{|sprite| sprite.update} else ancient_light_update end end end class Ancient_Light #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(owner) @owner = owner @exist_counter = 1200 @origin_ox = @owner.ox @origin_oy = @owner.oy @x = rand(Graphics.width + 192) - 96 @y = rand(Graphics.height + 192) - 96 @angle_speed = rand(7) / 10.0 * (rand(2).zero? ? 1 : -1) @vector_x = rand(2).zero? ? 1 : -1 @vector_y = rand(2).zero? ? 1 : -1 create_sprite end #-------------------------------------------------------------------------- # ● スプライトの生成 #-------------------------------------------------------------------------- def create_sprite @sprites = [Sprite.new(@owner.viewport), Sprite.new(@owner.viewport)] @sprites[0].bitmap = Cache.system("ancient_00") @sprites[1].bitmap = Cache.system("ancient_01") @sprites[0].blend_type = @sprites[1].blend_type = 1 @sprites[0].angle = @sprites[1].angle = rand(360) @sprites[0].ox = @sprites[1].ox = @sprites[0].bitmap.width / 2 @sprites[0].oy = @sprites[1].oy = @sprites[0].bitmap.height / 2 @sprites[0].x = @sprites[1].x = @x + (@origin_ox - @owner.ox) @sprites[0].y = @sprites[1].y = @y + (@origin_oy - @owner.oy) @sprites[0].z = rand(2) @sprites[0].zoom_x = rand(11).next / 10.0 - 0.3 @sprites[0].zoom_y = rand(11).next / 10.0 - 0.3 @sprites[1].zoom_x = [0.2, @sprites[0].zoom_x].max @sprites[1].zoom_y = [0.2, @sprites[0].zoom_y].max @sprites[0].opacity = @sprites[1].opacity = 0 end #-------------------------------------------------------------------------- # ● X 軸方向の速度を取得 #-------------------------------------------------------------------------- def x_speed (@sprites[0].zoom_x + @sprites[0].zoom_y) / 3.0 * @vector_x end #-------------------------------------------------------------------------- # ● Y 軸方向の速度を取得 #-------------------------------------------------------------------------- def y_speed x_speed / 2.0 * @vector_y end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose @sprites[0].dispose @sprites[1].dispose end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update case @exist_counter when 1141..1200 @sprites[0].zoom_x += 0.005 @sprites[0].zoom_y += 0.005 @sprites[1].zoom_x += 0.005 @sprites[1].zoom_y += 0.005 @sprites[0].opacity = @sprites[1].opacity += 5 else if (Graphics.frame_count % 2).zero? @sprites[0].opacity = @sprites[1].opacity = @exist_counter @sprites[1].opacity -= rand(200) @sprites[0].angle = @sprites[1].angle += @angle_speed end end @x += x_speed @y += y_speed @sprites[0].x = @sprites[1].x = @x.to_i + (@origin_ox - @owner.ox) @sprites[0].y = @sprites[1].y = @y.to_i + (@origin_oy - @owner.oy) @exist_counter -= 1 if @exist_counter.zero? dispose @owner.sprites.delete(self) else out_screen_process end end #-------------------------------------------------------------------------- # ● 画面外に出た場合の処理(ループさせて画面内に戻す) #-------------------------------------------------------------------------- def out_screen_process if @sprites[0].x < -96 while @sprites[0].x < -96 @sprites[0].x = @sprites[1].x += Graphics.width + 192 end elsif @sprites[0].x > Graphics.width + 96 while @sprites[0].x > Graphics.width + 96 @sprites[0].x = @sprites[1].x -= Graphics.width + 192 end end if @sprites[0].y < -96 while @sprites[0].y < -96 @sprites[0].y = @sprites[1].y += Graphics.height + 192 end elsif @sprites[0].y > Graphics.height + 96 while @sprites[0].y > Graphics.height + 96 @sprites[0].y = @sprites[1].y -= Graphics.height + 192 end end end end