#◆◇◆◇◆ 遮光スクリプトVX ver 1.01 ◇◆◇◆◇ # 全マスタースクリプト共通スクリプト # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin ■ 更新履歴 ○ ver 1.01(2010/12/13) スイッチによる演出無効化機能を追加 ○ ver 1.00(2010/12/12) 公開 ■ 説明 現在キャラクターが立っている、 または「一歩左」のタイルが特定のタイルだった場合、 キャラクターを微暗転させて表示します。 プレイヤーの場合は自動で、 イベントの場合は名前に 影 もしくは 遮光 の文字が含まれていれば、 同じように足跡を描写します。 木陰や裏路地などの演出に向いています。 詳しい設定方法はスクリーンショットを参照してください。 遮光タイルには2種類あります。 ● 遮光タイル1 キャラクターがタイルと「同じ位置に立っている」場合に暗転させるタイルです。 木の裏などに向いています。 ● 遮光タイル2 キャラクターがタイルの「一歩右に立っている」場合に暗転させるタイルです。 外壁などに向いています。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # 遮光スクリプトを有効化 ( true で有効 / false で無効 ) RGSS["遮光スクリプト"] = true end # 遮光スクリプトが有効な場合に以降の処理を実行する if MINTO::RGSS["遮光スクリプト"] == true then #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズを行うモジュールです。 #============================================================================== module MINTO # 遮光タイル1用のダミーマップのID # (このダミーマップに配置したタイル全てが遮光タイル1とみなされます) Blind_Map_ID_1 = 9 # 遮光タイル2用のダミーマップのID # (このダミーマップに配置したタイル全てが遮光タイル2とみなされます) Blind_Map_ID_2 = 10 # 機能を一時的に無効化するスイッチ # このスイッチが オン の時、機能を無効化します Not_Blind_Switch = 4 end #============================================================================== # ☆ MINTO_Blind #------------------------------------------------------------------------------ # 遮光のメイン処理を行うモジュールです。 #============================================================================== module MINTO_Blind #-------------------------------------------------------------------------- # ● 遮光セット #-------------------------------------------------------------------------- def self.blind_set # データが既に存在する場合 unless @blind_data.nil? # メソッドを返す return end # 遮光用のダミーマップをロード map1 = load_data(sprintf("Data/Map%03d.rvdata", MINTO::Blind_Map_ID_1)) # 遮光用のダミーマップをロード map2 = load_data(sprintf("Data/Map%03d.rvdata", MINTO::Blind_Map_ID_2)) # 遮光データを初期化 @blind_data = {} blind_data = [] @blind_left_data = {} blind_left_data = [] # ループ処理(全タイル) for x in (0..map1.width) do for y in (0..map1.height) do # 遮光データに保存 blind_data.push(map1.data[x, y, 0]) blind_data.push(map1.data[x, y, 1]) blind_data.push(map1.data[x, y, 2]) end end # 重複する要素を除外 blind_data.uniq! # 無効なデータを除外 blind_data -= [0] blind_data -= [nil] # ループ処理 for id in blind_data do @blind_data[id] = true end # ループ処理(全タイル) for x in (0..map2.width) do for y in (0..map2.height) do # 遮光データに保存 blind_left_data.push(map2.data[x, y, 0]) blind_left_data.push(map2.data[x, y, 1]) blind_left_data.push(map2.data[x, y, 2]) end end # 重複する要素を除外 blind_left_data.uniq! # 無効なデータを除外 blind_left_data -= [0] blind_left_data -= [nil] # ループ処理 for id in blind_left_data do @blind_left_data[id] = true end end #-------------------------------------------------------------------------- # ● 遮光データの習得 #-------------------------------------------------------------------------- def self.left_data return @blind_left_data end #-------------------------------------------------------------------------- # ● 遮光データの習得 #-------------------------------------------------------------------------- def self.data return @blind_data end end #============================================================================== # ■ Close_Light_Module #------------------------------------------------------------------------------ #  遮光演出用のモジュールです。 # Game_Character クラスのインスタンスを監視し、 # スプライトの状態を自動的に変化させます。 #============================================================================== module Close_Light_Module #-------------------------------------------------------------------------- # ● オブジェクト初期化 # viewport : ビューポート #-------------------------------------------------------------------------- def initialize(viewport) # 継承先のスーパークラスの処理に移行 super(viewport) # 暗転用の各データを設定 @tone_rate = 0 @tone_power = 0 @tone_type = 0 @tone_max = 0 end #-------------------------------------------------------------------------- # ● 足跡有効判定 # x : X 座標 # y : Y 座標 #-------------------------------------------------------------------------- def blind_include?(x, y) if MINTO_Blind.data[$game_map.map.data[x, y, 0]] or MINTO_Blind.data[$game_map.map.data[x, y, 1]] or MINTO_Blind.data[$game_map.map.data[x, y, 2]] return true end return false end #-------------------------------------------------------------------------- # ● 足跡有効判定 # x : X 座標 # y : Y 座標 #-------------------------------------------------------------------------- def blind_left_include?(x, y) if MINTO_Blind.left_data[$game_map.map.data[x, y, 0]] or MINTO_Blind.left_data[$game_map.map.data[x, y, 1]] or MINTO_Blind.left_data[$game_map.map.data[x, y, 2]] return true end return false end #-------------------------------------------------------------------------- # ● 暗転モード処理 # type : 実行処理(0 : 暗転, 1 : 暗転解除) # power : 暗転速度 # max : 暗転最大値 #-------------------------------------------------------------------------- def blackout(type = 0, power = 10, max = 150) # 暗転フラグを設定 self.black = (type == 0) # 暗転用の各データを設定 @tone_power = power @tone_type = type @tone_max = max end #------------------------------------------------------------------------ # ● フレーム更新 (暗転処理) #------------------------------------------------------------------------ def update_blackout # 暗転フラグに応じて分岐 case self.black # 暗転が有効の場合 when true then # 暗転しきっていない場合 if @tone_rate != -@tone_max then # 暗転する値を求める @tone_rate = [@tone_rate - @tone_power, -@tone_max].max # 実際に暗転させる self.tone.red = @tone_rate self.tone.green = @tone_rate self.tone.blue = @tone_rate end # 暗転が無効の場合 else # まだ暗転が解除されていない場合 if @tone_rate != 0 then # 暗転解除の値を求める @tone_rate = [@tone_rate + @tone_power, 0].min # 実際に暗転を解除させる self.tone.red = @tone_rate self.tone.green = @tone_rate self.tone.blue = @tone_rate end end end #------------------------------------------------------------------------ # ● フレーム更新 #------------------------------------------------------------------------ def update # 継承先のスーパークラスの処理に移行 super # キャラクターが無効な場合 if @character == nil then # メソッドを返す return end # キャラクターの現在位置を取得 x = @character.x y = @character.y # 遮光フラグを作成 blind = false # 機能が無効化されている場合 if $game_switches[MINTO::Not_Blind_Switch] == true then # メソッドを返す return end # キャラクターのタイプに応じて分岐 case @character # プレイヤー when Game_Player then # 遮光フラグをオン blind = true # イベント when Game_Event then # イベントの名前に 影 が含まれている場合 if @character.event.name.include?("影") == true then # 遮光フラグをオン blind = true # イベントの名前に 影 が含まれている場合 elsif @character.event.name.include?("遮光") == true then # 遮光フラグをオン blind = true end end # 足跡作成フラグが有効な場合 if blind == true # 一歩左のタイルが遮光タイル2の場合 if blind_left_include?(x - 1, y) == true then # 暗転開始 blackout(0, 16, 64) # 現在のタイルが遮光タイル1の場合 elsif blind_include?(x, y) == true then # 暗転開始 blackout(0, 16, 64) # 現在のタイルが遮光タイル以外の場合 else # 暗転解除 blackout(1, 16, 64) end # 暗転を更新 update_blackout end end end #============================================================================== # ■ Game_Map #------------------------------------------------------------------------------ #  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。 # このクラスのインスタンスは $game_map で参照されます。 #============================================================================== class Game_Map #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :map # マップの情報 end #============================================================================== # ■ Sprite_Character #------------------------------------------------------------------------------ #  キャラクター表示用のスプライトです。Game_Character クラスのインスタンスを # 監視し、スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Character < Sprite_Base #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :black # 暗転フラグ #-------------------------------------------------------------------------- # ● システムインクルード #-------------------------------------------------------------------------- include(Close_Light_Module) # 遮光演出モジュール end # 遮光セット MINTO_Blind.blind_set end