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
end
end
if 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
end
end