king-exit/Scripts/_.71.rb
2024-08-31 14:17:23 -05:00

197 lines
No EOL
7.1 KiB
Ruby
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

=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