#============================================================================== # ■ 動くアクター(バトル) by Claimh #------------------------------------------------------------------------------ #  ・バトル画面にて、アクターが動きます。 # ・基本セットの設定部分さえあれば、動作します。 # ・Sprite_Battlerのupdateをかなり改造しました。併用はかなりきついです。 #============================================================================== #============================================================================== # ■ Sprite_Battler #============================================================================== class Sprite_Battler < RPG::Sprite #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_move_actor initialize def initialize(viewport, battler = nil) initialize_move_actor(viewport, battler) @move_index = Move_Actor::WALK_SPEED-1 @dead_already = false @battler_corpse = false end #-------------------------------------------------------------------------- # ● フレーム更新(再定義)※かなり書き換え #-------------------------------------------------------------------------- def update super # バトラーが nil の場合 if @battler == nil self.bitmap = nil loop_animation(nil) return end # ファイル名か色相が現在のものと異なる場合 if (@battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue) and !@battler_corpse and !@battler.dead? if !@battler.is_a?(Game_Actor) # ビットマップを取得、設定 @battler_name = @battler.battler_name @battler_hue = @battler.battler_hue self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue) @width = bitmap.width @height = bitmap.height self.ox = @width / 2 self.oy = @height end # 戦闘不能または隠れ状態なら不透明度を 0 にする if @battler.dead? or @battler.hidden if @battler.is_a?(Game_Enemy) or (@battler.is_a?(Game_Actor) and @battler.hidden) self.opacity = 0 elsif !@dead_already draw_actor_corpse end end end # アニメーション 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 # 表示されるべきアクターの場合 if @battler.is_a?(Game_Actor) and @battler_visible # メインフェーズでないときは不透明度をやや下げる if $game_temp.battle_main_phase self.opacity += 3 if self.opacity < 255 else self.opacity -= 3 if self.opacity > 207 end end # 明滅 if @battler.blink blink_on else blink_off end # 不可視の場合 unless @battler_visible # 出現 if not @battler.hidden and not @battler.dead? and (@battler.damage == nil or @battler.damage_pop) appear @battler_visible = true end if @battler.dead? and (@battler.damage == nil or @battler.damage_pop) and @battler.is_a?(Game_Actor) appear draw_actor_corpse @battler_visible = true @battler.dead_delay = true @battler.revive_delay = false @battler_corpse = true end end # 可視の場合 if @battler_visible and !@battler_corpse # 逃走 if @battler.hidden $game_system.se_play($data_system.escape_se) escape @battler_visible = false end # 白フラッシュ if @battler.white_flash whiten @battler.white_flash = false end # アニメーション if @battler.animation_id != 0 animation = $data_animations[@battler.animation_id] animation(animation, @battler.animation_hit) @battler.animation_id = 0 end # ダメージ if @battler.damage_pop damage(@battler.damage, @battler.critical) @battler.damage = nil @battler.critical = false @battler.damage_pop = false end # コラプス if @battler.damage == nil and @battler.dead? if @battler.is_a?(Game_Enemy) $game_system.se_play($data_system.enemy_collapse_se) else $game_system.se_play($data_system.actor_collapse_se) end if @battler.is_a?(Game_Actor) and @battler.dead_delay appear draw_actor_corpse @battler_corpse = true else collapse if @battler.is_a?(Game_Enemy) @battler_visible = false end end end end # アクターの描写 if @battler.is_a?(Game_Actor) @move_index += 1 if !@battler.dead? and (@move_index % Move_Actor::WALK_SPEED) == 0 @move_index = 0 if @move_index == (Move_Actor::WALK_SPEED * 4) draw_move_actor # 蘇生処置 elsif !@battler.dead? and @battler_corpse and @battler.revive_delay appear @move_index = Move_Actor::WALK_SPEED-1 @battler_corpse = false @battler_visible = true @battler.dead_delay = true @battler.revive_delay = false @dead_already = false end # 拡大 self.zoom_x = 2.0 self.zoom_y = 2.0 end # スプライトの座標を設定 self.x = @battler.screen_x self.y = @battler.screen_y self.z = @battler.screen_z end #-------------------------------------------------------------------------- # ● アクター表示 #-------------------------------------------------------------------------- def draw_move_actor # ビットマップを取得、設定 @battler_name = @battler.character_name @battler_hue = @battler.character_hue self.bitmap = RPG::Cache.character(@battler_name, @battler_hue) cw = self.bitmap.width / 4 ch = self.bitmap.height / 4 @width = cw @height = ch x_index = @move_index / Move_Actor::WALK_SPEED * cw y_index = 0 self.src_rect.set(x_index, y_index, cw, ch) self.ox = @width / 2 self.oy = @height end #-------------------------------------------------------------------------- # ● 戦闘不能表示 #-------------------------------------------------------------------------- def draw_actor_corpse # ビットマップを取得、設定 @battler_name = Move_Actor::CORPSE_FILE[@battler.id][0] @battler_hue = @battler.character_hue self.bitmap = RPG::Cache.character(@battler_name, @battler_hue) cw = self.bitmap.width / 4 ch = self.bitmap.height / 4 x_index = cw * (Move_Actor::CORPSE_FILE[@battler.id][1]-1) y_index = ch * (Move_Actor::CORPSE_FILE[@battler.id][2]-1) @width = cw @height = ch # 転送元の矩形を設定 self.src_rect.set(x_index, y_index, cw, ch) self.ox = @width / 2 self.oy = @height end end class Game_Battler attr_accessor :dead_delay # 戦闘不能効果遅延フラグ attr_accessor :revive_delay # 蘇生効果遅延フラグ #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_move_actor initialize def initialize initialize_move_actor @dead_delay = false @revive_delay = false end end class Scene_Battle #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示) #-------------------------------------------------------------------------- alias update_phase4_step5_move_actor update_phase4_step5 def update_phase4_step5 update_phase4_step5_move_actor for target in @target_battlers if target.is_a?(Game_Actor) if target.dead? target.dead_delay = true target.revive_delay = false elsif !target.revive_delay and !target.dead? # 蘇生効果遅延 target.revive_delay = true end end end end end