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

265 lines
No EOL
9.5 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
★ スクリーンノイズ ★
ゲーム画面に古い映像フィルムのようなノイズ効果を与えます。
天候と似た使い方を想定しています。
イベントコマンドのスクリプトから起動させてください。
● コマンド一覧 ●==================================================
start_noise
--------------------------------------------------------------------
ノイズエフェクトの開始。
====================================================================
end_noise
--------------------------------------------------------------------
ノイズエフェクトの終了。
====================================================================
ver1.00
Last Update : 2011/12/17
12/17 : RGSS2からの移植
ろかん   http://kaisou-ryouiki.sakura.ne.jp/
=end
$rsi ||= {}
$rsi["スクリーンノイズ"] = true
class Game_Temp
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :r_noise_effect_spriteset # ノイズスプライトセットへの参照
#--------------------------------------------------------------------------
# ● ノイズの開始
#--------------------------------------------------------------------------
def start_noise
@r_noise_effect_spriteset.start_noise
end
#--------------------------------------------------------------------------
# ● ノイズの終了
#--------------------------------------------------------------------------
def end_noise
@r_noise_effect_spriteset.end_noise
end
end
class Game_System
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :r_noise_effect # ノイズエフェクト表示中判定
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias r_noise_effect_initialize initialize
def initialize
r_noise_effect_initialize
@r_noise_effect = false
end
#--------------------------------------------------------------------------
# ● ノイズの開始
#--------------------------------------------------------------------------
def start_noise
$game_temp.start_noise
@r_noise_effect = true
end
#--------------------------------------------------------------------------
# ● ノイズの終了
#--------------------------------------------------------------------------
def end_noise
$game_temp.end_noise
@r_noise_effect = false
end
end
class Game_Interpreter
#--------------------------------------------------------------------------
# ● ノイズの開始
#--------------------------------------------------------------------------
def start_noise
$game_system.start_noise
end
#--------------------------------------------------------------------------
# ● ノイズの終了
#--------------------------------------------------------------------------
def end_noise
$game_system.end_noise
end
end
class NoiseBase_Sprite < Sprite
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(viewport)
super(viewport)
self.bitmap = Cache.system("noise_base")
self.visible = false
self.blend_type = 1
@blink = true
update
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
self.x = -(rand(self.bitmap.width - 640))
self.opacity = @blink ? 230 : 255
@blink ^= true
end
end
class NoiseLine_Sprite < Sprite
VX = [-2, -1, -1, 0, 1, 1, 2]
OS = [-50, -20, -10, 0, 10, 20, 30, 50]
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(viewport, start_x)
super(viewport)
self.bitmap = Cache.system("noise_line")
self.visible = false
self.x = start_x
@vector_x = VX[rand(VX.size)]
@opacity_speed = OS[rand(OS.size)]
update
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
self.x = [[self.x + @vector_x, 0].max, 640].min
self.y = -(rand(self.bitmap.height - 480))
self.opacity += @opacity_speed
@vector_x = VX[rand(VX.size)] if rand(6).zero?
@opacity_speed = OS[rand(OS.size)] if rand(6).zero?
end
end
class NoiseDot_Sprite < Sprite
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(viewport)
super(viewport)
self.bitmap = Cache.system("noise_dot")
self.visible = false
update
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
if rand(50).zero?
self.zoom_x = rand(100).next / 100.0
self.zoom_y = rand(100).next / 100.0
self.angle = rand(360)
self.x = rand(640)
self.y = rand(480)
self.opacity = 255
else
self.opacity = 0
end
end
end
class Spriteset_Noise
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
create_noise
start_noise if $game_system.r_noise_effect
end
#--------------------------------------------------------------------------
# ● ノイズの生成
#--------------------------------------------------------------------------
def create_noise
@viewport_base = Viewport.new(0, 0, 640, 480)
@viewport_line = Viewport.new(0, 0, 640, 480)
@viewport_dot = Viewport.new(0, 0, 640, 480)
@viewport_base.z = 90
@viewport_line.z = @viewport_base.z.next
@viewport_dot.z = @viewport_line.z.next
@base_sprite = NoiseBase_Sprite.new(@viewport_base)
@line_sprites = []
@line_sprites << NoiseLine_Sprite.new(@viewport_line, 50)
@line_sprites << NoiseLine_Sprite.new(@viewport_line, 350)
@line_sprites << NoiseLine_Sprite.new(@viewport_line, 400)
@line_sprites << NoiseLine_Sprite.new(@viewport_line, 500)
@dot_sprite = NoiseDot_Sprite.new(@viewport_dot)
end
#--------------------------------------------------------------------------
# ● ノイズの解放
#--------------------------------------------------------------------------
def dispose_noise
@base_sprite.dispose
@line_sprites.each{|sprite| sprite.dispose}
@dot_sprite.dispose
end
#--------------------------------------------------------------------------
# ● ノイズの開始
#--------------------------------------------------------------------------
def start_noise
@base_sprite.visible = true
@line_sprites.each{|sprite| sprite.visible = true}
@dot_sprite.visible = true
end
#--------------------------------------------------------------------------
# ● ノイズの終了
#--------------------------------------------------------------------------
def end_noise
@base_sprite.visible = false
@line_sprites.each{|sprite| sprite.visible = false}
@dot_sprite.visible = false
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
if $game_system.r_noise_effect && (Graphics.frame_count % 3).zero?
@base_sprite.update
@line_sprites.each{|sprite| sprite.update}
@dot_sprite.update
end
end
end
class Spriteset_Map
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias r_noise_effect_initialize initialize
def initialize
@r_noise_effect_set = Spriteset_Noise.new
$game_temp.r_noise_effect_spriteset = @r_noise_effect_set
r_noise_effect_initialize
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
alias r_noise_effect_dispose dispose
def dispose
r_noise_effect_dispose
@r_noise_effect_set.dispose_noise
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias r_noise_effect_update update
def update
r_noise_effect_update
update_noise_effect
end
#--------------------------------------------------------------------------
# ● スクリーンノイズの更新
#--------------------------------------------------------------------------
def update_noise_effect
@r_noise_effect_set.update
end
end