#◆◇◆◇◆ 息遣いスクリプトVX ver 1・10 ◇◆◇◆◇ # 全マスタースクリプト共通スクリプト # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin 更新履歴 ver 1.10(2011/01/24) 息遣いの無効化ステートを複数化 ver 1.09(2010/07/25) 息遣いが機能していなかったミスを修正 ver 1.08(2010/04/10) 回想領域さんの戦闘内カメラ設置に対応 (対象スクリプトよりも下に導入してください) ver 1.07(2010/03/22) 息遣いの無効化スイッチを設置 ver 1.06(2009/03/17) 一部の挙動をこっそり変更 ver 1.05(2009/03/11) 一部の挙動を変更 ver 1.04(2009/02/02) 息遣いの無効化ステートを設置 ver 1.03(2009/02/01) 「肩で息」を疑似再現。 ver 1.02 後期RGSS用に仕様を変更。 ver 1.01 他サイトさんのXP戦闘に対応。 説明 フロントビューのバトラーは静止画のため、 "ただ立ってるだけ"という感じが正直否めません。 このスクリプトを導入すると息遣い演出が擬似再現され、 そうした虚しさを緩和します。 なお、「肩で息」を再現してはおりますが、 処理の性質上、どうしても補正し切れない「ブレ」が数ドット単位で発生します。 申し訳ありませんが、それは仕様ですので、予めご了承ください。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # 息遣いクリプトを有効化 ( true で有効 / false で無効 ) RGSS["息遣い"] = true end if MINTO::RGSS["息遣い"] == true then #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズを行います。 #============================================================================== module MINTO_Sprite_Battler_01 #-------------------------------------------------------------------------- # ● 息遣い無効スイッチの取得 #-------------------------------------------------------------------------- def not_breathe_switch # このIDのスイッチがオンになっている場合、息遣いを無効化します return 1 end #-------------------------------------------------------------------------- # ● 息遣い無効ステートの取得 #-------------------------------------------------------------------------- def not_breathe_state # このIDのステートになっている場合、息遣いを無効化します # 配列式で記入してください return [2, 3, 4] end #-------------------------------------------------------------------------- # ● エネミー以外の息遣いの許可フラグの取得 #-------------------------------------------------------------------------- def breathe? # true で許可 / false で不許可 return false end end #============================================================================== # ☆ MINTO_Sprite_Battler_01 #------------------------------------------------------------------------------ # Sprite_Battlerクラスの強化システムモジュールです。 #============================================================================== module MINTO_Sprite_Battler_01 #-------------------------------------------------------------------------- # ● オブジェクト初期化 # viewport : ビューポート #-------------------------------------------------------------------------- def initialize(viewport) # 息遣い用のデータを設定 @zoom_turn = 0.075 @zoom_count = 0 @zoom_puls = 100 @zoom_count = 0 @initialize = false # スーパークラスを実行 super(viewport) end #-------------------------------------------------------------------------- # ● フレーム更新(息遣い) #-------------------------------------------------------------------------- def update_standby(rate = 1.0) # バトラーが無効な場合 if @battler == nil then # メソッドを返す return end # バトラーがエネミー以外の場合 unless @battler.is_a?(Game_Enemy) then # 息遣いが許可されていない場合 unless self.breathe? then # メソッドを返す return end end # 息遣いが許可されていない場合 if $game_switches[self.not_breathe_switch] == true then # メソッドを返す return end # 息遣い無効ステートにかかっている場合 if @battler.ori_states.include_one?(not_breathe_state) == true then # メソッドを返す return end # アニメ再生中の場合 if self.animation? == true then # メソッドを返す return end # 息遣いデータの初期化済みフラグが無効な場合 if @initialize == false then # 息遣いデータの初期化済みフラグを有効にする @initialize = true # ランダムに繰り返す rand(24).times do # データを更新 update_standby end end # 息遣いカウントを加算 @zoom_count += 1 # カウントが 24 になった場合 if @zoom_count == 24 then # カウントを初期化 @zoom_count = 1 # 息遣いターンを反転 @zoom_turn *= -1 end # 息遣い用の補正値を設定 @zoom_puls -= @zoom_turn # 縦のズームを更新する self.zoom_y = (rate * @zoom_puls) / 100 end #-------------------------------------------------------------------------- # ● フレーム更新(Y座標) #-------------------------------------------------------------------------- def update_y # 対象がエネミーの場合 if @battler.class == Game_Enemy then # 基本Y座標を取得 base_y = @battler.screen_y # 補正Y座標を取得 y_puls_rate = 1.0 * @zoom_puls.ceil / 100 y_puls = (@height * y_puls_rate.ceil) - @height # Y座標を補正 self.y = @battler.screen_y + y_puls self.oy = @height + y_puls end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # コラプス実行中でない場合 if @effect_type != Sprite_Battler::COLLAPSE then # アニメ実行中でない場合 if @animation_duration == 0 then # 戦闘内カメラが導入されていない場合 unless $rsi.nil? unless $rsi["戦闘内カメラ設置"] # 息遣いを更新 update_standby end else # 息遣いを更新 update_standby end end end # スーパークラスを実行 super end end #============================================================================== # ■ Array #------------------------------------------------------------------------------ #  配列全般を扱う組み込みクラスです。 #============================================================================== class Array #-------------------------------------------------------------------------- # ● 一つでも共通する要素があるかどうかの判別 # a : 要素 #-------------------------------------------------------------------------- def include_one?(a) bool = false if self.size > a.size for i in a do bool |= self.include?(i) end else for i in self do bool |= a.include?(i) end end return bool end end #============================================================================== # ■ Game_Battler #------------------------------------------------------------------------------ #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ # スのスーパークラスとして使用されます。 #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 現在のステートの取得 #-------------------------------------------------------------------------- def ori_states return @states end end #============================================================================== # ■ Sprite_Battler #------------------------------------------------------------------------------ #  バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、 # スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Battler < Sprite_Base #-------------------------------------------------------------------------- # ● システムインクルード #-------------------------------------------------------------------------- include MINTO_Sprite_Battler_01 # みんとスプライトバトラー #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias :mint_rgss2_2_update :update def update # 元の処理を実行 mint_rgss2_2_update # Y座標の更新 update_y end end #============================================================================== # ■ Spriteset_Battle #------------------------------------------------------------------------------ #  バトル画面のスプライトをまとめたクラスです。このクラスは Scene_Battle クラ # スの内部で使用されます。 #============================================================================== class Spriteset_Battle #-------------------------------------------------------------------------- # ● カメラとバトラーの同期 #-------------------------------------------------------------------------- def update_battlers_with_camera for sprite in @enemy_sprites next if sprite.nil? || sprite.battler.nil? sprite.zoom_x = @battle_camera.zoom sprite.zoom_y = @battle_camera.zoom sprite.x = @battle_camera.battler_x(sprite.battler) sprite.y = @battle_camera.battler_y(sprite.battler) sprite.update_standby(@battle_camera.zoom) end end end end