#============================================================================== # ★ Animation_Branch ver1.01 by USK #------------------------------------------------------------------------------ # スキルやアイテムのアニメーションをミスやクリティカルに応じて変更します。 #============================================================================== =begin ・スキルやアイテムのメモ欄にと記入するとスキルが外れた  ときに設定したIDのアニメーションになります。 ・スキルやアイテムのメモ欄にと記入するとスキルがクリティ カルしたときに設定したIDのアニメーションになります。 記入例: =end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ● スキル/アイテムの使用 #-------------------------------------------------------------------------- alias :usk_mc_use_item :use_item def use_item $game_temp.item = @subject.current_action.item $game_temp.user = @subject usk_mc_use_item $game_temp.item = nil $game_temp.user = nil end #-------------------------------------------------------------------------- # ● スキル/アイテムの発動 #-------------------------------------------------------------------------- alias :usk_mc_invoke_item :invoke_item def invoke_item(target, item) usk_mc_invoke_item(target, item) target.result.shift end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp attr_accessor :target, :user, :item end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def pre_apply user = $game_temp.user item = $game_temp.item @result.clear @result.used = item_test(user, item) item.repeats.times do |i| miss = @result.used && rand >= item_hit(user, item) evad = !miss && rand < item_eva(user, item) hit = @result.used && !miss && !evad cri = hit && rand < item_cri(user, item) @result.pre_missed << miss @result.pre_evaded << evad @result.pre_critical << cri end return if item.usk_mc_animation_id == 0 unless $data_animations[item.usk_mc_animation_id].to_screen? $game_temp.target = self self.animation_id = item.animation_id $game_temp.target = nil end @animation_lock = true end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def set_screen_animation(id) @animation_lock = false self.animation_id = id @animation_lock = true end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def animation_id=(id) if @animation_lock && id > 0 @animation_lock = false else super(id) end end end #============================================================================== # ■ Game_Enemy #============================================================================== class Game_Enemy #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def animation_id=(id) if @animation_lock && id > 0 @animation_lock = false else super(id) end end end #============================================================================== # ■ Game_Action #============================================================================== class Game_Action #-------------------------------------------------------------------------- # ● ターゲットの配列作成 #-------------------------------------------------------------------------- alias :usk_mc_make_targets :make_targets def make_targets targets = usk_mc_make_targets targets.each {|target| target.pre_apply} item = $game_temp.item return targets if item.usk_mc_animation_id == 0 if $data_animations[item.usk_mc_animation_id].to_screen? m = targets.collect {|t| t.result.mode} id = item.usk_mc_animation_id if m.any? {|s| s == :cri} id = item.critical_animation elsif m.all? {|s| s == :miss || s == :evad} id = item.miss_animation end targets[0].set_screen_animation(id) end targets end end #============================================================================== # ■ Game_ActionResult #============================================================================== class Game_ActionResult attr_accessor :pre_missed, :pre_evaded, :pre_critical #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def missed pre_missed[0] end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def evaded pre_evaded[0] end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def critical pre_critical[0] end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def shift pre_missed.shift pre_evaded.shift pre_critical.shift end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def mode if !@used :no_use elsif pre_missed.any? {|b| b == false} if pre_evaded.any? {|b| b == false} if pre_critical.any? {|b| b == true} :cri else :hit end else :evad end else :miss end end #-------------------------------------------------------------------------- # ● 最終的に命中したか否かを判定 #-------------------------------------------------------------------------- def hit? @used && !missed && !evaded end #-------------------------------------------------------------------------- # ● クリア #-------------------------------------------------------------------------- alias :usk_mc_clear :clear def clear clear_pre_flags usk_mc_clear end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def clear_pre_flags @pre_missed ||= [] @pre_evaded ||= [] @pre_critical ||= [] end end #============================================================================== # ■ RPG::UsableItem #============================================================================== class RPG::UsableItem #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- alias :usk_mc_animation_id :animation_id def animation_id if $game_temp.target.nil? usk_mc_animation_id else case $game_temp.target.result.mode when :miss miss_animation when :evad miss_animation when :cri critical_animation else usk_mc_animation_id end end end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def miss_animation @miss_animation ||= @note =~ //m ? $1.to_i : @animation_id end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def critical_animation @critical_animation ||= @note =~ //m ? $1.to_i : @animation_id end end