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

401 lines
No EOL
13 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_effect(type)
--------------------------------------------------------------------
光拡散エフェクトを開始します。
引数の値によってエフェクトの種類が決定します
1 => 中心から発散
2 => 中心へ収束
3 => 中央上部から下へ
4 => 上部全体から下へ
5 => 右上から左下へ
21 => 不規則な螺旋を描いて上昇
22 => ゆらゆらと上昇
23 => 規則正しい螺旋を描いて上昇
31 => 雪
====================================================================
end_effect
--------------------------------------------------------------------
エフェクトの終了。画面上のエフェクトをすべて一気に開放します。
====================================================================
end_effect_fade
--------------------------------------------------------------------
エフェクトの終了。画面上のエフェクトを少しづつ開放します。
====================================================================
ver1.10
Last Update : 2012/03/24
03/24 : 雪エフェクトの追加
----------------------2012--------------------------
12/17 : RGSS2からの移植
----------------------2011--------------------------
ろかん   http://kaisou-ryouiki.sakura.ne.jp/
=end
$rsi ||= {}
$rsi["光拡散エフェクト"] = true
module Reffect
@@span = false
def initialize(viewport)
@sp = [0, 0] # 初期座標
@ma = [0.0, 0.0] # 移動角度(ラジアン)
@rd = 0.0 # 初期座標からの半径
super(viewport)
self.blend_type = 1
@@span ^= true
end
def width
Graphics.width
end
def height
Graphics.height
end
def zoom=(value)
self.zoom_x = self.zoom_y = value
end
def setGraphic(filename)
self.bitmap = Cache.system(filename)
self.ox = self.bitmap.width / 2
self.oy = self.bitmap.height / 2
end
def setStartPosition(typeX, typeY)
case typeX
when 0 # ランダム
@sp[0] = rand(width + 100) - 50
when 1 # 画面外(左)
@sp[0] = -30
when 2 # 中央
@sp[0] = width / 2
when 3 # 画面外(右)
@sp[0] = width + 30
end
case typeY
when 0 # ランダム
@sp[1] = rand(height + 50) - 25
when 1 # 画面外(上)
@sp[1] = -30
when 2 # 中央
@sp[1] = height / 2
when 3 # 画面外(下)
@sp[1] = height + 30
end
self.x = @sp[0]
self.y = @sp[1]
end
def setMoveAngle(ax, ay = ax)
@ma[0] = Math.cos(ax * 0.01)
@ma[1] = Math.sin(ay * 0.01)
end
def getX
@sp[0] + @rd * @ma[0]
end
def getY
@sp[1] + @rd * @ma[1]
end
def getZoom
(@rd * @ma[1] / width / 1.5 + 0.8) * (self.opacity / 200.0)
end
end
class Game_Temp
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :r_effect_sprites # 特殊効果スプライト群
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias r_effect_initialize initialize
def initialize
r_effect_initialize
@r_effect_sprites = []
end
#--------------------------------------------------------------------------
# ● 特殊効果スプライトの解放
#--------------------------------------------------------------------------
def dispose_r_effect
@r_effect_sprites.each{|sprite| sprite.dispose}
@r_effect_sprites = []
end
end
class Game_System
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :r_effect_type # 特殊効果の種類
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias r_effect_initialize initialize
def initialize
r_effect_initialize
@r_effect_type = 0
end
#--------------------------------------------------------------------------
# ● 特殊効果の開始
#--------------------------------------------------------------------------
def start_effect(type)
$game_temp.dispose_r_effect if @r_effect_type != type
@r_effect_type = type
end
#--------------------------------------------------------------------------
# ● 特殊効果の終了(瞬時)
#--------------------------------------------------------------------------
def end_effect
$game_temp.dispose_r_effect
@r_effect_type = 0
end
#--------------------------------------------------------------------------
# ● 特殊効果の終了(フェード)
#--------------------------------------------------------------------------
def end_effect_fade
@r_effect_type = 0
end
end
class Game_Interpreter
#--------------------------------------------------------------------------
# ● 特殊効果の開始
#--------------------------------------------------------------------------
def start_effect(type)
$game_system.start_effect(type)
end
#--------------------------------------------------------------------------
# ● 特殊効果の終了(瞬時)
#--------------------------------------------------------------------------
def end_effect
$game_system.end_effect
end
#--------------------------------------------------------------------------
# ● 特殊効果の終了(フェード)
#--------------------------------------------------------------------------
def end_effect_fade
$game_system.end_effect_fade
end
end
class Sprite_Reffect_Diffusion < Sprite
#--------------------------------------------------------------------------
# ● インクルード Reffect
#--------------------------------------------------------------------------
include Reffect
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(viewport)
super(viewport)
case $game_system.r_effect_type
when 1
@rd = rand(width / 3).to_f
@moveSpeed = rand(50).next * 0.01 + 0.5
@existCount = rand(100) + 80
setStartPosition(2, 2)
setMoveAngle(rand(2 * Math::PI * 100))
setGraphic("RE_001")
when 2
@rd = rand(width / 3).to_f + 30.0
@moveSpeed = rand(50).next * -0.01 - 0.5
@existCount = rand(100) + 90
setStartPosition(2, 2)
setMoveAngle(rand(2 * Math::PI * 100))
setGraphic("RE_001")
when 3
@rd = rand(width / 2).to_f
@moveSpeed = rand(50).next * 0.01 + 0.5
@existCount = rand(100) + 80
setStartPosition(2, 1)
setMoveAngle(rand(2 * Math::PI * 100), rand(Math::PI * 100))
setGraphic("RE_001")
when 4
@rd = rand(width / 2).to_f
@moveSpeed = rand(50).next * 0.01 + 0.5
@existCount = rand(100) + 80
setStartPosition(0, 1)
setMoveAngle(rand(2 * Math::PI * 100), rand(Math::PI * 100))
setGraphic("RE_001")
when 5
@rd = rand(width / 2).to_f
@moveSpeed = rand(50).next * 0.01 + 0.5
@existCount = rand(100) + 120
setStartPosition(3, 1)
setMoveAngle(rand(Math::PI * 100) + 90, rand(Math::PI * 100))
setGraphic("RE_001")
end
@maxOpacity = rand(160) + 40
self.opacity = 1
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
if self.opacity.zero?
dispose
$game_temp.r_effect_sprites.delete(self)
else
@existCount -= 1
@rd = [@rd + @moveSpeed, 0.0].max
self.x = getX
self.y = getY
self.zoom = getZoom
self.opacity = [self.opacity + (@existCount > 0 ? 1 : -1), @maxOpacity].min
end
end
end
class Sprite_Reffect_Spiral < Sprite
#--------------------------------------------------------------------------
# ● インクルード Reffect
#--------------------------------------------------------------------------
include Reffect
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(viewport)
super(viewport)
case $game_system.r_effect_type
when 21
@rd = rand(200).next.to_f
@moveSpeed = 5.0 - @rd / 50.0
@nextAngle = rand(360).to_f
@collapseSpeed = 1
setStartPosition(2, 3)
setGraphic("RE_002")
when 22
@rd = rand(40).next.to_f
@moveSpeed = rand(100).next * 0.01 + 1.0
@nextAngle = rand(360).to_f
@collapseSpeed = rand(3).zero? ? 2 : 1
setStartPosition(0, 3)
setGraphic("RE_002")
when 23
@rd = 180
@moveSpeed = 1.7
@nextAngle = @@span ? 0.0 : 180.0
@collapseSpeed = 0
setStartPosition(2, 3)
setGraphic("RE_002")
end
@floteY = self.y.to_f
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
if self.y <= -self.oy || self.opacity.zero?
dispose
$game_temp.r_effect_sprites.delete(self)
else
@nextAngle += [@moveSpeed, 2].min
@nextAngle = 0.0 if @nextAngle >= 360
setMoveAngle(@nextAngle * 1.74533)
self.x = getX
self.y = (@floteY -= @moveSpeed).round
self.zoom = getZoom
self.opacity -= @collapseSpeed
end
end
end
class Sprite_Reffect_Snow < Sprite
#--------------------------------------------------------------------------
# ● インクルード Reffect
#--------------------------------------------------------------------------
include Reffect
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(viewport)
super(viewport)
setStartPosition(0, 1)
setGraphic("RE_003")
case rand(100)
when 0..49
self.zoom = (3 + rand(2)) / 10.0
when 50..89
self.zoom = (6 + rand(2)) / 10.0
when 90..99
self.zoom = (9 + rand(2)) / 10.0
end
self.z = self.zoom_x * 10
@moveSpeed = self.zoom_x * 1.6
@floteY = self.y.to_f
@rd = rand(10).next.to_f
@nextAngle = rand(360).to_f
@existCount = 1500
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
if self.y > height || self.opacity.zero?
dispose
$game_temp.r_effect_sprites.delete(self)
else
@existCount -= 3
@nextAngle += [@moveSpeed, 2].min
@nextAngle = 0.0 if @nextAngle >= 360
setMoveAngle(@nextAngle * 1.74533)
self.x = getX
self.y = (@floteY += @moveSpeed).round
self.opacity = @existCount
end
end
end
class Spriteset_Map
@@re_add_count = 0
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
alias r_effect_dispose dispose
def dispose
r_effect_dispose
$game_temp.dispose_r_effect
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias r_effect_update update
def update
r_effect_update
update_r_effect
end
#--------------------------------------------------------------------------
# ● 特殊エフェクトの更新
#--------------------------------------------------------------------------
def update_r_effect
unless $game_system.r_effect_type.zero?
if @@re_add_count.zero?
case $game_system.r_effect_type
when 1..10
sprite = Sprite_Reffect_Diffusion.new(@viewport3)
@@re_add_count = 10
when 21..30
sprite = Sprite_Reffect_Spiral.new(@viewport3)
@@re_add_count = 10
when 31..40
sprite = Sprite_Reffect_Snow.new(@viewport3)
@@re_add_count = 20
end
$game_temp.r_effect_sprites << sprite
end
@@re_add_count -= 1
end
$game_temp.r_effect_sprites.each{|sprite| sprite.update}
end
end