#◆◇◆◇◆ マップ残像スクリプト ver 1・02 ◇◆◇◆◇
# サポート掲示板 [url]http://www2.ezbbs.net/21/minto-aaa/[/url]
# by みんと
=begin
■ 更新履歴
○ ver 1.02(2010/12/28)
アニメ表示で落ちるミスを修正
○ ver 1.01(2010/12/20)
スクロールに対応していなかったミスを修正
○ ver 1.00(2009/05/24)
公開
■ 説明
マップ上のキャラに残像を表示させます。
イベントの演出に一役買ってくれるかもしれません。
残像を表示するには、
フラッシュに 残像表示 という名前のSEが設定されているアニメを、
残像をつけたいキャラクターに表示してください。
以降は残像が維持されます。
1フレームのアニメに、フラッシュ[残像表示]だけで構いません。
残像を解放するには、
フラッシュに 残像解放 という名前のSE設定されているアニメを、
残像を解放したいキャラクターに表示してください
残像の色はフラッシュの色がそのまま適用されます。
発生する残像の数はフラッシュの時間を使用します。
ただし、あまり多くすると重くなるので、
6程度を目安にしてください。
=end
#==============================================================================
# ☆ MINTO
#------------------------------------------------------------------------------
# 様々なフラグを扱うメインモジュールです。
#==============================================================================
module MINTO
# 残像スクリプトを有効化 ( true で有効 / false で無効 )
RGSS["残像スクリプト"] = true
end
# 残像スクリプトが有効な場合に以降の処理を実行する
if MINTO::RGSS["残像スクリプト"] == true then
#==============================================================================
# ■ Sprite
#------------------------------------------------------------------------------
# スプライト表示を扱う組み込みクラスです。
#==============================================================================
class Sprite
#--------------------------------------------------------------------------
# ● 残像用の複製の作成
#--------------------------------------------------------------------------
def blink
# 各データをコピー
sprite = Sprite.new(self.viewport)
sprite.bitmap = self.bitmap.dup if self.bitmap
sprite.x = self.x
sprite.y = self.y
sprite.z = self.z - 1
sprite.visible = false
sprite.ox = self.ox
sprite.oy = self.oy
sprite.angle = self.angle
sprite.mirror = self.mirror
sprite.opacity = self.opacity * 80 / 255
sprite.blend_type = 0
sprite.color = self.color.dup
sprite.src_rect = self.src_rect.dup
sprite.zoom_x = self.zoom_x
sprite.zoom_y = self.zoom_y
return sprite
end
#--------------------------------------------------------------------------
# ● データの取得
#--------------------------------------------------------------------------
def data_copy(data)
return if data.disposed? or self.disposed?
# 各データをコピー
self.x = data.x
self.y = data.y
self.z = data.z - 1
self.visible = data.visible
self.ox = data.ox
self.oy = data.oy
self.angle = data.angle
self.mirror = data.mirror
self.src_rect = data.src_rect
self.zoom_x = data.zoom_x
self.zoom_y = data.zoom_y
self.opacity = data.opacity * 190 / 255
end
end
#==============================================================================
# ■ Blink_Sprite
#------------------------------------------------------------------------------
# 残像スプライト表示を扱う組み込みクラスです。
#==============================================================================
class Blink_Sprite
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# sprite : オリジナルの画像
#--------------------------------------------------------------------------
def initialize(sprite, size)
@dx = $game_map.display_x / 4
@dy = $game_map.display_y / 4
# 残像のサイズを取得
@size = size
# 残像用の配列を作成
@blink = []
# ループ処理
(0...@size).each do |i|
# 残像スプライトを作成
@blink[i] = sprite.blink
end
end
#--------------------------------------------------------------------------
# ● 可視状態の変更
# flag : 新しい可視状態
#--------------------------------------------------------------------------
def visible=(flag)
# ループ処理
for sprite in @blink do
# 可視状態を変更
sprite.visible = flag
end
end
#--------------------------------------------------------------------------
# ● 残像カラーの変更
# color : 新しいカラー
#--------------------------------------------------------------------------
def color_set(color)
# ループ処理
for sprite in @blink do
# 残像カラーを変更
#sprite.color = color.dup
end
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
# ループ処理
for sprite in @blink do
# 残像スプライトが存在する場合
unless sprite.nil? then
# 残像スプライトが未解放の場合
unless sprite.disposed? then
# 残像スプライトを解放
sprite.dispose
end
end
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
# sprite : オリジナルの画像
#--------------------------------------------------------------------------
def update(sprite)
# 残像が可視状態でない場合
if @blink[0].visible == false then
# メソッドを返す
return
end
# ループ処理
(0...@size).each do |i|
s = @blink[(@size - 1) - i]
# 前の残像データを渡す
s.data_copy(@blink[(@size - 1) - (i + 1)])
s.ox = s.ox + $game_map.display_x / 4 - @dx
s.oy = s.oy + $game_map.display_y / 4 - @dy
end
@dx = $game_map.display_x / 4
@dy = $game_map.display_y / 4
# 残像データを更新
@blink[0].data_copy(sprite)
end
end
#==============================================================================
# ☆ MINTO_Sprite_Battler_02
#------------------------------------------------------------------------------
# Sprite_Battlerクラスの強化システムモジュールです。
#==============================================================================
module MINTO_Sprite_Battler_02
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
# 残像の解放
dispose_blink
# 継承先の処理に移行
super
end
#--------------------------------------------------------------------------
# ● 残像の解放
#--------------------------------------------------------------------------
def dispose_blink
# 残像データが有効な場合
unless @blink_anime.nil? then
# 残像を解放
@blink_anime.dispose
@blink_anime = nil
end
end
#--------------------------------------------------------------------------
# ● SEとフラッシュのタイミング処理
# timing : タイミングデータ (RPG::Animation::Timing)
# hit : ヒットフラグ
#--------------------------------------------------------------------------
def animation_process_timing(timing, hit)
# SE "残像表示" が設定されている場合
if timing.se.name == "残像表示" then
# 残像の解放
dispose_blink
# 残像用のデータを定義
@blink_anime = Blink_Sprite.new(self, timing.flash_duration)
# 残像を可視状態にする
@blink_anime.visible = true
# 残像のカラーを定義
@blink_anime.color_set(timing.flash_color)
# メソッドを返す
return
# SE "残像解放" が設定されている場合
elsif timing.se.name == "残像解放" then
# 残像の解放
dispose_blink
# メソッドを返す
return
end
# 継承先の処理に移行
super(timing, hit)
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# 残像データが有効な場合
unless @blink_anime.nil? then
# 残像を更新
@blink_anime.update(self)
end
# 継承先の処理に移行
super
end
end
#==============================================================================
# ■ Sprite_Character
#------------------------------------------------------------------------------
# キャラクター表示用のスプライトです。Game_Character クラスのインスタンスを
# 監視し、スプライトの状態を自動的に変化させます。
#==============================================================================
class Sprite_Character < RPG::Sprite
#--------------------------------------------------------------------------
# ● システムインクルード
#--------------------------------------------------------------------------
include MINTO_Sprite_Battler_02 # みんとスプライトバトラー
end
end