#◆◇◆◇◆ 明かりスクリプト ver 1.10 ◇◆◇◆◇ # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin セクション指定上下関係 鏡の壁スクリプト ↓ このスクリプト 導入場所の注意 エイリアスで構成されていますので、 出来るだけ下のほうに導入してください。 更新履歴 ver 1.10 イベントごとに明かりの操作機能を追加。 プレイヤーにも設定可能にしました。 説明 プレイヤーとイベントに明かりを設定出来るようにします。 ◆ 設定方法及び仕様(イベントの場合) 設定にはイベントの名前を 明かり1 といったように記入してください。 専用のアニメーションを持った明かりが作成されます。 ただし、明かりの文字は必ず含ませてください。 この明かりは画面の色調よりも前面に出るため、 明かりの内部だけは明るい感じになります。 実際の明かりのデータはカスタマイズで設定してください。 明かり1 なら when "明かり1" で設定したデータになります。 明かりはイベントの不透明度と同期して強さが変化します。 イベントが完全に透明になれば、明かりも完全に消えますので、 明かりを個別に消したい場合は、 移動ルートなどで対象イベントの不透明度を0にしてください。 また、指定したIDの変数でも マップ全ての明かりの強さを一括で管理することも出来ます。 変数の値が 1 なら1フレームで1ずつ明るくなり、 255なら一瞬。 -1なら1フレームで1ずつ明かりが弱くなります。 何らかの値が入っていれば常に変化しますので、 必要ない場合は0にしておいてください。 明かりを途中で変える場合は、 イベントの内容の「最後」に注釈を置き、 内容を 明かり1 といったように 明かりの名前を記入してください。 そのページに切り替わった瞬間に変更されます。 ◆ 設定方法及び仕様(プレイヤーの場合) 設定にはイベントコマンドの スクリプト で、 明かり作成 明かり1 といったように 明かり作成 明かりの名前 と記入してください。 プレイヤーに明かりが表示されます。 実際の明かりのデータはカスタマイズで設定してください。 明かり作成 明かり1なら when "明かり1" で設定したデータになります。 プレイヤーの明かりは指定したIDの変数と同期して変化します。 例えば、Light_Variables のIDの変数の値が200なら、 プレイヤーの明かりは2倍の大きさになります。 Alpha_Variables のIDの変数が160なら、 プレイヤー明かりの透明度は160となります。 尚、255以上の値は無効です。 スキルやアイテムのコモンイベントで実行して、 その後は通常のコモンイベントで 並列処理処理で変化させるといった使い方も出来ます。 独自の画像を用意したい場合は 192 * 48 規格の画像を用意し、 1コマ 48 * 48 規格で4コマを横につなげてください。 左から順にアニメします。 明かり用の画像はピクチャーフォルダにインポートしてください。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # 明かりスクリプトを有効化 ( true で有効 / false で無効 ) RGSS["Light_Sprite"] = true end if MINTO::RGSS["Light_Sprite"] == true then #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズを行うモジュールです。 #============================================================================== module MINTO # 明かりの強さを一括管理する変数のID Light_Master_ID = 1 # プレイヤーライトの大きさを管理する変数のID(変数の値は200が基本です) # (200で拡大率2倍です) Light_Variables = 2 # プレイヤーライトの強さを管理する変数のID(変数の値は160が基本です) Alpha_Variables = 3 #-------------------------------------------------------------------------- # ● 明かりのセット # name : イベントの名前 #-------------------------------------------------------------------------- def self.light_set(name) # イベント名に応じて分岐 case name # イベントの名前が 明かり1 の場合 when "明かりP" then # data = [画像ファイル名, Y座標修正値, 大きさ(通常2。 小数点可)] data = ["Light_Sprite02", 32, 2] when "明かり1" then # data = [画像ファイル名, Y座標修正値, 大きさ(通常2。 小数点可)] data = ["Light_Sprite02", 32, 2] # イベントの名前が 明かり2 の場合 when "明かり2" then # data = [画像ファイル名, Y座標修正値, 大きさ(通常2。 小数点可)] data = ["light_anime", 48, 2] # それ以外の名前の場合 else data = ["", 0, 1] end # 設定データを返す return data.dup end end #============================================================================== # ■ Light_Sprite #------------------------------------------------------------------------------ # マップでの明かりを管理するスプライトクラスです。 #============================================================================== class Light_Sprite < Sprite #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :name # 明かりに使う画像 #-------------------------------------------------------------------------- # ● オブジェクト初期化 # character : 対象キャラクター # event_name : イベントの名前 #-------------------------------------------------------------------------- def initialize(character, event_name) # スーパークラスを実行 super() # 明かりのデータを取得 @data = MINTO.light_set(event_name) # ファイルネームを読み込む @name = @data[0] # スプライトを保存 @character = character # 明かり用のビットマップを作成 self.bitmap = RPG::Cache.picture(@name) # 基本座標をセット self.x = @character.x self.y = @character.y # 転移座標をセット self.ox = 24 self.oy = @data[1] # 完全不透明でない限りは明かりを表示させる self.visible = (@character.opacity != 0) # 明かりの不透明度を調節 self.opacity = [35 + @character.opacity / 2, 160].min # 明かりを加算表示にする self.blend_type = 1 # 明かりをズームさせる self.zoom = @data[2] # 色を白っぽくする self.tone.red = 64 self.tone.green = 64 self.tone.blue = 64 # ブリンクカウントを初期化 @blink_count = 0 # フレーム更新 update end #-------------------------------------------------------------------------- # ● データのセット # name : 設定データの名前 #-------------------------------------------------------------------------- def set_data(name) # 設定データを更新 @data = MINTO.light_set(name) # 明かり用のビットマップを再作成 self.bitmap = RPG::Cache.picture(@data[0]) self.oy = @data[1] self.zoom = @data[2] end #-------------------------------------------------------------------------- # ● ズーム # n : ズーム倍率 #-------------------------------------------------------------------------- def zoom=(n) self.zoom_x = n self.zoom_y = n end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose # スーパークラスを実行 super end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super # 基本情報を更新 self.x = @character.x self.y = @character.y self.visible = (@character.opacity != 0) # 一括変更変数の値が有効な場合 if $game_variables[MINTO::Light_Master_ID] != 0 then self.opacity += $game_variables[MINTO::Light_Master_ID] self.opacity = [self.opacity, 160].min # 一括変更変数の値が無効な場合 else self.opacity = 35 + @character.opacity / 2 end # 点滅カウントを更新 @blink_count = (@blink_count + 1) % 32 # 転送元の矩形を設定 case @blink_count when 0...8 then self.src_rect.set(48 * 0, 0, 48, 48) when 8...16 then self.src_rect.set(48 * 1, 0, 48, 48) when 16...24 then self.src_rect.set(48 * 2, 0, 48, 48) else self.src_rect.set(48 * 3, 0, 48, 48) end end #-------------------------------------------------------------------------- # ● フレーム更新(プレイヤー) #-------------------------------------------------------------------------- def update_player # 基本情報を更新 self.x = @character.x self.y = @character.y self.visible = (@character.opacity != 0) self.opacity = $game_variables[MINTO::Alpha_Variables] self.zoom = $game_variables[MINTO::Light_Variables] / 100.0 # 点滅カウントを更新 @blink_count = (@blink_count + 1) % 32 # 転送元の矩形を設定 case @blink_count when 0...8 then self.src_rect.set(48 * 0, 0, 48, 48) when 8...16 then self.src_rect.set(48 * 1, 0, 48, 48) when 16...24 then self.src_rect.set(48 * 2, 0, 48, 48) else self.src_rect.set(48 * 3, 0, 48, 48) end end end #============================================================================== # ■ Game_Event #------------------------------------------------------------------------------ #  イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理 # イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。 #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :event # イベント end #============================================================================== # ■ Spriteset_Map #------------------------------------------------------------------------------ #  マップ画面のスプライトやタイルマップなどをまとめたクラスです。 # このクラスは Scene_Map クラスの内部で使用されます。 #============================================================================== class Spriteset_Map #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :character_sprites # キャラクター attr_reader :party_sprites # パーティースプライト end #============================================================================== # ■ Sprite_Character (分割定義 2) #------------------------------------------------------------------------------ #  キャラクター表示用のスプライトです。 # Game_Character クラスのインスタンスを監視し、 # スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Character < RPG::Sprite #-------------------------------------------------------------------------- # ● 明かりの設定 # name : 明かりの名前 #-------------------------------------------------------------------------- def light_set(name) # 明かりが有効な場合 if @light_sprite != nil and not @character.is_a?(Game_Event) # 明かりを解放 @light_sprite.bitmap.dispose @light_sprite.dispose @light_sprite = nil end # 明かりを作成 @light_sprite = Light_Sprite.new(self, name) end #-------------------------------------------------------------------------- # ● 解放 # alias : dispose_Light_Sprite #-------------------------------------------------------------------------- # dispose_Light_Sprite が未定義の場合エイリアスを実行する if method_defined?("dispose_Light_Sprite") == false then alias :dispose_Light_Sprite :dispose def dispose # 明かりが存在する場合 if @light_sprite != nil then # 明かりを解放 @light_sprite.bitmap.dispose @light_sprite.dispose end # 元の処理を実行 dispose_Light_Sprite end end #-------------------------------------------------------------------------- # ● フレーム更新 # alias : update_Light_Sprite #-------------------------------------------------------------------------- alias :update_Light_Sprite :update def update # 元の処理を実行 update_Light_Sprite # 明かりが未作成の場合 if @light_sprite == nil then # キャラクターがイベントの場合 if @character.is_a?(Game_Event) == true then # イベントの名前に 明かり が含まれる場合 if @character.event.name.include?("明かり") == true then # 明かりを作成 @light_sprite = Light_Sprite.new(self, @character.event.name) end end # 明かりが作成されている場合 elsif @light_sprite != nil and @character.is_a?(Game_Event) # 明かりが有効で且つ、有効なイベントの場合 if @light_sprite != nil and @character.list != nil then # 最後の実行内容を取得 last_code = @character.list[@character.list.size-2] # 最後の内容が注釈の場合 if last_code.code == 108 then # 明かりのデータを変更 @light_sprite.set_data(last_code.parameters[0]) end end # 明かりを更新 @light_sprite.update # プレイヤー用の明かりがある場合 elsif @light_sprite != nil # 明かりを更新 @light_sprite.update_player end end end #============================================================================== # ■ Interpreter (分割定義 7) #------------------------------------------------------------------------------ #  イベントコマンドを実行するインタプリタです。 # このクラスは Game_System クラスや Game_Event クラスの内部で使用されます。 #============================================================================== class Interpreter #-------------------------------------------------------------------------- # ● 明かりを作成 #-------------------------------------------------------------------------- def light_set # マップ軽量化が存在する場合 if $onscreen # プレイヤーのスプライトを取得 user = $scene.spriteset.party_sprites[0] else # プレイヤーのスプライトを取得 id = $scene.spriteset.character_sprites.size - 1 user = $scene.spriteset.character_sprites[id] end # 明かりの名前を取得 name = @list[@index].parameters[0].split(/明かり作成 /)[1] # 実際に明かりを作成 user.light_set(name) return end #-------------------------------------------------------------------------- # ● スクリプト # alias : command_355_Light_Sprite #-------------------------------------------------------------------------- alias :command_355_Light_Sprite :command_355 def command_355 # マップ画面で且つ、スクリプトが明かり作成の場合 if $scene.is_a?(Scene_Map) and @list[@index].parameters[0].to_s.include?("明かり作成 ") then # 明かりを作成 light_set return end # 元の処理を実行 command_355_Light_Sprite end end #============================================================================== # ■ Scene_Map #------------------------------------------------------------------------------ #  マップ画面の処理を行うクラスです。 #============================================================================== class Scene_Map #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :spriteset # キャラクター end end