#============================================================================== # ■ XP-RGSS-44-V3 サイドビュー戦闘[Sprite_Battler(base)] by Claimh #------------------------------------------------------------------------------ # バトラーのモーション制御部分。ここは基本部分の処理を細分化してる。 #------------------------------------------------------------------------------ #【再定義】Spriteset_Battle : 全て #============================================================================== #============================================================================== # ■ Sprite_Battler #------------------------------------------------------------------------------ #  バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、 # スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Battler < RPG::Sprite #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :battler # バトラー #-------------------------------------------------------------------------- # ● オブジェクト初期化 # viewport : ビューポート # battler : バトラー (Game_Battler) #-------------------------------------------------------------------------- def initialize(viewport, battler = nil) super(viewport) self.battler = battler init_direct_attack @battler_visible = false end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose if self.bitmap != nil self.bitmap.dispose end super end #-------------------------------------------------------------------------- # ● バトラー設定 #-------------------------------------------------------------------------- def battler=(bt) @battler = bt @mt_mode = MT_START @f_count = Setting::STAY_FRAME @pattern = 0 return if bt.nil? case @battler when Game_Actor @bt_data = ActorData.new(@battler.id) when Game_Enemy @bt_data = EnemyData.new(@battler.id) end end #-------------------------------------------------------------------------- # ● 近接攻撃設定値初期化 #-------------------------------------------------------------------------- def init_direct_attack @direct_attack_cnt = 0 @direct_attack_phase = 0 @direct_move_cnt = 0 @battler_x_plus = 0 @battler_y_plus = 0 @throw_sprite = nil @magic_wait = false @item_wait = false @win_wait = false unless @battler.nil? @battler.target_x = 0 @battler.target_y = 0 end end #-------------------------------------------------------------------------- # ● スプライト動作中? #-------------------------------------------------------------------------- def effect? ret = super return ret if @battler.nil? if @direct_attack_phase == 0 return ret else return false end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super # バトラーが nil の場合 if @battler == nil self.bitmap = nil loop_animation(nil) return end motion_update motion_control loop_anime_update # 不可視の場合 unless @battler_visible battler_appear end # 可視の場合 if @battler_visible blink_update battler_escape # 逃走 battler_white_flash # 白フラッシュ battler_animation # アニメーション battler_damage # ダメージ battler_collapse # コラプス end # 蘇生処置 if !@battler.dead? and @battler_corpse and @battler.revive_delay appear @pattern = 0 draw_stay_graphic @battler.dead_delay = true @battler.revive_delay = false @battler_corpse = false end # スプライトの座標を設定 self.x = @battler.screen_x + @battler_x_plus self.y = @battler.screen_y + @battler_y_plus self.z = @battler.screen_z unless @throw_sprite.nil? @throw_sprite.x = @battler.screen_x @throw_sprite.y = @battler.screen_y @throw_sprite.z = @battler.screen_z end end #-------------------------------------------------------------------------- # ● ループアニメーションupdate #-------------------------------------------------------------------------- def loop_anime_update # アニメーション ID が現在のものと異なる場合 if @battler.damage.nil? and @battler.state_animation_id != @state_animation_id @state_animation_id = @battler.state_animation_id loop_animation($data_animations[@state_animation_id]) end end #-------------------------------------------------------------------------- # ● 明滅update #-------------------------------------------------------------------------- def blink_update # 明滅 if @battler.blink blink_on else blink_off end end #-------------------------------------------------------------------------- # ● バトラー出現 #-------------------------------------------------------------------------- def battler_appear # 出現 if !@battler.hidden and !@battler.dead? and (@battler.damage.nil? or @battler.damage_pop) appear @battler_visible = true @battler.mt_mode = MT_STAY end end #-------------------------------------------------------------------------- # ● バトラー逃走 #-------------------------------------------------------------------------- def battler_escape if @battler.hidden $game_system.se_play($data_system.escape_se) escape @battler_visible = false end end #-------------------------------------------------------------------------- # ● バトラー白フラッシュ #-------------------------------------------------------------------------- def battler_white_flash if @battler.white_flash whiten @battler.white_flash = false end end #-------------------------------------------------------------------------- # ● バトラーアニメーション #-------------------------------------------------------------------------- def battler_animation if @battler.animation_id != 0 animation = $data_animations[@battler.animation_id] animation(animation, @battler.animation_hit) @battler.animation_id = 0 end end #-------------------------------------------------------------------------- # ● バトラーダメージ #-------------------------------------------------------------------------- def battler_damage if @battler.damage_pop unless @battler.damage.nil? damage(@battler.damage, @battler.critical) @battler.damage = nil @battler.critical = false end @battler.damage_pop = false end end #-------------------------------------------------------------------------- # ● バトラーコラプス #-------------------------------------------------------------------------- def battler_collapse if @battler.damage.nil? and @battler.dead? case @battler when Game_Actor $game_system.se_play($data_system.actor_collapse_se) draw_dead_graphic when Game_Enemy @pattern = 0 draw_stay_graphic collapse $game_system.se_play($data_system.enemy_collapse_se) end @battler_visible = false @battler.mt_mode = MT_DEAD end end end