All pastes #31480 Raw Edit

Mine

public text v1 · immutable
#31480 ·published 2005-11-28 02:24 UTC
rendered paste body
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