# ■ アニメーションするエネミー(改 RGSS3仕様改変) #  参考: Supponの意味不明ブログ 様 #     http://supponweblog.blog88.fc2.com/blog-entry-43.html #------------------------------------------------------------------------------ # 戦闘中にエネミーをゆらゆらと動かしたり、 # キャラのようにアニメーションさせたり、音を出したりします。 (改造 By むー) #============================================================================== module MOO_ENEMY_ANIMATION # メモ欄に書くゆらゆら用ワード MEMO = "エネミーアニメーション" # エネミーのメモ欄にこの文字があると、ゆらゆらと動きます。 # 他とかぶる場合は変えて下さい。 # アニメーション設定 ANIME = [ [32,"グリフォン1","グリフォン2","グリフォン3","グリフォン2",10,1,"Audio/SE/wind1",80,100], [33,"ラミア1","ラミア2","ラミア3","ラミア2",25,0], ] # [ # [1,"スライム1","スライム2","スライム3","スライム2",20,2,"Audio/SE/wind1",60,100], # [2,"こうもり1","コウモリU","こーもり三","こうもり1",10,2,"Audio/SE/wind3",50,80], # [3,"魔王","デーモン","魔神","魔神ちゃん",50,0], # ] # # このように記述します。最初と最後の[]はそのままにしておいて下さい。 # # [エネミーID,"画像1","画像2","画像3","行動不能時画像",アニメーション間隔,音番号,"SEファイル",音量,ピッチ] # # 本機能は「エネミーアニメーション」とは無関係で動くため、 # エネミーのメモにゆらゆら用ワードがなくても構いません。 # # ・エネミーIDは、アニメーションさせたい敵のIDです。グループIDではありません。 # # ・画像1〜3は、歩行グラフィックの感覚です。 #   1,2,3それぞれ歩行グラフィックの左、中、右のような感じです。 #   それをエネミーグラフィックで指定します。""で囲って下さい。 #   途中で変身する場合、変身対象も動かす場合はそれにも適用して下さい。 #   メニューのツール→素材管理→Graphics/Battlerにある画像を指定します。 # # ・行動不能時画像 #   麻痺など行動不能に陥ったエネミーはアニメーションを停止します。 #   その時に使うエネミー画像を指定します。これも画像1〜3と同様に、 #   メニューのツール→素材管理→Graphics/Battlerにある画像を指定します。 #   画像1〜3の中と同じ画像でも、いっこうに構いません。""で囲って下さい。 # ちなみにその場で止まるので、飛行エネミーが落下するなどの動作はありません。 # # ・アニメーション間隔 # 歩行グラフィックのようにアニメーションをする場合の、 # 画像が切り替わる間隔を指定します。適当な間隔をお試しあれ。 # # ・音番号 # アニメーションは3段階に分かれているのですが、羽ばたいている音を出したい # 時などは、画像1〜3のどの瞬間に音を出すかを決めます。その番号です。 # 1と指定すれば、アニメーションが画像1の時に音を出します。 # 1→2→3→2→1→2→3と繰り返すので、2に入れるとうるさいかも知れません。 # 音が不要な場合は1,2,3以外の数字を入れて下さい。不要でもこの項目は必須です。 # # ・SEファイル #   羽ばたく音などを鳴らしたい時に指定します。音番号が1〜3の時だけ有効です。 # Audio/SE/〜〜とフルに書いて下さい。""で囲って下さい。 # 音番号を1〜3以外に指定した場合は、SEを指定しなくても構いません。 # # ・音量 # SEの音量です。あまり大きいとやかましいです。控えめがいいでしょう。 # 音番号が1〜3の時だけ有効です。 # 音番号を1〜3以外に指定した場合は、音量を指定しなくても構いません。 # # ・ピッチ # SEのピッチです。音量と合わせ、サウンドテストにて # アニメーションの間隔でサウンド名を連打してみると実感が湧くと思います。 # 音番号が1〜3の時だけ有効です。 # 音番号を1〜3以外に指定した場合は、ピッチを指定しなくても構いません。 # # 行動不能になったら飛んでる敵が落ちるなどという面倒な処理はしていません。 # また、ゆらゆら動くのと併用する場合、敵が多くなればなるほど重くなります。 # # 設定記述ミスによるエラーチェックはしていません。 end #============================================================================== # ■ Game_Enemy #------------------------------------------------------------------------------ #  敵キャラを扱うクラスです。このクラスは Game_Troop クラス($game_troop)の # 内部で使用されます。 #============================================================================== class Game_Enemy < Game_Battler attr_accessor :battler_name end #============================================================================== # ★付きコメントは「Supponの意味不明ブログ」様の仕様部分です。 # 記号のないコメント部分は自作部分です。 #============================================================================== class Sprite_Battler < Sprite_Base #============================================================================ # ◎ オブジェクト初期化 #============================================================================ alias initialize_enemy_animation initialize def initialize(viewport, battler = nil) initialize_enemy_animation(viewport, battler) super(viewport) @battler = battler @battler_visible = false @effect_type = nil # エフェクトの種類 @effect_duration = 0 # エフェクトの残り時間 @t = rand(720) #★ ゆらゆら繰り返し用時間初期値 @c = 1 # アニメーション用フラグ初期値 @d = 1 # アニメーション用フラグ初期値 end #============================================================================ # ◎ フレーム更新 #============================================================================ alias update_enemy_animation update def update super if @battler @use_sprite = @battler.use_sprite? if @use_sprite motion #★ ゆらゆら動く位置の計算呼び出し self.bitmap = Cache.battler($data_enemies[@battler.enemy_id].battler_name, 0) self.x = @battler.screen_x + @ax #★ X座標に動作分プラス self.y = @battler.screen_y - self.bitmap.height + @ay #★ Y座標に動作分プラス self.z = @battler.screen_z end update_enemy_animation setup_new_effect setup_new_animation update_effect # 行動がアクターかエネミーか if @battler.actor? # アクターなら素通り else # エネミーでかつアニメーションリストが設定されている場合 if MOO_ENEMY_ANIMATION::ANIME.size > 0 # リストループ for enemyindex in MOO_ENEMY_ANIMATION::ANIME # 各値の取得 enemyid = enemyindex[0] # エネミーID enemy0001 = enemyindex[1] # 画像1 enemy0002 = enemyindex[2] # 画像2 enemy0003 = enemyindex[3] # 画像3 enemymove = enemyindex[4] # 行動不能時画像 # 戦闘中の対象バトラーのIDがリストのエネミーIDと一致した場合 if @battler.enemy_id == enemyid # 普通に動ける状態の場合 if @battler.movable? # アニメーション時間加減変数 @c += 1 * @d # @dで時間カウント加減(1→n→n*2→n→1→n→n*2...) # 画像1を指定 if @c == 1 # 画像1を指定 $game_troop.members[@battler.index].battler_name = enemy0001 # SEが指定されていれば鳴らす if enemyindex[6] == 1 Audio.se_play(enemyindex[7], enemyindex[8], enemyindex[9]) end # 時間カウントに使う変数指定 @d = 1 end # 画像2を指定 if @c == enemyindex[5] # 画像2を指定 $game_troop.members[@battler.index].battler_name = enemy0002 # SEが指定されていれば鳴らす if enemyindex[6] == 2 Audio.se_play(enemyindex[7], enemyindex[8], enemyindex[9]) end end # 画像3を指定 if @c == enemyindex[5] * 2 # 画像3を指定 $game_troop.members[@battler.index].battler_name = enemy0003 # SEが指定されていれば鳴らす if enemyindex[6] == 3 Audio.se_play(enemyindex[7], enemyindex[8], enemyindex[9]) end # 時間カウントに使う変数指定 @d = -1 end else # 行動不能の場合は行動不能時画像を指定 $game_troop.members[@battler.index].battler_name = enemymove end # 画像更新 #self.bitmap = Cache.battler($data_enemies[@battler.enemy_id].battler_name, @battler.battler_hue) end end end end setup_new_effect update_effect else self.bitmap = nil @effect_type = nil end end #============================================================================== # ゆらゆら動く #============================================================================== def motion #★ return unless @battler.movable? if @battler.enemy_id != nil # エネミーのメモ欄にキーワードがあった場合 if $data_enemies[@battler.enemy_id].note.include?(MOO_ENEMY_ANIMATION::MEMO) if @battler.movable? # エネミーが普通に動ける状態の場合はゆらゆら計算(ここを変えれば揺れ方が変わる) @ax = (Math.sin(Math::PI * @t * 2 / 360.0) * 10).ceil @ay = (Math.sin(Math::PI * @t * 1 / 360.0) * 4).ceil @t += 1 @t = 0 if @t >= 720 else # 行動不能の場合は位置を固定 @ax = 0 @ay = 0 @t += 0 end else # キーワードがない場合は位置を固定 @ax = 0 @ay = 0 @t += 0 end end end end