module Minkoff class ABS ENABLED = true def initialize @enemies = [] @cooldown = 0 end def main for event in $game_map.events.values for monster in $data_enemies.compact if event.event.name == monster.name @enemies.push(ABS_Enemy.new(monster, event)) break end end end end def update for enemy in @enemies if $game_player.minkoff_abs_in_range?(enemy.event, 1) and $game_player.minkoff_abs_facing?(enemy.event) and Input.trigger?(Input::SHIFT) and @cooldown == 0 enemy.engage unless enemy.engaged enemy.attack_effect($game_party.actors[0]) if enemy.dead? enemy.event.erase @enemies.delete(enemy) end $game_player.animation_id = $game_party.actors[0].animation1_id enemy.event.animation_id = $game_party.actors[0].animation2_id @cooldown = 25 end enemy.update end @cooldown -= 1 if @cooldown > 0 end class ABS_Enemy < Game_Enemy attr_reader :event attr_reader :engaged def initialize(monster, event) minkoff_abs_initialize @enemy_id = monster.id @battler_name = monster.battler_name @battler_hue = monster.battler_hue @hp = maxhp @sp = maxsp @monster = monster @event = event @cooldown = 0 end def update if @engaged if @cooldown == 0 and @event.minkoff_abs_facing?($game_player) and @event.minkoff_abs_in_range?($game_player, 1) $game_party.actors[0].attack_effect(self) $game_temp.gameover = $game_party.actors[0].dead? $game_map.events[@event.id].animation_id = animation1_id $game_player.animation_id = animation2_id @cooldown = 75 elsif !@event.minkoff_abs_in_range?($game_player, 7) @engaged = false @event.move_type = @old_move_type end elsif @event.minkoff_abs_facing?($game_player) and @event.minkoff_abs_in_range?($game_player) engage end @cooldown -= 1 if @cooldown > 0 end def engage @engaged = true @old_move_type = @event.move_type @event.move_type = 2 end end endendif Minkoff::ABS::ENABLED class Scene_Map @@_minkoff_abs = Minkoff::ABS.new alias minkoff_abs_main main def main @@_minkoff_abs.main minkoff_abs_main end alias minkoff_abs_update update def update @@_minkoff_abs.update minkoff_abs_update end end class Game_Character attr_accessor :move_type attr_accessor :move_frequency attr_accessor :move_speed attr_accessor :character_name attr_reader :event def minkoff_abs_facing?(event) case self.direction when 2 return true if event.y > self.y when 4 return true if event.x < self.x when 6 return true if event.x > self.x when 8 return true if event.y < self.y else return false end end def minkoff_abs_in_range?(event, range = 5) x = (self.x - event.x).abs y = (self.y - event.y).abs return x + y <= range end end class Game_Battler alias minkoff_abs_initialize initialize def initialize minkoff_abs_initialize end endend